From f4e4e2eae13060b608aff85f6c861cd5904e2634 Mon Sep 17 00:00:00 2001 From: mtgmonkey Date: Thu, 24 Apr 2025 22:32:10 -0400 Subject: [PATCH] init --- Makefile | 25 + assets/js/init.js | 1 + assets/js/main.js | 9744 +++++++++++++++++++++++++++ assets/json/init.json | 2 + assets/json/test.json | 4 + backend/.gitignore | 2 + backend/CHANGELOG.md | 11 + backend/LICENSE | 26 + backend/README.md | 2 + backend/Setup.hs | 2 + backend/app/Main.hs | 90 + backend/hs-server.cabal | 80 + backend/package.yaml | 65 + backend/stack.yaml | 74 + backend/stack.yaml.lock | 13 + frontend/elm-stuff/0.19.1/Main.elmi | Bin 0 -> 48600 bytes frontend/elm-stuff/0.19.1/Main.elmo | Bin 0 -> 49155 bytes frontend/elm-stuff/0.19.1/Post.elmi | Bin 0 -> 548 bytes frontend/elm-stuff/0.19.1/Post.elmo | Bin 0 -> 1025 bytes frontend/elm-stuff/0.19.1/d.dat | Bin 0 -> 1905 bytes frontend/elm-stuff/0.19.1/i.dat | Bin 0 -> 692798 bytes frontend/elm-stuff/0.19.1/lock | 0 frontend/elm-stuff/0.19.1/o.dat | Bin 0 -> 1034864 bytes frontend/elm.json | 33 + frontend/index.def.html | 81 + frontend/shell.nix | 9 + frontend/src/Main.elm | 1165 ++++ shell.nix | 21 + src/Main.elm | 1 + src/Main.hs | 1 + 30 files changed, 11452 insertions(+) create mode 100644 Makefile create mode 100644 assets/js/init.js create mode 100644 assets/js/main.js create mode 100644 assets/json/init.json create mode 100644 assets/json/test.json create mode 100644 backend/.gitignore create mode 100644 backend/CHANGELOG.md create mode 100644 backend/LICENSE create mode 100644 backend/README.md create mode 100644 backend/Setup.hs create mode 100644 backend/app/Main.hs create mode 100644 backend/hs-server.cabal create mode 100644 backend/package.yaml create mode 100644 backend/stack.yaml create mode 100644 backend/stack.yaml.lock create mode 100644 frontend/elm-stuff/0.19.1/Main.elmi create mode 100644 frontend/elm-stuff/0.19.1/Main.elmo create mode 100644 frontend/elm-stuff/0.19.1/Post.elmi create mode 100644 frontend/elm-stuff/0.19.1/Post.elmo create mode 100644 frontend/elm-stuff/0.19.1/d.dat create mode 100644 frontend/elm-stuff/0.19.1/i.dat create mode 100644 frontend/elm-stuff/0.19.1/lock create mode 100644 frontend/elm-stuff/0.19.1/o.dat create mode 100644 frontend/elm.json create mode 100644 frontend/index.def.html create mode 100644 frontend/shell.nix create mode 100644 frontend/src/Main.elm create mode 100644 shell.nix create mode 120000 src/Main.elm create mode 120000 src/Main.hs diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..54b5350 --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +all: frontend backend + +produce: frontend-produce backend + +run: + stack exec ~/.local/bin/hs-server-exe + +backend: + cd backend && stack install + +frontend: frontend-format + cd frontend && elm make src/Main.elm --output=../assets/js/main.js + +frontend-produce: frontend-format + cd frontend && elm make src/Main.elm --optimize --output=../assets/js/main + uglifyjs assets/js/main.js --compress "pure_funcs=[F2,F3,F4,F5,F6,F7,F8,F9,A2,A3,A4,A5,A6,A7,A8,A9],pure_getters,keep_fargs=false,unsafe_comps,unsafe" | uglifyjs --mangle --output assets/js/main.js + +frontend-format: + elm-format frontend/src/Main.elm --yes + +clean: + touch assets/js/main.js + rm assets/js/main.js + +.PHONY: all produce run backend frontend frontend-produce frontend-format clean diff --git a/assets/js/init.js b/assets/js/init.js new file mode 100644 index 0000000..1084a0f --- /dev/null +++ b/assets/js/init.js @@ -0,0 +1 @@ +app=Elm.Main.init({flags:localStorage.getItem('cookies')?JSON.parse(localStorage.getItem('cookies')):''});app.ports.setStorage.subscribe(function(c){localStorage.setItem('cookies',JSON.stringify(c))}); diff --git a/assets/js/main.js b/assets/js/main.js new file mode 100644 index 0000000..ed325aa --- /dev/null +++ b/assets/js/main.js @@ -0,0 +1,9744 @@ +(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); +} + +console.warn('Compiled in DEV mode. Follow the advice at https://elm-lang.org/0.19.1/optimize for better performance and smaller assets.'); + + +// 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 (x === y) + { + return true; + } + + if (typeof x !== 'object' || x === null || y === null) + { + typeof x === 'function' && _Debug_crash(5); + return false; + } + + if (depth > 100) + { + stack.push(_Utils_Tuple2(x,y)); + return true; + } + + /**/ + 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); + } + //*/ + + /**_UNUSED/ + 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; + } + + /**/ + if (x instanceof String) + { + var a = x.valueOf(); + var b = y.valueOf(); + return a === b ? 0 : a < b ? -1 : 1; + } + //*/ + + /**_UNUSED/ + if (typeof x.$ === 'undefined') + //*/ + /**/ + 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_UNUSED = 0; +var _Utils_Tuple0 = { $: '#0' }; + +function _Utils_Tuple2_UNUSED(a, b) { return { a: a, b: b }; } +function _Utils_Tuple2(a, b) { return { $: '#2', a: a, b: b }; } + +function _Utils_Tuple3_UNUSED(a, b, c) { return { a: a, b: b, c: c }; } +function _Utils_Tuple3(a, b, c) { return { $: '#3', a: a, b: b, c: c }; } + +function _Utils_chr_UNUSED(c) { return c; } +function _Utils_chr(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 _List_Nil_UNUSED = { $: 0 }; +var _List_Nil = { $: '[]' }; + +function _List_Cons_UNUSED(hd, tl) { return { $: 1, a: hd, b: tl }; } +function _List_Cons(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; + })); +}); + + + +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_UNUSED = F2(function(tag, value) +{ + return value; +}); + +var _Debug_log = 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_UNUSED(value) +{ + return ''; +} + +function _Debug_toString(value) +{ + return _Debug_toAnsiString(false, value); +} + +function _Debug_toAnsiString(ansi, value) +{ + if (typeof value === 'function') + { + return _Debug_internalColor(ansi, ''); + } + + 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, ''); + } + + 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 DataView === 'function' && value instanceof DataView) + { + return _Debug_stringColor(ansi, '<' + value.byteLength + ' bytes>'); + } + + if (typeof File !== 'undefined' && value instanceof File) + { + return _Debug_internalColor(ansi, '<' + value.name + '>'); + } + + 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, ''); +} + +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[36m' + string + '\x1b[0m' : string; +} + +function _Debug_toHexDigit(n) +{ + return String.fromCharCode(n < 10 ? 48 + n : 55 + n); +} + + +// CRASH + + +function _Debug_crash_UNUSED(identifier) +{ + throw new Error('https://github.com/elm/core/blob/1.0.0/hints/' + identifier + '.md'); +} + + +function _Debug_crash(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 jsonErrorString = fact1; + throw new Error('Problem with the flags given to your Elm program on initialization.\n\n' + jsonErrorString); + + 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.start.line === region.end.line) + { + return 'on line ' + region.start.line; + } + return 'on lines ' + region.start.line + ' through ' + region.end.line; +} + + + +// 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; }); + + + +var _String_cons = F2(function(chr, str) +{ + return chr + str; +}); + +function _String_uncons(string) +{ + var word = string.charCodeAt(0); + return !isNaN(word) + ? $elm$core$Maybe$Just( + 0xD800 <= word && word <= 0xDBFF + ? _Utils_Tuple2(_Utils_chr(string[0] + string[1]), string.slice(2)) + : _Utils_Tuple2(_Utils_chr(string[0]), string.slice(1)) + ) + : $elm$core$Maybe$Nothing; +} + +var _String_append = F2(function(a, b) +{ + return a + b; +}); + +function _String_length(str) +{ + return str.length; +} + +var _String_map = F2(function(func, string) +{ + var len = string.length; + var array = new Array(len); + var i = 0; + while (i < len) + { + var word = string.charCodeAt(i); + if (0xD800 <= word && word <= 0xDBFF) + { + array[i] = func(_Utils_chr(string[i] + string[i+1])); + i += 2; + continue; + } + array[i] = func(_Utils_chr(string[i])); + i++; + } + return array.join(''); +}); + +var _String_filter = F2(function(isGood, str) +{ + var arr = []; + var len = str.length; + var i = 0; + while (i < len) + { + var char = str[i]; + var word = str.charCodeAt(i); + i++; + if (0xD800 <= word && word <= 0xDBFF) + { + char += str[i]; + i++; + } + + if (isGood(_Utils_chr(char))) + { + arr.push(char); + } + } + return arr.join(''); +}); + +function _String_reverse(str) +{ + var len = str.length; + var arr = new Array(len); + var i = 0; + while (i < len) + { + var word = str.charCodeAt(i); + if (0xD800 <= word && word <= 0xDBFF) + { + arr[len - i] = str[i + 1]; + i++; + arr[len - i] = str[i - 1]; + i++; + } + else + { + arr[len - i] = str[i]; + i++; + } + } + return arr.join(''); +} + +var _String_foldl = F3(function(func, state, string) +{ + var len = string.length; + var i = 0; + while (i < len) + { + var char = string[i]; + var word = string.charCodeAt(i); + i++; + if (0xD800 <= word && word <= 0xDBFF) + { + char += string[i]; + i++; + } + state = A2(func, _Utils_chr(char), state); + } + return state; +}); + +var _String_foldr = F3(function(func, state, string) +{ + var i = string.length; + while (i--) + { + var char = string[i]; + var word = string.charCodeAt(i); + if (0xDC00 <= word && word <= 0xDFFF) + { + i--; + char = string[i] + char; + } + state = A2(func, _Utils_chr(char), state); + } + return state; +}); + +var _String_split = F2(function(sep, str) +{ + return str.split(sep); +}); + +var _String_join = F2(function(sep, strs) +{ + return strs.join(sep); +}); + +var _String_slice = F3(function(start, end, str) { + return str.slice(start, end); +}); + +function _String_trim(str) +{ + return str.trim(); +} + +function _String_trimLeft(str) +{ + return str.replace(/^\s+/, ''); +} + +function _String_trimRight(str) +{ + return str.replace(/\s+$/, ''); +} + +function _String_words(str) +{ + return _List_fromArray(str.trim().split(/\s+/g)); +} + +function _String_lines(str) +{ + return _List_fromArray(str.split(/\r\n|\r|\n/g)); +} + +function _String_toUpper(str) +{ + return str.toUpperCase(); +} + +function _String_toLower(str) +{ + return str.toLowerCase(); +} + +var _String_any = F2(function(isGood, string) +{ + var i = string.length; + while (i--) + { + var char = string[i]; + var word = string.charCodeAt(i); + if (0xDC00 <= word && word <= 0xDFFF) + { + i--; + char = string[i] + char; + } + if (isGood(_Utils_chr(char))) + { + return true; + } + } + return false; +}); + +var _String_all = F2(function(isGood, string) +{ + var i = string.length; + while (i--) + { + var char = string[i]; + var word = string.charCodeAt(i); + if (0xDC00 <= word && word <= 0xDFFF) + { + i--; + char = string[i] + char; + } + if (!isGood(_Utils_chr(char))) + { + return false; + } + } + return true; +}); + +var _String_contains = F2(function(sub, str) +{ + return str.indexOf(sub) > -1; +}); + +var _String_startsWith = F2(function(sub, str) +{ + return str.indexOf(sub) === 0; +}); + +var _String_endsWith = F2(function(sub, str) +{ + return str.length >= sub.length && + str.lastIndexOf(sub) === str.length - sub.length; +}); + +var _String_indexes = F2(function(sub, str) +{ + var subLen = sub.length; + + if (subLen < 1) + { + return _List_Nil; + } + + var i = 0; + var is = []; + + while ((i = str.indexOf(sub, i)) > -1) + { + is.push(i); + i = i + subLen; + } + + return _List_fromArray(is); +}); + + +// TO STRING + +function _String_fromNumber(number) +{ + return number + ''; +} + + +// INT CONVERSIONS + +function _String_toInt(str) +{ + var total = 0; + var code0 = str.charCodeAt(0); + var start = code0 == 0x2B /* + */ || code0 == 0x2D /* - */ ? 1 : 0; + + for (var i = start; i < str.length; ++i) + { + var code = str.charCodeAt(i); + if (code < 0x30 || 0x39 < code) + { + return $elm$core$Maybe$Nothing; + } + total = 10 * total + code - 0x30; + } + + return i == start + ? $elm$core$Maybe$Nothing + : $elm$core$Maybe$Just(code0 == 0x2D ? -total : total); +} + + +// FLOAT CONVERSIONS + +function _String_toFloat(s) +{ + // check if it is a hex, octal, or binary number + if (s.length === 0 || /[\sxbo]/.test(s)) + { + return $elm$core$Maybe$Nothing; + } + var n = +s; + // faster isNaN check + return n === n ? $elm$core$Maybe$Just(n) : $elm$core$Maybe$Nothing; +} + +function _String_fromList(chars) +{ + return _List_toArray(chars).join(''); +} + + + + +function _Char_toCode(char) +{ + var code = char.charCodeAt(0); + if (0xD800 <= code && code <= 0xDBFF) + { + return (code - 0xD800) * 0x400 + char.charCodeAt(1) - 0xDC00 + 0x10000 + } + return code; +} + +function _Char_fromCode(code) +{ + return _Utils_chr( + (code < 0 || 0x10FFFF < code) + ? '\uFFFD' + : + (code <= 0xFFFF) + ? String.fromCharCode(code) + : + (code -= 0x10000, + String.fromCharCode(Math.floor(code / 0x400) + 0xD800, code % 0x400 + 0xDC00) + ) + ); +} + +function _Char_toUpper(char) +{ + return _Utils_chr(char.toUpperCase()); +} + +function _Char_toLower(char) +{ + return _Utils_chr(char.toLowerCase()); +} + +function _Char_toLocaleUpper(char) +{ + return _Utils_chr(char.toLocaleUpperCase()); +} + +function _Char_toLocaleLower(char) +{ + return _Utils_chr(char.toLocaleLowerCase()); +} + + + +/**/ +function _Json_errorToString(error) +{ + return $elm$json$Json$Decode$errorToString(error); +} +//*/ + + +// CORE DECODERS + +function _Json_succeed(msg) +{ + return { + $: 0, + a: msg + }; +} + +function _Json_fail(msg) +{ + return { + $: 1, + a: msg + }; +} + +function _Json_decodePrim(decoder) +{ + return { $: 2, b: decoder }; +} + +var _Json_decodeInt = _Json_decodePrim(function(value) { + return (typeof value !== 'number') + ? _Json_expecting('an INT', value) + : + (-2147483647 < value && value < 2147483647 && (value | 0) === value) + ? $elm$core$Result$Ok(value) + : + (isFinite(value) && !(value % 1)) + ? $elm$core$Result$Ok(value) + : _Json_expecting('an INT', value); +}); + +var _Json_decodeBool = _Json_decodePrim(function(value) { + return (typeof value === 'boolean') + ? $elm$core$Result$Ok(value) + : _Json_expecting('a BOOL', value); +}); + +var _Json_decodeFloat = _Json_decodePrim(function(value) { + return (typeof value === 'number') + ? $elm$core$Result$Ok(value) + : _Json_expecting('a FLOAT', value); +}); + +var _Json_decodeValue = _Json_decodePrim(function(value) { + return $elm$core$Result$Ok(_Json_wrap(value)); +}); + +var _Json_decodeString = _Json_decodePrim(function(value) { + return (typeof value === 'string') + ? $elm$core$Result$Ok(value) + : (value instanceof String) + ? $elm$core$Result$Ok(value + '') + : _Json_expecting('a STRING', value); +}); + +function _Json_decodeList(decoder) { return { $: 3, b: decoder }; } +function _Json_decodeArray(decoder) { return { $: 4, b: decoder }; } + +function _Json_decodeNull(value) { return { $: 5, c: value }; } + +var _Json_decodeField = F2(function(field, decoder) +{ + return { + $: 6, + d: field, + b: decoder + }; +}); + +var _Json_decodeIndex = F2(function(index, decoder) +{ + return { + $: 7, + e: index, + b: decoder + }; +}); + +function _Json_decodeKeyValuePairs(decoder) +{ + return { + $: 8, + b: decoder + }; +} + +function _Json_mapMany(f, decoders) +{ + return { + $: 9, + f: f, + g: decoders + }; +} + +var _Json_andThen = F2(function(callback, decoder) +{ + return { + $: 10, + b: decoder, + h: callback + }; +}); + +function _Json_oneOf(decoders) +{ + return { + $: 11, + 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 2: + return decoder.b(value); + + case 5: + return (value === null) + ? $elm$core$Result$Ok(decoder.c) + : _Json_expecting('null', value); + + case 3: + if (!_Json_isArray(value)) + { + return _Json_expecting('a LIST', value); + } + return _Json_runArrayDecoder(decoder.b, value, _List_fromArray); + + case 4: + if (!_Json_isArray(value)) + { + return _Json_expecting('an ARRAY', value); + } + return _Json_runArrayDecoder(decoder.b, value, _Json_toElmArray); + + case 6: + 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 7: + var index = decoder.e; + if (!_Json_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 8: + if (typeof value !== 'object' || value === null || _Json_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 9: + 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 10: + var result = _Json_runHelp(decoder.b, value); + return (!$elm$core$Result$isOk(result)) + ? result + : _Json_runHelp(decoder.h(result.a), value); + + case 11: + 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_isArray(value) +{ + return Array.isArray(value) || (typeof FileList !== 'undefined' && value instanceof FileList); +} + +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 2: + return x.b === y.b; + + case 5: + return x.c === y.c; + + case 3: + case 4: + case 8: + return _Json_equality(x.b, y.b); + + case 6: + return x.d === y.d && _Json_equality(x.b, y.b); + + case 7: + return x.e === y.e && _Json_equality(x.b, y.b); + + case 9: + return x.f === y.f && _Json_listEquality(x.g, y.g); + + case 10: + return x.h === y.h && _Json_equality(x.b, y.b); + + case 11: + 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(value) { return { $: 0, a: value }; } +function _Json_unwrap(value) { return value.a; } + +function _Json_wrap_UNUSED(value) { return value; } +function _Json_unwrap_UNUSED(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) +{ + return { + $: 1, + a: error + }; +} + +function _Scheduler_binding(callback) +{ + return { + $: 2, + b: callback, + c: null + }; +} + +var _Scheduler_andThen = F2(function(callback, task) +{ + return { + $: 3, + b: callback, + d: task + }; +}); + +var _Scheduler_onError = F2(function(callback, task) +{ + return { + $: 4, + b: callback, + d: task + }; +}); + +function _Scheduler_receive(callback) +{ + return { + $: 5, + b: callback + }; +} + + +// PROCESSES + +var _Scheduler_guid = 0; + +function _Scheduler_rawSpawn(task) +{ + var proc = { + $: 0, + e: _Scheduler_guid++, + f: task, + g: null, + h: [] + }; + + _Scheduler_enqueue(proc); + + return proc; +} + +function _Scheduler_spawn(task) +{ + return _Scheduler_binding(function(callback) { + callback(_Scheduler_succeed(_Scheduler_rawSpawn(task))); + }); +} + +function _Scheduler_rawSend(proc, msg) +{ + proc.h.push(msg); + _Scheduler_enqueue(proc); +} + +var _Scheduler_send = F2(function(proc, msg) +{ + return _Scheduler_binding(function(callback) { + _Scheduler_rawSend(proc, msg); + callback(_Scheduler_succeed(_Utils_Tuple0)); + }); +}); + +function _Scheduler_kill(proc) +{ + return _Scheduler_binding(function(callback) { + var task = proc.f; + if (task.$ === 2 && task.c) + { + task.c(); + } + + proc.f = null; + + callback(_Scheduler_succeed(_Utils_Tuple0)); + }); +} + + +/* STEP PROCESSES + +type alias Process = + { $ : tag + , id : unique_id + , root : Task + , stack : null | { $: SUCCEED | FAIL, a: callback, b: stack } + , mailbox : [msg] + } + +*/ + + +var _Scheduler_working = false; +var _Scheduler_queue = []; + + +function _Scheduler_enqueue(proc) +{ + _Scheduler_queue.push(proc); + if (_Scheduler_working) + { + return; + } + _Scheduler_working = true; + while (proc = _Scheduler_queue.shift()) + { + _Scheduler_step(proc); + } + _Scheduler_working = false; +} + + +function _Scheduler_step(proc) +{ + while (proc.f) + { + var rootTag = proc.f.$; + if (rootTag === 0 || rootTag === 1) + { + while (proc.g && proc.g.$ !== rootTag) + { + proc.g = proc.g.i; + } + if (!proc.g) + { + return; + } + proc.f = proc.g.b(proc.f.a); + proc.g = proc.g.i; + } + else if (rootTag === 2) + { + proc.f.c = proc.f.b(function(newRoot) { + proc.f = newRoot; + _Scheduler_enqueue(proc); + }); + return; + } + else if (rootTag === 5) + { + if (proc.h.length === 0) + { + return; + } + proc.f = proc.f.b(proc.h.shift()); + } + else // if (rootTag === 3 || rootTag === 4) + { + proc.g = { + $: rootTag === 3 ? 0 : 1, + b: proc.f.b, + i: proc.g + }; + proc.f = proc.f.d; + } + } +} + + + +function _Process_sleep(time) +{ + return _Scheduler_binding(function(callback) { + var id = setTimeout(function() { + callback(_Scheduler_succeed(_Utils_Tuple0)); + }, time); + + return function() { clearTimeout(id); }; + }); +} + + + + +// PROGRAMS + + +var _Platform_worker = F4(function(impl, flagDecoder, debugMetadata, args) +{ + return _Platform_initialize( + flagDecoder, + args, + impl.init, + impl.update, + impl.subscriptions, + function() { return function() {} } + ); +}); + + + +// INITIALIZE A PROGRAM + + +function _Platform_initialize(flagDecoder, args, init, update, subscriptions, stepperBuilder) +{ + var result = A2(_Json_run, flagDecoder, _Json_wrap(args ? args['flags'] : undefined)); + $elm$core$Result$isOk(result) || _Debug_crash(2 /**/, _Json_errorToString(result.a) /**/); + var managers = {}; + var initPair = init(result.a); + var model = initPair.a; + var stepper = stepperBuilder(sendToApp, model); + var ports = _Platform_setupEffects(managers, sendToApp); + + function sendToApp(msg, viewMetadata) + { + var pair = A2(update, msg, model); + stepper(model = pair.a, viewMetadata); + _Platform_enqueueEffects(managers, pair.b, subscriptions(model)); + } + + _Platform_enqueueEffects(managers, initPair.b, subscriptions(model)); + + return ports ? { ports: ports } : {}; +} + + + +// TRACK PRELOADS +// +// This is used by code in elm/browser and elm/http +// to register any HTTP requests that are triggered by init. +// + + +var _Platform_preload; + + +function _Platform_registerPreload(url) +{ + _Platform_preload.add(url); +} + + + +// EFFECT MANAGERS + + +var _Platform_effectManagers = {}; + + +function _Platform_setupEffects(managers, sendToApp) +{ + var ports; + + // setup all necessary effect managers + for (var key in _Platform_effectManagers) + { + var manager = _Platform_effectManagers[key]; + + if (manager.a) + { + ports = ports || {}; + ports[key] = manager.a(key, sendToApp); + } + + managers[key] = _Platform_instantiateManager(manager, sendToApp); + } + + return ports; +} + + +function _Platform_createManager(init, onEffects, onSelfMsg, cmdMap, subMap) +{ + return { + b: init, + c: onEffects, + d: onSelfMsg, + e: cmdMap, + f: subMap + }; +} + + +function _Platform_instantiateManager(info, sendToApp) +{ + var router = { + g: sendToApp, + h: undefined + }; + + var onEffects = info.c; + var onSelfMsg = info.d; + var cmdMap = info.e; + var subMap = info.f; + + function loop(state) + { + return A2(_Scheduler_andThen, loop, _Scheduler_receive(function(msg) + { + var value = msg.a; + + if (msg.$ === 0) + { + return A3(onSelfMsg, router, value, state); + } + + return cmdMap && subMap + ? A4(onEffects, router, value.i, value.j, state) + : A3(onEffects, router, cmdMap ? value.i : value.j, state); + })); + } + + return router.h = _Scheduler_rawSpawn(A2(_Scheduler_andThen, loop, info.b)); +} + + + +// ROUTING + + +var _Platform_sendToApp = F2(function(router, msg) +{ + return _Scheduler_binding(function(callback) + { + router.g(msg); + callback(_Scheduler_succeed(_Utils_Tuple0)); + }); +}); + + +var _Platform_sendToSelf = F2(function(router, msg) +{ + return A2(_Scheduler_send, router.h, { + $: 0, + a: msg + }); +}); + + + +// BAGS + + +function _Platform_leaf(home) +{ + return function(value) + { + return { + $: 1, + k: home, + l: value + }; + }; +} + + +function _Platform_batch(list) +{ + return { + $: 2, + m: list + }; +} + + +var _Platform_map = F2(function(tagger, bag) +{ + return { + $: 3, + n: tagger, + o: bag + } +}); + + + +// PIPE BAGS INTO EFFECT MANAGERS +// +// Effects must be queued! +// +// Say your init contains a synchronous command, like Time.now or Time.here +// +// - This will produce a batch of effects (FX_1) +// - The synchronous task triggers the subsequent `update` call +// - This will produce a batch of effects (FX_2) +// +// If we just start dispatching FX_2, subscriptions from FX_2 can be processed +// before subscriptions from FX_1. No good! Earlier versions of this code had +// this problem, leading to these reports: +// +// https://github.com/elm/core/issues/980 +// https://github.com/elm/core/pull/981 +// https://github.com/elm/compiler/issues/1776 +// +// The queue is necessary to avoid ordering issues for synchronous commands. + + +// Why use true/false here? Why not just check the length of the queue? +// The goal is to detect "are we currently dispatching effects?" If we +// are, we need to bail and let the ongoing while loop handle things. +// +// Now say the queue has 1 element. When we dequeue the final element, +// the queue will be empty, but we are still actively dispatching effects. +// So you could get queue jumping in a really tricky category of cases. +// +var _Platform_effectsQueue = []; +var _Platform_effectsActive = false; + + +function _Platform_enqueueEffects(managers, cmdBag, subBag) +{ + _Platform_effectsQueue.push({ p: managers, q: cmdBag, r: subBag }); + + if (_Platform_effectsActive) return; + + _Platform_effectsActive = true; + for (var fx; fx = _Platform_effectsQueue.shift(); ) + { + _Platform_dispatchEffects(fx.p, fx.q, fx.r); + } + _Platform_effectsActive = false; +} + + +function _Platform_dispatchEffects(managers, cmdBag, subBag) +{ + var effectsDict = {}; + _Platform_gatherEffects(true, cmdBag, effectsDict, null); + _Platform_gatherEffects(false, subBag, effectsDict, null); + + for (var home in managers) + { + _Scheduler_rawSend(managers[home], { + $: 'fx', + a: effectsDict[home] || { i: _List_Nil, j: _List_Nil } + }); + } +} + + +function _Platform_gatherEffects(isCmd, bag, effectsDict, taggers) +{ + switch (bag.$) + { + case 1: + var home = bag.k; + var effect = _Platform_toEffect(isCmd, home, taggers, bag.l); + effectsDict[home] = _Platform_insert(isCmd, effect, effectsDict[home]); + return; + + case 2: + for (var list = bag.m; list.b; list = list.b) // WHILE_CONS + { + _Platform_gatherEffects(isCmd, list.a, effectsDict, taggers); + } + return; + + case 3: + _Platform_gatherEffects(isCmd, bag.o, effectsDict, { + s: bag.n, + t: taggers + }); + return; + } +} + + +function _Platform_toEffect(isCmd, home, taggers, value) +{ + function applyTaggers(x) + { + for (var temp = taggers; temp; temp = temp.t) + { + x = temp.s(x); + } + return x; + } + + var map = isCmd + ? _Platform_effectManagers[home].e + : _Platform_effectManagers[home].f; + + return A2(map, applyTaggers, value) +} + + +function _Platform_insert(isCmd, newEffect, effects) +{ + effects = effects || { i: _List_Nil, j: _List_Nil }; + + isCmd + ? (effects.i = _List_Cons(newEffect, effects.i)) + : (effects.j = _List_Cons(newEffect, effects.j)); + + return effects; +} + + + +// PORTS + + +function _Platform_checkPortName(name) +{ + if (_Platform_effectManagers[name]) + { + _Debug_crash(3, name) + } +} + + + +// OUTGOING PORTS + + +function _Platform_outgoingPort(name, converter) +{ + _Platform_checkPortName(name); + _Platform_effectManagers[name] = { + e: _Platform_outgoingPortMap, + u: converter, + a: _Platform_setupOutgoingPort + }; + return _Platform_leaf(name); +} + + +var _Platform_outgoingPortMap = F2(function(tagger, value) { return value; }); + + +function _Platform_setupOutgoingPort(name) +{ + var subs = []; + var converter = _Platform_effectManagers[name].u; + + // CREATE MANAGER + + var init = _Process_sleep(0); + + _Platform_effectManagers[name].b = init; + _Platform_effectManagers[name].c = F3(function(router, cmdList, state) + { + for ( ; cmdList.b; cmdList = cmdList.b) // WHILE_CONS + { + // grab a separate reference to subs in case unsubscribe is called + var currentSubs = subs; + var value = _Json_unwrap(converter(cmdList.a)); + for (var i = 0; i < currentSubs.length; i++) + { + currentSubs[i](value); + } + } + return init; + }); + + // PUBLIC API + + function subscribe(callback) + { + subs.push(callback); + } + + function unsubscribe(callback) + { + // copy subs into a new array in case unsubscribe is called within a + // subscribed callback + subs = subs.slice(); + var index = subs.indexOf(callback); + if (index >= 0) + { + subs.splice(index, 1); + } + } + + return { + subscribe: subscribe, + unsubscribe: unsubscribe + }; +} + + + +// INCOMING PORTS + + +function _Platform_incomingPort(name, converter) +{ + _Platform_checkPortName(name); + _Platform_effectManagers[name] = { + f: _Platform_incomingPortMap, + u: converter, + a: _Platform_setupIncomingPort + }; + return _Platform_leaf(name); +} + + +var _Platform_incomingPortMap = F2(function(tagger, finalTagger) +{ + return function(value) + { + return tagger(finalTagger(value)); + }; +}); + + +function _Platform_setupIncomingPort(name, sendToApp) +{ + var subs = _List_Nil; + var converter = _Platform_effectManagers[name].u; + + // CREATE MANAGER + + var init = _Scheduler_succeed(null); + + _Platform_effectManagers[name].b = init; + _Platform_effectManagers[name].c = F3(function(router, subList, state) + { + subs = subList; + return init; + }); + + // PUBLIC API + + function send(incomingValue) + { + var result = A2(_Json_run, converter, _Json_wrap(incomingValue)); + + $elm$core$Result$isOk(result) || _Debug_crash(4, name, result.a); + + var value = result.a; + for (var temp = subs; temp.b; temp = temp.b) // WHILE_CONS + { + sendToApp(temp.a(value)); + } + } + + return { send: send }; +} + + + +// EXPORT ELM MODULES +// +// Have DEBUG and PROD versions so that we can (1) give nicer errors in +// debug mode and (2) not pay for the bits needed for that in prod mode. +// + + +function _Platform_export_UNUSED(exports) +{ + scope['Elm'] + ? _Platform_mergeExportsProd(scope['Elm'], exports) + : scope['Elm'] = exports; +} + + +function _Platform_mergeExportsProd(obj, exports) +{ + for (var name in exports) + { + (name in obj) + ? (name == 'init') + ? _Debug_crash(6) + : _Platform_mergeExportsProd(obj[name], exports[name]) + : (obj[name] = exports[name]); + } +} + + +function _Platform_export(exports) +{ + scope['Elm'] + ? _Platform_mergeExportsDebug('Elm', scope['Elm'], exports) + : scope['Elm'] = exports; +} + + +function _Platform_mergeExportsDebug(moduleName, obj, exports) +{ + for (var name in exports) + { + (name in obj) + ? (name == 'init') + ? _Debug_crash(6, moduleName) + : _Platform_mergeExportsDebug(moduleName + '.' + name, obj[name], exports[name]) + : (obj[name] = exports[name]); + } +} + + + + +// HELPERS + + +var _VirtualDom_divertHrefToApp; + +var _VirtualDom_doc = typeof document !== 'undefined' ? document : {}; + + +function _VirtualDom_appendChild(parent, child) +{ + parent.appendChild(child); +} + +var _VirtualDom_init = F4(function(virtualNode, flagDecoder, debugMetadata, args) +{ + // NOTE: this function needs _Platform_export available to work + + /**_UNUSED/ + var node = args['node']; + //*/ + /**/ + var node = args && args['node'] ? args['node'] : _Debug_crash(0); + //*/ + + node.parentNode.replaceChild( + _VirtualDom_render(virtualNode, function() {}), + node + ); + + return {}; +}); + + + +// TEXT + + +function _VirtualDom_text(string) +{ + return { + $: 0, + a: string + }; +} + + + +// NODE + + +var _VirtualDom_nodeNS = F2(function(namespace, tag) +{ + return F2(function(factList, kidList) + { + for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS + { + var kid = kidList.a; + descendantsCount += (kid.b || 0); + kids.push(kid); + } + descendantsCount += kids.length; + + return { + $: 1, + c: tag, + d: _VirtualDom_organizeFacts(factList), + e: kids, + f: namespace, + b: descendantsCount + }; + }); +}); + + +var _VirtualDom_node = _VirtualDom_nodeNS(undefined); + + + +// KEYED NODE + + +var _VirtualDom_keyedNodeNS = F2(function(namespace, tag) +{ + return F2(function(factList, kidList) + { + for (var kids = [], descendantsCount = 0; kidList.b; kidList = kidList.b) // WHILE_CONS + { + var kid = kidList.a; + descendantsCount += (kid.b.b || 0); + kids.push(kid); + } + descendantsCount += kids.length; + + return { + $: 2, + c: tag, + d: _VirtualDom_organizeFacts(factList), + e: kids, + f: namespace, + b: descendantsCount + }; + }); +}); + + +var _VirtualDom_keyedNode = _VirtualDom_keyedNodeNS(undefined); + + + +// CUSTOM + + +function _VirtualDom_custom(factList, model, render, diff) +{ + return { + $: 3, + d: _VirtualDom_organizeFacts(factList), + g: model, + h: render, + i: diff + }; +} + + + +// MAP + + +var _VirtualDom_map = F2(function(tagger, node) +{ + return { + $: 4, + j: tagger, + k: node, + b: 1 + (node.b || 0) + }; +}); + + + +// LAZY + + +function _VirtualDom_thunk(refs, thunk) +{ + return { + $: 5, + l: refs, + m: thunk, + k: undefined + }; +} + +var _VirtualDom_lazy = F2(function(func, a) +{ + return _VirtualDom_thunk([func, a], function() { + return func(a); + }); +}); + +var _VirtualDom_lazy2 = F3(function(func, a, b) +{ + return _VirtualDom_thunk([func, a, b], function() { + return A2(func, a, b); + }); +}); + +var _VirtualDom_lazy3 = F4(function(func, a, b, c) +{ + return _VirtualDom_thunk([func, a, b, c], function() { + return A3(func, a, b, c); + }); +}); + +var _VirtualDom_lazy4 = F5(function(func, a, b, c, d) +{ + return _VirtualDom_thunk([func, a, b, c, d], function() { + return A4(func, a, b, c, d); + }); +}); + +var _VirtualDom_lazy5 = F6(function(func, a, b, c, d, e) +{ + return _VirtualDom_thunk([func, a, b, c, d, e], function() { + return A5(func, a, b, c, d, e); + }); +}); + +var _VirtualDom_lazy6 = F7(function(func, a, b, c, d, e, f) +{ + return _VirtualDom_thunk([func, a, b, c, d, e, f], function() { + return A6(func, a, b, c, d, e, f); + }); +}); + +var _VirtualDom_lazy7 = F8(function(func, a, b, c, d, e, f, g) +{ + return _VirtualDom_thunk([func, a, b, c, d, e, f, g], function() { + return A7(func, a, b, c, d, e, f, g); + }); +}); + +var _VirtualDom_lazy8 = F9(function(func, a, b, c, d, e, f, g, h) +{ + return _VirtualDom_thunk([func, a, b, c, d, e, f, g, h], function() { + return A8(func, a, b, c, d, e, f, g, h); + }); +}); + + + +// FACTS + + +var _VirtualDom_on = F2(function(key, handler) +{ + return { + $: 'a0', + n: key, + o: handler + }; +}); +var _VirtualDom_style = F2(function(key, value) +{ + return { + $: 'a1', + n: key, + o: value + }; +}); +var _VirtualDom_property = F2(function(key, value) +{ + return { + $: 'a2', + n: key, + o: value + }; +}); +var _VirtualDom_attribute = F2(function(key, value) +{ + return { + $: 'a3', + n: key, + o: value + }; +}); +var _VirtualDom_attributeNS = F3(function(namespace, key, value) +{ + return { + $: 'a4', + n: key, + o: { f: namespace, o: value } + }; +}); + + + +// XSS ATTACK VECTOR CHECKS +// +// For some reason, tabs can appear in href protocols and it still works. +// So '\tjava\tSCRIPT:alert("!!!")' and 'javascript:alert("!!!")' are the same +// in practice. That is why _VirtualDom_RE_js and _VirtualDom_RE_js_html look +// so freaky. +// +// Pulling the regular expressions out to the top level gives a slight speed +// boost in small benchmarks (4-10%) but hoisting values to reduce allocation +// can be unpredictable in large programs where JIT may have a harder time with +// functions are not fully self-contained. The benefit is more that the js and +// js_html ones are so weird that I prefer to see them near each other. + + +var _VirtualDom_RE_script = /^script$/i; +var _VirtualDom_RE_on_formAction = /^(on|formAction$)/i; +var _VirtualDom_RE_js = /^\s*j\s*a\s*v\s*a\s*s\s*c\s*r\s*i\s*p\s*t\s*:/i; +var _VirtualDom_RE_js_html = /^\s*(j\s*a\s*v\s*a\s*s\s*c\s*r\s*i\s*p\s*t\s*:|d\s*a\s*t\s*a\s*:\s*t\s*e\s*x\s*t\s*\/\s*h\s*t\s*m\s*l\s*(,|;))/i; + + +function _VirtualDom_noScript(tag) +{ + return _VirtualDom_RE_script.test(tag) ? 'p' : tag; +} + +function _VirtualDom_noOnOrFormAction(key) +{ + return _VirtualDom_RE_on_formAction.test(key) ? 'data-' + key : key; +} + +function _VirtualDom_noInnerHtmlOrFormAction(key) +{ + return key == 'innerHTML' || key == 'formAction' ? 'data-' + key : key; +} + +function _VirtualDom_noJavaScriptUri(value) +{ + return _VirtualDom_RE_js.test(value) + ? /**_UNUSED/''//*//**/'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'//*/ + : value; +} + +function _VirtualDom_noJavaScriptOrHtmlUri(value) +{ + return _VirtualDom_RE_js_html.test(value) + ? /**_UNUSED/''//*//**/'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'//*/ + : value; +} + +function _VirtualDom_noJavaScriptOrHtmlJson(value) +{ + return (typeof _Json_unwrap(value) === 'string' && _VirtualDom_RE_js_html.test(_Json_unwrap(value))) + ? _Json_wrap( + /**_UNUSED/''//*//**/'javascript:alert("This is an XSS vector. Please use ports or web components instead.")'//*/ + ) : value; +} + + + +// MAP FACTS + + +var _VirtualDom_mapAttribute = F2(function(func, attr) +{ + return (attr.$ === 'a0') + ? A2(_VirtualDom_on, attr.n, _VirtualDom_mapHandler(func, attr.o)) + : attr; +}); + +function _VirtualDom_mapHandler(func, handler) +{ + var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler); + + // 0 = Normal + // 1 = MayStopPropagation + // 2 = MayPreventDefault + // 3 = Custom + + return { + $: handler.$, + a: + !tag + ? A2($elm$json$Json$Decode$map, func, handler.a) + : + A3($elm$json$Json$Decode$map2, + tag < 3 + ? _VirtualDom_mapEventTuple + : _VirtualDom_mapEventRecord, + $elm$json$Json$Decode$succeed(func), + handler.a + ) + }; +} + +var _VirtualDom_mapEventTuple = F2(function(func, tuple) +{ + return _Utils_Tuple2(func(tuple.a), tuple.b); +}); + +var _VirtualDom_mapEventRecord = F2(function(func, record) +{ + return { + message: func(record.message), + stopPropagation: record.stopPropagation, + preventDefault: record.preventDefault + } +}); + + + +// ORGANIZE FACTS + + +function _VirtualDom_organizeFacts(factList) +{ + for (var facts = {}; factList.b; factList = factList.b) // WHILE_CONS + { + var entry = factList.a; + + var tag = entry.$; + var key = entry.n; + var value = entry.o; + + if (tag === 'a2') + { + (key === 'className') + ? _VirtualDom_addClass(facts, key, _Json_unwrap(value)) + : facts[key] = _Json_unwrap(value); + + continue; + } + + var subFacts = facts[tag] || (facts[tag] = {}); + (tag === 'a3' && key === 'class') + ? _VirtualDom_addClass(subFacts, key, value) + : subFacts[key] = value; + } + + return facts; +} + +function _VirtualDom_addClass(object, key, newClass) +{ + var classes = object[key]; + object[key] = classes ? classes + ' ' + newClass : newClass; +} + + + +// RENDER + + +function _VirtualDom_render(vNode, eventNode) +{ + var tag = vNode.$; + + if (tag === 5) + { + return _VirtualDom_render(vNode.k || (vNode.k = vNode.m()), eventNode); + } + + if (tag === 0) + { + return _VirtualDom_doc.createTextNode(vNode.a); + } + + if (tag === 4) + { + var subNode = vNode.k; + var tagger = vNode.j; + + while (subNode.$ === 4) + { + typeof tagger !== 'object' + ? tagger = [tagger, subNode.j] + : tagger.push(subNode.j); + + subNode = subNode.k; + } + + var subEventRoot = { j: tagger, p: eventNode }; + var domNode = _VirtualDom_render(subNode, subEventRoot); + domNode.elm_event_node_ref = subEventRoot; + return domNode; + } + + if (tag === 3) + { + var domNode = vNode.h(vNode.g); + _VirtualDom_applyFacts(domNode, eventNode, vNode.d); + return domNode; + } + + // at this point `tag` must be 1 or 2 + + var domNode = vNode.f + ? _VirtualDom_doc.createElementNS(vNode.f, vNode.c) + : _VirtualDom_doc.createElement(vNode.c); + + if (_VirtualDom_divertHrefToApp && vNode.c == 'a') + { + domNode.addEventListener('click', _VirtualDom_divertHrefToApp(domNode)); + } + + _VirtualDom_applyFacts(domNode, eventNode, vNode.d); + + for (var kids = vNode.e, i = 0; i < kids.length; i++) + { + _VirtualDom_appendChild(domNode, _VirtualDom_render(tag === 1 ? kids[i] : kids[i].b, eventNode)); + } + + return domNode; +} + + + +// APPLY FACTS + + +function _VirtualDom_applyFacts(domNode, eventNode, facts) +{ + for (var key in facts) + { + var value = facts[key]; + + key === 'a1' + ? _VirtualDom_applyStyles(domNode, value) + : + key === 'a0' + ? _VirtualDom_applyEvents(domNode, eventNode, value) + : + key === 'a3' + ? _VirtualDom_applyAttrs(domNode, value) + : + key === 'a4' + ? _VirtualDom_applyAttrsNS(domNode, value) + : + ((key !== 'value' && key !== 'checked') || domNode[key] !== value) && (domNode[key] = value); + } +} + + + +// APPLY STYLES + + +function _VirtualDom_applyStyles(domNode, styles) +{ + var domNodeStyle = domNode.style; + + for (var key in styles) + { + domNodeStyle[key] = styles[key]; + } +} + + + +// APPLY ATTRS + + +function _VirtualDom_applyAttrs(domNode, attrs) +{ + for (var key in attrs) + { + var value = attrs[key]; + typeof value !== 'undefined' + ? domNode.setAttribute(key, value) + : domNode.removeAttribute(key); + } +} + + + +// APPLY NAMESPACED ATTRS + + +function _VirtualDom_applyAttrsNS(domNode, nsAttrs) +{ + for (var key in nsAttrs) + { + var pair = nsAttrs[key]; + var namespace = pair.f; + var value = pair.o; + + typeof value !== 'undefined' + ? domNode.setAttributeNS(namespace, key, value) + : domNode.removeAttributeNS(namespace, key); + } +} + + + +// APPLY EVENTS + + +function _VirtualDom_applyEvents(domNode, eventNode, events) +{ + var allCallbacks = domNode.elmFs || (domNode.elmFs = {}); + + for (var key in events) + { + var newHandler = events[key]; + var oldCallback = allCallbacks[key]; + + if (!newHandler) + { + domNode.removeEventListener(key, oldCallback); + allCallbacks[key] = undefined; + continue; + } + + if (oldCallback) + { + var oldHandler = oldCallback.q; + if (oldHandler.$ === newHandler.$) + { + oldCallback.q = newHandler; + continue; + } + domNode.removeEventListener(key, oldCallback); + } + + oldCallback = _VirtualDom_makeCallback(eventNode, newHandler); + domNode.addEventListener(key, oldCallback, + _VirtualDom_passiveSupported + && { passive: $elm$virtual_dom$VirtualDom$toHandlerInt(newHandler) < 2 } + ); + allCallbacks[key] = oldCallback; + } +} + + + +// PASSIVE EVENTS + + +var _VirtualDom_passiveSupported; + +try +{ + window.addEventListener('t', null, Object.defineProperty({}, 'passive', { + get: function() { _VirtualDom_passiveSupported = true; } + })); +} +catch(e) {} + + + +// EVENT HANDLERS + + +function _VirtualDom_makeCallback(eventNode, initialHandler) +{ + function callback(event) + { + var handler = callback.q; + var result = _Json_runHelp(handler.a, event); + + if (!$elm$core$Result$isOk(result)) + { + return; + } + + var tag = $elm$virtual_dom$VirtualDom$toHandlerInt(handler); + + // 0 = Normal + // 1 = MayStopPropagation + // 2 = MayPreventDefault + // 3 = Custom + + var value = result.a; + var message = !tag ? value : tag < 3 ? value.a : value.message; + var stopPropagation = tag == 1 ? value.b : tag == 3 && value.stopPropagation; + var currentEventNode = ( + stopPropagation && event.stopPropagation(), + (tag == 2 ? value.b : tag == 3 && value.preventDefault) && event.preventDefault(), + eventNode + ); + var tagger; + var i; + while (tagger = currentEventNode.j) + { + if (typeof tagger == 'function') + { + message = tagger(message); + } + else + { + for (var i = tagger.length; i--; ) + { + message = tagger[i](message); + } + } + currentEventNode = currentEventNode.p; + } + currentEventNode(message, stopPropagation); // stopPropagation implies isSync + } + + callback.q = initialHandler; + + return callback; +} + +function _VirtualDom_equalEvents(x, y) +{ + return x.$ == y.$ && _Json_equality(x.a, y.a); +} + + + +// DIFF + + +// TODO: Should we do patches like in iOS? +// +// type Patch +// = At Int Patch +// | Batch (List Patch) +// | Change ... +// +// How could it not be better? +// +function _VirtualDom_diff(x, y) +{ + var patches = []; + _VirtualDom_diffHelp(x, y, patches, 0); + return patches; +} + + +function _VirtualDom_pushPatch(patches, type, index, data) +{ + var patch = { + $: type, + r: index, + s: data, + t: undefined, + u: undefined + }; + patches.push(patch); + return patch; +} + + +function _VirtualDom_diffHelp(x, y, patches, index) +{ + if (x === y) + { + return; + } + + var xType = x.$; + var yType = y.$; + + // Bail if you run into different types of nodes. Implies that the + // structure has changed significantly and it's not worth a diff. + if (xType !== yType) + { + if (xType === 1 && yType === 2) + { + y = _VirtualDom_dekey(y); + yType = 1; + } + else + { + _VirtualDom_pushPatch(patches, 0, index, y); + return; + } + } + + // Now we know that both nodes are the same $. + switch (yType) + { + case 5: + var xRefs = x.l; + var yRefs = y.l; + var i = xRefs.length; + var same = i === yRefs.length; + while (same && i--) + { + same = xRefs[i] === yRefs[i]; + } + if (same) + { + y.k = x.k; + return; + } + y.k = y.m(); + var subPatches = []; + _VirtualDom_diffHelp(x.k, y.k, subPatches, 0); + subPatches.length > 0 && _VirtualDom_pushPatch(patches, 1, index, subPatches); + return; + + case 4: + // gather nested taggers + var xTaggers = x.j; + var yTaggers = y.j; + var nesting = false; + + var xSubNode = x.k; + while (xSubNode.$ === 4) + { + nesting = true; + + typeof xTaggers !== 'object' + ? xTaggers = [xTaggers, xSubNode.j] + : xTaggers.push(xSubNode.j); + + xSubNode = xSubNode.k; + } + + var ySubNode = y.k; + while (ySubNode.$ === 4) + { + nesting = true; + + typeof yTaggers !== 'object' + ? yTaggers = [yTaggers, ySubNode.j] + : yTaggers.push(ySubNode.j); + + ySubNode = ySubNode.k; + } + + // Just bail if different numbers of taggers. This implies the + // structure of the virtual DOM has changed. + if (nesting && xTaggers.length !== yTaggers.length) + { + _VirtualDom_pushPatch(patches, 0, index, y); + return; + } + + // check if taggers are "the same" + if (nesting ? !_VirtualDom_pairwiseRefEqual(xTaggers, yTaggers) : xTaggers !== yTaggers) + { + _VirtualDom_pushPatch(patches, 2, index, yTaggers); + } + + // diff everything below the taggers + _VirtualDom_diffHelp(xSubNode, ySubNode, patches, index + 1); + return; + + case 0: + if (x.a !== y.a) + { + _VirtualDom_pushPatch(patches, 3, index, y.a); + } + return; + + case 1: + _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKids); + return; + + case 2: + _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKeyedKids); + return; + + case 3: + if (x.h !== y.h) + { + _VirtualDom_pushPatch(patches, 0, index, y); + return; + } + + var factsDiff = _VirtualDom_diffFacts(x.d, y.d); + factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff); + + var patch = y.i(x.g, y.g); + patch && _VirtualDom_pushPatch(patches, 5, index, patch); + + return; + } +} + +// assumes the incoming arrays are the same length +function _VirtualDom_pairwiseRefEqual(as, bs) +{ + for (var i = 0; i < as.length; i++) + { + if (as[i] !== bs[i]) + { + return false; + } + } + + return true; +} + +function _VirtualDom_diffNodes(x, y, patches, index, diffKids) +{ + // Bail if obvious indicators have changed. Implies more serious + // structural changes such that it's not worth it to diff. + if (x.c !== y.c || x.f !== y.f) + { + _VirtualDom_pushPatch(patches, 0, index, y); + return; + } + + var factsDiff = _VirtualDom_diffFacts(x.d, y.d); + factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff); + + diffKids(x, y, patches, index); +} + + + +// DIFF FACTS + + +// TODO Instead of creating a new diff object, it's possible to just test if +// there *is* a diff. During the actual patch, do the diff again and make the +// modifications directly. This way, there's no new allocations. Worth it? +function _VirtualDom_diffFacts(x, y, category) +{ + var diff; + + // look for changes and removals + for (var xKey in x) + { + if (xKey === 'a1' || xKey === 'a0' || xKey === 'a3' || xKey === 'a4') + { + var subDiff = _VirtualDom_diffFacts(x[xKey], y[xKey] || {}, xKey); + if (subDiff) + { + diff = diff || {}; + diff[xKey] = subDiff; + } + continue; + } + + // remove if not in the new facts + if (!(xKey in y)) + { + diff = diff || {}; + diff[xKey] = + !category + ? (typeof x[xKey] === 'string' ? '' : null) + : + (category === 'a1') + ? '' + : + (category === 'a0' || category === 'a3') + ? undefined + : + { f: x[xKey].f, o: undefined }; + + continue; + } + + var xValue = x[xKey]; + var yValue = y[xKey]; + + // reference equal, so don't worry about it + if (xValue === yValue && xKey !== 'value' && xKey !== 'checked' + || category === 'a0' && _VirtualDom_equalEvents(xValue, yValue)) + { + continue; + } + + diff = diff || {}; + diff[xKey] = yValue; + } + + // add new stuff + for (var yKey in y) + { + if (!(yKey in x)) + { + diff = diff || {}; + diff[yKey] = y[yKey]; + } + } + + return diff; +} + + + +// DIFF KIDS + + +function _VirtualDom_diffKids(xParent, yParent, patches, index) +{ + var xKids = xParent.e; + var yKids = yParent.e; + + var xLen = xKids.length; + var yLen = yKids.length; + + // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS + + if (xLen > yLen) + { + _VirtualDom_pushPatch(patches, 6, index, { + v: yLen, + i: xLen - yLen + }); + } + else if (xLen < yLen) + { + _VirtualDom_pushPatch(patches, 7, index, { + v: xLen, + e: yKids + }); + } + + // PAIRWISE DIFF EVERYTHING ELSE + + for (var minLen = xLen < yLen ? xLen : yLen, i = 0; i < minLen; i++) + { + var xKid = xKids[i]; + _VirtualDom_diffHelp(xKid, yKids[i], patches, ++index); + index += xKid.b || 0; + } +} + + + +// KEYED DIFF + + +function _VirtualDom_diffKeyedKids(xParent, yParent, patches, rootIndex) +{ + var localPatches = []; + + var changes = {}; // Dict String Entry + var inserts = []; // Array { index : Int, entry : Entry } + // type Entry = { tag : String, vnode : VNode, index : Int, data : _ } + + var xKids = xParent.e; + var yKids = yParent.e; + var xLen = xKids.length; + var yLen = yKids.length; + var xIndex = 0; + var yIndex = 0; + + var index = rootIndex; + + while (xIndex < xLen && yIndex < yLen) + { + var x = xKids[xIndex]; + var y = yKids[yIndex]; + + var xKey = x.a; + var yKey = y.a; + var xNode = x.b; + var yNode = y.b; + + var newMatch = undefined; + var oldMatch = undefined; + + // check if keys match + + if (xKey === yKey) + { + index++; + _VirtualDom_diffHelp(xNode, yNode, localPatches, index); + index += xNode.b || 0; + + xIndex++; + yIndex++; + continue; + } + + // look ahead 1 to detect insertions and removals. + + var xNext = xKids[xIndex + 1]; + var yNext = yKids[yIndex + 1]; + + if (xNext) + { + var xNextKey = xNext.a; + var xNextNode = xNext.b; + oldMatch = yKey === xNextKey; + } + + if (yNext) + { + var yNextKey = yNext.a; + var yNextNode = yNext.b; + newMatch = xKey === yNextKey; + } + + + // swap x and y + if (newMatch && oldMatch) + { + index++; + _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index); + _VirtualDom_insertNode(changes, localPatches, xKey, yNode, yIndex, inserts); + index += xNode.b || 0; + + index++; + _VirtualDom_removeNode(changes, localPatches, xKey, xNextNode, index); + index += xNextNode.b || 0; + + xIndex += 2; + yIndex += 2; + continue; + } + + // insert y + if (newMatch) + { + index++; + _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts); + _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index); + index += xNode.b || 0; + + xIndex += 1; + yIndex += 2; + continue; + } + + // remove x + if (oldMatch) + { + index++; + _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index); + index += xNode.b || 0; + + index++; + _VirtualDom_diffHelp(xNextNode, yNode, localPatches, index); + index += xNextNode.b || 0; + + xIndex += 2; + yIndex += 1; + continue; + } + + // remove x, insert y + if (xNext && xNextKey === yNextKey) + { + index++; + _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index); + _VirtualDom_insertNode(changes, localPatches, yKey, yNode, yIndex, inserts); + index += xNode.b || 0; + + index++; + _VirtualDom_diffHelp(xNextNode, yNextNode, localPatches, index); + index += xNextNode.b || 0; + + xIndex += 2; + yIndex += 2; + continue; + } + + break; + } + + // eat up any remaining nodes with removeNode and insertNode + + while (xIndex < xLen) + { + index++; + var x = xKids[xIndex]; + var xNode = x.b; + _VirtualDom_removeNode(changes, localPatches, x.a, xNode, index); + index += xNode.b || 0; + xIndex++; + } + + while (yIndex < yLen) + { + var endInserts = endInserts || []; + var y = yKids[yIndex]; + _VirtualDom_insertNode(changes, localPatches, y.a, y.b, undefined, endInserts); + yIndex++; + } + + if (localPatches.length > 0 || inserts.length > 0 || endInserts) + { + _VirtualDom_pushPatch(patches, 8, rootIndex, { + w: localPatches, + x: inserts, + y: endInserts + }); + } +} + + + +// CHANGES FROM KEYED DIFF + + +var _VirtualDom_POSTFIX = '_elmW6BL'; + + +function _VirtualDom_insertNode(changes, localPatches, key, vnode, yIndex, inserts) +{ + var entry = changes[key]; + + // never seen this key before + if (!entry) + { + entry = { + c: 0, + z: vnode, + r: yIndex, + s: undefined + }; + + inserts.push({ r: yIndex, A: entry }); + changes[key] = entry; + + return; + } + + // this key was removed earlier, a match! + if (entry.c === 1) + { + inserts.push({ r: yIndex, A: entry }); + + entry.c = 2; + var subPatches = []; + _VirtualDom_diffHelp(entry.z, vnode, subPatches, entry.r); + entry.r = yIndex; + entry.s.s = { + w: subPatches, + A: entry + }; + + return; + } + + // this key has already been inserted or moved, a duplicate! + _VirtualDom_insertNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, yIndex, inserts); +} + + +function _VirtualDom_removeNode(changes, localPatches, key, vnode, index) +{ + var entry = changes[key]; + + // never seen this key before + if (!entry) + { + var patch = _VirtualDom_pushPatch(localPatches, 9, index, undefined); + + changes[key] = { + c: 1, + z: vnode, + r: index, + s: patch + }; + + return; + } + + // this key was inserted earlier, a match! + if (entry.c === 0) + { + entry.c = 2; + var subPatches = []; + _VirtualDom_diffHelp(vnode, entry.z, subPatches, index); + + _VirtualDom_pushPatch(localPatches, 9, index, { + w: subPatches, + A: entry + }); + + return; + } + + // this key has already been removed or moved, a duplicate! + _VirtualDom_removeNode(changes, localPatches, key + _VirtualDom_POSTFIX, vnode, index); +} + + + +// ADD DOM NODES +// +// Each DOM node has an "index" assigned in order of traversal. It is important +// to minimize our crawl over the actual DOM, so these indexes (along with the +// descendantsCount of virtual nodes) let us skip touching entire subtrees of +// the DOM if we know there are no patches there. + + +function _VirtualDom_addDomNodes(domNode, vNode, patches, eventNode) +{ + _VirtualDom_addDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.b, eventNode); +} + + +// assumes `patches` is non-empty and indexes increase monotonically. +function _VirtualDom_addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode) +{ + var patch = patches[i]; + var index = patch.r; + + while (index === low) + { + var patchType = patch.$; + + if (patchType === 1) + { + _VirtualDom_addDomNodes(domNode, vNode.k, patch.s, eventNode); + } + else if (patchType === 8) + { + patch.t = domNode; + patch.u = eventNode; + + var subPatches = patch.s.w; + if (subPatches.length > 0) + { + _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); + } + } + else if (patchType === 9) + { + patch.t = domNode; + patch.u = eventNode; + + var data = patch.s; + if (data) + { + data.A.s = domNode; + var subPatches = data.w; + if (subPatches.length > 0) + { + _VirtualDom_addDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode); + } + } + } + else + { + patch.t = domNode; + patch.u = eventNode; + } + + i++; + + if (!(patch = patches[i]) || (index = patch.r) > high) + { + return i; + } + } + + var tag = vNode.$; + + if (tag === 4) + { + var subNode = vNode.k; + + while (subNode.$ === 4) + { + subNode = subNode.k; + } + + return _VirtualDom_addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref); + } + + // tag must be 1 or 2 at this point + + var vKids = vNode.e; + var childNodes = domNode.childNodes; + for (var j = 0; j < vKids.length; j++) + { + low++; + var vKid = tag === 1 ? vKids[j] : vKids[j].b; + var nextLow = low + (vKid.b || 0); + if (low <= index && index <= nextLow) + { + i = _VirtualDom_addDomNodesHelp(childNodes[j], vKid, patches, i, low, nextLow, eventNode); + if (!(patch = patches[i]) || (index = patch.r) > high) + { + return i; + } + } + low = nextLow; + } + return i; +} + + + +// APPLY PATCHES + + +function _VirtualDom_applyPatches(rootDomNode, oldVirtualNode, patches, eventNode) +{ + if (patches.length === 0) + { + return rootDomNode; + } + + _VirtualDom_addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode); + return _VirtualDom_applyPatchesHelp(rootDomNode, patches); +} + +function _VirtualDom_applyPatchesHelp(rootDomNode, patches) +{ + for (var i = 0; i < patches.length; i++) + { + var patch = patches[i]; + var localDomNode = patch.t + var newNode = _VirtualDom_applyPatch(localDomNode, patch); + if (localDomNode === rootDomNode) + { + rootDomNode = newNode; + } + } + return rootDomNode; +} + +function _VirtualDom_applyPatch(domNode, patch) +{ + switch (patch.$) + { + case 0: + return _VirtualDom_applyPatchRedraw(domNode, patch.s, patch.u); + + case 4: + _VirtualDom_applyFacts(domNode, patch.u, patch.s); + return domNode; + + case 3: + domNode.replaceData(0, domNode.length, patch.s); + return domNode; + + case 1: + return _VirtualDom_applyPatchesHelp(domNode, patch.s); + + case 2: + if (domNode.elm_event_node_ref) + { + domNode.elm_event_node_ref.j = patch.s; + } + else + { + domNode.elm_event_node_ref = { j: patch.s, p: patch.u }; + } + return domNode; + + case 6: + var data = patch.s; + for (var i = 0; i < data.i; i++) + { + domNode.removeChild(domNode.childNodes[data.v]); + } + return domNode; + + case 7: + var data = patch.s; + var kids = data.e; + var i = data.v; + var theEnd = domNode.childNodes[i]; + for (; i < kids.length; i++) + { + domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd); + } + return domNode; + + case 9: + var data = patch.s; + if (!data) + { + domNode.parentNode.removeChild(domNode); + return domNode; + } + var entry = data.A; + if (typeof entry.r !== 'undefined') + { + domNode.parentNode.removeChild(domNode); + } + entry.s = _VirtualDom_applyPatchesHelp(domNode, data.w); + return domNode; + + case 8: + return _VirtualDom_applyPatchReorder(domNode, patch); + + case 5: + return patch.s(domNode); + + default: + _Debug_crash(10); // 'Ran into an unknown patch!' + } +} + + +function _VirtualDom_applyPatchRedraw(domNode, vNode, eventNode) +{ + var parentNode = domNode.parentNode; + var newNode = _VirtualDom_render(vNode, eventNode); + + if (!newNode.elm_event_node_ref) + { + newNode.elm_event_node_ref = domNode.elm_event_node_ref; + } + + if (parentNode && newNode !== domNode) + { + parentNode.replaceChild(newNode, domNode); + } + return newNode; +} + + +function _VirtualDom_applyPatchReorder(domNode, patch) +{ + var data = patch.s; + + // remove end inserts + var frag = _VirtualDom_applyPatchReorderEndInsertsHelp(data.y, patch); + + // removals + domNode = _VirtualDom_applyPatchesHelp(domNode, data.w); + + // inserts + var inserts = data.x; + for (var i = 0; i < inserts.length; i++) + { + var insert = inserts[i]; + var entry = insert.A; + var node = entry.c === 2 + ? entry.s + : _VirtualDom_render(entry.z, patch.u); + domNode.insertBefore(node, domNode.childNodes[insert.r]); + } + + // add end inserts + if (frag) + { + _VirtualDom_appendChild(domNode, frag); + } + + return domNode; +} + + +function _VirtualDom_applyPatchReorderEndInsertsHelp(endInserts, patch) +{ + if (!endInserts) + { + return; + } + + var frag = _VirtualDom_doc.createDocumentFragment(); + for (var i = 0; i < endInserts.length; i++) + { + var insert = endInserts[i]; + var entry = insert.A; + _VirtualDom_appendChild(frag, entry.c === 2 + ? entry.s + : _VirtualDom_render(entry.z, patch.u) + ); + } + return frag; +} + + +function _VirtualDom_virtualize(node) +{ + // TEXT NODES + + if (node.nodeType === 3) + { + return _VirtualDom_text(node.textContent); + } + + + // WEIRD NODES + + if (node.nodeType !== 1) + { + return _VirtualDom_text(''); + } + + + // ELEMENT NODES + + var attrList = _List_Nil; + var attrs = node.attributes; + for (var i = attrs.length; i--; ) + { + var attr = attrs[i]; + var name = attr.name; + var value = attr.value; + attrList = _List_Cons( A2(_VirtualDom_attribute, name, value), attrList ); + } + + var tag = node.tagName.toLowerCase(); + var kidList = _List_Nil; + var kids = node.childNodes; + + for (var i = kids.length; i--; ) + { + kidList = _List_Cons(_VirtualDom_virtualize(kids[i]), kidList); + } + return A3(_VirtualDom_node, tag, attrList, kidList); +} + +function _VirtualDom_dekey(keyedNode) +{ + var keyedKids = keyedNode.e; + var len = keyedKids.length; + var kids = new Array(len); + for (var i = 0; i < len; i++) + { + kids[i] = keyedKids[i].b; + } + + return { + $: 1, + c: keyedNode.c, + d: keyedNode.d, + e: kids, + f: keyedNode.f, + b: keyedNode.b + }; +} + + + + +// ELEMENT + + +var _Debugger_element; + +var _Browser_element = _Debugger_element || F4(function(impl, flagDecoder, debugMetadata, args) +{ + return _Platform_initialize( + flagDecoder, + args, + impl.init, + impl.update, + impl.subscriptions, + function(sendToApp, initialModel) { + var view = impl.view; + /**_UNUSED/ + var domNode = args['node']; + //*/ + /**/ + var domNode = args && args['node'] ? args['node'] : _Debug_crash(0); + //*/ + var currNode = _VirtualDom_virtualize(domNode); + + return _Browser_makeAnimator(initialModel, function(model) + { + var nextNode = view(model); + var patches = _VirtualDom_diff(currNode, nextNode); + domNode = _VirtualDom_applyPatches(domNode, currNode, patches, sendToApp); + currNode = nextNode; + }); + } + ); +}); + + + +// DOCUMENT + + +var _Debugger_document; + +var _Browser_document = _Debugger_document || F4(function(impl, flagDecoder, debugMetadata, args) +{ + return _Platform_initialize( + flagDecoder, + args, + impl.init, + impl.update, + impl.subscriptions, + function(sendToApp, initialModel) { + var divertHrefToApp = impl.setup && impl.setup(sendToApp) + var view = impl.view; + var title = _VirtualDom_doc.title; + var bodyNode = _VirtualDom_doc.body; + var currNode = _VirtualDom_virtualize(bodyNode); + return _Browser_makeAnimator(initialModel, function(model) + { + _VirtualDom_divertHrefToApp = divertHrefToApp; + var doc = view(model); + var nextNode = _VirtualDom_node('body')(_List_Nil)(doc.body); + var patches = _VirtualDom_diff(currNode, nextNode); + bodyNode = _VirtualDom_applyPatches(bodyNode, currNode, patches, sendToApp); + currNode = nextNode; + _VirtualDom_divertHrefToApp = 0; + (title !== doc.title) && (_VirtualDom_doc.title = title = doc.title); + }); + } + ); +}); + + + +// ANIMATION + + +var _Browser_cancelAnimationFrame = + typeof cancelAnimationFrame !== 'undefined' + ? cancelAnimationFrame + : function(id) { clearTimeout(id); }; + +var _Browser_requestAnimationFrame = + typeof requestAnimationFrame !== 'undefined' + ? requestAnimationFrame + : function(callback) { return setTimeout(callback, 1000 / 60); }; + + +function _Browser_makeAnimator(model, draw) +{ + draw(model); + + var state = 0; + + function updateIfNeeded() + { + state = state === 1 + ? 0 + : ( _Browser_requestAnimationFrame(updateIfNeeded), draw(model), 1 ); + } + + return function(nextModel, isSync) + { + model = nextModel; + + isSync + ? ( draw(model), + state === 2 && (state = 1) + ) + : ( state === 0 && _Browser_requestAnimationFrame(updateIfNeeded), + state = 2 + ); + }; +} + + + +// APPLICATION + + +function _Browser_application(impl) +{ + var onUrlChange = impl.onUrlChange; + var onUrlRequest = impl.onUrlRequest; + var key = function() { key.a(onUrlChange(_Browser_getUrl())); }; + + return _Browser_document({ + setup: function(sendToApp) + { + key.a = sendToApp; + _Browser_window.addEventListener('popstate', key); + _Browser_window.navigator.userAgent.indexOf('Trident') < 0 || _Browser_window.addEventListener('hashchange', key); + + return F2(function(domNode, event) + { + if (!event.ctrlKey && !event.metaKey && !event.shiftKey && event.button < 1 && !domNode.target && !domNode.hasAttribute('download')) + { + event.preventDefault(); + var href = domNode.href; + var curr = _Browser_getUrl(); + var next = $elm$url$Url$fromString(href).a; + sendToApp(onUrlRequest( + (next + && curr.protocol === next.protocol + && curr.host === next.host + && curr.port_.a === next.port_.a + ) + ? $elm$browser$Browser$Internal(next) + : $elm$browser$Browser$External(href) + )); + } + }); + }, + init: function(flags) + { + return A3(impl.init, flags, _Browser_getUrl(), key); + }, + view: impl.view, + update: impl.update, + subscriptions: impl.subscriptions + }); +} + +function _Browser_getUrl() +{ + return $elm$url$Url$fromString(_VirtualDom_doc.location.href).a || _Debug_crash(1); +} + +var _Browser_go = F2(function(key, n) +{ + return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() { + n && history.go(n); + key(); + })); +}); + +var _Browser_pushUrl = F2(function(key, url) +{ + return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() { + history.pushState({}, '', url); + key(); + })); +}); + +var _Browser_replaceUrl = F2(function(key, url) +{ + return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function() { + history.replaceState({}, '', url); + key(); + })); +}); + + + +// GLOBAL EVENTS + + +var _Browser_fakeNode = { addEventListener: function() {}, removeEventListener: function() {} }; +var _Browser_doc = typeof document !== 'undefined' ? document : _Browser_fakeNode; +var _Browser_window = typeof window !== 'undefined' ? window : _Browser_fakeNode; + +var _Browser_on = F3(function(node, eventName, sendToSelf) +{ + return _Scheduler_spawn(_Scheduler_binding(function(callback) + { + function handler(event) { _Scheduler_rawSpawn(sendToSelf(event)); } + node.addEventListener(eventName, handler, _VirtualDom_passiveSupported && { passive: true }); + return function() { node.removeEventListener(eventName, handler); }; + })); +}); + +var _Browser_decodeEvent = F2(function(decoder, event) +{ + var result = _Json_runHelp(decoder, event); + return $elm$core$Result$isOk(result) ? $elm$core$Maybe$Just(result.a) : $elm$core$Maybe$Nothing; +}); + + + +// PAGE VISIBILITY + + +function _Browser_visibilityInfo() +{ + return (typeof _VirtualDom_doc.hidden !== 'undefined') + ? { hidden: 'hidden', change: 'visibilitychange' } + : + (typeof _VirtualDom_doc.mozHidden !== 'undefined') + ? { hidden: 'mozHidden', change: 'mozvisibilitychange' } + : + (typeof _VirtualDom_doc.msHidden !== 'undefined') + ? { hidden: 'msHidden', change: 'msvisibilitychange' } + : + (typeof _VirtualDom_doc.webkitHidden !== 'undefined') + ? { hidden: 'webkitHidden', change: 'webkitvisibilitychange' } + : { hidden: 'hidden', change: 'visibilitychange' }; +} + + + +// ANIMATION FRAMES + + +function _Browser_rAF() +{ + return _Scheduler_binding(function(callback) + { + var id = _Browser_requestAnimationFrame(function() { + callback(_Scheduler_succeed(Date.now())); + }); + + return function() { + _Browser_cancelAnimationFrame(id); + }; + }); +} + + +function _Browser_now() +{ + return _Scheduler_binding(function(callback) + { + callback(_Scheduler_succeed(Date.now())); + }); +} + + + +// DOM STUFF + + +function _Browser_withNode(id, doStuff) +{ + return _Scheduler_binding(function(callback) + { + _Browser_requestAnimationFrame(function() { + var node = document.getElementById(id); + callback(node + ? _Scheduler_succeed(doStuff(node)) + : _Scheduler_fail($elm$browser$Browser$Dom$NotFound(id)) + ); + }); + }); +} + + +function _Browser_withWindow(doStuff) +{ + return _Scheduler_binding(function(callback) + { + _Browser_requestAnimationFrame(function() { + callback(_Scheduler_succeed(doStuff())); + }); + }); +} + + +// FOCUS and BLUR + + +var _Browser_call = F2(function(functionName, id) +{ + return _Browser_withNode(id, function(node) { + node[functionName](); + return _Utils_Tuple0; + }); +}); + + + +// WINDOW VIEWPORT + + +function _Browser_getViewport() +{ + return { + scene: _Browser_getScene(), + viewport: { + x: _Browser_window.pageXOffset, + y: _Browser_window.pageYOffset, + width: _Browser_doc.documentElement.clientWidth, + height: _Browser_doc.documentElement.clientHeight + } + }; +} + +function _Browser_getScene() +{ + var body = _Browser_doc.body; + var elem = _Browser_doc.documentElement; + return { + width: Math.max(body.scrollWidth, body.offsetWidth, elem.scrollWidth, elem.offsetWidth, elem.clientWidth), + height: Math.max(body.scrollHeight, body.offsetHeight, elem.scrollHeight, elem.offsetHeight, elem.clientHeight) + }; +} + +var _Browser_setViewport = F2(function(x, y) +{ + return _Browser_withWindow(function() + { + _Browser_window.scroll(x, y); + return _Utils_Tuple0; + }); +}); + + + +// ELEMENT VIEWPORT + + +function _Browser_getViewportOf(id) +{ + return _Browser_withNode(id, function(node) + { + return { + scene: { + width: node.scrollWidth, + height: node.scrollHeight + }, + viewport: { + x: node.scrollLeft, + y: node.scrollTop, + width: node.clientWidth, + height: node.clientHeight + } + }; + }); +} + + +var _Browser_setViewportOf = F3(function(id, x, y) +{ + return _Browser_withNode(id, function(node) + { + node.scrollLeft = x; + node.scrollTop = y; + return _Utils_Tuple0; + }); +}); + + + +// ELEMENT + + +function _Browser_getElement(id) +{ + return _Browser_withNode(id, function(node) + { + var rect = node.getBoundingClientRect(); + var x = _Browser_window.pageXOffset; + var y = _Browser_window.pageYOffset; + return { + scene: _Browser_getScene(), + viewport: { + x: x, + y: y, + width: _Browser_doc.documentElement.clientWidth, + height: _Browser_doc.documentElement.clientHeight + }, + element: { + x: x + rect.left, + y: y + rect.top, + width: rect.width, + height: rect.height + } + }; + }); +} + + + +// LOAD and RELOAD + + +function _Browser_reload(skipCache) +{ + return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback) + { + _VirtualDom_doc.location.reload(skipCache); + })); +} + +function _Browser_load(url) +{ + return A2($elm$core$Task$perform, $elm$core$Basics$never, _Scheduler_binding(function(callback) + { + try + { + _Browser_window.location = url; + } + catch(err) + { + // Only Firefox can throw a NS_ERROR_MALFORMED_URI exception here. + // Other browsers reload the page, so let's be consistent about that. + _VirtualDom_doc.location.reload(false); + } + })); +} + + + +var _Bitwise_and = F2(function(a, b) +{ + return a & b; +}); + +var _Bitwise_or = F2(function(a, b) +{ + return a | b; +}); + +var _Bitwise_xor = F2(function(a, b) +{ + return a ^ b; +}); + +function _Bitwise_complement(a) +{ + return ~a; +}; + +var _Bitwise_shiftLeftBy = F2(function(offset, a) +{ + return a << offset; +}); + +var _Bitwise_shiftRightBy = F2(function(offset, a) +{ + return a >> offset; +}); + +var _Bitwise_shiftRightZfBy = F2(function(offset, a) +{ + return a >>> offset; +}); +var $author$project$Main$LinkClicked = function (a) { + return {$: 'LinkClicked', a: a}; +}; +var $author$project$Main$UrlChanged = function (a) { + return {$: 'UrlChanged', a: a}; +}; +var $elm$core$Basics$EQ = {$: 'EQ'}; +var $elm$core$Basics$GT = {$: 'GT'}; +var $elm$core$Basics$LT = {$: 'LT'}; +var $elm$core$List$cons = _List_cons; +var $elm$core$Dict$foldr = F3( + function (func, acc, t) { + foldr: + while (true) { + if (t.$ === 'RBEmpty_elm_builtin') { + return acc; + } else { + var key = t.b; + var value = t.c; + var left = t.d; + var right = t.e; + var $temp$func = func, + $temp$acc = A3( + func, + key, + value, + A3($elm$core$Dict$foldr, func, acc, right)), + $temp$t = left; + func = $temp$func; + acc = $temp$acc; + t = $temp$t; + continue foldr; + } + } + }); +var $elm$core$Dict$toList = function (dict) { + return A3( + $elm$core$Dict$foldr, + F3( + function (key, value, list) { + return A2( + $elm$core$List$cons, + _Utils_Tuple2(key, value), + list); + }), + _List_Nil, + dict); +}; +var $elm$core$Dict$keys = function (dict) { + return A3( + $elm$core$Dict$foldr, + F3( + function (key, value, keyList) { + return A2($elm$core$List$cons, key, keyList); + }), + _List_Nil, + dict); +}; +var $elm$core$Set$toList = function (_v0) { + var dict = _v0.a; + return $elm$core$Dict$keys(dict); +}; +var $elm$core$Elm$JsArray$foldr = _JsArray_foldr; +var $elm$core$Array$foldr = F3( + function (func, baseCase, _v0) { + var tree = _v0.c; + var tail = _v0.d; + var helper = F2( + function (node, acc) { + if (node.$ === 'SubTree') { + var subTree = node.a; + return A3($elm$core$Elm$JsArray$foldr, helper, acc, subTree); + } else { + var values = node.a; + return A3($elm$core$Elm$JsArray$foldr, func, acc, values); + } + }); + return A3( + $elm$core$Elm$JsArray$foldr, + helper, + A3($elm$core$Elm$JsArray$foldr, func, baseCase, tail), + tree); + }); +var $elm$core$Array$toList = function (array) { + return A3($elm$core$Array$foldr, $elm$core$List$cons, _List_Nil, array); +}; +var $elm$core$Result$Err = function (a) { + return {$: 'Err', a: a}; +}; +var $elm$json$Json$Decode$Failure = F2( + function (a, b) { + return {$: 'Failure', a: a, b: b}; + }); +var $elm$json$Json$Decode$Field = F2( + function (a, b) { + return {$: 'Field', a: a, b: b}; + }); +var $elm$json$Json$Decode$Index = F2( + function (a, b) { + return {$: 'Index', a: a, b: b}; + }); +var $elm$core$Result$Ok = function (a) { + return {$: 'Ok', a: a}; +}; +var $elm$json$Json$Decode$OneOf = function (a) { + return {$: 'OneOf', a: a}; +}; +var $elm$core$Basics$False = {$: 'False'}; +var $elm$core$Basics$add = _Basics_add; +var $elm$core$Maybe$Just = function (a) { + return {$: 'Just', a: a}; +}; +var $elm$core$Maybe$Nothing = {$: 'Nothing'}; +var $elm$core$String$all = _String_all; +var $elm$core$Basics$and = _Basics_and; +var $elm$core$Basics$append = _Utils_append; +var $elm$json$Json$Encode$encode = _Json_encode; +var $elm$core$String$fromInt = _String_fromNumber; +var $elm$core$String$join = F2( + function (sep, chunks) { + return A2( + _String_join, + sep, + _List_toArray(chunks)); + }); +var $elm$core$String$split = F2( + function (sep, string) { + return _List_fromArray( + A2(_String_split, sep, string)); + }); +var $elm$json$Json$Decode$indent = function (str) { + return A2( + $elm$core$String$join, + '\n ', + A2($elm$core$String$split, '\n', str)); +}; +var $elm$core$List$foldl = F3( + function (func, acc, list) { + foldl: + while (true) { + if (!list.b) { + return acc; + } else { + var x = list.a; + var xs = list.b; + var $temp$func = func, + $temp$acc = A2(func, x, acc), + $temp$list = xs; + func = $temp$func; + acc = $temp$acc; + list = $temp$list; + continue foldl; + } + } + }); +var $elm$core$List$length = function (xs) { + return A3( + $elm$core$List$foldl, + F2( + function (_v0, i) { + return i + 1; + }), + 0, + xs); +}; +var $elm$core$List$map2 = _List_map2; +var $elm$core$Basics$le = _Utils_le; +var $elm$core$Basics$sub = _Basics_sub; +var $elm$core$List$rangeHelp = F3( + function (lo, hi, list) { + rangeHelp: + while (true) { + if (_Utils_cmp(lo, hi) < 1) { + var $temp$lo = lo, + $temp$hi = hi - 1, + $temp$list = A2($elm$core$List$cons, hi, list); + lo = $temp$lo; + hi = $temp$hi; + list = $temp$list; + continue rangeHelp; + } else { + return list; + } + } + }); +var $elm$core$List$range = F2( + function (lo, hi) { + return A3($elm$core$List$rangeHelp, lo, hi, _List_Nil); + }); +var $elm$core$List$indexedMap = F2( + function (f, xs) { + return A3( + $elm$core$List$map2, + f, + A2( + $elm$core$List$range, + 0, + $elm$core$List$length(xs) - 1), + xs); + }); +var $elm$core$Char$toCode = _Char_toCode; +var $elm$core$Char$isLower = function (_char) { + var code = $elm$core$Char$toCode(_char); + return (97 <= code) && (code <= 122); +}; +var $elm$core$Char$isUpper = function (_char) { + var code = $elm$core$Char$toCode(_char); + return (code <= 90) && (65 <= code); +}; +var $elm$core$Basics$or = _Basics_or; +var $elm$core$Char$isAlpha = function (_char) { + return $elm$core$Char$isLower(_char) || $elm$core$Char$isUpper(_char); +}; +var $elm$core$Char$isDigit = function (_char) { + var code = $elm$core$Char$toCode(_char); + return (code <= 57) && (48 <= code); +}; +var $elm$core$Char$isAlphaNum = function (_char) { + return $elm$core$Char$isLower(_char) || ($elm$core$Char$isUpper(_char) || $elm$core$Char$isDigit(_char)); +}; +var $elm$core$List$reverse = function (list) { + return A3($elm$core$List$foldl, $elm$core$List$cons, _List_Nil, list); +}; +var $elm$core$String$uncons = _String_uncons; +var $elm$json$Json$Decode$errorOneOf = F2( + function (i, error) { + return '\n\n(' + ($elm$core$String$fromInt(i + 1) + (') ' + $elm$json$Json$Decode$indent( + $elm$json$Json$Decode$errorToString(error)))); + }); +var $elm$json$Json$Decode$errorToString = function (error) { + return A2($elm$json$Json$Decode$errorToStringHelp, error, _List_Nil); +}; +var $elm$json$Json$Decode$errorToStringHelp = F2( + function (error, context) { + errorToStringHelp: + while (true) { + switch (error.$) { + case 'Field': + var f = error.a; + var err = error.b; + var isSimple = function () { + var _v1 = $elm$core$String$uncons(f); + if (_v1.$ === 'Nothing') { + return false; + } else { + var _v2 = _v1.a; + var _char = _v2.a; + var rest = _v2.b; + return $elm$core$Char$isAlpha(_char) && A2($elm$core$String$all, $elm$core$Char$isAlphaNum, rest); + } + }(); + var fieldName = isSimple ? ('.' + f) : ('[\'' + (f + '\']')); + var $temp$error = err, + $temp$context = A2($elm$core$List$cons, fieldName, context); + error = $temp$error; + context = $temp$context; + continue errorToStringHelp; + case 'Index': + var i = error.a; + var err = error.b; + var indexName = '[' + ($elm$core$String$fromInt(i) + ']'); + var $temp$error = err, + $temp$context = A2($elm$core$List$cons, indexName, context); + error = $temp$error; + context = $temp$context; + continue errorToStringHelp; + case 'OneOf': + var errors = error.a; + if (!errors.b) { + return 'Ran into a Json.Decode.oneOf with no possibilities' + function () { + if (!context.b) { + return '!'; + } else { + return ' at json' + A2( + $elm$core$String$join, + '', + $elm$core$List$reverse(context)); + } + }(); + } else { + if (!errors.b.b) { + var err = errors.a; + var $temp$error = err, + $temp$context = context; + error = $temp$error; + context = $temp$context; + continue errorToStringHelp; + } else { + var starter = function () { + if (!context.b) { + return 'Json.Decode.oneOf'; + } else { + return 'The Json.Decode.oneOf at json' + A2( + $elm$core$String$join, + '', + $elm$core$List$reverse(context)); + } + }(); + var introduction = starter + (' failed in the following ' + ($elm$core$String$fromInt( + $elm$core$List$length(errors)) + ' ways:')); + return A2( + $elm$core$String$join, + '\n\n', + A2( + $elm$core$List$cons, + introduction, + A2($elm$core$List$indexedMap, $elm$json$Json$Decode$errorOneOf, errors))); + } + } + default: + var msg = error.a; + var json = error.b; + var introduction = function () { + if (!context.b) { + return 'Problem with the given value:\n\n'; + } else { + return 'Problem with the value at json' + (A2( + $elm$core$String$join, + '', + $elm$core$List$reverse(context)) + ':\n\n '); + } + }(); + return introduction + ($elm$json$Json$Decode$indent( + A2($elm$json$Json$Encode$encode, 4, json)) + ('\n\n' + msg)); + } + } + }); +var $elm$core$Array$branchFactor = 32; +var $elm$core$Array$Array_elm_builtin = F4( + function (a, b, c, d) { + return {$: 'Array_elm_builtin', a: a, b: b, c: c, d: d}; + }); +var $elm$core$Elm$JsArray$empty = _JsArray_empty; +var $elm$core$Basics$ceiling = _Basics_ceiling; +var $elm$core$Basics$fdiv = _Basics_fdiv; +var $elm$core$Basics$logBase = F2( + function (base, number) { + return _Basics_log(number) / _Basics_log(base); + }); +var $elm$core$Basics$toFloat = _Basics_toFloat; +var $elm$core$Array$shiftStep = $elm$core$Basics$ceiling( + A2($elm$core$Basics$logBase, 2, $elm$core$Array$branchFactor)); +var $elm$core$Array$empty = A4($elm$core$Array$Array_elm_builtin, 0, $elm$core$Array$shiftStep, $elm$core$Elm$JsArray$empty, $elm$core$Elm$JsArray$empty); +var $elm$core$Elm$JsArray$initialize = _JsArray_initialize; +var $elm$core$Array$Leaf = function (a) { + return {$: 'Leaf', a: a}; +}; +var $elm$core$Basics$apL = F2( + function (f, x) { + return f(x); + }); +var $elm$core$Basics$apR = F2( + function (x, f) { + return f(x); + }); +var $elm$core$Basics$eq = _Utils_equal; +var $elm$core$Basics$floor = _Basics_floor; +var $elm$core$Elm$JsArray$length = _JsArray_length; +var $elm$core$Basics$gt = _Utils_gt; +var $elm$core$Basics$max = F2( + function (x, y) { + return (_Utils_cmp(x, y) > 0) ? x : y; + }); +var $elm$core$Basics$mul = _Basics_mul; +var $elm$core$Array$SubTree = function (a) { + return {$: 'SubTree', a: a}; +}; +var $elm$core$Elm$JsArray$initializeFromList = _JsArray_initializeFromList; +var $elm$core$Array$compressNodes = F2( + function (nodes, acc) { + compressNodes: + while (true) { + var _v0 = A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodes); + var node = _v0.a; + var remainingNodes = _v0.b; + var newAcc = A2( + $elm$core$List$cons, + $elm$core$Array$SubTree(node), + acc); + if (!remainingNodes.b) { + return $elm$core$List$reverse(newAcc); + } else { + var $temp$nodes = remainingNodes, + $temp$acc = newAcc; + nodes = $temp$nodes; + acc = $temp$acc; + continue compressNodes; + } + } + }); +var $elm$core$Tuple$first = function (_v0) { + var x = _v0.a; + return x; +}; +var $elm$core$Array$treeFromBuilder = F2( + function (nodeList, nodeListSize) { + treeFromBuilder: + while (true) { + var newNodeSize = $elm$core$Basics$ceiling(nodeListSize / $elm$core$Array$branchFactor); + if (newNodeSize === 1) { + return A2($elm$core$Elm$JsArray$initializeFromList, $elm$core$Array$branchFactor, nodeList).a; + } else { + var $temp$nodeList = A2($elm$core$Array$compressNodes, nodeList, _List_Nil), + $temp$nodeListSize = newNodeSize; + nodeList = $temp$nodeList; + nodeListSize = $temp$nodeListSize; + continue treeFromBuilder; + } + } + }); +var $elm$core$Array$builderToArray = F2( + function (reverseNodeList, builder) { + if (!builder.nodeListSize) { + return A4( + $elm$core$Array$Array_elm_builtin, + $elm$core$Elm$JsArray$length(builder.tail), + $elm$core$Array$shiftStep, + $elm$core$Elm$JsArray$empty, + builder.tail); + } else { + var treeLen = builder.nodeListSize * $elm$core$Array$branchFactor; + var depth = $elm$core$Basics$floor( + A2($elm$core$Basics$logBase, $elm$core$Array$branchFactor, treeLen - 1)); + var correctNodeList = reverseNodeList ? $elm$core$List$reverse(builder.nodeList) : builder.nodeList; + var tree = A2($elm$core$Array$treeFromBuilder, correctNodeList, builder.nodeListSize); + return A4( + $elm$core$Array$Array_elm_builtin, + $elm$core$Elm$JsArray$length(builder.tail) + treeLen, + A2($elm$core$Basics$max, 5, depth * $elm$core$Array$shiftStep), + tree, + builder.tail); + } + }); +var $elm$core$Basics$idiv = _Basics_idiv; +var $elm$core$Basics$lt = _Utils_lt; +var $elm$core$Array$initializeHelp = F5( + function (fn, fromIndex, len, nodeList, tail) { + initializeHelp: + while (true) { + if (fromIndex < 0) { + return A2( + $elm$core$Array$builderToArray, + false, + {nodeList: nodeList, nodeListSize: (len / $elm$core$Array$branchFactor) | 0, tail: tail}); + } else { + var leaf = $elm$core$Array$Leaf( + A3($elm$core$Elm$JsArray$initialize, $elm$core$Array$branchFactor, fromIndex, fn)); + var $temp$fn = fn, + $temp$fromIndex = fromIndex - $elm$core$Array$branchFactor, + $temp$len = len, + $temp$nodeList = A2($elm$core$List$cons, leaf, nodeList), + $temp$tail = tail; + fn = $temp$fn; + fromIndex = $temp$fromIndex; + len = $temp$len; + nodeList = $temp$nodeList; + tail = $temp$tail; + continue initializeHelp; + } + } + }); +var $elm$core$Basics$remainderBy = _Basics_remainderBy; +var $elm$core$Array$initialize = F2( + function (len, fn) { + if (len <= 0) { + return $elm$core$Array$empty; + } else { + var tailLen = len % $elm$core$Array$branchFactor; + var tail = A3($elm$core$Elm$JsArray$initialize, tailLen, len - tailLen, fn); + var initialFromIndex = (len - tailLen) - $elm$core$Array$branchFactor; + return A5($elm$core$Array$initializeHelp, fn, initialFromIndex, len, _List_Nil, tail); + } + }); +var $elm$core$Basics$True = {$: 'True'}; +var $elm$core$Result$isOk = function (result) { + if (result.$ === 'Ok') { + return true; + } else { + return false; + } +}; +var $elm$json$Json$Decode$map = _Json_map1; +var $elm$json$Json$Decode$map2 = _Json_map2; +var $elm$json$Json$Decode$succeed = _Json_succeed; +var $elm$virtual_dom$VirtualDom$toHandlerInt = function (handler) { + switch (handler.$) { + case 'Normal': + return 0; + case 'MayStopPropagation': + return 1; + case 'MayPreventDefault': + return 2; + default: + return 3; + } +}; +var $elm$browser$Browser$External = function (a) { + return {$: 'External', a: a}; +}; +var $elm$browser$Browser$Internal = function (a) { + return {$: 'Internal', a: a}; +}; +var $elm$core$Basics$identity = function (x) { + return x; +}; +var $elm$browser$Browser$Dom$NotFound = function (a) { + return {$: 'NotFound', a: a}; +}; +var $elm$url$Url$Http = {$: 'Http'}; +var $elm$url$Url$Https = {$: 'Https'}; +var $elm$url$Url$Url = F6( + function (protocol, host, port_, path, query, fragment) { + return {fragment: fragment, host: host, path: path, port_: port_, protocol: protocol, query: query}; + }); +var $elm$core$String$contains = _String_contains; +var $elm$core$String$length = _String_length; +var $elm$core$String$slice = _String_slice; +var $elm$core$String$dropLeft = F2( + function (n, string) { + return (n < 1) ? string : A3( + $elm$core$String$slice, + n, + $elm$core$String$length(string), + string); + }); +var $elm$core$String$indexes = _String_indexes; +var $elm$core$String$isEmpty = function (string) { + return string === ''; +}; +var $elm$core$String$left = F2( + function (n, string) { + return (n < 1) ? '' : A3($elm$core$String$slice, 0, n, string); + }); +var $elm$core$String$toInt = _String_toInt; +var $elm$url$Url$chompBeforePath = F5( + function (protocol, path, params, frag, str) { + if ($elm$core$String$isEmpty(str) || A2($elm$core$String$contains, '@', str)) { + return $elm$core$Maybe$Nothing; + } else { + var _v0 = A2($elm$core$String$indexes, ':', str); + if (!_v0.b) { + return $elm$core$Maybe$Just( + A6($elm$url$Url$Url, protocol, str, $elm$core$Maybe$Nothing, path, params, frag)); + } else { + if (!_v0.b.b) { + var i = _v0.a; + var _v1 = $elm$core$String$toInt( + A2($elm$core$String$dropLeft, i + 1, str)); + if (_v1.$ === 'Nothing') { + return $elm$core$Maybe$Nothing; + } else { + var port_ = _v1; + return $elm$core$Maybe$Just( + A6( + $elm$url$Url$Url, + protocol, + A2($elm$core$String$left, i, str), + port_, + path, + params, + frag)); + } + } else { + return $elm$core$Maybe$Nothing; + } + } + } + }); +var $elm$url$Url$chompBeforeQuery = F4( + function (protocol, params, frag, str) { + if ($elm$core$String$isEmpty(str)) { + return $elm$core$Maybe$Nothing; + } else { + var _v0 = A2($elm$core$String$indexes, '/', str); + if (!_v0.b) { + return A5($elm$url$Url$chompBeforePath, protocol, '/', params, frag, str); + } else { + var i = _v0.a; + return A5( + $elm$url$Url$chompBeforePath, + protocol, + A2($elm$core$String$dropLeft, i, str), + params, + frag, + A2($elm$core$String$left, i, str)); + } + } + }); +var $elm$url$Url$chompBeforeFragment = F3( + function (protocol, frag, str) { + if ($elm$core$String$isEmpty(str)) { + return $elm$core$Maybe$Nothing; + } else { + var _v0 = A2($elm$core$String$indexes, '?', str); + if (!_v0.b) { + return A4($elm$url$Url$chompBeforeQuery, protocol, $elm$core$Maybe$Nothing, frag, str); + } else { + var i = _v0.a; + return A4( + $elm$url$Url$chompBeforeQuery, + protocol, + $elm$core$Maybe$Just( + A2($elm$core$String$dropLeft, i + 1, str)), + frag, + A2($elm$core$String$left, i, str)); + } + } + }); +var $elm$url$Url$chompAfterProtocol = F2( + function (protocol, str) { + if ($elm$core$String$isEmpty(str)) { + return $elm$core$Maybe$Nothing; + } else { + var _v0 = A2($elm$core$String$indexes, '#', str); + if (!_v0.b) { + return A3($elm$url$Url$chompBeforeFragment, protocol, $elm$core$Maybe$Nothing, str); + } else { + var i = _v0.a; + return A3( + $elm$url$Url$chompBeforeFragment, + protocol, + $elm$core$Maybe$Just( + A2($elm$core$String$dropLeft, i + 1, str)), + A2($elm$core$String$left, i, str)); + } + } + }); +var $elm$core$String$startsWith = _String_startsWith; +var $elm$url$Url$fromString = function (str) { + return A2($elm$core$String$startsWith, 'http://', str) ? A2( + $elm$url$Url$chompAfterProtocol, + $elm$url$Url$Http, + A2($elm$core$String$dropLeft, 7, str)) : (A2($elm$core$String$startsWith, 'https://', str) ? A2( + $elm$url$Url$chompAfterProtocol, + $elm$url$Url$Https, + A2($elm$core$String$dropLeft, 8, str)) : $elm$core$Maybe$Nothing); +}; +var $elm$core$Basics$never = function (_v0) { + never: + while (true) { + var nvr = _v0.a; + var $temp$_v0 = nvr; + _v0 = $temp$_v0; + continue never; + } +}; +var $elm$core$Task$Perform = function (a) { + return {$: 'Perform', a: a}; +}; +var $elm$core$Task$succeed = _Scheduler_succeed; +var $elm$core$Task$init = $elm$core$Task$succeed(_Utils_Tuple0); +var $elm$core$List$foldrHelper = F4( + function (fn, acc, ctr, ls) { + if (!ls.b) { + return acc; + } else { + var a = ls.a; + var r1 = ls.b; + if (!r1.b) { + return A2(fn, a, acc); + } else { + var b = r1.a; + var r2 = r1.b; + if (!r2.b) { + return A2( + fn, + a, + A2(fn, b, acc)); + } else { + var c = r2.a; + var r3 = r2.b; + if (!r3.b) { + return A2( + fn, + a, + A2( + fn, + b, + A2(fn, c, acc))); + } else { + var d = r3.a; + var r4 = r3.b; + var res = (ctr > 500) ? A3( + $elm$core$List$foldl, + fn, + acc, + $elm$core$List$reverse(r4)) : A4($elm$core$List$foldrHelper, fn, acc, ctr + 1, r4); + return A2( + fn, + a, + A2( + fn, + b, + A2( + fn, + c, + A2(fn, d, res)))); + } + } + } + } + }); +var $elm$core$List$foldr = F3( + function (fn, acc, ls) { + return A4($elm$core$List$foldrHelper, fn, acc, 0, ls); + }); +var $elm$core$List$map = F2( + function (f, xs) { + return A3( + $elm$core$List$foldr, + F2( + function (x, acc) { + return A2( + $elm$core$List$cons, + f(x), + acc); + }), + _List_Nil, + xs); + }); +var $elm$core$Task$andThen = _Scheduler_andThen; +var $elm$core$Task$map = F2( + function (func, taskA) { + return A2( + $elm$core$Task$andThen, + function (a) { + return $elm$core$Task$succeed( + func(a)); + }, + taskA); + }); +var $elm$core$Task$map2 = F3( + function (func, taskA, taskB) { + return A2( + $elm$core$Task$andThen, + function (a) { + return A2( + $elm$core$Task$andThen, + function (b) { + return $elm$core$Task$succeed( + A2(func, a, b)); + }, + taskB); + }, + taskA); + }); +var $elm$core$Task$sequence = function (tasks) { + return A3( + $elm$core$List$foldr, + $elm$core$Task$map2($elm$core$List$cons), + $elm$core$Task$succeed(_List_Nil), + tasks); +}; +var $elm$core$Platform$sendToApp = _Platform_sendToApp; +var $elm$core$Task$spawnCmd = F2( + function (router, _v0) { + var task = _v0.a; + return _Scheduler_spawn( + A2( + $elm$core$Task$andThen, + $elm$core$Platform$sendToApp(router), + task)); + }); +var $elm$core$Task$onEffects = F3( + function (router, commands, state) { + return A2( + $elm$core$Task$map, + function (_v0) { + return _Utils_Tuple0; + }, + $elm$core$Task$sequence( + A2( + $elm$core$List$map, + $elm$core$Task$spawnCmd(router), + commands))); + }); +var $elm$core$Task$onSelfMsg = F3( + function (_v0, _v1, _v2) { + return $elm$core$Task$succeed(_Utils_Tuple0); + }); +var $elm$core$Task$cmdMap = F2( + function (tagger, _v0) { + var task = _v0.a; + return $elm$core$Task$Perform( + A2($elm$core$Task$map, tagger, task)); + }); +_Platform_effectManagers['Task'] = _Platform_createManager($elm$core$Task$init, $elm$core$Task$onEffects, $elm$core$Task$onSelfMsg, $elm$core$Task$cmdMap); +var $elm$core$Task$command = _Platform_leaf('Task'); +var $elm$core$Task$perform = F2( + function (toMessage, task) { + return $elm$core$Task$command( + $elm$core$Task$Perform( + A2($elm$core$Task$map, toMessage, task))); + }); +var $elm$browser$Browser$application = _Browser_application; +var $author$project$Main$NoInitFocus = {$: 'NoInitFocus'}; +var $author$project$Main$Pit = {$: 'Pit'}; +var $elm$core$Basics$composeL = F3( + function (g, f, x) { + return g( + f(x)); + }); +var $elm$core$Task$onError = _Scheduler_onError; +var $elm$core$Task$attempt = F2( + function (resultToMessage, task) { + return $elm$core$Task$command( + $elm$core$Task$Perform( + A2( + $elm$core$Task$onError, + A2( + $elm$core$Basics$composeL, + A2($elm$core$Basics$composeL, $elm$core$Task$succeed, resultToMessage), + $elm$core$Result$Err), + A2( + $elm$core$Task$andThen, + A2( + $elm$core$Basics$composeL, + A2($elm$core$Basics$composeL, $elm$core$Task$succeed, resultToMessage), + $elm$core$Result$Ok), + task)))); + }); +var $author$project$Main$CookiesKept = F3( + function (keepTheme, keepFont, keepPrompt) { + return {keepFont: keepFont, keepPrompt: keepPrompt, keepTheme: keepTheme}; + }); +var $elm$json$Json$Decode$field = _Json_decodeField; +var $elm$json$Json$Decode$at = F2( + function (fields, decoder) { + return A3($elm$core$List$foldr, $elm$json$Json$Decode$field, decoder, fields); + }); +var $elm$json$Json$Decode$bool = _Json_decodeBool; +var $elm$json$Json$Decode$map3 = _Json_map3; +var $author$project$Main$cookiesKeptDecoder = A4( + $elm$json$Json$Decode$map3, + $author$project$Main$CookiesKept, + A2( + $elm$json$Json$Decode$at, + _List_fromArray( + ['cookiesKept', 'keepTheme']), + $elm$json$Json$Decode$bool), + A2( + $elm$json$Json$Decode$at, + _List_fromArray( + ['cookiesKept', 'keepFont']), + $elm$json$Json$Decode$bool), + A2( + $elm$json$Json$Decode$at, + _List_fromArray( + ['cookiesKept', 'keepPrompt']), + $elm$json$Json$Decode$bool)); +var $elm$json$Json$Decode$decodeValue = _Json_run; +var $elm$browser$Browser$Dom$focus = _Browser_call('focus'); +var $author$project$Main$Font = function (fontSize) { + return {fontSize: fontSize}; +}; +var $elm$json$Json$Decode$float = _Json_decodeFloat; +var $author$project$Main$fontDecoder = A2( + $elm$json$Json$Decode$map, + $author$project$Main$Font, + A2( + $elm$json$Json$Decode$at, + _List_fromArray( + ['font', 'fontSize']), + $elm$json$Json$Decode$float)); +var $author$project$Main$Prompt = function (prompt) { + return {prompt: prompt}; +}; +var $elm$json$Json$Decode$string = _Json_decodeString; +var $author$project$Main$promptDecoder = A2( + $elm$json$Json$Decode$map, + $author$project$Main$Prompt, + A2( + $elm$json$Json$Decode$at, + _List_fromArray( + ['prompt', 'prompt']), + $elm$json$Json$Decode$string)); +var $rtfeldman$elm_css$VirtualDom$Styled$Unstyled = function (a) { + return {$: 'Unstyled', a: a}; +}; +var $elm$virtual_dom$VirtualDom$text = _VirtualDom_text; +var $rtfeldman$elm_css$VirtualDom$Styled$text = function (str) { + return $rtfeldman$elm_css$VirtualDom$Styled$Unstyled( + $elm$virtual_dom$VirtualDom$text(str)); +}; +var $rtfeldman$elm_css$Html$Styled$text = $rtfeldman$elm_css$VirtualDom$Styled$text; +var $author$project$Main$Dim = {$: 'Dim'}; +var $author$project$Main$Sky = {$: 'Sky'}; +var $author$project$Main$Sun = {$: 'Sun'}; +var $elm$json$Json$Decode$fail = _Json_fail; +var $author$project$Main$themeDecoder = function (flags) { + var _v0 = A2( + $elm$json$Json$Decode$decodeValue, + A2($elm$json$Json$Decode$field, 'theme', $elm$json$Json$Decode$string), + flags); + if (_v0.$ === 'Ok') { + switch (_v0.a) { + case 'Pit': + return $elm$json$Json$Decode$succeed($author$project$Main$Pit); + case 'Dim': + return $elm$json$Json$Decode$succeed($author$project$Main$Dim); + case 'Sky': + return $elm$json$Json$Decode$succeed($author$project$Main$Sky); + case 'Sun': + return $elm$json$Json$Decode$succeed($author$project$Main$Sun); + default: + return $elm$json$Json$Decode$fail('Unknown value found in theme field of json'); + } + } else { + return $elm$json$Json$Decode$fail('Error decoding theme field of json'); + } +}; +var $author$project$Main$init = F3( + function (flags, url, key) { + var initContent = _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('Welcome to my website!'), + $rtfeldman$elm_css$Html$Styled$text('\nRun `help` to get started') + ]); + var cookiesKept = function () { + var _v4 = A2($elm$json$Json$Decode$decodeValue, $author$project$Main$cookiesKeptDecoder, flags); + if (_v4.$ === 'Ok') { + var cK = _v4.a; + return cK; + } else { + return {keepFont: true, keepPrompt: true, keepTheme: true}; + } + }(); + return _Utils_Tuple2( + { + cliContent: '', + content: initContent, + cookiesKept: cookiesKept, + font: function () { + if (cookiesKept.keepFont) { + var _v0 = A2($elm$json$Json$Decode$decodeValue, $author$project$Main$fontDecoder, flags); + if (_v0.$ === 'Ok') { + var font = _v0.a; + return font; + } else { + return {fontSize: 20.0}; + } + } else { + return {fontSize: 20.0}; + } + }(), + key: key, + prompt: function () { + if (cookiesKept.keepPrompt) { + var _v1 = A2($elm$json$Json$Decode$decodeValue, $author$project$Main$promptDecoder, flags); + if (_v1.$ === 'Ok') { + var prompt = _v1.a; + return prompt; + } else { + return {prompt: '>'}; + } + } else { + return {prompt: '>'}; + } + }(), + theme: function () { + if (cookiesKept.keepTheme) { + var _v2 = A2( + $elm$json$Json$Decode$decodeValue, + $author$project$Main$themeDecoder(flags), + flags); + if (_v2.$ === 'Ok') { + var theme = _v2.a; + return theme; + } else { + return $author$project$Main$Pit; + } + } else { + return $author$project$Main$Pit; + } + }(), + url: url + }, + A2( + $elm$core$Task$attempt, + function (_v3) { + return $author$project$Main$NoInitFocus; + }, + $elm$browser$Browser$Dom$focus('init-focus'))); + }); +var $author$project$Main$ReceivedTest = function (a) { + return {$: 'ReceivedTest', a: a}; +}; +var $elm$core$Basics$composeR = F3( + function (f, g, x) { + return g( + f(x)); + }); +var $elm$json$Json$Decode$value = _Json_decodeValue; +var $author$project$Main$receiveTestFromServer = _Platform_incomingPort('receiveTestFromServer', $elm$json$Json$Decode$value); +var $author$project$Main$Test = F2( + function (message0, message1) { + return {message0: message0, message1: message1}; + }); +var $author$project$Main$testDecoder = A3( + $elm$json$Json$Decode$map2, + $author$project$Main$Test, + A2($elm$json$Json$Decode$field, 'message0', $elm$json$Json$Decode$string), + A2($elm$json$Json$Decode$field, 'message1', $elm$json$Json$Decode$string)); +var $author$project$Main$subscriptions = function (model) { + return $author$project$Main$receiveTestFromServer( + A2( + $elm$core$Basics$composeR, + $elm$json$Json$Decode$decodeValue($author$project$Main$testDecoder), + $author$project$Main$ReceivedTest)); +}; +var $author$project$Main$BrightMagenta = {$: 'BrightMagenta'}; +var $rtfeldman$elm_css$Css$Preprocess$AppendProperty = function (a) { + return {$: 'AppendProperty', a: a}; +}; +var $rtfeldman$elm_css$Css$Structure$Property = function (a) { + return {$: 'Property', a: a}; +}; +var $rtfeldman$elm_css$Css$property = F2( + function (key, value) { + return $rtfeldman$elm_css$Css$Preprocess$AppendProperty( + $rtfeldman$elm_css$Css$Structure$Property(key + (':' + value))); + }); +var $rtfeldman$elm_css$Css$backgroundColor = function (c) { + return A2($rtfeldman$elm_css$Css$property, 'background-color', c.value); +}; +var $rtfeldman$elm_css$Css$prop1 = F2( + function (key, arg) { + return A2($rtfeldman$elm_css$Css$property, key, arg.value); + }); +var $rtfeldman$elm_css$Css$borderWidth = $rtfeldman$elm_css$Css$prop1('border-width'); +var $rtfeldman$elm_css$Css$color = function (c) { + return A2($rtfeldman$elm_css$Css$property, 'color', c.value); +}; +var $rtfeldman$elm_css$Css$margin = $rtfeldman$elm_css$Css$prop1('margin'); +var $rtfeldman$elm_css$Css$padding = $rtfeldman$elm_css$Css$prop1('padding'); +var $rtfeldman$elm_css$Css$PxUnits = {$: 'PxUnits'}; +var $rtfeldman$elm_css$Css$Structure$Compatible = {$: 'Compatible'}; +var $elm$core$String$fromFloat = _String_fromNumber; +var $rtfeldman$elm_css$Css$Internal$lengthConverter = F3( + function (units, unitLabel, numericValue) { + return { + absoluteLength: $rtfeldman$elm_css$Css$Structure$Compatible, + calc: $rtfeldman$elm_css$Css$Structure$Compatible, + flexBasis: $rtfeldman$elm_css$Css$Structure$Compatible, + fontSize: $rtfeldman$elm_css$Css$Structure$Compatible, + length: $rtfeldman$elm_css$Css$Structure$Compatible, + lengthOrAuto: $rtfeldman$elm_css$Css$Structure$Compatible, + lengthOrAutoOrCoverOrContain: $rtfeldman$elm_css$Css$Structure$Compatible, + lengthOrMinMaxDimension: $rtfeldman$elm_css$Css$Structure$Compatible, + lengthOrNone: $rtfeldman$elm_css$Css$Structure$Compatible, + lengthOrNoneOrMinMaxDimension: $rtfeldman$elm_css$Css$Structure$Compatible, + lengthOrNumber: $rtfeldman$elm_css$Css$Structure$Compatible, + lengthOrNumberOrAutoOrNoneOrContent: $rtfeldman$elm_css$Css$Structure$Compatible, + lineHeight: $rtfeldman$elm_css$Css$Structure$Compatible, + numericValue: numericValue, + textIndent: $rtfeldman$elm_css$Css$Structure$Compatible, + unitLabel: unitLabel, + units: units, + value: _Utils_ap( + $elm$core$String$fromFloat(numericValue), + unitLabel) + }; + }); +var $rtfeldman$elm_css$Css$px = A2($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$PxUnits, 'px'); +var $rtfeldman$elm_css$VirtualDom$Styled$Node = F3( + function (a, b, c) { + return {$: 'Node', a: a, b: b, c: c}; + }); +var $rtfeldman$elm_css$VirtualDom$Styled$node = $rtfeldman$elm_css$VirtualDom$Styled$Node; +var $rtfeldman$elm_css$Html$Styled$node = $rtfeldman$elm_css$VirtualDom$Styled$node; +var $rtfeldman$elm_css$Html$Styled$span = $rtfeldman$elm_css$Html$Styled$node('span'); +var $rtfeldman$elm_css$VirtualDom$Styled$Attribute = F3( + function (a, b, c) { + return {$: 'Attribute', a: a, b: b, c: c}; + }); +var $elm$virtual_dom$VirtualDom$attribute = F2( + function (key, value) { + return A2( + _VirtualDom_attribute, + _VirtualDom_noOnOrFormAction(key), + _VirtualDom_noJavaScriptOrHtmlUri(value)); + }); +var $elm$core$List$any = F2( + function (isOkay, list) { + any: + while (true) { + if (!list.b) { + return false; + } else { + var x = list.a; + var xs = list.b; + if (isOkay(x)) { + return true; + } else { + var $temp$isOkay = isOkay, + $temp$list = xs; + isOkay = $temp$isOkay; + list = $temp$list; + continue any; + } + } + } + }); +var $elm$core$Basics$not = _Basics_not; +var $elm$core$List$all = F2( + function (isOkay, list) { + return !A2( + $elm$core$List$any, + A2($elm$core$Basics$composeL, $elm$core$Basics$not, isOkay), + list); + }); +var $elm$core$Dict$Black = {$: 'Black'}; +var $elm$core$Dict$RBNode_elm_builtin = F5( + function (a, b, c, d, e) { + return {$: 'RBNode_elm_builtin', a: a, b: b, c: c, d: d, e: e}; + }); +var $elm$core$Dict$RBEmpty_elm_builtin = {$: 'RBEmpty_elm_builtin'}; +var $elm$core$Dict$Red = {$: 'Red'}; +var $elm$core$Dict$balance = F5( + function (color, key, value, left, right) { + if ((right.$ === 'RBNode_elm_builtin') && (right.a.$ === 'Red')) { + var _v1 = right.a; + var rK = right.b; + var rV = right.c; + var rLeft = right.d; + var rRight = right.e; + if ((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) { + var _v3 = left.a; + var lK = left.b; + var lV = left.c; + var lLeft = left.d; + var lRight = left.e; + return A5( + $elm$core$Dict$RBNode_elm_builtin, + $elm$core$Dict$Red, + key, + value, + A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, lK, lV, lLeft, lRight), + A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, rK, rV, rLeft, rRight)); + } else { + return A5( + $elm$core$Dict$RBNode_elm_builtin, + color, + rK, + rV, + A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, left, rLeft), + rRight); + } + } else { + if ((((left.$ === 'RBNode_elm_builtin') && (left.a.$ === 'Red')) && (left.d.$ === 'RBNode_elm_builtin')) && (left.d.a.$ === 'Red')) { + var _v5 = left.a; + var lK = left.b; + var lV = left.c; + var _v6 = left.d; + var _v7 = _v6.a; + var llK = _v6.b; + var llV = _v6.c; + var llLeft = _v6.d; + var llRight = _v6.e; + var lRight = left.e; + return A5( + $elm$core$Dict$RBNode_elm_builtin, + $elm$core$Dict$Red, + lK, + lV, + A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, llK, llV, llLeft, llRight), + A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, key, value, lRight, right)); + } else { + return A5($elm$core$Dict$RBNode_elm_builtin, color, key, value, left, right); + } + } + }); +var $elm$core$Basics$compare = _Utils_compare; +var $elm$core$Dict$insertHelp = F3( + function (key, value, dict) { + if (dict.$ === 'RBEmpty_elm_builtin') { + return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Red, key, value, $elm$core$Dict$RBEmpty_elm_builtin, $elm$core$Dict$RBEmpty_elm_builtin); + } else { + var nColor = dict.a; + var nKey = dict.b; + var nValue = dict.c; + var nLeft = dict.d; + var nRight = dict.e; + var _v1 = A2($elm$core$Basics$compare, key, nKey); + switch (_v1.$) { + case 'LT': + return A5( + $elm$core$Dict$balance, + nColor, + nKey, + nValue, + A3($elm$core$Dict$insertHelp, key, value, nLeft), + nRight); + case 'EQ': + return A5($elm$core$Dict$RBNode_elm_builtin, nColor, nKey, value, nLeft, nRight); + default: + return A5( + $elm$core$Dict$balance, + nColor, + nKey, + nValue, + nLeft, + A3($elm$core$Dict$insertHelp, key, value, nRight)); + } + } + }); +var $elm$core$Dict$insert = F3( + function (key, value, dict) { + var _v0 = A3($elm$core$Dict$insertHelp, key, value, dict); + if ((_v0.$ === 'RBNode_elm_builtin') && (_v0.a.$ === 'Red')) { + var _v1 = _v0.a; + var k = _v0.b; + var v = _v0.c; + var l = _v0.d; + var r = _v0.e; + return A5($elm$core$Dict$RBNode_elm_builtin, $elm$core$Dict$Black, k, v, l, r); + } else { + var x = _v0; + return x; + } + }); +var $elm$core$List$isEmpty = function (xs) { + if (!xs.b) { + return true; + } else { + return false; + } +}; +var $rtfeldman$elm_css$Css$Structure$compactHelp = F2( + function (declaration, _v0) { + var keyframesByName = _v0.a; + var declarations = _v0.b; + switch (declaration.$) { + case 'StyleBlockDeclaration': + var _v2 = declaration.a; + var properties = _v2.c; + return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( + keyframesByName, + A2($elm$core$List$cons, declaration, declarations)); + case 'MediaRule': + var styleBlocks = declaration.b; + return A2( + $elm$core$List$all, + function (_v3) { + var properties = _v3.c; + return $elm$core$List$isEmpty(properties); + }, + styleBlocks) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( + keyframesByName, + A2($elm$core$List$cons, declaration, declarations)); + case 'SupportsRule': + var otherDeclarations = declaration.b; + return $elm$core$List$isEmpty(otherDeclarations) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( + keyframesByName, + A2($elm$core$List$cons, declaration, declarations)); + case 'DocumentRule': + return _Utils_Tuple2( + keyframesByName, + A2($elm$core$List$cons, declaration, declarations)); + case 'PageRule': + var properties = declaration.a; + return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( + keyframesByName, + A2($elm$core$List$cons, declaration, declarations)); + case 'FontFace': + var properties = declaration.a; + return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( + keyframesByName, + A2($elm$core$List$cons, declaration, declarations)); + case 'Keyframes': + var record = declaration.a; + return $elm$core$String$isEmpty(record.declaration) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( + A3($elm$core$Dict$insert, record.name, record.declaration, keyframesByName), + declarations); + case 'Viewport': + var properties = declaration.a; + return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( + keyframesByName, + A2($elm$core$List$cons, declaration, declarations)); + case 'CounterStyle': + var properties = declaration.a; + return $elm$core$List$isEmpty(properties) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( + keyframesByName, + A2($elm$core$List$cons, declaration, declarations)); + default: + var tuples = declaration.a; + return A2( + $elm$core$List$all, + function (_v4) { + var properties = _v4.b; + return $elm$core$List$isEmpty(properties); + }, + tuples) ? _Utils_Tuple2(keyframesByName, declarations) : _Utils_Tuple2( + keyframesByName, + A2($elm$core$List$cons, declaration, declarations)); + } + }); +var $elm$core$Dict$empty = $elm$core$Dict$RBEmpty_elm_builtin; +var $rtfeldman$elm_css$Css$Structure$Keyframes = function (a) { + return {$: 'Keyframes', a: a}; +}; +var $elm$core$List$append = F2( + function (xs, ys) { + if (!ys.b) { + return xs; + } else { + return A3($elm$core$List$foldr, $elm$core$List$cons, ys, xs); + } + }); +var $rtfeldman$elm_css$Css$Structure$withKeyframeDeclarations = F2( + function (keyframesByName, compactedDeclarations) { + return A2( + $elm$core$List$append, + A2( + $elm$core$List$map, + function (_v0) { + var name = _v0.a; + var decl = _v0.b; + return $rtfeldman$elm_css$Css$Structure$Keyframes( + {declaration: decl, name: name}); + }, + $elm$core$Dict$toList(keyframesByName)), + compactedDeclarations); + }); +var $rtfeldman$elm_css$Css$Structure$compactDeclarations = function (declarations) { + var _v0 = A3( + $elm$core$List$foldr, + $rtfeldman$elm_css$Css$Structure$compactHelp, + _Utils_Tuple2($elm$core$Dict$empty, _List_Nil), + declarations); + var keyframesByName = _v0.a; + var compactedDeclarations = _v0.b; + return A2($rtfeldman$elm_css$Css$Structure$withKeyframeDeclarations, keyframesByName, compactedDeclarations); +}; +var $rtfeldman$elm_css$Css$Structure$compactStylesheet = function (_v0) { + var declarations = _v0.declarations; + var namespaces = _v0.namespaces; + var imports = _v0.imports; + var charset = _v0.charset; + return { + charset: charset, + declarations: $rtfeldman$elm_css$Css$Structure$compactDeclarations(declarations), + imports: imports, + namespaces: namespaces + }; +}; +var $elm$core$Maybe$map = F2( + function (f, maybe) { + if (maybe.$ === 'Just') { + var value = maybe.a; + return $elm$core$Maybe$Just( + f(value)); + } else { + return $elm$core$Maybe$Nothing; + } + }); +var $elm$core$Maybe$withDefault = F2( + function (_default, maybe) { + if (maybe.$ === 'Just') { + var value = maybe.a; + return value; + } else { + return _default; + } + }); +var $rtfeldman$elm_css$Css$Structure$Output$charsetToString = function (charset) { + return A2( + $elm$core$Maybe$withDefault, + '', + A2( + $elm$core$Maybe$map, + function (str) { + return '@charset \"' + (str + '\"'); + }, + charset)); +}; +var $rtfeldman$elm_css$Css$String$mapJoinHelp = F4( + function (map, sep, strs, result) { + mapJoinHelp: + while (true) { + if (!strs.b) { + return result; + } else { + if (!strs.b.b) { + var first = strs.a; + return result + (map(first) + ''); + } else { + var first = strs.a; + var rest = strs.b; + var $temp$map = map, + $temp$sep = sep, + $temp$strs = rest, + $temp$result = result + (map(first) + (sep + '')); + map = $temp$map; + sep = $temp$sep; + strs = $temp$strs; + result = $temp$result; + continue mapJoinHelp; + } + } + } + }); +var $rtfeldman$elm_css$Css$String$mapJoin = F3( + function (map, sep, strs) { + return A4($rtfeldman$elm_css$Css$String$mapJoinHelp, map, sep, strs, ''); + }); +var $rtfeldman$elm_css$Css$Structure$Output$mediaExpressionToString = function (expression) { + return '(' + (expression.feature + (A2( + $elm$core$Maybe$withDefault, + '', + A2( + $elm$core$Maybe$map, + $elm$core$Basics$append(': '), + expression.value)) + ')')); +}; +var $rtfeldman$elm_css$Css$Structure$Output$mediaTypeToString = function (mediaType) { + switch (mediaType.$) { + case 'Print': + return 'print'; + case 'Screen': + return 'screen'; + default: + return 'speech'; + } +}; +var $rtfeldman$elm_css$Css$Structure$Output$mediaQueryToString = function (mediaQuery) { + var prefixWith = F3( + function (str, mediaType, expressions) { + return str + (' ' + A2( + $elm$core$String$join, + ' and ', + A2( + $elm$core$List$cons, + $rtfeldman$elm_css$Css$Structure$Output$mediaTypeToString(mediaType), + A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$mediaExpressionToString, expressions)))); + }); + switch (mediaQuery.$) { + case 'AllQuery': + var expressions = mediaQuery.a; + return A3($rtfeldman$elm_css$Css$String$mapJoin, $rtfeldman$elm_css$Css$Structure$Output$mediaExpressionToString, ' and ', expressions); + case 'OnlyQuery': + var mediaType = mediaQuery.a; + var expressions = mediaQuery.b; + return A3(prefixWith, 'only', mediaType, expressions); + case 'NotQuery': + var mediaType = mediaQuery.a; + var expressions = mediaQuery.b; + return A3(prefixWith, 'not', mediaType, expressions); + default: + var str = mediaQuery.a; + return str; + } +}; +var $rtfeldman$elm_css$Css$Structure$Output$importMediaQueryToString = F2( + function (name, mediaQuery) { + return '@import \"' + (name + ($rtfeldman$elm_css$Css$Structure$Output$mediaQueryToString(mediaQuery) + '\"')); + }); +var $rtfeldman$elm_css$Css$Structure$Output$importToString = function (_v0) { + var name = _v0.a; + var mediaQueries = _v0.b; + return A3( + $rtfeldman$elm_css$Css$String$mapJoin, + $rtfeldman$elm_css$Css$Structure$Output$importMediaQueryToString(name), + '\n', + mediaQueries); +}; +var $rtfeldman$elm_css$Css$Structure$Output$namespaceToString = function (_v0) { + var prefix = _v0.a; + var str = _v0.b; + return '@namespace ' + (prefix + ('\"' + (str + '\"'))); +}; +var $rtfeldman$elm_css$Css$Structure$Output$emitProperties = function (properties) { + return A3( + $rtfeldman$elm_css$Css$String$mapJoin, + function (_v0) { + var prop = _v0.a; + return prop + ';'; + }, + '', + properties); +}; +var $elm$core$String$append = _String_append; +var $rtfeldman$elm_css$Css$Structure$Output$pseudoElementToString = function (_v0) { + var str = _v0.a; + return '::' + str; +}; +var $rtfeldman$elm_css$Css$Structure$Output$combinatorToString = function (combinator) { + switch (combinator.$) { + case 'AdjacentSibling': + return '+'; + case 'GeneralSibling': + return '~'; + case 'Child': + return '>'; + default: + return ''; + } +}; +var $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString = function (repeatableSimpleSelector) { + switch (repeatableSimpleSelector.$) { + case 'ClassSelector': + var str = repeatableSimpleSelector.a; + return '.' + str; + case 'IdSelector': + var str = repeatableSimpleSelector.a; + return '#' + str; + case 'PseudoClassSelector': + var str = repeatableSimpleSelector.a; + return ':' + str; + default: + var str = repeatableSimpleSelector.a; + return '[' + (str + ']'); + } +}; +var $rtfeldman$elm_css$Css$Structure$Output$simpleSelectorSequenceToString = function (simpleSelectorSequence) { + switch (simpleSelectorSequence.$) { + case 'TypeSelectorSequence': + var str = simpleSelectorSequence.a.a; + var repeatableSimpleSelectors = simpleSelectorSequence.b; + return _Utils_ap( + str, + A3($rtfeldman$elm_css$Css$String$mapJoin, $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString, '', repeatableSimpleSelectors)); + case 'UniversalSelectorSequence': + var repeatableSimpleSelectors = simpleSelectorSequence.a; + return $elm$core$List$isEmpty(repeatableSimpleSelectors) ? '*' : A3($rtfeldman$elm_css$Css$String$mapJoin, $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString, '', repeatableSimpleSelectors); + default: + var str = simpleSelectorSequence.a; + var repeatableSimpleSelectors = simpleSelectorSequence.b; + return _Utils_ap( + str, + A3($rtfeldman$elm_css$Css$String$mapJoin, $rtfeldman$elm_css$Css$Structure$Output$repeatableSimpleSelectorToString, '', repeatableSimpleSelectors)); + } +}; +var $rtfeldman$elm_css$Css$Structure$Output$selectorChainToString = function (_v0) { + var combinator = _v0.a; + var sequence = _v0.b; + return $rtfeldman$elm_css$Css$Structure$Output$combinatorToString(combinator) + (' ' + $rtfeldman$elm_css$Css$Structure$Output$simpleSelectorSequenceToString(sequence)); +}; +var $rtfeldman$elm_css$Css$Structure$Output$selectorToString = function (_v0) { + var simpleSelectorSequence = _v0.a; + var chain = _v0.b; + var pseudoElement = _v0.c; + var segments = A2( + $elm$core$List$cons, + $rtfeldman$elm_css$Css$Structure$Output$simpleSelectorSequenceToString(simpleSelectorSequence), + A2($elm$core$List$map, $rtfeldman$elm_css$Css$Structure$Output$selectorChainToString, chain)); + var pseudoElementsString = A2( + $elm$core$Maybe$withDefault, + '', + A2($elm$core$Maybe$map, $rtfeldman$elm_css$Css$Structure$Output$pseudoElementToString, pseudoElement)); + return A2( + $elm$core$String$append, + A2($elm$core$String$join, ' ', segments), + pseudoElementsString); +}; +var $rtfeldman$elm_css$Css$Structure$Output$prettyPrintStyleBlock = function (_v0) { + var firstSelector = _v0.a; + var otherSelectors = _v0.b; + var properties = _v0.c; + var selectorStr = A3( + $rtfeldman$elm_css$Css$String$mapJoin, + $rtfeldman$elm_css$Css$Structure$Output$selectorToString, + ',', + A2($elm$core$List$cons, firstSelector, otherSelectors)); + return selectorStr + ('{' + ($rtfeldman$elm_css$Css$Structure$Output$emitProperties(properties) + '}')); +}; +var $rtfeldman$elm_css$Css$Structure$Output$prettyPrintDeclaration = function (decl) { + switch (decl.$) { + case 'StyleBlockDeclaration': + var styleBlock = decl.a; + return $rtfeldman$elm_css$Css$Structure$Output$prettyPrintStyleBlock(styleBlock); + case 'MediaRule': + var mediaQueries = decl.a; + var styleBlocks = decl.b; + var query = A3($rtfeldman$elm_css$Css$String$mapJoin, $rtfeldman$elm_css$Css$Structure$Output$mediaQueryToString, ', ', mediaQueries); + var blocks = A3($rtfeldman$elm_css$Css$String$mapJoin, $rtfeldman$elm_css$Css$Structure$Output$prettyPrintStyleBlock, '\n', styleBlocks); + return '@media ' + (query + ('{' + (blocks + '}'))); + case 'SupportsRule': + return 'TODO'; + case 'DocumentRule': + return 'TODO'; + case 'PageRule': + return 'TODO'; + case 'FontFace': + return 'TODO'; + case 'Keyframes': + var declaration = decl.a.declaration; + var name = decl.a.name; + return '@keyframes ' + (name + ('{' + (declaration + '}'))); + case 'Viewport': + return 'TODO'; + case 'CounterStyle': + return 'TODO'; + default: + return 'TODO'; + } +}; +var $rtfeldman$elm_css$Css$Structure$Output$prettyPrint = function (_v0) { + var declarations = _v0.declarations; + var namespaces = _v0.namespaces; + var imports = _v0.imports; + var charset = _v0.charset; + return $rtfeldman$elm_css$Css$Structure$Output$charsetToString(charset) + (A3($rtfeldman$elm_css$Css$String$mapJoin, $rtfeldman$elm_css$Css$Structure$Output$importToString, '\n', imports) + (A3($rtfeldman$elm_css$Css$String$mapJoin, $rtfeldman$elm_css$Css$Structure$Output$namespaceToString, '\n', namespaces) + (A3($rtfeldman$elm_css$Css$String$mapJoin, $rtfeldman$elm_css$Css$Structure$Output$prettyPrintDeclaration, '\n', declarations) + ''))); +}; +var $elm$core$List$concat = function (lists) { + return A3($elm$core$List$foldr, $elm$core$List$append, _List_Nil, lists); +}; +var $elm$core$List$concatMap = F2( + function (f, list) { + return $elm$core$List$concat( + A2($elm$core$List$map, f, list)); + }); +var $rtfeldman$elm_css$Css$Structure$CounterStyle = function (a) { + return {$: 'CounterStyle', a: a}; +}; +var $rtfeldman$elm_css$Css$Structure$FontFace = function (a) { + return {$: 'FontFace', a: a}; +}; +var $rtfeldman$elm_css$Css$Structure$PageRule = function (a) { + return {$: 'PageRule', a: a}; +}; +var $rtfeldman$elm_css$Css$Structure$Selector = F3( + function (a, b, c) { + return {$: 'Selector', a: a, b: b, c: c}; + }); +var $rtfeldman$elm_css$Css$Structure$StyleBlock = F3( + function (a, b, c) { + return {$: 'StyleBlock', a: a, b: b, c: c}; + }); +var $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration = function (a) { + return {$: 'StyleBlockDeclaration', a: a}; +}; +var $rtfeldman$elm_css$Css$Structure$SupportsRule = F2( + function (a, b) { + return {$: 'SupportsRule', a: a, b: b}; + }); +var $rtfeldman$elm_css$Css$Structure$Viewport = function (a) { + return {$: 'Viewport', a: a}; +}; +var $rtfeldman$elm_css$Css$Structure$MediaRule = F2( + function (a, b) { + return {$: 'MediaRule', a: a, b: b}; + }); +var $rtfeldman$elm_css$Css$Structure$mapLast = F2( + function (update, list) { + if (!list.b) { + return list; + } else { + if (!list.b.b) { + var only = list.a; + return _List_fromArray( + [ + update(only) + ]); + } else { + var first = list.a; + var rest = list.b; + return A2( + $elm$core$List$cons, + first, + A2($rtfeldman$elm_css$Css$Structure$mapLast, update, rest)); + } + } + }); +var $rtfeldman$elm_css$Css$Structure$withPropertyAppended = F2( + function (property, _v0) { + var firstSelector = _v0.a; + var otherSelectors = _v0.b; + var properties = _v0.c; + return A3( + $rtfeldman$elm_css$Css$Structure$StyleBlock, + firstSelector, + otherSelectors, + _Utils_ap( + properties, + _List_fromArray( + [property]))); + }); +var $rtfeldman$elm_css$Css$Structure$appendProperty = F2( + function (property, declarations) { + if (!declarations.b) { + return declarations; + } else { + if (!declarations.b.b) { + switch (declarations.a.$) { + case 'StyleBlockDeclaration': + var styleBlock = declarations.a.a; + return _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration( + A2($rtfeldman$elm_css$Css$Structure$withPropertyAppended, property, styleBlock)) + ]); + case 'MediaRule': + var _v1 = declarations.a; + var mediaQueries = _v1.a; + var styleBlocks = _v1.b; + return _List_fromArray( + [ + A2( + $rtfeldman$elm_css$Css$Structure$MediaRule, + mediaQueries, + A2( + $rtfeldman$elm_css$Css$Structure$mapLast, + $rtfeldman$elm_css$Css$Structure$withPropertyAppended(property), + styleBlocks)) + ]); + default: + return declarations; + } + } else { + var first = declarations.a; + var rest = declarations.b; + return A2( + $elm$core$List$cons, + first, + A2($rtfeldman$elm_css$Css$Structure$appendProperty, property, rest)); + } + } + }); +var $rtfeldman$elm_css$Css$Structure$appendToLastSelector = F2( + function (f, styleBlock) { + if (!styleBlock.b.b) { + var only = styleBlock.a; + var properties = styleBlock.c; + return _List_fromArray( + [ + A3($rtfeldman$elm_css$Css$Structure$StyleBlock, only, _List_Nil, properties), + A3( + $rtfeldman$elm_css$Css$Structure$StyleBlock, + f(only), + _List_Nil, + _List_Nil) + ]); + } else { + var first = styleBlock.a; + var rest = styleBlock.b; + var properties = styleBlock.c; + var newRest = A2($elm$core$List$map, f, rest); + var newFirst = f(first); + return _List_fromArray( + [ + A3($rtfeldman$elm_css$Css$Structure$StyleBlock, first, rest, properties), + A3($rtfeldman$elm_css$Css$Structure$StyleBlock, newFirst, newRest, _List_Nil) + ]); + } + }); +var $rtfeldman$elm_css$Css$Structure$applyPseudoElement = F2( + function (pseudo, _v0) { + var sequence = _v0.a; + var selectors = _v0.b; + return A3( + $rtfeldman$elm_css$Css$Structure$Selector, + sequence, + selectors, + $elm$core$Maybe$Just(pseudo)); + }); +var $rtfeldman$elm_css$Css$Structure$appendPseudoElementToLastSelector = F2( + function (pseudo, styleBlock) { + return A2( + $rtfeldman$elm_css$Css$Structure$appendToLastSelector, + $rtfeldman$elm_css$Css$Structure$applyPseudoElement(pseudo), + styleBlock); + }); +var $rtfeldman$elm_css$Css$Structure$CustomSelector = F2( + function (a, b) { + return {$: 'CustomSelector', a: a, b: b}; + }); +var $rtfeldman$elm_css$Css$Structure$TypeSelectorSequence = F2( + function (a, b) { + return {$: 'TypeSelectorSequence', a: a, b: b}; + }); +var $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence = function (a) { + return {$: 'UniversalSelectorSequence', a: a}; +}; +var $rtfeldman$elm_css$Css$Structure$appendRepeatable = F2( + function (selector, sequence) { + switch (sequence.$) { + case 'TypeSelectorSequence': + var typeSelector = sequence.a; + var list = sequence.b; + return A2( + $rtfeldman$elm_css$Css$Structure$TypeSelectorSequence, + typeSelector, + _Utils_ap( + list, + _List_fromArray( + [selector]))); + case 'UniversalSelectorSequence': + var list = sequence.a; + return $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence( + _Utils_ap( + list, + _List_fromArray( + [selector]))); + default: + var str = sequence.a; + var list = sequence.b; + return A2( + $rtfeldman$elm_css$Css$Structure$CustomSelector, + str, + _Utils_ap( + list, + _List_fromArray( + [selector]))); + } + }); +var $rtfeldman$elm_css$Css$Structure$appendRepeatableWithCombinator = F2( + function (selector, list) { + if (!list.b) { + return _List_Nil; + } else { + if (!list.b.b) { + var _v1 = list.a; + var combinator = _v1.a; + var sequence = _v1.b; + return _List_fromArray( + [ + _Utils_Tuple2( + combinator, + A2($rtfeldman$elm_css$Css$Structure$appendRepeatable, selector, sequence)) + ]); + } else { + var first = list.a; + var rest = list.b; + return A2( + $elm$core$List$cons, + first, + A2($rtfeldman$elm_css$Css$Structure$appendRepeatableWithCombinator, selector, rest)); + } + } + }); +var $rtfeldman$elm_css$Css$Structure$appendRepeatableSelector = F2( + function (repeatableSimpleSelector, selector) { + if (!selector.b.b) { + var sequence = selector.a; + var pseudoElement = selector.c; + return A3( + $rtfeldman$elm_css$Css$Structure$Selector, + A2($rtfeldman$elm_css$Css$Structure$appendRepeatable, repeatableSimpleSelector, sequence), + _List_Nil, + pseudoElement); + } else { + var firstSelector = selector.a; + var tuples = selector.b; + var pseudoElement = selector.c; + return A3( + $rtfeldman$elm_css$Css$Structure$Selector, + firstSelector, + A2($rtfeldman$elm_css$Css$Structure$appendRepeatableWithCombinator, repeatableSimpleSelector, tuples), + pseudoElement); + } + }); +var $rtfeldman$elm_css$Css$Structure$appendRepeatableToLastSelector = F2( + function (selector, styleBlock) { + return A2( + $rtfeldman$elm_css$Css$Structure$appendToLastSelector, + $rtfeldman$elm_css$Css$Structure$appendRepeatableSelector(selector), + styleBlock); + }); +var $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors = function (declarations) { + collectSelectors: + while (true) { + if (!declarations.b) { + return _List_Nil; + } else { + if (declarations.a.$ === 'StyleBlockDeclaration') { + var _v1 = declarations.a.a; + var firstSelector = _v1.a; + var otherSelectors = _v1.b; + var rest = declarations.b; + return _Utils_ap( + A2($elm$core$List$cons, firstSelector, otherSelectors), + $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors(rest)); + } else { + var rest = declarations.b; + var $temp$declarations = rest; + declarations = $temp$declarations; + continue collectSelectors; + } + } + } +}; +var $rtfeldman$elm_css$Css$Structure$DocumentRule = F5( + function (a, b, c, d, e) { + return {$: 'DocumentRule', a: a, b: b, c: c, d: d, e: e}; + }); +var $rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock = F2( + function (update, declarations) { + _v0$12: + while (true) { + if (!declarations.b) { + return declarations; + } else { + if (!declarations.b.b) { + switch (declarations.a.$) { + case 'StyleBlockDeclaration': + var styleBlock = declarations.a.a; + return A2( + $elm$core$List$map, + $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration, + update(styleBlock)); + case 'MediaRule': + if (declarations.a.b.b) { + if (!declarations.a.b.b.b) { + var _v1 = declarations.a; + var mediaQueries = _v1.a; + var _v2 = _v1.b; + var styleBlock = _v2.a; + return _List_fromArray( + [ + A2( + $rtfeldman$elm_css$Css$Structure$MediaRule, + mediaQueries, + update(styleBlock)) + ]); + } else { + var _v3 = declarations.a; + var mediaQueries = _v3.a; + var _v4 = _v3.b; + var first = _v4.a; + var rest = _v4.b; + var _v5 = A2( + $rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, + update, + _List_fromArray( + [ + A2($rtfeldman$elm_css$Css$Structure$MediaRule, mediaQueries, rest) + ])); + if ((_v5.b && (_v5.a.$ === 'MediaRule')) && (!_v5.b.b)) { + var _v6 = _v5.a; + var newMediaQueries = _v6.a; + var newStyleBlocks = _v6.b; + return _List_fromArray( + [ + A2( + $rtfeldman$elm_css$Css$Structure$MediaRule, + newMediaQueries, + A2($elm$core$List$cons, first, newStyleBlocks)) + ]); + } else { + var newDeclarations = _v5; + return newDeclarations; + } + } + } else { + break _v0$12; + } + case 'SupportsRule': + var _v7 = declarations.a; + var str = _v7.a; + var nestedDeclarations = _v7.b; + return _List_fromArray( + [ + A2( + $rtfeldman$elm_css$Css$Structure$SupportsRule, + str, + A2($rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, update, nestedDeclarations)) + ]); + case 'DocumentRule': + var _v8 = declarations.a; + var str1 = _v8.a; + var str2 = _v8.b; + var str3 = _v8.c; + var str4 = _v8.d; + var styleBlock = _v8.e; + return A2( + $elm$core$List$map, + A4($rtfeldman$elm_css$Css$Structure$DocumentRule, str1, str2, str3, str4), + update(styleBlock)); + case 'PageRule': + return declarations; + case 'FontFace': + return declarations; + case 'Keyframes': + return declarations; + case 'Viewport': + return declarations; + case 'CounterStyle': + return declarations; + default: + return declarations; + } + } else { + break _v0$12; + } + } + } + var first = declarations.a; + var rest = declarations.b; + return A2( + $elm$core$List$cons, + first, + A2($rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, update, rest)); + }); +var $elm$core$String$cons = _String_cons; +var $robinheghan$murmur3$Murmur3$HashData = F4( + function (shift, seed, hash, charsProcessed) { + return {charsProcessed: charsProcessed, hash: hash, seed: seed, shift: shift}; + }); +var $robinheghan$murmur3$Murmur3$c1 = 3432918353; +var $robinheghan$murmur3$Murmur3$c2 = 461845907; +var $elm$core$Bitwise$and = _Bitwise_and; +var $elm$core$Bitwise$shiftLeftBy = _Bitwise_shiftLeftBy; +var $elm$core$Bitwise$shiftRightZfBy = _Bitwise_shiftRightZfBy; +var $robinheghan$murmur3$Murmur3$multiplyBy = F2( + function (b, a) { + return ((a & 65535) * b) + ((((a >>> 16) * b) & 65535) << 16); + }); +var $elm$core$Basics$neq = _Utils_notEqual; +var $elm$core$Bitwise$or = _Bitwise_or; +var $robinheghan$murmur3$Murmur3$rotlBy = F2( + function (b, a) { + return (a << b) | (a >>> (32 - b)); + }); +var $elm$core$Bitwise$xor = _Bitwise_xor; +var $robinheghan$murmur3$Murmur3$finalize = function (data) { + var acc = (!(!data.hash)) ? (data.seed ^ A2( + $robinheghan$murmur3$Murmur3$multiplyBy, + $robinheghan$murmur3$Murmur3$c2, + A2( + $robinheghan$murmur3$Murmur3$rotlBy, + 15, + A2($robinheghan$murmur3$Murmur3$multiplyBy, $robinheghan$murmur3$Murmur3$c1, data.hash)))) : data.seed; + var h0 = acc ^ data.charsProcessed; + var h1 = A2($robinheghan$murmur3$Murmur3$multiplyBy, 2246822507, h0 ^ (h0 >>> 16)); + var h2 = A2($robinheghan$murmur3$Murmur3$multiplyBy, 3266489909, h1 ^ (h1 >>> 13)); + return (h2 ^ (h2 >>> 16)) >>> 0; +}; +var $elm$core$String$foldl = _String_foldl; +var $robinheghan$murmur3$Murmur3$mix = F2( + function (h1, k1) { + return A2( + $robinheghan$murmur3$Murmur3$multiplyBy, + 5, + A2( + $robinheghan$murmur3$Murmur3$rotlBy, + 13, + h1 ^ A2( + $robinheghan$murmur3$Murmur3$multiplyBy, + $robinheghan$murmur3$Murmur3$c2, + A2( + $robinheghan$murmur3$Murmur3$rotlBy, + 15, + A2($robinheghan$murmur3$Murmur3$multiplyBy, $robinheghan$murmur3$Murmur3$c1, k1))))) + 3864292196; + }); +var $robinheghan$murmur3$Murmur3$hashFold = F2( + function (c, data) { + var res = data.hash | ((255 & $elm$core$Char$toCode(c)) << data.shift); + var _v0 = data.shift; + if (_v0 === 24) { + return { + charsProcessed: data.charsProcessed + 1, + hash: 0, + seed: A2($robinheghan$murmur3$Murmur3$mix, data.seed, res), + shift: 0 + }; + } else { + return {charsProcessed: data.charsProcessed + 1, hash: res, seed: data.seed, shift: data.shift + 8}; + } + }); +var $robinheghan$murmur3$Murmur3$hashString = F2( + function (seed, str) { + return $robinheghan$murmur3$Murmur3$finalize( + A3( + $elm$core$String$foldl, + $robinheghan$murmur3$Murmur3$hashFold, + A4($robinheghan$murmur3$Murmur3$HashData, 0, seed, 0, 0), + str)); + }); +var $rtfeldman$elm_css$Hash$initialSeed = 15739; +var $elm$core$String$fromList = _String_fromList; +var $elm$core$Basics$negate = function (n) { + return -n; +}; +var $elm$core$Basics$modBy = _Basics_modBy; +var $rtfeldman$elm_hex$Hex$unsafeToDigit = function (num) { + unsafeToDigit: + while (true) { + switch (num) { + case 0: + return _Utils_chr('0'); + case 1: + return _Utils_chr('1'); + case 2: + return _Utils_chr('2'); + case 3: + return _Utils_chr('3'); + case 4: + return _Utils_chr('4'); + case 5: + return _Utils_chr('5'); + case 6: + return _Utils_chr('6'); + case 7: + return _Utils_chr('7'); + case 8: + return _Utils_chr('8'); + case 9: + return _Utils_chr('9'); + case 10: + return _Utils_chr('a'); + case 11: + return _Utils_chr('b'); + case 12: + return _Utils_chr('c'); + case 13: + return _Utils_chr('d'); + case 14: + return _Utils_chr('e'); + case 15: + return _Utils_chr('f'); + default: + var $temp$num = num; + num = $temp$num; + continue unsafeToDigit; + } + } +}; +var $rtfeldman$elm_hex$Hex$unsafePositiveToDigits = F2( + function (digits, num) { + unsafePositiveToDigits: + while (true) { + if (num < 16) { + return A2( + $elm$core$List$cons, + $rtfeldman$elm_hex$Hex$unsafeToDigit(num), + digits); + } else { + var $temp$digits = A2( + $elm$core$List$cons, + $rtfeldman$elm_hex$Hex$unsafeToDigit( + A2($elm$core$Basics$modBy, 16, num)), + digits), + $temp$num = (num / 16) | 0; + digits = $temp$digits; + num = $temp$num; + continue unsafePositiveToDigits; + } + } + }); +var $rtfeldman$elm_hex$Hex$toString = function (num) { + return $elm$core$String$fromList( + (num < 0) ? A2( + $elm$core$List$cons, + _Utils_chr('-'), + A2($rtfeldman$elm_hex$Hex$unsafePositiveToDigits, _List_Nil, -num)) : A2($rtfeldman$elm_hex$Hex$unsafePositiveToDigits, _List_Nil, num)); +}; +var $rtfeldman$elm_css$Hash$fromString = function (str) { + return A2( + $elm$core$String$cons, + _Utils_chr('_'), + $rtfeldman$elm_hex$Hex$toString( + A2($robinheghan$murmur3$Murmur3$hashString, $rtfeldman$elm_css$Hash$initialSeed, str))); +}; +var $elm$core$List$head = function (list) { + if (list.b) { + var x = list.a; + var xs = list.b; + return $elm$core$Maybe$Just(x); + } else { + return $elm$core$Maybe$Nothing; + } +}; +var $rtfeldman$elm_css$Css$Preprocess$Resolve$last = function (list) { + last: + while (true) { + if (!list.b) { + return $elm$core$Maybe$Nothing; + } else { + if (!list.b.b) { + var singleton = list.a; + return $elm$core$Maybe$Just(singleton); + } else { + var rest = list.b; + var $temp$list = rest; + list = $temp$list; + continue last; + } + } + } +}; +var $rtfeldman$elm_css$Css$Preprocess$Resolve$lastDeclaration = function (declarations) { + lastDeclaration: + while (true) { + if (!declarations.b) { + return $elm$core$Maybe$Nothing; + } else { + if (!declarations.b.b) { + var x = declarations.a; + return $elm$core$Maybe$Just( + _List_fromArray( + [x])); + } else { + var xs = declarations.b; + var $temp$declarations = xs; + declarations = $temp$declarations; + continue lastDeclaration; + } + } + } +}; +var $rtfeldman$elm_css$Css$Preprocess$Resolve$oneOf = function (maybes) { + oneOf: + while (true) { + if (!maybes.b) { + return $elm$core$Maybe$Nothing; + } else { + var maybe = maybes.a; + var rest = maybes.b; + if (maybe.$ === 'Nothing') { + var $temp$maybes = rest; + maybes = $temp$maybes; + continue oneOf; + } else { + return maybe; + } + } + } +}; +var $rtfeldman$elm_css$Css$Structure$FontFeatureValues = function (a) { + return {$: 'FontFeatureValues', a: a}; +}; +var $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveFontFeatureValues = function (tuples) { + var expandTuples = function (tuplesToExpand) { + if (!tuplesToExpand.b) { + return _List_Nil; + } else { + var properties = tuplesToExpand.a; + var rest = tuplesToExpand.b; + return A2( + $elm$core$List$cons, + properties, + expandTuples(rest)); + } + }; + var newTuples = expandTuples(tuples); + return _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$FontFeatureValues(newTuples) + ]); +}; +var $elm$core$List$singleton = function (value) { + return _List_fromArray( + [value]); +}; +var $rtfeldman$elm_css$Css$Structure$styleBlockToMediaRule = F2( + function (mediaQueries, declaration) { + if (declaration.$ === 'StyleBlockDeclaration') { + var styleBlock = declaration.a; + return A2( + $rtfeldman$elm_css$Css$Structure$MediaRule, + mediaQueries, + _List_fromArray( + [styleBlock])); + } else { + return declaration; + } + }); +var $elm$core$List$tail = function (list) { + if (list.b) { + var x = list.a; + var xs = list.b; + return $elm$core$Maybe$Just(xs); + } else { + return $elm$core$Maybe$Nothing; + } +}; +var $elm$core$List$takeReverse = F3( + function (n, list, kept) { + takeReverse: + while (true) { + if (n <= 0) { + return kept; + } else { + if (!list.b) { + return kept; + } else { + var x = list.a; + var xs = list.b; + var $temp$n = n - 1, + $temp$list = xs, + $temp$kept = A2($elm$core$List$cons, x, kept); + n = $temp$n; + list = $temp$list; + kept = $temp$kept; + continue takeReverse; + } + } + } + }); +var $elm$core$List$takeTailRec = F2( + function (n, list) { + return $elm$core$List$reverse( + A3($elm$core$List$takeReverse, n, list, _List_Nil)); + }); +var $elm$core$List$takeFast = F3( + function (ctr, n, list) { + if (n <= 0) { + return _List_Nil; + } else { + var _v0 = _Utils_Tuple2(n, list); + _v0$1: + while (true) { + _v0$5: + while (true) { + if (!_v0.b.b) { + return list; + } else { + if (_v0.b.b.b) { + switch (_v0.a) { + case 1: + break _v0$1; + case 2: + var _v2 = _v0.b; + var x = _v2.a; + var _v3 = _v2.b; + var y = _v3.a; + return _List_fromArray( + [x, y]); + case 3: + if (_v0.b.b.b.b) { + var _v4 = _v0.b; + var x = _v4.a; + var _v5 = _v4.b; + var y = _v5.a; + var _v6 = _v5.b; + var z = _v6.a; + return _List_fromArray( + [x, y, z]); + } else { + break _v0$5; + } + default: + if (_v0.b.b.b.b && _v0.b.b.b.b.b) { + var _v7 = _v0.b; + var x = _v7.a; + var _v8 = _v7.b; + var y = _v8.a; + var _v9 = _v8.b; + var z = _v9.a; + var _v10 = _v9.b; + var w = _v10.a; + var tl = _v10.b; + return (ctr > 1000) ? A2( + $elm$core$List$cons, + x, + A2( + $elm$core$List$cons, + y, + A2( + $elm$core$List$cons, + z, + A2( + $elm$core$List$cons, + w, + A2($elm$core$List$takeTailRec, n - 4, tl))))) : A2( + $elm$core$List$cons, + x, + A2( + $elm$core$List$cons, + y, + A2( + $elm$core$List$cons, + z, + A2( + $elm$core$List$cons, + w, + A3($elm$core$List$takeFast, ctr + 1, n - 4, tl))))); + } else { + break _v0$5; + } + } + } else { + if (_v0.a === 1) { + break _v0$1; + } else { + break _v0$5; + } + } + } + } + return list; + } + var _v1 = _v0.b; + var x = _v1.a; + return _List_fromArray( + [x]); + } + }); +var $elm$core$List$take = F2( + function (n, list) { + return A3($elm$core$List$takeFast, 0, n, list); + }); +var $rtfeldman$elm_css$Css$Preprocess$Resolve$toDocumentRule = F5( + function (str1, str2, str3, str4, declaration) { + if (declaration.$ === 'StyleBlockDeclaration') { + var structureStyleBlock = declaration.a; + return A5($rtfeldman$elm_css$Css$Structure$DocumentRule, str1, str2, str3, str4, structureStyleBlock); + } else { + return declaration; + } + }); +var $rtfeldman$elm_css$Css$Preprocess$Resolve$toMediaRule = F2( + function (mediaQueries, declaration) { + switch (declaration.$) { + case 'StyleBlockDeclaration': + var structureStyleBlock = declaration.a; + return A2( + $rtfeldman$elm_css$Css$Structure$MediaRule, + mediaQueries, + _List_fromArray( + [structureStyleBlock])); + case 'MediaRule': + var newMediaQueries = declaration.a; + var structureStyleBlocks = declaration.b; + return A2( + $rtfeldman$elm_css$Css$Structure$MediaRule, + _Utils_ap(mediaQueries, newMediaQueries), + structureStyleBlocks); + case 'SupportsRule': + var str = declaration.a; + var declarations = declaration.b; + return A2( + $rtfeldman$elm_css$Css$Structure$SupportsRule, + str, + A2( + $elm$core$List$map, + $rtfeldman$elm_css$Css$Preprocess$Resolve$toMediaRule(mediaQueries), + declarations)); + case 'DocumentRule': + var str1 = declaration.a; + var str2 = declaration.b; + var str3 = declaration.c; + var str4 = declaration.d; + var structureStyleBlock = declaration.e; + return A5($rtfeldman$elm_css$Css$Structure$DocumentRule, str1, str2, str3, str4, structureStyleBlock); + case 'PageRule': + return declaration; + case 'FontFace': + return declaration; + case 'Keyframes': + return declaration; + case 'Viewport': + return declaration; + case 'CounterStyle': + return declaration; + default: + return declaration; + } + }); +var $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet = function (_v0) { + var declarations = _v0.a; + return declarations; +}; +var $rtfeldman$elm_css$Css$Preprocess$Resolve$applyNestedStylesToLast = F4( + function (nestedStyles, rest, f, declarations) { + var withoutParent = function (decls) { + return A2( + $elm$core$Maybe$withDefault, + _List_Nil, + $elm$core$List$tail(decls)); + }; + var nextResult = A2( + $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, + rest, + A2( + $elm$core$Maybe$withDefault, + _List_Nil, + $rtfeldman$elm_css$Css$Preprocess$Resolve$lastDeclaration(declarations))); + var newDeclarations = function () { + var _v14 = _Utils_Tuple2( + $elm$core$List$head(nextResult), + $rtfeldman$elm_css$Css$Preprocess$Resolve$last(declarations)); + if ((_v14.a.$ === 'Just') && (_v14.b.$ === 'Just')) { + var nextResultParent = _v14.a.a; + var originalParent = _v14.b.a; + return _Utils_ap( + A2( + $elm$core$List$take, + $elm$core$List$length(declarations) - 1, + declarations), + _List_fromArray( + [ + (!_Utils_eq(originalParent, nextResultParent)) ? nextResultParent : originalParent + ])); + } else { + return declarations; + } + }(); + var insertStylesToNestedDecl = function (lastDecl) { + return $elm$core$List$concat( + A2( + $rtfeldman$elm_css$Css$Structure$mapLast, + $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles(nestedStyles), + A2( + $elm$core$List$map, + $elm$core$List$singleton, + A2($rtfeldman$elm_css$Css$Structure$concatMapLastStyleBlock, f, lastDecl)))); + }; + var initialResult = A2( + $elm$core$Maybe$withDefault, + _List_Nil, + A2( + $elm$core$Maybe$map, + insertStylesToNestedDecl, + $rtfeldman$elm_css$Css$Preprocess$Resolve$lastDeclaration(declarations))); + return _Utils_ap( + newDeclarations, + _Utils_ap( + withoutParent(initialResult), + withoutParent(nextResult))); + }); +var $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles = F2( + function (styles, declarations) { + if (!styles.b) { + return declarations; + } else { + switch (styles.a.$) { + case 'AppendProperty': + var property = styles.a.a; + var rest = styles.b; + return A2( + $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, + rest, + A2($rtfeldman$elm_css$Css$Structure$appendProperty, property, declarations)); + case 'ExtendSelector': + var _v4 = styles.a; + var selector = _v4.a; + var nestedStyles = _v4.b; + var rest = styles.b; + return A4( + $rtfeldman$elm_css$Css$Preprocess$Resolve$applyNestedStylesToLast, + nestedStyles, + rest, + $rtfeldman$elm_css$Css$Structure$appendRepeatableToLastSelector(selector), + declarations); + case 'NestSnippet': + var _v5 = styles.a; + var selectorCombinator = _v5.a; + var snippets = _v5.b; + var rest = styles.b; + var chain = F2( + function (_v9, _v10) { + var originalSequence = _v9.a; + var originalTuples = _v9.b; + var originalPseudoElement = _v9.c; + var newSequence = _v10.a; + var newTuples = _v10.b; + var newPseudoElement = _v10.c; + return A3( + $rtfeldman$elm_css$Css$Structure$Selector, + originalSequence, + _Utils_ap( + originalTuples, + A2( + $elm$core$List$cons, + _Utils_Tuple2(selectorCombinator, newSequence), + newTuples)), + $rtfeldman$elm_css$Css$Preprocess$Resolve$oneOf( + _List_fromArray( + [newPseudoElement, originalPseudoElement]))); + }); + var expandDeclaration = function (declaration) { + switch (declaration.$) { + case 'StyleBlockDeclaration': + var _v7 = declaration.a; + var firstSelector = _v7.a; + var otherSelectors = _v7.b; + var nestedStyles = _v7.c; + var newSelectors = A2( + $elm$core$List$concatMap, + function (originalSelector) { + return A2( + $elm$core$List$map, + chain(originalSelector), + A2($elm$core$List$cons, firstSelector, otherSelectors)); + }, + $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors(declarations)); + var newDeclarations = function () { + if (!newSelectors.b) { + return _List_Nil; + } else { + var first = newSelectors.a; + var remainder = newSelectors.b; + return _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration( + A3($rtfeldman$elm_css$Css$Structure$StyleBlock, first, remainder, _List_Nil)) + ]); + } + }(); + return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, nestedStyles, newDeclarations); + case 'MediaRule': + var mediaQueries = declaration.a; + var styleBlocks = declaration.b; + return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveMediaRule, mediaQueries, styleBlocks); + case 'SupportsRule': + var str = declaration.a; + var otherSnippets = declaration.b; + return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveSupportsRule, str, otherSnippets); + case 'DocumentRule': + var str1 = declaration.a; + var str2 = declaration.b; + var str3 = declaration.c; + var str4 = declaration.d; + var styleBlock = declaration.e; + return A2( + $elm$core$List$map, + A4($rtfeldman$elm_css$Css$Preprocess$Resolve$toDocumentRule, str1, str2, str3, str4), + $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock)); + case 'PageRule': + var properties = declaration.a; + return _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$PageRule(properties) + ]); + case 'FontFace': + var properties = declaration.a; + return _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$FontFace(properties) + ]); + case 'Viewport': + var properties = declaration.a; + return _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$Viewport(properties) + ]); + case 'CounterStyle': + var properties = declaration.a; + return _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$CounterStyle(properties) + ]); + default: + var tuples = declaration.a; + return $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveFontFeatureValues(tuples); + } + }; + return $elm$core$List$concat( + _Utils_ap( + _List_fromArray( + [ + A2($rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, rest, declarations) + ]), + A2( + $elm$core$List$map, + expandDeclaration, + A2($elm$core$List$concatMap, $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet, snippets)))); + case 'WithPseudoElement': + var _v11 = styles.a; + var pseudoElement = _v11.a; + var nestedStyles = _v11.b; + var rest = styles.b; + return A4( + $rtfeldman$elm_css$Css$Preprocess$Resolve$applyNestedStylesToLast, + nestedStyles, + rest, + $rtfeldman$elm_css$Css$Structure$appendPseudoElementToLastSelector(pseudoElement), + declarations); + case 'WithKeyframes': + var str = styles.a.a; + var rest = styles.b; + var name = $rtfeldman$elm_css$Hash$fromString(str); + var newProperty = $rtfeldman$elm_css$Css$Structure$Property('animation-name:' + name); + var newDeclarations = A2( + $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, + rest, + A2($rtfeldman$elm_css$Css$Structure$appendProperty, newProperty, declarations)); + return A2( + $elm$core$List$append, + newDeclarations, + _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$Keyframes( + {declaration: str, name: name}) + ])); + case 'WithMedia': + var _v12 = styles.a; + var mediaQueries = _v12.a; + var nestedStyles = _v12.b; + var rest = styles.b; + var extraDeclarations = function () { + var _v13 = $rtfeldman$elm_css$Css$Preprocess$Resolve$collectSelectors(declarations); + if (!_v13.b) { + return _List_Nil; + } else { + var firstSelector = _v13.a; + var otherSelectors = _v13.b; + return A2( + $elm$core$List$map, + $rtfeldman$elm_css$Css$Structure$styleBlockToMediaRule(mediaQueries), + A2( + $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, + nestedStyles, + $elm$core$List$singleton( + $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration( + A3($rtfeldman$elm_css$Css$Structure$StyleBlock, firstSelector, otherSelectors, _List_Nil))))); + } + }(); + return _Utils_ap( + A2($rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, rest, declarations), + extraDeclarations); + default: + var otherStyles = styles.a.a; + var rest = styles.b; + return A2( + $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, + _Utils_ap(otherStyles, rest), + declarations); + } + } + }); +var $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock = function (_v2) { + var firstSelector = _v2.a; + var otherSelectors = _v2.b; + var styles = _v2.c; + return A2( + $rtfeldman$elm_css$Css$Preprocess$Resolve$applyStyles, + styles, + _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$StyleBlockDeclaration( + A3($rtfeldman$elm_css$Css$Structure$StyleBlock, firstSelector, otherSelectors, _List_Nil)) + ])); +}; +var $rtfeldman$elm_css$Css$Preprocess$Resolve$extract = function (snippetDeclarations) { + if (!snippetDeclarations.b) { + return _List_Nil; + } else { + var first = snippetDeclarations.a; + var rest = snippetDeclarations.b; + return _Utils_ap( + $rtfeldman$elm_css$Css$Preprocess$Resolve$toDeclarations(first), + $rtfeldman$elm_css$Css$Preprocess$Resolve$extract(rest)); + } +}; +var $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveMediaRule = F2( + function (mediaQueries, styleBlocks) { + var handleStyleBlock = function (styleBlock) { + return A2( + $elm$core$List$map, + $rtfeldman$elm_css$Css$Preprocess$Resolve$toMediaRule(mediaQueries), + $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock)); + }; + return A2($elm$core$List$concatMap, handleStyleBlock, styleBlocks); + }); +var $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveSupportsRule = F2( + function (str, snippets) { + var declarations = $rtfeldman$elm_css$Css$Preprocess$Resolve$extract( + A2($elm$core$List$concatMap, $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet, snippets)); + return _List_fromArray( + [ + A2($rtfeldman$elm_css$Css$Structure$SupportsRule, str, declarations) + ]); + }); +var $rtfeldman$elm_css$Css$Preprocess$Resolve$toDeclarations = function (snippetDeclaration) { + switch (snippetDeclaration.$) { + case 'StyleBlockDeclaration': + var styleBlock = snippetDeclaration.a; + return $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock); + case 'MediaRule': + var mediaQueries = snippetDeclaration.a; + var styleBlocks = snippetDeclaration.b; + return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveMediaRule, mediaQueries, styleBlocks); + case 'SupportsRule': + var str = snippetDeclaration.a; + var snippets = snippetDeclaration.b; + return A2($rtfeldman$elm_css$Css$Preprocess$Resolve$resolveSupportsRule, str, snippets); + case 'DocumentRule': + var str1 = snippetDeclaration.a; + var str2 = snippetDeclaration.b; + var str3 = snippetDeclaration.c; + var str4 = snippetDeclaration.d; + var styleBlock = snippetDeclaration.e; + return A2( + $elm$core$List$map, + A4($rtfeldman$elm_css$Css$Preprocess$Resolve$toDocumentRule, str1, str2, str3, str4), + $rtfeldman$elm_css$Css$Preprocess$Resolve$expandStyleBlock(styleBlock)); + case 'PageRule': + var properties = snippetDeclaration.a; + return _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$PageRule(properties) + ]); + case 'FontFace': + var properties = snippetDeclaration.a; + return _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$FontFace(properties) + ]); + case 'Viewport': + var properties = snippetDeclaration.a; + return _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$Viewport(properties) + ]); + case 'CounterStyle': + var properties = snippetDeclaration.a; + return _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$CounterStyle(properties) + ]); + default: + var tuples = snippetDeclaration.a; + return $rtfeldman$elm_css$Css$Preprocess$Resolve$resolveFontFeatureValues(tuples); + } +}; +var $rtfeldman$elm_css$Css$Preprocess$Resolve$toStructure = function (_v0) { + var snippets = _v0.snippets; + var namespaces = _v0.namespaces; + var imports = _v0.imports; + var charset = _v0.charset; + var declarations = $rtfeldman$elm_css$Css$Preprocess$Resolve$extract( + A2($elm$core$List$concatMap, $rtfeldman$elm_css$Css$Preprocess$unwrapSnippet, snippets)); + return {charset: charset, declarations: declarations, imports: imports, namespaces: namespaces}; +}; +var $rtfeldman$elm_css$Css$Preprocess$Resolve$compile = function (sheet) { + return $rtfeldman$elm_css$Css$Structure$Output$prettyPrint( + $rtfeldman$elm_css$Css$Structure$compactStylesheet( + $rtfeldman$elm_css$Css$Preprocess$Resolve$toStructure(sheet))); +}; +var $rtfeldman$elm_css$Css$Preprocess$Snippet = function (a) { + return {$: 'Snippet', a: a}; +}; +var $rtfeldman$elm_css$Css$Preprocess$StyleBlock = F3( + function (a, b, c) { + return {$: 'StyleBlock', a: a, b: b, c: c}; + }); +var $rtfeldman$elm_css$Css$Preprocess$StyleBlockDeclaration = function (a) { + return {$: 'StyleBlockDeclaration', a: a}; +}; +var $rtfeldman$elm_css$VirtualDom$Styled$makeSnippet = F2( + function (styles, sequence) { + var selector = A3($rtfeldman$elm_css$Css$Structure$Selector, sequence, _List_Nil, $elm$core$Maybe$Nothing); + return $rtfeldman$elm_css$Css$Preprocess$Snippet( + _List_fromArray( + [ + $rtfeldman$elm_css$Css$Preprocess$StyleBlockDeclaration( + A3($rtfeldman$elm_css$Css$Preprocess$StyleBlock, selector, _List_Nil, styles)) + ])); + }); +var $rtfeldman$elm_css$Css$Preprocess$stylesheet = function (snippets) { + return {charset: $elm$core$Maybe$Nothing, imports: _List_Nil, namespaces: _List_Nil, snippets: snippets}; +}; +var $rtfeldman$elm_css$Css$Structure$ClassSelector = function (a) { + return {$: 'ClassSelector', a: a}; +}; +var $rtfeldman$elm_css$VirtualDom$Styled$classnameStandin = '\u0007'; +var $rtfeldman$elm_css$VirtualDom$Styled$templateSelector = $rtfeldman$elm_css$Css$Structure$UniversalSelectorSequence( + _List_fromArray( + [ + $rtfeldman$elm_css$Css$Structure$ClassSelector($rtfeldman$elm_css$VirtualDom$Styled$classnameStandin) + ])); +var $rtfeldman$elm_css$VirtualDom$Styled$getCssTemplate = function (styles) { + if (!styles.b) { + return ''; + } else { + var otherwise = styles; + return $rtfeldman$elm_css$Css$Preprocess$Resolve$compile( + $rtfeldman$elm_css$Css$Preprocess$stylesheet( + _List_fromArray( + [ + A2($rtfeldman$elm_css$VirtualDom$Styled$makeSnippet, styles, $rtfeldman$elm_css$VirtualDom$Styled$templateSelector) + ]))); + } +}; +var $rtfeldman$elm_css$Html$Styled$Internal$css = function (styles) { + var cssTemplate = $rtfeldman$elm_css$VirtualDom$Styled$getCssTemplate(styles); + var classProperty = A2($elm$virtual_dom$VirtualDom$attribute, '', ''); + return A3($rtfeldman$elm_css$VirtualDom$Styled$Attribute, classProperty, true, cssTemplate); +}; +var $rtfeldman$elm_css$Html$Styled$styled = F4( + function (fn, styles, attrs, children) { + return A2( + fn, + A2( + $elm$core$List$cons, + $rtfeldman$elm_css$Html$Styled$Internal$css(styles), + attrs), + children); + }); +var $author$project$Main$coloredTextWBackground = F3( + function (fgColor, bgColor, string) { + return A4( + $rtfeldman$elm_css$Html$Styled$styled, + $rtfeldman$elm_css$Html$Styled$span, + _List_fromArray( + [ + $rtfeldman$elm_css$Css$color(fgColor), + $rtfeldman$elm_css$Css$backgroundColor(bgColor), + $rtfeldman$elm_css$Css$padding( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$margin( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$borderWidth( + $rtfeldman$elm_css$Css$px(0)) + ]), + _List_Nil, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text(string) + ])); + }); +var $rtfeldman$elm_css$Css$cssFunction = F2( + function (funcName, args) { + return funcName + ('(' + (A2($elm$core$String$join, ',', args) + ')')); + }); +var $rtfeldman$elm_css$Css$rgba = F4( + function (r, g, b, alpha) { + return { + alpha: alpha, + blue: b, + color: $rtfeldman$elm_css$Css$Structure$Compatible, + green: g, + red: r, + value: A2( + $rtfeldman$elm_css$Css$cssFunction, + 'rgba', + _Utils_ap( + A2( + $elm$core$List$map, + $elm$core$String$fromInt, + _List_fromArray( + [r, g, b])), + _List_fromArray( + [ + $elm$core$String$fromFloat(alpha) + ]))) + }; + }); +var $author$project$Main$coloredText = F2( + function (fgColor, string) { + return A3( + $author$project$Main$coloredTextWBackground, + fgColor, + A4($rtfeldman$elm_css$Css$rgba, 0, 0, 0, 0), + string); + }); +var $rtfeldman$elm_css$Css$withPrecedingHash = function (str) { + return A2($elm$core$String$startsWith, '#', str) ? str : A2( + $elm$core$String$cons, + _Utils_chr('#'), + str); +}; +var $rtfeldman$elm_css$Css$erroneousHex = function (str) { + return { + alpha: 1, + blue: 0, + color: $rtfeldman$elm_css$Css$Structure$Compatible, + green: 0, + red: 0, + value: $rtfeldman$elm_css$Css$withPrecedingHash(str) + }; +}; +var $elm$core$String$foldr = _String_foldr; +var $elm$core$String$toList = function (string) { + return A3($elm$core$String$foldr, $elm$core$List$cons, _List_Nil, string); +}; +var $elm$core$String$fromChar = function (_char) { + return A2($elm$core$String$cons, _char, ''); +}; +var $elm$core$Basics$pow = _Basics_pow; +var $rtfeldman$elm_hex$Hex$fromStringHelp = F3( + function (position, chars, accumulated) { + fromStringHelp: + while (true) { + if (!chars.b) { + return $elm$core$Result$Ok(accumulated); + } else { + var _char = chars.a; + var rest = chars.b; + switch (_char.valueOf()) { + case '0': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated; + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case '1': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + A2($elm$core$Basics$pow, 16, position); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case '2': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (2 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case '3': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (3 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case '4': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (4 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case '5': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (5 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case '6': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (6 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case '7': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (7 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case '8': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (8 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case '9': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (9 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case 'a': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (10 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case 'b': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (11 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case 'c': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (12 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case 'd': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (13 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case 'e': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (14 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + case 'f': + var $temp$position = position - 1, + $temp$chars = rest, + $temp$accumulated = accumulated + (15 * A2($elm$core$Basics$pow, 16, position)); + position = $temp$position; + chars = $temp$chars; + accumulated = $temp$accumulated; + continue fromStringHelp; + default: + var nonHex = _char; + return $elm$core$Result$Err( + $elm$core$String$fromChar(nonHex) + ' is not a valid hexadecimal character.'); + } + } + } + }); +var $elm$core$Result$map = F2( + function (func, ra) { + if (ra.$ === 'Ok') { + var a = ra.a; + return $elm$core$Result$Ok( + func(a)); + } else { + var e = ra.a; + return $elm$core$Result$Err(e); + } + }); +var $elm$core$Result$mapError = F2( + function (f, result) { + if (result.$ === 'Ok') { + var v = result.a; + return $elm$core$Result$Ok(v); + } else { + var e = result.a; + return $elm$core$Result$Err( + f(e)); + } + }); +var $rtfeldman$elm_hex$Hex$fromString = function (str) { + if ($elm$core$String$isEmpty(str)) { + return $elm$core$Result$Err('Empty strings are not valid hexadecimal strings.'); + } else { + var result = function () { + if (A2($elm$core$String$startsWith, '-', str)) { + var list = A2( + $elm$core$Maybe$withDefault, + _List_Nil, + $elm$core$List$tail( + $elm$core$String$toList(str))); + return A2( + $elm$core$Result$map, + $elm$core$Basics$negate, + A3( + $rtfeldman$elm_hex$Hex$fromStringHelp, + $elm$core$List$length(list) - 1, + list, + 0)); + } else { + return A3( + $rtfeldman$elm_hex$Hex$fromStringHelp, + $elm$core$String$length(str) - 1, + $elm$core$String$toList(str), + 0); + } + }(); + var formatError = function (err) { + return A2( + $elm$core$String$join, + ' ', + _List_fromArray( + ['\"' + (str + '\"'), 'is not a valid hexadecimal string because', err])); + }; + return A2($elm$core$Result$mapError, formatError, result); + } +}; +var $elm$core$String$toLower = _String_toLower; +var $rtfeldman$elm_css$Css$validHex = F5( + function (str, _v0, _v1, _v2, _v3) { + var r1 = _v0.a; + var r2 = _v0.b; + var g1 = _v1.a; + var g2 = _v1.b; + var b1 = _v2.a; + var b2 = _v2.b; + var a1 = _v3.a; + var a2 = _v3.b; + var toResult = A2( + $elm$core$Basics$composeR, + $elm$core$String$fromList, + A2($elm$core$Basics$composeR, $elm$core$String$toLower, $rtfeldman$elm_hex$Hex$fromString)); + var results = _Utils_Tuple2( + _Utils_Tuple2( + toResult( + _List_fromArray( + [r1, r2])), + toResult( + _List_fromArray( + [g1, g2]))), + _Utils_Tuple2( + toResult( + _List_fromArray( + [b1, b2])), + toResult( + _List_fromArray( + [a1, a2])))); + if ((((results.a.a.$ === 'Ok') && (results.a.b.$ === 'Ok')) && (results.b.a.$ === 'Ok')) && (results.b.b.$ === 'Ok')) { + var _v5 = results.a; + var red = _v5.a.a; + var green = _v5.b.a; + var _v6 = results.b; + var blue = _v6.a.a; + var alpha = _v6.b.a; + return { + alpha: alpha / 255, + blue: blue, + color: $rtfeldman$elm_css$Css$Structure$Compatible, + green: green, + red: red, + value: $rtfeldman$elm_css$Css$withPrecedingHash(str) + }; + } else { + return $rtfeldman$elm_css$Css$erroneousHex(str); + } + }); +var $rtfeldman$elm_css$Css$hex = function (str) { + var withoutHash = A2($elm$core$String$startsWith, '#', str) ? A2($elm$core$String$dropLeft, 1, str) : str; + var _v0 = $elm$core$String$toList(withoutHash); + _v0$4: + while (true) { + if ((_v0.b && _v0.b.b) && _v0.b.b.b) { + if (!_v0.b.b.b.b) { + var r = _v0.a; + var _v1 = _v0.b; + var g = _v1.a; + var _v2 = _v1.b; + var b = _v2.a; + return A5( + $rtfeldman$elm_css$Css$validHex, + str, + _Utils_Tuple2(r, r), + _Utils_Tuple2(g, g), + _Utils_Tuple2(b, b), + _Utils_Tuple2( + _Utils_chr('f'), + _Utils_chr('f'))); + } else { + if (!_v0.b.b.b.b.b) { + var r = _v0.a; + var _v3 = _v0.b; + var g = _v3.a; + var _v4 = _v3.b; + var b = _v4.a; + var _v5 = _v4.b; + var a = _v5.a; + return A5( + $rtfeldman$elm_css$Css$validHex, + str, + _Utils_Tuple2(r, r), + _Utils_Tuple2(g, g), + _Utils_Tuple2(b, b), + _Utils_Tuple2(a, a)); + } else { + if (_v0.b.b.b.b.b.b) { + if (!_v0.b.b.b.b.b.b.b) { + var r1 = _v0.a; + var _v6 = _v0.b; + var r2 = _v6.a; + var _v7 = _v6.b; + var g1 = _v7.a; + var _v8 = _v7.b; + var g2 = _v8.a; + var _v9 = _v8.b; + var b1 = _v9.a; + var _v10 = _v9.b; + var b2 = _v10.a; + return A5( + $rtfeldman$elm_css$Css$validHex, + str, + _Utils_Tuple2(r1, r2), + _Utils_Tuple2(g1, g2), + _Utils_Tuple2(b1, b2), + _Utils_Tuple2( + _Utils_chr('f'), + _Utils_chr('f'))); + } else { + if (_v0.b.b.b.b.b.b.b.b && (!_v0.b.b.b.b.b.b.b.b.b)) { + var r1 = _v0.a; + var _v11 = _v0.b; + var r2 = _v11.a; + var _v12 = _v11.b; + var g1 = _v12.a; + var _v13 = _v12.b; + var g2 = _v13.a; + var _v14 = _v13.b; + var b1 = _v14.a; + var _v15 = _v14.b; + var b2 = _v15.a; + var _v16 = _v15.b; + var a1 = _v16.a; + var _v17 = _v16.b; + var a2 = _v17.a; + return A5( + $rtfeldman$elm_css$Css$validHex, + str, + _Utils_Tuple2(r1, r2), + _Utils_Tuple2(g1, g2), + _Utils_Tuple2(b1, b2), + _Utils_Tuple2(a1, a2)); + } else { + break _v0$4; + } + } + } else { + break _v0$4; + } + } + } + } else { + break _v0$4; + } + } + return $rtfeldman$elm_css$Css$erroneousHex(str); +}; +var $author$project$Main$coreColor = function (color) { + switch (color.$) { + case 'Red': + return $rtfeldman$elm_css$Css$hex('e14433'); + case 'Green': + return $rtfeldman$elm_css$Css$hex('#359b54'); + case 'Yellow': + return $rtfeldman$elm_css$Css$hex('#a08016'); + case 'Blue': + return $rtfeldman$elm_css$Css$hex('#5a77f2'); + case 'Magenta': + return $rtfeldman$elm_css$Css$hex('#cf2ec8'); + case 'Cyan': + return $rtfeldman$elm_css$Css$hex('1894a5'); + case 'BrightRed': + return $rtfeldman$elm_css$Css$hex('#f36552'); + case 'BrightGreen': + return $rtfeldman$elm_css$Css$hex('#3db361'); + case 'BrightYellow': + return $rtfeldman$elm_css$Css$hex('#b9941a'); + case 'BrightBlue': + return $rtfeldman$elm_css$Css$hex('#7491f8'); + case 'BrightMagenta': + return $rtfeldman$elm_css$Css$hex('#e54ede'); + default: + return $rtfeldman$elm_css$Css$hex('#1eabbf'); + } +}; +var $elm$core$String$endsWith = _String_endsWith; +var $elm$browser$Browser$Navigation$load = _Browser_load; +var $elm$core$Platform$Cmd$batch = _Platform_batch; +var $elm$core$Platform$Cmd$none = $elm$core$Platform$Cmd$batch(_List_Nil); +var $author$project$Main$Clear = {$: 'Clear'}; +var $author$project$Main$Cookies = {$: 'Cookies'}; +var $author$project$Main$FontCommand = {$: 'FontCommand'}; +var $author$project$Main$Hello = {$: 'Hello'}; +var $author$project$Main$Help = {$: 'Help'}; +var $author$project$Main$PromptCommand = {$: 'PromptCommand'}; +var $author$project$Main$Theme = {$: 'Theme'}; +var $elm$core$List$filter = F2( + function (isGood, list) { + return A3( + $elm$core$List$foldr, + F2( + function (x, xs) { + return isGood(x) ? A2($elm$core$List$cons, x, xs) : xs; + }), + _List_Nil, + list); + }); +var $elm$core$String$trim = _String_trim; +var $author$project$Main$parseInput = function (input) { + var tokens = A2( + $elm$core$List$map, + $elm$core$String$trim, + A2($elm$core$String$split, ' ', input)); + var command = function () { + var _v3 = $elm$core$List$head(tokens); + if (_v3.$ === 'Just') { + switch (_v3.a) { + case 'help': + return $elm$core$Result$Ok($author$project$Main$Help); + case 'clear': + return $elm$core$Result$Ok($author$project$Main$Clear); + case 'cookies': + return $elm$core$Result$Ok($author$project$Main$Cookies); + case 'font': + return $elm$core$Result$Ok($author$project$Main$FontCommand); + case 'hello': + return $elm$core$Result$Ok($author$project$Main$Hello); + case 'prompt': + return $elm$core$Result$Ok($author$project$Main$PromptCommand); + case 'theme': + return $elm$core$Result$Ok($author$project$Main$Theme); + default: + var trimput = _v3.a; + return $elm$core$Result$Err(trimput); + } + } else { + return $elm$core$Result$Err('error in parseInput parsing tokens'); + } + }(); + var args = function () { + var _v2 = $elm$core$List$tail(tokens); + if (_v2.$ === 'Just') { + var tail = _v2.a; + return $elm$core$Result$Ok( + A2( + $elm$core$List$filter, + $elm$core$Basics$neq(''), + tail)); + } else { + return $elm$core$Result$Err('error in parseInput parsing tokens'); + } + }(); + if (args.$ === 'Ok') { + var _arguments = args.a; + if (command.$ === 'Ok') { + var cmd = command.a; + return $elm$core$Result$Ok( + {args: _arguments, command: cmd}); + } else { + var err = command.a; + return $elm$core$Result$Err(err); + } + } else { + var err = args.a; + return $elm$core$Result$Err(err); + } +}; +var $elm$browser$Browser$Navigation$pushUrl = _Browser_pushUrl; +var $author$project$Main$listToString = function (list) { + return '[' + (A2($elm$core$String$join, ',', list) + ']'); +}; +var $author$project$Main$wrongArgs = F3( + function (command, expected, args) { + var comstr = function () { + switch (command.$) { + case 'Help': + return 'help'; + case 'Clear': + return 'clear'; + case 'Cookies': + return 'cookies'; + case 'FontCommand': + return 'font'; + case 'Hello': + return 'hello'; + case 'PromptCommand': + return 'prompt'; + default: + return 'theme'; + } + }(); + return _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text( + ((_Utils_cmp( + expected, + $elm$core$List$length(args)) > 0) ? ('\nToo few arguments for ' + comstr) : ((_Utils_cmp( + expected, + $elm$core$List$length(args)) < 0) ? ('\nToo many arguments for ' + comstr) : ('\nUnexpected arguments ' + $author$project$Main$listToString(args)))) + ('. Run `help ' + (comstr + '` for usage'))) + ]); + }); +var $author$project$Main$runClear = F2( + function (model, args) { + var _v0 = $elm$core$List$head(args); + if (_v0.$ === 'Nothing') { + return _Utils_update( + model, + {content: _List_Nil}); + } else { + var string = _v0.a; + return _Utils_update( + model, + { + content: _Utils_ap( + model.content, + A3($author$project$Main$wrongArgs, $author$project$Main$Clear, 0, args)) + }); + } + }); +var $author$project$Main$boolToString = function (bool) { + if (bool) { + return 'True'; + } else { + return 'False'; + } +}; +var $author$project$Main$cookiesKeptToString = function (cookiesKept) { + return '{ keepFont = ' + ($author$project$Main$boolToString(cookiesKept.keepFont) + ('\n, keepTheme = ' + ($author$project$Main$boolToString(cookiesKept.keepTheme) + '\n}'))); +}; +var $elm$json$Json$Encode$bool = _Json_wrap; +var $elm$json$Json$Encode$float = _Json_wrap; +var $elm$json$Json$Encode$object = function (pairs) { + return _Json_wrap( + A3( + $elm$core$List$foldl, + F2( + function (_v0, obj) { + var k = _v0.a; + var v = _v0.b; + return A3(_Json_addField, k, v, obj); + }), + _Json_emptyObject(_Utils_Tuple0), + pairs)); +}; +var $elm$json$Json$Encode$string = _Json_wrap; +var $author$project$Main$encodeModel = function (model) { + return $elm$json$Json$Encode$object( + _List_fromArray( + [ + _Utils_Tuple2( + 'theme', + $elm$json$Json$Encode$string( + function () { + var _v0 = model.theme; + switch (_v0.$) { + case 'Pit': + return 'Pit'; + case 'Dim': + return 'Dim'; + case 'Sky': + return 'Sky'; + default: + return 'Sun'; + } + }())), + _Utils_Tuple2( + 'font', + $elm$json$Json$Encode$object( + _List_fromArray( + [ + _Utils_Tuple2( + 'fontSize', + $elm$json$Json$Encode$float(model.font.fontSize)) + ]))), + _Utils_Tuple2( + 'cookiesKept', + $elm$json$Json$Encode$object( + _List_fromArray( + [ + _Utils_Tuple2( + 'keepTheme', + $elm$json$Json$Encode$bool(model.cookiesKept.keepTheme)), + _Utils_Tuple2( + 'keepFont', + $elm$json$Json$Encode$bool(model.cookiesKept.keepFont)), + _Utils_Tuple2( + 'keepPrompt', + $elm$json$Json$Encode$bool(model.cookiesKept.keepPrompt)) + ]))), + _Utils_Tuple2( + 'prompt', + $elm$json$Json$Encode$object( + _List_fromArray( + [ + _Utils_Tuple2( + 'prompt', + $elm$json$Json$Encode$string(model.prompt.prompt)) + ]))) + ])); +}; +var $author$project$Main$setStorage = _Platform_outgoingPort('setStorage', $elm$core$Basics$identity); +var $author$project$Main$saveModel = function (model) { + return _Utils_Tuple2( + model, + $elm$core$Platform$Cmd$batch( + _List_fromArray( + [ + $author$project$Main$setStorage( + $author$project$Main$encodeModel(model)) + ]))); +}; +var $author$project$Main$runCookies = F2( + function (model, args) { + var _v0 = $elm$core$List$head(args); + if (_v0.$ === 'Nothing') { + var newModel = _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text( + '\n' + $author$project$Main$cookiesKeptToString(model.cookiesKept)) + ])) + }); + return _Utils_Tuple2( + newModel, + $elm$core$Platform$Cmd$batch( + _List_fromArray( + [ + $author$project$Main$setStorage( + $author$project$Main$encodeModel(newModel)) + ]))); + } else { + if (_v0.a === 'set') { + var third = function () { + var _v6 = $elm$core$List$tail(args); + if (_v6.$ === 'Just') { + var tail = _v6.a; + var _v7 = $elm$core$List$tail(tail); + if (_v7.$ === 'Just') { + var tail2 = _v7.a; + return A2( + $elm$core$Maybe$withDefault, + '', + $elm$core$List$head(tail2)); + } else { + return ''; + } + } else { + return ''; + } + }(); + var second = function () { + var _v5 = $elm$core$List$tail(args); + if (_v5.$ === 'Just') { + var tail = _v5.a; + return A2( + $elm$core$Maybe$withDefault, + '', + $elm$core$List$head(tail)); + } else { + return ''; + } + }(); + var cookiesKept = model.cookiesKept; + if (third === '') { + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + A3($author$project$Main$wrongArgs, $author$project$Main$Cookies, 3, args)) + }), + $elm$core$Platform$Cmd$none); + } else { + switch (second) { + case '': + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + A3($author$project$Main$wrongArgs, $author$project$Main$Cookies, 2, args)) + }), + $elm$core$Platform$Cmd$none); + case 'keepFont': + switch (third) { + case 'true': + return $author$project$Main$saveModel( + _Utils_update( + model, + { + cookiesKept: _Utils_update( + cookiesKept, + {keepFont: true}) + })); + case 'false': + return $author$project$Main$saveModel( + _Utils_update( + model, + { + cookiesKept: _Utils_update( + cookiesKept, + {keepFont: false}) + })); + default: + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + A3($author$project$Main$wrongArgs, $author$project$Main$Cookies, 3, args)) + }), + $elm$core$Platform$Cmd$none); + } + case 'keepTheme': + switch (third) { + case 'true': + return $author$project$Main$saveModel( + _Utils_update( + model, + { + cookiesKept: _Utils_update( + cookiesKept, + {keepTheme: true}) + })); + case 'false': + return $author$project$Main$saveModel( + _Utils_update( + model, + { + cookiesKept: _Utils_update( + cookiesKept, + {keepTheme: false}) + })); + default: + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + A3($author$project$Main$wrongArgs, $author$project$Main$Cookies, 3, args)) + }), + $elm$core$Platform$Cmd$none); + } + case 'keepPrompt': + switch (third) { + case 'true': + return $author$project$Main$saveModel( + _Utils_update( + model, + { + cookiesKept: _Utils_update( + cookiesKept, + {keepPrompt: true}) + })); + case 'false': + return $author$project$Main$saveModel( + _Utils_update( + model, + { + cookiesKept: _Utils_update( + cookiesKept, + {keepPrompt: false}) + })); + default: + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + A3($author$project$Main$wrongArgs, $author$project$Main$Cookies, 3, args)) + }), + $elm$core$Platform$Cmd$none); + } + default: + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + A3($author$project$Main$wrongArgs, $author$project$Main$Cookies, 2, args)) + }), + $elm$core$Platform$Cmd$none); + } + } + } else { + var string = _v0.a; + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + A3($author$project$Main$wrongArgs, $author$project$Main$Cookies, 1, args)) + }), + $elm$core$Platform$Cmd$none); + } + } + }); +var $elm$core$String$toFloat = _String_toFloat; +var $author$project$Main$runFont = F2( + function (model, args) { + var _v0 = $elm$core$List$head(args); + if (_v0.$ === 'Nothing') { + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + A3($author$project$Main$wrongArgs, $author$project$Main$FontCommand, 1, args)) + }), + $elm$core$Platform$Cmd$none); + } else { + switch (_v0.a) { + case 'size': + var string = function () { + var _v3 = $elm$core$List$tail(args); + if (_v3.$ === 'Just') { + var tail = _v3.a; + return A2( + $elm$core$Maybe$withDefault, + '', + $elm$core$List$head(tail)); + } else { + return ''; + } + }(); + var fl = $elm$core$String$toFloat(string); + if (fl.$ === 'Just') { + var _float = fl.a; + if (_float > 0) { + var newModel = _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\nfontSize successfully set to ' + (string + 'px')) + ])), + font: {fontSize: _float} + }); + return $author$project$Main$saveModel(newModel); + } else { + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\nPlease enter a valid fontSize, a Float greater than 0') + ])) + }), + $elm$core$Platform$Cmd$none); + } + } else { + switch (string) { + case '': + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text( + '\nfontSize is ' + ($elm$core$String$fromFloat(model.font.fontSize) + 'px')) + ])) + }), + $elm$core$Platform$Cmd$none); + case 'reset': + var newModel = _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\nfontSize reset to 20px') + ])), + font: {fontSize: 20} + }); + return $author$project$Main$saveModel(newModel); + default: + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\nfontSize ' + (string + ' not recognised; font size expected')) + ])) + }), + $elm$core$Platform$Cmd$none); + } + } + case 'reset': + var newModel = _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\nfontSize reset to 20px') + ])), + font: {fontSize: 20} + }); + return _Utils_Tuple2( + newModel, + $elm$core$Platform$Cmd$batch( + _List_fromArray( + [ + $author$project$Main$setStorage( + $author$project$Main$encodeModel(newModel)) + ]))); + default: + var string = _v0.a; + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + A3($author$project$Main$wrongArgs, $author$project$Main$FontCommand, 1, args)) + }), + $elm$core$Platform$Cmd$none); + } + } + }); +var $author$project$Main$runHello = F2( + function (model, args) { + var _v0 = $elm$core$List$head(args); + if (_v0.$ === 'Nothing') { + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\nHello World!') + ])) + }), + $elm$core$Platform$Cmd$none); + } else { + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + A3($author$project$Main$wrongArgs, $author$project$Main$Hello, 0, args)) + }), + $elm$core$Platform$Cmd$none); + } + }); +var $author$project$Main$runHelp = F2( + function (model, args) { + return _Utils_update( + model, + { + content: _Utils_ap( + model.content, + function () { + if ($elm$core$List$length(args) < 2) { + var _v0 = $elm$core$List$head(args); + if (_v0.$ === 'Nothing') { + return _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\n+--------------------------------------------------+' + ('\n|help prints this message |' + ('\n|help prints more information about |' + ('\n+--------------------------------------------------+' + ('\nclear clears the screen' + ('\ncookies [UNSTABLE] manages cookies' + ('\nhello prints hello world message' + ('\nfont manages font' + ('\nprompt [UNFINISHED] manages prompt' + '\ntheme manages theme'))))))))) + ]); + } else { + switch (_v0.a) { + case 'help': + return _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\nhelp lists available commands with a short summary' + '\nhelp prints more information about ') + ]); + case 'clear': + return _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\nclear clears the screen') + ]); + case 'cookies': + return _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\ncookies prints info about the current cookie settings' + ('\ncookies set [true|false] sets whether to store a certain cookie' + ('\noptions for are:' + ('\n keepFont - whether to store fontSize. Default fontSize is 20' + ('\n keepPrompt - whether to store prompt. Default prompt is >' + '\n keepTheme - whether to store theme. Default theme is pit'))))) + ]); + case 'hello': + return _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\nhello prints `Hello World!`') + ]); + case 'font': + return _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\nfont size prints info about the current font size' + ('\nfont size changes fontSize to if is >0' + '\nfont reset changes fontSize to the default of 20px')) + ]); + case 'prompt': + return _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\nprompt prints info about the current prompt' + ('\nprompt set sets prompt text to ' + ('\n is specified in quotes' + ('\nprompt color sets prompt color to ' + '\n run `colors` to list available colors')))) + ]); + case 'theme': + return _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\ntheme sets the current theme according to ' + ('\nOptions for are:' + ('\n sun - a theme blinding like the sun' + ('\n sky - a toned-down light theme' + ('\n dim - a deep and colorful dark theme' + '\n pit - nearly black like the bottom of a pit'))))) + ]); + default: + var string = _v0.a; + return A3($author$project$Main$wrongArgs, $author$project$Main$Help, 1, args); + } + } + } else { + return A3($author$project$Main$wrongArgs, $author$project$Main$Help, 1, args); + } + }()) + }); + }); +var $author$project$Main$runPrompt = F2( + function (model, args) { + var _v0 = $elm$core$List$head(args); + if (_v0.$ === 'Nothing') { + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\ncurrent prompt is ' + model.prompt.prompt) + ])) + }), + $elm$core$Platform$Cmd$none); + } else { + var string = _v0.a; + var oldPrompt = model.prompt; + return $author$project$Main$saveModel( + _Utils_update( + model, + { + prompt: _Utils_update( + oldPrompt, + {prompt: string}) + })); + } + }); +var $author$project$Main$setTheme = F2( + function (model, theme) { + var newModel = _Utils_update( + model, + {theme: theme}); + return $author$project$Main$saveModel(newModel); + }); +var $author$project$Main$runTheme = F2( + function (model, args) { + var _v0 = $elm$core$List$head(args); + if (_v0.$ === 'Nothing') { + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text( + '\nThe current theme is ' + function () { + var _v1 = model.theme; + switch (_v1.$) { + case 'Sun': + return 'sun'; + case 'Sky': + return 'sky'; + case 'Dim': + return 'dim'; + default: + return 'pit'; + } + }()) + ])) + }), + $elm$core$Platform$Cmd$none); + } else { + switch (_v0.a) { + case 'sun': + return A2($author$project$Main$setTheme, model, $author$project$Main$Sun); + case 'sky': + return A2($author$project$Main$setTheme, model, $author$project$Main$Sky); + case 'dim': + return A2($author$project$Main$setTheme, model, $author$project$Main$Dim); + case 'pit': + return A2($author$project$Main$setTheme, model, $author$project$Main$Pit); + default: + var string = _v0.a; + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + A3($author$project$Main$wrongArgs, $author$project$Main$Theme, 1, args)) + }), + $elm$core$Platform$Cmd$none); + } + } + }); +var $author$project$Main$runCommand = F2( + function (model, input) { + if (input.$ === 'Ok') { + var args = input.a.args; + var command = input.a.command; + switch (command.$) { + case 'Help': + return _Utils_Tuple2( + A2($author$project$Main$runHelp, model, args), + $elm$core$Platform$Cmd$none); + case 'Clear': + return _Utils_Tuple2( + A2($author$project$Main$runClear, model, args), + $elm$core$Platform$Cmd$none); + case 'Cookies': + return A2($author$project$Main$runCookies, model, args); + case 'FontCommand': + return A2($author$project$Main$runFont, model, args); + case 'Hello': + return A2($author$project$Main$runHello, model, args); + case 'PromptCommand': + return A2($author$project$Main$runPrompt, model, args); + default: + return A2($author$project$Main$runTheme, model, args); + } + } else { + if (input.a === '') { + return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none); + } else { + var string = input.a; + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\ncommand ' + (string + ' not recognised. Run `help` to find a valid command')) + ])) + }), + $elm$core$Platform$Cmd$none); + } + } + }); +var $elm$url$Url$addPort = F2( + function (maybePort, starter) { + if (maybePort.$ === 'Nothing') { + return starter; + } else { + var port_ = maybePort.a; + return starter + (':' + $elm$core$String$fromInt(port_)); + } + }); +var $elm$url$Url$addPrefixed = F3( + function (prefix, maybeSegment, starter) { + if (maybeSegment.$ === 'Nothing') { + return starter; + } else { + var segment = maybeSegment.a; + return _Utils_ap( + starter, + _Utils_ap(prefix, segment)); + } + }); +var $elm$url$Url$toString = function (url) { + var http = function () { + var _v0 = url.protocol; + if (_v0.$ === 'Http') { + return 'http://'; + } else { + return 'https://'; + } + }(); + return A3( + $elm$url$Url$addPrefixed, + '#', + url.fragment, + A3( + $elm$url$Url$addPrefixed, + '?', + url.query, + _Utils_ap( + A2( + $elm$url$Url$addPort, + url.port_, + _Utils_ap(http, url.host)), + url.path))); +}; +var $author$project$Main$update = F2( + function (msg, model) { + switch (msg.$) { + case 'LinkClicked': + var urlRequest = msg.a; + if (urlRequest.$ === 'Internal') { + var url = urlRequest.a; + return _Utils_Tuple2( + model, + A2( + $elm$browser$Browser$Navigation$pushUrl, + model.key, + $elm$url$Url$toString(url))); + } else { + var href = urlRequest.a; + return _Utils_Tuple2( + model, + $elm$browser$Browser$Navigation$load(href)); + } + case 'UrlChanged': + var url = msg.a; + return _Utils_Tuple2( + _Utils_update( + model, + {url: url}), + $elm$core$Platform$Cmd$none); + case 'TakeInput': + var string = msg.a; + return A2($elm$core$String$endsWith, '\n', string) ? A2( + $author$project$Main$runCommand, + _Utils_update( + model, + { + cliContent: '', + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text( + (!_Utils_eq(model.content, _List_Nil)) ? '\n' : ''), + A2( + $author$project$Main$coloredText, + $author$project$Main$coreColor($author$project$Main$BrightMagenta), + model.prompt.prompt), + $rtfeldman$elm_css$Html$Styled$text( + $elm$core$String$trim(string)) + ])) + }), + $author$project$Main$parseInput(string)) : _Utils_Tuple2( + _Utils_update( + model, + {cliContent: string}), + $elm$core$Platform$Cmd$none); + case 'NoInitFocus': + return _Utils_Tuple2(model, $elm$core$Platform$Cmd$none); + default: + var result = msg.a; + if (result.$ === 'Ok') { + var test = result.a; + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text('\nData got successfully') + ])) + }), + $elm$core$Platform$Cmd$none); + } else { + var err = result.a; + return _Utils_Tuple2( + _Utils_update( + model, + { + content: _Utils_ap( + model.content, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$text( + '\n' + $elm$json$Json$Decode$errorToString(err)) + ])) + }), + $elm$core$Platform$Cmd$none); + } + } + }); +var $elm$browser$Browser$Document = F2( + function (title, body) { + return {body: body, title: title}; + }); +var $rtfeldman$elm_css$VirtualDom$Styled$UnscopedStyles = function (a) { + return {$: 'UnscopedStyles', a: a}; +}; +var $elm$core$Dict$get = F2( + function (targetKey, dict) { + get: + while (true) { + if (dict.$ === 'RBEmpty_elm_builtin') { + return $elm$core$Maybe$Nothing; + } else { + var key = dict.b; + var value = dict.c; + var left = dict.d; + var right = dict.e; + var _v1 = A2($elm$core$Basics$compare, targetKey, key); + switch (_v1.$) { + case 'LT': + var $temp$targetKey = targetKey, + $temp$dict = left; + targetKey = $temp$targetKey; + dict = $temp$dict; + continue get; + case 'EQ': + return $elm$core$Maybe$Just(value); + default: + var $temp$targetKey = targetKey, + $temp$dict = right; + targetKey = $temp$targetKey; + dict = $temp$dict; + continue get; + } + } + } + }); +var $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles = F2( + function (_v0, styles) { + var isCssStyles = _v0.b; + var cssTemplate = _v0.c; + if (isCssStyles) { + var _v1 = A2($elm$core$Dict$get, cssTemplate, styles); + if (_v1.$ === 'Just') { + return styles; + } else { + return A3( + $elm$core$Dict$insert, + cssTemplate, + $rtfeldman$elm_css$Hash$fromString(cssTemplate), + styles); + } + } else { + return styles; + } + }); +var $elm$virtual_dom$VirtualDom$property = F2( + function (key, value) { + return A2( + _VirtualDom_property, + _VirtualDom_noInnerHtmlOrFormAction(key), + _VirtualDom_noJavaScriptOrHtmlJson(value)); + }); +var $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute = F2( + function (styles, _v0) { + var val = _v0.a; + var isCssStyles = _v0.b; + var cssTemplate = _v0.c; + if (isCssStyles) { + var _v1 = A2($elm$core$Dict$get, cssTemplate, styles); + if (_v1.$ === 'Just') { + var classname = _v1.a; + return A2( + $elm$virtual_dom$VirtualDom$property, + 'className', + $elm$json$Json$Encode$string(classname)); + } else { + return A2( + $elm$virtual_dom$VirtualDom$property, + 'className', + $elm$json$Json$Encode$string('_unstyled')); + } + } else { + return val; + } + }); +var $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttributeNS = F2( + function (styles, _v0) { + var val = _v0.a; + var isCssStyles = _v0.b; + var cssTemplate = _v0.c; + if (isCssStyles) { + var _v1 = A2($elm$core$Dict$get, cssTemplate, styles); + if (_v1.$ === 'Just') { + var classname = _v1.a; + return A2($elm$virtual_dom$VirtualDom$attribute, 'class', classname); + } else { + return A2($elm$virtual_dom$VirtualDom$attribute, 'class', '_unstyled'); + } + } else { + return val; + } + }); +var $elm$virtual_dom$VirtualDom$keyedNode = function (tag) { + return _VirtualDom_keyedNode( + _VirtualDom_noScript(tag)); +}; +var $elm$virtual_dom$VirtualDom$keyedNodeNS = F2( + function (namespace, tag) { + return A2( + _VirtualDom_keyedNodeNS, + namespace, + _VirtualDom_noScript(tag)); + }); +var $elm$virtual_dom$VirtualDom$node = function (tag) { + return _VirtualDom_node( + _VirtualDom_noScript(tag)); +}; +var $elm$virtual_dom$VirtualDom$nodeNS = F2( + function (namespace, tag) { + return A2( + _VirtualDom_nodeNS, + namespace, + _VirtualDom_noScript(tag)); + }); +var $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml = F2( + function (_v6, _v7) { + var key = _v6.a; + var html = _v6.b; + var pairs = _v7.a; + var styles = _v7.b; + switch (html.$) { + case 'Unstyled': + var vdom = html.a; + return _Utils_Tuple2( + A2( + $elm$core$List$cons, + _Utils_Tuple2(key, vdom), + pairs), + styles); + case 'Node': + var elemType = html.a; + var properties = html.b; + var children = html.c; + var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); + var _v9 = A3( + $elm$core$List$foldl, + $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml, + _Utils_Tuple2(_List_Nil, combinedStyles), + children); + var childNodes = _v9.a; + var finalStyles = _v9.b; + var vdom = A3( + $elm$virtual_dom$VirtualDom$node, + elemType, + A2( + $elm$core$List$map, + $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute(finalStyles), + properties), + $elm$core$List$reverse(childNodes)); + return _Utils_Tuple2( + A2( + $elm$core$List$cons, + _Utils_Tuple2(key, vdom), + pairs), + finalStyles); + case 'NodeNS': + var ns = html.a; + var elemType = html.b; + var properties = html.c; + var children = html.d; + var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); + var _v10 = A3( + $elm$core$List$foldl, + $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml, + _Utils_Tuple2(_List_Nil, combinedStyles), + children); + var childNodes = _v10.a; + var finalStyles = _v10.b; + var vdom = A4( + $elm$virtual_dom$VirtualDom$nodeNS, + ns, + elemType, + A2( + $elm$core$List$map, + $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute(finalStyles), + properties), + $elm$core$List$reverse(childNodes)); + return _Utils_Tuple2( + A2( + $elm$core$List$cons, + _Utils_Tuple2(key, vdom), + pairs), + finalStyles); + case 'KeyedNode': + var elemType = html.a; + var properties = html.b; + var children = html.c; + var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); + var _v11 = A3( + $elm$core$List$foldl, + $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml, + _Utils_Tuple2(_List_Nil, combinedStyles), + children); + var childNodes = _v11.a; + var finalStyles = _v11.b; + var vdom = A3( + $elm$virtual_dom$VirtualDom$keyedNode, + elemType, + A2( + $elm$core$List$map, + $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute(finalStyles), + properties), + $elm$core$List$reverse(childNodes)); + return _Utils_Tuple2( + A2( + $elm$core$List$cons, + _Utils_Tuple2(key, vdom), + pairs), + finalStyles); + default: + var ns = html.a; + var elemType = html.b; + var properties = html.c; + var children = html.d; + var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); + var _v12 = A3( + $elm$core$List$foldl, + $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml, + _Utils_Tuple2(_List_Nil, combinedStyles), + children); + var childNodes = _v12.a; + var finalStyles = _v12.b; + var vdom = A4( + $elm$virtual_dom$VirtualDom$keyedNodeNS, + ns, + elemType, + A2( + $elm$core$List$map, + $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute(finalStyles), + properties), + $elm$core$List$reverse(childNodes)); + return _Utils_Tuple2( + A2( + $elm$core$List$cons, + _Utils_Tuple2(key, vdom), + pairs), + finalStyles); + } + }); +var $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml = F2( + function (html, _v0) { + var nodes = _v0.a; + var styles = _v0.b; + switch (html.$) { + case 'Unstyled': + var vdomNode = html.a; + return _Utils_Tuple2( + A2($elm$core$List$cons, vdomNode, nodes), + styles); + case 'Node': + var elemType = html.a; + var properties = html.b; + var children = html.c; + var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); + var _v2 = A3( + $elm$core$List$foldl, + $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml, + _Utils_Tuple2(_List_Nil, combinedStyles), + children); + var childNodes = _v2.a; + var finalStyles = _v2.b; + var vdomNode = A3( + $elm$virtual_dom$VirtualDom$node, + elemType, + A2( + $elm$core$List$map, + $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute(finalStyles), + properties), + $elm$core$List$reverse(childNodes)); + return _Utils_Tuple2( + A2($elm$core$List$cons, vdomNode, nodes), + finalStyles); + case 'NodeNS': + var ns = html.a; + var elemType = html.b; + var properties = html.c; + var children = html.d; + var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); + var _v3 = A3( + $elm$core$List$foldl, + $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml, + _Utils_Tuple2(_List_Nil, combinedStyles), + children); + var childNodes = _v3.a; + var finalStyles = _v3.b; + var vdomNode = A4( + $elm$virtual_dom$VirtualDom$nodeNS, + ns, + elemType, + A2( + $elm$core$List$map, + $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttributeNS(finalStyles), + properties), + $elm$core$List$reverse(childNodes)); + return _Utils_Tuple2( + A2($elm$core$List$cons, vdomNode, nodes), + finalStyles); + case 'KeyedNode': + var elemType = html.a; + var properties = html.b; + var children = html.c; + var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); + var _v4 = A3( + $elm$core$List$foldl, + $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml, + _Utils_Tuple2(_List_Nil, combinedStyles), + children); + var childNodes = _v4.a; + var finalStyles = _v4.b; + var vdomNode = A3( + $elm$virtual_dom$VirtualDom$keyedNode, + elemType, + A2( + $elm$core$List$map, + $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute(finalStyles), + properties), + $elm$core$List$reverse(childNodes)); + return _Utils_Tuple2( + A2($elm$core$List$cons, vdomNode, nodes), + finalStyles); + default: + var ns = html.a; + var elemType = html.b; + var properties = html.c; + var children = html.d; + var combinedStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, styles, properties); + var _v5 = A3( + $elm$core$List$foldl, + $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml, + _Utils_Tuple2(_List_Nil, combinedStyles), + children); + var childNodes = _v5.a; + var finalStyles = _v5.b; + var vdomNode = A4( + $elm$virtual_dom$VirtualDom$keyedNodeNS, + ns, + elemType, + A2( + $elm$core$List$map, + $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttributeNS(finalStyles), + properties), + $elm$core$List$reverse(childNodes)); + return _Utils_Tuple2( + A2($elm$core$List$cons, vdomNode, nodes), + finalStyles); + } + }); +var $elm$core$Dict$foldl = F3( + function (func, acc, dict) { + foldl: + while (true) { + if (dict.$ === 'RBEmpty_elm_builtin') { + return acc; + } else { + var key = dict.b; + var value = dict.c; + var left = dict.d; + var right = dict.e; + var $temp$func = func, + $temp$acc = A3( + func, + key, + value, + A3($elm$core$Dict$foldl, func, acc, left)), + $temp$dict = right; + func = $temp$func; + acc = $temp$acc; + dict = $temp$dict; + continue foldl; + } + } + }); +var $elm$core$String$replace = F3( + function (before, after, string) { + return A2( + $elm$core$String$join, + after, + A2($elm$core$String$split, before, string)); + }); +var $rtfeldman$elm_css$VirtualDom$Styled$styleToDeclaration = F3( + function (template, classname, declaration) { + return declaration + ('\n' + A3($elm$core$String$replace, $rtfeldman$elm_css$VirtualDom$Styled$classnameStandin, classname, template)); + }); +var $rtfeldman$elm_css$VirtualDom$Styled$toDeclaration = function (dict) { + return A3($elm$core$Dict$foldl, $rtfeldman$elm_css$VirtualDom$Styled$styleToDeclaration, '', dict); +}; +var $rtfeldman$elm_css$VirtualDom$Styled$toScopedDeclaration = F2( + function (scopingPrefix, dict) { + return A3( + $elm$core$Dict$foldl, + F3( + function (template, classname, declaration) { + return declaration + ('\n' + A3($elm$core$String$replace, '.' + $rtfeldman$elm_css$VirtualDom$Styled$classnameStandin, '#' + (scopingPrefix + ('.' + classname)), template)); + }), + '', + dict); + }); +var $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode = F2( + function (maybeNonce, accumulatedStyles) { + var cssText = function () { + if (accumulatedStyles.$ === 'UnscopedStyles') { + var allStyles = accumulatedStyles.a; + return $rtfeldman$elm_css$VirtualDom$Styled$toDeclaration(allStyles); + } else { + var scope = accumulatedStyles.a.a; + var rootStyles = accumulatedStyles.b; + var descendantStyles = accumulatedStyles.c; + return A2($rtfeldman$elm_css$VirtualDom$Styled$toScopedDeclaration, scope, rootStyles) + ('\n' + A2($rtfeldman$elm_css$VirtualDom$Styled$toScopedDeclaration, scope + ' ', descendantStyles)); + } + }(); + return A3( + $elm$virtual_dom$VirtualDom$node, + 'span', + _List_fromArray( + [ + A2($elm$virtual_dom$VirtualDom$attribute, 'style', 'display: none;'), + A2($elm$virtual_dom$VirtualDom$attribute, 'class', 'elm-css-style-wrapper') + ]), + _List_fromArray( + [ + A3( + $elm$virtual_dom$VirtualDom$node, + 'style', + function () { + if (maybeNonce.$ === 'Just') { + var nonce = maybeNonce.a.a; + return _List_fromArray( + [ + A2($elm$virtual_dom$VirtualDom$attribute, 'nonce', nonce) + ]); + } else { + return _List_Nil; + } + }(), + $elm$core$List$singleton( + $elm$virtual_dom$VirtualDom$text(cssText))) + ])); + }); +var $rtfeldman$elm_css$VirtualDom$Styled$unstyle = F4( + function (maybeNonce, elemType, properties, children) { + var initialStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, $elm$core$Dict$empty, properties); + var _v0 = A3( + $elm$core$List$foldl, + $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml, + _Utils_Tuple2(_List_Nil, initialStyles), + children); + var childNodes = _v0.a; + var styles = _v0.b; + var styleNode = A2( + $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode, + maybeNonce, + $rtfeldman$elm_css$VirtualDom$Styled$UnscopedStyles(styles)); + var unstyledProperties = A2( + $elm$core$List$map, + $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute(styles), + properties); + return A3( + $elm$virtual_dom$VirtualDom$node, + elemType, + unstyledProperties, + A2( + $elm$core$List$cons, + styleNode, + $elm$core$List$reverse(childNodes))); + }); +var $rtfeldman$elm_css$VirtualDom$Styled$containsKey = F2( + function (key, pairs) { + containsKey: + while (true) { + if (!pairs.b) { + return false; + } else { + var _v1 = pairs.a; + var str = _v1.a; + var rest = pairs.b; + if (_Utils_eq(key, str)) { + return true; + } else { + var $temp$key = key, + $temp$pairs = rest; + key = $temp$key; + pairs = $temp$pairs; + continue containsKey; + } + } + } + }); +var $rtfeldman$elm_css$VirtualDom$Styled$getUnusedKey = F2( + function (_default, pairs) { + getUnusedKey: + while (true) { + if (!pairs.b) { + return _default; + } else { + var _v1 = pairs.a; + var firstKey = _v1.a; + var rest = pairs.b; + var newKey = '_' + firstKey; + if (A2($rtfeldman$elm_css$VirtualDom$Styled$containsKey, newKey, rest)) { + var $temp$default = newKey, + $temp$pairs = rest; + _default = $temp$default; + pairs = $temp$pairs; + continue getUnusedKey; + } else { + return newKey; + } + } + } + }); +var $rtfeldman$elm_css$VirtualDom$Styled$toKeyedStyleNode = F3( + function (maybeNonce, accumulatedStyles, keyedChildNodes) { + var styleNodeKey = A2($rtfeldman$elm_css$VirtualDom$Styled$getUnusedKey, '_', keyedChildNodes); + var finalNode = A2($rtfeldman$elm_css$VirtualDom$Styled$toStyleNode, maybeNonce, accumulatedStyles); + return _Utils_Tuple2(styleNodeKey, finalNode); + }); +var $rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyed = F4( + function (maybeNonce, elemType, properties, keyedChildren) { + var initialStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, $elm$core$Dict$empty, properties); + var _v0 = A3( + $elm$core$List$foldl, + $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml, + _Utils_Tuple2(_List_Nil, initialStyles), + keyedChildren); + var keyedChildNodes = _v0.a; + var styles = _v0.b; + var keyedStyleNode = A3( + $rtfeldman$elm_css$VirtualDom$Styled$toKeyedStyleNode, + maybeNonce, + $rtfeldman$elm_css$VirtualDom$Styled$UnscopedStyles(styles), + keyedChildNodes); + var unstyledProperties = A2( + $elm$core$List$map, + $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttribute(styles), + properties); + return A3( + $elm$virtual_dom$VirtualDom$keyedNode, + elemType, + unstyledProperties, + A2( + $elm$core$List$cons, + keyedStyleNode, + $elm$core$List$reverse(keyedChildNodes))); + }); +var $rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyedNS = F5( + function (maybeNonce, ns, elemType, properties, keyedChildren) { + var initialStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, $elm$core$Dict$empty, properties); + var _v0 = A3( + $elm$core$List$foldl, + $rtfeldman$elm_css$VirtualDom$Styled$accumulateKeyedStyledHtml, + _Utils_Tuple2(_List_Nil, initialStyles), + keyedChildren); + var keyedChildNodes = _v0.a; + var styles = _v0.b; + var keyedStyleNode = A3( + $rtfeldman$elm_css$VirtualDom$Styled$toKeyedStyleNode, + maybeNonce, + $rtfeldman$elm_css$VirtualDom$Styled$UnscopedStyles(styles), + keyedChildNodes); + var unstyledProperties = A2( + $elm$core$List$map, + $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttributeNS(styles), + properties); + return A4( + $elm$virtual_dom$VirtualDom$keyedNodeNS, + ns, + elemType, + unstyledProperties, + A2( + $elm$core$List$cons, + keyedStyleNode, + $elm$core$List$reverse(keyedChildNodes))); + }); +var $rtfeldman$elm_css$VirtualDom$Styled$unstyleNS = F5( + function (maybeNonce, ns, elemType, properties, children) { + var initialStyles = A3($elm$core$List$foldl, $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyles, $elm$core$Dict$empty, properties); + var _v0 = A3( + $elm$core$List$foldl, + $rtfeldman$elm_css$VirtualDom$Styled$accumulateStyledHtml, + _Utils_Tuple2(_List_Nil, initialStyles), + children); + var childNodes = _v0.a; + var styles = _v0.b; + var styleNode = A2( + $rtfeldman$elm_css$VirtualDom$Styled$toStyleNode, + maybeNonce, + $rtfeldman$elm_css$VirtualDom$Styled$UnscopedStyles(styles)); + var unstyledProperties = A2( + $elm$core$List$map, + $rtfeldman$elm_css$VirtualDom$Styled$extractUnstyledAttributeNS(styles), + properties); + return A4( + $elm$virtual_dom$VirtualDom$nodeNS, + ns, + elemType, + unstyledProperties, + A2( + $elm$core$List$cons, + styleNode, + $elm$core$List$reverse(childNodes))); + }); +var $rtfeldman$elm_css$VirtualDom$Styled$toUnstyled = function (vdom) { + switch (vdom.$) { + case 'Unstyled': + var plainNode = vdom.a; + return plainNode; + case 'Node': + var elemType = vdom.a; + var properties = vdom.b; + var children = vdom.c; + return A4($rtfeldman$elm_css$VirtualDom$Styled$unstyle, $elm$core$Maybe$Nothing, elemType, properties, children); + case 'NodeNS': + var ns = vdom.a; + var elemType = vdom.b; + var properties = vdom.c; + var children = vdom.d; + return A5($rtfeldman$elm_css$VirtualDom$Styled$unstyleNS, $elm$core$Maybe$Nothing, ns, elemType, properties, children); + case 'KeyedNode': + var elemType = vdom.a; + var properties = vdom.b; + var children = vdom.c; + return A4($rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyed, $elm$core$Maybe$Nothing, elemType, properties, children); + default: + var ns = vdom.a; + var elemType = vdom.b; + var properties = vdom.c; + var children = vdom.d; + return A5($rtfeldman$elm_css$VirtualDom$Styled$unstyleKeyedNS, $elm$core$Maybe$Nothing, ns, elemType, properties, children); + } +}; +var $rtfeldman$elm_css$Html$Styled$toUnstyled = $rtfeldman$elm_css$VirtualDom$Styled$toUnstyled; +var $author$project$Main$TakeInput = function (a) { + return {$: 'TakeInput', a: a}; +}; +var $rtfeldman$elm_css$VirtualDom$Styled$property = F2( + function (key, value) { + return A3( + $rtfeldman$elm_css$VirtualDom$Styled$Attribute, + A2($elm$virtual_dom$VirtualDom$property, key, value), + false, + ''); + }); +var $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty = F2( + function (key, string) { + return A2( + $rtfeldman$elm_css$VirtualDom$Styled$property, + key, + $elm$json$Json$Encode$string(string)); + }); +var $rtfeldman$elm_css$Html$Styled$Attributes$id = $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty('id'); +var $rtfeldman$elm_css$Html$Styled$Events$alwaysStop = function (x) { + return _Utils_Tuple2(x, true); +}; +var $elm$virtual_dom$VirtualDom$MayStopPropagation = function (a) { + return {$: 'MayStopPropagation', a: a}; +}; +var $elm$virtual_dom$VirtualDom$on = _VirtualDom_on; +var $rtfeldman$elm_css$VirtualDom$Styled$on = F2( + function (eventName, handler) { + return A3( + $rtfeldman$elm_css$VirtualDom$Styled$Attribute, + A2($elm$virtual_dom$VirtualDom$on, eventName, handler), + false, + ''); + }); +var $rtfeldman$elm_css$Html$Styled$Events$stopPropagationOn = F2( + function (event, decoder) { + return A2( + $rtfeldman$elm_css$VirtualDom$Styled$on, + event, + $elm$virtual_dom$VirtualDom$MayStopPropagation(decoder)); + }); +var $rtfeldman$elm_css$Html$Styled$Events$targetValue = A2( + $elm$json$Json$Decode$at, + _List_fromArray( + ['target', 'value']), + $elm$json$Json$Decode$string); +var $rtfeldman$elm_css$Html$Styled$Events$onInput = function (tagger) { + return A2( + $rtfeldman$elm_css$Html$Styled$Events$stopPropagationOn, + 'input', + A2( + $elm$json$Json$Decode$map, + $rtfeldman$elm_css$Html$Styled$Events$alwaysStop, + A2($elm$json$Json$Decode$map, tagger, $rtfeldman$elm_css$Html$Styled$Events$targetValue))); +}; +var $author$project$Main$Background = {$: 'Background'}; +var $author$project$Main$Foreground = {$: 'Foreground'}; +var $rtfeldman$elm_css$Html$Styled$main_ = $rtfeldman$elm_css$Html$Styled$node('main'); +var $rtfeldman$elm_css$Css$minHeight = $rtfeldman$elm_css$Css$prop1('min-height'); +var $author$project$Main$White = {$: 'White'}; +var $author$project$Main$themeColor = F2( + function (model, color) { + themeColor: + while (true) { + var _v0 = model.theme; + switch (_v0.$) { + case 'Pit': + switch (color.$) { + case 'Background': + return $rtfeldman$elm_css$Css$hex('#120211'); + case 'Foreground': + return $rtfeldman$elm_css$Css$hex('#f3d9f0'); + case 'Cursor': + var $temp$model = model, + $temp$color = $author$project$Main$White; + model = $temp$model; + color = $temp$color; + continue themeColor; + case 'Black': + return $rtfeldman$elm_css$Css$hex('#380e36'); + case 'White': + return $rtfeldman$elm_css$Css$hex('#e29edc'); + case 'BrightBlack': + return $rtfeldman$elm_css$Css$hex('#7c2b77'); + default: + return $rtfeldman$elm_css$Css$hex('#f9ecf7'); + } + case 'Dim': + switch (color.$) { + case 'Background': + return $rtfeldman$elm_css$Css$hex('#380e36'); + case 'Foreground': + return $rtfeldman$elm_css$Css$hex('#f7e5f4'); + case 'Cursor': + var $temp$model = model, + $temp$color = $author$project$Main$White; + model = $temp$model; + color = $temp$color; + continue themeColor; + case 'Black': + return $rtfeldman$elm_css$Css$hex('#5e1c56'); + case 'White': + return $rtfeldman$elm_css$Css$hex('#e8b2e2'); + case 'BrightBlack': + return $rtfeldman$elm_css$Css$hex('#9d3c98'); + default: + return $rtfeldman$elm_css$Css$hex('#fbf4fa'); + } + case 'Sky': + switch (color.$) { + case 'Background': + return $rtfeldman$elm_css$Css$hex('#f3d9f0'); + case 'Foreground': + return $rtfeldman$elm_css$Css$hex('#380e36'); + case 'Cursor': + var $temp$model = model, + $temp$color = $author$project$Main$White; + model = $temp$model; + color = $temp$color; + continue themeColor; + case 'Black': + return $rtfeldman$elm_css$Css$hex('#eec6e9'); + case 'White': + return $rtfeldman$elm_css$Css$hex('#7c2b77'); + case 'BrightBlack': + return $rtfeldman$elm_css$Css$hex('#d575cd'); + default: + return $rtfeldman$elm_css$Css$hex('#120211'); + } + default: + switch (color.$) { + case 'Background': + return $rtfeldman$elm_css$Css$hex('#f9ecf7'); + case 'Foreground': + return $rtfeldman$elm_css$Css$hex('#5a1c56'); + case 'Cursor': + var $temp$model = model, + $temp$color = $author$project$Main$White; + model = $temp$model; + color = $temp$color; + continue themeColor; + case 'Black': + return $rtfeldman$elm_css$Css$hex('#f3d9f0'); + case 'White': + return $rtfeldman$elm_css$Css$hex('#9d3c98'); + case 'BrightBlack': + return $rtfeldman$elm_css$Css$hex('#dc8ed5'); + default: + return $rtfeldman$elm_css$Css$hex('#380e36'); + } + } + } + }); +var $rtfeldman$elm_css$Css$VhUnits = {$: 'VhUnits'}; +var $rtfeldman$elm_css$Css$vh = A2($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$VhUnits, 'vh'); +var $rtfeldman$elm_css$Css$VwUnits = {$: 'VwUnits'}; +var $rtfeldman$elm_css$Css$vw = A2($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$VwUnits, 'vw'); +var $rtfeldman$elm_css$Css$width = $rtfeldman$elm_css$Css$prop1('width'); +var $author$project$Main$styledBody = function (model) { + return A2( + $rtfeldman$elm_css$Html$Styled$styled, + $rtfeldman$elm_css$Html$Styled$main_, + _List_fromArray( + [ + $rtfeldman$elm_css$Css$backgroundColor( + A2($author$project$Main$themeColor, model, $author$project$Main$Background)), + $rtfeldman$elm_css$Css$color( + A2($author$project$Main$themeColor, model, $author$project$Main$Foreground)), + $rtfeldman$elm_css$Css$minHeight( + $rtfeldman$elm_css$Css$vh(100)), + $rtfeldman$elm_css$Css$width( + $rtfeldman$elm_css$Css$vw(100)), + $rtfeldman$elm_css$Css$margin( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$padding( + $rtfeldman$elm_css$Css$px(0)) + ])); +}; +var $rtfeldman$elm_css$Css$displayFlex = A2($rtfeldman$elm_css$Css$property, 'display', 'flex'); +var $rtfeldman$elm_css$Css$flexDirection = $rtfeldman$elm_css$Css$prop1('flex-direction'); +var $rtfeldman$elm_css$Css$flexStart = $rtfeldman$elm_css$Css$prop1('flex-start'); +var $rtfeldman$elm_css$Css$flexWrap = $rtfeldman$elm_css$Css$prop1('flex-wrap'); +var $rtfeldman$elm_css$Css$Preprocess$ApplyStyles = function (a) { + return {$: 'ApplyStyles', a: a}; +}; +var $rtfeldman$elm_css$Css$Internal$property = F2( + function (key, value) { + return $rtfeldman$elm_css$Css$Preprocess$AppendProperty( + $rtfeldman$elm_css$Css$Structure$Property(key + (':' + value))); + }); +var $rtfeldman$elm_css$Css$Internal$getOverloadedProperty = F3( + function (functionName, desiredKey, style) { + getOverloadedProperty: + while (true) { + switch (style.$) { + case 'AppendProperty': + var str = style.a.a; + var key = A2( + $elm$core$Maybe$withDefault, + '', + $elm$core$List$head( + A2($elm$core$String$split, ':', str))); + return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, key); + case 'ExtendSelector': + var selector = style.a; + return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-selector')); + case 'NestSnippet': + var combinator = style.a; + return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-combinator')); + case 'WithPseudoElement': + var pseudoElement = style.a; + return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-pseudo-element setter')); + case 'WithMedia': + return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-media-query')); + case 'WithKeyframes': + return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-inapplicable-Style-for-keyframes')); + default: + if (!style.a.b) { + return A2($rtfeldman$elm_css$Css$Internal$property, desiredKey, 'elm-css-error-cannot-apply-' + (functionName + '-with-empty-Style')); + } else { + if (!style.a.b.b) { + var _v1 = style.a; + var only = _v1.a; + var $temp$functionName = functionName, + $temp$desiredKey = desiredKey, + $temp$style = only; + functionName = $temp$functionName; + desiredKey = $temp$desiredKey; + style = $temp$style; + continue getOverloadedProperty; + } else { + var _v2 = style.a; + var first = _v2.a; + var rest = _v2.b; + var $temp$functionName = functionName, + $temp$desiredKey = desiredKey, + $temp$style = $rtfeldman$elm_css$Css$Preprocess$ApplyStyles(rest); + functionName = $temp$functionName; + desiredKey = $temp$desiredKey; + style = $temp$style; + continue getOverloadedProperty; + } + } + } + } + }); +var $rtfeldman$elm_css$Css$Internal$IncompatibleUnits = {$: 'IncompatibleUnits'}; +var $rtfeldman$elm_css$Css$Internal$lengthForOverloadedProperty = A3($rtfeldman$elm_css$Css$Internal$lengthConverter, $rtfeldman$elm_css$Css$Internal$IncompatibleUnits, '', 0); +var $rtfeldman$elm_css$Css$justifyContent = function (fn) { + return A3( + $rtfeldman$elm_css$Css$Internal$getOverloadedProperty, + 'justifyContent', + 'justify-content', + fn($rtfeldman$elm_css$Css$Internal$lengthForOverloadedProperty)); +}; +var $rtfeldman$elm_css$Css$noWrap = {flexDirectionOrWrap: $rtfeldman$elm_css$Css$Structure$Compatible, flexWrap: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'nowrap', whiteSpace: $rtfeldman$elm_css$Css$Structure$Compatible}; +var $rtfeldman$elm_css$Css$row = {flexDirection: $rtfeldman$elm_css$Css$Structure$Compatible, flexDirectionOrWrap: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'row'}; +var $author$project$Main$styledCL = function (model) { + return A2( + $rtfeldman$elm_css$Html$Styled$styled, + $rtfeldman$elm_css$Html$Styled$span, + _List_fromArray( + [ + $rtfeldman$elm_css$Css$backgroundColor( + A2($author$project$Main$themeColor, model, $author$project$Main$Background)), + $rtfeldman$elm_css$Css$padding( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$margin( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$displayFlex, + $rtfeldman$elm_css$Css$flexDirection($rtfeldman$elm_css$Css$row), + $rtfeldman$elm_css$Css$flexWrap($rtfeldman$elm_css$Css$noWrap), + $rtfeldman$elm_css$Css$justifyContent($rtfeldman$elm_css$Css$flexStart) + ])); +}; +var $rtfeldman$elm_css$Css$flexGrow = $rtfeldman$elm_css$Css$prop1('flex-grow'); +var $rtfeldman$elm_css$Css$fontSize = $rtfeldman$elm_css$Css$prop1('font-size'); +var $rtfeldman$elm_css$Css$height = $rtfeldman$elm_css$Css$prop1('height'); +var $rtfeldman$elm_css$Css$hidden = {borderStyle: $rtfeldman$elm_css$Css$Structure$Compatible, overflow: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'hidden', visibility: $rtfeldman$elm_css$Css$Structure$Compatible}; +var $rtfeldman$elm_css$Css$UnitlessInteger = {$: 'UnitlessInteger'}; +var $rtfeldman$elm_css$Css$int = function (val) { + return { + fontWeight: $rtfeldman$elm_css$Css$Structure$Compatible, + intOrAuto: $rtfeldman$elm_css$Css$Structure$Compatible, + lengthOrNumber: $rtfeldman$elm_css$Css$Structure$Compatible, + lengthOrNumberOrAutoOrNoneOrContent: $rtfeldman$elm_css$Css$Structure$Compatible, + number: $rtfeldman$elm_css$Css$Structure$Compatible, + numberOrInfinite: $rtfeldman$elm_css$Css$Structure$Compatible, + numericValue: val, + unitLabel: '', + units: $rtfeldman$elm_css$Css$UnitlessInteger, + value: $elm$core$String$fromInt(val) + }; +}; +var $rtfeldman$elm_css$Css$none = {backgroundImage: $rtfeldman$elm_css$Css$Structure$Compatible, blockAxisOverflow: $rtfeldman$elm_css$Css$Structure$Compatible, borderStyle: $rtfeldman$elm_css$Css$Structure$Compatible, cursor: $rtfeldman$elm_css$Css$Structure$Compatible, display: $rtfeldman$elm_css$Css$Structure$Compatible, hoverCapability: $rtfeldman$elm_css$Css$Structure$Compatible, inlineAxisOverflow: $rtfeldman$elm_css$Css$Structure$Compatible, keyframes: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrNone: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrNoneOrMinMaxDimension: $rtfeldman$elm_css$Css$Structure$Compatible, lengthOrNumberOrAutoOrNoneOrContent: $rtfeldman$elm_css$Css$Structure$Compatible, listStyleType: $rtfeldman$elm_css$Css$Structure$Compatible, listStyleTypeOrPositionOrImage: $rtfeldman$elm_css$Css$Structure$Compatible, none: $rtfeldman$elm_css$Css$Structure$Compatible, outline: $rtfeldman$elm_css$Css$Structure$Compatible, pointerDevice: $rtfeldman$elm_css$Css$Structure$Compatible, pointerEvents: $rtfeldman$elm_css$Css$Structure$Compatible, resize: $rtfeldman$elm_css$Css$Structure$Compatible, scriptingSupport: $rtfeldman$elm_css$Css$Structure$Compatible, textDecorationLine: $rtfeldman$elm_css$Css$Structure$Compatible, textTransform: $rtfeldman$elm_css$Css$Structure$Compatible, touchAction: $rtfeldman$elm_css$Css$Structure$Compatible, transform: $rtfeldman$elm_css$Css$Structure$Compatible, updateFrequency: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'none'}; +var $rtfeldman$elm_css$Css$outlineWidth = $rtfeldman$elm_css$Css$prop1('outline-width'); +var $rtfeldman$elm_css$Css$overflow = $rtfeldman$elm_css$Css$prop1('overflow'); +var $rtfeldman$elm_css$Css$resize = $rtfeldman$elm_css$Css$prop1('resize'); +var $rtfeldman$elm_css$Html$Styled$textarea = $rtfeldman$elm_css$Html$Styled$node('textarea'); +var $author$project$Main$styledCLI = function (model) { + return A2( + $rtfeldman$elm_css$Html$Styled$styled, + $rtfeldman$elm_css$Html$Styled$textarea, + _List_fromArray( + [ + $rtfeldman$elm_css$Css$color( + A2($author$project$Main$themeColor, model, $author$project$Main$Foreground)), + $rtfeldman$elm_css$Css$fontSize( + $rtfeldman$elm_css$Css$px(model.font.fontSize)), + $rtfeldman$elm_css$Css$padding( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$margin( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$backgroundColor( + A2($author$project$Main$themeColor, model, $author$project$Main$Background)), + $rtfeldman$elm_css$Css$borderWidth( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$outlineWidth( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$height( + $rtfeldman$elm_css$Css$px(model.font.fontSize)), + $rtfeldman$elm_css$Css$resize($rtfeldman$elm_css$Css$none), + $rtfeldman$elm_css$Css$overflow($rtfeldman$elm_css$Css$hidden), + $rtfeldman$elm_css$Css$flexGrow( + $rtfeldman$elm_css$Css$int(100)) + ])); +}; +var $rtfeldman$elm_css$Css$fontFamily = $rtfeldman$elm_css$Css$prop1('font-family'); +var $rtfeldman$elm_css$Css$monospace = {fontFamily: $rtfeldman$elm_css$Css$Structure$Compatible, value: 'monospace'}; +var $rtfeldman$elm_css$Css$preWrap = {value: 'pre-wrap', whiteSpace: $rtfeldman$elm_css$Css$Structure$Compatible}; +var $rtfeldman$elm_css$Css$whiteSpace = $rtfeldman$elm_css$Css$prop1('white-space'); +var $author$project$Main$styledContent = function (model) { + return A2( + $rtfeldman$elm_css$Html$Styled$styled, + $rtfeldman$elm_css$Html$Styled$span, + _List_fromArray( + [ + $rtfeldman$elm_css$Css$color( + A2($author$project$Main$themeColor, model, $author$project$Main$Foreground)), + $rtfeldman$elm_css$Css$fontSize( + $rtfeldman$elm_css$Css$px(model.font.fontSize)), + $rtfeldman$elm_css$Css$padding( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$margin( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$backgroundColor( + A2($author$project$Main$themeColor, model, $author$project$Main$Background)), + $rtfeldman$elm_css$Css$borderWidth( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$width( + $rtfeldman$elm_css$Css$vw(100)), + $rtfeldman$elm_css$Css$whiteSpace($rtfeldman$elm_css$Css$preWrap), + $rtfeldman$elm_css$Css$fontFamily($rtfeldman$elm_css$Css$monospace) + ])); +}; +var $author$project$Main$styledPrompt = function (model) { + return A2( + $rtfeldman$elm_css$Html$Styled$styled, + $rtfeldman$elm_css$Html$Styled$span, + _List_fromArray( + [ + $rtfeldman$elm_css$Css$color( + A2($author$project$Main$themeColor, model, $author$project$Main$Foreground)), + $rtfeldman$elm_css$Css$fontSize( + $rtfeldman$elm_css$Css$px(model.font.fontSize)), + $rtfeldman$elm_css$Css$padding( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$margin( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$backgroundColor( + A2($author$project$Main$themeColor, model, $author$project$Main$Background)), + $rtfeldman$elm_css$Css$borderWidth( + $rtfeldman$elm_css$Css$px(0)), + $rtfeldman$elm_css$Css$height( + $rtfeldman$elm_css$Css$px(model.font.fontSize)), + $rtfeldman$elm_css$Css$fontFamily($rtfeldman$elm_css$Css$monospace) + ])); +}; +var $rtfeldman$elm_css$Html$Styled$Attributes$value = $rtfeldman$elm_css$Html$Styled$Attributes$stringProperty('value'); +var $author$project$Main$viewBody = function (model) { + return A3( + $author$project$Main$styledBody, + model, + _List_Nil, + _List_fromArray( + [ + A3($author$project$Main$styledContent, model, _List_Nil, model.content), + A3( + $author$project$Main$styledCL, + model, + _List_Nil, + _List_fromArray( + [ + A3( + $author$project$Main$styledPrompt, + model, + _List_Nil, + _List_fromArray( + [ + A2( + $author$project$Main$coloredText, + $author$project$Main$coreColor($author$project$Main$BrightMagenta), + model.prompt.prompt) + ])), + A3( + $author$project$Main$styledCLI, + model, + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$Events$onInput($author$project$Main$TakeInput), + $rtfeldman$elm_css$Html$Styled$Attributes$value(model.cliContent), + $rtfeldman$elm_css$Html$Styled$Attributes$id('init-focus') + ]), + _List_Nil) + ])) + ])); +}; +var $author$project$Main$view = function (model) { + return A2( + $elm$browser$Browser$Document, + 'andrew.r3tic.net', + _List_fromArray( + [ + $rtfeldman$elm_css$Html$Styled$toUnstyled( + $author$project$Main$viewBody(model)) + ])); +}; +var $author$project$Main$main = $elm$browser$Browser$application( + {init: $author$project$Main$init, onUrlChange: $author$project$Main$UrlChanged, onUrlRequest: $author$project$Main$LinkClicked, subscriptions: $author$project$Main$subscriptions, update: $author$project$Main$update, view: $author$project$Main$view}); +_Platform_export({'Main':{'init':$author$project$Main$main($elm$json$Json$Decode$value)(0)}});}(this)); \ No newline at end of file diff --git a/assets/json/init.json b/assets/json/init.json new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/assets/json/init.json @@ -0,0 +1,2 @@ +{ +} diff --git a/assets/json/test.json b/assets/json/test.json new file mode 100644 index 0000000..da132be --- /dev/null +++ b/assets/json/test.json @@ -0,0 +1,4 @@ +{ + "message0": "Hello World!", + "message1": "This is another message. Hello World!" +} diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 0000000..c368d45 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,2 @@ +.stack-work/ +*~ \ No newline at end of file diff --git a/backend/CHANGELOG.md b/backend/CHANGELOG.md new file mode 100644 index 0000000..1e535cd --- /dev/null +++ b/backend/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog for `hs-server` + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to the +[Haskell Package Versioning Policy](https://pvp.haskell.org/). + +## Unreleased + +## 0.1.0.0 - YYYY-MM-DD diff --git a/backend/LICENSE b/backend/LICENSE new file mode 100644 index 0000000..4810e24 --- /dev/null +++ b/backend/LICENSE @@ -0,0 +1,26 @@ +Copyright 2025 Author name here + +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. + +3. Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..de045bf --- /dev/null +++ b/backend/README.md @@ -0,0 +1,2 @@ +# hs-server +this is a custom-built single-purpose server infrastructure based on Scorry, Warp, and Wai. It holds up MTGmonkey's personal website diff --git a/backend/Setup.hs b/backend/Setup.hs new file mode 100644 index 0000000..9a994af --- /dev/null +++ b/backend/Setup.hs @@ -0,0 +1,2 @@ +import Distribution.Simple +main = defaultMain diff --git a/backend/app/Main.hs b/backend/app/Main.hs new file mode 100644 index 0000000..6a37b1f --- /dev/null +++ b/backend/app/Main.hs @@ -0,0 +1,90 @@ +{-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE OverloadedStrings #-} + +-- import Lib +import Data.Text.Lazy (Text) +import Network.Wai.Handler.Warp (Port) +import Text.Blaze ((!)) +import Text.Blaze.Html.Renderer.Text (renderHtml) + +import Network.HTTP.Types +import Web.Scotty as S + +import qualified Control.Exception as E +import qualified Text.Blaze.Html5 as H +import qualified Text.Blaze.Html5.Attributes as A + +-- HTML +index :: H.Html -> Text +index compiledElmApp = renderHtml $ do + H.docTypeHtml $ do + H.head $ do + H.title "TESTING Scotty+Elm" + H.style "body{margin:0px;}" + (H.body ! A.id "body") $ do + embedJs compiledElmApp + +-- CONF +port :: Port +port = 3000 + +adminContact :: String +adminContact = "[Matrix] @mtgmonkey:calitabby.net" + +compiledElmAppFile :: AssetPath +compiledElmAppFile = "/js/main.js" + +boilerplateJsFile :: AssetPath +boilerplateJsFile = "/js/init.js" + +assetsFolder :: FilePath +assetsFolder = "./assets" + +-- MAIN +main :: IO () +main = do + compiledElmAppOrExc <- E.try $ readFile $ assetsFolder ++ compiledElmAppFile :: IO (Either E.IOException String) + let compiledElmApp = case compiledElmAppOrExc of + Left e -> serverErrorReadFile e + Right contents -> H.toHtml $ contents + + boilerplateJsOrExc <- E.try $ readFile $ assetsFolder ++ boilerplateJsFile :: IO (Either E.IOException String) + let boilerplateJs = case boilerplateJsOrExc of + Left e -> serverErrorReadFile e + Right contents -> H.toHtml $ contents + + let anyRoute = regex "^.*$" + scotty port $ do + + -- GET requests + get "/" $ do + status ok200 + S.html $ index $ do + compiledElmApp + "\n" + boilerplateJs + + get "/favicon.ico/" $ do + status notFound404 + S.html $ "you want a favi-whatnow!?" + + -- ERR + notFound $ do + status methodNotAllowed405 + S.text "Verb disallowed; OR, route doesn't exist :(" + + +-- FUNC +serverErrorReadFile :: E.IOException -> Js +serverErrorReadFile e = H.toHtml $ "document.getElementById('body').innerHTML='Server-side error occurred: " + ++ (show e) + ++ "; report htis to a site administrator: " + ++ adminContact + ++ "';" + +embedJs :: Js -> H.Html +embedJs js = H.script $ js + + -- TYPES +type AssetPath = FilePath +type Js = H.Html diff --git a/backend/hs-server.cabal b/backend/hs-server.cabal new file mode 100644 index 0000000..32458cb --- /dev/null +++ b/backend/hs-server.cabal @@ -0,0 +1,80 @@ +cabal-version: 2.2 + +-- This file has been generated from package.yaml by hpack version 0.37.0. +-- +-- see: https://github.com/sol/hpack + +name: hs-server +version: 0.1.0.0 +description: Please see README.md +author: mtgmonkey +maintainer: mtgmonkey +copyright: 2025 mtgmonkey +license: BSD-3-Clause +license-file: LICENSE +build-type: Simple +extra-source-files: + README.md + CHANGELOG.md + +library + other-modules: + Paths_hs_server + autogen-modules: + Paths_hs_server + hs-source-dirs: + src + ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints + build-depends: + base >=4.19.2 && <4.20 + , blaze-html >=0.9.2 && <0.10 + , blaze-markup >=0.8.3 && <0.9 + , directory >=1.3.8 && <1.4 + , http-types >=0.12.4 && <0.13 + , scotty ==0.22.* + , text >=2.1.1 && <2.2 + , warp >=3.4.7 && <3.5 + default-language: Haskell2010 + +executable hs-server-exe + main-is: Main.hs + other-modules: + Paths_hs_server + autogen-modules: + Paths_hs_server + hs-source-dirs: + app + ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N + build-depends: + base >=4.19.2 && <4.20 + , blaze-html >=0.9.2 && <0.10 + , blaze-markup >=0.8.3 && <0.9 + , directory >=1.3.8 && <1.4 + , hs-server + , http-types >=0.12.4 && <0.13 + , scotty ==0.22.* + , text >=2.1.1 && <2.2 + , warp >=3.4.7 && <3.5 + default-language: Haskell2010 + +test-suite hs-server-test + type: exitcode-stdio-1.0 + main-is: Spec.hs + other-modules: + Paths_hs_server + autogen-modules: + Paths_hs_server + hs-source-dirs: + test + ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wmissing-export-lists -Wmissing-home-modules -Wpartial-fields -Wredundant-constraints -threaded -rtsopts -with-rtsopts=-N + build-depends: + base >=4.19.2 && <4.20 + , blaze-html >=0.9.2 && <0.10 + , blaze-markup >=0.8.3 && <0.9 + , directory >=1.3.8 && <1.4 + , hs-server + , http-types >=0.12.4 && <0.13 + , scotty ==0.22.* + , text >=2.1.1 && <2.2 + , warp >=3.4.7 && <3.5 + default-language: Haskell2010 diff --git a/backend/package.yaml b/backend/package.yaml new file mode 100644 index 0000000..14d004e --- /dev/null +++ b/backend/package.yaml @@ -0,0 +1,65 @@ +name: hs-server +version: 0.1.0.0 +license: BSD-3-Clause +author: "mtgmonkey" +maintainer: "mtgmonkey" +copyright: "2025 mtgmonkey" + +extra-source-files: +- README.md +- CHANGELOG.md + +# Metadata used when publishing your package +# synopsis: Short description of your package +# category: Web + +# To avoid duplicated efforts in documentation and dealing with the +# complications of embedding Haddock markup inside cabal files, it is +# common to point users to the README.md file. +description: Please see README.md + +dependencies: +- base >= 4.19.2 && < 4.20 +- blaze-html >= 0.9.2 && < 0.10 +- blaze-markup >= 0.8.3 && < 0.9 +- directory >= 1.3.8 && < 1.4 +- http-types >= 0.12.4 && < 0.13 +- scotty >= 0.22 && < 0.23 +- text >= 2.1.1 && < 2.2 +- warp >= 3.4.7 && < 3.5 + +ghc-options: +- -Wall +- -Wcompat +- -Widentities +- -Wincomplete-record-updates +- -Wincomplete-uni-patterns +- -Wmissing-export-lists +- -Wmissing-home-modules +- -Wpartial-fields +- -Wredundant-constraints + +library: + source-dirs: src + +executables: + hs-server-exe: + main: Main.hs + source-dirs: app + ghc-options: + - -threaded + - -rtsopts + - -with-rtsopts=-N + dependencies: + - hs-server + +tests: + hs-server-test: + main: Spec.hs + source-dirs: test + ghc-options: + - -threaded + - -rtsopts + - -with-rtsopts=-N + dependencies: + - hs-server diff --git a/backend/stack.yaml b/backend/stack.yaml new file mode 100644 index 0000000..e4f847c --- /dev/null +++ b/backend/stack.yaml @@ -0,0 +1,74 @@ +# This file was automatically generated by 'stack init' +# +# Some commonly used options have been documented as comments in this file. +# For advanced use and comprehensive documentation of the format, please see: +# https://docs.haskellstack.org/en/stable/yaml_configuration/ + +# A 'specific' Stackage snapshot or a compiler version. +# A snapshot resolver dictates the compiler version and the set of packages +# to be used for project dependencies. For example: +# +# snapshot: lts-22.28 +# snapshot: nightly-2024-07-05 +# snapshot: ghc-9.6.6 +# +# The location of a snapshot can be provided as a file or url. Stack assumes +# a snapshot provided as a file might change, whereas a url resource does not. +# +# snapshot: ./custom-snapshot.yaml +# snapshot: https://example.com/snapshots/2024-01-01.yaml +snapshot: + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/23/19.yaml + +# User packages to be built. +# Various formats can be used as shown in the example below. +# +# packages: +# - some-directory +# - https://example.com/foo/bar/baz-0.0.2.tar.gz +# subdirs: +# - auto-update +# - wai +# +# packages is represented in package.yaml +packages: +- . + +nix: + enable: true + packages: [zlib] + +# Dependency packages to be pulled from upstream that are not in the snapshot. +# These entries can reference officially published versions as well as +# forks / in-progress versions pinned to a git hash. For example: +# +# extra-deps: +# - acme-missiles-0.3 +# - git: https://github.com/commercialhaskell/stack.git +# commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a +# +# extra-deps: [] + +# Override default flag values for project packages and extra-deps +# flags: {} + +# Extra package databases containing global packages +# extra-package-dbs: [] + +# Control whether we use the GHC we find on the path +# system-ghc: true +# +# Require a specific version of Stack, using version ranges +# require-stack-version: -any # Default +# require-stack-version: ">=3.1" +# +# Override the architecture used by Stack, especially useful on Windows +# arch: i386 +# arch: x86_64 +# +# Extra directories used by Stack for building +# extra-include-dirs: [/path/to/dir] +# extra-lib-dirs: [/path/to/dir] +# +# Allow a newer minor version of GHC than the snapshot specifies +# compiler-check: newer-minor diff --git a/backend/stack.yaml.lock b/backend/stack.yaml.lock new file mode 100644 index 0000000..e0ca7a4 --- /dev/null +++ b/backend/stack.yaml.lock @@ -0,0 +1,13 @@ +# This file was autogenerated by Stack. +# You should not edit this file by hand. +# For more information, please see the documentation at: +# https://docs.haskellstack.org/en/stable/lock_files + +packages: [] +snapshots: +- completed: + sha256: 296a7960c37efa382432ab497161a092684191815eb92a608c5d6ea5f894ace3 + size: 683835 + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/23/19.yaml + original: + url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/23/19.yaml diff --git a/frontend/elm-stuff/0.19.1/Main.elmi b/frontend/elm-stuff/0.19.1/Main.elmi new file mode 100644 index 0000000000000000000000000000000000000000..e68f562dd0c778222435f4be5340851fe90e04c8 GIT binary patch literal 48600 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 MDhLK6#03lt0K&_VI{*Lx literal 0 HcmV?d00001 diff --git a/frontend/elm-stuff/0.19.1/Post.elmo b/frontend/elm-stuff/0.19.1/Post.elmo new file mode 100644 index 0000000000000000000000000000000000000000..4dd5188a469cb8853406d2ece30e45f85c3e752c GIT binary patch literal 1025 zcmZR80%o?v(vpn)BKCr!{H)aE5|)7cVhF*&3sb^cl39|I3R9SzpI4HaS0WCRg^II6 zX?CbQE1Ut=%?dFDs)+%n7}-|#l+@(>l++>yJ~rmmoLrWy;`}^ruj2eXJr}S9OKxI; zG1LGSHf$z<9gjmdYg%S%P6|{z6BCpHaTRv^*osSvGV{_&G7su1>KOu3bqOonGA3vppGQT45%K2A+QJ_$rP9-r~?^TKw-(2om!Nan#1Cg tSzN-Xf+WHkT9TPl3=u*~^(X-aQjRHy5)81c47HRA%@It{;DJap0RU>^5DNeR literal 0 HcmV?d00001 diff --git a/frontend/elm-stuff/0.19.1/d.dat b/frontend/elm-stuff/0.19.1/d.dat new file mode 100644 index 0000000000000000000000000000000000000000..75fb52280180bc0a645d47ca32d5ef903a78f460 GIT binary patch literal 1905 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 z zSm8K2paL#}5CKlJF=CF~#0v0iE7(F1fj9Zmar^|YJBC{A&kGCY(az=oPKa>kCRTWi zHp4)2Waz;@;(n3DGMZ##&MBXeRD6BDuQ1Ew3xG*&!>MAapjk(~B z|DjeTfNI|G%oN1BBBX8{{?H%o62dpRAW|L8T1b4knR%lPQgEGtxafw7X2H#oo0&J- zAcX`s1MPyD7Z%K;4blN^kY?tMHb^0feULXuGxJ6pqzp(`ozb>v!fapSZxW3*NRjV* zB(Ea?s(D8nq~OA6P?tqqxfng;Vbw8W&dY~QlMz@)#|d7J8d8ZE(I&iv6-f_bIW6RV zO3+P}!zv{4dj=eMjlLE^73+8C!paL9el9p@XSLx zz>8p(5P~QtB0_{R!3LwM9L*rO7yUC8z|XwLTgx&9z||qjPns>zWne8Jx{zl@sSgm2 zqjlb7V2AE40hbI!lq#beR*;sLqTE6Z+wFvC$U=66K}cM>7&t)79*Yt);jL`EDVQT5 zzo-ORH6p3du0Ca8Ehx&&BhG=8wJx~}it@pS`DK<7w=RY|08;}ZNNBu<2ev~9ns<<* z7_wd(v;hYBhI51{-Z-Y~h9vf))MO(ABLk=(@V9>1gHRPCLYj7kD9QvT)RlOHZ*=qt zsW(Grp~M1O{00qdf(;w~VDy!8V4djAOxk9~;nv7xD^4y-Mcl}XH^oy{=5oT<;De)$ zh&F&gFvhBVuvYXKr}1jf;TGjA#o)d>I4JR#!z{r_DiMV+jW;W>6&IwYBCeODVUlDi zE=o^=gad&=N0#6qcPE%iL`cxCI%0!t2!UEjxNHnX-#-G@iJntv8*{@gqp+5buG9e~ zqd`3}0zMQBJgNOn4ZS!52Wq}NDuaaWgUB|bENEqb+YdRbfU34KU=G~EgMcv+ZZnpVA*woqkueeD7zBjBF^)l? zs@)7|M;jpQMceO4U0abh^J5Ef4vgV7hxYp3yQj-#Nvju{T5*>O_L+~hDK~@lD7Gfkuee5 zem;c%X`MK+%$Z;d1#A;0RE>W|#zf4$f{0+i7}}t!puqMDQs+sj&>o>$e4&UQ-$y{%_<-U)afULjWiEr)afK_ z!A#2{7SzT;pHM+~o^}z;fNk0WVKI%16V&+ygtgG=4C)pl=u-v=>u8snvCIGHMMl^(5Uy4=a!(i9-NtfoE7|}E?nBR6(2q}tnu&Q5 zJ46ERc0^wQF+xOmBt|GWFSDQ^wZtVgIVTZ(Y9nk*8Y2^KIf&H^44k6ikst7CDNGY! zs^Cr}>>MtHd64EzP-zZqHXCLP6VzNLB7Kb7{X%M)5vd<7>X4ks13h`E7|E4z*TGzg zE8UQ1J1lkZxa237=BDPAAX&`}wUQM^G0)bk_hh?UggO-~>UCjoisboBlbABo4JQZ;AhZ@ZerKx0v zAUJ>^Cp3dgy<({O98emsJvh(mCNdf0h&8Cy44e#*Az>IFO0)Ah78IoBr34h^7o--I zz>m>^O2b`@rC`BfA)jkSNormS+I286gW#E$pn(!WsRgNt;A_ExGjj`a;1|pg86If) z1mb&cztrLqXn_p%BHTqVK0%iW!Tjc&pPQ7KmspZtM4p>qMU7y1W=TdsacXHwzH3e@ zsLX-71y-?)O12|?ErBdFUWP?sg-F( ziMgq;e1=gX;VOo?9SaI_D#1koOfR{`4c24^4Ka2Gq^b-m2BR2pOTl8DnP6;lz)~Vv zQ9-J1d|rj+Zw9EpiZfDE;cN0>DTakTIRkWna0&9In2-@w2#G7c*fVoMHA682)+&s; zB_~n>W#GyKrLKa+>KUY* zJ7}8FI9*7O7Bs5m$T2Zk8_}pPMvBm(-G=5wuMsh7HCR#1#GQiFAH{iz7YnEWL^=Bx zQY5fJCT)YuyBL^Y-f*PO5hFV03gC$w~d)ogUAdf;6xsMQQy49K++OcX-1 za5(1VpsYTDh%?}IFqXv;sCi)kCr>#+=XfIf2<8)bq9quukn$L`%@dBu>zNdGMI7SlZcV2p;}-z5%L)$6KbChsvSl#;+KUgBWwxI?l#l} z7{$U1zDpC<@qh_KX@Z{O^29YVKv1hNq-%@KdRVj&G(!-6IVqY4NKbF@-V@a8Fp3eE z1k4J;-8wPU0gqtF@$RYEiZm92#R8Vm3W9oYH~?w!9;CkpAqg6XHHk7ZU~w5N5TP^+ zzhg>PVsa|zHp--&%sj*;_D}^diqAbYFSRH!CpZ&X87w)#R57qRXJqEUHnzhO4P2JX zCABy?H7_L*zMBjdWpE`>1`8vu5P~XzQp_TtstA_UVDSi*gi$be5H8_)kWIsu8VJS& z&Ri}TnwMFYT2!2vgTuA3u!PgpwVw}C1;8wah7CMuV0>KNYU(-$Y8&(L8ooho=b=|i zj0`BL3mOD4iV?3QR2AV$2C9%n0M<`|wZfqi$oml?Jq&0^16QjQo;4&GvIOb$1x+nQUGIKNY z(%nk)l0l(Mnj`rU!Ge0MC{nFMeh>(tnNFvWN4IwH2EPy@fCBO%xr0#RBrSf0F)g4| zBw(?5@WullBA9|Rt6*zGs8sYIwWolYT-Ztai=esCd7v)~7tPXFKsTRV7zA6h2TqQwL4 z7eS1sQ^2FxIe0@IS}=l}fz(a#u=oTuW9by;$W{*CAcvNS;2@_#IS*~EB8;a~;A7Z3 zG-3c;DpEJ)BZmao_yLFku)Tvf1~?&&k&yfX>IOZu$r_ShK&LQASU7kCn-3n?G$?MM zjn*aWQQ0^r+|jqHh9CBGbz6!I3qCybg>jPSyN@X4j0^9I)yaC!oeHZT*-+=sU_ex zA2h6~G#kQ=Fqlrkjb!8C4R4m@oJ=ZrmRLbX(kYC=b`9RpK!Z*mEX~bxPo&#u7ThC)H?X0Bf^@hQ)fyh)i~};5PN^H3RY5im-tgv!qzRBC zY0%meKr@|AA&+kDkO+QoubR3=I#M`*O{ahGgRLFB!4J)%U{_K%=%G~`*kn2dJF=C7 zH^|u`MFN$VqH;h@rBhJDtQ)++%$;1Cl$q?5T9rw7lL791SXAFBhPG{sB{i`azVC#H z75He{*+AMoVW+HOJJy}RwlPkK0sf`%6U<0=1UtwKicDZj%giYu98E+x4QcBiJH${r zWeBKkgEv30q~)YmP`8L@1sO@F@CDm7cte*H6cnHxlT*txylsiAolRQ9jvv)< zI)yr#t%Eo0xxv9xQj}VPxFeW40ndYEGMz#l*~-Bi->OavXp5u935l9`uI z<(8lrRy*hv4cILoyb;0$3as!{(As?Jmi6Gw1u>XTL62nP;0zsosBMEcj9GG0)2Q4sX9XEar|<>aHF!gpHz&2EB(*5GATb&FFjuN9*yKYo zn@-`4YU$t&c&?nxyi^Yw6d&9OgXt9HNHz}M@MZ%AOJWhMnN37j9(@igH?b%^6F!GU zovtc7#85g#6x6oC8%aEn;GoGtV8}+(DZF`+?Hs(J&INHMXlEQOdr&8Jb0Z9PYb3H0lO8H2;82rc;O`TRC`xoD-4~slU+~ZZ4gI8=6-`@(TuUV6)^V7E^g1 zjum7ioq`x_*We9Z9#Bxw<~UwnWTWX6+9-Ao-caWN1q}`6U=FCm3 zphdrk3vMo*!Wv=W;0Qr2M?(e(!9t<(>RwI&Ibt^m(1dl z#Jptq#slhvJ3p%7bP9PiTL*90b3uZK`n&MC5eCyK%#myyyx|QkVS@5Y5=*F@(xJH> zVleo76;T+I)ydNy1^UFywCul#VQj% z6tn3R4$Hb=I|py5 zb3ucK>dQ@FIf#A->m%7Xc*C2ui26II*uZAeDP2P>8@vI`UR;t|;EK5Pob=VRoFEf| zOA?FVOZiDRgS{j%iTX=0IH0D|DXL-C4c^G+DoL#<@yts}rS=woZiK;f3Tz}B2YGnY z;=pXM?;!@$GrS=-4&Lx)E}`~yH!LM|yXXdF)!+?U&XS_UyyCR{A}ZhF%>_4?P6-)d z;ouEyet4kx7iCg?XNmxt>2wNsbZZB1@I#VFCg>yuc*lwZehwdtPiAomm>{B^gLE1k zD`!zjT53*8ZekvLYEG_ha&a-Ub8#_ia7kqje0Go#i*8s1%%HLrL%waB(Pu(M!!}|3N8m_ zus9=bf|7=c!6^=qB+?Q}8Mq9T!HOKlvQR-d#SJ;53iToG2g9D@jbb2n7uK}gu6c0C`1DR zD$N2aTcB(cC=I80eXyKaV+xmsGPr!u4_GmS%D^c$U*sb_%;Dlt1`k9Ur7W?4%E2iv zh$1BSTEgX^3~q=La1jUkqZ;sHsbH7RW2vQP#G zND)%Xw1bMnDNbLst(W$2DJX-(7j?g&15_MNar(lxqd|onp){Q0@P%%of{HjnX*k8_ zk8MklGh80ZV1umOg7RFTG@RmrNIN2L+;D}iVLC)sXTXw%Rw1X z>mW<5p<*6T8cwnMqbxf1giAmfto}tQ@aqMU53zbL7KLK!QD1#fS3Mm5xLZ#po z4^$0u4hn+HLK$38MTjgE43&XXtjGq0z=fd<_7Ifm#Zag)oZ<>WpBD>*%Rw1nC6M_K zs7N@JhEvQ4_eH=3p$yItwBhqes05tihpRvt^NoTlfHHW)unhb~LnYx9R~Y&zRSaAX z%3wuK0@~F)9!TmxMCdqL90>@la88DuEI0xFz%s5eJJa(iJ4=+Sx#bJ^XYh zjD8mzNH6^U5p<&&*g?{Wn?W!-S)3qw&pd<*jD8kpa7k(b^7J-FCyO1V0x^Y-(Y4}s z#<&Lt)}Mme#)9iqHu$JB8>s1%T+Hg0lb={Znrdi>axfqbMx%!#Ba$3cJ&b}WWrPJT z3uhv@OP!gY$3V=5FGxLb)|Awo#7YJx#ArIJZ(?OqDul%0Esm7ZBJi=s42(Ebu$5%y zf>u{D<1iO<X!OWbKpAKa+GA1JLYYQ$Z%FIh= zgHQ~NjERhli5w;QP(DNtNDCulB9cEL(okJ2CHX1&5S1VUaGDM>2C5950(pQvsVKj^ zIJHOs?1%K!B0blNg2cR(d`4ths7@Aks3epRqu3bHOJR6Q!R36;fTGOY%#zG9*n9_E z2h>pH2uATZM{sIkX)0pFAS_;B8JZbvB~E{_2d5T>R2HOyRk0-J7o|e;6N^)Rehwnl zfTwl91Xv|*^PoY(<&v2UnkGstf^9c~ISA%JCa^(7SqUiw2-*oYkf16CwxHDH{Gt?S zz`_a|0?y(D#Xs1wEFhnO39x-&F=!%$Qebg{?%;OL&nqq|DorkdZ?c6Ips=9Am22T{ zfm#Tq!1hAi11S?Jj6-M$u`w|F7Q=EbRE&X{EhIlZ9Wgxz6Nk~P$Q2+gF~j`@b}7yf z;s{Dj$t+4u#w^X5J@X)fIQ4>@%IcPxngfepc)UVghMeqBG7^3_fy{-Pz{~)5AXEfK zF|+vP=fQF?Ob|{pd#A$k0xUq_a;#yAIi)b2Fek%hp$uk5SZ;+1z$j*R(9COaY9UMj zon{M8EkQ_Q*v{ctRFqhWP=MP3FoQuU5Hk)uGK)*{iz=~|m5iM3sU<MNK%5E|wlGrU#cKmXyMV5}_f_z{Ca;&P;~!(P=i{{4zw&f@KhNRZNU*K8cn2 zh${!73Ya)xohzsSjKW@|qxuBN(cnTBxr)NuZ0GXGFUqXS&nrpHf!YUiH%+aD+Qo!i z?}1YeR6>ZwFW(<=-!@bfMzMz$rxqb9Oqh$|G}t8mkn+^TY-n2vp%|8q;flfGg;~%- zHG(Q7K@^ifB`VY*uplDAEH+R9oeQgmU@ar4c?=9JUZuG(Z^N1@sHP*wEU0Ma3eL$) zNi9Os2kQgk*T>>tkP2J61M3mOoxv0ea|Fg@8jDMQIZPkM{27~PZb3eLEjGr~8JlYb zk~GG&8Cz&UPJSY+RRNnV!{!Z?Rt1-TS!z*EVkIJuVH0SmS~24osu2{&T*2ju1t|Fv zV}gwnS}?%gX13SpIh#?1zDM4re2r;k)WMSEl z6AfE1q9U((he@P;1NIC96}o;fCeLuW&+M|B(u!` zODeG1f`J($kHVw|V-{ugMXIHcG6u}e96YIzF&BtBNbv&8bBLr1tpj0WFkCQA#pw)? zGKHWP_6$gWg@Iu-cM$I144KXXTMncJ%MLCZVW|MEu!hv89J#3_i7AOCi3}`=0UmHG zD5nHUp(G7KL<=3Nk=3=R2tIy;s2Z8rp&d4qN(`lCz)?_?pOllDTg-s9OGm(7?f{5x z(AXWUJb;(aOe}ecpk^F603ekEDOQ8E!NLvG%j{6A(XtJuLJnVOAYnR?wWP8jwU`05 zuZ(E|E696@o(`;pU}jIu$xJK;8Gwj3@Q@ss0J|THw+RF(t0TxzOt-Qm7J)7dMD&lr zT}d#3%O;kR%z{*uMhZ&!GZ0Q4Y^8ab`FX_*Ow{yXD9B7Ic`z}(n1PWL$B`0#3=AA) zsYS)$5I`-QG1CaBX9`sb^%^XhfP2umGav&4dp@Lb&H!mf!IC_pj)AtpAx$~90!WLI z4IJw*#c1UUq*cjU3_jQl5O=gv>*j>CK^)h$N*6T)xZL!5rN7R zkds&f+J&U&oSVYzoSOnsk37DB8Ft_hg1HYGdW?wt4Hbb<92{N*ji%nBubx#7-};KX8C9 z*hDB)6fyD#ZeL0TXmW0bg8BC0jW-gQqqge3HlXE*Irl9p4VSa_vgt~GgxmV8Vl$e4t)d5Q( z@X!ON2w1k^hmUClrGh3v*dP>lP-byL|v6v$)EUbwsDXA&Q>k+{N z9$*3zrQo$70#KTT&pE%SsI;I2mUy7z=oDWVq!9@TD)fmMf>D6Wd3@02 zB&f#1jf1)ZXUyUGJWZM|a zSkv-zQebTyX2v9t!xgVPW8^v#l;S_!L^!PyCq z35a+ASBGGNkujS&Hxaf>23#;OX2Vi;A}Cd3^$EyDi8y7F*m6^Ili+)`&_bBhT7d>`%YoL9qSys0#TcPdFdCyANd#wOm^6&WP?p31lY-IM10E&uB@&?q z(_qem#G(@9la$cHlZquF(%dGv8UYi?VaSN1yhib683P-n9frMtLNRU_kR3Ruj=;g9tT5C}Ar_nQub2qYO0(A}pgPg#X1{S+vEnS!!U^Ej0)K*w?7cRjZ1nMfmxTrL% zQ%+(s?4D|zMq^08o1xsUIk|dX#n7eNu<=!>9gOTy85o~25ynE3feIsryg-FGL=e82 z4$|07%gjk-am&m}1$VbuKwOAA21c+jlmnx%3c@5|G$Y)9V1I$ksuAp^ zjFQ|O7LStL9EgKKT&Q$1B2GZ-`j9d;xZwaMz@r8%AWdL1I2}t$iZYW*;Wu@G$3`Fo zxPap>gUp@krsU@$&7&gpfz=XY71%zgOTn5T1U_3>KzSCd49(dTnZ=Trlmu(igAFIf z^#~7><^_a4qOGFHbJPqd_QaHwqSRto;Y_p#5Plv>VFfyv5!u_b|*R*V)@gfk#pa$;Ut;%Ez?xp9MIX^u=%~wz`_?; zpzVD*nTX|_qr;xKM_rgwVC#iO(-fXG#hj8lT2K+woJvV8NzBX{ZF&+BR?I1Bu<6Fp zyoWdMWy0oiN5ctEI5EK&wv7f8-e7{Q7#j^He8H3o+ZH<-On8Ec6|_KZvZ`mTxpr5xqe1ZQU0(lXOai$*7piO7a*Y5Dmj@Fl&YnGjDV zWC0znF*=M#co>f<19myiXnMkvo|rOV7X*z46W(BgU6eE$On8F{c4gFPFyRd**qvFU z!Gt%MVE2ZN1{0oOV#`QPL^|(kbY=n1%tFTKa%v*l95@Bx?L=J;q4 zg{O#O&dfzQPGfZ09rk5+teJTQ@LLZ?Qxx75l{Y$}M?@jToSif}5==xmvF0QujZUW% zvyhA}CpA4aZ!}R6k*Jt*MjKK@1QTm+VrCxfdeYHa4_~c^I8K9!F%jI;1Kl$T2{VEl zDj5@rn7Uw0BxnxEULs5aDPze^EP`+J1__L|{IIwDSaK6fGQb@P2Iv{v;O)kc-Tk1m z9!B>>r-G9?OKxgj>1aR^o&ezh1yp9q=#mLy8a1rBsiPB+phFu7PHQvgC62CqBcf5m zl9!LRa~$a;ACvvz(9C_fvIS;EGMFbVuBw+J=%rAGqlZ8RGL&dn(YW@JI2v@Zz6IXOL1cEXz@fu zK(T|4tIvcVZarE?;VGloioqxCj+Rn{ODWdk+(h`@WTS}+Z=%XCElM8UCq_hB#Zp|5 zIC?w*5dp9Xev&)5iB4#f(f*70xCIxEioD6Dinn6Y$zKkXyXFb#GK4@)LAF`I)FJ5blW&MJ%JMv z1AVRMOvHBaDo#h>l%P%Q@FbR&@X-qutAZVLj-&d)ipe4ze75K>;1@=TFYh zD@n~ONlnSboCm{j2MtRvZm>ftNgoJslJd16d@b6y+CG<>#TUjzfwHIs^oJYF=_lWx+r?fjKRI zATtE!nd5Yh0noHnYSBQJ%WN5`nduoghXf!c0_~bAY#Es;DXBO+p%Ck7STV9>6s4vO zWH|t`KPM4wMI(JvAyei+7RRia#fY=MbcI+IT?H}L- z$bxZyB)$Egk30TpUIcOECgx?PrJ~)SN#77)Mr1*P$FJcS|0Hk*8$uT&#zAZdIpmTU zTo&LxrvRZ3td==9u>#ouIuF=!<|bC;q~@igE!jbeNJvtmU1iFeo0^h|x&jT!b~>~u z*>Y1$GV%wqHet@q#MzjjLjZ8*X66lS8sNw+%_+$&$idmFha^H;HmUN^&km<=BIL@; zFH6kH1dTV~Dh+5J2J8iiB_*jv1DOEk)MNpg9Ck216x6UG5P^` z^mPGyK~d@e4|#Ba8n~%NB{-*0P>M!qy_r>85YHTv~dDQQEFmJeqIjFFrs;(!CZuPPB(qiDMwLiVQFU308Vpp6s4A>78MVm z3s{Qs%W;mzKoS7$ns4kN%Lj1UhP^m3FC{5|AluNa#mV^tIv~jb*$6*?NszTTBXK~3 zfTcLIia_g;c6orSxF9tr2Rz?CV2wBC;-X|+meZjkVk<66PRSog7qAx>B@ghB5NmNs zBHHmnNVOrYOJbJdlGK455M(Vbsl?rbLrH_s##(ZIQ7S#wjB%7CCS~TOq~fe3XdN|d zC5c7pXxCaJr3{p?p-n@PwIs8I$jG6U11bwrQE!!?ZwRoJ7N;Tx48db>bWVn>WuU&u z02b1$<(Vl1H_*pYUX(bHB zu@Rk7msC(^lpR79F+ttH%$}QCT%4Gm3SAn;R{-iu4}ilxY*UvXq6ayc50VUyeG+OG7((pmw_Ep$}-% z!BU^p#4^-gAq_3%g8I}S?aD|RS_z9#|FTrN6;+&2Z-%1QUtj< zS}1^85BsBL7BVX<7O;bnG$R%1G^(iu(HaUv)+4--{u8*0gpYC&XdGYN!~;8_7^ zWlOv{DCIOvH#!Y(PI7^plisP7sVNwn+L(vVeKa_?CZIJzkaq-vlRAXJx6KY|TOc(J z8)Vn748Z^#T>IIFUI3z(2{1mqY~Tc!4L*rgl^8_>2TKk}7@`GvT@y942Q)uNKYMTxAk}1?nY%nh|regIJ10y5)WItu~5+h?GC;@}w3FI+q zn-BJ!8Ps#^2+uL5;q)E@BV!sZ;|}CSYTE(!ra9D`9LU~eOvmd{21dqodU%%F_JBQX z0rfB^s)rdf2zr@;kuif_-ln=;P+y}{oJA#RsW~aRiFxd)Ik~#Y#l?{E)?m=AQ3?a5 zG}M4}M%2Zj;07i7MZB20kqt*IxrLeuX_|tffsq4Kt6*4WQAufHj!S;79>jGB1Hd|= zJqFP975E-tFu{sx5V9L^6+@W1Fs(vYbRoS0XZh`Oz0G}LJw>g>sh z1&}3u;5H1nLK$tr;2AfhPJa~hsKU{tPV1!30$LFZPUXXglyngPhhu z&YqH5l9-8hR`O`D(>mChQ_@hEVvhzn?SnkCY_!El*A^pF%4i#%zN6_(DX3dZMvE0% z7b{Gus2gcVL!8zj&YGH=1m8L{IQVi*l`T8BALT2X#(Xdd{eDJ%nx z++~oZ`?@Llxm<{4{B&Niz?5M)+GnP3pE(1z`EaypOP{7KQwD6mv<;B*_XhY zlbAHRxR1`Gw`@77>8WT}n~oOfv@Xz@az-2I^exX>a}zW3P;X=yP3E*t=J@Zd#lHgt zvrYkBUyG>+*Is?bM7k_`VaZJ_LOnr#G+EI)S+V3MqFwAU8s@YQ^VGc3(Y`ia``R42 zsd=TDC8MiH>D(q}%}qtWzG1Y0p>+YnoR>Jd_kzA{VoHzY$83y^o{0%QW)(~jb=E4P zWMj)u%1TWh-I_t)EI`!l38U#8vbY*_j6ZS{5WH%ExHE+j>6|0Kpk(xjfSlA6M3B&> zqso>)de+WBgnDU70ooN=qisoAwi$c{Nd&F5TPtQSy}T2PdqoC?=KM(81e zA8H+B(swlWK=}hP`pjHhI(qjVeak5J;?msQ#G=s=9Qp=3bMffy4v2hDm#TraBr$39 z)?T^?dQyJMXyHQN!iA}1bki+;L!6}~wE}hGiJdt$Cl|cYnJu`aC^Ih|O3|gL;{Z7) zu_!eWxwT1b(|C0CF?iuIm>_ZWF>49vP}R{ur|V=G)95ZXx>xF;1HeX;IbD-EOG#$# z=ukC%t9Aa8e82p>h;>=}u3U2d48FsF~jKwEwFz_ZLLdX6O}MVU#ZC8@;> zm@1)WM6e|$C#M!rWh4>dO{n2u-$Dp-!ig8+H0O-OBJ|72aP@=;^fIXJLQaqii;J^U zQRf>Fu44f?9!${LWo(IzZw>At4 zw{d{nR*;j3t6X6lxL{*X&PYwphOaRL7w^a^Zs1(TlAMV=SVN>cMmQd2T97pY)4a3G3jZmPVm`2M52OKGhC8-!QXGmEJrSPP)iQ-m#|>PNairvz=jG%l;&j?TrZmo!qQvxcP{<9+ z!aJoXzo05V4`;VzAcKxQH7~iOvS3iUjX5oUP-auiTaJ;k=s-p$c~=1=TF2o26`jjs zcFPePK*l9Yb|%_IIY?nP zpbi_Xsh=eWeMD%`gjhcAG&X?AKQ}QiGc6Tu6m5`%86}swAlf0wH3%bFyGZHWh+)o6 ztUz`&@)-3%W_r%t#EP8MymYiR2;`}^4*SzHXlvLKR#GKMpI=7hE3rdsl zl`kj`r?cBQic%9(^7C?VhU&l-e#}K^m){POOu|u=T3DJ{G#FQEa1^DMr4|(rMyIh9 z<(K0e_=F^~0ce@CgIqNj*AcK6C+4Lj;?Xb7BLQGr5WjQgd>^YvKl9yPUbWC>fWl2C_D1D=tb-$sd$XV=pdB9<0N%ti>gX zXs691wKWDT3$PTIqz=k~f7W8q{bxjF0BAcrIlm|sx+)$@(Yu{nl9-g4my(LJLLIPJ zW-Cc7N>9Z(@j8&j32RAa3GTt9fpuABK`QF)^+-8(AYH~*TAYe!Dsdp4###pI{1TOI z>6|-R%QI63;kZ3Zc@geO;em`vXdGftnA_2WkTXKiMT3if-V|bvBam_=Y zxEM&+_@pM5!3tuqJ0LX-o%1>uG;I9QZnXuwh|X?-B^v)Sw5hLwa119jU_w#*umj-~ zj{Lmf(xlu>)Lzy=xI_T8`Qwk8w~^WlC>jEMy7 zL_Tu_oC_fYQO9y19Xx_I4W$hpfSk`iAlzkp%s@5jEpIRFg{_URV*xtMd^m% z0tCb|0&w*xJNF-qk2LcX3v~ZD40vktO6B(NuMnqf;k+XzHLR>(T zG6sb?7$JZ>)Zmj?Rf&6~ft>}^X@!~z8)cwhN1k3I2CN`oVs^_x9tCxq2oxt&YGr{2 zBIwo4274G=Hx}k)`t=l{-lm&{V6S8E_aS?peqAf10HB+t;6T9D3qlVD`gJtWf`V=q zgM$NiZvb0>(67ObB~a*QIXGaN+m7|QCKSecXxA(8Y!e8TFMlb=|^4!+(ewTOX@pf;2M zW-cwtVZa&T(BNiZ0>x}F+BMw}Nk&%RN`wqVjDZ0bFSt#H_yZoU905i7=|!o<#o&;I z8pFuI5`b834;5r!#3l%ngwc$Qa1&udP@0K7I5jT?u^|~Mj7W=cx3d(d=9OSsD+bEk zkex8dAM8GKmVHVULf{}{Q0kwjG ziGd?1wKzWqvA%8co!&Je-4X%m{UN*y&zzS!WQYKb#sf9>szNsaNDTyVpkU%6> z7I=nc<^<~j#RZE?W^xIbK#CufEQCv(s~B8ofR}(`Pbg3oA)sqyapn|o4#hnK#|VxM zZuk6rXdML$2UvYGqQU{1E?A*70}BUwY{P z#S9DxPl59un1DD4lqsQgC6t2r5G2kXP?VpXT3pQJ32THP7vJ#U;e;ylOkpW5O)6%< zT7N@|T)6ik)f_lP8Nh`D`f7HBC^Tpl*c0D3bzHM4BQ9;6S(4yQYSGo zCbA^u!$-^s7>DEvNM#9b0`jDQw<16abZEqZ`lJx=;)wv9B{CxAvIV6Um*$i}DTw{( zCPI2UjEsrg5QiWy@FLC~kkpT1F0w%k(CP=F2>FN$G9Ap4l8NY>z+)a^1!QvvB2g1a zvItjz^E#M-1Q{qXL328kVq{F@O$GH5L-J7~4wl)`9RUesT&A(4C1%1pmY^WVrH){d zU`@+R&4Cp>_)H>@QW+TugcWGyI1SY5hbCA8<{^0qlJX&423C|!j*N-ODH@^<+?XZk zZGsAzGeOO0h+FY1#&9Xf1-#j*mEhDIkeG=$5SQ{42XP80b%9GM2!Z4RNYX+iIR@nE z0#NiaFhh($Pi{n~c~Aj{e9R+l{KN=aKMCKQ#>AKi+uR3QUj}7U>Jf-BEV+pVC=(43 zVQ`%XnrdK#@(J2TAVD)SCJ`_KViCwaX!8IN3Al?u18Y=t6+w3=6YXw{L3}JO2Mr0* z)%67ZmqN7vu#C^+@F8f>bCCIxU^t`_9S&Fr=JA9CX!v)?g$BX!N+UYFaE#Xz2rSqQ{P%nisnK6Yil`)MmoiT%mkY!+G%ovfOOECO1hzft!T+sL~ zGy*^^3j(?bwGScMK`k4|m@$L|wKnofbC8?5#I!UyKzfib5us))1>!OY32N2m=cW3? zPs)c|1o8=_c?R0w0r4FrjV?}*HATMpMX(_V)J73BR#9!GdSi*LxTFX%LJYMNm#=U& zOWBJ{lao_HqsQRX14=u@#3?LKgEbMbn&SQ?#1aN3c(WKP0CFsZ$q18zaB-42CI=Z< zSly6%UNG(OAtjuFhjknW(phBnL_PrqY9uxj5j`b{HRv%2HO?O?VZ)4p4S8c7e!^!O zyIW#rPANR~VvKl0^n%hawD$s~h>1#QFA(7ks+IKYOM85kjlWI}~8yWd#!B8JJ3 z58FhDLe1jF7{3Bd#zQ=Y!)=gq0px4Q*c60hWK6`T3uOQa>UWS4$hUjq)sHj^!o--( zSO)4^WJ7d-%|Yo!f+Wizk~lnpZ5V`+F`JPQuQs++@R6m^u!F?|*nUL%g!&G<#Slk< zb)dMI6=j?OY6Msr#9+u!0z@}nEF8-e0;i5u0a6JUJ-~-Xki9&A)>}0poaxi z!@E>|W77;}m*yCUVUax~30TuxhjEsqF$@zK7 z1V`aXGm{fyrZ4ii5oj+WPFKL@EHGS$-QFY?(DiT7cm#PFlDI&+q45SP8E}O!b~6*% z(lT?9CdbH%IvhrGLX5^A9*}k{ghb5ZfcylGDlmaN09n)Wb5dZfbHrp3c;JjN2}I!v z4$#6{kY?CvJEUr60bMqR6c;$c03i(VB7|gQOymNOB&Viegbwyd1vRDNb6muR4tFMK z1A1`*=*(gyr-G6W!d>7H1`{}gIgvfH*fqBRaW**aY>44{@Qe`~>WvO0Xa}WeX2gMS zh*%;$t$;>0QAS$XiokPCpaw=FD5)^Q1aJfnj-&(~S4E2ys97LO(S}o@GH`3bRR^H3067XgR0@-zlEZK~7&-=u+re0dK4C6HcQSbF6DCPx zXXEe=bSM+Mci3|iD>8FS;m5#nCFkcBBo={(3$QvDNdZD0QjkDMMkEz%xv9BHh~sG( zK`9$Hk&WgaSSueS46Q)Gxs^RPGmmx-4&>V(AF)~?Mu_Wi` z!LK-gBux_C4jV*bWzWe^O3ceI6G+X;)y>IIPRuDT$uCMwPv!9eae^Tn2As;E?&IPD z>vhgaO@uWg8Q^B~fXpsQEY2>-FDl^(Ni5C|$S*2k0WqN3p~L^ojF2%VaAE~XBdcLz ztYC*Z1G|Zk!7|1~W=6y~2z=ER*eIe5VCDe(#T|ZBG6TXZ_=AbrI~A5$VT)!!UV(Oi zp%m%Cf=E@6G!7w=k}%4c3w6SfL^~-8aMJAJ1;-9(DBnA^5|#@PF@!y7fMXvuu_0^) z7l~j39ye5oXKKd-*nwbzs;;C`%z+&SCaCE;NKOoZ@4%sMPQ*D>1@{8ciD{6OT-@Ni z5tN#n4?nMxxLV^?_az8{2Lc$jTWB3?i0mxpo(Q1eUc-#dxE=+;#I9-f1 zVhwRBgoIiJau>#sH5QkFN35aZxIzGVFce}5gv1x=$vEAOG;j?u20|ja8_UQw)P$*Tn-+%hRV^&^*H^7G=dHB5rl;Li@Q9tBm;iM2sj&p5*-NRbT~*7tdfBdVitr0 zNm&p!6N^`AF>GfPLcHX?i;EHHqHa(GB7Z37v(2q=4GU&XC&sa z=av@bmKGVa`$A|&Y?27AU=|~XM`Ce?3(^i)m>n#9$r*`7#n9bxsVNN5t?{57hBOe& zl95=PfwE~FvK9n10>@GeT8#$XZ-l0gwKyX)4cCThL_r51@IeTH-Oa$j%vqe8mlBfi zSO6QeV+QSQC{AarK-w?}*N?ml5)@nI!gzuVXX35M0A3)CtQNqFqQG`g3Jg}Xfdd|5i z%+9$f5Et-*wlgLdWfp*@BtRo8cr*r=CNT$>CV@4wl@>s69R_n5pxTJGmw^jjk-$SA zv==kIC@~l62dI${^C6+jg4l)8>$>43FY9T@GOi$NeGx3hBYa% zBsl|WE+p&`i3mK{111n+DCWTv79n}m<^nh^gDM1c3o#8x9-7CL1sTMWm!Ah8_Xi0O zatqwEpj-jx?8a}uDcgS9v(6>$S6V+C?MA5uF)R!UOAqJl*DH9w$3 z_A3}Gk$etzIha6mK4{Smp1KLN_#U2^!TP}jvLTg>i3rz|9KtvU02mo7DKHl5Kp4e{ z6yr!yfF;IZIzXOgD@x2u$=aXDLsj? z0^GtzBx9&6;|LwxeQ3fH)wYOM%gXMl9HJQ-^GW#;tA2L1!)9f9P6Jz zQXq^hjbAfsD(a$MEUFpN7lku_nl5y=9QR(FGp24PU6 zjWG$V6&6>Z^pXUw2Ehe8#=>xrHV}qr+=#`opxa`QWEfGT@H-8QEV6F2HM2;TprmjDp@TgGU@mt>HXg-%>;@396={JT zD11Q}Il{5{9NB)hBIH#Q$Qn^xM!*gDEx}w@itGYpJMo(XIo1)9DM2MW7S&i*G=tjL zY$f@~`59$pEGWQ07-c#JoUOqGsE=2gmx)*ti|lqRE+Af-fM%#a!A^s)85kL1W8;kc z!Ko$jsX4jvNu`-NC7G~mE};q$^%kPe1s@ItCKwq@VAE~zGc{ov5%m&u-5x>!sze8A z{}==ET4)yMjKm@^fg>Fw38O6CLlTE{i6G?xVm}!ztpN>FBKDUd`v)2TPzur=g_K&j zT#q7-y1@+lzDFdVqv*vYj=TaE*{R@A2NNValOs7luLOMFFEoB}nt)RR$+bxF#{t@_ z=93DVyMUUEp$?Qai7^!=Y&b#Y24$va!14leKp=OYk*q^80GBvNYFWLY}Y2aoLY(E^RV~^xkZ~_4n$gLn;!GXR%j#9(GttwCv0Zk3a!3%a2 zn84*4@E8O5&}J;!p|K7bEW~93JE&FXi8xdZDPW-bLCF!9Zm{c->JUQt8SEJ_fy+d8 z$o@ajgcHO|xD+Bg6eX?^6$rSd0uxAvKvE#sQ<-@wnaQd2u?l6QAaW!_3sNYB;ZSg) z&ytmoRF@&CLGd_JYXt0RFo8=kE^(F|>X%KZ+Z;*oJSdh}b29UYh$8~AjuKEvZEAwW z4mh!b37iQIS5Pt+B*IQ`MDa5s1tJ*$(EsR{vsTP&~SoMID@MwwIC-k88Oa{OCe78;*`K;5p4KWaTSp$fsD%ooFEf$7JNh*!B(1wv{Mha zClHYWNi`4>=`0vB%pegA%PcA>P0Vr0&xM8zi(h_9Dp)-otl&t@DRIxKEFir42ft%RgFGiCH!+VL zv;{V~xENooa>Ih$B^5sX0a{XnwUIv>>ZvJI$xA%2Q1>iJg;h7;Og0+q$O#vz6s1bA zvnS?d<|dZFn&hJ)UR08nic(ZiJH&aQA?}=?gII?&TE5Ua*mqMd$?_2it)f`CNCSw5r1 zI<1R!o@7up8c>vDMh~OD-)c9&NtRFThz+Qqy3gO5plqwADh(Rtrl?YH{*t zO9hnb(e@2E&C#KK!=9GvmXn_kTkiOG|Z6EG;h1Ow4o2DTQs#2HQSbfzr4F^~_C#-(NEt z;xuoav!|u{rWTEcIQ@oTxS=5qS}Z(Tq=U0K9U6)}X{o;XMFko8Ir-_ZD`3EOj~3{( zEYLa9QvK7?kZ!mg9qXd?SQk%PYCwMG=x9qSeTR32(o%y9Qj<$_5{tm&T%+T=bleQX z4GR4H(E&#KCV95B)R57|b#zSTJZY&RrA0}lIjMQ@O~Rv%7@GHyP)|h}4RD$VI7?bS z{PdI2;HG(S^QPq&rDmq*`6p!|9mO}qTI$>$CAm4Ujkq8-a^D)9h!_XoCSD%UNk5@^ z#gL8F5Ep~p3h9+{mqE4|>!#%Aav`=G({{~So)PKNax2fK`!+IAEFJeNf=11N*EJKX(}=%l4v}rVNHq! zAoXmyiAC9?%hTzXo>+1di(yCXLlV*GX+}uLudwO<2*b5R%N>Ynp$NrBN>@+Xf*$eV>D$^0y zK!DnhqvLioUF8A_aZt~1w4)8q-*o5@@qv2Si8-Sk?HoF_$Lv&5!fy9y&A$I6#gW zJ(-rCBciOJAdiRE^N<8ET7}cF3TG|JEEzoln0`~|{3ZE*`FY8ySl6}Uob#ebSqHk! zo8X#Su9AGLE*~@wWGN{cU9m{N5pXk% z4kbJ^q+t{j#?Sy{kuFg?RS!Wa0{`dnP;ZLX&!QO=s3Om6%hIk(iWPl8JiH!QgNmXJRhs+Tv0om(tNU{c$B0B_?GiyX6<5UQ{?Zf{rb* zI2nCU!r*WjZz8N#@k`7dj0FqAfgzOzgVBN9iKQj^L8)b_MQDxZ!4bjiiB*}orD)e* z4GyRACM6c9x)r4smZs(kI2_0gav-*QtOkekz~Kj~YJ)Q})2K15P3`6sOHxuk z>a7}sBj8w*Qqwb0#}x*L!&s6s6H#xJ8XWFoN*avWlOs7XC)t1bj!>sNi7N5V8H`@f8+>y-yb1ahUM4&oUOcF-lYgL9~lKLv6Jnsa_0_)e%n*y`a-$pr0j z%0$~iIXDs?drBtg9<#yN6J}4zEXzc{`+IPNnm|f^Zf0I$UdbSy7h+C9yJ=)_1RYb# zpscD=24fE3NKHvk9js$PsX3`-gS87MkeZj6l#}X|n4FznlwX=R7^{3{^h>b^NB-nU zt$UcR>t}2<8U4%fBEo zIkRL?mU$rO4bp)%YzKD_j!5N91CLMzr4Gh1Do~0mNi7&8s~nV*FyOEYODxJvL_4;1aD*K=+lCL;C97;{`9-;jgE336fKJ#SgiT}e zPX0%%jR7xzrtfe%Q`(>$2}m1^^%zsS;UG+OOzB30&{dq^Q}_qz%1C(yiDpUl<&BZH%I<;(;vC`?W*7>xZz zM$}6m21kf7We>{UMD}1z^i0{tgR$VxHW`Gj;>k`e%1h1hO)M$O9E^Q?0f_rR?OUJJ zy!1i2e~caE#=+Uh<;+g41YZR|7$=#yvQsOA3qTvk2BYgZvQsNVGIIyz^c+i0Vjk+H zoP(p5;>iK$(Lp;q!kd!{x``qfG?hLm1CTcdbRtD&Uix62+Z4>n%*`wTJ1{TRF)w{k zPUNuWe^CrN-QQZoFZYXqy?1dVvQOgN(<6w0hPi|sKMrv;2V4Wag&P^PQoif(k z)RfG`LD-vR%S|oG$RCUYtjxKC^Pq>^!Fg-}OWxo-1&AxJG}k}5B(ZEzb_?0^)6&o{ z3mP0X6?;CY%QZMxFXtD4jwu|JD@j=g>j`me`QYUcgRlzVhPVv8P-74}4-{~N^UNQP z{Ib-dw48j@qhJR|@gV?m8)%>~Aip?ske)#y2y;;K=`NgS& zaV`n-Qr^K4WL%)jf(Px~gD~`N-9g?96o5K&FfXR!fx2<9c2>Cx@-y>F{0HfovAkf{ zr53rCrRELFYzO9g|9dxu^@FYZz*6c&dDE?H%+h?gC=tZ<@z}RP*0{bC$VS{ zA1(-YqwC;3wu!a4U~pzzp5lU{)Wj6u!8*^+4Q_z=57v2Dp5l@em(;RMP*;C2UOd5C zT#}lLdh`3>m<0ektZWcg{M^MQnI*{?A(=UYvPsTaT#{cfSQj&MgB&+_&uJ1ZE-A{) zPA$nO$}dgN7{pVbVkizB%=4dYAeRoxmJ7&b`PqZ<&@2AplA`?VRF}l!jKrd%#KGA6 z5kNR`&@O@Eg}BitGcPqcv0xC^Bzy=5X5|mc)r!z)_RTCwEduXD8HAw-jpo5yt8hc2 zd9bdvXDtTZmoW$zK9pbXVIA;cR+F+bE<0?t5C~?e7&KQ(Sd-*`Fb4g9kFB+_Uad7wz z+J$etpzs^i!?z`wC4+KAo~a~%5LU08C4=~!HP({Kg4DrykPcJnU|h<}R5}=sg%KG6!KX#{+d6Pf^KgONG)>B z9fYCBT?SrDnUq>GD37V*DDxP!$6fN2c@F9${&>rL2lrlVwz9$6ab+({EdnhY8-y8_ zqb#+k#4)98F!m3*L2eto2bm%{Z!m@)ds${`xl{gNT%pAUa$3k>9n9e>%Ph`J%FG#@ zcR8_^57IMO*uV}Oj4NZg%kzs;2Jew#+~q~!1G{_&XM3G-FqR-p6@#){T`?HD)dCgH z8Hss$sX4)^IjPAdgL1Hyy<*UwYQ|HMlbM(8m|RjiI2U0<-B*-cls_m(GdaQG=TVfJ zHVB))5XS`#=8y}{7?dYIaDk&WWRMP_L*g~0a&RusuE@;+U2;7L^8mzDapUg{9L%XX zxhz@5`FY%4#rb)9pd|$qk|MldY1sH8M8$0a`(>T|TK3z_nX zi&Fw#1p9{^``PpJoO3dhQE&So+cfU{Jm37%;#8OXa#U}TZ6X)cME_FMHA!R}2y>!; zSt{y*1!SAZ33Xy9>UvhP%@aUPmj0+AiInz&ONuh{(%B#sfds+=b`Fweqy$b@!WBfz z6@%27(5#O^VP;ifq|ym=#6VGAVh$swGIWzLRR|y%G(n?!l?7M8Fft}G(7{ohu=s*Cu$UPW8Iy)YlrbciA2VfAr*}bjEpIRE-GQ|WEPgh zBGA3fjEspOmJz7LPXe)wL9ApD%LK$qp>MV|g;ttuuo!1d9ddEbz{r?7Xycs~6tjk) zm?aSJAa$l7b*c1C0cOw?z>Y`(jA=tM4KOe=rVZM3zy^w6($WD)hZ!hEq|qfsu;d|{ z%#g++u67~T<_P|fNA%F4$qj4+gdnO7i!cDJ39A!uHe~U;jXEuBde{LCJ9G-OE5wh~ zUGhn+s>IVj4gc^2UXwjl6flu!!ng+xeu zjVLD&@&{x}3KShYu&~l|&P`!<&P@T^!jhJlnF9})Y=)o;YwWWq~MR86dJ@1tl@_= zh=V(RK+UkxI6_ofSnAyr;$k`#e@v%RIi@*s6AN66ir@>OK{ZhYXbBg%qOBy(&4lV$ zLT;`EHCyl*Qpw1e$ey2v%b`>;e=vEqAhih8XhSqR;LT}pn}mQ^b>KiFx^DJfP)eC5gq^1^GoK9H9P7Kz>mP zBUWjs|5#X&vpiIgfr$sa?js+i;DSlQgN7Ze!Ek#~%wYElMz#oU2GmeS0%oCUXJSAx z9BK%RV&(D6FY(MPE=kPEfgd&wlZ4Y8e)%PC`K5XA>w%#%aHk=~Ey~IhUcdYj=ltA) z#FES;_#Oy&9KuY&rCZQBF)uH_1hOCxeE1bq2Q!q0nZyJ!0evYSB)%YWpgt9JISiEI z2`bGi$;?ef4r>;u!2~@9RmaMJ7TQp81}1K>vHnR}smZW4XmB|w1L|r_m$BkcEWFV4 z5d=B{2^J*`46wjpVNFgfEly=%MwB9~zKNAdsSuLL)B|7j$cQWaSRfY-lgB4j169aExX<|-hT4rjB zAL2@6s0j>AoX`cFe!(yyC=IuaKs4~UmF6XvWaj6gn2yU=Y~h(D8F0H`cEA!cGXc9e zL3V)7j)zri3^*5i5ip583}weV+2)YuduY(Yk|+Z^R_(aLj>n^P zm`jUt7;u&!4A@HuSa=Qj0s=EPAO#aj{R17RgC;*lR`5X-kT?TJE6Qjdad8GQ1G)JD zHI_i@2Y;CkO%RDtvltL=#L{_7M9;*yybn&CpcKXul9`*z2gN@ZUKd%IKW;|4o zfrr@(zGVO=2B(?bQj?$@SQ!T8GB7avCc+j+!;%_8&anU{2P^Xsa=!4Bkzw^OLe8rc zHuTI27lbmHy-HzYp=?kgIK}K(3R_Id4i|(nn1fSci>^7KLU4-NA6{K^!UdrWX1{#c zG4@jEbT9yjG90x4KfT+-s^Eq-M0IdSx z@yiN2=ez=?#m)c`gP91W8L^APWRX%6#5!hA#MNX>?BS`Y*(vZCgKA=6XZD3}N`Q&M zY37hpSjB~zYQo{|PRvvjl2HmZ1T)pR6~Rua!b~;6iLgc&W~vE>rznh61GS5tktHfW z59VU1AOluGn3FN%2oz|DG9BFF0TYm70v>71u0@G38{kbiCN}6<+|Y&&xU53N1uOWb z43w%HAqg{#k%0r`2~fiUCIqFKSg;7f;sx18)S?viW)7%X*tB7|1r|sQEXclviBjZQ z&VZu)D1=6R;D2BY8Y1$QuK0o+n(pBEmT zF#QPkP|ZQ?C5h?jpr#CTzy)q6dk9Pd94X)e08Ef#HMXRRuYkd3DWcK>hdP)*gfSZ= zT|k1KMC-sc7bq97hLjfMq+(1{vazOR78S$tJZNAfi2=4s9MsCnO)PNAhu3uAsUt?{ zz+xgJWY#2!k+Bl4hXp#|2pW)dLoyjOAejVF57q~>1EM~OfipL;AUHKSAKp`jXs84& zaznQu5o}>WVkWF&gg6^C*ult{1T&ef7}+?85||ulat<8jm;@-mK#fG^(4ri0Xn{CT zWh`82Mftgq%ncPnDN7(S&|Wekq96@YD2Z%7*bb;cjId0?#*tQ(n4X&osyVQmfs`^( zY-GvE2gM{#Y0#zexZTSN8qbMmKw3TrbuqXLjASSzHG)g&f};GA{N(%`sHvc!0{Mv} z04mN}SPHJ4N%IE-Z$WBNGI*yTsB;PpAgCQIpu`LfVkkwL=`h0~Jzs)`BY7MpusKTd zA$+(A;Q9#`1fXDm$&5yA9(>yzuHb}*6(c<9Kn36w6S!*%=b|xKLH$;E4;M`m#$|%n zxyZ2tZ#y7mJi>iSNZdmcASC1AYyhx;Gaj^;jhTF*84qcwhiVy*g|w^z3n+NG#~oUf zqvuqbnUj)Q1Q&#=V&_OqD$dU-EkQK*5VnCEY+wRsgyU2U%0kE%^96zmk$}Xa#N5=9 z)FNC4awiw%7Z*d$)`L0`caecq%7I-8CUBXITQQkVMcr%-btSr4EJ6ACCAh7|QV!x) zjBYkskRoZsk@QfKJFakI&IHw2(6Gm)2--9PX9Gk{0#;4Hl^jK>If*5iWrHNWfi6$V zgkS3fjYMp*0`?mg39vW;KeLzQgHt~=P?2kAaFPWRL>UBXcVKY@)LN(Go>VQO)f z+fX|&I?(WvkPB2i1|$|0W0sCwsCgXH`~*i7)=0o5gD51CGbSS=WX=whc#zz{26YN( z%91gOkueFWB?h>;)$9m_^VshyvCEP(lI61E^Dz z2xEt|kPAmBh_VoZec;Z1b`L=M&i z7qqZE1l9mbW{eOmkXaB=JP0Fc0Z(A(CFXF0^+K{AR0Ey_!vIwRP8W%c@MbGxB68)3 zQhwqw4PpvvZA5%tL$L*76mv;FY?K$jIS}QLkYZqjh8(O^g=8g&Buoy%gOf0&jF52| zP~ak!W~jqRkjVp37avx9v$BBt$v7u#LD>dNQOi~UYDX3`Fo8o9tN=XP0w$2kAe3-H zBrkAT048v$;~k1{UZ%20P3Uq_!E@UNC{na;%EsiJf5J zCc*ncqk)SVL$GuUFL)UtNfe%pAyGJ*K8s6mrcY=XGBMle+p!ksBo@Qw&>+Ko$@nTo zaB-7_UquolV=_2rqZKBw!U{l z39wpFtYOO%$TwgKvO43yM(}H zAathyq`v|(4JJU6BS`ZfqA^G~{y|OxM;9^i3fg52Y88Ui5@9sdt0V*nKe zn$t)~ZH#H8G|`}Gj|B6fIzXuz$I%f`6*$u~==g@wG@V+chjkDcbi5-8jaA0MQ;O0u zO_OGJItl5SF`aJt#R57!z=?X)3S$N_Ifj9eF=I5>jOH2=dcA41%r&H$ok2>D%%Dq- zM4dRJ&!`mY=p4~e308=2U<$=tXek4u(1&pup*zAs4M{>HVxZAes5ziIiMuQle9MAv zN`5XE;>HE=urjh7Obg$N?XZS~9b(@jWNR$!$_lW9gnSb#gG=%YQ0|@p8w8)>0rMDO6MMK!!+ZF@pl@Pj z0NOvNST`YF${GhBhFHS6b8Y8{A=A^KhPAJOq5k3BHd7Zm0~jo zXNVFN|A=^F;D&n-9(%BKHz;F|Y98kZ%_|1qD+Y~5m~UbA1*DaaqZ~mBK!|o$23Eg( z#JNKdK?Vj!?4nR<7r7e+B+7lld_HWaFm3A19wl^wBFXSmb?0A}hX A1ONa4 literal 0 HcmV?d00001 diff --git a/frontend/elm-stuff/0.19.1/lock b/frontend/elm-stuff/0.19.1/lock new file mode 100644 index 0000000..e69de29 diff --git a/frontend/elm-stuff/0.19.1/o.dat b/frontend/elm-stuff/0.19.1/o.dat new file mode 100644 index 0000000000000000000000000000000000000000..636822e9c26c75c2ea43812c33bfd50f58402000 GIT binary patch literal 1034864 zcmZPo1KwQb)SO(l?9`&X)EqXa#Ny24Vn!7Xup9#eGn8iX!)xepW-86_nJ#a8lpixtYmD`NjEZ zC3?yEx%#Pjx~0YXMXAN9iABj7`sD?>$@zIDsd**(r3E?pi7CbUMh1pv`UXb&DVb%t z`6+q%C8@eOsU;<;MS2A(X(-W@o1cQ=uH5{T(wx#_9fb-_u4*n$P-;lbD=tqhQm|F1 zP*7EX%3E`BLX!YgK*845R>6Ralha;-iPa@FsWhE6xhSzX1DeK|Z)g}AYI1RMT5)k| zXh2Q0Q!r3aQ-c|)V54B5sZdj+0F$;sm9|qb&;*%auK?Aq4burS7Ak1X1xkzHF)36@9P>86p0!u1(^!A3g9RU@I+0xsW1swRPp5eVwg;FeleCYOk0D2R=!GZD#H5F1Sv$>2mxlS>lwj3DU^>`RaeBT&)=B`sh7AXjKshb2aM zelN*)%gIkH(WpR5nHAOwwOp7gi%Rp76H8Jx@{p9~DL`@wrt-{U&%CtEyi5!Ypi~2u zsszP-9ylH8!h}F}qa@kn)XbdBymVNAgSe<6la`a84@#?GkApd=@cBjme^338?MD4=}(|DN+mOCLz;uEp^7*rfV%bY|7kdGl*9pYuE zR_rcE(FyW07M(aejiNP9AqiT(z=BjE9_p|7aLEaEYF(l=S1r6& zfI71{BQveUCpE1Eqxj8FODj$-0o4sCHrv=JKxClyqj(x@T2N+s2GPdZ*%4)2R2s4F zvqLix8n+B6DWE97yg0Q8o&p$^VX8#AAi2fW$JN)>F9ez%m^i@INP21!dnzPkVd|ye z;R!J^9xAV3tAJaR6R3D`GeIBVo9Qo zLSj*RF>+ioaRlTfmZaqu<#K__vdqMs%&JtFqZBl_I609`kdjyeHwa0Fx41N^IJqdZ0Mzy>hH141X@#XgjpEe2l#qPKf&v`{kolR3 zIllQRsi0zoi<1*vf0t#Zf|@B%M}T-RlQ^tFYV@_V*kL02`XCWd@=D3i^~+BIRfr&8 zM62iJr=+UKLNw@WftBfNX|cgHT7pF|HG(R5WCIlJ!NCeMPr(XnbAe%-hJhxET_BT_ zON)x2Zi)}fEGj8Y%yG%jjW2^RGpkZHppFLBb)1~A7D~JmG@0ZkW~VylW#%T9kNY7hYqz`WFo5~#hP(9?jZ0Xq*YUyxXmoRJD@Auw?v+{KcTnU)3% z9u*Ck<8>5Z#z8#D33W3l@gnKwNh~PHsSJRa3^OGQ=0P0=gmF;Ybrj$!0ctQziGnTM zO0b(jEhJ9PS}smaXlVj&F1h$Shhoir94Yz9rJ#Zh<_c-_><3c-@&Y{5VrUya8PJWy z449HxmReNeQIwhn&ZwX^LT*8h9y4okYDsAUELb@~Sp||wQ6=ONc^uUK1t&RBI)t0U z0^-4p5d_CED7%zomgIo)FLI(}PRUP(sg%+KtAMLd%1^0;CUaa`n)E=5;5v{}7>*1H zQVuc`k|d#ZB1IVz*=hV}Aq(@FlY*@RniSa0;Gj#%Pgby100kLFMuz1~P(nt^i!7kB z4`w!}hC0Yo>Y5r%EIygVCCq-AIWRdkO^uZNWIbjUkP4WfD8%nzyP56`aHbx1@rtf&nCeHNZ(q0n|POhXgB_4+{!5O;8%wKsFOO zL5e~Wq=KyiSQjV~L7|Ca2ICG$aAGgS9Q{0f9YZ|*K_eQVEC5ew$%%Q%sX36sKQlki zttc@!Rl$~vv!t>hH9t)Ot2D?H>ZN%pscD&csVVBd(Re2_`|_hblx0 zI+#HW4j_|A3?5|H!7YcoEdeYI4k2r`_vQt3= zb1)}qfU-w+YNZ|vOdX7N(EytQaf=2#$kJ0wLW^=VG&P~w1*6FcYZ_^Q5;IzbuV{s6 zb|TttT%6#9&xy?$jE@y;5zRbsi3@j1d1hWpez{&^N{VY)YF-JbYD&#ZEz(dg$S(jV z0d*aP?9@t7)Npd5>&iRB#iNzVo;CO@E3Q8Ezk_UNc0owZ2QAh>38k}fBLB+|LnWmtj2o}^!E-A|K zPOStbR;WmBYDprh2)Gjr6@utWDlI9=&r`5bFa&FaTBKK!Sd^Yxf+CcWSnOC*Qk0og zT9T@vo|0dl2O3FL2ah&FV}p|uVrW4Tn084`ODxSP(SU>|q??sdl$r*vvcUZ&JrEZh zLl9X|Q%S)Vk>+732T2L2{7|q}0FR_FmlowPhZf~_HqgHE_Q{kC~&OD8D2>IUn9~;R27lfn0z^QUF6g zOGbWi3CuyrdQl`W^|2P@7nQ`rH1g;rB3X+nC!&`KwH2HuK(4ok1Pyxp<;PSa`8pDL~3Vlm;xYD#HNY7u)lOkdv64I!HXoxB{04q3$Hsk6fU67Iz7)L?>J0O{mHdpEE~2)J8@ z)T2?bSAa`dA<80{<6zSp(4+`yV1PPjkUkTXkJcekuvdUeU^Njnb?1X-$J~q&!4B$Z zLz@DAiMgq;F|FX#oHXRLj+E_KiwhFV^I%z$Q3FW|Jx3zh1MBcWTj;R%pF&1rUP?}C zkp{Su*W|2LKr)V_D6u>k*)nJ7xD3d3P#vIVAQvYm$Qzg~F|eT!Z$a(RQ9$kr3lt<4 z7iX5G2A39qs>#$8n6Ea1N{(s;sI-+rNl|Gkc+MR@#0m2NxB&~c9ZQ;lxDmwxAop5> z%5_jF3K}&603D2&;Hz=p777W-$z0)SfsVzQ}@eGON!dA_dWfo^9W#(j-RC?y6ct-#C%k%xJi$4WsRBBHLNz|00|Ov5Bq ztQ6D{Zh^?DD}dT6py_o2E>Y6U&9Cwx$uay^3hHo8Slpuyktf?pih8-lq`8O>WFu4$ z76++;rO9@Ws$O|&Qg&tuX>Jm-Qcy?Mhs9mWa3wh0Mruk3#hwz7`rfb+F$K3EM_*S^ zO#~|}5G8(*qZ>+MMk@8t3(+VbLZia^)anT2gc2JE2?)pL|iuBS`OI#sSwoa9vDX{S7gog%5Jt&$$i-nL{&}fk^ zrUCVm21vaosHEiNv_h_uS<(^_gYS%x7Co$c$PMit>bd0Sa`@$!xPcaazzR@rkek2; zf*awW5C^9yP_Sbr1yC@DgNIjOE}5rBCBRC&rB(St(IfZM=~EYj{<9^Lvxj0 za!zJyUP(Ae3&_o!%xoE{pamc>8&?yh-vg`%R1$J=)`H7HtYHcb98g&Z%Iu(dCFGGT zko!Pl&=FP8S`2h)H0L9leUO+z@p^_8WNBV*Vg+~#ORqS&C_g6$;#UQbMS75>Fi;VY zeW+@{BA9BB!VD78XkqplyTy<|(m}QvCIq$!;ye@~h}|ec5X&J#ny}CYg(f^76(bTa zS~jfEQK-b3^`PYvEaG7ECU9e+sT1N#4X{z5jybf|iaqyrVB|jN${eDzpMM&tfCZ%( zs6|NbL8`Lgt_BzIkQpDS22jf2M9Z`s(2U5*jG9{{tQ0^7pris&7R1OFvM356u>n#D z9&6)d#>n{y3lUjg9K{UKA}(+aL1l|ltHfg!3KPAi2< zs32;pGeEKqRC1#g%@{QcMrt%A$^fKP3U&rF`WilLSxeMPp+Z4h0Te@eIjLzSV4cVr zOTdE0R;eYcUlvQj1dc zKq&`gN=Zg)kpgs9s#pOMunHv^sS2P{Ku4iCUm+*8M7>xcDODjkKd(5m7_?tQAu%bx zv_zpKBe4W*5Uwaw#fY-B#GK+(NWTR(bjJm4_z5B{xW%#x8@@OXWo6bCp6oSb03S0a%U24_KLD0jpZ77spSfxnRz7^jzvX@m2j@H5riLY z7^|rnZ4e8d{xwvvSI9|KumZUbl&nF$aS#TFk*lAxzl&=S>JAD}(8Qc zNP$8lx3nZNDJK;il;A}-J<9p2^1*v^EBAu%Q{)WT*^^`9`?RHwN!XBF=nc zBb?@&K+FfHj!-|sK~+jbP=S*w*hWnhzZfc5gHj?!@Rt%DRv?qf2&__~0}EsUk)h@0 zON_MqA_WbQe$bXc1098&RM34%9#*DK`SLP^GZNL2rf!$xj4aY0GVO~vff%DQ(GIuEDH^s zMph0SX9Cdj$~HM9^L@ zGX*sTg9<}8h!z6_149r{(9+jbu(46F06T@V2JAktN@KW6kUB#{kV>#39R(vW4RIe@ ztYeQ|uzK7+aYgb8#19bC0J~2Njld3syAR?Okoz!wg77&W|6s+Qf=vRfl#YZ2K9_!7Gy$8 z6;MkP>Tl3|Ah7v~`0cG@#8^3S%P+Y8P5;fbux38o?C~&^9iG;ZTTh z0CIGI96)4zK%2tUa|d#KfZRc3gg_g~6uP4b5gy3y0JnOHbqJ&_O`$_d5e~6HN}yne zn3+H&QIjZi@g5?_f=dQak%#1#oYXw1aqujQG-imk%wUOuTBo25Y5{|G$Rc&x!ItPH zfqU#wlfg}M$n2?tHnd;>x7|SvVNiz+!=;d#kT|D;8isK7>guq0P4KA%kP-~yPHTA6 z9V%+0keZib4Q;!FOaVDv!4}fp02M-@)CS9T+S;H(oD*shv>goAV54AYWC5w??G+$v z|MfuI0Gy#sXz|&$0t4pKdX+cBUsHb5;rNbL)2-+`pSwJ3Hw5N6_P z<(Vne;Pe^TG1w|&u#M=hc0;%t>}-(Jz#~Hj71%rkHUqn>!BU(Ex8rEm8A2MJpe6?> z#EY@S4Nf0`+8>bS2Pf(N2fGg`>Yz>qxB59bH4qNR(Nr>oG-SYyak5+v^EstnC)e+s zkk%(Sn!$mggEfVNPiIL39pwTE5`9RMR#QP6+RB9#1PZDUafq<90koR~%2=W=s+9EpotIAG$bh7LVJaf#+zGWW=?4lX#W}VU@E8?0+}p;9t#C+{;(m9{t_`d zj^6MC=|&QRHQqqNScV(n!<0DWA;Xa%N$7Yq3#bTzAHc!D4Rtib2b9SzkfQjKd{A#) z1JrE?cX&bJ0`8^QDuBe0`xM}l8bI5%ARQ3UzzA3+XtxpQ1PL2kP^3Azxj{=tX!8-$ zn*{eoEDQ{gyDjJz7(x<_3tE>25yc?uz4;(Hf`Jn{`sYQs`#ThIN z4q!!kP#w;R#i<(LN*0TmKKbRundt^I6Rd-PnaPPcsYJWh2VpW?9}(t*-2v8$KanuV zffebMs zKcB@O)PzCm6O<&T>nM~Z=9HpL?0^NJ{Z&xLjfWcqJFkUt34Vh>^OX5Hsd_p2=^7=8 z=?dBkpf%nK+6qvkO7bCTRRe4lC`G^)^nnGSc7x_JLi}C)QN|o0ZYjx6$p>wCF3m{= zEeh08C`wJw%tzUy1g%GF3kci6 z@diG<4ox@M2gnJ52!~i=cL>-hEbf5>40J>mIV-`O2MJwxwA(<#8L1_$Zj%Y!_gHMF zj>D4>Q($qN$KMmUQ z!5Sc-DiGO3C3Pi4=1WXT3C>9@&PXkWM5qpUM-ZrSq@=EdKd2zx4eb7a$RXRRuB497 zR&YWAS*xyu;!(^P%1_ElO)gOf?PF3`QCG;!gOyp}z3!kQ3RKA0LPYgcAO|F*DZn<> zfF*5h71SX?4RStMBdpB9n~Gp*s~D1uI6+4@KoU}7I&2DBT^V5}$Tj(;B?YCR`JQOV ziC5q$8jwUbvfE*M!$B!N8f2gPdGUtM(Kg}NNPaciIUrpvQKn& zEVv{EAI=2d+n}xiiUg=JS^1fH8tOXg;852D^-WRy193!fYDs)*PHucsX=YAICOBVU z3oi7Wp&p!C0uBaFPIx(=mY9-?k|Mx8QPA=bh!YgR?I47DEM5cGhTujmb8u=2TS-1h zH>}FL2uZ;ZZzIPH#3w;cprz#~o&inwz|%vJlWT54NhOK`P!kKhzz5o>fd)E;Z(TBz zY3p4UkPT@5-GJY};Kd1K`39_$rm@EgwgS~ZoSyjoV`Zg|5?|4=U?+m32b7&4sanBS zK|NX>oas5ig`{2*sHD(<%4*vpS{>Ny9lbdzCL%1!8{*(ZP_c`eZ(*)iP>)6A zQ&dlb#lcPliD#meEns(mN|sDWR=_A(Kw64RKxds2a9ng|EW~vn9mxieIoW6fNXZ5g zD@ZI#&C7wT7y`+IO4@30#KCwPD7xHAT>%uX z8VI}XK|OI$eGD$|Kt9t}P}c-kETF^c(8_xB>|BzV4k{BN=7ZXOTqvyt*b*Q}Si%|> z;0g&GfeJ{~GE6PjiWy5KX#?^I*c9-%BxH3KsKpE!9)nanpt21Vo6x$^Ei)$-eJdy^ z&4Z0Wb__@%R)@f}|h10)O;Y!x7tA3S}6 z&dNcmxgk{wNJCm?Y7S`QUv_FGyh4pvSFi`2H=|dalbM{VVF=ofo1F??6AsN>C{-eQ zJp(op6rt*%!U53;!Ic4{vr{Xfl_zMmCn%&L-heJn0LMFccnF-YpjCr_P8PKB^oG06Of)VxGfAy{@|ff@KI9+3ib*n77E%5c?wnvrlueUXk-~Ou;U!$ z80>*E)CwsGz+)NkzJ7xS__(diw9HhRwkQm%zpgIA3Z8iiUWsLi!Qcas6+9L4Qd3hDit}?*!G|~~2TE*nWQ`6g!O>1F0+mS|K%1VIv@eLhz3V@^O5J)RVu*t6&EMwr6lE7DC8Hxg+LnuQ}ap`3X1a6ixPA7 zK*7w#$q5buL+n8SGY#nsJec-k(3XU}{1WJ?BnqKHKE+^PgB=9-Iw*o+yLb?L1wdzn zfg&5^9dIyb7K67W6y@ia*eir&q$+?|3i)XYmHDMb3TdGBNO5IxNouaWLP$}iLQZ~u zHt3-JM9>z6%wm|EAi(h`Vkp$S7FBe7T^w=}0DvmhrGC8$jBI|meo1<+uD zgq;!gunQ@w1jSxSKKQsmg~U9C(!A7)g4E=a)D(r1%7Ro-%tKm%pl~lu&w%&=)Ad#{ zd0-zwY()w=Q?OG(y2}-i3MYikrNyZV2^zMxnh6T|dGMnSi}hmiAc2@!tdN(lP@Y%` zip=c1{BniNG=wsR#G+IMB~Y{%C+4Oqf%--u4k*5hQ}c>b^L8TYSO-bPERTRoni;6Sz^AyT6 zb8^7>2b@_^qSp)@W}sL^3_RmcZ;_zf3ED>lvL3Vx3ly!eq@w^14RHAgE1;m`;n2hg zia8{kv=!9#6u_tEC?qPRlosTGPTfpZ0Qs{3?7#HXk`j;wAd6B{6cUq@!Bt0MPEMu0 zf@hjSUVaH^q#l&g!RbCf4OFP)g0?t$DuAO95_X_a0tKQXatUZb$n&6ZflLEH!vvDJ zLBh}xeW(E<~Fag7*W|WAfBN{T6Ut4enKd z#u(K>;p_z71edCiRFs&PoB`es2d(gmL7A>Nv9cIpn}RlMZU>*yNbzNeqvhdLnhpv| zSV@7_l7ikSpqrAPtDjk1T$);poQ@4~ROQZzd7#=FdX69{BPtl^DY#^Uj{3>ZQ%I^* zs7fu$S4agl;=rW>XDzm#2lj}8&8$FVL1)L8Bo@Js;AGTeX35D!9B;t`?(f3XGNr z1c3KtAsvqmZa}A}7R8t56(^>pI_IYrC8t71M?sMX4PbEg0l6H~B?t)ecMo#(1s%%- zDhwbc6UY=;Q_@y}hIf|8fz~{LT2-(cP`D6xmN*(iw#UJ?R`S9;2ySO{louryc;;oo zQy`O$0_4y)7LW`qz_c__u2j*~fp)J!J}k&D03D95sRKLI6x4KwX=DW-(E*-1!0rGp zkTszw7pJg6&ss%0@|2)aV7~;HCc!UQffm8 zf!dBVu3TDFDO=^b`mj~+7{BtO71 z03+rZ_ps~L7f|R3Mju}2kdBl zedvV-3Q3Sm0iKNl-vI(jO3)ktJM9~LfMU-nozUO`7X+M$3ZoQU7D5dM-ys5JgO*cQ zlt4L<#LEdfjT|Zh-Xjf{ha@XbeSL7;L9-gd?a(xwS^=6H#}lz!5QU&k*RW_+L~%DL zQXy)fR~(@gIw+SXX+!f4D5rroy@9i5YDEdmGvI89rR2hTF-juTFpzqfVaNtU-2*#% z*0G=f#Tt-O1zTvq_@!2qKtl{P=>bnxhF>BP2%4mZEgt~K2BeS!omm09a0C*; z&~_Ds1Dbl^eC{Zxf-R^enwmq5v#hK^^P$1vo*~X23L*Xq0saC0 zp&<$`{?6b;4N5gocY?0zMB>__9At~7_+y8}J~57vge(St)JdSs0=3c>avnGKyut+u z3;YQVq6Qkl_!68PIR8NGg=8NH8=4Z3!y0QEBf+=+;2V`7cl1Ck(NREgCzga*T2us4 z3eCF^4kU>nyA3%VOhY=K5jmEf9G$&EQSIj+1Ii)zpw3h-<;Xz&_TT|qWfz?y*Z zu<=IFB0{7M{h-t7A!pme8k7`WsW;j@1r2GF*gW+ly?KguRTjLZih2zh&ily}5U2DY zUmT0LmjX{kf!=74)u@2&M9pZ#*JQ163iQ=s+*dybABGYD~s2BEUh$7NIk6y z>dk|_fpohaXs8He4W#V?N!{T1BBFIZdaE7i;sof0jG%M(m{D%EV*p)a0&Zi`uH(=Q zjao>~pmE0m(u9FDO-XASYlF5{p)@T^;Vok5F-F!3(1tKdu0p!magZx>7ftj1yRKvDoZ5EzSn znZ^DEsd*ZZSOhP$fR6bnDni8I<3w<)^})l-Sj@`DZW5kj;G7UmJJ9*y;2R_%Yqt>P z2gp?DDZ~&Lfolesa(t)yGipGqRJ7B-ZNWW2P#*+y`4?#97}G{jY=9Cw=$>ml%_|{j z3kl*}@M%Y|_}~CV5@>`Ck9J`c?T{l*q52so>Tq!?aDq;ZElw^5N8sg=bLJ?PgLX{cwXR)Q|kQ%4$f1mArF*}w&6>LK0W2N8fw9D|mm zS{Q*wv!Unh!cOzlgB+^~IXfPr1GF9$q+Z<-5&ygNLsxWDEyfyn~NF40aCk_wm78Q3xs|p(nmW%tEd>@D%qdIE#Bw8xCR=X0%I# zIs~9f5ZoEaElvlmT*jri9(@U(I%stcESPkQGgDHN5{sZSH6UBT=BcSEfN1Cm@1XO= zLD!Cf*K>mx9&>V{Ny9Fr2CeJ{VM?ka59I0yZ6FL1$|2|%4uVcthlBu4LtY9!BrTbvFu3K5pjkoL?g$p?+8LiU70)PsT(gsBvy;L%0Ue%R0e zjAOQ8HBfwM0cb@Mv}h$VNVRY#W<+fWi6e}_Vsr=XT0*KD!6_RtB@e19(WVzO^9o8! zAjuZ04s--7(zUXnMR%YzFrbx|_|zpPgU*-+sVqsYDA5P4Ttrh|Qkj#gmy%grkdp{% zSE%RZ=cR(TF~BUwEXko)gke<3$dl9{hk;hqfhTZ53;IA?Pap!|5{r`)p+YYoT$_NF zV?hru)<{K4Ktv=BMrMsv=v};e(97MR$qU?dL9z;THko5_NNPn1@00A2esue(UzscZ%J-x(&g4DbeOl43lpmXq(v%&rbX#}m6 z2BlFK|8PHODg`AXL?al~-T@_1(11A7_I&6KnUF0(Itrl3Br^4`!JB$Peh05YJlXx;RI5co0$tb z@I)P)0t<2yGxMxL`v;0sOKeL^(sV80CZ>QEzuF>S$;6I!D-n)1K3g>?--D;JK>Le4 zT@4MixgeK5BkrQkEe=jBOLfZ0PXeVaa1Db^5`3&PNR>u3$QKYF#_A|kgR-2J0?0G9 zpeuJXAx8~>eF>dbQ-G&bkWauepo$sPx&k@NBgEIolnXKw1x*-`D!4QkbVD{;5s-+M zPg6^fvOj1&HYii4B$gyvfuaiJEKm%Aw--VVu?`LLbk5H$$j?j7D*;Cc#4F(HhZAZ) zTB!m{cc8X5vj5X7AnSUe7DQNeZtf~r4=&7cleUTIDaNJLQsW%EAT z%E3ns%a9$89H@FKkQl-mtm;S_L4^C9iC%k3_8|KSwTx5VJ)`sTgMm-^M8T{X$2gzQ^3(ksDvZdA)7Tw zDhrX_ff)nPtQgDDWC-@)=NF9WHYDr=`Bnt5ze*n!e1d}62aB5*`YF;ut zN?~acwh#s*6|jRQ?t)VbVUfcRO@iS0CHym$VaN+~L75DCtOBV0#R&>5GEN(zfe+b& zQ%i7q5V~#|oK-0@wzo5>-=`YgLH3!&MqT(I03jj4Bh>m$jJONNykP6!K1k2!v1`TBB1e&Sw zmsXgibh!q~XW&GEZ~+6RyuDM0E_k0gQU2V08kP!diQlTnr;m_Uy| z0yR)UMGK^60v%2Qx?ZCgx|$O-vINf?gwhbUs#-t?d_X0*05&$oa$!8|P)%6z$c*Kt zc$CVW7jyz1ydDR~Ex2%D0hP1tMX8{DfAG>-TmuvWkS-gjZio2=tPN*oz)TXZm`MU; z9H?oEv!a5w{Xh|yk_o=$5Ns>Nv7lmvH5GJP63pXTptuHgbDG{)rw%b#}<^DoL>arw=ug=wzbFy zF2WKhsDMNr&jD{Q1_^tl<`h8EFEs6fCLp1%fn+L_q@Rm5>1#suLJvy>MH^}uBA3)4 zhajD@ot;_Ar4cB7L(UZi_2%Kz zEC{C~^=*gZxh9bEjpoOifQLbxeEglg6) zAcQoy_{&R$tAMSX;o<@hW#{LlxR#~nm4Iey5D^F6st}S7k<&mJ2g<#m^qH4h4v_=h zj0)>G#iQ#(vKKVR4W8!8%`Zz;$j?cE?T09a9-a;|6|_vl0CJ-c++onZAo6WU@DVG> z5HHvvpdvUmFSQ8dR2D>k`40BFNST+WO4#^{Opm|Fy(@-i3DeVkc<_Q zOkz$BBo~4G3`!h`(gC3hbTk+jr+RWuW^y)oOgkwD&d$v*Elvexc6A*tPIWM^v;d?C z%mfWr!#Sy-^K0R}oYcg!RIsL!{LS_7OrNtog zlX6On)VX4<(VH~zxJ4d@S;X$`wxRs(6DH0%^>B%uMl zNETxl1m0Z)xsX7<17#N?l!3A*c4b(`4)H2P>eVBwLtXz3UK9k92DiMC?uP=2VfqN_ z2H5ZqvLZBdK`U%P(n#jQdPN{%oJJ$MDR`AZo9=kkFb3n5hK~;5RRtXfLRN$7Q>M@Y z+>)^6^|)0aEszH(0tXjlhy~n{f{P&!H^2oU3c-Us@Da32hY$p{tUx;zKqA;3inQkrqzGabNE@tA3=+kz6?LBrZgt?jPoQH4 z2q*#V-p8#3>8t>dBIrR6ETHubh|4fEVZB*p$jJ<-cf5hr#zQUy0dMvO7j;|^0nng3 zO!E}Pv^{uS8@%LEUtht`Kg88aAvq&8IlCBi%uxc!K+y3lnZ+f=pp!_zb28wA#xjc) zic0f9M<#(9Iq-`sVP|23G?H?1D5pJS-y}GCpm$m``Deo%%meAhf`;#`peHzRLJo?` z%!6;`eypLMsNm-5gy}`x`sHqIEFYPA7c-4WIX7UAPvw;1x@jk$TPG z<{3*#W^O7=NM>#-Z*FEzPG)gPen5V4W(6#?zJs;tAsYk=3TTRfFAf1WoWOnpwMIbe zLO>gktT93;J+%b1?h~d!1G(uKkD(tlx~G9f*cNfT9p;Jzi1RQVgf^Z4iV_|0QVGzW z=seH`^~jFFy=IVcJ0iuy=KP`UdXS}{;|M_w|I~5?$O?_*e6Zo@%QHazMA)hee2YQ+ zi$KfaK}La6EO;OteMtyHi3Z4a9q>_Dpq?LW>_cAV0m^cq_7OPnF`@^g z6XYw%#87Baj)E=dR6giY6Obv|&>$bMysRg3zKI4Uj8{i&B;Xyip2r z7XBatset(!WGyxitAo0ZoM4stMVaZDdEh=0e6=@J47AN0tfmCqodlf)9G{evn3oM% zYJ)Abz+nN&ke;pz&i=jujv<~-o<5!-kr??8bX*4b-uK|dv{bkJB2Q3{BrmnZwW1&= zzbLf`eEC!{IMnp@AqW0}4xvm<0UhQ9N~Yj*;5=Oo4M9iPrDayYkDfz2PzqEELQj&? zH#7jR-cHQPfu5L{RFq#{oLW>2K2ipLYoG(p9>z+ujN8Iz8F*zfJY3ltO*14t~JyV zrhpF+ANk26w7ZjeL5p~E65GUv?MsOJnOE5}UVhsM^JkTTpJS3w`Dk!1}LyVYr1i+ zGlxj(VdfxEI~g*f26G^ETMs8Od8b9=Jw?-HL%8ir@r{B^bde z->Eb$4b+SRE#am{Xo4ED;HVj@VVRB|e4tRl5_+J}M(IgF6ArQI5L)E0Bae4@73b$M zsvwJi25V46h`q8DF^&K-4x@$y3*zWXgXCZ%Fdii(1&9%ta;T#j!XVA}U{^mEg&^0! zP}krP=wLQTLwreoNMdm|S_if$zqBN^NJjx82|A>>ur#%}gvip$4`*ow3vdO{1_6zt z)Z&8tykh88got7XVyi|GXsKRti5@c>WC#W3AuNaaff54LEO5&bvak+RHdbVSMwmdY z_y}JgkcWdHrh;dvI4d%Wu#}A8Gi5=00ARauKtnEI7ej_MKY88?}&2F7 z;{+#j&;e42h(S@NpqB)5M@eZB;&6FTdjJ&k@Ev_jut2N>EukwaO|=F~V^-ZDnl@2BOPWdU7kbDn{3~0u1Gy*MsGBPj#t%?K%MR7@D zNog@WnL>Cr3dRPYt6L!D1iZB5cF)gG2?i^H=OV;%LAWw5r$lsBC7@FuAi1d|-#4`+ z5w!1115_q~Bp_}DaY1_@AvFqQNfo5#!#1Q2^)HH9Nd5$+4rb(REouc$>9BYV4e|lm z%*+MxKj_99ScC~cR6-<>6@m6#!W4-hD*{P?6{4r=J}U)?rwbB`ic=vuzZmS#^wbi^ zoE%tL4wKQ;gdKeXif0d3M;Gw1+VDyji(y5HsIum?dAIS2|yp&YXIU@+A@NGq)JDNdm zge+kLtFr^|F9HV&c;y%P&MXIOx zpd1D}HV9t2a#?||Z$XxWw|aQ26d)xFvMemj86rWlV9OwR4is&m^aROcxrqg?;QL`f zu0`6x49bc+plc*jlTjMecpb@U1=RtshvDvLL3SJ5<(L}aQYaeWo>8_!G)0jQodh{o z0}||TyJ4D`c0mu9MED=195j3kEwxJWLH#c9fd`32MTwP=?kjTKfSTo4)xcAMlfO$O zc(6LaF$lD%6A{GV(gzgl3bqQ>3ZNKPsI}%o$QLALf?ED=NTHvoqmTq@X~R+mSeK4M zqLl(j#!4Ycq1IXf)O|#n>V#GlZuv#IAeVw}*erpJw!%xJG^iYC;wiOU0j^ZjTA?7Z zsH9jg3CaMSCjk+_+8hD79i#!SED_Y5g_#cBV-I!!sA&RH32wI`Y z8=+E*K`Xali4ihN2q_9d)f=eQ0xJjL?O6dtvanVFZJIzDQsO8|EDtV7EYE|bd=?Fq z!EBCzoWv4P$a8_3*dh7BsX1vdrJzm-v@4Buy*LAx1~g1`pv5!18N?o(nwNsKYJg1x zR7h|#vlOT1!4@Mj2wOqIMGq8CsVSh+0Hgxxa)BtAijw@2#2hY8&RR{#P$nn>IYEJe zIWjnmLXk5lH90l23`;n26oF+@;T=Z8VJQs@ON^9?yeb4zd!kgX0+2+g2aW^K-K~hG z6ht*_y%;Rr2%tq&EmVRZX}pJ+(It3lLTXflj9`IFz`C`lqR35kunefx2XQLcV_-43 z8K}b`U^#?(nAgC|Vv-0awIm8mz`;a^r#yo*4lvm187LJG^YgY8*E_#xeduZ6|~(Dxn%?HJ?MZA6HKgx#VFJ! za7u{=D*&Z4P!NCu2%bP8Mg~KSL`o`P9nb}8XeNX7L((SrzMP`ON~kv>UIa-)q7x-4 zL3DuZ2L&3o!~{`6FgZbe6brEpCAgvfgk4DwQ2`AIh?B5|YC&l+=&VZQ00rkuDtcQ% zTLFA1F%7*A2|ZAL13R8bzk^oPf)-vOmlB|oNC$LXA@KnKPWdFpX<~9RWMKf*K2RS4 zyvHXoIT>pik(iu}E&4!S05|oKQZLlVL{oKN%wwnPG&NCtqWSZ02-r!8j7ue)&uL)fT;vce}hU&P&$B@ z)R1*YexTHY6s&nVpu1H|bQFs7ON)|IVTOZrrlb~^_@w567WAYR!>S@kY=WdSOHy-- zL-L*T3qS|oJ&>VxFL6DW&qAG>h2~9yDt3k~MsIx#0 z)K);!3{ebH1xaKml?X^9C}41vqfjpstV2NRz@va5gP;yWDI1{e8)SDW;As^oXu|>z zQ~*Pw0^NKp^$@gK5AF^?+n%hUC7C(JDD%kRfj-i} z1!#Uc9z2r?Kk^IA10@iYZS*XlW8Szy%Jm@k%omXzVphY~RDwFPDpm@tFr#5K_Q5H0E6{1BkWnV&X(X@> zX^ELR1dJyz_GORHc*K?j4G0r*hdeYU!NX24U%6%ym-jiU1nao zhI(S2f~Q}II zpb1`I3|0j)3Ay`=Sj+&6R%3`hkV24^nZ<6P{t4_hPmpzr5ETll3WlIL3<8@hra@GL z%_Hbf)CNO-9(3D@Q+__E)kAiGgIB*I9g#@z}&RLE!n#Kt1T zU@Bx}9#%xcibbr}*rQp4UX?-2_AAYSh7c}GV3r|U0xz3`p>tB;fqwWv4!l%w%S_El z0ky9n4MI>@YNUb0Ky570F^Q{ z3{P`t)9Oee2E7rQfdR!)aC_a*?8T`3a}x`E6Z0xH(%>Ng9s`24ZqS+;oLGYZo?O_i z6w;8r50B0;xHF0&k%OFW67y0*GQdr2 z-AH4Qkw|wg!j05XNHHeHSdcpGMw@_)HbpeyP>j}5NHHPSc#vA`R+xgUFvDYojzWql zDb|40W4Fo-WR*Dqt8^4n%t*BkqzAi|<{&FAh_F&eA;p{=YeD+3TWtZd+LB1Cbre!8 z$h97%7w!ajZgNE~Vv0)h{PW<=8RTLHQY9AYC_q{%U^kQ$RU!`51UJxOr;~#h5oth` zf@YSXJqbwuD=N(cAHxMV6Ra1sY@?Qo6TV6kVl-4EMl*)lwFrJPB+?`)djFE$Eip5v zv@fhP1N8oXivj(244b;1h3C^`OV*>OdPd;N~CHBjDwhwOnY0 z1!&7RYE6meFQiHdhyNkMrFme>Ab|mEYoe8}ID!sj1?)&+sO@?x(8WpM{pql(2i`gn zK|cEzrUj!q7KF4AK?OZ%t4nbzydw=WkU<&QAc%5shYh@;4b-S4&|Tq#)fVtoA8FCy0ik(mZgh6f&q$gyAK4JA)J2Cx)F{in-N@8%tor;)S7+a{uHh zI0gkdMk0kCWj<1Y`v?*gCHby7x!}OS;t^Q=&L9c)2&f|kZm5FC=fI6#cq)L$;W<$G z0bUmeT7LyUIG&h8&mm^RPe%mx;t54}9<*rz*{GWcX-9)MqNgY%fKLC1n5nIxo`59? zK^}sSBtpUiEyu$B2Tu|*&;X1En+z(T5zFWxx2PibnprZ75l29XLg(-_H5Kd?p!Qlp z7k7YWuAx0`BFjovaF+zuE|b-P_#L#~8$7$12rB;2a~iyHh=@>dKLJaG!V)o~0z5*= z&Xl+lF(|J?Twn(~i5@b!K}_T;`1t#|y9Pn#HuV(zQd3hPeHC!s05MiuL0uuKv;?xJ zyf`%#ECnvJp<~tHqu5jPN{TX5L2HA+QlPpGT5eF3M8HlM$Rq;p7$PMRu!Ha?5qQsQ z0XWZtB8bF{49Q5O7u~SDjGj?JwGt>AvZ3cGgZq%6ONPPc!Xh84yBC~PVavx#Qj1Fz z3Q~*G6!O!MkM##H8iZEA<)9u~acMz8eo=`+X0bwgetwEVYF>V6dIrc^__#l4H7~qi z0?B~7YLIJGz$r#ABeB@OJP&lvU20KDCFr66NOc7*z`(0~p;_J*+EyW0)JVdLn(Wj{ zXexqOsff|OLMdnD;N=X+rO;i^h*AneGg$?WK6Gg@#8Z0U;s$hSF=)*ph{hgUD5tgJ z+GuMA3O=M%3bqM6UI>nQNbZE#16q&=YYbrc3+eP7nnaTMU}1Ab|kwuV@em2Vs%SAA$p0L2sfbD(C~p4A-E60lWU-41KIA5T;R!qLm!@AN>Xz{ zD+r)z1?~cP@=CT=04V{jItJ08om#261$s#sYmSLXRv-gFi;dA!6h_RV6iw#PFn|Um zp#+8Ib(GRW8EO>B5fF8dD8*YOAQyG8G6B64%IXgq6@wKFFjb%i8rG6S1Ty2n z9-Z)H#{-T|XmY~{BV=ch&^_jYk0Qe38s=;Ud6X_OB$lu>3E>*>yAY`?#q0vY&A0}N z0`P$)m>pqoCj+g=1JqW}7+q(07QV zVbv@sje~;$vWgNW3EpUh({`jNJgEWh_kjZ(vYH2!G*Heg0gtSrHsV0T7SI$7j!ZpN zY0$1l*gP5NgbvX35@hCMg?3E%J3B|1{gR& zr5}nEykO)5Nx{-=1!g(M4sk1{1Q&RJG>W0{p(q@N!YxHN6fS|qPxDltW|4PC*T3OGCqcQ?9c;S!>t zRU6cF61@F{!%6V)LU$5eg6d9!_XKb_37%xoodlPVM1&IPng>^SHibtMJSI>g4=#!= z^5Csw9L|D=B)YTU5>yWF1u7$hc5C#YxRLDD|m_(gO1|kSZD&TD^$VT zE+LHs(56fD)gBNB!HqS*Fcz#;FVR{7vl0h62%gyWvFilsL-Pm3N|;8*Nw_tlI~KeJ z2-12%YHLKtVzC6Q6msq;_;d|ubz2P%1EksR#FP~9$S){rk!HM+FRFo@Sqe_?5GLr> zN6_k1EKzC=Pf!r0*kcm36ELr&s1iKy2{st&Jmg77&?sspw6O)vF5p&`9%vT@bbS^i zD8a^PfYpP$P4M{{uzFDA0@AhtiiL3&W{3#1Waxht$`hE)d~?4pf#;Xc>=5$bgvWKM0<^l6di?<9HiUs;yv?$mrfJD*UJrBg?Ito=pxgO+;DxAImnWA8;08&8EL&l(WX$TL2w36*D zENh9%i$TE!3M`Px;L;kNIuH?4UaXe{@)9U%fM`%ufM}2ptQE>ZsRpD3WR!v}DEN~= zCPL#3WH7P5H39jyycjf2M}stfN4jzssQh26+zTU+n%b1Nk4M6lAP|tpZ3j zs(C_z~y;0gRjnGBrH21br7J72OBQ<@rUR#kr7@ z0_<|oz&O<5U^!b`m{0f>>=g_YtQ2so^$CHg6;-fT&^1)BQZNKJ zR6s2iL<@u&seZ+5Z@}#Zse&{?ph7+&AR%bQ4BwcJsGM)YY@f{q*#z@%u7rM9j0%qP+e;c8JP#gK4^*- zw5J_(aXchUAngjUp8S+l(B2xDI?z^m@XUB|2{=p@Y!#p^Xy|G{&P{PFD9};J1!;!a z4w|nAmC%S(TAW%^THu2ZQ#RsGK)a<9Ey3Mq6p#6)V#vd)Y4Q;mx3(QOF~O- z5R<_X54uT%2xH)3i`yu8j}H=x_6pSsV3rkxQm9q10>>$6YymX791`T{?5z+G9J+rtZwMZc` zuTsGyBqRWKP-3w{Nk(FcLSj*>LP=3(dU|RR#9WYn^gwn(8|?5bTu_t>I@-n>dj^Nu z697@AQCgG(t_=|(2-OcdDhMnKZexQl3w3pKb9D|;@OAWabO#@k2kCvoZB7NJGGEjT zfVG$*m?%M$8Q_$bUsO^I8qn6)R{(1Q-_($onw(l(oLE$;0I^a5madWd7|@j|2!BD8 z!d!=xnxUFO{bw9r0S^;^TmhaXfU4JnkE2411O_ws02MgdfYLq4`Jf^PToiC}g2ln6 zDcHgsjcLwV(3%U>EDBn6#l^`9wYnH)1j2WjdBr7(po1<;QlVaiWp*@!K-mRam4RIY ziC%aCfG`nql@H7?P;%2z$j^i3PY@GyYLhQ0-zVpS_O63-sBdBcI5|OW0QIC`!2}<5 z=K}4V$pjxz36q0Q3GiDX*@3j}2R@7rRsgdZNde3x1|BN~sC$rP;p59OR-kIjH?aV+ z^#gkz!4j64d1?8`0SQZ=kh6F}J$oeEV0~`}ek(+Q3aYtbj)eE})sbp3u!|t|1w5F+ z6-HVP1xkmuH;|G>aICK<18g&$qP7Gs*9xVk^V~uEVgLgth z7hZro0v^T$WuM}7P(2A+YXTZa&Mi*YQvuJ3!5s@TtO}Gbp$pDnE;QDF2c3=rBo?6~ zzo3>(Vo55fMup}&*eo102-Vc!X^0cFH__2V10G>$X2AmxK10O;wFNE%pEEImSq$;1;OBEC5x!weY$V8X^!2;JV;Rlo_<5 z5OHu8_M_d9V-hX4d10}QlAz#)K`_W2unINEKQzSC&mE)b4sWc0#&(g0?ICW~0d00i zE_IMylaz^aB%A^wUBPyo!ICcc&^fsO;dxjH)Di+G2ABqvv<=;_4@+ujOZN<5;sGFU za)P#8fG~QM4e=i+CllvE)cgfH-VS~w8z(FU!hHgdNlqQmW_aZNmoV2cQKNoy}1}u-j)Ip~LAVXHrBnGMtkgbO&0#=aq@GYM3 z={jyJ1(5M5lJJQ$S7R6;J#j7ez`(^ z5rmzQT9gVkPC-Fe0lZPEJToT;bX!zJUq5?QlKqMB4S*$>erA8o2LApHC6v|T-z}KHa zj?aW$$^}|(;uaBa1a9CI!~5h4prKU-kOcVNw4_v!_dxB^)D)0$NvUc1MG$vlYBAJP z@XH4;s#a8RO)SdEOf6C_G7`b2fdvYR@ol95`Rs!)^)Zp&H0Lmkw!D7MnqN4o|NG)V%x2F}vL0OU>uTvx_{)fSZIXMKQXaWN*B1bgaOY#*G%knc*K;ufOMW6uAEG{lhEmi=H z$6`ro#d?r|jPQ&~h0a0mfYKR= z2TtksAg_R&m7brN19DYKzCucBNosP5f)c2cRi3JlTv}9=ng_b(4mk-xQ>wj^0yw3B zj7cm?)d3|M(4Bms$Vf`e%mH`qa#BkaKsM&*rRRfuSDulXlL~J2C}bq&rR1c7VmL3o z7~Fva-Oid{u27s<3DyI4r9wtxv4WvOD&!h5J%w=4di?TKg%nVlF9m5&RY=RsOU!{O z(E+&!WF=N(SeRJ6oV{<>qUwX zP!k0-zyotUG~AIJp`hcCQ}f_$G#gmgyf_-98FUpbsLiiprJ$Zxp$=~DBw8U`3sD9h zM}VhQc#EG2bZs(d<`a1VJkqHo@b*7eh54YtVsOKh6TEl`X;KwGH1EROn{C$M_9kdU0#q4@!m}X( zS5k(C2v|4haz5|~9oW0@0D`z4v~n8ShR5^*yrBx&UP8b!P@KccMObr{K@=t2AUzSp zsV+jW;*$;Bs)a`vye-TI&K2-3f-p?|3M*JVgK`k4B@Exs1?m)lj`_uwq6wrJ@DKyI z;SMjf5(^4)Dnr1{@nVe%XdZ{hC1}$JsH}#_Lw1uuNRTLKF9|F_;4T*e4N8D|A)KJX z9Ap68*YMEr)c~Ep3mS!hB`<{vu(u$?M38<5IEuMI0}+ULfh1Mv*j+IsmBNjOIfX$5 zeDV^Jy5OTK)u8lIlnOr6($PpGH?crR0XcM_100&T!X7nK<)xNGGA}%RfWsZ)0nkha zj8#*kfT*acRQO4Pm*H?CLQn&08$7Jw7J-LBzzc&=Hrt4Rt|mnD0H$UE@D>Ow1q|ci zWivU(!!=ie1{dIy7f>%i`oo}BVSs-S=!h9?`2gHf4#+Pm@k`82)d1bW4i0_LcpA=R z0a6tU%>Y>BW0@MWn*CC~{) zgrl&y+#0hX0?z?pN23kX!t;T=6;hdx>;~V&0#LaFQz!x}b@;77J!6QwkQKn>8JUnx z1kYReBY6!xi~ucck!%K!r+^#^8h^nU14DBc+CUMcvV&zk#8OglNe0=vfqNnb*=^up z2PXnh9R-@=g|^edm2Yx>9>muu^)DpFp@ua)6Tkya8B}iQ>nk`1xjKfp!e)`6_aA|# z7eE7z>;XmjpguHfaZYL~d_9Glh5>k*5)u7)t%SENG{M8&nI!~M2Hdsq%K928fRUDw z!iE}?b5lTVE!a>hWPA%;4=7lJTCE^SP_+$Jr(lZ^L|gvE1s&7Y*H=g{N=yO`v7{Cx z7A2OXDio!rr52^;C8vTqmEbtY%u@h2DoXP}+~lInq*PGf6*MH7ngXi&K(Phww+5Fc zfeKELLU^kQoDM(%44#2!gRC}%CRe7p8t{14fVvyH?1~fXDsCiu5KH(#$G^k3-6E-o z&WweQ1%e#|YG;6O5u^eE#XG1*14pmEzCu8#laHsff@6Ru7Z=j3bZHW3+$AYh1LR@Q zJ;l)S2joXcCk`$FG7VWTQi!4J*4I}^2A$*!GDRUX4>TyD0J>iXyx11hq{kiP;Bz%V zonS6bPSDgO%z-K3K`4+5xi~q&=GuaXs-TAzgWFo5r~)lG2i5x^CGgv`ko^FjX@sZ( zov#gVEPyqDZuv@1)c{NDfKN#Ww-J!0_CO5_kWz3;0e49u0SGFskU|7B{RCGAE|x$& zHBhDD>F4b4OQ5*U%uCMC&CE-uPjL-zfS?rD$ZjCJxE94Iu04^w1`Zcei)%D@fl3pk zi3?b94IaXQv?{@6E;LubTAk3011V&nauBT=NIIdaKxwNMy37n)T@S8?ko^TN>ak5~ zf>H#ytN;~e$h}G<=&U2WxS&-vfS7M$N1I^Lgsp5RRN2FebZXQFQ$X>Dr8X!oO#+1x zYHa`wKBye1)PqJHk%e7qUWx`R`G9w#LJK=kxdB-@gljbwFH(C6wt5L=EtM#m!Qf(- zlftD_jFlQDkOm*p*%YA49^7Pr)jSZFgJx`zDiu(-2ei1UG^rTUT>@2|P(cudt;Y*0 z+BhLIW{w2~8enCKNO=IV8wlPUt_DxRLnh)u&3#w_=NbWOh$^`H_$v7NyM+3I&9e98i>>qJgXy ze9s=l6wrBP$WjWnpd0l-a*&P%tcXHtzhW4jpOl4UVl~p38K{*D@+ia?#n1!}E|5UN z`AJ!z3XjuX0U~5;tDp|bJm5oxK|Nip{ftWsSsx2`8iWhB&`Log zKPd|$fbcPd4=!JEb!s6VflV4SGLsV>;6;fV;8@d9Kn{DjOF?e5LXko^lBj5bSdp8b zQks(r>hkF*&^eBJG|a&31flkWJcK*G&|M2Ul1dMBco``Ez)pw63_N@wT(F_U#3Z!+ zi+o2tWMwGI?kI4J8C3*S=A($fx-BSzh)N7a7<2V=P%7wTGVpp;q{Yq%Ghu@e@Z7GA zS|&icO!43@lLqKkWpE(?t#pvbq0tsYxMEoh0bU{is%bJo3&)F7OF*-``K2WYrI5w% zh^yz3EkLWRajk}M1`Swna@Oi7fL#l&E1=GWl`G)I&B-~biA696WTt>FatAfp(ZjoLgpGn9D}`4?q>*2&PWAioFe!o4dA*BIj})>6Vj>z zn2D$d6~jdx;7b@l?Kb58Il?ONZ4Kah1&=-OCJxF%0=PYHR*;$r+>k}t{E4s!nlzBQ zNH{N_fcKG6Y=gUj4{^RSsJ8(dJb~*9u~GnSPJ}rIl-A-A?trcy0=2i0+RLz>5opl5 zI2%t$z(=Y{avNM%7-%@TI2+=M3B)mt3J+O)q5eW$pNWKUN@^^L(249Ab7CPyr;6lT|8hcU(&4Ph0 z1=Rqp<^abbNPj_5KIl#>qH+#A{KT!0y$rHfTN^pC!F>k0tvInb8(9ukNrR?wK?xCA z4qn3kwo-_W1^b$d6De?^Q_dP7M}v|FtXBx)gDYTcF;a}`X=p)*WGXE0!89Y{4qO_; zl9vXO7HC0>EQA`o;1U)zAA%#lgH(e$8X%V=7SMrs@QxEaFit>*SU?LgK_h91%!(Eq zuuEDH3P8f7B%cTIi>_P!ls-<%&DCj6;rhvEgWEPgD#%HF0g^Kd?OBAdW zLK2I!!TjQq#N=!RNEM<0ni5j6QV0%pc6N1jQK(UHbM*89Z)%45Ku00TN&%v$7OX!v zF*7GAze2%EAv(7>J(f!WbQ%KqY9>%5A*C+Rb}`UO7h47JascQ(*@&bKS!ZLb5DmJ- z6luH#p#mj$fYJ?;>0sTEYz2xBQ0#!BA4vt&erVSSlH@>*AC&S4st7d62w5fqS!e`K zs-UqMgkvBULKlZX4MnmIv|$IV3*-{eiVlQMgdNa;0QI1;WfFuLAkQMX1T(csL0td} zb5IP2B&Orc8)AAYu-pMxYHJIhUWd1G1VHN}u&IF8ucGi=g3WR8dI6lzK(PXMH(W{% zdiWF68jyL=b>-OAbD;YQZW1Hha9I13K?LMY(C7v9FjMSCDj-=3PZi+dUrroZn;1vH z!-x%>3gC`|mrw}z!UG(1)D9<_rEvcdV=3I{;Nu!WvjV9(#iV1d6fngK z@lbP0^FSuSF5CdsBA^PQ9K87)q%SisT`xH!vB)_;CDpM6JShxK)(VQ5#eRu?8X&cx z0uuS=F~}w7;7izH9?${p*yc2-aIr8jP_VI80BHlYuE4a7t%5;?i<6rhDEv9?6;N7@ zMld7bV;juL8SpDS44`h0Hi(7zG&3(f+AvlVG(iAb<_w(%Gy<;&0S$bSV73~DXw7u+VF92RfW}>-g0?~uu6TnSO%HM( za&#A$6hX@(3@afkmyr9=ptJxBC9okN7lO_l18sc<2OY!`=nNEOiq;l9T?;wx1$x#g zNE_ssQ!Y+uEe}0-45`Thj%K*QNGS?*(K@8|C6qQmfekKK!7hOuHwyBD1~f*IQ-v2O zWI!n)6Dd_>Y8%Fa8_k@YnF`vr3ZS_)PEOEOi+d>t*F<=4q&_gT~H4y&O_kcu5f4M-ve1p#zF zDgs~xgcIE^1#Jb85J-;Lu=`3z*nw8%fVL$d zS8K(o1>i6P2N<+G2GxsTwHn2#1=z}CP)UMT9mC9ltgc5GR17KCaTo-?Asu8AQfz|v zw&^IOg0}A!mw+xFg-?}(9R|9L9ki#rs06GC<~~p&Kq<~jiZXNIWf{UjdSG#oE|fvw z5>Tp%2g&)Qrj=mRSCm?ilbD>Up&u7htgWx30I8~Q7!s73o`K(#m||@ee5QcXT`{^l zAQuT>US{PAQV8{#9wh4YL9R>(Rk)}FtPqdpWagz3YdT{;*mRh&MKO6bF-0{odHOg_ zFUb!DowNhehMumVQqGCRsh}Z0Y;G&b_sK6$EyAuFEQO>Sltp1>1L$NDoNWZ;GIl5y z3V7QCjJlBG0MQ$BWSULC|hB}Wa!PT#2j!%g*2@NX@GzWh~W@^iV*)`X;3j< z#u0$fumX=?Awm!mtf1Ko$O$vhx*pUx2Jc2jO@+m!pd)=sAV*F?BL-BIftN@6r)dRQpe|Hm zaS8a`RG3#lwu1Zz)usztU<%cR#Vz1aNChnjMyZ#O!wi(kL95lk7fTeECczDZY+r;* z*(ex7yHLjRNDr+^9p188q86J$Mjpd8jG(*Q|>JOOqd#AiARnVOJ@g4&Z= z3~6&i+fks!+@M}{X_8NB9=L}Cuel&j!6>*H>ohWpL3I%*D}vT!h4@470mo9WfVOk{ zmF6a;7HL3kd`B)@AtIm!D4-*qK~o(1pgr~q&i;O3u0g?`{(h)S1t8TxNxo+uqM8B) zb4h+lBB&IAg$!tqw*jPGgxp*QEq4d^iood;w1_-ECDlN|7Bn(p1eqxCRq_GBCWuB3moDCZL%miPimZ*@CTA`zmpInldqXRlMAt^I2v8Yl3lE|Q$ z4w?xe!?>Vu){l-Uu1Ly{)z<@E;HFUws*FH=QzFCK8XSh;M3tvttDs$M%>`Pyo|Xtc zbqqXurU2el1J6`>V7v1a2#lq%Y2;}t5FB@60F{$Cavf+n6}WzY1Q^sqkUY%}J&6-K ze8nINRS0SK!WxNCSr(+lK;XSv_!nM55+yhxfHY!Bs32kJXebM49TH+JR2*t0gFeby zERdr3y!>*F+{~Pu%;J#zfc)aj3gnUmdASsH;vZ&|5@Ox~Hh&4tmM|{9qi0f3?bL8d zEJ+0&%b}qOIZ7N>P6f4AoJq|iD zLW3@G!T}y(w5A)BS&-{o3s9j8>W6?gaih-7f_v{DM=D@Qx#w*$ijWc0HN_ut z!l{O)9!NjPrQm1=b<~mW&?aOhn|~T8j9``;5(-IJ#RKymzKkURUWAMk#86vUkxK_q zw4jtW$V&`C3Rytj14lkMcu<9)&PNqQN+ci&XgS0jT9kt*hTwBSZOCP7Xi-jlL26NQ zYF>$J9;jjlb@pIA3}^;|TpSP@j`%mk1yG+<#f zV6cffW2kYA6CgD|w!5T4OEPnc<5LR}*GPf40&+oyv_U7Af;xAg6)T{HB0370#o!xl zKua@VT0K&83c%WR6bzt>L1DoOQ>vz>paC)n+#*X%&eki)FVFxdMz|7Ng?JRxK+5$J zbrisK5|X)GoSdM13|a;RO$AU}(4!pcEhM+4q!yH9z}yF#7Xo#diMcNewD2cCO`!sO zX_h+VE)8{1dj_Hzv;q&rtAsQ*N^^2RF683mgzE!!chq6Y5qwb^*46*%8m8cIgL(|s zu>|=QrY4M20^pcD&U6$I&EK!XpwEX+uwLI=E|8a73*0O^f_rwxz~2-enz zwA4Tsf`Q!_oLUl}nv)x!RGOJnl9>nEtN^kHw9OCE_+$=FEnzFk2Nf64^u@pp-Q^ED zsvNJvP>o8E7i-b%4RZ3!Pf10w8Wf^%cLh1Q<`$Gxq9}j{GOF8HKu4SqM7 zyFgI@&)=X+rC{X(G+9FPFr501@&D(b9(;IIpke4q}7P zo#)~LB|P{diY8dXL%vuMGM)sr43tC?K{q+*ftU09r-24eAq996=vD_*VW`s*!NpY) z^mP101seqr8*%zQsBeXl33Q=ufq5Oe&{G|LkU6Nx0B0U#FECw$YOByw0j(@= zrJ!^Pb(Kaw__%*)LIa08s2->U?dAq8X0QjHw+3Q>cE?~U1zlvJmjvopg3mS0F9Po@ z=d^-VFAxKhL6_zwLkc30Hx){X62UW@pfeGQQ;QW!^GY&vKobn0lfV+e2ibr+xrqw7 znZ>!F!x*6(!K@W3AUADPLMTOi&bL+o6&4ksgTO)MWF=^4V0Ep6zP>`Zho_HgytBU_ zXh}LOgMtF0rba;nWCJMqK+=bTl>*2vkN|Sxfut=+A0Lz&py8K;KAD4-C85edp#qVy zQ80iUwSa60sC|qlUt=-E5W|pkQe9$)#U<&ax&*ZE9O4w@;wm{mw*Yib9_kn@{2EP= z*Fob8Nd5xLA+FQPQ?OAmKp9kEgOo^2h^r*nK`VT*s&R*3Hvw9xg{UrJW+1Mv(1s3% zf=V-Ie_vmJKZP(ypHSCel=2x|=NrK5DRBkRU3JL*g(!fRC+eWpWeT99x|9vnLHkLO zmi|J@bFc;@xQP}Tki=09J?%}QS|QO&0VHOnkc57H6S4_#E1fV+0NZZ_xxWd;DD18= zhP%cQY?h8fGN{)LEj5rGq@$2*rI3urS;lZ@d0;gP>@s5%mm!;p;lAXIBDmvJHISW^ zY^_j>O*zZ~j2}^ygH}sG%5{xoQ1u9DvPb5G&fGJ4>c6Sn}MuOkzg%rS`vq%(d6+lKk)Zm% z7*vO#R3MOp7N8nHlpd%B02zoxu~i<$RzwRBYzbE_?ASU&J4-Cbc@(9lh2%RH6j(!(7P1QPelBRbNXbtw%}vcKf%N_m4IKr01-KOC zQVryGBa&&5)asm(nUkUcs(12AbQF?7JaD3fi0C0Jf=Gfh04RIKBbk+%mkF*&k?#K~ zgMheIXcU$OXHz1BWXk`>etB}D2Q$1(}E9kDA zXmyA__?Hx)g##ma;;x5XweMPL_KK3d2vBv zaw=#<9I}`U>JsFpU0Pyt2`EeJC}d}XPlpfVNI$Hi(ESS54{k&6pHTmp(4B2IaSZ_NO2(M$&=6!`Iu z@I~udRtm`JEx#x|F)yjNb}Z`Vjy7X=)NFgvv}H3gLY zhIvX%qH|h=Cpy#{2jIekGc7XgBO@)slMq^hgp2zHV@Z|Hp}`^kzPL(b$gGtHEaQPs z@&MhK4XFoo6jCzN(!ljHv~UC!1xUp-JX@peH;0RA5}ny$nHAO*0OfV?Rb!x11SScu zS$V7!pbkX3M*%j<&k$t=b~Z}Y;OiIw+u?$gl`%IhK+fXQQ2^B$c>E1>5$d*o`0<@s z?|FbVA;G)U^HWlheFiI|KzAJ(DrhTcfb7T2NuiKZ9pW>1x#Qy)6^Sc;OEOCHvNeiQ z(~5Nzz-&C8f)}MIkqJLvnF|!?Y2eZq=6(3-#@wLBQ)wQ`u6&q(Srb8L(xs%PW#)kn zHiR6E0jlAU3)P&&D$pPhO5IzUm#m|Zi0oiw9bn&RM1z`ZItq!gI`D=YsF{MOyFl_9 z;G>~I%@YvDDC0qPV_fzNv0O(Xi8%Xp6q0Z{0d!X0;SLNPg(Mw?WZdq7tQ|%eO2|nV7w^J-qoa_lqW~EJh87TnT&1Isg4>9*hJ+EO zn?aTla<&D?*_K2&TSp;-=u8bs;E?#yQApQO$iVG*NRVN5JjhC9_k(A7+#H?3r#PdR z0{NiPR^*Z}JGD{=ddmpPl2~YEteyxjxnZ4CR`8tzuwt4QCd_H205S`y(uAMp9%==% z0baYHyQ{dQG6#Lc8DyLSc$Nh@NHH7+uir>_SQyHYO0bDGq)NP?D8C@Js06+GAkt;< zh9c=M3n%2V#FCPt%%sv1G6N0Xj3V7>DMULB(j9@+2;kg~=tP0j3K5YDOJ)qDyOYHV z=?HjuD&|G*%E7P4fF)JdIZ)4m?zsT9Cg2UBh~Qua$B+=v6|P~f&LRFm3eFy`&fc(N zAl>qd6pHh6Q$e@f6zAuGI{rz;;G3R6qfOu`QH6}6)HKir@RI!G{G4L&Y-(nS0_27r z(6JfdD{w$p>8Qt)WF?j*#*_p*2YCjBSS99w?v+qdR8&;bR0r!*2g!rZ=q)Hgmj&JY znvtqdoR|x`RSPt;TTqmkT#}ibs;3YFx*HaB(^W<#N>4e+H9iaCAmpMJEE=CtlA8m% zizpk^4K2=BNGnQB%&r6

R_xilvSbnXdg0=OtO9X$J+T2WAxS`59NskE=D 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∾taryn*s0EMGAX(xBi4 z2L;@@)CvTNynL5T(7|z__I_efB|P#5ecF)9%hydob~+7`2wPshOHqCSJS>=~*2`cA zxgKORwIWh9FCTL48|X&#p%aVZdHK2-;Opu@?xrXT@h=hN&dc{p%uNNiqY-rtQ(7J$ z8-9(P&=Z&af+11Gz{tv!23z38NUUD$MG!|`eo$&bYGMgIg)s{xB_?O57v-1cr9h;} zDMcmG4GGT3FDl7M%u6B1G}JPgGcRAa2;yi+fKXl%v*qQ77bPOH8H;dQPHKfqW>G5m z)_VUUkSsYa=Kz^Qu4Ytkv*qQ3E@0s*&&VuE4F)Z~B*#IJ5W{v$GtSBj+yDUe{K5SQ z$XGvk-w$_LW)bKHAl;PwT%-;HLQ5vw|}lqz<&^ z5n>Hwa2ba^2*sFr0HagEK-A_KhzlWhV@Z9OeQvM@OzQ=~o(2z{rJ(p7i_$PiV7uh! z>OnLh`~`6cwn)Wv2|^d99q3asSUatlMzVpSNX@)rwWF@r2hm>Kl_4+Ww z2;wH6EL2@VM7p0^Yfs0sj^i$A4XHUs2F33qFYySj)2I$yH z=fr}I7u09VkzkKZ~r34(vp0L1O1Df^TDSFkz?+loHqk!Omcj~o?lu5 zN=yzJ z1c5Gfg)C|D$s{lN^MZ^CDN4*M2Hky0jzhRh@=KF59Kk&wa`bbSP+~iOX+cV2Nvc~> zYGG+=UNTt)8EVG~oT8!i5ta%TZ@&jtFCwnC2h}Y(iIosT!F?3mYCuI8%wpu~8q+k8 zN{|Zh;42U8=2AW9Tu^5y4|Lijc3IY>#1i-g3-J4Vp?0ENuM9p-0XokMn!iG^1Y!&p zD}qatAU;JJkw)kYE=_{ygjz_Z1K`GBZz{0mC) zT3$Z94+Bb=&~6JdiI_1jCFLBJt$uCFV&`v>f z5VaKJ&dV>+O@tZ`$!`Q5jJ~)KG>C(~ijFHUzbr8)6IABHrk$`U!@G2iD=$9`W(L%0 zpeO@RKBL=*Vi0CP;#gsU>Pn)up;!iS8DhE_i>t{q801%2B_ILoi88FUK;Q0mhiumAv;n_0#AdE8#b`FVPv&Q?k)OI~SC4g)s}NQf&X zH90>e)ej^BDImcU7_b5oqy$<(B201318G4qB^4}0k|_|kaDd#Bn3RLK>W7gX;-n&I z0~}#5LCDE6k}-RbWN1paWff0S!8YjbLryNI{6990P~$evli$>d_^@9>XdF2_WocA#+}7 zE>hMnOU!{S!rIa!4jUl(%jUd z%w%xajg`49F^97>FSEoaF)1|%Hm1zL3KGILeh8|Oc|oTo<)juDBX7cio*)BFyrA@i zd%F(EQfMM2WrGg(M1<-Za2mvFJEm^ztAe@mN^|{_OA^aci;0|n<4i0mDauSLMH~$b z3rA$LARfljXTY3}K^TbXXix-5L!&S;Cm^*bIW?~&F+CM?X)vV!f*c``9UN#)C1eGV zv;HtQSRt!{7=pal0(urLWWgH)Lki6IjH(bnGaxqHqqd=NM;1Z`VIB6c;K-xh!br}% za%wkzx$?@3X}3U@8)Q29P6mfMsP_q8X~34Bl$DxXLd30qFqM$#My|36%yJ@6|HBNy z)(=2d2cABI*o5dy!Zbs~v1Bp~6Tp5&RAZ1<1k4!ttQ{+8%N=O{9jNKS0$Tq8u>s{G zcks|2obhENPx4(CI+9?by4e#GKl z!kYL|1BPy=N2B=;8Z5L79`a9;MhhcapC?WKpg}uZ8Z*^^DscAvq@2vcQp5y26DLLE z;gG5xR`0@1hol57r6KA-EYdI~rgPD=5?g*+T5)O#9dbRJKg1@8FI*rLF}WS8k+5Hg z%H`NwiTHv6UxNt&1Gm z2LZt%20hR6KvIEYUUEi$5gl?a4 z1`QC}1q}IF1toN7onh!3C?sbdK1fP&$t*5O%u5C>1t2R)LSvh_<}SG6gWCwv>IR{R z$v}LN{0B3DEcX)D#E%*2)&@j zQo2K9oS3Y{1<46u+aTK9Arvv$2uU;H+uG9P(p{+8Hc`sLNN0nox;JCpMy2GASuCn+y_WMB$l!C$8i|~9#4jkor8=(+3tdM z)EcA;Y7s~~baWPF%p4>RUdM&BKM$l0IwJ$J5J`p@ThL7d>%q*f$OGmO3-PM~8w2qS zVptxe5h8{qB#~_Z>&CPIbAKMlL~Jtzm@2_WLM$iJK{(97bQWj`k0(DTrMRRrC)KYs zmx|{o2!X}{q31C8K_+U+nJGpc5aflqRW}dhSV*8?i4mN`f}m6gTVaQ`*NG_~ar-& zV+IU(u^B+i7$YmlXoxo;`vS080Cpr|4GCmLD9j|H>Hr)*B1$hceMqc@czq0(1ocRe z8%pf?dCnQB$=QfVgBD@L#~WL6Mq*xiDpUh{c!SoY!XgTmr@)C9BgS}35{uGPOTf;7 z9}fp!DZ_%zP^{iz%Fn|pj%qeh!HFkih|-TG{>ca_qO3yo9W=CYha6F665IMjwHp-p zu!;h$AOnSGPG)j8bQ={8RY;)*zRe7WGK`ZKV1)>4GT07C7@*X@XwHF~fXB(WQWM-O zu%;R#s5pXV0Q4M&ou}K@o>h zGQdI)(-1+7zQZu{GB`ZYQy*`Bo=bjdQckKfIA4&NU^!Bfa=;mjocP4*E?CyWmHIK` z4@(yfzvqZD0!!|s$g{*+3Jw%po(D<73O<|-GtT@x*R-_MJuEXV-5WmA$BCddjlhXHgdjv+_}ekcw! zuY-DqAg6*mcaWVfuO6)+u43@{dqW?%%B6rg*E;8%2k7v36z+Xe(Z&jQ+C!N360 z55H3jq92+L{Y@M<$g>9&G_v;}0g#^>W08J~RO%Sr0LpdO?cF z#<08(3KAsD1IoM5Nezr8=aB3Sjs=i1A|n-~6dZ{V&p`7IToft%L1F|A1qTvHCD=@q z_yLI$)DPP3O`O6aM>mi{uszuFHCz(r2uP^`7l!y38hId5nA^}=orDT)R`B7}f()F+ zC8-7AyHH^Ho|!p2wUW8GG>JLB%uI+iB{eYxw%;0Zqkx$ZYfdI;R}?gg!FLLn39;m* zmctc-FIP5`WQAyFg=m0|bb@a*|ip4jklE`@ow2u+jO;*{%;XZb%)H{%BG~aA%+TNh6>-oAfjN*p zFSR_lG^rTb0FV!n`_w4K4O(hrOH4`ePOXF#vEbSrdK^0>u0d{L%}p&zPld)H8!J4b zAS_Veup-i;C@Um=vJ_;dpg0O-5(ntsFOch?hB30joG-}(6=DE87Rhq(P8s;NTm~Ty zP_holL`&HQLL8u!jVumM+y+A2xry1SeyQciQs6X>>`$ap2kH)Jq6RwzzbrUka}+}k zTY?1>Mux$N53tFwq5@o>u)@8D9GO^J7>GI-)Z{`}jNuekyBuV2419 zFK8e^eTggQBUj=~@Tf+10Vq*`Hmbts4w+ct@rbStGx30(2z81es6>Ujiotz}Dhw?T;DRU#2QCV> z2$a$gB4B&K85ki3ib;4X0SV*qF{J1QDM0ctGzB0;!8VlUWx|KmN(#W2(_yK{SfEW_ zmgL-&VsOs^Qdl5GHB$INV-}VZL1*ED4d#NJZx)nV2&;h*)e6{Tco|fbT8L5xfjkb2 zF{tTC2_CCzsCQwip)Q5H1*M_N#L5CP15%bkbwDoBKvRzhJY*NaMUlb)E(S?$P}hJ( z;btO*2S@_-QVK*YfL($r$rJCZ0`DS%^djOJp$|Un3+p;^fUa{$%u6Z8h&-?(LFo_b zc_vt`3BC|S0vdRrjuBWTJPksXLyHrLBS6&zvQe0tL47jkTv(f)5#F?byANtC#N*ki zMR}!sgSq2m*Ae&JG1nyXLVW=~}!tkSl@B|+?-Gh7HoCT2XWoj`af(h!77zi?O z7J-gN3oc15fQ2DQ!i*_1g*m>=T!;>p}^CP$;0~6_n^SWrdiE6fY=+5;X7`S(!3Z1R1#UQp-cY^Q|Zu z5){d(+ioG%KRg^kduhQ7Mj+zgqysK+z(pq{rwKA}P&2_1Y9`o1&4fTp5^gP)z=ejFAOlBIen|$hYgyphV6KHkvoTf&8{=@WF*XMq z!=o7~o>)L32(3||(ZtLOcLONGkkSO)+30NzkRj+zLs&ep!u`mKNXV>6iGUT6;0ZPT zkR1+Al+Z#D>T*U2Ax>~+0Hr0U7$iR!3h}`51IVo~IdHqsP>2JRCqU-G#KGBu_@Mx# zLKMLXC|D^ZFM!41AqI&rP*j4& z5pIWuG@59Bo@-H2eh~vVXK->xYD#HNY7sk33=*i|WfssdMJR%_bung3+4J+<@{>yu zgTJKCL8XCoLsJ2+foO=kKm%~O#jtt@JgJ7^9IA}x0`$v9dV0B)@-^!DkmiZ3W+@hLK#5ECq)WdJuw~4VFN6 zEoN|FRfg;kqT&)yv=F5q(_K*iBN8Lg(L|JmNFhi{v=L=Ca_B+5!9tWqBu9ax1zWTd zWe{d?5~U5<;UEX#==*Z!=Xs}Ay5yJV(RMKcdvsm}1RNtt^E#$!Hr--1&LF`K86F zv`>DVxgdL}p8zpRa}+PZy0j#=M-Yz1QJle6c0dvx-P$Dh{6PXonBP z6%2@plH45R_1g&l!q2QicmbMlK_e5mO+=3lP}d7;DdY@fSV*HfoyDan5w^G=-3XT4 z!~#>O8EoLeUF>FXfXwjBOUs8k6x|%wG^CRj;pGl%L1KDp1lU-N>WwumCqJ=-bmJna zW*mD`X-P?b9&G##-AhQJix_cdEQ7ijDW;fG3!x#%#L8F(JG>PVBN*Oh&dh^)8hb$V zLr%$tU-Jbu8J=XgGV}6Mi^4NgN-`iWAo^-Kmm_kA~&%Bs{}Z2fMw9DE!Yqmx;PiKY2uGO zXhd3N#sO}a0A@-sJj~SX;qS zMM(l4rd|hy3#?i}TT90YErn@462%TKs;NB|g)wA<Cx(fTnKY=0=tVWC5eeHj!_128cXX8~ zro(F)r1n1cjt{6^i^Fd0CL%ZeaT^KsC0GHDh=7JLDE5(??VyMRi(&U5Rwk)7H3YV{48Al1^;$fbD)1^{P@pg{(9#tkPe6w|*h}(} zFTsJi6G;Wg^HBFeRxyLz#|n!us0?)O2`xPaL1ke>Gayr8OGqHAYoQ8|tp%@*L|egw zYydp;2ivAHq!a@71ANIOHcx_9+#rv1u!0jdWJMpkL1=-2Sk8pLCJpy0CW09ivhoP( zQWCbD!E!NFCwS2lI2F)idlc9r@ERvjP=Yc&V%ZdG1_Q|v3G1SpGw%LNCo20@5$!ILe6zW@~72()C11>A@tjk1R3JP{1EJ4DJ zhomDYmkX30p)2!Hub#ycz96+=VTi#{SHMM)f(u;?Ha3YRKHy5h@dPgrKq|2W5<)d7 zAmE{oDh%^7SQNhDfHOaji0s8)Qk0mSomvD9A4n!K5aK8(%1=jH8Uo1y#Bas|hZx+s zP{WZk2-x?SsT7)I5T3|QtV~J`PR)aDAV93Lg}Iy+?p9ps8tfQ~YA5J+IjBDn`4Por zaPWiT5nIAQ^DkH}7GHwJL1utWh6f<3FmimOZWX~6=b*9_R0FdVr=}wBHwW7QGYaZ6 zMo|3@Ke7kBj1?&ZU|kN2&q}0q({Mkb+lcK_Xw3Z|pwti32@VW+3l*FF&<#w8#q!Y2 zxS*hbrZBL3Knu>9(^Fv^IGGU3>tRU=w$vZgdN%-RM{B)*1~t`@?L_to zR0$(Ic?rSngUUd&qaXu!Nor0GbZZ8@k^{FQ(9MRY8K@B$nGRIsK;;kzdS(k`?>h8oDoiX2FU6vG1%lr=CE zLsL53WRyAtD$2kCPKe-y1dddwbKs&#euj&I*Pw%v96|)v#0HC?co-}KG9OD^z~#U} z0grT4VU!$$KA_K$pBG%3l$(jPfEmwRlt4id_z+8%)U?FXoD$5%%b?~>ZYHjIDda>4 ziCT2$h(J~^2cTF3jTrQy0+_#`F@ZA6g?*VaR@1?Og>E*;rC+MeI30j7)(Hx7sBzE=21iJ7m1mY@cx0xez)#*`L>cBJ&03Tp zOT?fp-XT^LJxnmaXMmjqDT>hZFiTQ?KJ45WPEabq+F^hSBDYm=gaJGPKxTnk3`hYD z7Q^ZStTGVaV3h*J2}lBmE6~P5(K_Qu@r0R`#GH$Z^#Y1gp*vyqf>Mj~bIMX7SB|q1 zt)2tCkvY{r4dhCUBn2@IdOU?Gk9UN@}UPZ6DwmSE0SSQh2Vvj7-7!> zaz55@g4u&vj&Op?9pBWH%tV&_yqrn~Ea$_cUZue4pO;e^SejY{^D)887Z5rytp{B{ z!3nb1IU_SC1?yEOASK)d#i^w!`OZ0s#jtRN#}5}syKXXAKO}gtxCq@4>@EQt<)0Q( zSpZr&i(L&qr|^KClAoqq0y2R@$FS!YBqnE;RN@R2)`Ft^0z-%`h-*RM+8`1*!UCcf z(}#SZI55rP0h#3qTHv3Tn8N|umYG^q0#7y2vInV% zU`s40K#W4co7f!CaIj*9*az_!wuAMtTL{h&nAV^R!^>|>kD%Y<1`ic%R}7#l7NY37 zaCU!aB7peX6G9Plg%wOEVeepZA*LqmR|n$_2`u*^UyxdqSc2mcVSK3#8l~{G zi!ccyLvi9ox|fS1zn~<&D8Cf6r4uuiBPqmt3mC!_oG!#=6u6iKjnlAzF4I96MEFK9 zgj%SjAfupN45Z6o7*#O+1=+L_47!pk1z`-f(iT}I@)RR-I(d}fz7~F0%|@8 z=4Mu<`lO~qhb0)qA%-$A@s^}klmw;brKA>R=A~19%@sDwAa-F%U8oH-F6aE* zg2a-{q?}aj9^r*~B)9-{O9ajQfMyRhoR5@B*+9O?2W?8n^d*uqy!irV22Q8pG6QC%>HXoXH1CcZoT= zpsiJ~Ia5+{B`DUBhp3o92i-t>{2(?oNI=S zrw|=p5Q>{frY7vI5jc=C48&_#(j-2!FrA7X`fT8oLboO~B-kN- zVW2^Dk>7lV1O%-c&$RYG!G<#^6SLI!PerzhhC6PL>+y>;%rRgFdd6MWRb1GS`Xn15lAp1f)~Xwh$I%r;xmz0 zXM-X#JrjEi6rcGJMSa55)#C>V?fCT76jN^FCZ1*1O;2a4IfB>Cm)Dc@FhlL;v)jPE6`ITT1y4ufS9#$igMhc>EHvAGXj2bR1Da}Ab?0bMr_w6uT(4MZb+bq*2EMb=JOITp7P)&vW4 zuoLN4c+fXsh%ZLaBM>EYXq}_!8z@BOZJ7W4)6$AlOK>(fz~w5&d@Ua=JLf}mL()IK z;?OAwMId1`w@tGQGovsJslT{J@lfcsi-~tp&X2&^>191og1Ee~C|y8WyO@!HeFzv~D7M5*%4jOWB%IE}XB?)35#!ptun=8{Kk{ zW{5PF;sRj;W=w1n-VcLuyp!i*Zt{T@UBs3t2S@%niIKbsh%-{e8Gb{+OkBx#< zfFlBP5e75@VV=isIz%s~9D2~=cLlm?w2@Dk6R@=U&~?%y{Lx&8>3L9~!aQt(wND08 z0S-D7nBQRC7kGIAk-%5_m|(Y=7aDO+`6VU!x%jQeoFay5)=h%wChQ7grih`2;&Bmr zJYp$lAWk8wB; z)kwpz!R2I90| z3=yIV9GK@Jy;Rb&Ev(_8TLkXnLSmT0d`s9pL}UkuONeSY@IW&z#QzYD@B`(E$X3YO z2`k4^$Pm^93udqr>6Ult8!+VOUX;+Gb@ruipb(XTVJ(J`eC#t6pjHLA=Yi4mhgFff zCHZ(}ClLAxr&L02p>EdYg62Jt&mkE%7(x+K@TviEi8CL@(bveX_0&d4GLNX z3HccoDO_lsUFjDb1hXn)iVJ*gDvb{kfZ72`16XQg5}Wqy1&Nt?CCH~A@D}8QM2f%{ z9~4vGBZ1pMx|2bp_Nd3GvlJv|BKE;Bv81QwIf4i$$RIkJ;@rdn*q|gc>?krO#ze*> zNmj;0R>mX-R*+stFzEzw9s~G{Jm~Z)@(H3?j0QOmJPE-XQd*Fcism+Cd!S|`FW7^b zjafv2ie>hK#5|Y$@;pROk-H?nG&#dDxg;|`kMc<2C`ioHO#xW|aT-+;QXZ%WLQ@yx z??jTA^g&?&Zg|nk$(*1-CeVN;(ao#{iFu&~v~n;T$ieV?5h+g-ECq>q5wvnFC@AnP znj$e|L2iwtsax?Zu_D2(*cab`%8UHsR70#o#Q0XmK(aq#nF%OUay4(XNM~zkIN-2(nqAPyvadDMk%UkOE{)a0h@S&~ze)2o`A+&x7Q_=7KMk;4DZiDgmE*0ADJ= z#Fkm?o}Zt>l9HKRBFMm;n34i(pD=^2&w{LP0;M1!rV?0IgkCu!#8d)n)Ijh4L0ogi z3N;rRfK1>kt)L5SB_W9d;V!n!yyDa%*fJnyWVNhJC5EgZdn7?D(lmm4M5qD4nwFoF z0y`j?nHA()Nkrs>!-zFCx1gjFs~`g_IFz7X0v{g@O%t#t6q;>dqtL{_Ee)v4$09uq0FfId-t>gK0ol2#yxmQYz4meI=;{ zlJH^y&R}2#`yJ|3Q8Sw%L=ZK<8A|ej&!z|GB#_JbgHuc5 zQ*(0TlS(slN;2~xwlgrYLQEt{HQXxXfW}DZ*ldLdCbV8aDa^ob1?MzGC}Gy@NXu2h z#XQ#51d<}W>tZ1$K*9n`m5R$4EUpSJOVN}Y16fK+sdJIdBFoX>qzY;! z@`Fx?)pLX$?_A7YkXTZZS_C>A38xx9$dX+2gTav&T|kV0x{O$JFauHy>^Mlm!|q0+ z^^oXha?Qomhm)B`+F4^SrpP)(zf!$AXMOa;kU zQwPc+{``JYdnH0rSQ13;Hzg6zf2&7gvayCAiwxF9vTB(n@LoW;nP1K(uH zSpuu%uoS2`hccmlfv#7>)&>Pzo?Kk)R+%?Y?3L0!}YrDn)lPBJk1Of?Y3HL25~6Nvd;VK{0&nnc|~z z`H_y=1({5KEWv6*Ziq8=lR@r;L<^R76wYu%gbHNC5mP}X12;5zg4j?KLCT)@~yKsK>}yb3-51ic4D zpr-)Q4|Nc+hG04zN7n{oI<~BdLjx(UCE68ehT`-kcR@~Ka%x6?4&)qqoa)fbg9IL; zuYh6IE>0u~4@Y?IyHv!PE!JX)FafrNs7LJH-t)OBZ~|4Ah-ioQcmwOjmiQF`ojs5;>`M4=i9{ zkxR5o@fnKgc96dWpn(8c!Q+^N`?3}I@vczU!JArWu7f$6IWY&;lEM+Da1*gRO%TOt zZkbec8%r9At?cO3ROX9GKz^6@B`IXGQMS|nq4EGNXVjwRU7puuMa#9fFw5y>cs z6qW$RXC7wc6L2#2gKO|v0dW@=Cr83$Fdc!1IU z83AfV!>%dkbxBPsO;1lP((_Hs%;PG^FUT(~3Cm0^M~vUG=H{oQ<_I!yE3HpErJaE8JWc;`9+l>`H(yLAlk792XAs>az<*3 z2Sf+dT1Kd^AsWFw2=G;J;A99@!wm8Vh|Q9epHc}`iL@RF>uDU=-N0Xx?^2YQ4w_?6 z%}XtUH+Nux&z6%|nO|B08!KUlT86D-%8GpWEW8=OmYZ0Vo|y-8F{1&=CcySUQ(y!u z_)J=u0W5|F2C5`GgDoQ!w2_H2L%>%U>82&-X697FOybPV&&w|^NK8&8*-h*znZ*S; ziEyJ>(sEKONH&EJq)Rs?vj{X`mk&Ka2xoF}%So+pfvE*0LIwr~MjXk78R8b~W^tEg zrk0~7er8srQh*gbFQHk2&uku$*`S0Sm7fQn$R|NR*ln&A1&Mhn`A|PH!?bgyLd1QG z(_un9Fd zsk|U7D?;*pGjnn>ixJf}s45m>%LR)f zWM6~=_M+6n(o{s%3Y#ln2Ul{Utc*oq23u+cXkr1xhcekSQWH~Bi;7`&6a!msYDq?Z z3aor(3GfdNVF!6AzqABb?ay9Pl$e~IT7*j;G}#2Q6GTHj$P5Z7yg3>r_rgO0=24J# zaHd4hfo!0l0$+@YQwiF@8`MScrAjapAmY>?i-ehvEftbC&I>aU>SD}%OPsOb07GgC zF&E^Q!{-UW9H<2#h0wTz7OA)<3YZIu5N9?sL6+6Rk`_pgt2`sKBsCaRf0I*WK-`0E zw2OqY0jUcGauU{VC6XGv{SdGL5LaO-uyC0I3Quri1~*p0W)NPp4^{@X3Skc?D#TcB53vT(u>tFZ2x9RjhIY&Z2`Vtz3yM-f2gD+35Y+U+QBahs3+fpThC~8$ zF!+pPSm}zEpur9XonuUY2ZIs-I0c~>hoC^t$xlpyty{p>_aIOn!i|7NI8M9J%)yLx z9K{ga0&Hm!haNP$AWlOhP`Hs02`q_}ICDXM1=U(e+bobbA|R?{@Dfr;*Be?lg9}o~ zEHrCzK~5%Yp+CHH$EeQ=)`ihIXJUeN(-|0;SRpTR$hnSwBp8Pp^p-yo>r5DL77laO;jAq#H5Lyv!jgb_#- zO()9E4n%-M`a0mfF5mz};=@9ZkqOd_0>uQRmjG*1K-|dyQwXY&5N#LmGHu9)2nGfr z=E5S_`XmMhW+Yo6fd%#gxJv?AQV%tm8EhPyPdE}&QUX9bvcQrMouGyD5WA4fLkSY7 ziHKyQ#){%5h&*^<1upwQp^9!DLJTx~0dYKB48;MM`506faupP%7N-`Kr5Yn`xaNbe zOaU+3C8tV9tph-r4Qz|9F>DZ zaOvXI5=M3?11yZ31tBYCphE=^uY*pQ#*7xM{^5rj8>F zZeoE~K76kWGnS*pu{w+o5*{#jfl5A*+n8eVSYaVFP)-ws$0Ih^A;s)KIZ&*iC>54S zT@Z;9ISf&fCrknqz#xn$_MyEdXzC&}O%bULEygi*VM$e(im)ao%orn5BaV=yOgEx! zzyc~Vz^wu>3tn|{GGN+(T6c(o>n-p_F-S2CiaaFD#lXNI#04I(2djijF@vqc){4a% ze4FCGGcl+%2R>d4H3sZfo?MVDsI8QV*b&J9ajg(H!XrrS zO0Z7^86X>nvH1u~s)1TbbXg<>cUC1vj@MCOMRBzt0~`3Jonjif1$$h;axkcPL=Go{ zB@j#_y93yd3IsK`GAysax>%%}#Oa+{ znN|d9en1_=2Bkqp32}ppA!y5m5t##3!~n~JETEc?5lo^<5sYM5jBq<-!<<4yVgp-6 zwAsX@HDvF>+{8#Y!Eu15vq32i>Th-^4GKS)F+?Ud=ls&VlGGw_K?*g614?6>2H#@@ zF&wH6N`d=Q;QkV!dKyb1h*?r&E&H*QeMIWSUQ$t{8BueBTim>9pyMurQ*%<2OW?bC zpfmbHeEB6AsYNhJq#6UPm8+mAA9VdWQauBi-wppTqgPanI!LaC`UTpogQg}XR{TCkQw>Y?L}WT_ ze#M&D_)>E-OQ0Ke5i!HaiWFOLYips-#%Qd9VhBg&1Q$j`7m?`^&1IOn$j@OIQ3iG; zX#5j0J`Gu&DNs-ZUaIPnnwD6aQ{tZo&kIbfUP0Z0v$EUq5>8Y#aM=gh|!JdRP4h;d<8|BxtXA?WRU%* z*vbsdXyZ(T9SHz&Bw}a_-8_gq7Ej>zo8Hd$S82#Y6vN7uryepI+<7@ilJOaYgl2=fLsHBTnE_;nwXvnb{(iV z!DA}2wa`H+(9S>4JlISJsDgo;2(yz>640#+}b$M zc4@*}v`o5o41_eZL$>?E4j+OqeGv94&d<|>NJ6P1f`)vp27G-c7gSu&GlifTY{B`-*{QIE#{!F2nefykh>V_3ez{L-S!#|RT!^5d z>_I4tYFJ^W@_?4)=)oijhIK$uemdwFK8W|&V5SHJ5i}20gg^{}jY1)t2ih10$^pfQ$Q6QiW)xifeHF?Q zbC3_wgBS#kbZ~VD&g-BgmQtFGG(*RpSDKrYT2zcwr-N03=aXSu)gY7MU}K;?WY8fZ zu-IT^g&6|16Wr$kt41;kltaK`NG4!bzMzR|h(|&734ECj)pmp;%!as?V0)9xIX|}` zu_QAoCl%AR;IzHBn1QYo9#l)g?Y#|F$4+=cc zs9hz*0Su6HOGR0k6N}Oz>oK4bSe%BUA2UQj(qQKp!TV3(6INLgi_#rIgcE6wLMmvW zB>~#_nJ6pBR7Z%j395!wEsP2feNGU4Q12p2B2>GudlMdt*rmatU!)C%s9gIVz2cs!Qn66i*9 zIl*rug|&Fs%eWxMf+7WE6axbTHLuq73!y*x!42cMD0Z4d*jYSS{*rgQ6W(z?B9BekxA&zVVa*zvRaXqRH z#D+O1#1DvjA%(CQ%>{Kl=<-X#O*5DD$AC6%i~}h#^@4 z%0|SOE+TM?z!8jMlPDIO#F1=*#4^$86A@y_kt~MA666pgHj1ICAK7Tw_!n{tg{6LC zjb%fr6eX}YmMtm2q$EF=h@8aflwT2?k(iQS4mCy+N+UavD=EK1w-};|a4O_-PAp0- zK~8~ESj^;32B{)C@v(sJl!qE44W*Ht$da6sSwMt;IY8zhT?HkB#Vk&cS-PNGCWtVQ z71^V*SWIIjwr1jX&d({$%>ysKgqkA4A{LVckxV8!1tFP_oFSD6nNMu4 zghn5-*~(bVhD9H-#8hq5yk>K zR0ZlBH7Jd268I1xBHY9YG6%GJ1?ER}EQWD`&jw0LEY2jxn;ak`-HYIbng$jVIl(5T zgA@_=D;LPX;EbZoylkjZnot_q$J}5eiy_Jg8_EJ&JP$QS3rZs!#{xS1nuq}80GWf- zo72W(7AMFoT_XE&d@utYQ?d|;jOk!8Rse3SZX!f2VQ+JTO)n`*ElJLR8mSAVk$ukt zF&e6lu(6^bW5W`QGC|um^MX@LN;31(VM$64iv{9f3(8VkI9f>aWYZ!XY@9VlKl z!(uKs=-3Wj$eC|MxR=cre9RrxAaf{<>~rWrctn`R12GGwwP}IHL|(|zdc+UGa6t@4 ziXuxa#&ScAB{HVCA%=px3{caopfs}gd7!3(I|@Vu0w=^+L^sVEi=kXlLy7CAvG^ty z!>SP*ET*yKg5(J&ARdr8XhVgzSj^)EnWsy_AR!0HV5ADg4vV3jU_*(lP&j=PD^OCp zJr)zWauX|vPv{)Ji519gEe9+na)L}GwxPx8o0*5=Mn^0ra^+^`k>bY8JY+Y*E@nqg zkDMSAiFG5Ne^ORzatT_TJ7aMue?C|xDY4GxpO#h(U-;>Q#Zb0Lx-I5;m9*Vz5hQaYf4x+)#sw z>>%<$3=PUJNi2blw|ihQ78Vpm5QT(Y%kE#0n4DPxTWR8n#Z2~ms1m}au|n=9fEeNh zp-?I~R$@o)+5JmPK$RBM3~wlnoaou}p-Kq5iw9~Na-Yx#i;=ugBSGz={30R>c3!B# zkm!M$=nJKh9m@wZ84~YA7!7kXa^CmDVlv###O8nYfW(v(Q0oF>m_LLu>FwH5Vxb` zc0SOpkRXM+iC~q4jpho=EY3{I%t2HfF<8vyDnqCuY$hvmK^Kd~ILNuzM1(7Mcz#g| zYG*4Bi+Mbt3l-sAE%*|9_9}34t$^x)Q z{zT|QC zjA98sl)Z}Z(1QjB%6)vG@yX<3s0*PAAZvR`k4LC>W=#KJcMp1iKwW_@j3=B>%>`|D zOf4#@98LGIw)5al_uz;IZ74uLkra{M!AA_>*sqRI1xa||W0(o4#Y~$xPWeQbj-}AS z+_{WU4s{HsMR+uULV}RXv8HNnr0o;vPGI6gmKD#-_sq*nEduT5_b+nGFUoa9zQL0b zQg$Qj5X;N=N-RqZPAX}RT6n{_ATJQNr2|hmVD%$W;m?V_4H0@Z z0>My)xF1sF!My~lq9BqC3|NXZOkW_J016A_N`ciaF{d~cBudCRn5hO-qYHpaw)`T{ zQnET1(Q#K*Rb7hIDfH4j`XN>cMu;2ZX#&cdb>)nUQ`2z$|WvqG$g zn8kqQB69qW!1O3#t1@0r4x$7>K_Z z`LMJzP#wyPRUa$Nc8EFH@)AB{FnvnU#h{Faoc-`LAh4c=BZ?A?nCo}J#~3jemlT1| zR)Af&gLG06v>^laFnoP4la&=KNE=ifTwfu(6RHi<$Dp`nDxm(=^Xvg7kRv~!E`k+% zAiE$!SQ0bHF))poPDN>v@#m!GrI%zl=jVaCbE!q(h{0Cjvlo;mrGSPJQK~H5M~uML zLtF_CN#ZIW9JM{%Kx|nAOHq&W@DsQ}P?uqb5I)mD0R-EPjo9Q3y(fpQptPtUCl%i@ z?U1`=AXYQL(;Z}`4lHs7i_()c42{in6bvnO6bwyFVKe^VP{evdJj7U#53 zv67{rv^WD^#xOA^vL=Frg;+`wGhy3$8JL+NqDY+yh;G5syyC>P)Sy)G4Z$G@Ey#UP zZr7Y#J+ERU>mXiZVr5JO-M*fg!wNATBFuo;jEA8U&GDGl!xdm?W#DGV;s$VNLDL*e zo>2v43M>MJoQm?xi&KmA{1VGD)4@GCc2Jmw7UeK-vqL4}A`ma2mICP`R2 z16d7?b_~76B}ItQUPe~NYzDYCh--<}SjND|1`8b?Q0Rd6{DTe))^<;vrQ)K2&EJ`nic%_IH7Bn2NvkXL8A>qefP+HnsmVX*CFW!DgrwogD7v|SA^^mP|Cy=iP+^Jk%U=* zfhqu|f(ooBh~q8(A--o|!qUJ5naLhdfulBp4SeCOjUXB^or>2vn97lMzB3kL^&gT7 zyxZ&<3!$FH(&EKs1~?W#wIg_cJ;(vby)mp?+7Z@(G(!^*QkRg>j(U(KSh`mj+u&iI zf#q$4y_kWBp&3&ND7Kjj5rq{as8s~b@4EZDL7@UotVrb_np2?R1X7D8 z!wPmJNP-0^wSdAMT@2px2T7or!cz#k4J|W2&o{9s8y?S0Anz5Y79o2BlG@O;vlizh z7Q@#0F@b$poC-Yx5?v`c)j&PZh%JP`4HvAsus9rIGiI*Be!3rH5!QkXUn>;mQds_B zgdYNiX(>K)KyHUMh9sbk89n%@wr^ryVtQ&3bCIJP10TFS1m;2C&VcXkPZhlWr8h$Bui{Y!Gj;H4q*kjFhpqJiT723TaTHT5U0cNUon;BV=Jq#7ZGGL3-qwttP^%z1J)mqF*0TlzB zMX8A?;YFDxp#C{_B`8Ce5O>1QCgK8V*DVL@he{DP1nfdkgArr?1Y}x%UQQ*xu>zi? z{QMlWc~ZE0I6x-&gG_+B2B%#p#$dV`$9N0ae5ebF)`Vge#9fGz8f+r6i^($^8gpG(DPs0oz?DZ&1QEFNQ*7(C$@j=}T&(RQ5Afi}84WCh@ zI5d(f4u!2_BGI9ssKz>g$y}70!$9QNGFUA%oInObt9JsuY8>Sp*f4B~9A9`tEJq}G zuptmZ5(5M?=0J57M^S1{BIvwtL_r3>z?$-63}HG>C*v%~K;aGQ262ZL<>)z;X6B@% z79q@ob(xuXKueT^p%-0pfxE@2C8$SCqSoaQmw+y31K9v>Z9y9;ELn&f(%=K;jQXr7 zRzTVy=ni8q$p_t+1Y2tXI?5WKyt7`49mDOTTv?H23L4L z3MK+^2<#{q)D|mhUkVZ`ko7=_32Qu-3PCJ&%u5N*&Ma_FOwLF}>d2ux0OkbTojGI& zu!IzqVmS^IlzN$qQgg8uGI$63AmM;>?2#iVH5cpPBiJ^GW*noBaIKh`4X=wpQHtzk z?xNJ(M9`|#BBx6DmD(tR5NCkLu%Lw!G?gRwIzYFDvOz9(MRX28WAQ90naL#>*Uy4) zGUbA(N9yrF*F%8yfKMs{&3VG35b4rXuzsN+C(wz~@u@kv@kynbIVJFgqYx(}&XZ*T zG2uQ3Yi15gh27f;SIr2zRW-g0ww(_?H36TiU<8e283-ZfDj-v_LX1c=Par1?!N)Eb zSio8!Ss5JeVB2v!ofUk#IzlC@Q%+(s%mJV|3s%N5R>mAwkPSkN6=2g@8DT@!Fs~p= z0I+osLr?<%ixW^4AVm*sydVEe5PJMGLMAgvn<`<1^&L^BO2Bg$nDYpbxdM#o6R686 znL&XDBs0wCcxQR=DWi| zKrvth;m{@uAjK^-Gr_H3gt1^W12Z`_8ca8ghFZhGfN2~KcR*@6*oJTh24+ZD2rF}b3nYkn}9aQpzE@;k6Pc0S$U)2m^LH)(Z4zW1}Ip9Edr=wm^2Qo(# zt{0{UW(LSzkP;NG6SHNBeWZZDC^au76|}U%Gp_{K1Oq8OPXV}rx|t9YA+98`8w&Rl zWbF@IQEEYIB4YZNi7}5c6)DIds<<-qGD|WOb3jKlLTqJXWz2*10m1XJtc(0V{`v6jX)*kti^AW2Or1S&ADH2#~|8 zC>_W_F%05LEb)jhgA(g(PKdKzN-3ZHMKX#kC&ObKoGg$c5UFqmB@jqk5mYdMQXE_t zX4E0{LFG_&Vg?Z?zq3OEBmyzyMa#U(0kKUN)*HkU%Q$l@UiU}R*ZuIZElfv|;C`%& ztQ8`sGnOf9ROj=8_Y=Te07>R>5_I0L z5NL%GT!a~?oya8?WGD@~!U(Dt?j}Y(@De40F5~jV*sK6GiZ;$tCeB%SwnM;5VcNJ4 zwt}Ae5fV)>?!Z9<^ByB?KQJ^pkZT*1m`5+kKqXNQ=w@+P1G3Rpnb<*`F=vVu3b85yDLslbgF=pYAZnHR)N z1}4a06vBYy{M_8cJml6l5t^VEy1^QP95RVHIr-(z`T5zIsl{$Z`MLg}+pJykL4&i! z3=Awu`6-p6tc*oq23u-HL27adh!175XQU>kq!tx}gkWs8+|-hc{1lK7l*wL_nVXtl z3f2f?vzHVlCTFJ>ft116ps^SbA4EfajdArjVz8bC5fo5gfnpCm^uS^WmC!)LEa5@b zCI=`^G9i8F&0x7_O`ANEV99ykQ)4$esoXT!{UMg%L;wqIM6l zT$)qDQIuL-ke^qa3T^cFlm=ao)6AyJRi~?P|AcR!1GB7a1%|fnO zA(k?`7QxrSLS^9=ut6+<8qCNFHWbx693hYrALa%ll zIpG#TjbapKg`3V*T#{H)TI>wE$(BI~Tp2@EF)-qbMvmOX0&o~XRbw44L zSmDVHs*;fv#TKY2Wb7NB64;^IQ6nGW6I5|%x&aHK#XeXJZY)ZCph~er(*sx($q=|l zF*C9l>X|8eL7-xwEL8$r9F(Pk4uOT1p5RSPNK1s-N=gfIQi}x{cv34067y0*z+6~M zmXQx49g+{(vIx$eXkxH*&j`w`@bM%D1|ckWqBAg~X%=EBN-c)9ZW$QSrIGRxc(4I= z*cHhFK2{X>L!*+B6~%Z#2F|?Ha)=LcX@G_Y%pZ){igDDgrXXhMLab+GMOX(BflU8F zTg_k(VcX9`$ar|V0Gj{~5~5Rt05nDTrlw>jf{sPUa-ax~#3U8(tCCnykW=ZGT3nKv z0=~hsI3(XEvA6{PEG<9O&LC(R53iY+P&VN)7o`@1(-(*VN=x7{BfsPa8H1F5uyq{p zyPKz|G!N9O2Ny1wCgB(d;7CeLQ7A3SQ6Rm}Ai+7{uwg)~D1&u5&`Nd+>kvZg3wS`Y z5=Hqa#V;d)&6GTT`6Zrt#U+V3IjJdV&LvP0A=MC!NNi|WfacJOQj5`R4p1_H-L?Wf zLIk=0#FPr#*vG_*WG1u%WSoE;@0c|?Sph^y6R%%>3E~Q2sPCY46|!?6gAxQhFa=o$ zojkzdmtW$RUz!J71w^jfzknAv8A5%4*mDfowaWv!RU9&w0u3c50*Q|=s~DV{Atn?- z>VHt7W5^s|W{9ZCAn6jR?q%|aEfj*<1U|}5h$|J;I0M(IFmVRZx*?dGkxW2sZQ{@B z>|ViOXF|z2hBL}p)R;V5D6>;N%%}7*14bowbC5QT?;dZEXRUV6Qavs1Rm=O$p@We z0`CMdLTv!GLJXj6(o1f}M2G`HYt^8JKME! zKPLsY2%H%*bOtsVBnj^P!uskAtY8D60Rdi+hT7FewI8e(RS04iTnxGz0q#(4bODG} z$WviZ70|UZIJR!t#1=$fj{_QT@a8qx!Px9VF$Oc|;F!Tcn2&An1BWIQ zs|dQ7Xt$ski>V7VD$ZP#o&?WL%#1~h>5NIRxj#16#GHbRL}+i0fsrLCr!5>=2GLW?j~i0EL7F0kW~;tSe?g0@GXF@U^j9v&DlIYik-FhXHbjJ&}B zs)-Y{3EwRzKM^)+$_NcCs5Ri>YqApoJStJWhdn-#Q#V2*q~U~cCb|qP8N&I;PFSYaxnPhFZe_X#B@mDVQGtym|Y<2y|M0Q1LY>{lYdZ6INgBI zi5WuZce6vy!d7ylD-}v91s^$)2fiWz`5JddEa8f-8|$4BSa#H5*GJeRSX>8BG0?04 z^($<$f{8H?x+(@X-iMNXpxuBRSiS)*K89Beu;c(cUjeC z(j_$dSQ+z>O9@DBV1t~S2~onp$O?5QjE0IMEd)W)hVVDs59mTrM<9eD20+|SII!8k zI}(hrrd#v~6o(}nm(-lZ%0ZcSa5<6KfG{R1Ao$Wsb8-fy|Iu6qP8CSqkj&!jO6YPT zcx}u$2$yCtf~RLetEIpU=z1&=AIgL+#{vn#*wFP@AR#CdHa7wig0W%Cu^?iQWm=#) zeh?o-qvS|<(6K{94IH50A_9^j!JC`W1wkXCU@?St=*lcqQO+Vze1LjrD3QSpUP8xK z0_iP6+`}vZX+ywG;+IKLXqNP)I+VIH_>0Lu?dhzpajv}qc2O^FoGvG4})3G4$a6n?(I0arZvM^RK zRx(!Mh;cy%{^b1pqLgCCVo3X^7%6eWyBQD%!WJ8Y$`ojO647UYMHw?IV+AW?B`agq zfF~w+SRi=`TIfM@3(Q}v=z#$94cZMK;4&Io%z^`l@M09C;Q~-mMs$`Xv8M=j4eoIS zc1W^_fTs%Z-oe3G0>E5~BL?VS1b}iC)KQT`Cio%;WAH@{nc#~Wpy1;!%1_G7%ScVn zNX%o;EiK9|Eiz{Jh0vhNBF72oVlT!d#zdr&jom4;q&%}Yl?i?+FY?eDOqRPiBQvc8 zbcBKvY-1Y}Xml5=QG8&<;H~sgX$bX5mO_hD=HgP=h$<7P4FoDz6(Gifm<$XIh>kkU zB~1B{yD&ht2}}&xb@0*>CW+=6xIB^@(8XAbz-wx_p-P}!h?BrAC}>#@mB&_^gR(zV zAFM)S9`yU9p$>+66tks3VjGFMD8C#&n#jzXmXliHk_kFdF*84poc5tGiV6Nj;YEoB zbLP{WQJ;v(=g8^lEnSem0SGr-vl+w2(&=(Z0;DbJXP|GYtX2Mw$bxmba; zMPcLKFc+~h!tP52&!9pxFUqNeV5fnK6len#W&~y)z%eTab_$9YummQ)b~)6s6!;C( zt@!N2%@8zI!F~H!68>?C^-Vtamcq*fDFJk^MR~}kj?mQ0PBV)MyTIPi1Hh3-hpht zVIQF)!f$Y!N%k8{QE5^o5x#?{qbTkmMvxVI5Uo(#iSQ!{>$4EKkvX?G9XTIChPpt5 zyby~~#uE?={0L|v;1rs!xdm4&5O1K3Aix?Ss?gPW3gFea3YmEdi2FkoK<5V)3v#Hv9mZLtx2Et$qc0yepy&RNA01M1(KqyV9j6|@W?+nMezjWB$j|`T0Q676qdaFyi^9>;?ksI z@D<^p^CFN9F~p`XxHJi@kFB%-bm1#ZJrk(TXU)w|NzIYugW3&M0tplbCUCQW6`}^4 z$#563lx3!tL(KrQp(cQb;h=>)EX?pv9%FhJ6z*st0rL@93Y6^7PcDJS3$*mWriKr4 z>JP5#Sl~uLyaG<2ST8z2GY2yz;pq9pEx?v~ap*y_3*t0HMGiL-B7vngC(c|} z&f>(p;^5Sx%ryAm91|DlE_1iU+{~OxDvVQsEYK|m+kn#tB#tF=6@!i>0pA3Rb^a9O zG3;ypkagm84MIEiFk>xFPRv1CK+jkKAKn|NId6!QVD%xi3I=B|=ol7ak`>}@2Ba+o z$Qc@3uVEX*CNYYLn|j0yU+k@Ri1)C@H7RXks4<;hnT6?8P%>cyCj}#TRlx+B zC?6!L0a{Fg+9BXr1xRN zeIOx>SUrH0?(tMcu+fUaR2d7F{@WpxFd*7@|oIH4q|RbNlebjP0b_gMoYn@oc!c$$BN8i z|FYDgw4D5Mf++!Mksu`G85o2z^KvrtQYkftBcB2{K*NX}=R-NW0tpr- zR;J7p`iB%|aRn;MIEqtgHh#-loJ#%xE_UZK7pEq}A%m{0$GC*$6V?_vHhB(rlzU;-RkR9pR>Mta9c&`wK8v+R^EX5!$lfZrhHO|2E zdT?`4R#$;1${;2qT03y15DD<0DYQf)VUY;j6l}i77?+1wh1(670gYhbuY3g2)Lx&tAmKt!=b3O=JS9f}l%Y{jWLsma*apdcy3n`U5U;B*}>gHV$U%oxHc z2Bs2fA;=ig6Aa7{Y%zlo*$|r$=>?`4B90|OFiZeB66;g|2P6hkDL6Rf!t%c+JSf4RL0EQE&<9GKtEZROD?<(3*`o zu^+N%@>hi%arz(e6iKVnwzJHZX-XY%q%v?%c%e)Zo0#f`U}o1V4D6 zJIJ|EhmkR&g62?gdIdG~kbI5lSNx8{RFCyK8&O!OJ7*+j=D|-Qgg4N^ThO?Y^K+9j z^Abzo+Y}%NF&YSQ6sH!Jrsly94uDqCL^Mf=be|ByYPjPd;mpX2~GC?#kFe+dx z->?RaTrp@G8h*b|Fx00Q&Oi?X@OCF~s|Ff zh+z*FX!ybs25T}XJ;4Ma4L2dI#S8=FDq2AXj$-J|=tz+Xp87yptwQza!{HxvN1)8+ z5E+!%GZ!l)Yy=rZP)c3sUQQ%?A$!WX%QH(dTvF2#LFc?d0u(;BiF}R+L^WB?L~#c! z+F4O!3&~y3QDtbdhBygS93zS?NG}6?I}c16kpWrZ5zUG<1fV)N(T#)J2Ny=94Y&~0 zWnhcpf?#!^aDj^;f{NIP#2P}xYKCPflp>Z$%>?o^nwOB%3S5c1 zfPovEASB?C`x|gokP#4Yp#~S@f*2Q^nv;fP9t)P~?FPAy0*0v$91?;`Uh z1cBmX^384Xu1JB5i(+*&xLKp_KgH8bqhA#tzIGcfinUMjx1VF8Bpo-vDu!79c zK+eXnu_^+C1+eWnPy-oR8S`Kv$*2iFY5}La*@9C`5YC35xIl`tS%OnbsPAgxgN@Cx zs3@_L1}=aGCxim;jRI#c)JTM9Vra<*iwlrAYf@!NYB7%!h}3h<10Cm!Xo|q=Y>uST z%pB0gUXYl_qKO$1L(rijEQ&bOQ%k}#Q%W*mL$2^WqYSKYD-bM*uNc7I!eSc8N*rE5 zSOii44ifO_DHgA>mLwKuBX<(OB|Z3bOW2J!$Ol=0jbX`6EHHw)juAX+46y=~Il%1< zNH9SJ!NaU*=ZV7m3#<_9p=M!OuYqts+;CJOh)WS-AnU;HLluIZXo^`%feK7k$WkwO zX-U<^WKhE)e#Fx2!&ywiHXR70=H%+;TQ6qn=|C8nqH_<%UUP)>1bG3dH3=bY3; z(1owW>0(U=D~CD?eiS}_tN5T+L2ZU;W?&-4M&i_>Swx&BE~x9=Q$Zt7#OYy9NAy7H z5eOjrh;tcPLBJ0U0#IJ@POSu8e@2{b9H8TL!8#z3iny7BhA9GWDRFKjD@0(4BA}Fn zL{U%*AC{m?q9`bZUyDOha1$49ywF4ul$x7g2AUTqP8%EKI(tZZV4zEafLckM`^ZWT zXqw=Y;H;4H5OLiK{&--?%<~I|g$%46#{&&#a6!zTo?7BrlA24AiLk`$o>~IWD-;>X z4Rs=@d|)pqrJf4|N=vvP>4joXqa{~JC^Hh5CcyCmulQNPtxo3R)Dn0ff|)flFD11C zGD**x2x^rIG3TVhcGoj7Fhd1F7jP7n1cS~Dfw+Kyfe|LhQc{!(KRb;HA&NNqoPilC z3fqtbZ4-i9M9{`5_Tx%ml1N97LYxdcT?9*`n<*XU8YWhVVpfo!SRr0PYKy@P$54-? z1`=qTC5f3io}i$D`koPNB$7I)S)lzzP$kHIgqR`-j)3^ooZNU&1G*#=7S7CI)4-P~ zK?9i;9H>aUkA|P2eoeD^5&H4Tjg%$SqRXDJjf}h{;++n-t;@_N2@b-^Ai< zSnxpOp9SPgBs(FBak`oX!_^pi*^5(4KsVS!gMt((t$Nl^Pt{@tAq$6QVm=Jdo+Tj5w~kV z`dug)m5C*-G%uMwHLs*7GqsqHo5ia*KaZun2!7@{@)}s?;M5XuKLCFAKU4!pVoHi@ zUI}7XDJ$4ms4Q1%Zb3;UIE6uDfKh@KW+hYvJPr+=2L!tTGKd2e!8mae;S$V_23K%d zx*qr_>J+e7u?@l^slhs}4b}*88kU{}x^7S~!-f@5*AVd*rQa`@Pp0MErJ_}(;t{qwFpzeaSfX6g;k8m z2daV67vzXI6j7)}Ag$2i9HtqPaKRZ4Cd7j{5zeU+VIZn7NhYG5>V_~AU4kf6Aq55} z*pq^3$CXi{Y(FSep~MWd~DQl88OkKcz?qYnl$sNgT2TV3X+be8 z1S()52c+aeeFk+es7wT}r(;gZECVTJU|?W^4avgd8l(ul;ABnCNi2qqUBh#*5NLQZ z1-e367t~^_M6w97X34cIHLs+YJwMMmCo>s#Jtp|l_(Pi(1~3TR}$yQ zlFX7ESQ2JrMFb3zqlojE6sE^?K?l#I=9R#l3yV%rXhED?f;hAShvg7;*t~^o8gWjP zz~V%34;SV@NWd{LfcqBEVh%jQ4=v+B4##d4C?kO@KCpX1Nd+WAeA+}iZ5@=#K?Z=0 z#Fi-Fl3@G5(GC^@mFlpZQe2t@76Z8&q6`$=a3KtjfRh4d%?29s=P1rhNd>QdhmZR6 zgADU8%1q5G0dLc$#w01s5=cB?shx3-{)2plGV24mfs(s8Gd(Xg#WSzO&k%S$aT<^v!3f<-4g!~oc=4kI5oD|p(AqbM~oB|g*84B|!xSSmycc$ABS5mteZ zEP>brF^b8@6>12K0ykZu=?lJFq9p!04Jhr!&3@Hj*RlaDJ%2)S~=cU%cbEsE)o z-X%)7fom%)ikLkSp@732kP-|jhzAf>7$Y`UQzL4O;gfC9GHkd;jj<5}?x;b80!H{l zqL|s!*a$-k5;a`#Tw}pNbOwRu4|YiYuz)6M)wh)XYKK7%ftg1UnV ze0mht5gg~@Vm-*xE%w~R0~G%pi$>}_HW zjv$8(-GGA}k44ZR!5I&*F>vI11>6K-&n$KYjle+-V8r7an2#B?26dP-fRiTFKcguV zf98V*6QWlLZRJ688mMdp7n&$(1v6EH7sR7xI7~(4PqM zfuW5Ys8UFs0CB%dW^xH3?sK7=-%mh~)2!+ByPT?AFH#V$$gm%pdvZ3H)hh!pXXdjz_pdg1d zDZt?aQpO*gT7n$T5Er8~tieHsWE?~Z6D!Cx2?z&e8!gtE26TJip$ScdDD4ce>(HzP zX~5Z|V=2z8LOL*tJp(d^BFYM5A&+lBoeW;dh_DIG2$q!0WRz{nptQ~bvIc3+3~5aq zSUuEaaMU17hU)@(fh8?7CzZtwM1Txq;6`FYw1ag+b0}C68nK{`BzmtA&C$f4f0Cg0~rbMuxz-@eJxdyt&)ibXIvs}Y5wu|WnENu^bClScz2PEf#lQ~2=#3zibV1*D412{Dx z(h^u9+$OMIc=7`GUlB^VK{GFzRjHu#is?hpxB^RYc4|4ABOwJcwCDk!feIgU7^t(? zz|O=`3W5uJXu5=!f|!0qZMq{Z?#5IK3Knj>w~c{Ruz~^((QjsAN~~Z?9QcEQPy&ic zl$9wFx_Sh}gjV0sWHo@{hICvNI9m+D6bFvqh{2cSkj|kR)IocI z1iRg!KmgYQNKS@}p;-?XhpL6Q!f=#~;J{2xiApWXhp$Iu<^~;S8kSg;nMmGQJVHqN z{YrCFi!zfbAI|21I#ss{4s_NhH7^!%FiX*0I(aNtM9N4en8U&Q#x#wF%v7YJ*)^fBRXghC$oZA zEFn1rY82{@Zcw;^gBgn~)LBSIKuqQW-&_v9@eCRej7aXlP|gWf4!TVZt{T}3P(g(A zkz4|I9mHaYm*9d>g-q#)RcH`(2pi#QAreR~N0UK|V7M%DUlW>s;QdS}AL0RUI}w%w zp&e1A6bNnLL$z?DaxqPS$|D&7@c_bS@MO#cNkVwmr-GMDLhN8*Ab$-id^a2u=#2XO zT+mn_*i_7P0*@Kk+$vNHX4(L)szlCGR9-uZWFgc|$aC_LHJae?LnJ>~K!cX^f>uW$ zWKhxqdhSAz1gCg#*f204uRq1+2C(%=?u6P;Fkp}^WXnm-OE1ZQ+QBNG*a@uuR~khs=q|$>4!~Fb_5u z3|;;QE?yvJu?LqXg&-}6hB_EDVk^X6j3&nnHVi3bkbMkZ!U>z6WM+lBiWTG#R)k4H zEIFx(X;5207fa{mr(iS&z`M|(YM5BTI>6>Yg&05!CQ=jA&_j^0YY^>M@XB4tvSmRA zUXUY-L-IZIic^bFhB!duP%J4$`2|p`nOG5V$I1!v3fK{#kTyg$1rg*-43KFtq)>+x zn+yy>EE%bZDNwT+7?@FwK))#iRaTIJD=o9AxFk3yGZ{Gqq3H-ESD~k9m>Q(DD@YzA zkly$}R}N$*<~TuiRl+*M%p9Ol1O*r@lo@znBFM{K7{Eb~D-ogOQ&#LgM2=^SdPw-sgr=K6VX>5J6}XhMU_LCt_Kj6pPN5zF}Cicx$6PU3JWm^rY;F-YdX zD;&6DNKhfQnGkIb=G43tNV|8yw!|PcN5HNjdK(K!HAc=sY)63R5h^!CSV6X;?C=1$ z%8=ZF8Ea6NFvA;KNUC9LO^Mpc0=64m5DGG|rRJr0rc@vq1&L;C0g#%PBFMm+l3Gxb zfutUmhOifJw3kJ?Mwu1r8(0V-PaDG=lABlo4M;|~GDLw3RmBcn5sK+ev~{jnY=G&7 z*@7?}60#^|8A1|jGizE-etwZ414mwJId}^hrV~JgD%5b;ic3(wg&M$&#e>NAPr;QT zR*tel;uPT)h(i%Y36dKiQkc~N)IltegpJ?zNGFKF3m2HPkWvw(frMco zN6;jIsVyTvv$zDOHf%12_?0IuwIn&iFSR@bu}Kega~3#1LG6V&8X6iRaPL8k!VEUJ z0^|$~7eoY#4;HZ?xEREAjGbB#VU+X+*8(*fxgLWmNA@nda!Be#7e(F*1~G&a9@yw= zVfhDL9F%M^#Y%JFVo-zOtJL8Vm<1(V3Z@6tNCm|_TmtHQP%{-S233q%??DyA@-?~! zaE%Hw9WmbnF^UH?;RCZ8a{v$f9tqas99-wy$D|M4W&cx|s67vW<*v!--xWB2HOW=l6%e9=v`DrCSndupzGdZwF zCFH6Fh=quB!UfW(n*-Jfk;9T$Kq&#D9f#4y`8k;>@Q`BWh8&FsPQ~QJt}tlZ0BD(U z5qQ@C+2%mzY(e8@Ag{4PTnS<_5WX4%Y5pCQdtqyO_~D1E1*L+vaIzHV=OQiXVF8`` zg4D=@R+7wl`LLM@=m5`IFz{3P6YC$dniz1m17XzzgDb6oK9MZtZ zRDnFK30A=dQsD$U#2m6u3fWBfBpWMJ1#EdQczq34MX0tz&BiLoz>URvhw&MKKqU2N}t}%wG#59o`nU2WP zo3*$gF*y~HF9i_yk_3Sla+8xeCD9ED&d4t+$w6!qhy2_}lAxL) z(j>Y8duy51ur%rh7fM=LDWGl0~tYja}Qz!wkW~K?ht#3_9}*ckON^g8XxR% z0?3Y1P?=GV*vHGvR+L{_l3D~>MGIP#B81%9gq^C)l9!kZo5O@2wJpfNm6%*onwSHc zivdr?fHlH~*rAhNINZSDlAm0PbmTkKy9`W>44_Tjki!(1Q}UCMxNPN_c`5njFr`@P z;KTwSs4VjM5cv2-&@sGFIY!u=9dvP_BzOTaY=IB~W8vpHFy+ISq_QFf1S>eC5H_TO zHt`~viS-a$h{Kpzp)mnbjw9q)!I22j0lMQEv>u)nYztHjJembfo2aKsKn0PPMdP&u zl!lO-0-*6XxEMTC;Ud_)2A6~_Mu8?iZqDH3jMS9UoYW$y2*mZsl{`WTa#I0xRwYMq zL1KBHb1ve-7A9!WK@u?Ncuw%bDFZ&77C{0T&3o_xI?$YPaW;|~uy@%L^HM@G;3r=p zH}v41M>^{m>LpmTLbxa^)Ny+eW)(aDVeP=g0>tna7E8hE;b)t0f&&UPe+C(&flGjg zXh4AolEW;eu~#Yr#RaL!r8$X3&iQ%8C5d_1dm{Mi185MyM{6)mgs8w$nBy~+WDmGj z6y)cnQqu!)6RG3@#K;p{aY1Toat1Ls1VR)-Tmb76VF^mqHWphjSR1in$O>`}_O=$j zD1tZ&QJ+DLfe2%9BR;dhX&h94qwhlCDlSOP$w|&gP0og$<$+BZ-WySn&49WNr+p{} zVFn}C8wG1|K~5&3o5{pnoLazE zTmm}Ah7Z!s17E6zGR@A1Sk?vB3~>->`)6ta=-?@kW{4Q1_Y19;z`a07Q4bY?ul~Xe zTkItiPjLZgNiVE5W1+4o=9r0G8syq7wLaI0z4FFev0<{)Q;V zcJnrS(2Hb=U?QRo0v|8qwisE zhI$q=LQxAPw6PiR0T}4How>LO>3%!V8f0jFjV;fko!kU*1_OMr4#+H&E`VrWzE@&d zVsLU%W`Vh@Tmg1uHB=|re6IXJ6PJWSlVs0r}*Ak=VB8b^I9gnl<#&j>JED$IzNlea8 zO>rwq1YeU$#fc}H?BEcDx>q+1?qF&K1!yZx5%z8rD5S8D8bUSUbOS;s&O8P+0zOQ^ zm`8Fc2d_FIWcp*hGs#2WpMJp39(-n>q65=*Qy#w+m(VEdL zh5CaQ{wCK+nEJ3ci@A$S5{pXw)6zi4dSffr@HJtf{)X2PD272Ku{0L&nFx+%q?7_V zH@p}!_XBP7Ba1;T0cnG_v!IG_H;_SxktHKaLyiJydzPHGF=|-|KJ7O%8R90ACK-v1 zEuP|%6qnSpOz_Mo*70$CfeUjOtObN>8bp@F_#)Qfti>g%xfv9@7-|gdomxg6r^1ed zBr#M$$r)?+fTb987AaNAX0TDLjIfbv>Nl3a7SN`A1sjdzcFa_WqtHhyw?W~|R+N~R zlAp^K1g5|y!yOIYi3`5fS%@<|H7~UYblWI&^q3VP0!fYxjI3a#P#%`!x%fe6S%rXh zNrF4j#q6Nibj?d)z;c=dhFZ`*E09`<@mLZRE*+SGgRYVjVZ<}NNl7>3i$ z_)NsK9~8ta#U=R#@RZHSm@LW4m<*l}0ynoH*H5zh<(FiD=7u2_qm02J&kbSGf@v%A z@%doOu{AG{6@fMdyySCo)RZt(nPu^`CYfTH|@#B^{w$saMH%>3-Aq^niGA*}%p%ZawQfp&F48C+@+>Yy8(!r?zKNB=CHVzN7DK$mz{m=-4=Mm2 z7Q|sI7Gpr3#G#rgKMymx34ul=p*Lgbksc(N24be1K@&DaIu?sE#O)!t!w5^gOkChX zA{t9#CQ3V|Ye9t=dvQq-Xx9bSdS4v=rlY%m;Ca)oczQTbQd#&SN5>vX6B}{Lr=7axF6h3 zf~*fING(dsFUo~E1kv(>uHInHOD#(+;)9&E$B_cH396hKvUZ3SYy~UK4wxj!l~7M1 zAI1kBMuAKhLJS9~!*mf?6mfYJYQo|MU(&<_sV^ZR47C;9VT9QVx=ji)Jgc1&9pE>v9&1iWh0o|VIv?gb0Fem8+T|?jvjOqI?O;=7aikJ zQgjV`fu*TMl>v!GiMgpIsj$-;plj4XikU-;a(D|;i;`3GN+2N$aV!HPcx@Uaoe@w7 z8K#2j1Lpyd24r`mIRg|kASIZV!(_NXo(=#VPgMl-Gr}pzlF6mTCHe4V4-fd@kRVS# zcSJ70Y<+{>2~Ms^a@eeg*Z`9eKsZbf9JVm$!J>o_w3-p(R41qxWOVU1&Nukw2e}5fRsZE4s`7SiJ;{WBxujgL0<-dHrxZRCc(K9nl4bL_BjfQ z@(WUnN-Ck@201_$8WXrmHi%kAJj+**dKFO5;xG%d{3C843%k#-G+!|bM{0T*)A@Mp z1E(1r;Q*F{CkSXX2Bj9~=ai)uG4MeW6D$N9oCf z(-$;SkSa{L7ECXJn#OvhcGS(4$BnwD4!zo8Vq z1s}Ff4Qv*q?qw~>_soO&m=U>U18%2*4TgFeWGy%tF|@-)A;k)^6R`Uh8vey0`C*AU zrRW=;upP+;Uay6HZxifv8t4jZScSlnm!Fr4CWjoB5dX7eAvy?0xL<|rjX3S z?qN{Tke`iMMa9Hhke``Xl3E1mO;cs2s0d^MBtc?ncThYg3G)IqT1a?ZikZU^9X!m? z#ohX==D1Y8}Y^`P7+76-4p?)JU58fEQw) zPi9_faw6!qJItuV7f=wlA$szl5+gr5RW}D}9z-5XI>%=yrW3HI9;js?w}XoZN|QV^ zHG&-vHjt*Sho&9h%#zfioXp%z>`OlIg%iYih`@)Xom_;G5G6DUe`wmF*03-%Iw>0% zCN}MWD)Rj7RLH0Sr3r@zl8JQ7GgA-;4Pv?kUtD6UM%t+cF4Ms)t!MBiFNnd2)Cf}v5l3$PqqK@KeFPcO2QOU)54hyx@Hw(N zVqAdVCa?)`zoK_2Sc^+4b5bFv2jUo#hblqxE?$M0uEEjbhnh=Nn;xnb>IO_JFjF8z z2c}A-`89|VtW`6TDscEgEJmaOs8)zDmQn~^Kc+jdm;6w3Db2S~V{keTGq?~<98glh z8^H|RNa-BaCXim}_!p8IY%7;AT>v!+HuM1Q(K44M<`5YcjwK~UnMtK3u#KD06Ik*4 z1QI}yJ~1oEG6n`%^Bp3^z`%?db(n7Fgxd}Z0pv~#t6O4DG5Ewpye`4C1hu^^3eKiZ zIr+)iA^E5(l0YdNosBZ=OUdF6Y9h0Y^kX%|+oL^+603DRE z28n^&+*S&P1_r8Neo}sgZgFN+W?s6L0^~p<-K6{quv9@}N(xxqq5vdNi^DFfjQq0H zB8ZKMQ%@kPY^)TD(vvhy40RMBSkpQt50^Q*#i==|$t9^NIto~P1eYajouPq_0tDl= z4mtq|aX2(sk`r^1H9%pbpsQeFP*4FfKtTZ>5C#gS;Gj@Yz!Pksc+v$0Nm@>Rxs^g{ zPEKY)ab__%NXs)aOHy?~2aBXyDdgps7bO;e#SzLgGE-7g^T2{BnZ*S;iIr9gnR%e` z0o^1}J&i8_!8dS2`~zO&WTl{NW@ZL93+g|RpTK;uBNKBn)AOtpia_UDfkojq!mLtI zNXyAjEJ3INM;DSQX%VAAZY<aT9pVWQ_L3sdUPIWlG${Fk0*bXH-?tdH5DI#p5!4@WQ&D`(#0oPBstijq zMjRdkF&>hdA;||a9f_DdhZqj_1~!wx67a)XF#N}u20rJ813X<-mI%8)0p>e+{(;!d z2);cL>TbB9pmT(Z5L4iAv!Lp*xC)U?8PgDX6l@2$wqZdt8|(>e=71z%@s6{M<0&pp zDhBVq&&y3yVrxg$lCaXgLSBk!T9x1|cF0Q!hdep&T9pSd_!%;L1@JzCm&g zdvR%Ua%yS{e6F97F_GxSe(>r5lsecTGfI-IPzEa_tSp4|Ordok@`8VC?twT9;}Qq> z)Hx`)F|sJ!7m)Q}a4tBlKyDI+S`S`%hBPw|Sw;s71f;{8@R))95GBz19OmNETtrB+ z=auFrr50fvlL@)O0^&9Xq&rBUWioSON($`2d1oKxHAhe z9<%C48iQvqF3rtNEW*Cp9!VX_SUuDQ@P-E55QqepRunFiz;Os~Q^Cz4+^&Kvg<1(R z2pX{@w5{N#kk!6|>xQ}kGoZ1yu@D_w=Hk)~P_zzPF zxcyvQS^!#CgJq-(EDc%}WeBkZc~Bp$2_lRoNg;G%T8e!*pQpIAC@nELH8?pjCl%{N z1LmM2Vk92o5QO_sO@qi{aV9<^F&&PSPne6#(y=-cNe$jy2{r(yyKtF;#Z8DoD6o;( z(h<_27mlt-8LZ8NC5+H@W4Zy`coI)>S-M|hZYsEAiZ!G#!yaQb8WSXd7&zfwTxcr< z$I3CNa(K}v1!}Ze>Fbx5m+O@q>*W`v>l+yu80do{52BU{(>HkB1I$i*xkqm8Ns4_9T8`7xo#1}aENEHL>}spJ=*C>u!a*a{A6q2 z#LPUd;_}1-pTx@iQlxPTwj8hkxEl#&#*lbMyVn3b`Dm9dh6fmU{MVfYl; zR!9UvNpRx;yUUSG0VOu2ikf}|?zH^AP7#Oh>Kj^yIL!eec^n^kv1}sG;E}ewEgT;k}HE}@0z=)_o z5QhbVOKMJH<)94-T+SpuIE;x34!*R~oSZ=$3TUnam4V^0P!a&o3?RC3jCm*> z6GWzhrCU&q17d^pg0IwtR3YFV8T8;70%sFp>%)MZ2=3@XXJA2>W_#w9V8$DcwLKu` zV0r~hYaCy}0rD3E1LE95kfEge5!221>?Gdjpq3D8Nn%nC(yD59=)4S;f(U1$1?o!% z$d)Epd_qlzNMfn0a2ki{U8Ht5)KskPY0$(DF&7U(yo}RfNVcK$6~F-t?{~u-g1nRn zYo!fU2(=Dm2)6W!>1pJCFw_iezD8C?g#GyK0ULm+1e8#Cz@g@xSWuFgpND8RQ!l;n zf-L~u83eWg8eW)=AtBv>+|3C#);SgVdM)ZXnhR{YZZgPtYPpyjY^HO5PH8Sp0vZyN zph zeV`Zyk;D?*_)NsK9~9ysb3u11_?6}k_JdGCc>?5A-8_(6afSiT`V`bu0k^`z^CIAT zm=Vo-@a8`7xD%KK8$MzLZKXyUD`H>U z7?Nl%gUiDrJ{xJBHe((*Mv?pnR>e`0n4RjD2tTI_ar-wbV;;&@Q1HSeuzOK8qS^{K z4?LHQP|h9is{*qMRR=dnI0$rLM{z2eCO)Vps4NzJpgWU;QW59VGvV+idlAF}XxJmK zQvv%1*%44R%;eZm)GDY_T&uy@N)n6GQ?YM(1DAjW#i^w!`OZ0shy}y2QWvHdYAKE)6v+Uv`$2sw z^pOOZNzinLO$lgIT4r84=x{Hj;{o8a3@{U*Zoz32nlYGe#xXzuGap++1&0n?9H{xJtC143UXc8hAZ;%ls?6C%&;DZ`P zX}m#ABP!;GpC_>w5bTi1jKDg8jW1I};{;w5!wrH+U@6(~nT8oBc%2(bE$2o;T#KzA ziO;#vd;vXohXr)G9irLH2s%v+bifW{gVY>tB+QTI7kAnGyjHx|pjsgrnwMFYT2!2v1Je|oT3DKzmkisO%?N95GGdEqRKs||{Un${5Kl5N5;cv8 zv8xoS8+>paG-X1YsF*>4&lQAJ;|>5!omhe#eb+50BY|g&!6hJMZy~rE!Lgqlq5|Ss zaLI>H9j1#=@(O4R7`6lSF`bQKE2gP9G+-)3UV=kw+d(0VFK|%KIY99sNGCK25h&bn zcpTBBft;|084#EnIYRTm`*%|yamxT5J;Cb(h*Fee)v&B|!DAQ5r}%8ZbU3Ia7zQu)?hrUhIp!s2;HdO4^9;t?9C+iG8xn{R!=PCbGn(<4 zh^ZQsD8O!X$}a((MvE;{ag>#2Q2! z9g?&_=P*OHLlj`?93afVbO-j>BgSR;!W-fga@>l~R7}@{d8Q3PJ(F(%_m>o}L%i-HW)MI<%Q5{UdFQC7xe z$PgLKE7+X_Hx|3J5Xf*u{DBVbBQYn4fJ{Jk9_SDO{B8oL1w-r(LJK~SgFrLFpsE}^ zC;%NQz}S$CD_9|R!Q2C@8L&DUOUoRTV0g+vr>qwH7y0Gq!MXw9AxEt4!R{-FE3nI< zn2%ivTA+aY?j%MNMk)d~$6(=t-CBIEM$7m#h$FBKNC|83Mvnj}3m`I4F{l)zEWr{i zC}|xSM%YsX5or}YFhC_SWr0Dku%>lj;3(;d2n<0`%5cps$Ve>CET+6F0G9*0sZjH% zS`mPoW1#iPdAO&4A>{$A%z%}pkmeX@y)@z|Z0xBAq90QZeX{}~x1g&Rg6$_DYY{zH zNNPn1)aMYtg+VA{_EjKhChRXP?!?pts&c?V3ULysEWxe_9GVyf1z4*t(XoLgpQDE^ z*hGAeLDzt5-vl&NiP`9a6s%BPw2Bj4j>R74NMQjg*RU%BM+`=x1=dP@#9%3N(8C#Q zA|zt4I|f|?+Exx|$PTXfKyxEz2xIRvfr|_u@PG)`h7rD=4J;gB1sbwh5IHQ}I(!CV zIvSLz!R;CUqRiAh(3Qved05>EQV32z82h`y^{Q?@l75_SLl}bHB|M;72{dQ~Iy#I* zXMjgq;OCA(oPceb6rUTA#z{FqP6hhT{(bR)2b2-sIasd*`> zMWE|8N$X62`|G+zaNRiFf-g+4Cu<_yg)bpOT!I)0Aljw)48#Y<7ht+ z9WlhVA0UB*-7)A9gH|^~Lw0b*2bvoRMuQ3d(#izpNm%0moVAEAtxT{xfE`rrh2&$u z*#n*iFxmj%`c4;gaWuqPB$ksPgTXZlxSs^R{*auSt^{;tI#@T^u3!cEKOVkVfr)A- zaG=a|Vun5H)Hu@N8<D;CEJ{tpnq-ld z+~8eLgD?eW?BOyBJd6Wc_6eTNM;JtSZ4E*#)KZX9#7#mY&*>wK!4?I-o}2bP$qlDA5WEK*Y)ls40Xa0;&*d9mo*UV*zRgSy2Gh z3$-6Ja7hb)CS3gnM5aLrG>El`_Ap34L<~zwN?gc;j36BBAXQL{$P06j0b~U@NF&r{ zvO*hFXRwrHBxb@3>!Gl+4B}#({wAdwKqMvB63`M_3UfQy2%HWhF3rIlLd5w4$kvgU z@?e%>8Dz)EtPp=8@)uMuL>NmJ!!Q6diGtD}EBLl<1}x`NfMiuc3vlv42L~kP{ z6_*x(j^j>E3CKxJEKUthO?AmnMx1Je(=o)Gh251bB^jA{gV~Wti3@xHEJZ09Vgk;< zM6wH|1O}x+M70GmgmCc*Q3tgQWCZDz7Q_g$icpAFsO^|>PedX{??~~0R@sN-Lyo6G ztTF>z1l{!pT4oQO>xSM&0&xHX@|_>hGjcdV2i&-UPSA&{VPpjx1?#gg<-(FbV!JG= z*`P3mOlL#fgfJ1)zv!M3E6L2w%u9DG%}WMlLQHQlm85}p3p16Z!8d8KGY~eI#Wk@Q zHsKES7y}3BNF6AL1(dysFozAah#(PmurzGDGO|f*pfwALMZ}l|a+4?g{uQW8kj-KT zxk@)Pj|juqL5BI4!nU%(j;=*EjRR~N=-@xX;l&9u&NB~TAPW}faf1!a%+n>(%;1vL zg5VO+-OmuiSRoWjL~s?Cq!#EFgH;iBCOgPT*F4xtP&OCAO&FMv1Yx~+24;{T!5jw5H@wNENtwyINvTztsYMzDwIM4& z&qh%9GqOUwgRB(m{YfwLSDTFo%w`iCRVebX{)NoEQ7lw6!D2*ucNotC3W?pGYYBAisOrToapqh*-huv4ir~z+G1qUrS5+p#UgP_L)D1<;}VL$4Z zw71I@PQBvztnhJ-3KP+^)-k89@0EDlI4 zEl!0sml#D^AvUoVmn4>?!g%bUtG#j(VTUqecKB72d5LrGAINW^fLLtF~(0zjDX z9L3Cl*JKu?6}OO}VqgHZX$7DhMpn2T?06000LPeP4(y}{Cj81d!OBrA$7?*dQ(}s5 zYDr>BBH|V!s1rfXCB`z}eE9J>jQ9hE(IxpKwJ}FYqJ0 z0KQNVnhr_v11OcTq-Ex$vbbgDq_UUfJ5_>eUv5+`#9(kk96H(rmWLc_e?(A6^#^Wnoe*eXPr5>}XzSWL<- zg%@hj`j){4#*lz8xPIjbGBBqWC1Pr4$xK1i?eJn1Qyo(}Y#@e-73wR9*$fN}Faben8R2WVHdJpUG;YAOlBAVx@nYD>esWGXjf6NTI+A@+p$xoRz7GML0}H@jez~ zLH8>{JOHhu2}B~&pdE_C@pur$39N915Dzf0ZozaFejR;lNYnw33I@hpK?Y86R79pG z7GWAgte240VKF5!1=g0q7N|%u2@M0rTvnpv5J@FeHv-qL<$3>e9FK$0aj%*Gp7()U?K-CQa(ir zQB3<$A|6wk^az}Z9H#J?V}%7Ss8f(vk^yS5=apm-6MA4Zc%u_h5JOT2%r3a?@CbvH zTnr4H;0g~pyg>J)fsWI`R_UNCW=c;*7Xk+(x*$^yhB~Gk$U$kyR_B)HpzDODH*{f8 zF#;E3an49AVk^ma&QD2Y;6~v=yopj#gA}7z)T|}>E{T=!YMP0qDnBn3T#t)FQvy6R z;B`9GXmoijU3Z8|CRVVikl7bdN`?qSuatzFkEtK*Pq;kHe#~|*=I{b3?T}<3&JOcwWvh~;o#!zkLaY6Pd#1vMD zKf$CCm^22HCal`kbhvCHy7%E=7sypaWD>^HPftLu!oB zyQ~BmKx1o=e1Y8v-t^QGkQu=xi6y0o5iO{GaMXc}K#DTl&S3)?l9>$mCWHYxCmD8( z5Ca1PjL8H(7zewfxbyRT^Gl0Uee=swA&v)64nU@!A!kZ*LY0KVM)w%;n8yzCAz}^= z;w}aT@aPzdO)xWXdml9@ajQf29Y_@(zk#H&J4di2-?gG3F)t-QAhjqt zHLnCS^1+b@jYy*659#hNXb{1)fyzLnv##OyqDewx2fGtFOJHt;nFdh}E;XSO@}OD| zDvPMmSs5!p7J|fC3=IraLD?I0a~ep10dWDFB#I)4*~Gd8d=neQJQxWc+kvJATu1hS zoQpe75FW;@hQB1=Ehn`CK12hrp7qdP42U2&9AO-^Ay^zHviao~<-+gmgSZMZ1Pg0*GJt~yhjt;~#LD23`~uKf zNQvo*pw%HzGho>WG-e4i3Nr4A!ze-D#L56rQ*(4?g2AH8R8mb!N zT`@2vKgeDMAug-_!=pglvyBKqhOd}RHh4Z z5t4I29;j0AHB&GyGc?FBM^>+E2nqvKPr)M@%D`Rd2*Trf2vrtzs0AQ(2BeUJ4pk!c ztznsokq(swxMv2Qqhl+{_sB0Tf@esio*SlfL33m9`x4+4s036YyoZG}>j+INu(2q( z63k8-OeIPu4=QK_rNMP3!tF@*fD$8ez(QOK7R6&HSRT}WV+G$?!CR6K+VEYGngVK_ z!Gna6HL<8Du~G4?3h6tei;_s+twz4hHBA z5lDJiLrM#BQrU`Alk-7Kz`)v|2L^&&00|3lXBM`qkC_$fOF}LM1rgkxu%u#~~fm77?Zl&J6d#A!Dt6{YZV>~OS zC7fxQd5Jk7ONg_9yCfgsGe}S|u_Ael71L*utSCNVMOX>Z&%glA)@ad>Io3eHyToWf zc0Hzg&}<=FNj}Zz3E4~X$(Ly!c4=nSR%wK}Va>1R<7!{SJ)|uvX;62O5Ni>k2I>z%&XXNTgBh zAXg#W1LqRf4)rQr2U2$v;zLX$pjwc;!xjX-m4Lk@-xpLzAetU*kn0M-y-O$?*1Kb5 z0{0HVi36&i$v+!n8=M3c{z8nf1!kaI=OG3nr47hM0N|^=pxPK&K{^o01EPWocZ6Y< zxqPUDzuYDHzNsmhiJ%c*EW^!cs=>EUAv9o`j$>S#fGs$5q1gsb)$q0@M+t0^9<0FZYb&^J*aZ%@;@jKF)x5(G^*oJ%|Vp|I~=q?5}xMB z=mFTEyPUY@Jt=;`G!fMwpsWL$&c)^p$gnhxCZZtogy0McD(2xsKisgb7mN&$WnhSY z3$s@uY>x{AOcfKRD!0@mXb3UFR54?!@`dlcVS=e*!Bpi~0B_5~RIy^J@`W#PWPzz- z!&K!}3UfUxOcgseRj{QqY%oJ|vmk%oqu^8c!3Y$*ghB^yI@u4O+X2*gebdl0@G!d87WHb@C)Fdnc^y_oJp z+NpuAn7G>=FmzGXd4#=$DDU}7^U8}73kp(Gz@f}imXe<<$iSKh>Tg4m8@Q1Ir0(eG{m4Yh+T0c`~o;w;EX%*+FI z&p|?9%nY`K6-kB|$FrcA0XB#MYy(GXPHHZAtvy7LfdOKH5LZD_enDzcNoFdnX9Bul z78IyL9Lbx20(&XsvI?kuEUb_yVuibe70GH=gk8jVlMUoezhJ1* zuo437Q6~5p8QhC-8=>mq9z=2gObY5nOusXe;&)D{-{DSVh54Q-ub3(!zzH6G0tExq z<*;%N90(Xbrg?1hKz$5$7Su^ZM>&Jgpold-WIvD>bx@x}De$%c^wNl!^bIM4K$S08 zH?+;qk(rX3SCUy$NsJM&>_?1Rl*l7S16oKCqXm&AK;FV$%OYmF;l({8M_N%Lc-H|^ z*$xd4GPd+%8p4dUni4joox%#Y6_%|SLCXa|(Fz_RL5>xuD?q-22t$UE5u5)JGSJB& zEUWj}OY#Hqa}tr7QJ_u+(%J~n$JMl5UdSrbbV^I%)cnZT;x6C}v%V=!g`kX(r#ZV)rkMM3e0E(Q()%tVPc ztRPsD51La4U40CRGHff~(DaCax4NNe16dEcwvjuuC`Zq!G&3h9wTQhWKd>~l2(eU> zk*grFC^0v+B(fS}<5O>Cfq2s*<7rk2qjIhr88 zVadwRgw@<2bHRET)sPf|M|zoa6Jeb$$l57%pKwEc5|Ef##ERr-uz3gqJj@Eo0FY!3 zbt))uAi_w_f(yc(020AxGa-3IfdS4qpuu6d+rT+R2s%^@6@_FUq`<%)z~E74f~w%r zV2if3736A&=TX80Giie6B-l&xX}|M_qaDE@GS=Hl)A|)5**MyN8eyemfrWN=PJAa6}|Ys$mhz6qAQ+ zG9(4F7o`^DB*HH<#J2Vy)IEVux*{^49#K6(jB5*#oq&>#plKOlfigj*tf)~yP(3Up z81+~YA(!}st!gp@qsVr-~ULX-ut6bkR3!x9-2D=2xUf;(Q| zA{xwshwf-UFS)oFGsp8nTg{Mc4^5J+xMmetAz@6FKG0zA1@fbW47@|ZMks8CYadYv zB|MOOiWDc8LDGX1!So?@qaB*PpcJ?z4Q^jRM!R5Bcf=HfsM(en9ay4|7;RX?gcyzJ z*#}(c!^gBaO7eptOPk=uH>l+Yo_)cr)v(UQF<{JRA+0on1~C)VEV#X>lWb5`(8)Sz z|B?9xR2b4%glk1I9qbpRc0I&>U{SboRGYwZARVkOsY#{jAn%ueuUX(m7l2p}9?XW$ zszX#j=b_FIXEmK;S~?L5`4sv@fyjIfQx?E#u-3KajDYP91Y-Q4Y35Qd*QF z$iR|OQc?h!EfQq~sRmuPSdyQdp95}#fig8b0wGHwK#D*{vUrq~!1}Jx;9>x63xYLD z*+C{->FXnAeK!B4w^w_q9VA=+3AK|>P| zONr8_4ABP~6-x*0)PwpE+|Gv?0P`Pmq$4{9Bo0oGh{7NUT@31Lv_zI%T#RF_26&+# zbblV&2mnWMUS>f-YDqC8oCO&N;L1zPO)V}+OinFkL}EiE*)ze1!W1*Y7*OHljKrei z)DlK^C<81k$iRcNAF&t`p6FhL1{JIx!I73&;f_Qy1)Om?lk@YE6H9#IqcqsAv_>1H z;)P6+1w%prOQ#b@aI&XXlz>KCVf)BgVBTegF;G0rio%117%Pl{6u7KNY-oUh(++xI z!P5hp*NILLFdtxQz#BxE$}#&n;IvkmlM0@5fmL)&NNZv-m&6J(uqPK6gKowH6=jB) z3XlpmVw}Jing{NoLRKBaswZfGg146laVF;EfTy7mvdozFV$@LBdv+-Mf}z$hvLag{ z1nJH(K_wX&uvjL)j~o#br}!K|&^D+GVU{u~u;L6uh*>x`h9RH+$P6=$rMMt5 z57zX7mR~sZV_bX=uX0$ytJ`5l@}*=J7vv;XS}A~*Us&UH6CN|cLx3Tp!Q72?288??9=UbE3d`K!{ydJ50bgALRsb&RAmv(dCg?=1l6>gkA}+0Y zplt=vvdi%>|H5P1Ov#3)E>NC+|;4>Oj50eRa3THxVuAD##T zFUEjQc_a2_!|aFA;3GAlEm?5DK-#w8fP&^}P)rJ|INGs8hjUO=g;B`KtPXV3^02jMp7QB8NofN>@bcC%wfutG+7DNpQsg__P zl_O#v0I~E18XUNXyO~DP@-VU!#UL5&M_UC&mB@t}0;MP!;D=>F%pw@G$fN%PFi4{d zw7ZMFBp|&0)|{Ot=oDEm;r~F^zy~fi^VZL*c9?`JqKQ43NW1 zp&U%j&_Qre+Ymg>z!H*~o61>|AD)_;or3*TG|0Fnq@M%!GPDf~8SjT!!2sJC#J~MOT8kk{_lLd51kz7xL&6mUVB4Gf%-a9cbtkUeUpKcQ9b?wFt>5g<8rC z+mV4~H;h|RCR7!C*9n&0Fu{qiA%6I-6D+%7g5i5p;O@e*8^$*uwg3vg{|3u$n2=J~ zX@FQ99gY}9g*qNaaigXKX1AhDG!fr?^!*&ci5NRGF!p?eWR#+r6H*E}6cC;)n8Q<3 zP}LwM6tDzRL_?Aqx+r|v9NbXMgapQRska+Wr9_0WT zfUSr`Rs$aUgV=(&P6(tCB8J6_7`j1@10S&n_8Ti`-YlDeu=k(}q4t0bA>D^iGsyBJ zR4>$i%p`-$pCtw0*>vV=6HdgX>o6ZMvgGIGU_EvR zq=5^r0XCh+h^S1!I+5K6jY;rOGPYETW+J8=!E=<3d6~K3Q~rvvIhU<0F{d;Y`&=`8 zZ4H)vjy#|P7(jQt7Ud=8aKJV&U|VVfc0PM%v1@KY3G8qoMpmf3u;PFZ9xzs*nH*@G zf*M-T4i0pX9u_<>eTV?H!j^o&1qpOXZ*F3N7h(qkvj}AUKFlCS1(=hdR$v)G#O`Ns zszGuos7-+`26a8UFua0?OP~Z6W`tt#52hmY8Xqazv4s)3ax4uhXpj)oHsA~?O3W)x z%P-1>YKnx?Ohh;ou9vV{EUv`Vg#8jS0^xx=_1hMf2(#F~6OwJhLPN^)PmLDS;(Jqs1>tK~GD+ zia|1iTWKD6s0$W-tkBFsnz!M;(t)uUSYf#s$t37p9&2$*5E?W#EE?i zMsjg6dO3)ar7;sKsN{xw4q*wT-wg>)OidVeAZJs;%5fwRxa|;MBj*N8GePc#R7s!% zmEjXnjG%c+==Od_$S47Lc|Lq`97GSOk4yf|rMMCacXDwtEY*Y40Rsa(oj~jbxfL;J z1aTi!CAg|2G-^cRGCO1kVGlw`@&!4|2p)z^OeGaeC6$9P$e2V~nMx`k!3JVNPY52+ z5ab4T7C<3roB|I*W=Ie+l~fIQC?dNLmh_lGfrlB6AkivF=+Y@j5m_F5W;LWC4GK%} znf&nJWP+ZCA75sGb|OD0y9+XK6yz6!bzmFAgcg`gNY^$(je~j;OZ9+!Fb*r|fP44} z`{3jKVb&nG60ukVcNTnWBAkI-bwRh;rNh=bFtNflLhJ@R04@e~HMqP$oexccECfKR zcbL*4YYdQuaWqGm)rZv`Aa16ZC$4y8bh9HfC5HIxD| zYET6tq}(q^EK1EQLEInCnw+1LUqpV>2i6EjF&$DOVHuFb*<3*@_xVeTQd8ZE@^hgF zW+5$g1lJ2fpp&*xm0&h!kQS4(loX|=VI77+R)n;r2Hwqr=)~zEbnS3|K>HsoB}JLJ z46wC_5FXSpkWy%I1XT=OcnB_=A?j0hCP)@CWCJl2F@Fxx0};iNFc2C+!Gc_iag-F5g7&zk!Y_hDh(L`4X@P|# zr0&Ev!HN`BtR*B)=%Q zq=*f?0kBw*fulIJurxIY7qPs3#S;WtW`jB3p;clJJcL5P||^x1>o@$q%svUiU8YOf|;OD zV-FtGmp_Un1>{YJ6rx9E51K zF_prO>803_NYyn{X%5!lLsEiTqeGkpFC0Mnp+cB}fy)roGz&6<@On&;DyT&u?a+D! zCDnq&!7Dwvz(o!C+&YjpXl)BBwUA`6HYq{Mk!(RX4Xg*#pU8<9WCFIv1F{;hF%WBz z;}1=TG5=Pc`2zyIhlE>i2kxrNoqxjOKNgHWYX3rGcT3$&NGrlP)A}q2(_ZeyP+O? zp(P0S4df)VeC!<%Qi=y5xRJUA;M39ITdJ@mCwvBDdKbGN5Eh1HWF}|lr51x0Hel+; zXBQ-d5qUru;fWHsp%6tR`T~>?VQ1G1fDhtJPc71e-gwPcnwOHFmkJ)qz^RBc-d6>p z4%1Jd6vm2b1;yl;0hu9yjRe8nh%*c+ zPRd{_KV3-HOjN%s9fHYPmtNmY?jnIZn4r0Mh+m+` zR-)PjHG~!69;jl-bOefDplU&$L^U5If@&<>10X4gV$ju~tfhIG`FV)2U@9?WDltNK zGFTPL(j~-r0r(7Uw#>ZZ)S?nrrV=AorV`k8MaT|IP$dgi1X=uqYBy9PTo7~#D!O|> zvvbVxWrjkmDVfP7hLFWf5RMU;W5@^Ixd-+U$N>J})ROqroZR@N(#)I^_>~372RA_+ z1o1c|Y?)Xg#zQDr3l<#UI1Pq78#--=+Q&tB9BdD<8HlSiFSDdLAhpOfmn!+bq*%8g zwMaJ=wj7`0e9sBm_yN9bQ>-)(eg#ElRceY`YGO%gQ7SwsF@i2lfX`jCr$MB_Hy}VV z93mN^j_0*5}TG(6n7U2}5vyo$lY`=B#164O%MQ%e}Q*)hc+MuJU*HpyX% zFvflHA3=(KyC_t(B)AsFcIGSGwUDcq1tBNH2Bm_J{0~XY%z=j&6MJ52IYtfXJn?qrg@AlMUa6%AG}gKF$ZLi zPb&1lFmNCvhbCK2YF>It22?ZXG~&d}96<&yr~`@D2=kI419x6(IXI?JHAC|b#$-8C z0R&T0jI^r@$tA4leuB-cBjGH~RV zr52^-1*|wi31%QS zSS4t72Voj3QnG-p4Pb$F0d{X< zW)6~jAtnfdBOObf!GaPWNalf!DoRa71P`*`SW`h;-N?2EDfltWz~xyMymY+(fl45HlOM=$*_LK;m0EY9J=Na+((tN?M~FC->WGA>*_X57G~pvE($7Gek? zEqj3&juG~7Eyxx?i%z&4wycXGiB?d+Vpzs*LDKA* zd6^}diSSV}hK7_s7%8qs46YxocU=rJ~8z#Tn^aKMNI zNJKM-8XI9qL81qA^cO7mSTGQsQK0#R9g;Kd3H(y_bnYgUmil7(MnE6BhLE&0HM=g5mLz@rL~4mK>{ zuoRw{juA*qPA<(Y1ud3^mG( zIwNeEf*=Fz`kNH!gmxy%DGcCnMII<3&Q=NNiTki~S>f~R5PvYh?MIGONGlW9@x(|= z+?bJ$*CfLE;5$N~7BjITM+2zrfFv`}a2tD3YFTPgF`}W58O6LH9ngXR95j#`4k`k> zwuG1rh!!uzXu+CRiP4CWzd*h~_!}HP2qEw|8#u=iV>Zs1Mi>YRTS%#ZDh5hcAQ5~q z4w6T>6c$6oI1D-a5ThPc0GCweq=M%Hi7pm-vr{WmQ=Fj}iVv@{Q4&!$f&&FyHWMl! zQ3FJX9}zyFl8?xuk`Js4Y#&G$ab=D`Nj}1vAZ^er&rJ0~lNH@pL#7nv1P3fi;J_<; zR+5WSjA+81TcPp5h!Jd1i2*HCaVK(O3XMTkvf?O55pj+hJ+R`Jyy6ujw-FOu=qC%q z*1IC-P^P?Mc#=eFf1;KvqXjK1YJiLuw1{L3O4!h%g^9STLkd@O6@JSl=?zwHcu@;C zgoTv}ypO6)i4fd`5pbq2Iq!c4PaQLIf0 zVk%bl+{6O^ypnvF3yEtu;T-*e8pFtn6eP%FeXtQ$=nMyrgaALy1!^4p2ok2u6yhAn zoeG{20!J*=5Ju?jg7g|g#yXfyT+M>>)*cp@qyvR9-7*F6V5>ShCNO?$%fv}PZ zq#s8)0pCo4Lmpm^fXtvzl>#e>Az1}HFp0JKjk{h!?cfVCAeE$$Y=rO#Bru^FdbDyG zPL&Jp@kzuiC5{>fH31PCA;KuDp~(q8e~B^LOHAg)=&?dgC1X$?r8tEf1Ia)5YaNV% zXGs3RQCJ|xOW~Hln|%W|Mm~VG67Cd8R02RuB7x^~sM!ahY1IU(DhQ?!VnTq3`ilzn z6GlcO#%Us@dEi9}NR<@QC=nadVgpDvBXVqh#MM-II>XR1WJGj?aF-OLbrk~xaXlo` z>MG=cW@t(qERzhQHC8d^N;gt#EIb7ZsD4840f5AC)LFg5Z7A#D76+j71l@| zvcr?4pe4wNsH?D!wGgbP;0XuM@=t;tsbMu}2OX=2CLM|^ALOtBm1c+%4mSP|wTY1x zb9LqbRykOc6EWp1Ehn^TT-y-iJtC?RXbJ+wHjcWB3f&{*fp22m4cZ?Inh{DttXzi8 z3Nf;PZk8Z!`hgRn9g=RDS;4v)7+@QPAi@mTt_;F#J|K((g%&t(KzGTox+UfmrxN2c z*gDq~@G3x}CZafC%ebMAC2I3FTob0FkPbTHE6pn}N-TgK4v4;EE4jEBNwILeuS#-$ z4(Mb=n1*6Z)6vejzfnH5D0>SG3Yc!Q?| zSWEM&G7Au9u@)p|78MIJuoRc17QoU8_(B!%kpYabi>_ch1Q=m^aG`^1LQEB~c@&5e zLm{S0xCnT%$50Y7Xa$aRup_|Jw@~*nu`*V$GF4z~#z0e3$qF(S-5~JjF>I?CGb`8= zh?)>Kn99Jw3h^e?N*vb=LuXE4OW{$&4eT6LA&BLev545;&sJKHl30SYpC7W*4qFC9 zXo79?hdLHMaR@aGdLjl?7E5}@GzsKv%+qgND+)k|dBBXttB4b{?-1-4kTOU_f)?9D zHN%q=GiOO+QF>~LcWNbTVophF5f|vliOl@G#G*>*q$Mjv0_J|?7zLTgoSq8Xn$N_F zWEzq|!l2##Aj}9egb9(zAqO3>c$F5zjDacw7hBLfDPTg7T`%ZPfS#!VRm62tO5z*j9+d@ z8g$D{%}D`obHu3S^)ACB({+q2oi;9LmXx0UzS>wlUT_M z@hxPFAn4|3kZP8!;`}^ruj2eX=+0Y~+{6Od7EES%an4x5SSblAXBjJD$rW8AYZ@ql zK)nSob2xHSOA=EOOA^8JG%&Xb!U9Ln7b?x3k_y_rS_BPx;tXfc$Sf|&FRBEajo}kW zR)abSoI;@Cj9fkwb`jQ4f_N6I6gU8}%0L{1S=@tmRCARU6r>h8<`iTk!cVPZ=FQ10 zE&bzJZ`YNbrZo3hlDkj8ij+35q?BTUIFbR$4u}ZlxtqPTpa^t~8$1G;_(6{LFUm~KD*@k`)%$!tSx6GVWJ(v9QJWz`YHMCeVic-^% z9Lj>+WP!N_Qimhiz?uizk<7=<0y3F91!{6=5#rDhu(?qE$n7Yw4oDjc+(d!~Bg8jv|s8@G2~*Ti_=igEc|~v1A)`-C&o2P98=-mYuD%I5ju1 z0M_urri8#j=O7b&6AK_tfgb8cgfW<*g5zX%kogc760LceqUR3@H1J7^(DoyE1Ol4AP>sQKCXS;;%fKzYq|}m3kb^L_ zVHy5PgdNilaS+ncqGgcg7sND(ESBVk&qz!MV0Sl1nMYz?dS+fa#pfb&mg#0djiRZG zdCELfQuEV`5(_e@5Y)V7x|vAE(bVOI*iT-^7o`xlAyNrnnQkt! zc@TMu(+Q}#4r(!EreIAHAZhM`;?&ZVeCM3RV%V@Ayo7{m#pxJy{g??Aq=KU?F()&{ zBeeoPjKs=ZTv7xY;Q@_7GRK!0F~^q~3o#YJ4n~EHG#Uso6~X$t@X^S0R5gY|OzEg< z4277IP}LX-F(sj@F%n`*L{(!f#FU7t##oSnqa;5lwYW3~dBg!)TfuJF4uXUY^psji zeFnW{Dy=9#7j(V^Qq@YdX7-YNpZxOFBJ?qE=vkUvAhRLX2r{r2f!$avDapqQcQMpi zjIe@|iIu6ykd>*(2)~+iLsn3D5-=&rkd-NkfJupltl$s@4d$7^oCq7xV}Uvki9#CU zV}k@blYcgnJctQvA~7()3<6D7fGZJDlYt0*AXC7YkxcuD)+fXqUuFun3Pdo&LO_VQ z2!1{?NCJvMdnQbUSV3LWJg5+Y0uQpAf((S6jmE%;FpwoFrxZ3AiO>Tc`7{$^Meg|{ zWWgqy!CJ>`5LKAzlqD@Cvka<>2~(QAB;PG3KM^(#%Lp3zEyzfOov`^I>@rpeN&ba+ z;4oo@1Pv(gSiuDNAZl#m?4SZi5Ol+LKv8OPYD#8ax<_I$;+R%Y!2=r7#a>eJq!tzB z=cVSC7K2JFh|d|pg%yMiC&5=wW41S-BCruGOiPGvz{ATIOfx_}L~$r013+#C14kP| z5K>NXfQk%IafD_dW{HB(2{8^9%?NRbiLf#X&A{a1Vvq|l;{dE5TeB8a%Yd)G!>NKm zYZPh#BzC~3kAbiIKyRp{nS$wV9L;B_@z_!u4jpJVK^%st?4brigt64|#F+{XEsT*^ zaK>QZW&w>Eb3;aL!Chg9WsuGVG?{|cKpV=S@)I(<0X6{X8ao!y3=dM~2djcijX}+X zk3%zqjP!Jcl}LFdAOt|!3eD1503;uJ)o z1UCpGL2(+z?pzMg?VFA%Wsz9>Bc!;O3uKaRVoI4VY{deNoXicf$RB(td<4a=<^>t1 z3prw57q<3-_70~!xKSKVwGamtWZ)zL?nJ}N8YZ@))Z)x4D$IW&%*L6jaW=^?b0EmI z;BWxB)-fkD9dRiLBU4%)wj9UqW2P$i;Ge0m4@6^;Fe#6({?6I-=Y|S-RT50;j5sQj5T&IgqG@=!}L? z*cQRz*H74kSX@h36FeP&9f|!iLUf0T!-B;nH7BuhNQ4b8CzBdL#zdtXzO>SuoFNe| zXfDMJ4p14z11l>+QY(;drDsbnEh?tQwe;|usSBDJgk}&dl^BUdD^pnp*4RQRi1;C8 z8TvimOjzp+H(-eiWFfvt8V*l338h1!o9xEKb2 zoCsSqgjiw)T?)xkmYG@(UTTC>346S+3P=@pbD*~lg3W;sW-~$dqC%Fy#g`cfap#rh z`lc2aC#I(sGa_?9qkINJY@mUuyb?wz4H4ul&PyyP&d4t*W<)T-Qi2TP5DicxgF!bO zfh|Mo+(8GHLAO~z!is^371?G{R;X>rf`SaJnRzLx6-eelR#$R^#?M?*(-KQ_V1s*D zhX2^|Qqw_;Um+GU!iN1Ap(nV3od~^Ar=&Cud4?J0+C;2(;E*f}_Z&wqG}MuN1nyZv zh5{fCWq^7GGYLRrmmPG^sc&&QR5>FnB$Omsam53C$O3X-0JuZT8d6%2lgd_{nw+1P z0(B0kw~FK1TKISYb4q3z+&n=BiTu2r%Ai!xjj2JY$*FlI&_sZ|ni?8jO!=^N(oheA z-2s(k&O^G^3F059qd>zYP(`>R6jLP=)^q{6iUoSR3q16Yk~36{33OjnPD(H+Rlr9o zSP6L*6ndPXBk=Wn600g%a}uj6jiCmzfLABrj8FkkhIY)!35I1cXpF*AECVaTjZnXm zZ<#R2GDuvZ+Xqjl$e9qk-H<^Iq|tX+nqWb4Ao}X}Rssf}4rNBr;x;YB04IGRhWjGxLD>y-lzyt8`R16k@M+l@e28&@!gG`wza5?l0 z50(HKgi_YPMWF>5Q%(uG5VUMV7Y3D!U@?$G(93491jsU&vH3-CA(ZkRB#JXs(4q>Y z792R(vmQtqr%}-42~vX+SI|4GaO%S-06`|;RE@0!18D$TiP=B^Nnx4=9%x9cL~SXt zvL)x|rDdjbWEKY`mKLX`uw@qe7o_H~gBnc5>BX$YC5a`epc!KW2oqicF@raN;I;-l z1`bW|Pzp51469w3SfMsSvn(jK!HJUvxdQ_$QW#j_4n$WEs-B_dGr{tz0Fol~NF`V# zgG$Am#7aCyU@uNNU{`~~9L<`RS&@p|(m;0#c5|3Z@(W-_FdC5T43?bKv=R#Rqt+~} zh6V;@uqz}%aYURS&}sy*DH$Yt1=>4?d4|0pKNB=;N3uEWDVfCuIf;l`E-eS%#3tTP z+~83@-OQ5I++vuM*gy@yRMM+&{;bmClFYP9-Q@hdlGHqSe35G&A2eumQ_E8GO5o08 zA*(tUK&;Hw1uqhS`BtJRJtN*NB>OQ5(nJI}1?x0JkQz1f5nI**~MX8Co z3Sp^5i3-7qdBqS3kJOwp&?3V`1;5l%u;Svxykgzr)S^sSe~EY(vRCPXyK}Gr?D^Gb^Hb6{)Um|%Wqh1EuoK%;^|`0Flir^FQ4HY;cV!B#hcsxTp* zB!qlCQ~~J39&lYrz>VCX&Iq*22-V60^Cv9GrJWP=^72a*N{dq!JaY^3i%JyoixgZd zKr8~r^Mj1X;(S&VHxn>~%`rJSwE#BG0PnegR)67bT5vigra;^a^%=}V;80^LN(FfU zDn-rk5`~5r#BK%XpaB6-a)ClB2-!(Ypo_*JjwGNLPXIB129s#yPxkP{qP)z!bONr! z<}(J+XcNd;1oW~wXXNL@FExWV_Sl>g^O93@VDZTd4Qa=`%JM|mY#A(Kah$7xGuJ`` z6K~3bIt!!*+~$Qg{~_lXpo_AE6qTle1>vP5sF4U4L2tq!_inJ2#c+*~5)V|+!iCVy zf;8#i(hwb>G7=<&GYHUgEndaQB?w-H809Kn)kvuZb5Iv~=LIO=U>`6KE=$(~Z@x?c zua|%(2zdDc>3Kjzv5k|XX~*tbXyyj{4S4_wKK9GZTbv3y^8s`dZc1teiK!IkCV8;xgD^B)HN9#~K;__zcVU|%a2Np|(*UPblwK($^FhSHmr8^C-LU;R z%n)hJR08!g4`>t=Hi89n5G$&8C81YpgFOtZwHc6y)1Vr`H}pbB9KeGK#EwDu;Efj) zH-c261|wJm6lRdY0*Ln!g2*GZAW_VqfOcZhGYmZTAqRDUj(|zZNzE;0gtNc{_d@K@ z;b=w}11t;+C*+YlaLhBpHUPm}RPf;-Xk;P0hqd3z5|WXsfGb*|e&GORDChhX*ot9B zR+!@;8VOk8rchE@kgAZMrcjw*TBJ}=1lqfitB?$7LL{Xs6s6{5CMM-nDuCLsi8+~7 zsVNF+`9%uQt>6lv&1l7X=yu`pI&qD_Ot;d!Wbmp1B)1@(preqNUj&j-C6~j3>7qbz)3BjC?8}sXj3^WJV`;#gjX_nf{YbiElO$u zmlinFI%j%*eu`ged9fk7A&iMIFTheTa@3$#O~{-7;AOH=MoCFQv6a4ldTC}#svc-; zIwvtNT`#{VT_2RLiuIFAi%arzcp&=0i4-d zcndQ`1QVwWe2F#KbgWSfG6Y=3z!N%H1Rm&&1*m**w4n+ymF9p12!}3SRp>bfvsnS2 z)dv-SPWcsx&CNU|MTvREpyNZF@++_`BEY$Z0h${aP*=EulY(wiKAxq0I8DTKGWIo; z>@ZJYn^Grb2_@Vhh+nWYlkk~_H#)%WM#$s@(pqx%B=B@au^z=1X+v>3SiUU zpd^c}K@K&Dkrm`h;))~C4b~vf2r_U(oDVwBtQb754GRHS7azKx2xsDl_E(^efKed# z3$Ygz}4Jsq|AdS0E>bO1p{y~1a%XRQivaZ z{u5-#irXPU444j( zl^{0e=rOCIo@r_>nu$0g3tUyBbcLY)z~LVu&cvehV&BA)?DbsS*ngC!-iI2p-C;!+h)L1GGM*QhS?%qFuDB3VI$9A~lu zw|sn4^FX~(P@FL^Ffg&gA`<2{jv(+Ef+>W$>(~v0rXaXskeo@LVUT1BGm6a-ly((h z^X81Kh=h(5lHj-lmxfRe!h3kIkt%o$V^!q{?q=sERw^W=Dx{RADwO1dx?2iqiOD69 zu6apDD!3D;P?lH(8c#@702MLC3Q(WxLG6W6oS=dlvzh^SOppp&kSaut!IYDUD!>BD zJ8&WF$ptQr2m@3h>hxxi;~iu^&eVn|#9*yyMsO*H5nIWKF&}s<2R^=pSww@H575wM zWCfcD<>A_iiHLEKO&~WTLK>V1Kth<_fUe91_uicI^NLG~N|Q_Sizr#73pG*%)JsA# z(lxK7sFDiif|ti2nG0ILLIq>_K+XjnkP10Wl?o<;9f~lKTK*S8btrk>M?L712W(_f zVmkP&A9zA$%So)vFD-#ISRia14Hi`6xIFTUGOP0QN)lm1b1-e7VonHgN)C%<6 z0%|ux(>pw~a3CqdUN*pVfNTM=G1lmCBqkN-=aiDM`hXhCbRh1BWkJ*+<1EP!NG$@b zF9A86fq{XMl@YmPOq_?gA?;0+s*^?66s3zzoJpwbf>;d6=}e*b$UtjEAz=V6nTT@; z+NvO~OqmX+R-1&LF`K86FptIIsVTm%thZgWIMTzO)CH=4_9RmY{5aJMS zrXiI?Az?y%5+i-x8>I`*xS&ZCY1tc{elQ#OPGCvVKw z7mj2APw=1y0XQdun^K@67cPP;L%|hb&%7XM9Ja#CH{5E#Z7yiz0Y1gY%#{i`M%}kK zod?FuPf5*z)*ONitVucf$=Uc)K3_>bxJYmUDNKd!(qLqT8v!~A3!edkCHYWyK?`Zv zq9wQ)LX72*xL|-Coy7<{^9Fiy7Q}qi@P=xES8?1(im-<;Ob4urLtpHO92j7`h%*LK z+(T_g8X>`Pv?eQf%|Aiqtc>MwcPi*An55>CzIG6rMG4vkvxsP?!M9Velj}5gXipVp zHK>ycbtkAXPF%>N4H1#C1egP~ggGrIA0F1^tpi0{RLV+bN)pyBPfg0sEYU4325oo& zFU}y>ECJoz{3>b~#IKuMObv6mF+BxqH6RaI!^=}xZiOi#eQX7F=`4$Kax&>7D(LBy z(?G#M!7w#f!2sqi{M}Dj`sUKrRq%BU4t8{Rg(h>Pk^-hj=zhm z57e8~jT=FfxB=C_5NlvDiC9QMQtY7A=+NB43u+-?wq~$IE=VEF0jRBdOy}ZOi=OO2 zD#4ba4_qOID70P#D@939Xd=0Zi0OCi^#Q5|jDZ?7Z(+1UK-#ef0a~L6St0hw!mEN8 zG(zB7QBsr`l9@+f6h{EMg&VFMugTz161dW!)a3jk0@tXBp_>oUglr3Huz?$v&}DT< z4a?lb%A{2A(mD7=8IVB^dbKH`PNHp_lJsE{NMn$dk?f5?tc;}Z{y}fZvXHfFhYzGn zHzl(u6}%V?R&%i>=jW8>=0S=qQkumm8&}wsUBG~3WAM-5ni=XSKrrd8V=6V;@U&~t zW?N7*mLRB9fTrT$oXiw>--?M9mZgvnBR~o`NCgZ!6CG0OLn?6WB^irXX>I{TFH8ZV z1cTa+(ilLt6Yda*0pQ3-Y-(iz?P7dU3$bJ-BOMNaH5q~@Jz-&mtwTnfkFZahn-RO2j}?+xpzZ)K zRKwB)2L&*4-oc$O!5#-mgG)GUfeDuc8wd^sxDa+P!=)iQKr^HuA?zWKrNn`k42;l$ zKcplKHWD-h3Jn4HkQ_UbBJ9qB>3}6BNb?ECVZM+S1I@!8Ym!Hs-SD6U{Gd;Y>9$l1~T73*C<2RSkKhLEXPF8$kJFB zOd>Ss8tR!Cnn1`Lh@=8oNfo}tPdKx&L3UN+3txx|SonUVM))egJ!YstW&m3%7()#K z$F;5zQgDJq4B^3Ts9*>VerWLOnu5Yt0YXBJFib< z#a$UgQ!Q=N&#<;;> zGjncY1tfMDV3UI2X%Fb_5}-S5Jo8}D!iZFWAjKa>fPnY>l3*&}W`KddGBo_Vm*1F%1F=!E(Xqy%SiiX0kvats%w)&PxZ!di_` z_b~{AsvXR3H}>p=WDZCh#9L_22TOng4xFVx`AVxWi0WASsv`2+u+{s)OgWV7naP zEfAKH#Pnjevecra)D%Gm#Ih!^4e%Yp(DVk$4>)aruWUz3{9q&4i$FKe!jFw%WChy_ zUL_2&5w_Ns5mfa<^@73?oCd)YoKXAWB@+BLIha-kuwEhNl0?`cz|d7y=*A&-X~C-q z_?mj?%mp|xVA{x?rx}iLE!+~CJuEl=+Zd&MTg*9-wcF6 z%HU$)d*U$m`s4E#{?i5E{sP-Vl*d>V67y0Nz_DmVlm1&f}w* z0#X3Bf*X7SVR1of5j?fyw+U9gGwDD#79lboMy^4G6s#V=pJHKVv*|$M3l;%TU*XSU zpeTd-5<+o-N*Bz!2JBvF;DDC&fK(xiK?4jf3=Sr6OrQ!Oha6Z2?mXD8A9x^xRtJHV zz(rs|1r~*C1ZPT+5aALFyDI2Z6}0389}f>75@zN}E-flb&4cvRAP01VW{w0IxS_{V z_$B71@^N#(c4qQJg+uZol?EhK86dmV1sOP#LD#v0^uV`rLE{PJOK1QyA)N`1YCpsQ zuowp))B!(4Iu*2!Mgeqo2da=R>?9(4r>JedyqzA2a06v2dt^*Q$uxy2y zWkLJQpo-z%MplL4ppwjz9M}e1Mpl$00dDFM;SE@6e8e|Mu8XOj�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 + + + + Main + + + + + + + diff --git a/frontend/shell.nix b/frontend/shell.nix new file mode 100644 index 0000000..20dc38c --- /dev/null +++ b/frontend/shell.nix @@ -0,0 +1,9 @@ +{pkgs ? import {}}: +pkgs.mkShell { + nativeBuildInputs = [ + pkgs.elmPackages.elm + pkgs.elmPackages.elm-format + pkgs.uglify-js + pkgs.ungoogled-chromium + ]; +} diff --git a/frontend/src/Main.elm b/frontend/src/Main.elm new file mode 100644 index 0000000..9ee642e --- /dev/null +++ b/frontend/src/Main.elm @@ -0,0 +1,1165 @@ +port module Main exposing (..) + +import Browser +import Browser.Dom as Dom +import Browser.Navigation as Nav +import Css exposing (..) +import Html.Styled exposing (Attribute, Html, styled, text, toUnstyled) +import Html.Styled.Attributes exposing (id, value) +import Html.Styled.Events exposing (onInput) +import Json.Decode as D +import Json.Encode as E +import Task +import Url + + + +-- MAIN + + +main : Program E.Value Model Msg +main = + Browser.application + { init = init + , view = view + , update = update + , subscriptions = subscriptions + , onUrlChange = UrlChanged + , onUrlRequest = LinkClicked + } + + + +-- MODEL + + +type alias Font = + { fontSize : Float + } + + +type alias CookiesKept = + { keepTheme : Bool + , keepFont : Bool + , keepPrompt : Bool + } + + +type alias Prompt = + { prompt : String + } + + +type alias Model = + { key : Nav.Key + , url : Url.Url + , theme : Theme + , font : Font + , cookiesKept : CookiesKept + , prompt : Prompt + , content : List (Html Msg) + , cliContent : String + } + + +init : E.Value -> Url.Url -> Nav.Key -> ( Model, Cmd Msg ) +init flags url key = + let + initContent = + [ text "Welcome to my website!" + , text "\nRun `help` to get started" + ] + + cookiesKept = + case D.decodeValue cookiesKeptDecoder flags of + Ok cK -> + cK + + Err _ -> + { keepTheme = True + , keepFont = True + , keepPrompt = True + } + in + ( { key = key + , url = url + , theme = + if cookiesKept.keepTheme then + case D.decodeValue (themeDecoder flags) flags of + Ok theme -> + theme + + Err _ -> + Pit + + else + Pit + , font = + if cookiesKept.keepFont then + case D.decodeValue fontDecoder flags of + Ok font -> + font + + Err _ -> + { fontSize = 20.0 } + + else + { fontSize = 20.0 } + , cookiesKept = cookiesKept + , prompt = + if cookiesKept.keepPrompt then + case D.decodeValue promptDecoder flags of + Ok prompt -> + prompt + + Err _ -> + { prompt = ">" } + + else + { prompt = ">" } + , content = initContent + , cliContent = "" + } + , Task.attempt (\_ -> NoInitFocus) (Dom.focus "init-focus") + ) + + + +-- UPDATE + + +type Msg + = LinkClicked Browser.UrlRequest + | UrlChanged Url.Url + | TakeInput String + | NoInitFocus + | ReceivedTest (Result D.Error Test) + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + LinkClicked urlRequest -> + case urlRequest of + Browser.Internal url -> + ( model, Nav.pushUrl model.key (Url.toString url) ) + + Browser.External href -> + ( model, Nav.load href ) + + UrlChanged url -> + ( { model | url = url } + , Cmd.none + ) + + TakeInput string -> + if String.endsWith "\n" string then + runCommand + { model + | cliContent = "" + , content = + model.content + ++ [ text + (if model.content /= [] then + "\n" + + else + "" + ) + , coloredText (coreColor BrightMagenta) model.prompt.prompt + , text <| String.trim string + ] + } + (parseInput string) + + else + ( { model | cliContent = string }, Cmd.none ) + + NoInitFocus -> + ( model, Cmd.none ) + + ReceivedTest result -> + case result of + Ok test -> + ( { model | content = model.content ++ [ text "\nData got successfully" ] }, Cmd.none ) + + Err err -> + ( { model | content = model.content ++ [ text <| "\n" ++ D.errorToString err ] }, Cmd.none ) + + + +-- COMMANDS + + +type Command + = Help + | Clear + | Cookies + | FontCommand + | Hello + | PromptCommand + | Theme + + +type alias Input = + { command : Command + , args : List String + } + + +parseInput : String -> Result String Input +parseInput input = + let + tokens = + List.map String.trim (String.split " " input) + + command = + case List.head tokens of + Just "help" -> + Ok Help + + Just "clear" -> + Ok Clear + + Just "cookies" -> + Ok Cookies + + Just "font" -> + Ok FontCommand + + Just "hello" -> + Ok Hello + + Just "prompt" -> + Ok PromptCommand + + Just "theme" -> + Ok Theme + + Just trimput -> + Err trimput + + _ -> + Err "error in parseInput parsing tokens" + + args = + case List.tail tokens of + Just tail -> + Ok <| List.filter ((/=) "") tail + + _ -> + Err "error in parseInput parsing tokens" + in + case args of + Ok arguments -> + case command of + Ok cmd -> + Ok { command = cmd, args = arguments } + + Err err -> + Err err + + Err err -> + Err err + + +runCommand : Model -> Result String Input -> ( Model, Cmd Msg ) +runCommand model input = + case input of + Ok { command, args } -> + case command of + Help -> + ( runHelp model args, Cmd.none ) + + Clear -> + ( runClear model args, Cmd.none ) + + Cookies -> + runCookies model args + + FontCommand -> + runFont model args + + Hello -> + runHello model args + + PromptCommand -> + runPrompt model args + + Theme -> + runTheme model args + + Err "" -> + ( model, Cmd.none ) + + Err string -> + ( { model + | content = model.content ++ [ text <| "\ncommand " ++ string ++ " not recognised. Run `help` to find a valid command" ] + } + , Cmd.none + ) + + + +-- COMMANDS + + +runHelp : Model -> List String -> Model +runHelp model args = + { model + | content = + model.content + ++ (if List.length args < 2 then + case List.head args of + Nothing -> + [ text <| + "\n+--------------------------------------------------+" + ++ "\n|help prints this message |" + ++ "\n|help prints more information about |" + ++ "\n+--------------------------------------------------+" + ++ "\nclear clears the screen" + ++ "\ncookies [UNSTABLE] manages cookies" + ++ "\nhello prints hello world message" + ++ "\nfont manages font" + ++ "\nprompt [UNFINISHED] manages prompt" + ++ "\ntheme manages theme" + ] + + Just "help" -> + [ text <| + "\nhelp lists available commands with a short summary" + ++ "\nhelp prints more information about " + ] + + Just "clear" -> + [ text <| "\nclear clears the screen" + ] + + Just "cookies" -> + [ text <| + "\ncookies prints info about the current cookie settings" + ++ "\ncookies set [true|false] sets whether to store a certain cookie" + ++ "\noptions for are:" + ++ "\n keepFont - whether to store fontSize. Default fontSize is 20" + ++ "\n keepPrompt - whether to store prompt. Default prompt is >" + ++ "\n keepTheme - whether to store theme. Default theme is pit" + ] + + Just "hello" -> + [ text <| "\nhello prints `Hello World!`" + ] + + Just "font" -> + [ text <| + "\nfont size prints info about the current font size" + ++ "\nfont size changes fontSize to if is >0" + ++ "\nfont reset changes fontSize to the default of 20px" + ] + + Just "prompt" -> + [ text <| + "\nprompt prints info about the current prompt" + ++ "\nprompt set sets prompt text to " + ++ "\n is specified in quotes" + ++ "\nprompt color sets prompt color to " + ++ "\n run `colors` to list available colors" + ] + + Just "theme" -> + [ text <| + "\ntheme sets the current theme according to " + ++ "\nOptions for are:" + ++ "\n sun - a theme blinding like the sun" + ++ "\n sky - a toned-down light theme" + ++ "\n dim - a deep and colorful dark theme" + ++ "\n pit - nearly black like the bottom of a pit" + ] + + Just string -> + wrongArgs Help 1 args + + else + wrongArgs Help 1 args + ) + } + + +runClear : Model -> List String -> Model +runClear model args = + case List.head args of + Nothing -> + { model | content = [] } + + Just string -> + { model | content = model.content ++ wrongArgs Clear 0 args } + + +runCookies : Model -> List String -> ( Model, Cmd Msg ) +runCookies model args = + case List.head args of + Nothing -> + let + newModel = + { model | content = model.content ++ [ text <| "\n" ++ cookiesKeptToString model.cookiesKept ] } + in + ( newModel + , Cmd.batch [ setStorage <| encodeModel newModel ] + ) + + Just "set" -> + let + cookiesKept = + model.cookiesKept + + second = + case List.tail args of + Just tail -> + Maybe.withDefault "" (List.head tail) + + Nothing -> + "" + + third = + case List.tail args of + Just tail -> + case List.tail tail of + Just tail2 -> + Maybe.withDefault "" (List.head tail2) + + Nothing -> + "" + + Nothing -> + "" + in + if third == "" then + ( { model | content = model.content ++ wrongArgs Cookies 3 args }, Cmd.none ) + + else + case second of + "" -> + ( { model | content = model.content ++ wrongArgs Cookies 2 args }, Cmd.none ) + + "keepFont" -> + case third of + "true" -> + saveModel { model | cookiesKept = { cookiesKept | keepFont = True } } + + "false" -> + saveModel { model | cookiesKept = { cookiesKept | keepFont = False } } + + _ -> + ( { model | content = model.content ++ wrongArgs Cookies 3 args }, Cmd.none ) + + "keepTheme" -> + case third of + "true" -> + saveModel { model | cookiesKept = { cookiesKept | keepTheme = True } } + + "false" -> + saveModel { model | cookiesKept = { cookiesKept | keepTheme = False } } + + _ -> + ( { model | content = model.content ++ wrongArgs Cookies 3 args }, Cmd.none ) + + "keepPrompt" -> + case third of + "true" -> + saveModel { model | cookiesKept = { cookiesKept | keepPrompt = True } } + + "false" -> + saveModel { model | cookiesKept = { cookiesKept | keepPrompt = False } } + + _ -> + ( { model | content = model.content ++ wrongArgs Cookies 3 args }, Cmd.none ) + + _ -> + ( { model | content = model.content ++ wrongArgs Cookies 2 args }, Cmd.none ) + + Just string -> + ( { model | content = model.content ++ wrongArgs Cookies 1 args }, Cmd.none ) + + +runHello : Model -> List String -> ( Model, Cmd Msg ) +runHello model args = + case List.head args of + Nothing -> + ( { model | content = model.content ++ [ text "\nHello World!" ] }, Cmd.none ) + + _ -> + ( { model | content = model.content ++ wrongArgs Hello 0 args }, Cmd.none ) + + +runFont : Model -> List String -> ( Model, Cmd Msg ) +runFont model args = + case List.head args of + Nothing -> + ( { model | content = model.content ++ wrongArgs FontCommand 1 args }, Cmd.none ) + + Just "size" -> + let + string = + case List.tail args of + Just tail -> + Maybe.withDefault "" (List.head tail) + + Nothing -> + "" + + fl = + String.toFloat string + in + case fl of + Just float -> + if float > 0 then + let + newModel = + { model + | content = + model.content + ++ [ text <| + "\nfontSize successfully set to " + ++ string + ++ "px" + ] + , font = { fontSize = float } + } + in + saveModel newModel + + else + ( { model + | content = + model.content + ++ [ text "\nPlease enter a valid fontSize, a Float greater than 0" ] + } + , Cmd.none + ) + + Nothing -> + case string of + "" -> + ( { model | content = model.content ++ [ text <| "\nfontSize is " ++ String.fromFloat model.font.fontSize ++ "px" ] } + , Cmd.none + ) + + "reset" -> + let + newModel = + { model + | content = + model.content + ++ [ text "\nfontSize reset to 20px" ] + , font = { fontSize = 20 } + } + in + saveModel newModel + + _ -> + ( { model + | content = + model.content + ++ [ text <| + "\nfontSize " + ++ string + ++ " not recognised; font size expected" + ] + } + , Cmd.none + ) + + Just "reset" -> + let + newModel = + { model + | content = model.content ++ [ text "\nfontSize reset to 20px" ] + , font = { fontSize = 20 } + } + in + ( newModel + , Cmd.batch + [ setStorage <| encodeModel newModel + ] + ) + + Just string -> + ( { model | content = model.content ++ wrongArgs FontCommand 1 args }, Cmd.none ) + + +runPrompt : Model -> List String -> ( Model, Cmd Msg ) +runPrompt model args = + case List.head args of + Nothing -> + ( { model | content = model.content ++ [ text <| "\ncurrent prompt is " ++ model.prompt.prompt ] }, Cmd.none ) + + Just string -> + let + oldPrompt = + model.prompt + in + saveModel { model | prompt = { oldPrompt | prompt = string } } + + +runReset : Model -> List String -> ( Model, Cmd Msg ) +runReset model args = + case List.head args of + Nothing -> + ( model, Cmd.none ) + + Just _ -> + ( model, Cmd.none ) + + +runTheme : Model -> List String -> ( Model, Cmd Msg ) +runTheme model args = + case List.head args of + Nothing -> + ( { model + | content = + model.content + ++ [ text <| + "\nThe current theme is " + ++ (case model.theme of + Sun -> + "sun" + + Sky -> + "sky" + + Dim -> + "dim" + + Pit -> + "pit" + ) + ] + } + , Cmd.none + ) + + Just "sun" -> + setTheme model Sun + + Just "sky" -> + setTheme model Sky + + Just "dim" -> + setTheme model Dim + + Just "pit" -> + setTheme model Pit + + Just string -> + ( { model | content = model.content ++ wrongArgs Theme 1 args }, Cmd.none ) + + + +-- COMMAND ABSTRACTIONS + + +setTheme : Model -> Theme -> ( Model, Cmd Msg ) +setTheme model theme = + let + newModel = + { model | theme = theme } + in + saveModel newModel + + +wrongArgs : Command -> Int -> List String -> List (Html Msg) +wrongArgs command expected args = + let + comstr = + case command of + Help -> + "help" + + Clear -> + "clear" + + Cookies -> + "cookies" + + FontCommand -> + "font" + + Hello -> + "hello" + + PromptCommand -> + "prompt" + + Theme -> + "theme" + in + [ text + ((if expected > List.length args then + "\nToo few arguments for " ++ comstr + + else if expected < List.length args then + "\nToo many arguments for " ++ comstr + + else + "\nUnexpected arguments " ++ listToString args + ) + ++ ". Run `help " + ++ comstr + ++ "` for usage" + ) + ] + + +listToString : List String -> String +listToString list = + "[" ++ String.join "," list ++ "]" + + +boolToString : Bool -> String +boolToString bool = + case bool of + True -> + "True" + + False -> + "False" + + +cookiesKeptToString : CookiesKept -> String +cookiesKeptToString cookiesKept = + "{ keepFont = " + ++ boolToString cookiesKept.keepFont + ++ "\n, keepTheme = " + ++ boolToString cookiesKept.keepTheme + ++ "\n}" + + +saveModel : Model -> ( Model, Cmd Msg ) +saveModel model = + ( model, Cmd.batch [ setStorage <| encodeModel model ] ) + + + +-- PORTS +-- sets localStorage 'cookies' to E.Value + + +port setStorage : E.Value -> Cmd a + + + +-- gets from server and everything + + +port refresh : () -> Cmd a + + + +-- for testing purposes: test.json on server + + +port receiveTestFromServer : (E.Value -> msg) -> Sub msg + + + +-- JSON + + +encodeModel : Model -> E.Value +encodeModel model = + E.object + [ ( "theme" + , E.string <| + case model.theme of + Pit -> + "Pit" + + Dim -> + "Dim" + + Sky -> + "Sky" + + Sun -> + "Sun" + ) + , ( "font" + , E.object + [ ( "fontSize" + , E.float model.font.fontSize + ) + ] + ) + , ( "cookiesKept" + , E.object + [ ( "keepTheme", E.bool model.cookiesKept.keepTheme ) + , ( "keepFont", E.bool model.cookiesKept.keepFont ) + , ( "keepPrompt", E.bool model.cookiesKept.keepPrompt ) + ] + ) + , ( "prompt" + , E.object + [ ( "prompt" + , E.string model.prompt.prompt + ) + ] + ) + ] + + +themeDecoder : E.Value -> D.Decoder Theme +themeDecoder flags = + case D.decodeValue (D.field "theme" D.string) flags of + Ok "Pit" -> + D.succeed Pit + + Ok "Dim" -> + D.succeed Dim + + Ok "Sky" -> + D.succeed Sky + + Ok "Sun" -> + D.succeed Sun + + Ok _ -> + D.fail "Unknown value found in theme field of json" + + Err _ -> + D.fail "Error decoding theme field of json" + + +fontDecoder : D.Decoder Font +fontDecoder = + D.map Font + (D.at [ "font", "fontSize" ] D.float) + + +cookiesKeptDecoder : D.Decoder CookiesKept +cookiesKeptDecoder = + D.map3 CookiesKept + (D.at [ "cookiesKept", "keepTheme" ] D.bool) + (D.at [ "cookiesKept", "keepFont" ] D.bool) + (D.at [ "cookiesKept", "keepPrompt" ] D.bool) + + +promptDecoder : D.Decoder Prompt +promptDecoder = + D.map Prompt + (D.at [ "prompt", "prompt" ] D.string) + + +type alias Test = + { message0 : String + , message1 : String + } + + +testDecoder : D.Decoder Test +testDecoder = + D.map2 Test + (D.field "message0" D.string) + (D.field "message1" D.string) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + receiveTestFromServer (D.decodeValue testDecoder >> ReceivedTest) + + + +-- VIEW + + +view : Model -> Browser.Document Msg +view model = + Browser.Document "andrew.r3tic.net" + [ toUnstyled <| viewBody model ] + + +viewBody : Model -> Html Msg +viewBody model = + styledBody model + [] + [ styledContent model [] model.content + , styledCL + model + [] + [ styledPrompt model [] [ coloredText (coreColor BrightMagenta) model.prompt.prompt ] + , styledCLI model [ onInput TakeInput, value model.cliContent, id "init-focus" ] [] + ] + ] + + + +-- STYLES + + +type Theme + = Pit + | Dim + | Sky + | Sun + + +type CoreColor + = Red + | Green + | Yellow + | Blue + | Magenta + | Cyan + | BrightRed + | BrightGreen + | BrightYellow + | BrightBlue + | BrightMagenta + | BrightCyan + + +type ThemeColor + = Background + | Foreground + | Cursor + | Black + | White + | BrightBlack + | BrightWhite + + + +-- Colors from Root Loops +-- flavor: intense +-- fruit: raspberry +-- milk: each option +-- sugar: 6 +-- colors: 9 +-- sogginess: 7 + + +coreColor : CoreColor -> Color +coreColor color = + case color of + Red -> + hex "e14433" + + Green -> + hex "#359b54" + + Yellow -> + hex "#a08016" + + Blue -> + hex "#5a77f2" + + Magenta -> + hex "#cf2ec8" + + Cyan -> + hex "1894a5" + + BrightRed -> + hex "#f36552" + + BrightGreen -> + hex "#3db361" + + BrightYellow -> + hex "#b9941a" + + BrightBlue -> + hex "#7491f8" + + BrightMagenta -> + hex "#e54ede" + + BrightCyan -> + hex "#1eabbf" + + +themeColor : Model -> ThemeColor -> Color +themeColor model color = + case model.theme of + Pit -> + case color of + Background -> + hex "#120211" + + Foreground -> + hex "#f3d9f0" + + Cursor -> + themeColor model White + + Black -> + hex "#380e36" + + White -> + hex "#e29edc" + + BrightBlack -> + hex "#7c2b77" + + BrightWhite -> + hex "#f9ecf7" + + Dim -> + case color of + Background -> + hex "#380e36" + + Foreground -> + hex "#f7e5f4" + + Cursor -> + themeColor model White + + Black -> + hex "#5e1c56" + + White -> + hex "#e8b2e2" + + BrightBlack -> + hex "#9d3c98" + + BrightWhite -> + hex "#fbf4fa" + + Sky -> + case color of + Background -> + hex "#f3d9f0" + + Foreground -> + hex "#380e36" + + Cursor -> + themeColor model White + + Black -> + hex "#eec6e9" + + White -> + hex "#7c2b77" + + BrightBlack -> + hex "#d575cd" + + BrightWhite -> + hex "#120211" + + Sun -> + case color of + Background -> + hex "#f9ecf7" + + Foreground -> + hex "#5a1c56" + + Cursor -> + themeColor model White + + Black -> + hex "#f3d9f0" + + White -> + hex "#9d3c98" + + BrightBlack -> + hex "#dc8ed5" + + BrightWhite -> + hex "#380e36" + + +styledBody : Model -> List (Attribute Msg) -> List (Html Msg) -> Html Msg +styledBody model = + styled Html.Styled.main_ + [ backgroundColor <| themeColor model Background + , color <| themeColor model Foreground + , minHeight (vh 100) + , width (vw 100) + , margin (px 0) + , padding (px 0) + ] + + +styledContent : Model -> List (Attribute Msg) -> List (Html Msg) -> Html Msg +styledContent model = + styled Html.Styled.span + [ color <| themeColor model Foreground + , fontSize (px model.font.fontSize) + , padding (px 0) + , margin (px 0) + , backgroundColor <| themeColor model Background + , borderWidth (px 0) + , width (vw 100) + , whiteSpace preWrap + , fontFamily monospace + ] + + +styledCL : Model -> List (Attribute Msg) -> List (Html Msg) -> Html Msg +styledCL model = + styled Html.Styled.span + [ backgroundColor <| themeColor model Background + , padding (px 0) + , margin (px 0) + , displayFlex + , flexDirection row + , flexWrap noWrap + , justifyContent flexStart + ] + + +styledCLI : Model -> List (Attribute Msg) -> List (Html Msg) -> Html Msg +styledCLI model = + styled Html.Styled.textarea + [ color <| themeColor model Foreground + , fontSize (px model.font.fontSize) + , padding (px 0) + , margin (px 0) + , backgroundColor <| themeColor model Background + , borderWidth (px 0) + , outlineWidth (px 0) + , height (px model.font.fontSize) + , resize none + , overflow hidden + , flexGrow (Css.int 100) + ] + + +styledPrompt : Model -> List (Attribute Msg) -> List (Html Msg) -> Html Msg +styledPrompt model = + styled Html.Styled.span + [ color <| themeColor model Foreground + , fontSize (px model.font.fontSize) + , padding (px 0) + , margin (px 0) + , backgroundColor <| themeColor model Background + , borderWidth (px 0) + , height (px model.font.fontSize) + , fontFamily monospace + ] + + +coloredText : Color -> String -> Html Msg +coloredText fgColor string = + coloredTextWBackground fgColor (rgba 0 0 0 0) string + + +coloredTextWBackground : Color -> Color -> String -> Html Msg +coloredTextWBackground fgColor bgColor string = + styled Html.Styled.span + [ color fgColor + , backgroundColor bgColor + , padding (px 0) + , margin (px 0) + , borderWidth (px 0) + ] + [] + [ text string ] diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..9fad334 --- /dev/null +++ b/shell.nix @@ -0,0 +1,21 @@ +{pkgs ? import {}}: let + elmInputs = [ + pkgs.elmPackages.elm + pkgs.elmPackages.elm-format + pkgs.uglify-js + ]; + haskellInputs = [ + pkgs.stack + ]; + cliTools = [ + pkgs.httpie + pkgs.ungoogled-chromium + ]; +in + pkgs.mkShell { + nativeBuildInputs = [ + elmInputs + haskellInputs + cliTools + ]; + } diff --git a/src/Main.elm b/src/Main.elm new file mode 120000 index 0000000..0e01ba0 --- /dev/null +++ b/src/Main.elm @@ -0,0 +1 @@ +../frontend/src/Main.elm \ No newline at end of file diff --git a/src/Main.hs b/src/Main.hs new file mode 120000 index 0000000..d97d299 --- /dev/null +++ b/src/Main.hs @@ -0,0 +1 @@ +../backend/app/Main.hs \ No newline at end of file