aboutsummaryrefslogtreecommitdiffstats
path: root/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'index.html')
-rw-r--r--index.html7982
1 files changed, 0 insertions, 7982 deletions
diff --git a/index.html b/index.html
deleted file mode 100644
index f7f1716..0000000
--- a/index.html
+++ /dev/null
@@ -1,7982 +0,0 @@
-<!DOCTYPE HTML>
-<html><head><meta charset="UTF-8"><title>Mapbox.Style</title><style>html,head,body { padding:0; margin:0; }
-body { font-family: calibri, helvetica, arial, sans-serif; }</style><script type="text/javascript">
-(function() {
-'use strict';
-
-function F2(fun)
-{
- function wrapper(a) { return function(b) { return fun(a,b); }; }
- wrapper.arity = 2;
- wrapper.func = fun;
- return wrapper;
-}
-
-function F3(fun)
-{
- function wrapper(a) {
- return function(b) { return function(c) { return fun(a, b, c); }; };
- }
- wrapper.arity = 3;
- wrapper.func = fun;
- return wrapper;
-}
-
-function F4(fun)
-{
- function wrapper(a) { return function(b) { return function(c) {
- return function(d) { return fun(a, b, c, d); }; }; };
- }
- wrapper.arity = 4;
- wrapper.func = fun;
- return wrapper;
-}
-
-function F5(fun)
-{
- function wrapper(a) { return function(b) { return function(c) {
- return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };
- }
- wrapper.arity = 5;
- wrapper.func = fun;
- return wrapper;
-}
-
-function F6(fun)
-{
- function wrapper(a) { return function(b) { return function(c) {
- return function(d) { return function(e) { return function(f) {
- return fun(a, b, c, d, e, f); }; }; }; }; };
- }
- wrapper.arity = 6;
- wrapper.func = fun;
- return wrapper;
-}
-
-function F7(fun)
-{
- function wrapper(a) { return function(b) { return function(c) {
- return function(d) { return function(e) { return function(f) {
- return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };
- }
- wrapper.arity = 7;
- wrapper.func = fun;
- return wrapper;
-}
-
-function F8(fun)
-{
- function wrapper(a) { return function(b) { return function(c) {
- return function(d) { return function(e) { return function(f) {
- return function(g) { return function(h) {
- return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };
- }
- wrapper.arity = 8;
- wrapper.func = fun;
- return wrapper;
-}
-
-function F9(fun)
-{
- function wrapper(a) { return function(b) { return function(c) {
- return function(d) { return function(e) { return function(f) {
- return function(g) { return function(h) { return function(i) {
- return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };
- }
- wrapper.arity = 9;
- wrapper.func = fun;
- return wrapper;
-}
-
-function A2(fun, a, b)
-{
- return fun.arity === 2
- ? fun.func(a, b)
- : fun(a)(b);
-}
-function A3(fun, a, b, c)
-{
- return fun.arity === 3
- ? fun.func(a, b, c)
- : fun(a)(b)(c);
-}
-function A4(fun, a, b, c, d)
-{
- return fun.arity === 4
- ? fun.func(a, b, c, d)
- : fun(a)(b)(c)(d);
-}
-function A5(fun, a, b, c, d, e)
-{
- return fun.arity === 5
- ? fun.func(a, b, c, d, e)
- : fun(a)(b)(c)(d)(e);
-}
-function A6(fun, a, b, c, d, e, f)
-{
- return fun.arity === 6
- ? fun.func(a, b, c, d, e, f)
- : fun(a)(b)(c)(d)(e)(f);
-}
-function A7(fun, a, b, c, d, e, f, g)
-{
- return fun.arity === 7
- ? fun.func(a, b, c, d, e, f, g)
- : fun(a)(b)(c)(d)(e)(f)(g);
-}
-function A8(fun, a, b, c, d, e, f, g, h)
-{
- return fun.arity === 8
- ? fun.func(a, b, c, d, e, f, g, h)
- : fun(a)(b)(c)(d)(e)(f)(g)(h);
-}
-function A9(fun, a, b, c, d, e, f, g, h, i)
-{
- return fun.arity === 9
- ? fun.func(a, b, c, d, e, f, g, h, i)
- : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);
-}
-//import Native.List //
-
-var _elm_lang$core$Native_Array = function() {
-
-// A RRB-Tree has two distinct data types.
-// Leaf -> "height" is always 0
-// "table" is an array of elements
-// Node -> "height" is always greater than 0
-// "table" is an array of child nodes
-// "lengths" is an array of accumulated lengths of the child nodes
-
-// M is the maximal table size. 32 seems fast. E is the allowed increase
-// of search steps when concatting to find an index. Lower values will
-// decrease balancing, but will increase search steps.
-var M = 32;
-var E = 2;
-
-// An empty array.
-var empty = {
- ctor: '_Array',
- height: 0,
- table: []
-};
-
-
-function get(i, array)
-{
- if (i < 0 || i >= length(array))
- {
- throw new Error(
- 'Index ' + i + ' is out of range. Check the length of ' +
- 'your array first or use getMaybe or getWithDefault.');
- }
- return unsafeGet(i, array);
-}
-
-
-function unsafeGet(i, array)
-{
- for (var x = array.height; x > 0; x--)
- {
- var slot = i >> (x * 5);
- while (array.lengths[slot] <= i)
- {
- slot++;
- }
- if (slot > 0)
- {
- i -= array.lengths[slot - 1];
- }
- array = array.table[slot];
- }
- return array.table[i];
-}
-
-
-// Sets the value at the index i. Only the nodes leading to i will get
-// copied and updated.
-function set(i, item, array)
-{
- if (i < 0 || length(array) <= i)
- {
- return array;
- }
- return unsafeSet(i, item, array);
-}
-
-
-function unsafeSet(i, item, array)
-{
- array = nodeCopy(array);
-
- if (array.height === 0)
- {
- array.table[i] = item;
- }
- else
- {
- var slot = getSlot(i, array);
- if (slot > 0)
- {
- i -= array.lengths[slot - 1];
- }
- array.table[slot] = unsafeSet(i, item, array.table[slot]);
- }
- return array;
-}
-
-
-function initialize(len, f)
-{
- if (len <= 0)
- {
- return empty;
- }
- var h = Math.floor( Math.log(len) / Math.log(M) );
- return initialize_(f, h, 0, len);
-}
-
-function initialize_(f, h, from, to)
-{
- if (h === 0)
- {
- var table = new Array((to - from) % (M + 1));
- for (var i = 0; i < table.length; i++)
- {
- table[i] = f(from + i);
- }
- return {
- ctor: '_Array',
- height: 0,
- table: table
- };
- }
-
- var step = Math.pow(M, h);
- var table = new Array(Math.ceil((to - from) / step));
- var lengths = new Array(table.length);
- for (var i = 0; i < table.length; i++)
- {
- table[i] = initialize_(f, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));
- lengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0);
- }
- return {
- ctor: '_Array',
- height: h,
- table: table,
- lengths: lengths
- };
-}
-
-function fromList(list)
-{
- if (list.ctor === '[]')
- {
- return empty;
- }
-
- // Allocate M sized blocks (table) and write list elements to it.
- var table = new Array(M);
- var nodes = [];
- var i = 0;
-
- while (list.ctor !== '[]')
- {
- table[i] = list._0;
- list = list._1;
- i++;
-
- // table is full, so we can push a leaf containing it into the
- // next node.
- if (i === M)
- {
- var leaf = {
- ctor: '_Array',
- height: 0,
- table: table
- };
- fromListPush(leaf, nodes);
- table = new Array(M);
- i = 0;
- }
- }
-
- // Maybe there is something left on the table.
- if (i > 0)
- {
- var leaf = {
- ctor: '_Array',
- height: 0,
- table: table.splice(0, i)
- };
- fromListPush(leaf, nodes);
- }
-
- // Go through all of the nodes and eventually push them into higher nodes.
- for (var h = 0; h < nodes.length - 1; h++)
- {
- if (nodes[h].table.length > 0)
- {
- fromListPush(nodes[h], nodes);
- }
- }
-
- var head = nodes[nodes.length - 1];
- if (head.height > 0 && head.table.length === 1)
- {
- return head.table[0];
- }
- else
- {
- return head;
- }
-}
-
-// Push a node into a higher node as a child.
-function fromListPush(toPush, nodes)
-{
- var h = toPush.height;
-
- // Maybe the node on this height does not exist.
- if (nodes.length === h)
- {
- var node = {
- ctor: '_Array',
- height: h + 1,
- table: [],
- lengths: []
- };
- nodes.push(node);
- }
-
- nodes[h].table.push(toPush);
- var len = length(toPush);
- if (nodes[h].lengths.length > 0)
- {
- len += nodes[h].lengths[nodes[h].lengths.length - 1];
- }
- nodes[h].lengths.push(len);
-
- if (nodes[h].table.length === M)
- {
- fromListPush(nodes[h], nodes);
- nodes[h] = {
- ctor: '_Array',
- height: h + 1,
- table: [],
- lengths: []
- };
- }
-}
-
-// Pushes an item via push_ to the bottom right of a tree.
-function push(item, a)
-{
- var pushed = push_(item, a);
- if (pushed !== null)
- {
- return pushed;
- }
-
- var newTree = create(item, a.height);
- return siblise(a, newTree);
-}
-
-// Recursively tries to push an item to the bottom-right most
-// tree possible. If there is no space left for the item,
-// null will be returned.
-function push_(item, a)
-{
- // Handle resursion stop at leaf level.
- if (a.height === 0)
- {
- if (a.table.length < M)
- {
- var newA = {
- ctor: '_Array',
- height: 0,
- table: a.table.slice()
- };
- newA.table.push(item);
- return newA;
- }
- else
- {
- return null;
- }
- }
-
- // Recursively push
- var pushed = push_(item, botRight(a));
-
- // There was space in the bottom right tree, so the slot will
- // be updated.
- if (pushed !== null)
- {
- var newA = nodeCopy(a);
- newA.table[newA.table.length - 1] = pushed;
- newA.lengths[newA.lengths.length - 1]++;
- return newA;
- }
-
- // When there was no space left, check if there is space left
- // for a new slot with a tree which contains only the item
- // at the bottom.
- if (a.table.length < M)
- {
- var newSlot = create(item, a.height - 1);
- var newA = nodeCopy(a);
- newA.table.push(newSlot);
- newA.lengths.push(newA.lengths[newA.lengths.length - 1] + length(newSlot));
- return newA;
- }
- else
- {
- return null;
- }
-}
-
-// Converts an array into a list of elements.
-function toList(a)
-{
- return toList_(_elm_lang$core$Native_List.Nil, a);
-}
-
-function toList_(list, a)
-{
- for (var i = a.table.length - 1; i >= 0; i--)
- {
- list =
- a.height === 0
- ? _elm_lang$core$Native_List.Cons(a.table[i], list)
- : toList_(list, a.table[i]);
- }
- return list;
-}
-
-// Maps a function over the elements of an array.
-function map(f, a)
-{
- var newA = {
- ctor: '_Array',
- height: a.height,
- table: new Array(a.table.length)
- };
- if (a.height > 0)
- {
- newA.lengths = a.lengths;
- }
- for (var i = 0; i < a.table.length; i++)
- {
- newA.table[i] =
- a.height === 0
- ? f(a.table[i])
- : map(f, a.table[i]);
- }
- return newA;
-}
-
-// Maps a function over the elements with their index as first argument.
-function indexedMap(f, a)
-{
- return indexedMap_(f, a, 0);
-}
-
-function indexedMap_(f, a, from)
-{
- var newA = {
- ctor: '_Array',
- height: a.height,
- table: new Array(a.table.length)
- };
- if (a.height > 0)
- {
- newA.lengths = a.lengths;
- }
- for (var i = 0; i < a.table.length; i++)
- {
- newA.table[i] =
- a.height === 0
- ? A2(f, from + i, a.table[i])
- : indexedMap_(f, a.table[i], i == 0 ? from : from + a.lengths[i - 1]);
- }
- return newA;
-}
-
-function foldl(f, b, a)
-{
- if (a.height === 0)
- {
- for (var i = 0; i < a.table.length; i++)
- {
- b = A2(f, a.table[i], b);
- }
- }
- else
- {
- for (var i = 0; i < a.table.length; i++)
- {
- b = foldl(f, b, a.table[i]);
- }
- }
- return b;
-}
-
-function foldr(f, b, a)
-{
- if (a.height === 0)
- {
- for (var i = a.table.length; i--; )
- {
- b = A2(f, a.table[i], b);
- }
- }
- else
- {
- for (var i = a.table.length; i--; )
- {
- b = foldr(f, b, a.table[i]);
- }
- }
- return b;
-}
-
-// TODO: currently, it slices the right, then the left. This can be
-// optimized.
-function slice(from, to, a)
-{
- if (from < 0)
- {
- from += length(a);
- }
- if (to < 0)
- {
- to += length(a);
- }
- return sliceLeft(from, sliceRight(to, a));
-}
-
-function sliceRight(to, a)
-{
- if (to === length(a))
- {
- return a;
- }
-
- // Handle leaf level.
- if (a.height === 0)
- {
- var newA = { ctor:'_Array', height:0 };
- newA.table = a.table.slice(0, to);
- return newA;
- }
-
- // Slice the right recursively.
- var right = getSlot(to, a);
- var sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]);
-
- // Maybe the a node is not even needed, as sliced contains the whole slice.
- if (right === 0)
- {
- return sliced;
- }
-
- // Create new node.
- var newA = {
- ctor: '_Array',
- height: a.height,
- table: a.table.slice(0, right),
- lengths: a.lengths.slice(0, right)
- };
- if (sliced.table.length > 0)
- {
- newA.table[right] = sliced;
- newA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0);
- }
- return newA;
-}
-
-function sliceLeft(from, a)
-{
- if (from === 0)
- {
- return a;
- }
-
- // Handle leaf level.
- if (a.height === 0)
- {
- var newA = { ctor:'_Array', height:0 };
- newA.table = a.table.slice(from, a.table.length + 1);
- return newA;
- }
-
- // Slice the left recursively.
- var left = getSlot(from, a);
- var sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]);
-
- // Maybe the a node is not even needed, as sliced contains the whole slice.
- if (left === a.table.length - 1)
- {
- return sliced;
- }
-
- // Create new node.
- var newA = {
- ctor: '_Array',
- height: a.height,
- table: a.table.slice(left, a.table.length + 1),
- lengths: new Array(a.table.length - left)
- };
- newA.table[0] = sliced;
- var len = 0;
- for (var i = 0; i < newA.table.length; i++)
- {
- len += length(newA.table[i]);
- newA.lengths[i] = len;
- }
-
- return newA;
-}
-
-// Appends two trees.
-function append(a,b)
-{
- if (a.table.length === 0)
- {
- return b;
- }
- if (b.table.length === 0)
- {
- return a;
- }
-
- var c = append_(a, b);
-
- // Check if both nodes can be crunshed together.
- if (c[0].table.length + c[1].table.length <= M)
- {
- if (c[0].table.length === 0)
- {
- return c[1];
- }
- if (c[1].table.length === 0)
- {
- return c[0];
- }
-
- // Adjust .table and .lengths
- c[0].table = c[0].table.concat(c[1].table);
- if (c[0].height > 0)
- {
- var len = length(c[0]);
- for (var i = 0; i < c[1].lengths.length; i++)
- {
- c[1].lengths[i] += len;
- }
- c[0].lengths = c[0].lengths.concat(c[1].lengths);
- }
-
- return c[0];
- }
-
- if (c[0].height > 0)
- {
- var toRemove = calcToRemove(a, b);
- if (toRemove > E)
- {
- c = shuffle(c[0], c[1], toRemove);
- }
- }
-
- return siblise(c[0], c[1]);
-}
-
-// Returns an array of two nodes; right and left. One node _may_ be empty.
-function append_(a, b)
-{
- if (a.height === 0 && b.height === 0)
- {
- return [a, b];
- }
-
- if (a.height !== 1 || b.height !== 1)
- {
- if (a.height === b.height)
- {
- a = nodeCopy(a);
- b = nodeCopy(b);
- var appended = append_(botRight(a), botLeft(b));
-
- insertRight(a, appended[1]);
- insertLeft(b, appended[0]);
- }
- else if (a.height > b.height)
- {
- a = nodeCopy(a);
- var appended = append_(botRight(a), b);
-
- insertRight(a, appended[0]);
- b = parentise(appended[1], appended[1].height + 1);
- }
- else
- {
- b = nodeCopy(b);
- var appended = append_(a, botLeft(b));
-
- var left = appended[0].table.length === 0 ? 0 : 1;
- var right = left === 0 ? 1 : 0;
- insertLeft(b, appended[left]);
- a = parentise(appended[right], appended[right].height + 1);
- }
- }
-
- // Check if balancing is needed and return based on that.
- if (a.table.length === 0 || b.table.length === 0)
- {
- return [a, b];
- }
-
- var toRemove = calcToRemove(a, b);
- if (toRemove <= E)
- {
- return [a, b];
- }
- return shuffle(a, b, toRemove);
-}
-
-// Helperfunctions for append_. Replaces a child node at the side of the parent.
-function insertRight(parent, node)
-{
- var index = parent.table.length - 1;
- parent.table[index] = node;
- parent.lengths[index] = length(node);
- parent.lengths[index] += index > 0 ? parent.lengths[index - 1] : 0;
-}
-
-function insertLeft(parent, node)
-{
- if (node.table.length > 0)
- {
- parent.table[0] = node;
- parent.lengths[0] = length(node);
-
- var len = length(parent.table[0]);
- for (var i = 1; i < parent.lengths.length; i++)
- {
- len += length(parent.table[i]);
- parent.lengths[i] = len;
- }
- }
- else
- {
- parent.table.shift();
- for (var i = 1; i < parent.lengths.length; i++)
- {
- parent.lengths[i] = parent.lengths[i] - parent.lengths[0];
- }
- parent.lengths.shift();
- }
-}
-
-// Returns the extra search steps for E. Refer to the paper.
-function calcToRemove(a, b)
-{
- var subLengths = 0;
- for (var i = 0; i < a.table.length; i++)
- {
- subLengths += a.table[i].table.length;
- }
- for (var i = 0; i < b.table.length; i++)
- {
- subLengths += b.table[i].table.length;
- }
-
- var toRemove = a.table.length + b.table.length;
- return toRemove - (Math.floor((subLengths - 1) / M) + 1);
-}
-
-// get2, set2 and saveSlot are helpers for accessing elements over two arrays.
-function get2(a, b, index)
-{
- return index < a.length
- ? a[index]
- : b[index - a.length];
-}
-
-function set2(a, b, index, value)
-{
- if (index < a.length)
- {
- a[index] = value;
- }
- else
- {
- b[index - a.length] = value;
- }
-}
-
-function saveSlot(a, b, index, slot)
-{
- set2(a.table, b.table, index, slot);
-
- var l = (index === 0 || index === a.lengths.length)
- ? 0
- : get2(a.lengths, a.lengths, index - 1);
-
- set2(a.lengths, b.lengths, index, l + length(slot));
-}
-
-// Creates a node or leaf with a given length at their arrays for perfomance.
-// Is only used by shuffle.
-function createNode(h, length)
-{
- if (length < 0)
- {
- length = 0;
- }
- var a = {
- ctor: '_Array',
- height: h,
- table: new Array(length)
- };
- if (h > 0)
- {
- a.lengths = new Array(length);
- }
- return a;
-}
-
-// Returns an array of two balanced nodes.
-function shuffle(a, b, toRemove)
-{
- var newA = createNode(a.height, Math.min(M, a.table.length + b.table.length - toRemove));
- var newB = createNode(a.height, newA.table.length - (a.table.length + b.table.length - toRemove));
-
- // Skip the slots with size M. More precise: copy the slot references
- // to the new node
- var read = 0;
- while (get2(a.table, b.table, read).table.length % M === 0)
- {
- set2(newA.table, newB.table, read, get2(a.table, b.table, read));
- set2(newA.lengths, newB.lengths, read, get2(a.lengths, b.lengths, read));
- read++;
- }
-
- // Pulling items from left to right, caching in a slot before writing
- // it into the new nodes.
- var write = read;
- var slot = new createNode(a.height - 1, 0);
- var from = 0;
-
- // If the current slot is still containing data, then there will be at
- // least one more write, so we do not break this loop yet.
- while (read - write - (slot.table.length > 0 ? 1 : 0) < toRemove)
- {
- // Find out the max possible items for copying.
- var source = get2(a.table, b.table, read);
- var to = Math.min(M - slot.table.length, source.table.length);
-
- // Copy and adjust size table.
- slot.table = slot.table.concat(source.table.slice(from, to));
- if (slot.height > 0)
- {
- var len = slot.lengths.length;
- for (var i = len; i < len + to - from; i++)
- {
- slot.lengths[i] = length(slot.table[i]);
- slot.lengths[i] += (i > 0 ? slot.lengths[i - 1] : 0);
- }
- }
-
- from += to;
-
- // Only proceed to next slots[i] if the current one was
- // fully copied.
- if (source.table.length <= to)
- {
- read++; from = 0;
- }
-
- // Only create a new slot if the current one is filled up.
- if (slot.table.length === M)
- {
- saveSlot(newA, newB, write, slot);
- slot = createNode(a.height - 1, 0);
- write++;
- }
- }
-
- // Cleanup after the loop. Copy the last slot into the new nodes.
- if (slot.table.length > 0)
- {
- saveSlot(newA, newB, write, slot);
- write++;
- }
-
- // Shift the untouched slots to the left
- while (read < a.table.length + b.table.length )
- {
- saveSlot(newA, newB, write, get2(a.table, b.table, read));
- read++;
- write++;
- }
-
- return [newA, newB];
-}
-
-// Navigation functions
-function botRight(a)
-{
- return a.table[a.table.length - 1];
-}
-function botLeft(a)
-{
- return a.table[0];
-}
-
-// Copies a node for updating. Note that you should not use this if
-// only updating only one of "table" or "lengths" for performance reasons.
-function nodeCopy(a)
-{
- var newA = {
- ctor: '_Array',
- height: a.height,
- table: a.table.slice()
- };
- if (a.height > 0)
- {
- newA.lengths = a.lengths.slice();
- }
- return newA;
-}
-
-// Returns how many items are in the tree.
-function length(array)
-{
- if (array.height === 0)
- {
- return array.table.length;
- }
- else
- {
- return array.lengths[array.lengths.length - 1];
- }
-}
-
-// Calculates in which slot of "table" the item probably is, then
-// find the exact slot via forward searching in "lengths". Returns the index.
-function getSlot(i, a)
-{
- var slot = i >> (5 * a.height);
- while (a.lengths[slot] <= i)
- {
- slot++;
- }
- return slot;
-}
-
-// Recursively creates a tree with a given height containing
-// only the given item.
-function create(item, h)
-{
- if (h === 0)
- {
- return {
- ctor: '_Array',
- height: 0,
- table: [item]
- };
- }
- return {
- ctor: '_Array',
- height: h,
- table: [create(item, h - 1)],
- lengths: [1]
- };
-}
-
-// Recursively creates a tree that contains the given tree.
-function parentise(tree, h)
-{
- if (h === tree.height)
- {
- return tree;
- }
-
- return {
- ctor: '_Array',
- height: h,
- table: [parentise(tree, h - 1)],
- lengths: [length(tree)]
- };
-}
-
-// Emphasizes blood brotherhood beneath two trees.
-function siblise(a, b)
-{
- return {
- ctor: '_Array',
- height: a.height + 1,
- table: [a, b],
- lengths: [length(a), length(a) + length(b)]
- };
-}
-
-function toJSArray(a)
-{
- var jsArray = new Array(length(a));
- toJSArray_(jsArray, 0, a);
- return jsArray;
-}
-
-function toJSArray_(jsArray, i, a)
-{
- for (var t = 0; t < a.table.length; t++)
- {
- if (a.height === 0)
- {
- jsArray[i + t] = a.table[t];
- }
- else
- {
- var inc = t === 0 ? 0 : a.lengths[t - 1];
- toJSArray_(jsArray, i + inc, a.table[t]);
- }
- }
-}
-
-function fromJSArray(jsArray)
-{
- if (jsArray.length === 0)
- {
- return empty;
- }
- var h = Math.floor(Math.log(jsArray.length) / Math.log(M));
- return fromJSArray_(jsArray, h, 0, jsArray.length);
-}
-
-function fromJSArray_(jsArray, h, from, to)
-{
- if (h === 0)
- {
- return {
- ctor: '_Array',
- height: 0,
- table: jsArray.slice(from, to)
- };
- }
-
- var step = Math.pow(M, h);
- var table = new Array(Math.ceil((to - from) / step));
- var lengths = new Array(table.length);
- for (var i = 0; i < table.length; i++)
- {
- table[i] = fromJSArray_(jsArray, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));
- lengths[i] = length(table[i]) + (i > 0 ? lengths[i - 1] : 0);
- }
- return {
- ctor: '_Array',
- height: h,
- table: table,
- lengths: lengths
- };
-}
-
-return {
- empty: empty,
- fromList: fromList,
- toList: toList,
- initialize: F2(initialize),
- append: F2(append),
- push: F2(push),
- slice: F3(slice),
- get: F2(get),
- set: F3(set),
- map: F2(map),
- indexedMap: F2(indexedMap),
- foldl: F3(foldl),
- foldr: F3(foldr),
- length: length,
-
- toJSArray: toJSArray,
- fromJSArray: fromJSArray
-};
-
-}();//import Native.Utils //
-
-var _elm_lang$core$Native_Basics = function() {
-
-function div(a, b)
-{
- return (a / b) | 0;
-}
-function rem(a, b)
-{
- return a % b;
-}
-function mod(a, b)
-{
- if (b === 0)
- {
- throw new Error('Cannot perform mod 0. Division by zero error.');
- }
- var r = a % b;
- var m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r + b) : -mod(-a, -b));
-
- return m === b ? 0 : m;
-}
-function logBase(base, n)
-{
- return Math.log(n) / Math.log(base);
-}
-function negate(n)
-{
- return -n;
-}
-function abs(n)
-{
- return n < 0 ? -n : n;
-}
-
-function min(a, b)
-{
- return _elm_lang$core$Native_Utils.cmp(a, b) < 0 ? a : b;
-}
-function max(a, b)
-{
- return _elm_lang$core$Native_Utils.cmp(a, b) > 0 ? a : b;
-}
-function clamp(lo, hi, n)
-{
- return _elm_lang$core$Native_Utils.cmp(n, lo) < 0
- ? lo
- : _elm_lang$core$Native_Utils.cmp(n, hi) > 0
- ? hi
- : n;
-}
-
-var ord = ['LT', 'EQ', 'GT'];
-
-function compare(x, y)
-{
- return { ctor: ord[_elm_lang$core$Native_Utils.cmp(x, y) + 1] };
-}
-
-function xor(a, b)
-{
- return a !== b;
-}
-function not(b)
-{
- return !b;
-}
-function isInfinite(n)
-{
- return n === Infinity || n === -Infinity;
-}
-
-function truncate(n)
-{
- return n | 0;
-}
-
-function degrees(d)
-{
- return d * Math.PI / 180;
-}
-function turns(t)
-{
- return 2 * Math.PI * t;
-}
-function fromPolar(point)
-{
- var r = point._0;
- var t = point._1;
- return _elm_lang$core$Native_Utils.Tuple2(r * Math.cos(t), r * Math.sin(t));
-}
-function toPolar(point)
-{
- var x = point._0;
- var y = point._1;
- return _elm_lang$core$Native_Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x));
-}
-
-return {
- div: F2(div),
- rem: F2(rem),
- mod: F2(mod),
-
- pi: Math.PI,
- e: Math.E,
- cos: Math.cos,
- sin: Math.sin,
- tan: Math.tan,
- acos: Math.acos,
- asin: Math.asin,
- atan: Math.atan,
- atan2: F2(Math.atan2),
-
- degrees: degrees,
- turns: turns,
- fromPolar: fromPolar,
- toPolar: toPolar,
-
- sqrt: Math.sqrt,
- logBase: F2(logBase),
- negate: negate,
- abs: abs,
- min: F2(min),
- max: F2(max),
- clamp: F3(clamp),
- compare: F2(compare),
-
- xor: F2(xor),
- not: not,
-
- truncate: truncate,
- ceiling: Math.ceil,
- floor: Math.floor,
- round: Math.round,
- toFloat: function(x) { return x; },
- isNaN: isNaN,
- isInfinite: isInfinite
-};
-
-}();//import //
-
-var _elm_lang$core$Native_Utils = function() {
-
-// COMPARISONS
-
-function eq(x, y)
-{
- var stack = [];
- var isEqual = eqHelp(x, y, 0, stack);
- var pair;
- while (isEqual && (pair = stack.pop()))
- {
- isEqual = eqHelp(pair.x, pair.y, 0, stack);
- }
- return isEqual;
-}
-
-
-function eqHelp(x, y, depth, stack)
-{
- if (depth > 100)
- {
- stack.push({ x: x, y: y });
- return true;
- }
-
- if (x === y)
- {
- return true;
- }
-
- if (typeof x !== 'object')
- {
- if (typeof x === 'function')
- {
- throw new Error(
- 'Trying to use `(==)` on functions. There is no way to know if functions are "the same" in the Elm sense.'
- + ' Read more about this at http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#=='
- + ' which describes why it is this way and what the better version will look like.'
- );
- }
- return false;
- }
-
- if (x === null || y === null)
- {
- return false
- }
-
- if (x instanceof Date)
- {
- return x.getTime() === y.getTime();
- }
-
- if (!('ctor' in x))
- {
- for (var key in x)
- {
- if (!eqHelp(x[key], y[key], depth + 1, stack))
- {
- return false;
- }
- }
- return true;
- }
-
- // convert Dicts and Sets to lists
- if (x.ctor === 'RBNode_elm_builtin' || x.ctor === 'RBEmpty_elm_builtin')
- {
- x = _elm_lang$core$Dict$toList(x);
- y = _elm_lang$core$Dict$toList(y);
- }
- if (x.ctor === 'Set_elm_builtin')
- {
- x = _elm_lang$core$Set$toList(x);
- y = _elm_lang$core$Set$toList(y);
- }
-
- // check if lists are equal without recursion
- if (x.ctor === '::')
- {
- var a = x;
- var b = y;
- while (a.ctor === '::' && b.ctor === '::')
- {
- if (!eqHelp(a._0, b._0, depth + 1, stack))
- {
- return false;
- }
- a = a._1;
- b = b._1;
- }
- return a.ctor === b.ctor;
- }
-
- // check if Arrays are equal
- if (x.ctor === '_Array')
- {
- var xs = _elm_lang$core$Native_Array.toJSArray(x);
- var ys = _elm_lang$core$Native_Array.toJSArray(y);
- if (xs.length !== ys.length)
- {
- return false;
- }
- for (var i = 0; i < xs.length; i++)
- {
- if (!eqHelp(xs[i], ys[i], depth + 1, stack))
- {
- return false;
- }
- }
- return true;
- }
-
- if (!eqHelp(x.ctor, y.ctor, depth + 1, stack))
- {
- return false;
- }
-
- for (var key in x)
- {
- if (!eqHelp(x[key], y[key], depth + 1, stack))
- {
- return false;
- }
- }
- return true;
-}
-
-// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on
-// the particular integer values assigned to LT, EQ, and GT.
-
-var LT = -1, EQ = 0, GT = 1;
-
-function cmp(x, y)
-{
- if (typeof x !== 'object')
- {
- return x === y ? EQ : x < y ? LT : GT;
- }
-
- if (x instanceof String)
- {
- var a = x.valueOf();
- var b = y.valueOf();
- return a === b ? EQ : a < b ? LT : GT;
- }
-
- if (x.ctor === '::' || x.ctor === '[]')
- {
- while (x.ctor === '::' && y.ctor === '::')
- {
- var ord = cmp(x._0, y._0);
- if (ord !== EQ)
- {
- return ord;
- }
- x = x._1;
- y = y._1;
- }
- return x.ctor === y.ctor ? EQ : x.ctor === '[]' ? LT : GT;
- }
-
- if (x.ctor.slice(0, 6) === '_Tuple')
- {
- var ord;
- var n = x.ctor.slice(6) - 0;
- var err = 'cannot compare tuples with more than 6 elements.';
- if (n === 0) return EQ;
- if (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord;
- if (n >= 2) { ord = cmp(x._1, y._1); if (ord !==