aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--docs/style-generator/index.html10713
-rw-r--r--examples/Example02.elm12
-rw-r--r--examples/Outdoors.elm1079
-rw-r--r--style-generator/elm.json33
-rw-r--r--style-generator/src/Color.elm376
-rw-r--r--style-generator/src/Decoder.elm776
-rw-r--r--style-generator/src/Main.elm138
-rw-r--r--style-generator/src/Writer.elm640
8 files changed, 13767 insertions, 0 deletions
diff --git a/docs/style-generator/index.html b/docs/style-generator/index.html
new file mode 100644
index 0000000..a85638d
--- /dev/null
+++ b/docs/style-generator/index.html
@@ -0,0 +1,10713 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="UTF-8">
+ <title>Main</title>
+</head>
+
+<body>
+<div id="elm-f0111bc4e658d0f98db96260c16f7e49"></div>
+<script>
+(function(scope){
+'use strict';
+
+function F(arity, fun, wrapper) {
+ wrapper.a = arity;
+ wrapper.f = fun;
+ return wrapper;
+}
+
+function F2(fun) {
+ return F(2, fun, function(a) { return function(b) { return fun(a,b); }; })
+}
+function F3(fun) {
+ return F(3, fun, function(a) {
+ return function(b) { return function(c) { return fun(a, b, c); }; };
+ });
+}
+function F4(fun) {
+ return F(4, fun, function(a) { return function(b) { return function(c) {
+ return function(d) { return fun(a, b, c, d); }; }; };
+ });
+}
+function F5(fun) {
+ return F(5, fun, function(a) { return function(b) { return function(c) {
+ return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };
+ });
+}
+function F6(fun) {
+ return F(6, fun, function(a) { return function(b) { return function(c) {
+ return function(d) { return function(e) { return function(f) {
+ return fun(a, b, c, d, e, f); }; }; }; }; };
+ });
+}
+function F7(fun) {
+ return F(7, fun, function(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); }; }; }; }; }; };
+ });
+}
+function F8(fun) {
+ return F(8, fun, function(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); }; }; }; }; }; }; };
+ });
+}
+function F9(fun) {
+ return F(9, fun, function(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); }; }; }; }; }; }; }; };
+ });
+}
+
+function A2(fun, a, b) {
+ return fun.a === 2 ? fun.f(a, b) : fun(a)(b);
+}
+function A3(fun, a, b, c) {
+ return fun.a === 3 ? fun.f(a, b, c) : fun(a)(b)(c);
+}
+function A4(fun, a, b, c, d) {
+ return fun.a === 4 ? fun.f(a, b, c, d) : fun(a)(b)(c)(d);
+}
+function A5(fun, a, b, c, d, e) {
+ return fun.a === 5 ? fun.f(a, b, c, d, e) : fun(a)(b)(c)(d)(e);
+}
+function A6(fun, a, b, c, d, e, f) {
+ return fun.a === 6 ? fun.f(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.a === 7 ? fun.f(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.a === 8 ? fun.f(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.a === 9 ? fun.f(a, b, c, d, e, f, g, h, i) : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);
+}
+
+
+
+
+var _List_Nil = { $: 0 };
+var _List_Nil_UNUSED = { $: '[]' };
+
+function _List_Cons(hd, tl) { return { $: 1, a: hd, b: tl }; }
+function _List_Cons_UNUSED(hd, tl) { return { $: '::', a: hd, b: tl }; }
+
+
+var _List_cons = F2(_List_Cons);
+
+function _List_fromArray(arr)
+{
+ var out = _List_Nil;
+ for (var i = arr.length; i--; )
+ {
+ out = _List_Cons(arr[i], out);
+ }
+ return out;
+}
+
+function _List_toArray(xs)
+{
+ for (var out = []; xs.b; xs = xs.b) // WHILE_CONS
+ {
+ out.push(xs.a);
+ }
+ return out;
+}
+
+var _List_map2 = F3(function(f, xs, ys)
+{
+ for (var arr = []; xs.b && ys.b; xs = xs.b, ys = ys.b) // WHILE_CONSES
+ {
+ arr.push(A2(f, xs.a, ys.a));
+ }
+ return _List_fromArray(arr);
+});
+
+var _List_map3 = F4(function(f, xs, ys, zs)
+{
+ for (var arr = []; xs.b && ys.b && zs.b; xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
+ {
+ arr.push(A3(f, xs.a, ys.a, zs.a));
+ }
+ return _List_fromArray(arr);
+});
+
+var _List_map4 = F5(function(f, ws, xs, ys, zs)
+{
+ for (var arr = []; ws.b && xs.b && ys.b && zs.b; ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
+ {
+ arr.push(A4(f, ws.a, xs.a, ys.a, zs.a));
+ }
+ return _List_fromArray(arr);
+});
+
+var _List_map5 = F6(function(f, vs, ws, xs, ys, zs)
+{
+ for (var arr = []; vs.b && ws.b && xs.b && ys.b && zs.b; vs = vs.b, ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b) // WHILE_CONSES
+ {
+ arr.push(A5(f, vs.a, ws.a, xs.a, ys.a, zs.a));
+ }
+ return _List_fromArray(arr);
+});
+
+var _List_sortBy = F2(function(f, xs)
+{
+ return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
+ return _Utils_cmp(f(a), f(b));
+ }));
+});
+
+var _List_sortWith = F2(function(f, xs)
+{
+ return _List_fromArray(_List_toArray(xs).sort(function(a, b) {
+ var ord = A2(f, a, b);
+ return ord === elm$core$Basics$EQ ? 0 : ord === elm$core$Basics$LT ? -1 : 1;
+ }));
+});
+
+
+
+// EQUALITY
+
+function _Utils_eq(x, y)
+{
+ for (
+ var pair, stack = [], isEqual = _Utils_eqHelp(x, y, 0, stack);
+ isEqual && (pair = stack.pop());
+ isEqual = _Utils_eqHelp(pair.a, pair.b, 0, stack)
+ )
+ {}
+
+ return isEqual;
+}
+
+function _Utils_eqHelp(x, y, depth, stack)
+{
+ if (depth > 100)
+ {
+ stack.push(_Utils_Tuple2(x,y));
+ return true;
+ }
+
+ if (x === y)
+ {
+ return true;
+ }
+
+ if (typeof x !== 'object' || x === null || y === null)
+ {
+ typeof x === 'function' && _Debug_crash(5);
+ return false;
+ }
+
+ /**_UNUSED/
+ if (x.$ === 'Set_elm_builtin')
+ {
+ x = elm$core$Set$toList(x);
+ y = elm$core$Set$toList(y);
+ }
+ if (x.$ === 'RBNode_elm_builtin' || x.$ === 'RBEmpty_elm_builtin')
+ {
+ x = elm$core$Dict$toList(x);
+ y = elm$core$Dict$toList(y);
+ }
+ //*/
+
+ /**/
+ if (x.$ < 0)
+ {
+ x = elm$core$Dict$toList(x);
+ y = elm$core$Dict$toList(y);
+ }
+ //*/
+
+ for (var key in x)
+ {
+ if (!_Utils_eqHelp(x[key], y[key], depth + 1, stack))
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+var _Utils_equal = F2(_Utils_eq);
+var _Utils_notEqual = F2(function(a, b) { return !_Utils_eq(a,b); });
+
+
+
+// COMPARISONS
+
+// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on
+// the particular integer values assigned to LT, EQ, and GT.
+
+function _Utils_cmp(x, y, ord)
+{
+ if (typeof x !== 'object')
+ {
+ return x === y ? /*EQ*/ 0 : x < y ? /*LT*/ -1 : /*GT*/ 1;
+ }
+
+ /**_UNUSED/
+ if (x instanceof String)
+ {
+ var a = x.valueOf();
+ var b = y.valueOf();
+ return a === b ? 0 : a < b ? -1 : 1;
+ }
+ //*/
+
+ /**/
+ if (!x.$)
+ //*/
+ /**_UNUSED/
+ if (x.$[0] === '#')
+ //*/
+ {
+ return (ord = _Utils_cmp(x.a, y.a))
+ ? ord
+ : (ord = _Utils_cmp(x.b, y.b))
+ ? ord
+ : _Utils_cmp(x.c, y.c);
+ }
+
+ // traverse conses until end of a list or a mismatch
+ for (; x.b && y.b && !(ord = _Utils_cmp(x.a, y.a)); x = x.b, y = y.b) {} // WHILE_CONSES
+ return ord || (x.b ? /*GT*/ 1 : y.b ? /*LT*/ -1 : /*EQ*/ 0);
+}
+
+var _Utils_lt = F2(function(a, b) { return _Utils_cmp(a, b) < 0; });
+var _Utils_le = F2(function(a, b) { return _Utils_cmp(a, b) < 1; });
+var _Utils_gt = F2(function(a, b) { return _Utils_cmp(a, b) > 0; });
+var _Utils_ge = F2(function(a, b) { return _Utils_cmp(a, b) >= 0; });
+
+var _Utils_compare = F2(function(x, y)
+{
+ var n = _Utils_cmp(x, y);
+ return n < 0 ? elm$core$Basics$LT : n ? elm$core$Basics$GT : elm$core$Basics$EQ;
+});
+
+
+// COMMON VALUES
+
+var _Utils_Tuple0 = 0;
+var _Utils_Tuple0_UNUSED = { $: '#0' };
+
+function _Utils_Tuple2(a, b) { return { a: a, b: b }; }
+function _Utils_Tuple2_UNUSED(a, b) { return { $: '#2', a: a, b: b }; }
+
+function _Utils_Tuple3(a, b, c) { return { a: a, b: b, c: c }; }
+function _Utils_Tuple3_UNUSED(a, b, c) { return { $: '#3', a: a, b: b, c: c }; }
+
+function _Utils_chr(c) { return c; }
+function _Utils_chr_UNUSED(c) { return new String(c); }
+
+
+// RECORDS
+
+function _Utils_update(oldRecord, updatedFields)
+{
+ var newRecord = {};
+
+ for (var key in oldRecord)
+ {
+ newRecord[key] = oldRecord[key];
+ }
+
+ for (var key in updatedFields)
+ {
+ newRecord[key] = updatedFields[key];
+ }
+
+ return newRecord;
+}
+
+
+// APPEND
+
+var _Utils_append = F2(_Utils_ap);
+
+function _Utils_ap(xs, ys)
+{
+ // append Strings
+ if (typeof xs === 'string')
+ {
+ return xs + ys;
+ }
+
+ // append Lists
+ if (!xs.b)
+ {
+ return ys;
+ }
+ var root = _List_Cons(xs.a, ys);
+ xs = xs.b
+ for (var curr = root; xs.b; xs = xs.b) // WHILE_CONS
+ {
+ curr = curr.b = _List_Cons(xs.a, ys);
+ }
+ return root;
+}
+
+
+
+var _JsArray_empty = [];
+
+function _JsArray_singleton(value)
+{
+ return [value];
+}
+
+function _JsArray_length(array)
+{
+ return array.length;
+}
+
+var _JsArray_initialize = F3(function(size, offset, func)
+{
+ var result = new Array(size);
+
+ for (var i = 0; i < size; i++)
+ {
+ result[i] = func(offset + i);
+ }
+
+ return result;
+});
+
+var _JsArray_initializeFromList = F2(function (max, ls)
+{
+ var result = new Array(max);
+
+ for (var i = 0; i < max && ls.b; i++)
+ {
+ result[i] = ls.a;
+ ls = ls.b;
+ }
+
+ result.length = i;
+ return _Utils_Tuple2(result, ls);
+});
+
+var _JsArray_unsafeGet = F2(function(index, array)
+{
+ return array[index];
+});
+
+var _JsArray_unsafeSet = F3(function(index, value, array)
+{
+ var length = array.length;
+ var result = new Array(length);
+
+ for (var i = 0; i < length; i++)
+ {
+ result[i] = array[i];
+ }
+
+ result[index] = value;
+ return result;
+});
+
+var _JsArray_push = F2(function(value, array)
+{
+ var length = array.length;
+ var result = new Array(length + 1);
+
+ for (var i = 0; i < length; i++)
+ {
+ result[i] = array[i];
+ }
+
+ result[length] = value;
+ return result;
+});
+
+var _JsArray_foldl = F3(function(func, acc, array)
+{
+ var length = array.length;
+
+ for (var i = 0; i < length; i++)
+ {
+ acc = A2(func, array[i], acc);
+ }
+
+ return acc;
+});
+
+var _JsArray_foldr = F3(function(func, acc, array)
+{
+ for (var i = array.length - 1; i >= 0; i--)
+ {
+ acc = A2(func, array[i], acc);
+ }
+
+ return acc;
+});
+
+var _JsArray_map = F2(function(func, array)
+{
+ var length = array.length;
+ var result = new Array(length);
+
+ for (var i = 0; i < length; i++)
+ {
+ result[i] = func(array[i]);
+ }
+
+ return result;
+});
+
+var _JsArray_indexedMap = F3(function(func, offset, array)
+{
+ var length = array.length;
+ var result = new Array(length);
+
+ for (var i = 0; i < length; i++)
+ {
+ result[i] = A2(func, offset + i, array[i]);
+ }
+
+ return result;
+});
+
+var _JsArray_slice = F3(function(from, to, array)
+{
+ return array.slice(from, to);
+});
+
+var _JsArray_appendN = F3(function(n, dest, source)
+{
+ var destLen = dest.length;
+ var itemsToCopy = n - destLen;
+
+ if (itemsToCopy > source.length)
+ {
+ itemsToCopy = source.length;
+ }
+
+ var size = destLen + itemsToCopy;
+ var result = new Array(size);
+
+ for (var i = 0; i < destLen; i++)
+ {
+ result[i] = dest[i];
+ }
+
+ for (var i = 0; i < itemsToCopy; i++)
+ {
+ result[i + destLen] = source[i];
+ }
+
+ return result;
+});
+
+
+
+// LOG
+
+var _Debug_log = F2(function(tag, value)
+{
+ return value;
+});
+
+var _Debug_log_UNUSED = F2(function(tag, value)
+{
+ console.log(tag + ': ' + _Debug_toString(value));
+ return value;
+});
+
+
+// TODOS
+
+function _Debug_todo(moduleName, region)
+{
+ return function(message) {
+ _Debug_crash(8, moduleName, region, message);
+ };
+}
+
+function _Debug_todoCase(moduleName, region, value)
+{
+ return function(message) {
+ _Debug_crash(9, moduleName, region, value, message);
+ };
+}
+
+
+// TO STRING
+
+function _Debug_toString(value)
+{
+ return '<internals>';
+}
+
+function _Debug_toString_UNUSED(value)
+{
+ return _Debug_toAnsiString(false, value);
+}
+
+function _Debug_toAnsiString(ansi, value)
+{
+ if (typeof value === 'function')
+ {
+ return _Debug_internalColor(ansi, '<function>');
+ }
+
+ if (typeof value === 'boolean')
+ {
+ return _Debug_ctorColor(ansi, value ? 'True' : 'False');
+ }
+
+ if (typeof value === 'number')
+ {
+ return _Debug_numberColor(ansi, value + '');
+ }
+
+ if (value instanceof String)
+ {
+ return _Debug_charColor(ansi, "'" + _Debug_addSlashes(value, true) + "'");
+ }
+
+ if (typeof value === 'string')
+ {
+ return _Debug_stringColor(ansi, '"' + _Debug_addSlashes(value, false) + '"');
+ }
+
+ if (typeof value === 'object' && '$' in value)
+ {
+ var tag = value.$;
+
+ if (typeof tag === 'number')
+ {
+ return _Debug_internalColor(ansi, '<internals>');
+ }
+
+ if (tag[0] === '#')
+ {
+ var output = [];
+ for (var k in value)
+ {
+ if (k === '$') continue;
+ output.push(_Debug_toAnsiString(ansi, value[k]));
+ }
+ return '(' + output.join(',') + ')';
+ }
+
+ if (tag === 'Set_elm_builtin')
+ {
+ return _Debug_ctorColor(ansi, 'Set')
+ + _Debug_fadeColor(ansi, '.fromList') + ' '
+ + _Debug_toAnsiString(ansi, elm$core$Set$toList(value));
+ }
+
+ if (tag === 'RBNode_elm_builtin' || tag === 'RBEmpty_elm_builtin')
+ {
+ return _Debug_ctorColor(ansi, 'Dict')
+ + _Debug_fadeColor(ansi, '.fromList') + ' '
+ + _Debug_toAnsiString(ansi, elm$core$Dict$toList(value));
+ }
+
+ if (tag === 'Array_elm_builtin')
+ {
+ return _Debug_ctorColor(ansi, 'Array')
+ + _Debug_fadeColor(ansi, '.fromList') + ' '
+ + _Debug_toAnsiString(ansi, elm$core$Array$toList(value));
+ }
+
+ if (tag === '::' || tag === '[]')
+ {
+ var output = '[';
+
+ value.b && (output += _Debug_toAnsiString(ansi, value.a), value = value.b)
+
+ for (; value.b; value = value.b) // WHILE_CONS
+ {
+ output += ',' + _Debug_toAnsiString(ansi, value.a);
+ }
+ return output + ']';
+ }
+
+ var output = '';
+ for (var i in value)
+ {
+ if (i === '$') continue;
+ var str = _Debug_toAnsiString(ansi, value[i]);
+ var c0 = str[0];
+ var parenless = c0 === '{' || c0 === '(' || c0 === '[' || c0 === '<' || c0 === '"' || str.indexOf(' ') < 0;
+ output += ' ' + (parenless ? str : '(' + str + ')');
+ }
+ return _Debug_ctorColor(ansi, tag) + output;
+ }
+
+ if (typeof value === 'object')
+ {
+ var output = [];
+ for (var key in value)
+ {
+ var field = key[0] === '_' ? key.slice(1) : key;
+ output.push(_Debug_fadeColor(ansi, field) + ' = ' + _Debug_toAnsiString(ansi, value[key]));
+ }
+ if (output.length === 0)
+ {
+ return '{}';
+ }
+ return '{ ' + output.join(', ') + ' }';
+ }
+
+ return _Debug_internalColor(ansi, '<internals>');
+}
+
+function _Debug_addSlashes(str, isChar)
+{
+ var s = str
+ .replace(/\\/g, '\\\\')
+ .replace(/\n/g, '\\n')
+ .replace(/\t/g, '\\t')
+ .replace(/\r/g, '\\r')
+ .replace(/\v/g, '\\v')
+ .replace(/\0/g, '\\0');
+
+ if (isChar)
+ {
+ return s.replace(/\'/g, '\\\'');
+ }
+ else
+ {
+ return s.replace(/\"/g, '\\"');
+ }
+}
+
+function _Debug_ctorColor(ansi, string)
+{
+ return ansi ? '\x1b[96m' + string + '\x1b[0m' : string;
+}
+
+function _Debug_numberColor(ansi, string)
+{
+ return ansi ? '\x1b[95m' + string + '\x1b[0m' : string;
+}
+
+function _Debug_stringColor(ansi, string)
+{
+ return ansi ? '\x1b[93m' + string + '\x1b[0m' : string;
+}
+
+function _Debug_charColor(ansi, string)
+{
+ return ansi ? '\x1b[92m' + string + '\x1b[0m' : string;
+}
+
+function _Debug_fadeColor(ansi, string)
+{
+ return ansi ? '\x1b[37m' + string + '\x1b[0m' : string;
+}
+
+function _Debug_internalColor(ansi, string)
+{
+ return ansi ? '\x1b[94m' + string + '\x1b[0m' : string;
+}
+
+
+
+// CRASH
+
+
+function _Debug_crash(identifier)
+{
+ throw new Error('https://github.com/elm/core/blob/1.0.0/hints/' + identifier + '.md');
+}
+
+
+function _Debug_crash_UNUSED(identifier, fact1, fact2, fact3, fact4)
+{
+ switch(identifier)
+ {
+ case 0:
+ throw new Error('What node should I take over? In JavaScript I need something like:\n\n Elm.Main.init({\n node: document.getElementById("elm-node")\n })\n\nYou need to do this with any Browser.sandbox or Browser.element program.');
+
+ case 1:
+ throw new Error('Browser.application programs cannot handle URLs like this:\n\n ' + document.location.href + '\n\nWhat is the root? The root of your file system? Try looking at this program with `elm reactor` or some other server.');
+
+ case 2:
+ var message = fact1;
+ throw new Error('Problem with the flags given to your Elm program on initialization.\n\n' + message);
+
+ case 3:
+ var portName = fact1;
+ throw new Error('There can only be one port named `' + portName + '`, but your program has multiple.');
+
+ case 4:
+ var portName = fact1;
+ var problem = fact2;
+ throw new Error('Trying to send an unexpected type of value through port `' + portName + '`:\n' + problem);
+
+ case 5:
+ throw new Error('Trying to use `(==)` on functions.\nThere is no way to know if functions are "the same" in the Elm sense.\nRead more about this at https://package.elm-lang.org/packages/elm/core/latest/Basics#== which describes why it is this way and what the better version will look like.');
+
+ case 6:
+ var moduleName = fact1;
+ throw new Error('Your page is loading multiple Elm scripts with a module named ' + moduleName + '. Maybe a duplicate script is getting loaded accidentally? If not, rename one of them so I know which is which!');
+
+ case 8:
+ var moduleName = fact1;
+ var region = fact2;
+ var message = fact3;
+ throw new Error('TODO in module `' + moduleName + '` ' + _Debug_regionToString(region) + '\n\n' + message);
+
+ case 9:
+ var moduleName = fact1;
+ var region = fact2;
+ var value = fact3;
+ var message = fact4;
+ throw new Error(
+ 'TODO in module `' + moduleName + '` from the `case` expression '
+ + _Debug_regionToString(region) + '\n\nIt received the following value:\n\n '
+ + _Debug_toString(value).replace('\n', '\n ')
+ + '\n\nBut the branch that handles it says:\n\n ' + message.replace('\n', '\n ')
+ );
+
+ case 10:
+ throw new Error('Bug in https://github.com/elm/virtual-dom/issues');
+
+ case 11:
+ throw new Error('Cannot perform mod 0. Division by zero error.');
+ }
+}
+
+function _Debug_regionToString(region)
+{
+ if (region.bY.N === region.bA.N)
+ {
+ return 'on line ' + region.bY.N;
+ }
+ return 'on lines ' + region.bY.N + ' through ' + region.bA.N;
+}
+
+
+
+// MATH
+
+var _Basics_add = F2(function(a, b) { return a + b; });
+var _Basics_sub = F2(function(a, b) { return a - b; });
+var _Basics_mul = F2(function(a, b) { return a * b; });
+var _Basics_fdiv = F2(function(a, b) { return a / b; });
+var _Basics_idiv = F2(function(a, b) { return (a / b) | 0; });
+var _Basics_pow = F2(Math.pow);
+
+var _Basics_remainderBy = F2(function(b, a) { return a % b; });
+
+// https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf
+var _Basics_modBy = F2(function(modulus, x)
+{
+ var answer = x % modulus;
+ return modulus === 0
+ ? _Debug_crash(11)
+ :
+ ((answer > 0 && modulus < 0) || (answer < 0 && modulus > 0))
+ ? answer + modulus
+ : answer;
+});
+
+
+// TRIGONOMETRY
+
+var _Basics_pi = Math.PI;
+var _Basics_e = Math.E;
+var _Basics_cos = Math.cos;
+var _Basics_sin = Math.sin;
+var _Basics_tan = Math.tan;
+var _Basics_acos = Math.acos;
+var _Basics_asin = Math.asin;
+var _Basics_atan = Math.atan;
+var _Basics_atan2 = F2(Math.atan2);
+
+
+// MORE MATH
+
+function _Basics_toFloat(x) { return x; }
+function _Basics_truncate(n) { return n | 0; }
+function _Basics_isInfinite(n) { return n === Infinity || n === -Infinity; }
+
+var _Basics_ceiling = Math.ceil;
+var _Basics_floor = Math.floor;
+var _Basics_round = Math.round;
+var _Basics_sqrt = Math.sqrt;
+var _Basics_log = Math.log;
+var _Basics_isNaN = isNaN;
+
+
+// BOOLEANS
+
+function _Basics_not(bool) { return !bool; }
+var _Basics_and = F2(function(a, b) { return a && b; });
+var _Basics_or = F2(function(a, b) { return a || b; });
+var _Basics_xor = F2(function(a, b) { return a !== b; });
+
+
+
+// CORE DECODERS
+
+function _Json_succeed(msg)
+{
+ return {
+ $: 0,
+ a: msg
+ };
+}
+
+function _Json_fail(msg)
+{
+ return {
+ $: 1,
+ a: msg
+ };
+}
+
+var _Json_decodeInt = { $: 2 };
+var _Json_decodeBool = { $: 3 };
+var _Json_decodeFloat = { $: 4 };
+var _Json_decodeValue = { $: 5 };
+var _Json_decodeString = { $: 6 };
+
+function _Json_decodeList(decoder) { return { $: 7, b: decoder }; }
+function _Json_decodeArray(decoder) { return { $: 8, b: decoder }; }
+
+function _Json_decodeNull(value) { return { $: 9, c: value }; }
+
+var _Json_decodeField = F2(function(field, decoder)
+{
+ return {
+ $: 10,
+ d: field,
+ b: decoder
+ };
+});
+
+var _Json_decodeIndex = F2(function(index, decoder)
+{
+ return {
+ $: 11,
+ e: index,
+ b: decoder
+ };
+});
+
+function _Json_decodeKeyValuePairs(decoder)
+{
+ return {
+ $: 12,
+ b: decoder
+ };
+}
+
+function _Json_mapMany(f, decoders)
+{
+ return {
+ $: 13,
+ f: f,
+ g: decoders
+ };
+}
+
+var _Json_andThen = F2(function(callback, decoder)
+{
+ return {
+ $: 14,
+ b: decoder,
+ h: callback
+ };
+});
+
+function _Json_oneOf(decoders)
+{
+ return {
+ $: 15,
+ g: decoders
+ };
+}
+
+
+// DECODING OBJECTS
+
+var _Json_map1 = F2(function(f, d1)
+{
+ return _Json_mapMany(f, [d1]);
+});
+
+var _Json_map2 = F3(function(f, d1, d2)
+{
+ return _Json_mapMany(f, [d1, d2]);
+});
+
+var _Json_map3 = F4(function(f, d1, d2, d3)
+{
+ return _Json_mapMany(f, [d1, d2, d3]);
+});
+
+var _Json_map4 = F5(function(f, d1, d2, d3, d4)
+{
+ return _Json_mapMany(f, [d1, d2, d3, d4]);
+});
+
+var _Json_map5 = F6(function(f, d1, d2, d3, d4, d5)
+{
+ return _Json_mapMany(f, [d1, d2, d3, d4, d5]);
+});
+
+var _Json_map6 = F7(function(f, d1, d2, d3, d4, d5, d6)
+{
+ return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6]);
+});
+
+var _Json_map7 = F8(function(f, d1, d2, d3, d4, d5, d6, d7)
+{
+ return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7]);
+});
+
+var _Json_map8 = F9(function(f, d1, d2, d3, d4, d5, d6, d7, d8)
+{
+ return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]);
+});
+
+
+// DECODE
+
+var _Json_runOnString = F2(function(decoder, string)
+{
+ try
+ {
+ var value = JSON.parse(string);
+ return _Json_runHelp(decoder, value);
+ }
+ catch (e)
+ {
+ return elm$core$Result$Err(A2(elm$json$Json$Decode$Failure, 'This is not valid JSON! ' + e.message, _Json_wrap(string)));
+ }
+});
+
+var _Json_run = F2(function(decoder, value)
+{
+ return _Json_runHelp(decoder, _Json_unwrap(value));
+});
+
+function _Json_runHelp(decoder, value)
+{
+ switch (decoder.$)
+ {
+ case 3:
+ return (typeof value === 'boolean')
+ ? elm$core$Result$Ok(value)
+ : _Json_expecting('a BOOL', value);
+
+ case 2:
+ if (typeof value !== 'number') {
+ return _Json_expecting('an INT', value);
+ }
+
+ if (-2147483647 < value && value < 2147483647 && (value | 0) === value) {
+ return elm$core$Result$Ok(value);
+ }
+
+ if (isFinite(value) && !(value % 1)) {
+ return elm$core$Result$Ok(value);
+ }
+
+ return _Json_expecting('an INT', value);
+
+ case 4:
+ return (typeof value === 'number')
+ ? elm$core$Result$Ok(value)
+ : _Json_expecting('a FLOAT', value);
+
+ case 6:
+ return (typeof value === 'string')
+ ? elm$core$Result$Ok(value)
+ : (value instanceof String)
+ ? elm$core$Result$Ok(value + '')
+ : _Json_expecting('a STRING', value);
+
+ case 9:
+ return (value === null)
+ ? elm$core$Result$Ok(decoder.c)
+ : _Json_expecting('null', value);
+
+ case 5:
+ return elm$core$Result$Ok(_Json_wrap(value));
+
+ case 7:
+ if (!Array.isArray(value))
+ {
+ return _Json_expecting('a LIST', value);
+ }
+ return _Json_runArrayDecoder(decoder.b, value, _List_fromArray);
+
+ case 8:
+ if (!Array.isArray(value))
+ {
+ return _Json_expecting('an ARRAY', value);
+ }
+ return _Json_runArrayDecoder(decoder.b, value, _Json_toElmArray);
+
+ case 10:
+ var field = decoder.d;
+ if (typeof value !== 'object' || value === null || !(field in value))
+ {
+ return _Json_expecting('an OBJECT with a field named `' + field + '`', value);
+ }
+ var result = _Json_runHelp(decoder.b, value[field]);
+ return (elm$core$Result$isOk(result)) ? result : elm$core$Result$Err(A2(elm$json$Json$Decode$Field, field, result.a));
+
+ case 11:
+ var index = decoder.e;
+ if (!Array.isArray(value))
+ {
+ return _Json_expecting('an ARRAY', value);
+ }
+ if (index >= value.length)
+ {
+ return _Json_expecting('a LONGER array. Need index ' + index + ' but only see ' + value.length + ' entries', value);
+ }
+ var result = _Json_runHelp(decoder.b, value[index]);
+ return (elm$core$Result$isOk(result)) ? result : elm$core$Result$Err(A2(elm$json$Json$Decode$Index, index, result.a));
+
+ case 12:
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
+ {
+ return _Json_expecting('an OBJECT', value);
+ }
+
+ var keyValuePairs = _List_Nil;
+ // TODO test perf of Object.keys and switch when support is good enough
+ for (var key in value)
+ {
+ if (value.hasOwnProperty(key))
+ {
+ var result = _Json_runHelp(decoder.b, value[key]);
+ if (!elm$core$Result$isOk(result))
+ {
+ return elm$core$Result$Err(A2(elm$json$Json$Decode$Field, key, result.a));
+ }
+ keyValuePairs = _List_Cons(_Utils_Tuple2(key, result.a), keyValuePairs);
+ }
+ }
+ return elm$core$Result$Ok(elm$core$List$reverse(keyValuePairs));
+
+ case 13:
+ var answer = decoder.f;
+ var decoders = decoder.g;
+ for (var i = 0; i < decoders.length; i++)
+ {
+ var result = _Json_runHelp(decoders[i], value);
+ if (!elm$core$Result$isOk(result))
+ {
+ return result;
+ }
+ answer = answer(result.a);
+ }
+ return elm$core$Result$Ok(answer);
+
+ case 14:
+ var result = _Json_runHelp(decoder.b, value);
+ return (!elm$core$Result$isOk(result))
+ ? result
+ : _Json_runHelp(decoder.h(result.a), value);
+
+ case 15:
+ var errors = _List_Nil;
+ for (var temp = decoder.g; temp.b; temp = temp.b) // WHILE_CONS
+ {
+ var result = _Json_runHelp(temp.a, value);
+ if (elm$core$Result$isOk(result))
+ {
+ return result;
+ }
+ errors = _List_Cons(result.a, errors);
+ }
+ return elm$core$Result$Err(elm$json$Json$Decode$OneOf(elm$core$List$reverse(errors)));
+
+ case 1:
+ return elm$core$Result$Err(A2(elm$json$Json$Decode$Failure, decoder.a, _Json_wrap(value)));
+
+ case 0:
+ return elm$core$Result$Ok(decoder.a);
+ }
+}
+
+function _Json_runArrayDecoder(decoder, value, toElmValue)
+{
+ var len = value.length;
+ var array = new Array(len);
+ for (var i = 0; i < len; i++)
+ {
+ var result = _Json_runHelp(decoder, value[i]);
+ if (!elm$core$Result$isOk(result))
+ {
+ return elm$core$Result$Err(A2(elm$json$Json$Decode$Index, i, result.a));
+ }
+ array[i] = result.a;
+ }
+ return elm$core$Result$Ok(toElmValue(array));
+}
+
+function _Json_toElmArray(array)
+{
+ return A2(elm$core$Array$initialize, array.length, function(i) { return array[i]; });
+}
+
+function _Json_expecting(type, value)
+{
+ return elm$core$Result$Err(A2(elm$json$Json$Decode$Failure, 'Expecting ' + type, _Json_wrap(value)));
+}
+
+
+// EQUALITY
+
+function _Json_equality(x, y)
+{
+ if (x === y)
+ {
+ return true;
+ }
+
+ if (x.$ !== y.$)
+ {
+ return false;
+ }
+
+ switch (x.$)
+ {
+ case 0:
+ case 1:
+ return x.a === y.a;
+
+ case 3:
+ case 2:
+ case 4:
+ case 6:
+ case 5:
+ return true;
+
+ case 9:
+ return x.c === y.c;
+
+ case 7:
+ case 8:
+ case 12:
+ return _Json_equality(x.b, y.b);
+
+ case 10:
+ return x.d === y.d && _Json_equality(x.b, y.b);
+
+ case 11:
+ return x.e === y.e && _Json_equality(x.b, y.b);
+
+ case 13:
+ return x.f === y.f && _Json_listEquality(x.g, y.g);
+
+ case 14:
+ return x.h === y.h && _Json_equality(x.b, y.b);
+
+ case 15:
+ return _Json_listEquality(x.g, y.g);
+ }
+}
+
+function _Json_listEquality(aDecoders, bDecoders)
+{
+ var len = aDecoders.length;
+ if (len !== bDecoders.length)
+ {
+ return false;
+ }
+ for (var i = 0; i < len; i++)
+ {
+ if (!_Json_equality(aDecoders[i], bDecoders[i]))
+ {
+ return false;
+ }
+ }
+ return true;
+}
+
+
+// ENCODE
+
+var _Json_encode = F2(function(indentLevel, value)
+{
+ return JSON.stringify(_Json_unwrap(value), null, indentLevel);
+});
+
+function _Json_wrap_UNUSED(value) { return { $: 0, a: value }; }
+function _Json_unwrap_UNUSED(value) { return value.a; }
+
+function _Json_wrap(value) { return value; }
+function _Json_unwrap(value) { return value; }
+
+function _Json_emptyArray() { return []; }
+function _Json_emptyObject() { return {}; }
+
+var _Json_addField = F3(function(key, value, object)
+{
+ object[key] = _Json_unwrap(value);
+ return object;
+});
+
+function _Json_addEntry(func)
+{
+ return F2(function(entry, array)
+ {
+ array.push(_Json_unwrap(func(entry)));
+ return array;
+ });
+}
+
+var _Json_encodeNull = _Json_wrap(null);
+
+
+
+// TASKS
+
+function _Scheduler_succeed(value)
+{
+ return {
+ $: 0,
+ a: value
+ };
+}
+
+function _Scheduler_fail(error)
+{
+ retu