From a5f144cb7c3f090b97a2f9751ac6467bc89f1fa5 Mon Sep 17 00:00:00 2001 From: Robbie Trencheny Date: Wed, 17 Aug 2016 22:34:12 -0700 Subject: [PATCH] HTML5 notify actions (#2855) * Add action and callback support to html5 (#2855). Remove registrations from the callback view since we always get the latest anyway. We dont put an audience in the claims so we will never hit this error. Bring tests back up to where they were before callbacks. Only import jwt where necessary Fix bracket spacing errors Fix JWT decode check for loop Remove stale comment. Add tests for the callback system. Shorten line Disable pylint broad-except and change e to jwt_decode_error. Verify expiration Remove duplicate jwt.exceptions.DecodeError Catch no keys matched and return False * Switch to using registrations for callbackview instead of json_path * Only check for URL and such if the data object actually exists * raise instead of return * cleanup decode_jwt * Clean up JWT errors * Correctly set status_code to 401 * Improve JWT by adding target to claims and attempting to check the given target for a decode match first, as well as pass the target through in the event payload. * Add tag support and fix formatting issues * Pass through any keys that dont apply to the payload into the notification.data dictionary * Remove stale print * Pass back the data dictionary if it exists * Actually put the default url even if a notify payload dictionary doesnt exist * pylint, flake8 * Add subscription validation * Add validation for the callback event payload and use constants where possible * Use HTTP_UNAUTHORIZED instead of 401 * Change callback dictionary to dict instead of cv.match_all * Fix up tests and make subscription required * Whoops, that test was supposed to fail * Use the result of CALLBACK_EVENT_PAYLOAD_SCHEMA as event_payload * Add a test for html5 callback decode_jwt where the device has been renamed since notification has been sent. * Remove the loop through logic, assume that target is always in JWT * Always return something instead of possibly None. * Update frontend --- homeassistant/components/frontend/version.py | 4 +- .../components/frontend/www_static/core.js | 8 +- .../components/frontend/www_static/core.js.gz | Bin 31500 -> 31529 bytes .../frontend/www_static/frontend.html | 2 +- .../frontend/www_static/frontend.html.gz | Bin 123182 -> 123194 bytes .../www_static/home-assistant-polymer | 2 +- .../frontend/www_static/service_worker.js | 2 +- .../frontend/www_static/service_worker.js.gz | Bin 2012 -> 2285 bytes homeassistant/components/notify/html5.py | 220 +++++++++++++++--- requirements_all.txt | 3 + tests/components/notify/test_html5.py | 109 ++++++++- 11 files changed, 306 insertions(+), 44 deletions(-) diff --git a/homeassistant/components/frontend/version.py b/homeassistant/components/frontend/version.py index ec30e4804c7..82d10fb5f47 100644 --- a/homeassistant/components/frontend/version.py +++ b/homeassistant/components/frontend/version.py @@ -1,8 +1,8 @@ """DO NOT MODIFY. Auto-generated by script/fingerprint_frontend.""" FINGERPRINTS = { - "core.js": "b4ee3a700ef5549a36b436611e27d3a9", - "frontend.html": "411fcc6c69b3cab0740ac3db4b9947c8", + "core.js": "7a72f4dcf2a1d5e04094ef807478614d", + "frontend.html": "77a461848fe2a94da4e26a103bd6f814", "mdi.html": "b399b5d3798f5b68b0a4fbaae3432d48", "panels/ha-panel-dev-event.html": "3cc881ae8026c0fba5aa67d334a3ab2b", "panels/ha-panel-dev-info.html": "34e2df1af32e60fffcafe7e008a92169", diff --git a/homeassistant/components/frontend/www_static/core.js b/homeassistant/components/frontend/www_static/core.js index 4def07355e1..8b529c77424 100644 --- a/homeassistant/components/frontend/www_static/core.js +++ b/homeassistant/components/frontend/www_static/core.js @@ -1,4 +1,4 @@ -!function(){"use strict";function t(t){return t&&"object"==typeof t&&"default"in t?t.default:t}function e(t,e){return e={exports:{}},t(e,e.exports),e.exports}function n(t,e){var n=e.authToken,r=e.host;return De({authToken:n,host:r,isValidating:!0,isInvalid:!1,errorMessage:""})}function r(){return Ce.getInitialState()}function i(t,e){var n=e.errorMessage;return t.withMutations(function(t){return t.set("isValidating",!1).set("isInvalid",!0).set("errorMessage",n)})}function o(t,e){var n=e.authToken,r=e.host;return Re({authToken:n,host:r})}function u(){return Le.getInitialState()}function a(t,e){var n=e.rememberAuth;return n}function s(t){return t.withMutations(function(t){t.set("isStreaming",!0).set("useStreaming",!0).set("hasError",!1)})}function c(t){return t.withMutations(function(t){t.set("isStreaming",!1).set("useStreaming",!1).set("hasError",!1)})}function f(t){return t.withMutations(function(t){t.set("isStreaming",!1).set("hasError",!0)})}function h(){return Pe.getInitialState()}function l(t,e){var n=e.model,r=e.result,i=e.params,o=n.entity;if(!r)return t;var u=i.replace?Be({}):t.get(o),a=Array.isArray(r)?r:[r],s=n.fromJSON||Be;return t.set(o,u.withMutations(function(t){for(var e=0;e199&&u.status<300?t(e):n(e)},u.onerror=function(){return n({})},r?(u.setRequestHeader("Content-Type","application/json;charset=UTF-8"),u.send(JSON.stringify(r))):u.send()})}function A(t,e){var n=e.message;return t.set(t.size,n)}function D(){return In.getInitialState()}function C(t,e){t.dispatch(gn.NOTIFICATION_CREATED,{message:e})}function z(t){t.registerStores({notifications:In})}function R(t,e){if("lock"===t)return!0;if("garage_door"===t)return!0;var n=e.get(t);return!!n&&n.services.has("turn_on")}function L(t,e){return!!t&&("group"===t.domain?"on"===t.state||"off"===t.state:R(t.domain,e))}function M(t,e){return[Wn(t),function(t){return!!t&&t.services.has(e)}]}function j(t){return[yn.byId(t),Jn,L]}function N(t,e,n){function r(){var c=(new Date).getTime()-a;c0?i=setTimeout(r,e-c):(i=null,n||(s=t.apply(u,o),i||(u=o=null)))}var i,o,u,a,s;null==e&&(e=100);var c=function(){u=this,o=arguments,a=(new Date).getTime();var c=n&&!i;return i||(i=setTimeout(r,e)),c&&(s=t.apply(u,o),u=o=null),s};return c.clear=function(){i&&(clearTimeout(i),i=null)},c}function k(t,e){var n=e.component;return t.push(n)}function U(t,e){var n=e.components;return ar(n)}function H(){return sr.getInitialState()}function P(t,e){var n=e.latitude,r=e.longitude,i=e.location_name,o=e.temperature_unit,u=e.time_zone,a=e.version;return fr({latitude:n,longitude:r,location_name:i,temperature_unit:o,time_zone:u,serverVersion:a})}function x(){return hr.getInitialState()}function V(t,e){t.dispatch(or.SERVER_CONFIG_LOADED,e)}function q(t){rn(t,"GET","config").then(function(e){return V(t,e)})}function F(t,e){t.dispatch(or.COMPONENT_LOADED,{component:e})}function G(t){return[["serverComponent"],function(e){return e.contains(t)}]}function K(t){t.registerStores({serverComponent:sr,serverConfig:hr})}function Y(t,e){var n=e.pane;return n}function B(){return Ir.getInitialState()}function J(t,e){var n=e.panels;return Or(n)}function W(){return wr.getInitialState()}function X(t,e){var n=e.show;return!!n}function Q(){return Ar.getInitialState()}function Z(t,e){t.dispatch(mr.SHOW_SIDEBAR,{show:e})}function $(t,e){t.dispatch(mr.NAVIGATE,{pane:e})}function tt(t,e){t.dispatch(mr.PANELS_LOADED,{panels:e})}function et(t,e){var n=e.entityId;return n}function nt(){return kr.getInitialState()}function rt(t,e){t.dispatch(jr.SELECT_ENTITY,{entityId:e})}function it(t){t.dispatch(jr.SELECT_ENTITY,{entityId:null})}function ot(t){return!t||(new Date).getTime()-t>6e4}function ut(t,e){var n=e.date;return n.toISOString()}function at(){return xr.getInitialState()}function st(t,e){var n=e.date,r=e.stateHistory;return 0===r.length?t.set(n,qr({})):t.withMutations(function(t){r.forEach(function(e){return t.setIn([n,e[0].entity_id],qr(e.map(cn.fromJSON)))})})}function ct(){return Fr.getInitialState()}function ft(t,e){var n=e.stateHistory;return t.withMutations(function(t){n.forEach(function(e){return t.set(e[0].entity_id,Br(e.map(cn.fromJSON)))})})}function ht(){return Jr.getInitialState()}function lt(t,e){var n=e.stateHistory,r=(new Date).getTime();return t.withMutations(function(t){n.forEach(function(e){return t.set(e[0].entity_id,r)}),history.length>1&&t.set(Qr,r)})}function pt(){return Zr.getInitialState()}function _t(t,e){t.dispatch(Hr.ENTITY_HISTORY_DATE_SELECTED,{date:e})}function dt(t,e){void 0===e&&(e=null),t.dispatch(Hr.RECENT_ENTITY_HISTORY_FETCH_START,{});var n="history/period";return null!==e&&(n+="?filter_entity_id="+e),rn(t,"GET",n).then(function(e){return t.dispatch(Hr.RECENT_ENTITY_HISTORY_FETCH_SUCCESS,{stateHistory:e})},function(){return t.dispatch(Hr.RECENT_ENTITY_HISTORY_FETCH_ERROR,{})})}function vt(t,e){return t.dispatch(Hr.ENTITY_HISTORY_FETCH_START,{date:e}),rn(t,"GET","history/period/"+e).then(function(n){return t.dispatch(Hr.ENTITY_HISTORY_FETCH_SUCCESS,{date:e,stateHistory:n})},function(){return t.dispatch(Hr.ENTITY_HISTORY_FETCH_ERROR,{})})}function yt(t){var e=t.evaluate(ei);return vt(t,e)}function St(t){t.registerStores({currentEntityHistoryDate:xr,entityHistory:Fr,isLoadingEntityHistory:Kr,recentEntityHistory:Jr,recentEntityHistoryUpdated:Zr})}function gt(t){t.registerStores({moreInfoEntityId:kr})}function mt(t,e){var n=e.model,r=e.result,i=e.params;if(null===t||"entity"!==n.entity||!i.replace)return t;for(var o=0;oQo}function ae(t){t.registerStores({currentLogbookDate:Uo,isLoadingLogbookEntries:Po,logbookEntries:Ko,logbookEntriesUpdated:Jo})}function se(t,e){return rn(t,"POST","template",{template:e})}function ce(t){return t.set("isListening",!0)}function fe(t,e){var n=e.interimTranscript,r=e.finalTranscript;return t.withMutations(function(t){return t.set("isListening",!0).set("isTransmitting",!1).set("interimTranscript",n).set("finalTranscript",r)})}function he(t,e){var n=e.finalTranscript;return t.withMutations(function(t){return t.set("isListening",!1).set("isTransmitting",!0).set("interimTranscript","").set("finalTranscript",n)})}function le(){return _u.getInitialState()}function pe(){return _u.getInitialState()}function _e(){return _u.getInitialState()}function de(t){return du[t.hassId]}function ve(t){var e=de(t);if(e){var n=e.finalTranscript||e.interimTranscript;t.dispatch(hu.VOICE_TRANSMITTING,{finalTranscript:n}),Zn.callService(t,"conversation","process",{text:n}).then(function(){t.dispatch(hu.VOICE_DONE)},function(){t.dispatch(hu.VOICE_ERROR)})}}function ye(t){var e=de(t);e&&(e.recognition.stop(),du[t.hassId]=!1)}function Se(t){ve(t),ye(t)}function ge(t){var e=Se.bind(null,t);e();var n=new webkitSpeechRecognition;du[t.hassId]={recognition:n,interimTranscript:"",finalTranscript:""},n.interimResults=!0,n.onstart=function(){return t.dispatch(hu.VOICE_START)},n.onerror=function(){return t.dispatch(hu.VOICE_ERROR)},n.onend=e,n.onresult=function(e){var n=de(t);if(n){for(var r="",i="",o=e.resultIndex;o=n)}function c(t,e){return h(t,e,0)}function f(t,e){return h(t,e,e)}function h(t,e,n){return void 0===t?n:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}function l(t){return v(t)?t:C(t)}function p(t){return y(t)?t:z(t)}function _(t){return S(t)?t:R(t)}function d(t){return v(t)&&!g(t)?t:L(t)}function v(t){return!(!t||!t[dn])}function y(t){return!(!t||!t[vn])}function S(t){return!(!t||!t[yn])}function g(t){return y(t)||S(t)}function m(t){return!(!t||!t[Sn])}function E(t){this.next=t}function I(t,e,n,r){var i=0===t?e:1===t?n:[e,n];return r?r.value=i:r={value:i,done:!1},r}function b(){return{value:void 0,done:!0}}function O(t){return!!A(t)}function w(t){return t&&"function"==typeof t.next}function T(t){var e=A(t);return e&&e.call(t)}function A(t){var e=t&&(In&&t[In]||t[bn]);if("function"==typeof e)return e}function D(t){return t&&"number"==typeof t.length}function C(t){return null===t||void 0===t?H():v(t)?t.toSeq():V(t)}function z(t){return null===t||void 0===t?H().toKeyedSeq():v(t)?y(t)?t.toSeq():t.fromEntrySeq():P(t)}function R(t){return null===t||void 0===t?H():v(t)?y(t)?t.entrySeq():t.toIndexedSeq():x(t)}function L(t){return(null===t||void 0===t?H():v(t)?y(t)?t.entrySeq():t:x(t)).toSetSeq()}function M(t){this._array=t,this.size=t.length}function j(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function N(t){this._iterable=t,this.size=t.length||t.size}function k(t){this._iterator=t,this._iteratorCache=[]}function U(t){return!(!t||!t[wn])}function H(){return Tn||(Tn=new M([]))}function P(t){var e=Array.isArray(t)?new M(t).fromEntrySeq():w(t)?new k(t).fromEntrySeq():O(t)?new N(t).fromEntrySeq():"object"==typeof t?new j(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function x(t){var e=q(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function V(t){var e=q(t)||"object"==typeof t&&new j(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}function q(t){return D(t)?new M(t):w(t)?new k(t):O(t)?new N(t):void 0}function F(t,e,n,r){var i=t._cache;if(i){for(var o=i.length-1,u=0;u<=o;u++){var a=i[n?o-u:u];if(e(a[1],r?a[0]:u,t)===!1)return u+1}return u}return t.__iterateUncached(e,n)}function G(t,e,n,r){var i=t._cache;if(i){var o=i.length-1,u=0;return new E(function(){var t=i[n?o-u:u];return u++>o?b():I(e,r?t[0]:u-1,t[1])})}return t.__iteratorUncached(e,n)}function K(){throw TypeError("Abstract")}function Y(){}function B(){}function J(){}function W(t,e){if(t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if(t=t.valueOf(),e=e.valueOf(),t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1}return!("function"!=typeof t.equals||"function"!=typeof e.equals||!t.equals(e))}function X(t,e){return e?Q(e,t,"",{"":t}):Z(t)}function Q(t,e,n,r){return Array.isArray(e)?t.call(r,n,R(e).map(function(n,r){return Q(t,n,r,e)})):$(e)?t.call(r,n,z(e).map(function(n,r){return Q(t,n,r,e)})):e}function Z(t){return Array.isArray(t)?R(t).map(Z).toList():$(t)?z(t).map(Z).toMap():t}function $(t){return t&&(t.constructor===Object||void 0===t.constructor)}function tt(t){return t>>>1&1073741824|3221225471&t}function et(t){if(t===!1||null===t||void 0===t)return 0;if("function"==typeof t.valueOf&&(t=t.valueOf(),t===!1||null===t||void 0===t))return 0;if(t===!0)return 1;var e=typeof t;if("number"===e){var n=0|t;for(n!==t&&(n^=4294967295*t);t>4294967295;)t/=4294967295,n^=t;return tt(n)}return"string"===e?t.length>jn?nt(t):rt(t):"function"==typeof t.hashCode?t.hashCode():it(t)}function nt(t){var e=Un[t];return void 0===e&&(e=rt(t),kn===Nn&&(kn=0,Un={}),kn++,Un[t]=e),e}function rt(t){for(var e=0,n=0;n0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}function ut(t,e){if(!t)throw new Error(e)}function at(t){ut(t!==1/0,"Cannot perform this action with an infinite size.")}function st(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function ct(t){this._iter=t,this.size=t.size}function ft(t){this._iter=t,this.size=t.size}function ht(t){this._iter=t,this.size=t.size}function lt(t){var e=Mt(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=jt,e.__iterateUncached=function(e,n){var r=this;return t.__iterate(function(t,n){return e(n,t,r)!==!1},n)},e.__iteratorUncached=function(e,n){if(e===En){var r=t.__iterator(e,n);return new E(function(){var t=r.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t})}return t.__iterator(e===mn?gn:mn,n)},e}function pt(t,e,n){var r=Mt(t);return r.size=t.size,r.has=function(e){return t.has(e)},r.get=function(r,i){var o=t.get(r,ln);return o===ln?i:e.call(n,o,r,t)},r.__iterateUncached=function(r,i){var o=this;return t.__iterate(function(t,i,u){return r(e.call(n,t,i,u),i,o)!==!1},i)},r.__iteratorUncached=function(r,i){var o=t.__iterator(En,i);return new E(function(){var i=o.next();if(i.done)return i;var u=i.value,a=u[0];return I(r,a,e.call(n,u[1],a,t),i)})},r}function _t(t,e){var n=Mt(t);return n._iter=t,n.size=t.size,n.reverse=function(){return t},t.flip&&(n.flip=function(){var e=lt(t);return e.reverse=function(){return t.flip()},e}),n.get=function(n,r){return t.get(e?n:-1-n,r)},n.has=function(n){return t.has(e?n:-1-n)},n.includes=function(e){return t.includes(e)},n.cacheResult=jt,n.__iterate=function(e,n){var r=this;return t.__iterate(function(t,n){return e(t,n,r)},!n)},n.__iterator=function(e,n){return t.__iterator(e,!n)},n}function dt(t,e,n,r){var i=Mt(t);return r&&(i.has=function(r){var i=t.get(r,ln);return i!==ln&&!!e.call(n,i,r,t)},i.get=function(r,i){var o=t.get(r,ln);return o!==ln&&e.call(n,o,r,t)?o:i}),i.__iterateUncached=function(i,o){var u=this,a=0;return t.__iterate(function(t,o,s){if(e.call(n,t,o,s))return a++,i(t,r?o:a-1,u)},o),a},i.__iteratorUncached=function(i,o){var u=t.__iterator(En,o),a=0;return new E(function(){for(;;){var o=u.next();if(o.done)return o;var s=o.value,c=s[0],f=s[1];if(e.call(n,f,c,t))return I(i,r?c:a++,f,o)}})},i}function vt(t,e,n){var r=Ut().asMutable();return t.__iterate(function(i,o){r.update(e.call(n,i,o,t),0,function(t){return t+1})}),r.asImmutable()}function yt(t,e,n){var r=y(t),i=(m(t)?be():Ut()).asMutable();t.__iterate(function(o,u){i.update(e.call(n,o,u,t),function(t){return t=t||[],t.push(r?[u,o]:o),t})});var o=Lt(t);return i.map(function(e){return Ct(t,o(e))})}function St(t,e,n,r){var i=t.size;if(void 0!==e&&(e=0|e),void 0!==n&&(n=0|n),s(e,n,i))return t;var o=c(e,i),a=f(n,i);if(o!==o||a!==a)return St(t.toSeq().cacheResult(),e,n,r);var h,l=a-o;l===l&&(h=l<0?0:l);var p=Mt(t);return p.size=0===h?h:t.size&&h||void 0,!r&&U(t)&&h>=0&&(p.get=function(e,n){return e=u(this,e),e>=0&&eh)return b();var t=i.next();return r||e===mn?t:e===gn?I(e,a-1,void 0,t):I(e,a-1,t.value[1],t)})},p}function gt(t,e,n){var r=Mt(t);return r.__iterateUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterate(r,i);var u=0;return t.__iterate(function(t,i,a){return e.call(n,t,i,a)&&++u&&r(t,i,o)}),u},r.__iteratorUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterator(r,i);var u=t.__iterator(En,i),a=!0;return new E(function(){if(!a)return b();var t=u.next();if(t.done)return t;var i=t.value,s=i[0],c=i[1];return e.call(n,c,s,o)?r===En?t:I(r,s,c,t):(a=!1,b())})},r}function mt(t,e,n,r){var i=Mt(t);return i.__iterateUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterate(i,o);var a=!0,s=0;return t.__iterate(function(t,o,c){if(!a||!(a=e.call(n,t,o,c)))return s++,i(t,r?o:s-1,u)}),s},i.__iteratorUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterator(i,o);var a=t.__iterator(En,o),s=!0,c=0;return new E(function(){var t,o,f;do{if(t=a.next(),t.done)return r||i===mn?t:i===gn?I(i,c++,void 0,t):I(i,c++,t.value[1],t);var h=t.value;o=h[0],f=h[1],s&&(s=e.call(n,f,o,u))}while(s);return i===En?t:I(i,o,f,t)})},i}function Et(t,e){var n=y(t),r=[t].concat(e).map(function(t){return v(t)?n&&(t=p(t)):t=n?P(t):x(Array.isArray(t)?t:[t]),t}).filter(function(t){return 0!==t.size});if(0===r.length)return t;if(1===r.length){var i=r[0];if(i===t||n&&y(i)||S(t)&&S(i))return i}var o=new M(r);return n?o=o.toKeyedSeq():S(t)||(o=o.toSetSeq()),o=o.flatten(!0),o.size=r.reduce(function(t,e){if(void 0!==t){var n=e.size;if(void 0!==n)return t+n}},0),o}function It(t,e,n){var r=Mt(t);return r.__iterateUncached=function(r,i){function o(t,s){var c=this;t.__iterate(function(t,i){return(!e||s0}function Dt(t,e,n){var r=Mt(t);return r.size=new M(n).map(function(t){return t.size}).min(),r.__iterate=function(t,e){for(var n,r=this,i=this.__iterator(mn,e),o=0;!(n=i.next()).done&&t(n.value,o++,r)!==!1;);return o},r.__iteratorUncached=function(t,r){var i=n.map(function(t){return t=l(t),T(r?t.reverse():t)}),o=0,u=!1;return new E(function(){var n;return u||(n=i.map(function(t){return t.next()}),u=n.some(function(t){return t.done})),u?b():I(t,o++,e.apply(null,n.map(function(t){return t.value})))})},r}function Ct(t,e){return U(t)?e:t.constructor(e)}function zt(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function Rt(t){return at(t.size),o(t)}function Lt(t){return y(t)?p:S(t)?_:d}function Mt(t){return Object.create((y(t)?z:S(t)?R:L).prototype)}function jt(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):C.prototype.cacheResult.call(this)}function Nt(t,e){return t>e?1:t>>n)&hn,a=(0===n?r:r>>>n)&hn,s=u===a?[Zt(t,e,n+cn,r,i)]:(o=new Ft(e,r,i),u>>=1)u[a]=1&n?e[o++]:void 0;return u[r]=i,new Vt(t,o+1,u)}function ne(t,e,n){for(var r=[],i=0;i>1&1431655765,t=(858993459&t)+(t>>2&858993459),t=t+(t>>4)&252645135,t+=t>>8,t+=t>>16,127&t}function ae(t,e,n,r){var o=r?t:i(t);return o[e]=n,o}function se(t,e,n,r){var i=t.length+1;if(r&&e+1===i)return t[e]=n,t;for(var o=new Array(i),u=0,a=0;a0&&ro?0:o-n,c=u-n;return c>fn&&(c=fn),function(){if(i===c)return Bn;var t=e?--c:i++;return r&&r[t]}}function i(t,r,i){var a,s=t&&t.array,c=i>o?0:o-i>>r,f=(u-i>>r)+1;return f>fn&&(f=fn),function(){for(;;){if(a){var t=a();if(t!==Bn)return t;a=null}if(c===f)return Bn;var o=e?--f:c++;a=n(s&&s[o],r-cn,i+(o<=t.size||n<0)return t.withMutations(function(t){n<0?me(t,n).set(0,r):me(t,0,n+1).set(n,r)});n+=t._origin;var i=t._tail,o=t._root,a=e(_n);return n>=Ie(t._capacity)?i=ye(i,t.__ownerID,0,n,r,a):o=ye(o,t.__ownerID,t._level,n,r,a),a.value?t.__ownerID?(t._root=o,t._tail=i,t.__hash=void 0,t.__altered=!0,t):_e(t._origin,t._capacity,t._level,o,i):t}function ye(t,e,r,i,o,u){var a=i>>>r&hn,s=t&&a0){var f=t&&t.array[a],h=ye(f,e,r-cn,i,o,u);return h===f?t:(c=Se(t,e),c.array[a]=h,c)}return s&&t.array[a]===o?t:(n(u),c=Se(t,e),void 0===o&&a===c.array.length-1?c.array.pop():c.array[a]=o,c)}function Se(t,e){return e&&t&&e===t.ownerID?t:new le(t?t.array.slice():[],e)}function ge(t,e){if(e>=Ie(t._capacity))return t._tail;if(e<1<0;)n=n.array[e>>>r&hn],r-=cn;return n}}function me(t,e,n){void 0!==e&&(e=0|e),void 0!==n&&(n=0|n);var i=t.__ownerID||new r,o=t._origin,u=t._capacity,a=o+e,s=void 0===n?u:n<0?u+n:o+n;if(a===o&&s===u)return t;if(a>=s)return t.clear();for(var c=t._level,f=t._root,h=0;a+h<0;)f=new le(f&&f.array.length?[void 0,f]:[],i),c+=cn,h+=1<=1<l?new le([],i):_;if(_&&p>l&&acn;y-=cn){var S=l>>>y&hn;v=v.array[S]=Se(v.array[S],i)}v.array[l>>>cn&hn]=_}if(s=p)a-=p,s-=p,c=cn,f=null,d=d&&d.removeBefore(i,0,a);else if(a>o||p>>c&hn;if(g!==p>>>c&hn)break;g&&(h+=(1<o&&(f=f.removeBefore(i,c,a-h)),f&&pi&&(i=a.size),v(u)||(a=a.map(function(t){return X(t)})),r.push(a)}return i>t.size&&(t=t.setSize(i)),ie(t,e,r)}function Ie(t){return t>>cn<=fn&&u.size>=2*o.size?(i=u.filter(function(t,e){return void 0!==t&&a!==e}),r=i.toKeyedSeq().map(function(t){return t[0]}).flip().toMap(),t.__ownerID&&(r.__ownerID=i.__ownerID=t.__ownerID)):(r=o.remove(e),i=a===u.size-1?u.pop():u.set(a,void 0))}else if(s){if(n===u.get(a)[1])return t;r=o,i=u.set(a,[e,n])}else r=o.set(e,u.size),i=u.set(u.size,[e,n]);return t.__ownerID?(t.size=r.size,t._map=r,t._list=i,t.__hash=void 0,t):we(r,i)}function De(t){return null===t||void 0===t?Re():Ce(t)?t:Re().unshiftAll(t)}function Ce(t){return!(!t||!t[Wn])}function ze(t,e,n,r){var i=Object.create(Xn);return i.size=t,i._head=e,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function Re(){return Qn||(Qn=ze(0))}function Le(t){return null===t||void 0===t?ke():Me(t)&&!m(t)?t:ke().withMutations(function(e){var n=d(t);at(n.size),n.forEach(function(t){return e.add(t)})})}function Me(t){return!(!t||!t[Zn])}function je(t,e){return t.__ownerID?(t.size=e.size,t._map=e,t):e===t._map?t:0===e.size?t.__empty():t.__make(e)}function Ne(t,e){var n=Object.create($n);return n.size=t?t.size:0,n._map=t,n.__ownerID=e,n}function ke(){return tr||(tr=Ne(Jt()))}function Ue(t){return null===t||void 0===t?xe():He(t)?t:xe().withMutations(function(e){var n=d(t);at(n.size),n.forEach(function(t){return e.add(t)})})}function He(t){return Me(t)&&m(t)}function Pe(t,e){var n=Object.create(er);return n.size=t?t.size:0,n._map=t,n.__ownerID=e,n}function xe(){return nr||(nr=Pe(Te()))}function Ve(t,e){var n,r=function(o){if(o instanceof r)return o;if(!(this instanceof r))return new r(o);if(!n){n=!0;var u=Object.keys(t);Ge(i,u),i.size=u.length,i._name=e,i._keys=u,i._defaultValues=t}this._map=Ut(o)},i=r.prototype=Object.create(rr);return i.constructor=r,r}function qe(t,e,n){var r=Object.create(Object.getPrototypeOf(t));return r._map=e,r.__ownerID=n,r}function Fe(t){return t._name||t.constructor.name||"Record"}function Ge(t,e){try{e.forEach(Ke.bind(void 0,t))}catch(t){}}function Ke(t,e){Object.defineProperty(t,e,{get:function(){return this.get(e)},set:function(t){ut(this.__ownerID,"Cannot set on an immutable record."),this.set(e,t)}})}function Ye(t,e){if(t===e)return!0;if(!v(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||y(t)!==y(e)||S(t)!==S(e)||m(t)!==m(e))return!1;if(0===t.size&&0===e.size)return!0;var n=!g(t);if(m(t)){var r=t.entries();return e.every(function(t,e){var i=r.next().value;return i&&W(i[1],t)&&(n||W(i[0],e))})&&r.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var o=t;t=e,e=o}var u=!0,a=e.__iterate(function(e,r){if(n?!t.has(e):i?!W(e,t.get(r,ln)):!W(t.get(r,ln),e))return u=!1,!1});return u&&t.size===a}function Be(t,e,n){if(!(this instanceof Be))return new Be(t,e,n);if(ut(0!==n,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),n=void 0===n?1:Math.abs(n),ee?-1:0}function rn(t){if(t.size===1/0)return 0;var e=m(t),n=y(t),r=e?1:0,i=t.__iterate(n?e?function(t,e){r=31*r+un(et(t),et(e))|0}:function(t,e){r=r+un(et(t),et(e))|0}:e?function(t){r=31*r+et(t)|0}:function(t){r=r+et(t)|0});return on(i,r)}function on(t,e){return e=Dn(e,3432918353),e=Dn(e<<15|e>>>-15,461845907),e=Dn(e<<13|e>>>-13,5),e=(e+3864292196|0)^t,e=Dn(e^e>>>16,2246822507),e=Dn(e^e>>>13,3266489909),e=tt(e^e>>>16)}function un(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}var an=Array.prototype.slice,sn="delete",cn=5,fn=1<r?b():I(t,i,n[e?r-i++:i++])})},t(j,z),j.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},j.prototype.has=function(t){return this._object.hasOwnProperty(t)},j.prototype.__iterate=function(t,e){for(var n=this,r=this._object,i=this._keys,o=i.length-1,u=0;u<=o;u++){var a=i[e?o-u:u];if(t(r[a],a,n)===!1)return u+1}return u},j.prototype.__iterator=function(t,e){var n=this._object,r=this._keys,i=r.length-1,o=0;return new E(function(){var u=r[e?i-o:o];return o++>i?b():I(t,u,n[u])})},j.prototype[Sn]=!0,t(N,R),N.prototype.__iterateUncached=function(t,e){var n=this;if(e)return this.cacheResult().__iterate(t,e);var r=this._iterable,i=T(r),o=0;if(w(i))for(var u;!(u=i.next()).done&&t(u.value,o++,n)!==!1;);return o},N.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var n=this._iterable,r=T(n);if(!w(r))return new E(b);var i=0;return new E(function(){var e=r.next();return e.done?e:I(t,i++,e.value)})},t(k,R),k.prototype.__iterateUncached=function(t,e){var n=this;if(e)return this.cacheResult().__iterate(t,e);for(var r=this._iterator,i=this._iteratorCache,o=0;o=r.length){var e=n.next();if(e.done)return e;r[i]=e.value}return I(t,i,r[i++])})};var Tn;t(K,l),t(Y,K),t(B,K),t(J,K),K.Keyed=Y,K.Indexed=B,K.Set=J;var An,Dn="function"==typeof Math.imul&&Math.imul(4294967295,2)===-2?Math.imul:function(t,e){t=0|t,e=0|e;var n=65535&t,r=65535&e;return n*r+((t>>>16)*r+n*(e>>>16)<<16>>>0)|0},Cn=Object.isExtensible,zn=function(){try{return Object.defineProperty({},"@",{}),!0}catch(t){return!1}}(),Rn="function"==typeof WeakMap;Rn&&(An=new WeakMap);var Ln=0,Mn="__immutablehash__";"function"==typeof Symbol&&(Mn=Symbol(Mn));var jn=16,Nn=255,kn=0,Un={};t(st,z),st.prototype.get=function(t,e){return this._iter.get(t,e)},st.prototype.has=function(t){return this._iter.has(t)},st.prototype.valueSeq=function(){return this._iter.valueSeq()},st.prototype.reverse=function(){var t=this,e=_t(this,!0);return this._useKeys||(e.valueSeq=function(){return t._iter.toSeq().reverse()}),e},st.prototype.map=function(t,e){var n=this,r=pt(this,t,e);return this._useKeys||(r.valueSeq=function(){return n._iter.toSeq().map(t,e)}),r},st.prototype.__iterate=function(t,e){var n,r=this;return this._iter.__iterate(this._useKeys?function(e,n){return t(e,n,r)}:(n=e?Rt(this):0,function(i){return t(i,e?--n:n++,r)}),e)},st.prototype.__iterator=function(t,e){if(this._useKeys)return this._iter.__iterator(t,e);var n=this._iter.__iterator(mn,e),r=e?Rt(this):0;return new E(function(){var i=n.next();return i.done?i:I(t,e?--r:r++,i.value,i)})},st.prototype[Sn]=!0,t(ct,R),ct.prototype.includes=function(t){return this._iter.includes(t)},ct.prototype.__iterate=function(t,e){var n=this,r=0;return this._iter.__iterate(function(e){return t(e,r++,n)},e)},ct.prototype.__iterator=function(t,e){var n=this._iter.__iterator(mn,e),r=0;return new E(function(){var e=n.next();return e.done?e:I(t,r++,e.value,e)})},t(ft,L),ft.prototype.has=function(t){return this._iter.includes(t)},ft.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){return t(e,e,n)},e)},ft.prototype.__iterator=function(t,e){var n=this._iter.__iterator(mn,e);return new E(function(){var e=n.next();return e.done?e:I(t,e.value,e.value,e)})},t(ht,z),ht.prototype.entrySeq=function(){return this._iter.toSeq()},ht.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){if(e){zt(e);var r=v(e);return t(r?e.get(1):e[1],r?e.get(0):e[0],n)}},e)},ht.prototype.__iterator=function(t,e){var n=this._iter.__iterator(mn,e);return new E(function(){for(;;){var e=n.next();if(e.done)return e;var r=e.value;if(r){zt(r);var i=v(r);return I(t,i?r.get(0):r[0],i?r.get(1):r[1],e)}}})},ct.prototype.cacheResult=st.prototype.cacheResult=ft.prototype.cacheResult=ht.prototype.cacheResult=jt,t(Ut,Y),Ut.prototype.toString=function(){return this.__toString("Map {","}")},Ut.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},Ut.prototype.set=function(t,e){return Wt(this,t,e)},Ut.prototype.setIn=function(t,e){return this.updateIn(t,ln,function(){return e})},Ut.prototype.remove=function(t){return Wt(this,t,ln)},Ut.prototype.deleteIn=function(t){return this.updateIn(t,function(){return ln})},Ut.prototype.update=function(t,e,n){return 1===arguments.length?t(this):this.updateIn([t],e,n)},Ut.prototype.updateIn=function(t,e,n){n||(n=e,e=void 0);var r=oe(this,kt(t),e,n);return r===ln?void 0:r},Ut.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):Jt()},Ut.prototype.merge=function(){return ne(this,void 0,arguments)},Ut.prototype.mergeWith=function(t){var e=an.call(arguments,1);return ne(this,t,e)},Ut.prototype.mergeIn=function(t){var e=an.call(arguments,1);return this.updateIn(t,Jt(),function(t){return"function"==typeof t.merge?t.merge.apply(t,e):e[e.length-1]})},Ut.prototype.mergeDeep=function(){return ne(this,re(void 0),arguments)},Ut.prototype.mergeDeepWith=function(t){var e=an.call(arguments,1);return ne(this,re(t),e)},Ut.prototype.mergeDeepIn=function(t){var e=an.call(arguments,1);return this.updateIn(t,Jt(),function(t){return"function"==typeof t.mergeDeep?t.mergeDeep.apply(t,e):e[e.length-1]})},Ut.prototype.sort=function(t){return be(wt(this,t))},Ut.prototype.sortBy=function(t,e){return be(wt(this,e,t))},Ut.prototype.withMutations=function(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},Ut.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new r)},Ut.prototype.asImmutable=function(){return this.__ensureOwner()},Ut.prototype.wasAltered=function(){return this.__altered},Ut.prototype.__iterator=function(t,e){return new Gt(this,t,e)},Ut.prototype.__iterate=function(t,e){var n=this,r=0;return this._root&&this._root.iterate(function(e){return r++,t(e[1],e[0],n)},e),r},Ut.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Bt(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Ut.isMap=Ht;var Hn="@@__IMMUTABLE_MAP__@@",Pn=Ut.prototype;Pn[Hn]=!0,Pn[sn]=Pn.remove,Pn.removeIn=Pn.deleteIn,Pt.prototype.get=function(t,e,n,r){for(var i=this.entries,o=0,u=i.length;o=Vn)return $t(t,f,o,u);var _=t&&t===this.ownerID,d=_?f:i(f);return p?c?h===l-1?d.pop():d[h]=d.pop():d[h]=[o,u]:d.push([o,u]),_?(this.entries=d,this):new Pt(t,d)}},xt.prototype.get=function(t,e,n,r){void 0===e&&(e=et(n));var i=1<<((0===t?e:e>>>t)&hn),o=this.bitmap;return 0===(o&i)?r:this.nodes[ue(o&i-1)].get(t+cn,e,n,r)},xt.prototype.update=function(t,e,n,r,i,o,u){void 0===n&&(n=et(r));var a=(0===e?n:n>>>e)&hn,s=1<=qn)return ee(t,l,c,a,_);if(f&&!_&&2===l.length&&Qt(l[1^h]))return l[1^h];if(f&&_&&1===l.length&&Qt(_))return _;var d=t&&t===this.ownerID,v=f?_?c:c^s:c|s,y=f?_?ae(l,h,_,d):ce(l,h,d):se(l,h,_,d);return d?(this.bitmap=v,this.nodes=y,this):new xt(t,v,y)},Vt.prototype.get=function(t,e,n,r){void 0===e&&(e=et(n));var i=(0===t?e:e>>>t)&hn,o=this.nodes[i];return o?o.get(t+cn,e,n,r):r},Vt.prototype.update=function(t,e,n,r,i,o,u){void 0===n&&(n=et(r));var a=(0===e?n:n>>>e)&hn,s=i===ln,c=this.nodes,f=c[a];if(s&&!f)return this;var h=Xt(f,t,e+cn,n,r,i,o,u);if(h===f)return this;var l=this.count;if(f){if(!h&&(l--,l=0&&t>>e&hn;if(r>=this.array.length)return new le([],t);var i,o=0===r;if(e>0){var u=this.array[r];if(i=u&&u.removeBefore(t,e-cn,n),i===u&&o)return this}if(o&&!i)return this;var a=Se(this,t);if(!o)for(var s=0;s>>e&hn;if(r>=this.array.length)return this;var i;if(e>0){var o=this.array[r];if(i=o&&o.removeAfter(t,e-cn,n),i===o&&r===this.array.length-1)return this}var u=Se(this,t);return u.array.splice(r+1),i&&(u.array[r]=i),u};var Yn,Bn={};t(be,Ut),be.of=function(){return this(arguments)},be.prototype.toString=function(){return this.__toString("OrderedMap {","}")},be.prototype.get=function(t,e){var n=this._map.get(t);return void 0!==n?this._list.get(n)[1]:e},be.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):Te()},be.prototype.set=function(t,e){return Ae(this,t,e)},be.prototype.remove=function(t){return Ae(this,t,ln)},be.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},be.prototype.__iterate=function(t,e){var n=this;return this._list.__iterate(function(e){return e&&t(e[1],e[0],n)},e)},be.prototype.__iterator=function(t,e){return this._list.fromEntrySeq().__iterator(t,e)},be.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t),n=this._list.__ensureOwner(t);return t?we(e,n,t,this.__hash):(this.__ownerID=t,this._map=e,this._list=n,this)},be.isOrderedMap=Oe,be.prototype[Sn]=!0,be.prototype[sn]=be.prototype.remove;var Jn;t(De,B),De.of=function(){return this(arguments)},De.prototype.toString=function(){return this.__toString("Stack [","]")},De.prototype.get=function(t,e){var n=this._head;for(t=u(this,t);n&&t--;)n=n.next;return n?n.value:e},De.prototype.peek=function(){return this._head&&this._head.value},De.prototype.push=function(){var t=arguments;if(0===arguments.length)return this;for(var e=this.size+arguments.length,n=this._head,r=arguments.length-1;r>=0;r--)n={value:t[r],next:n};return this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):ze(e,n)},De.prototype.pushAll=function(t){if(t=_(t),0===t.size)return this;at(t.size);var e=this.size,n=this._head;return t.reverse().forEach(function(t){e++,n={value:t,next:n}}),this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):ze(e,n)},De.prototype.pop=function(){return this.slice(1)},De.prototype.unshift=function(){return this.push.apply(this,arguments)},De.prototype.unshiftAll=function(t){return this.pushAll(t)},De.prototype.shift=function(){return this.pop.apply(this,arguments)},De.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Re()},De.prototype.slice=function(t,e){if(s(t,e,this.size))return this;var n=c(t,this.size),r=f(e,this.size);if(r!==this.size)return B.prototype.slice.call(this,t,e);for(var i=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=i,this._head=o,this.__hash=void 0,this.__altered=!0,this):ze(i,o)},De.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?ze(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},De.prototype.__iterate=function(t,e){var n=this;if(e)return this.reverse().__iterate(t);for(var r=0,i=this._head;i&&t(i.value,r++,n)!==!1;)i=i.next;return r},De.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var n=0,r=this._head;return new E(function(){if(r){var e=r.value;return r=r.next,I(t,n++,e)}return b()})},De.isStack=Ce;var Wn="@@__IMMUTABLE_STACK__@@",Xn=De.prototype;Xn[Wn]=!0,Xn.withMutations=Pn.withMutations,Xn.asMutable=Pn.asMutable,Xn.asImmutable=Pn.asImmutable,Xn.wasAltered=Pn.wasAltered;var Qn;t(Le,J),Le.of=function(){return this(arguments)},Le.fromKeys=function(t){return this(p(t).keySeq())},Le.prototype.toString=function(){return this.__toString("Set {","}")},Le.prototype.has=function(t){return this._map.has(t)},Le.prototype.add=function(t){return je(this,this._map.set(t,!0))},Le.prototype.remove=function(t){return je(this,this._map.remove(t))},Le.prototype.clear=function(){return je(this,this._map.clear())},Le.prototype.union=function(){var t=an.call(arguments,0);return t=t.filter(function(t){return 0!==t.size}),0===t.length?this:0!==this.size||this.__ownerID||1!==t.length?this.withMutations(function(e){for(var n=0;n1?" by "+this._step:"")+" ]"},Be.prototype.get=function(t,e){return this.has(t)?this._start+u(this,t)*this._step:e},Be.prototype.includes=function(t){var e=(t-this._start)/this._step;return e>=0&&e=0&&nn?b():I(t,o++,u)})},Be.prototype.equals=function(t){return t instanceof Be?this._start===t._start&&this._end===t._end&&this._step===t._step:Ye(this,t)};var ir;t(Je,R),Je.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},Je.prototype.get=function(t,e){return this.has(t)?this._value:e},Je.prototype.includes=function(t){return W(this._value,t)},Je.prototype.slice=function(t,e){var n=this.size;return s(t,e,n)?this:new Je(this._value,f(e,n)-c(t,n))},Je.prototype.reverse=function(){return this},Je.prototype.indexOf=function(t){return W(this._value,t)?0:-1},Je.prototype.lastIndexOf=function(t){return W(this._value,t)?this.size:-1},Je.prototype.__iterate=function(t,e){for(var n=this,r=0;rthis.size?e:this.find(function(e,n){return n===t},void 0,e)},has:function(t){return t=u(this,t),t>=0&&(void 0!==this.size?this.size===1/0||t-1&&t%1===0&&t<=Number.MAX_VALUE}var i=Function.prototype.bind;e.isString=function(t){return"string"==typeof t||"[object String]"===n(t)},e.isArray=Array.isArray||function(t){return"[object Array]"===n(t)},"function"!=typeof/./&&"object"!=typeof Int8Array?e.isFunction=function(t){return"function"==typeof t||!1}:e.isFunction=function(t){return"[object Function]"===toString.call(t)},e.isObject=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},e.extend=function(t){var e=arguments,n=arguments.length;if(!t||n<2)return t||{};for(var r=1;r0)){var e=this.reactorState.get("dirtyStores");if(0!==e.size){var n=c.default.Set().withMutations(function(n){n.union(t.observerState.get("any")),e.forEach(function(e){var r=t.observerState.getIn(["stores",e]);r&&n.union(r)})});n.forEach(function(e){var n=t.observerState.getIn(["observersMap",e]);if(n){var r=n.get("getter"),i=n.get("handler"),o=p.evaluate(t.prevReactorState,r),u=p.evaluate(t.reactorState,r);t.prevReactorState=o.reactorState,t.reactorState=u.reactorState;var a=o.result,s=u.result;c.default.is(a,s)||i.call(null,s)}});var r=p.resetDirtyStores(this.reactorState);this.prevReactorState=r,this.reactorState=r}}}},{key:"batchStart",value:function(){this.__batchDepth++}},{key:"batchEnd",value:function(){if(this.__batchDepth--,this.__batchDepth<=0){this.__isDispatching=!0;try{this.__notify()}catch(t){throw this.__isDispatching=!1,t}this.__isDispatching=!1}}}]),t}();e.default=(0,y.toFactory)(g),t.exports=e.default},function(t,e,n){function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n={};return(0,o.each)(e,function(e,r){n[r]=t.evaluate(e)}),n}Object.defineProperty(e,"__esModule",{value:!0});var o=n(4);e.default=function(t){return{getInitialState:function(){return i(t,this.getDataBindings())},componentDidMount:function(){var e=this;this.__unwatchFns=[],(0,o.each)(this.getDataBindings(),function(n,i){var o=t.observe(n,function(t){e.setState(r({},i,t))});e.__unwatchFns.push(o)})},componentWillUnmount:function(){for(var t=this;this.__unwatchFns.length;)t.__unwatchFns.shift()()}}},t.exports=e.default},function(t,e,n){function r(t){return t&&t.__esModule?t:{default:t}}function i(t,e){return new L({result:t,reactorState:e})}function o(t,e){return t.withMutations(function(t){(0,R.each)(e,function(e,n){t.getIn(["stores",n])&&console.warn("Store already defined for id = "+n);var r=e.getInitialState();if(void 0===r&&f(t,"throwOnUndefinedStoreReturnValue"))throw new Error("Store getInitialState() must return a value, did you forget a return statement");if(f(t,"throwOnNonImmutableStore")&&!(0,D.isImmutableValue)(r))throw new Error("Store getInitialState() must return an immutable value, did you forget to call toImmutable");t.update("stores",function(t){return t.set(n,e)}).update("state",function(t){return t.set(n,r)}).update("dirtyStores",function(t){return t.add(n)}).update("storeStates",function(t){return b(t,[n])})}),I(t)})}function u(t,e){return t.withMutations(function(t){(0,R.each)(e,function(e,n){t.update("stores",function(t){return t.set(n,e)})})})}function a(t,e,n){if(void 0===e&&f(t,"throwOnUndefinedActionType"))throw new Error("`dispatch` cannot be called with an `undefined` action type.");var r=t.get("state"),i=t.get("dirtyStores"),o=r.withMutations(function(r){A.default.dispatchStart(t,e,n),t.get("stores").forEach(function(o,u){var a=r.get(u),s=void 0;try{s=o.handle(a,e,n)}catch(e){throw A.default.dispatchError(t,e.message),e}if(void 0===s&&f(t,"throwOnUndefinedStoreReturnValue")){var c="Store handler must return a value, did you forget a return statement";throw A.default.dispatchError(t,c),new Error(c)}r.set(u,s),a!==s&&(i=i.add(u))}),A.default.dispatchEnd(t,r,i)}),u=t.set("state",o).set("dirtyStores",i).update("storeStates",function(t){return b(t,i)});return I(u)}function s(t,e){var n=[],r=(0,D.toImmutable)({}).withMutations(function(r){(0,R.each)(e,function(e,i){var o=t.getIn(["stores",i]);if(o){var u=o.deserialize(e);void 0!==u&&(r.set(i,u),n.push(i))}})}),i=w.default.Set(n);return t.update("state",function(t){return t.merge(r)}).update("dirtyStores",function(t){return t.union(i)}).update("storeStates",function(t){return b(t,n)})}function c(t,e,n){var r=e;(0,z.isKeyPath)(e)&&(e=(0,C.fromKeyPath)(e));var i=t.get("nextId"),o=(0,C.getStoreDeps)(e),u=w.default.Map({id:i,storeDeps:o,getterKey:r,getter:e,handler:n}),a=void 0;return a=0===o.size?t.update("any",function(t){return t.add(i)}):t.withMutations(function(t){o.forEach(function(e){var n=["stores",e];t.hasIn(n)||t.setIn(n,w.default.Set()),t.updateIn(["stores",e],function(t){return t.add(i)})})}),a=a.set("nextId",i+1).setIn(["observersMap",i],u),{observerState:a,entry:u}}function f(t,e){var n=t.getIn(["options",e]);if(void 0===n)throw new Error("Invalid option: "+e);return n}function h(t,e,n){var r=t.get("observersMap").filter(function(t){var r=t.get("getterKey"),i=!n||t.get("handler")===n;return!!i&&((0,z.isKeyPath)(e)&&(0,z.isKeyPath)(r)?(0,z.isEqual)(e,r):e===r)});return t.withMutations(function(t){r.forEach(function(e){return l(t,e)})})}function l(t,e){return t.withMutations(function(t){var n=e.get("id"),r=e.get("storeDeps");0===r.size?t.update("any",function(t){return t.remove(n)}):r.forEach(function(e){t.updateIn(["stores",e],function(t){return t?t.remove(n):t})}),t.removeIn(["observersMap",n])})}function p(t){var e=t.get("state");return t.withMutations(function(t){var n=t.get("stores"),r=n.keySeq().toJS();n.forEach(function(n,r){var i=e.get(r),o=n.handleReset(i);if(void 0===o&&f(t,"throwOnUndefinedStoreReturnValue"))throw new Error("Store handleReset() must return a value, did you forget a return statement");if(f(t,"throwOnNonImmutableStore")&&!(0,D.isImmutableValue)(o))throw new Error("Store reset state must be an immutable value, did you forget to call toImmutable");t.setIn(["state",r],o)}),t.update("storeStates",function(t){return b(t,r)}),v(t)})}function _(t,e){var n=t.get("state");if((0,z.isKeyPath)(e))return i(n.getIn(e),t);if(!(0,C.isGetter)(e))throw new Error("evaluate must be passed a keyPath or Getter");if(g(t,e))return i(E(t,e),t);var r=(0,C.getDeps)(e).map(function(e){return _(t,e).result}),o=(0,C.getComputeFn)(e).apply(null,r);return i(o,m(t,e,o))}function d(t){var e={};return t.get("stores").forEach(function(n,r){var i=t.getIn(["state",r]),o=n.serialize(i);void 0!==o&&(e[r]=o)}),e}function v(t){return t.set("dirtyStores",w.default.Set())}function y(t){return t}function S(t,e){var n=y(e);return t.getIn(["cache",n])}function g(t,e){var n=S(t,e);if(!n)return!1;var r=n.get("storeStates");return 0!==r.size&&r.every(function(e,n){return t.getIn(["storeStates",n])===e})}function m(t,e,n){var r=y(e),i=t.get("dispatchId"),o=(0,C.getStoreDeps)(e),u=(0,D.toImmutable)({}).withMutations(function(e){o.forEach(function(n){var r=t.getIn(["storeStates",n]);e.set(n,r)})});return t.setIn(["cache",r],w.default.Map({value:n,storeStates:u,dispatchId:i}))}function E(t,e){var n=y(e);return t.getIn(["cache",n,"value"])}function I(t){return t.update("dispatchId",function(t){return t+1})}function b(t,e){return t.withMutations(function(t){e.forEach(function(e){var n=t.has(e)?t.get(e)+1:1;t.set(e,n)})})}Object.defineProperty(e,"__esModule",{value:!0}),e.registerStores=o,e.replaceStores=u,e.dispatch=a,e.loadState=s,e.addObserver=c,e.getOption=f,e.removeObserver=h,e.removeObserverByEntry=l,e.reset=p,e.evaluate=_,e.serialize=d,e.resetDirtyStores=v;var O=n(3),w=r(O),T=n(9),A=r(T),D=n(5),C=n(10),z=n(11),R=n(4),L=w.default.Record({result:null,reactorState:null})},function(t,e,n){var r=n(8);e.dispatchStart=function(t,e,n){(0,r.getOption)(t,"logDispatches")&&console.group&&(console.groupCollapsed("Dispatch: %s",e),console.group("payload"),console.debug(n),console.groupEnd())},e.dispatchError=function(t,e){(0,r.getOption)(t,"logDispatches")&&console.group&&(console.debug("Dispatch error: "+e),console.groupEnd())},e.dispatchEnd=function(t,e,n){(0,r.getOption)(t,"logDispatches")&&console.group&&((0,r.getOption)(t,"logDirtyStores")&&console.log("Stores updated:",n.toList().toJS()),(0,r.getOption)(t,"logAppState")&&console.debug("Dispatch done, new state: ",e.toJS()),console.groupEnd())}},function(t,e,n){function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return(0,l.isArray)(t)&&(0,l.isFunction)(t[t.length-1])}function o(t){return t[t.length-1]}function u(t){return t.slice(0,t.length-1)}function a(t,e){e||(e=h.default.Set());var n=h.default.Set().withMutations(function(e){if(!i(t))throw new Error("getFlattenedDeps must be passed a Getter");u(t).forEach(function(t){if((0,p.isKeyPath)(t))e.add((0,f.List)(t));else{if(!i(t))throw new Error("Invalid getter, each dependency must be a KeyPath or Getter");e.union(a(t))}})});return e.union(n)}function s(t){if(!(0,p.isKeyPath)(t))throw new Error("Cannot create Getter from KeyPath: "+t);return[t,_]}function c(t){if(t.hasOwnProperty("__storeDeps"))return t.__storeDeps;var e=a(t).map(function(t){return t.first()}).filter(function(t){return!!t});return Object.defineProperty(t,"__storeDeps",{enumerable:!1,configurable:!1,writable:!1,value:e}),e}Object.defineProperty(e,"__esModule",{value:!0});var f=n(3),h=r(f),l=n(4),p=n(11),_=function(t){return t};e.default={isGetter:i,getComputeFn:o,getFlattenedDeps:a,getStoreDeps:c,getDeps:u,fromKeyPath:s},t.exports=e.default},function(t,e,n){function r(t){return t&&t.__esModule?t:{default:t}}function i(t){return(0,s.isArray)(t)&&!(0,s.isFunction)(t[t.length-1])}function o(t,e){var n=a.default.List(t),r=a.default.List(e);return a.default.is(n,r)}Object.defineProperty(e,"__esModule",{value:!0}),e.isKeyPath=i,e.isEqual=o;var u=n(3),a=r(u),s=n(4)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=(0,r.Map)({logDispatches:!1,logAppState:!1,logDirtyStores:!1,throwOnUndefinedActionType:!1,throwOnUndefinedStoreReturnValue:!1,throwOnNonImmutableStore:!1,throwOnDispatchInDispatch:!1});e.PROD_OPTIONS=i;var o=(0,r.Map)({logDispatches:!0,logAppState:!0,logDirtyStores:!0,throwOnUndefinedActionType:!0,throwOnUndefinedStoreReturnValue:!0,throwOnNonImmutableStore:!0,throwOnDispatchInDispatch:!0});e.DEBUG_OPTIONS=o;var u=(0,r.Record)({dispatchId:0,state:(0,r.Map)(),stores:(0,r.Map)(),cache:(0,r.Map)(),storeStates:(0,r.Map)(),dirtyStores:(0,r.Set)(),debug:!1,options:i});e.ReactorState=u;var a=(0,r.Record)({any:(0,r.Set)(),stores:(0,r.Map)({}),observersMap:(0,r.Map)({}),nextId:1});e.ObserverState=a}])})}),be=t(Ie),Oe=e(function(t){var e=function(t){var e,n={};if(!(t instanceof Object)||Array.isArray(t))throw new Error("keyMirror(...): Argument must be an object.");for(e in t)t.hasOwnProperty(e)&&(n[e]=e);return n};t.exports=e}),we=t(Oe),Te=we({VALIDATING_AUTH_TOKEN:null,VALID_AUTH_TOKEN:null,INVALID_AUTH_TOKEN:null,LOG_OUT:null}),Ae=be.Store,De=be.toImmutable,Ce=new Ae({getInitialState:function(){return De({isValidating:!1,authToken:!1,host:null,isInvalid:!1,errorMessage:""})},initialize:function(){this.on(Te.VALIDATING_AUTH_TOKEN,n),this.on(Te.VALID_AUTH_TOKEN,r),this.on(Te.INVALID_AUTH_TOKEN,i)}}),ze=be.Store,Re=be.toImmutable,Le=new ze({getInitialState:function(){return Re({authToken:null,host:""})},initialize:function(){this.on(Te.VALID_AUTH_TOKEN,o),this.on(Te.LOG_OUT,u)}}),Me=be.Store,je=new Me({getInitialState:function(){return!0},initialize:function(){this.on(Te.VALID_AUTH_TOKEN,a)}}),Ne=we({STREAM_START:null,STREAM_STOP:null,STREAM_ERROR:null}),ke="object"==typeof window&&"EventSource"in window,Ue=be.Store,He=be.toImmutable,Pe=new Ue({getInitialState:function(){return He({isSupported:ke,isStreaming:!1,useStreaming:!0,hasError:!1})},initialize:function(){this.on(Ne.STREAM_START,s),this.on(Ne.STREAM_STOP,c),this.on(Ne.STREAM_ERROR,f),this.on(Ne.LOG_OUT,h)}}),xe=we({API_FETCH_ALL_START:null,API_FETCH_ALL_SUCCESS:null,API_FETCH_ALL_FAIL:null,SYNC_SCHEDULED:null,SYNC_SCHEDULE_CANCELLED:null}),Ve=be.Store,qe=new Ve({getInitialState:function(){return!0},initialize:function(){this.on(xe.API_FETCH_ALL_START,function(){return!0}),this.on(xe.API_FETCH_ALL_SUCCESS,function(){return!1}),this.on(xe.API_FETCH_ALL_FAIL,function(){return!1}),this.on(xe.LOG_OUT,function(){return!1})}}),Fe=be.Store,Ge=new Fe({getInitialState:function(){return!1},initialize:function(){this.on(xe.SYNC_SCHEDULED,function(){return!0}),this.on(xe.SYNC_SCHEDULE_CANCELLED,function(){return!1}),this.on(xe.LOG_OUT,function(){return!1})}}),Ke=we({API_FETCH_SUCCESS:null,API_FETCH_START:null,API_FETCH_FAIL:null,API_SAVE_SUCCESS:null,API_SAVE_START:null,API_SAVE_FAIL:null,API_DELETE_SUCCESS:null,API_DELETE_START:null,API_DELETE_FAIL:null,LOG_OUT:null}),Ye=be.Store,Be=be.toImmutable,Je=new Ye({getInitialState:function(){return Be({})},initialize:function(){var t=this;this.on(Ke.API_FETCH_SUCCESS,l),this.on(Ke.API_SAVE_SUCCESS,l),this.on(Ke.API_DELETE_SUCCESS,p),this.on(Ke.LOG_OUT,function(){return t.getInitialState()})}}),We=e(function(t){function e(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function n(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(e).map(function(t){return e[t]});if("0123456789"!==r.join(""))return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach(function(t){i[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},i)).join("")}catch(t){return!1}}var r=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;t.exports=n()?Object.assign:function(t,n){for(var o,u,a=arguments,s=e(t),c=1;c199&&u.status<300?t(e):n(e)},u.onerror=function(){return n({})},r?(u.setRequestHeader("Content-Type","application/json;charset=UTF-8"),u.send(JSON.stringify(r))):u.send()})}function A(t,e){var n=e.message;return t.set(t.size,n)}function D(){return In.getInitialState()}function C(t,e){t.dispatch(gn.NOTIFICATION_CREATED,{message:e})}function z(t){t.registerStores({notifications:In})}function R(t,e){if("lock"===t)return!0;if("garage_door"===t)return!0;var n=e.get(t);return!!n&&n.services.has("turn_on")}function L(t,e){return!!t&&("group"===t.domain?"on"===t.state||"off"===t.state:R(t.domain,e))}function M(t,e){return[Wn(t),function(t){return!!t&&t.services.has(e)}]}function j(t){return[yn.byId(t),Jn,L]}function N(t,e,n){function r(){var c=(new Date).getTime()-a;c0?i=setTimeout(r,e-c):(i=null,n||(s=t.apply(u,o),i||(u=o=null)))}var i,o,u,a,s;null==e&&(e=100);var c=function(){u=this,o=arguments,a=(new Date).getTime();var c=n&&!i;return i||(i=setTimeout(r,e)),c&&(s=t.apply(u,o),u=o=null),s};return c.clear=function(){i&&(clearTimeout(i),i=null)},c}function k(t,e){var n=e.component;return t.push(n)}function U(t,e){var n=e.components;return ar(n)}function H(){return sr.getInitialState()}function P(t,e){var n=e.latitude,r=e.longitude,i=e.location_name,o=e.temperature_unit,u=e.time_zone,a=e.version;return fr({latitude:n,longitude:r,location_name:i,temperature_unit:o,time_zone:u,serverVersion:a})}function x(){return hr.getInitialState()}function V(t,e){t.dispatch(or.SERVER_CONFIG_LOADED,e)}function q(t){rn(t,"GET","config").then(function(e){return V(t,e)})}function F(t,e){t.dispatch(or.COMPONENT_LOADED,{component:e})}function G(t){return[["serverComponent"],function(e){return e.contains(t)}]}function K(t){t.registerStores({serverComponent:sr,serverConfig:hr})}function Y(t,e){var n=e.pane;return n}function B(){return Ir.getInitialState()}function J(t,e){var n=e.panels;return Or(n)}function W(){return wr.getInitialState()}function X(t,e){var n=e.show;return!!n}function Q(){return Ar.getInitialState()}function Z(t,e){t.dispatch(mr.SHOW_SIDEBAR,{show:e})}function $(t,e){t.dispatch(mr.NAVIGATE,{pane:e})}function tt(t,e){t.dispatch(mr.PANELS_LOADED,{panels:e})}function et(t,e){var n=e.entityId;return n}function nt(){return kr.getInitialState()}function rt(t,e){t.dispatch(jr.SELECT_ENTITY,{entityId:e})}function it(t){t.dispatch(jr.SELECT_ENTITY,{entityId:null})}function ot(t){return!t||(new Date).getTime()-t>6e4}function ut(t,e){var n=e.date;return n.toISOString()}function at(){return xr.getInitialState()}function st(t,e){var n=e.date,r=e.stateHistory;return 0===r.length?t.set(n,qr({})):t.withMutations(function(t){r.forEach(function(e){return t.setIn([n,e[0].entity_id],qr(e.map(cn.fromJSON)))})})}function ct(){return Fr.getInitialState()}function ft(t,e){var n=e.stateHistory;return t.withMutations(function(t){n.forEach(function(e){return t.set(e[0].entity_id,Br(e.map(cn.fromJSON)))})})}function ht(){return Jr.getInitialState()}function lt(t,e){var n=e.stateHistory,r=(new Date).getTime();return t.withMutations(function(t){n.forEach(function(e){return t.set(e[0].entity_id,r)}),history.length>1&&t.set(Qr,r)})}function pt(){return Zr.getInitialState()}function _t(t,e){t.dispatch(Hr.ENTITY_HISTORY_DATE_SELECTED,{date:e})}function dt(t,e){void 0===e&&(e=null),t.dispatch(Hr.RECENT_ENTITY_HISTORY_FETCH_START,{});var n="history/period";return null!==e&&(n+="?filter_entity_id="+e),rn(t,"GET",n).then(function(e){return t.dispatch(Hr.RECENT_ENTITY_HISTORY_FETCH_SUCCESS,{stateHistory:e})},function(){return t.dispatch(Hr.RECENT_ENTITY_HISTORY_FETCH_ERROR,{})})}function vt(t,e){return t.dispatch(Hr.ENTITY_HISTORY_FETCH_START,{date:e}),rn(t,"GET","history/period/"+e).then(function(n){return t.dispatch(Hr.ENTITY_HISTORY_FETCH_SUCCESS,{date:e,stateHistory:n})},function(){return t.dispatch(Hr.ENTITY_HISTORY_FETCH_ERROR,{})})}function yt(t){var e=t.evaluate(ei);return vt(t,e)}function St(t){t.registerStores({currentEntityHistoryDate:xr,entityHistory:Fr,isLoadingEntityHistory:Kr,recentEntityHistory:Jr,recentEntityHistoryUpdated:Zr})}function gt(t){t.registerStores({moreInfoEntityId:kr})}function mt(t,e){var n=e.model,r=e.result,i=e.params;if(null===t||"entity"!==n.entity||!i.replace)return t;for(var o=0;oQo}function ae(t){t.registerStores({currentLogbookDate:Uo,isLoadingLogbookEntries:Po,logbookEntries:Ko,logbookEntriesUpdated:Jo})}function se(t,e){return rn(t,"POST","template",{template:e})}function ce(t){return t.set("isListening",!0)}function fe(t,e){var n=e.interimTranscript,r=e.finalTranscript;return t.withMutations(function(t){return t.set("isListening",!0).set("isTransmitting",!1).set("interimTranscript",n).set("finalTranscript",r)})}function he(t,e){var n=e.finalTranscript;return t.withMutations(function(t){return t.set("isListening",!1).set("isTransmitting",!0).set("interimTranscript","").set("finalTranscript",n)})}function le(){return _u.getInitialState()}function pe(){return _u.getInitialState()}function _e(){return _u.getInitialState()}function de(t){return du[t.hassId]}function ve(t){var e=de(t);if(e){var n=e.finalTranscript||e.interimTranscript;t.dispatch(hu.VOICE_TRANSMITTING,{finalTranscript:n}),Zn.callService(t,"conversation","process",{text:n}).then(function(){t.dispatch(hu.VOICE_DONE)},function(){t.dispatch(hu.VOICE_ERROR)})}}function ye(t){var e=de(t);e&&(e.recognition.stop(),du[t.hassId]=!1)}function Se(t){ve(t),ye(t)}function ge(t){var e=Se.bind(null,t);e();var n=new webkitSpeechRecognition;du[t.hassId]={recognition:n,interimTranscript:"",finalTranscript:""},n.interimResults=!0,n.onstart=function(){return t.dispatch(hu.VOICE_START)},n.onerror=function(){return t.dispatch(hu.VOICE_ERROR)},n.onend=e,n.onresult=function(e){var n=de(t);if(n){for(var r="",i="",o=e.resultIndex;o=n)}function c(t,e){return h(t,e,0)}function f(t,e){return h(t,e,e)}function h(t,e,n){return void 0===t?n:t<0?Math.max(0,e+t):void 0===e?t:Math.min(e,t)}function l(t){return v(t)?t:C(t)}function p(t){return y(t)?t:z(t)}function _(t){return S(t)?t:R(t)}function d(t){return v(t)&&!g(t)?t:L(t)}function v(t){return!(!t||!t[dn])}function y(t){return!(!t||!t[vn])}function S(t){return!(!t||!t[yn])}function g(t){return y(t)||S(t)}function m(t){return!(!t||!t[Sn])}function E(t){this.next=t}function I(t,e,n,r){var i=0===t?e:1===t?n:[e,n];return r?r.value=i:r={value:i,done:!1},r}function b(){return{value:void 0,done:!0}}function O(t){return!!A(t)}function w(t){return t&&"function"==typeof t.next}function T(t){var e=A(t);return e&&e.call(t)}function A(t){var e=t&&(In&&t[In]||t[bn]);if("function"==typeof e)return e}function D(t){return t&&"number"==typeof t.length}function C(t){return null===t||void 0===t?H():v(t)?t.toSeq():V(t)}function z(t){return null===t||void 0===t?H().toKeyedSeq():v(t)?y(t)?t.toSeq():t.fromEntrySeq():P(t)}function R(t){return null===t||void 0===t?H():v(t)?y(t)?t.entrySeq():t.toIndexedSeq():x(t)}function L(t){return(null===t||void 0===t?H():v(t)?y(t)?t.entrySeq():t:x(t)).toSetSeq()}function M(t){this._array=t,this.size=t.length}function j(t){var e=Object.keys(t);this._object=t,this._keys=e,this.size=e.length}function N(t){this._iterable=t,this.size=t.length||t.size}function k(t){this._iterator=t,this._iteratorCache=[]}function U(t){return!(!t||!t[wn])}function H(){return Tn||(Tn=new M([]))}function P(t){var e=Array.isArray(t)?new M(t).fromEntrySeq():w(t)?new k(t).fromEntrySeq():O(t)?new N(t).fromEntrySeq():"object"==typeof t?new j(t):void 0;if(!e)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+t);return e}function x(t){var e=q(t);if(!e)throw new TypeError("Expected Array or iterable object of values: "+t);return e}function V(t){var e=q(t)||"object"==typeof t&&new j(t);if(!e)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+t);return e}function q(t){return D(t)?new M(t):w(t)?new k(t):O(t)?new N(t):void 0}function F(t,e,n,r){var i=t._cache;if(i){for(var o=i.length-1,u=0;u<=o;u++){var a=i[n?o-u:u];if(e(a[1],r?a[0]:u,t)===!1)return u+1}return u}return t.__iterateUncached(e,n)}function G(t,e,n,r){var i=t._cache;if(i){var o=i.length-1,u=0;return new E(function(){var t=i[n?o-u:u];return u++>o?b():I(e,r?t[0]:u-1,t[1])})}return t.__iteratorUncached(e,n)}function K(){throw TypeError("Abstract")}function Y(){}function B(){}function J(){}function W(t,e){if(t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1;if("function"==typeof t.valueOf&&"function"==typeof e.valueOf){if(t=t.valueOf(),e=e.valueOf(),t===e||t!==t&&e!==e)return!0;if(!t||!e)return!1}return!("function"!=typeof t.equals||"function"!=typeof e.equals||!t.equals(e))}function X(t,e){return e?Q(e,t,"",{"":t}):Z(t)}function Q(t,e,n,r){return Array.isArray(e)?t.call(r,n,R(e).map(function(n,r){return Q(t,n,r,e)})):$(e)?t.call(r,n,z(e).map(function(n,r){return Q(t,n,r,e)})):e}function Z(t){return Array.isArray(t)?R(t).map(Z).toList():$(t)?z(t).map(Z).toMap():t}function $(t){return t&&(t.constructor===Object||void 0===t.constructor)}function tt(t){return t>>>1&1073741824|3221225471&t}function et(t){if(t===!1||null===t||void 0===t)return 0;if("function"==typeof t.valueOf&&(t=t.valueOf(),t===!1||null===t||void 0===t))return 0;if(t===!0)return 1;var e=typeof t;if("number"===e){var n=0|t;for(n!==t&&(n^=4294967295*t);t>4294967295;)t/=4294967295,n^=t;return tt(n)}return"string"===e?t.length>jn?nt(t):rt(t):"function"==typeof t.hashCode?t.hashCode():it(t)}function nt(t){var e=Un[t];return void 0===e&&(e=rt(t),kn===Nn&&(kn=0,Un={}),kn++,Un[t]=e),e}function rt(t){for(var e=0,n=0;n0)switch(t.nodeType){case 1:return t.uniqueID;case 9:return t.documentElement&&t.documentElement.uniqueID}}function ut(t,e){if(!t)throw new Error(e)}function at(t){ut(t!==1/0,"Cannot perform this action with an infinite size.")}function st(t,e){this._iter=t,this._useKeys=e,this.size=t.size}function ct(t){this._iter=t,this.size=t.size}function ft(t){this._iter=t,this.size=t.size}function ht(t){this._iter=t,this.size=t.size}function lt(t){var e=Mt(t);return e._iter=t,e.size=t.size,e.flip=function(){return t},e.reverse=function(){var e=t.reverse.apply(this);return e.flip=function(){return t.reverse()},e},e.has=function(e){return t.includes(e)},e.includes=function(e){return t.has(e)},e.cacheResult=jt,e.__iterateUncached=function(e,n){var r=this;return t.__iterate(function(t,n){return e(n,t,r)!==!1},n)},e.__iteratorUncached=function(e,n){if(e===En){var r=t.__iterator(e,n);return new E(function(){var t=r.next();if(!t.done){var e=t.value[0];t.value[0]=t.value[1],t.value[1]=e}return t})}return t.__iterator(e===mn?gn:mn,n)},e}function pt(t,e,n){var r=Mt(t);return r.size=t.size,r.has=function(e){return t.has(e)},r.get=function(r,i){var o=t.get(r,ln);return o===ln?i:e.call(n,o,r,t)},r.__iterateUncached=function(r,i){var o=this;return t.__iterate(function(t,i,u){return r(e.call(n,t,i,u),i,o)!==!1},i)},r.__iteratorUncached=function(r,i){var o=t.__iterator(En,i);return new E(function(){var i=o.next();if(i.done)return i;var u=i.value,a=u[0];return I(r,a,e.call(n,u[1],a,t),i)})},r}function _t(t,e){var n=Mt(t);return n._iter=t,n.size=t.size,n.reverse=function(){return t},t.flip&&(n.flip=function(){var e=lt(t);return e.reverse=function(){return t.flip()},e}),n.get=function(n,r){return t.get(e?n:-1-n,r)},n.has=function(n){return t.has(e?n:-1-n)},n.includes=function(e){return t.includes(e)},n.cacheResult=jt,n.__iterate=function(e,n){var r=this;return t.__iterate(function(t,n){return e(t,n,r)},!n)},n.__iterator=function(e,n){return t.__iterator(e,!n)},n}function dt(t,e,n,r){var i=Mt(t);return r&&(i.has=function(r){var i=t.get(r,ln);return i!==ln&&!!e.call(n,i,r,t)},i.get=function(r,i){var o=t.get(r,ln);return o!==ln&&e.call(n,o,r,t)?o:i}),i.__iterateUncached=function(i,o){var u=this,a=0;return t.__iterate(function(t,o,s){if(e.call(n,t,o,s))return a++,i(t,r?o:a-1,u)},o),a},i.__iteratorUncached=function(i,o){var u=t.__iterator(En,o),a=0;return new E(function(){for(;;){var o=u.next();if(o.done)return o;var s=o.value,c=s[0],f=s[1];if(e.call(n,f,c,t))return I(i,r?c:a++,f,o)}})},i}function vt(t,e,n){var r=Ut().asMutable();return t.__iterate(function(i,o){r.update(e.call(n,i,o,t),0,function(t){return t+1})}),r.asImmutable()}function yt(t,e,n){var r=y(t),i=(m(t)?be():Ut()).asMutable();t.__iterate(function(o,u){i.update(e.call(n,o,u,t),function(t){return t=t||[],t.push(r?[u,o]:o),t})});var o=Lt(t);return i.map(function(e){return Ct(t,o(e))})}function St(t,e,n,r){var i=t.size;if(void 0!==e&&(e=0|e),void 0!==n&&(n=0|n),s(e,n,i))return t;var o=c(e,i),a=f(n,i);if(o!==o||a!==a)return St(t.toSeq().cacheResult(),e,n,r);var h,l=a-o;l===l&&(h=l<0?0:l);var p=Mt(t);return p.size=0===h?h:t.size&&h||void 0,!r&&U(t)&&h>=0&&(p.get=function(e,n){return e=u(this,e),e>=0&&eh)return b();var t=i.next();return r||e===mn?t:e===gn?I(e,a-1,void 0,t):I(e,a-1,t.value[1],t)})},p}function gt(t,e,n){var r=Mt(t);return r.__iterateUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterate(r,i);var u=0;return t.__iterate(function(t,i,a){return e.call(n,t,i,a)&&++u&&r(t,i,o)}),u},r.__iteratorUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterator(r,i);var u=t.__iterator(En,i),a=!0;return new E(function(){if(!a)return b();var t=u.next();if(t.done)return t;var i=t.value,s=i[0],c=i[1];return e.call(n,c,s,o)?r===En?t:I(r,s,c,t):(a=!1,b())})},r}function mt(t,e,n,r){var i=Mt(t);return i.__iterateUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterate(i,o);var a=!0,s=0;return t.__iterate(function(t,o,c){if(!a||!(a=e.call(n,t,o,c)))return s++,i(t,r?o:s-1,u)}),s},i.__iteratorUncached=function(i,o){var u=this;if(o)return this.cacheResult().__iterator(i,o);var a=t.__iterator(En,o),s=!0,c=0;return new E(function(){var t,o,f;do{if(t=a.next(),t.done)return r||i===mn?t:i===gn?I(i,c++,void 0,t):I(i,c++,t.value[1],t);var h=t.value;o=h[0],f=h[1],s&&(s=e.call(n,f,o,u))}while(s);return i===En?t:I(i,o,f,t)})},i}function Et(t,e){var n=y(t),r=[t].concat(e).map(function(t){return v(t)?n&&(t=p(t)):t=n?P(t):x(Array.isArray(t)?t:[t]),t}).filter(function(t){return 0!==t.size});if(0===r.length)return t;if(1===r.length){var i=r[0];if(i===t||n&&y(i)||S(t)&&S(i))return i}var o=new M(r);return n?o=o.toKeyedSeq():S(t)||(o=o.toSetSeq()),o=o.flatten(!0),o.size=r.reduce(function(t,e){if(void 0!==t){var n=e.size;if(void 0!==n)return t+n}},0),o}function It(t,e,n){var r=Mt(t);return r.__iterateUncached=function(r,i){function o(t,s){var c=this;t.__iterate(function(t,i){return(!e||s0}function Dt(t,e,n){var r=Mt(t);return r.size=new M(n).map(function(t){return t.size}).min(),r.__iterate=function(t,e){for(var n,r=this,i=this.__iterator(mn,e),o=0;!(n=i.next()).done&&t(n.value,o++,r)!==!1;);return o},r.__iteratorUncached=function(t,r){var i=n.map(function(t){return t=l(t),T(r?t.reverse():t)}),o=0,u=!1;return new E(function(){var n;return u||(n=i.map(function(t){return t.next()}),u=n.some(function(t){return t.done})),u?b():I(t,o++,e.apply(null,n.map(function(t){return t.value})))})},r}function Ct(t,e){return U(t)?e:t.constructor(e)}function zt(t){if(t!==Object(t))throw new TypeError("Expected [K, V] tuple: "+t)}function Rt(t){return at(t.size),o(t)}function Lt(t){return y(t)?p:S(t)?_:d}function Mt(t){return Object.create((y(t)?z:S(t)?R:L).prototype)}function jt(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):C.prototype.cacheResult.call(this)}function Nt(t,e){return t>e?1:t>>n)&hn,a=(0===n?r:r>>>n)&hn,s=u===a?[Zt(t,e,n+cn,r,i)]:(o=new Ft(e,r,i),u>>=1)u[a]=1&n?e[o++]:void 0;return u[r]=i,new Vt(t,o+1,u)}function ne(t,e,n){for(var r=[],i=0;i>1&1431655765,t=(858993459&t)+(t>>2&858993459),t=t+(t>>4)&252645135,t+=t>>8,t+=t>>16,127&t}function ae(t,e,n,r){var o=r?t:i(t);return o[e]=n,o}function se(t,e,n,r){var i=t.length+1;if(r&&e+1===i)return t[e]=n,t;for(var o=new Array(i),u=0,a=0;a0&&ro?0:o-n,c=u-n;return c>fn&&(c=fn),function(){if(i===c)return Bn;var t=e?--c:i++;return r&&r[t]}}function i(t,r,i){var a,s=t&&t.array,c=i>o?0:o-i>>r,f=(u-i>>r)+1;return f>fn&&(f=fn),function(){for(;;){if(a){var t=a();if(t!==Bn)return t;a=null}if(c===f)return Bn;var o=e?--f:c++;a=n(s&&s[o],r-cn,i+(o<=t.size||n<0)return t.withMutations(function(t){n<0?me(t,n).set(0,r):me(t,0,n+1).set(n,r)});n+=t._origin;var i=t._tail,o=t._root,a=e(_n);return n>=Ie(t._capacity)?i=ye(i,t.__ownerID,0,n,r,a):o=ye(o,t.__ownerID,t._level,n,r,a),a.value?t.__ownerID?(t._root=o,t._tail=i,t.__hash=void 0,t.__altered=!0,t):_e(t._origin,t._capacity,t._level,o,i):t}function ye(t,e,r,i,o,u){var a=i>>>r&hn,s=t&&a0){var f=t&&t.array[a],h=ye(f,e,r-cn,i,o,u);return h===f?t:(c=Se(t,e),c.array[a]=h,c)}return s&&t.array[a]===o?t:(n(u),c=Se(t,e),void 0===o&&a===c.array.length-1?c.array.pop():c.array[a]=o,c)}function Se(t,e){return e&&t&&e===t.ownerID?t:new le(t?t.array.slice():[],e)}function ge(t,e){if(e>=Ie(t._capacity))return t._tail;if(e<1<0;)n=n.array[e>>>r&hn],r-=cn;return n}}function me(t,e,n){void 0!==e&&(e=0|e),void 0!==n&&(n=0|n);var i=t.__ownerID||new r,o=t._origin,u=t._capacity,a=o+e,s=void 0===n?u:n<0?u+n:o+n;if(a===o&&s===u)return t;if(a>=s)return t.clear();for(var c=t._level,f=t._root,h=0;a+h<0;)f=new le(f&&f.array.length?[void 0,f]:[],i),c+=cn,h+=1<=1<l?new le([],i):_;if(_&&p>l&&acn;y-=cn){var S=l>>>y&hn;v=v.array[S]=Se(v.array[S],i)}v.array[l>>>cn&hn]=_}if(s=p)a-=p,s-=p,c=cn,f=null,d=d&&d.removeBefore(i,0,a);else if(a>o||p>>c&hn;if(g!==p>>>c&hn)break;g&&(h+=(1<o&&(f=f.removeBefore(i,c,a-h)),f&&pi&&(i=a.size),v(u)||(a=a.map(function(t){return X(t)})),r.push(a)}return i>t.size&&(t=t.setSize(i)),ie(t,e,r)}function Ie(t){return t>>cn<=fn&&u.size>=2*o.size?(i=u.filter(function(t,e){return void 0!==t&&a!==e}),r=i.toKeyedSeq().map(function(t){return t[0]}).flip().toMap(),t.__ownerID&&(r.__ownerID=i.__ownerID=t.__ownerID)):(r=o.remove(e),i=a===u.size-1?u.pop():u.set(a,void 0))}else if(s){if(n===u.get(a)[1])return t;r=o,i=u.set(a,[e,n])}else r=o.set(e,u.size),i=u.set(u.size,[e,n]);return t.__ownerID?(t.size=r.size,t._map=r,t._list=i,t.__hash=void 0,t):we(r,i)}function De(t){return null===t||void 0===t?Re():Ce(t)?t:Re().unshiftAll(t)}function Ce(t){return!(!t||!t[Wn])}function ze(t,e,n,r){var i=Object.create(Xn);return i.size=t,i._head=e,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function Re(){return Qn||(Qn=ze(0))}function Le(t){return null===t||void 0===t?ke():Me(t)&&!m(t)?t:ke().withMutations(function(e){var n=d(t);at(n.size),n.forEach(function(t){return e.add(t)})})}function Me(t){return!(!t||!t[Zn])}function je(t,e){return t.__ownerID?(t.size=e.size,t._map=e,t):e===t._map?t:0===e.size?t.__empty():t.__make(e)}function Ne(t,e){var n=Object.create($n);return n.size=t?t.size:0,n._map=t,n.__ownerID=e,n}function ke(){return tr||(tr=Ne(Jt()))}function Ue(t){return null===t||void 0===t?xe():He(t)?t:xe().withMutations(function(e){var n=d(t);at(n.size),n.forEach(function(t){return e.add(t)})})}function He(t){return Me(t)&&m(t)}function Pe(t,e){var n=Object.create(er);return n.size=t?t.size:0,n._map=t,n.__ownerID=e,n}function xe(){return nr||(nr=Pe(Te()))}function Ve(t,e){var n,r=function(o){if(o instanceof r)return o;if(!(this instanceof r))return new r(o);if(!n){n=!0;var u=Object.keys(t);Ge(i,u),i.size=u.length,i._name=e,i._keys=u,i._defaultValues=t}this._map=Ut(o)},i=r.prototype=Object.create(rr);return i.constructor=r,r}function qe(t,e,n){var r=Object.create(Object.getPrototypeOf(t));return r._map=e,r.__ownerID=n,r}function Fe(t){return t._name||t.constructor.name||"Record"}function Ge(t,e){try{e.forEach(Ke.bind(void 0,t))}catch(n){}}function Ke(t,e){Object.defineProperty(t,e,{get:function(){return this.get(e)},set:function(t){ut(this.__ownerID,"Cannot set on an immutable record."),this.set(e,t)}})}function Ye(t,e){if(t===e)return!0;if(!v(e)||void 0!==t.size&&void 0!==e.size&&t.size!==e.size||void 0!==t.__hash&&void 0!==e.__hash&&t.__hash!==e.__hash||y(t)!==y(e)||S(t)!==S(e)||m(t)!==m(e))return!1;if(0===t.size&&0===e.size)return!0;var n=!g(t);if(m(t)){var r=t.entries();return e.every(function(t,e){var i=r.next().value;return i&&W(i[1],t)&&(n||W(i[0],e))})&&r.next().done}var i=!1;if(void 0===t.size)if(void 0===e.size)"function"==typeof t.cacheResult&&t.cacheResult();else{i=!0;var o=t;t=e,e=o}var u=!0,a=e.__iterate(function(e,r){if(n?!t.has(e):i?!W(e,t.get(r,ln)):!W(t.get(r,ln),e))return u=!1,!1});return u&&t.size===a}function Be(t,e,n){if(!(this instanceof Be))return new Be(t,e,n);if(ut(0!==n,"Cannot step a Range by 0"),t=t||0,void 0===e&&(e=1/0),n=void 0===n?1:Math.abs(n),ee?-1:0}function rn(t){if(t.size===1/0)return 0;var e=m(t),n=y(t),r=e?1:0,i=t.__iterate(n?e?function(t,e){r=31*r+un(et(t),et(e))|0}:function(t,e){r=r+un(et(t),et(e))|0}:e?function(t){r=31*r+et(t)|0}:function(t){r=r+et(t)|0});return on(i,r)}function on(t,e){return e=Dn(e,3432918353),e=Dn(e<<15|e>>>-15,461845907),e=Dn(e<<13|e>>>-13,5),e=(e+3864292196|0)^t,e=Dn(e^e>>>16,2246822507),e=Dn(e^e>>>13,3266489909),e=tt(e^e>>>16)}function un(t,e){return t^e+2654435769+(t<<6)+(t>>2)|0}var an=Array.prototype.slice,sn="delete",cn=5,fn=1<r?b():I(t,i,n[e?r-i++:i++])})},t(j,z),j.prototype.get=function(t,e){return void 0===e||this.has(t)?this._object[t]:e},j.prototype.has=function(t){return this._object.hasOwnProperty(t)},j.prototype.__iterate=function(t,e){for(var n=this,r=this._object,i=this._keys,o=i.length-1,u=0;u<=o;u++){var a=i[e?o-u:u];if(t(r[a],a,n)===!1)return u+1}return u},j.prototype.__iterator=function(t,e){var n=this._object,r=this._keys,i=r.length-1,o=0;return new E(function(){var u=r[e?i-o:o];return o++>i?b():I(t,u,n[u])})},j.prototype[Sn]=!0,t(N,R),N.prototype.__iterateUncached=function(t,e){var n=this;if(e)return this.cacheResult().__iterate(t,e);var r=this._iterable,i=T(r),o=0;if(w(i))for(var u;!(u=i.next()).done&&t(u.value,o++,n)!==!1;);return o},N.prototype.__iteratorUncached=function(t,e){if(e)return this.cacheResult().__iterator(t,e);var n=this._iterable,r=T(n);if(!w(r))return new E(b);var i=0;return new E(function(){var e=r.next();return e.done?e:I(t,i++,e.value)})},t(k,R),k.prototype.__iterateUncached=function(t,e){var n=this;if(e)return this.cacheResult().__iterate(t,e);for(var r=this._iterator,i=this._iteratorCache,o=0;o=r.length){var e=n.next();if(e.done)return e;r[i]=e.value}return I(t,i,r[i++])})};var Tn;t(K,l),t(Y,K),t(B,K),t(J,K),K.Keyed=Y,K.Indexed=B,K.Set=J;var An,Dn="function"==typeof Math.imul&&Math.imul(4294967295,2)===-2?Math.imul:function(t,e){t=0|t,e=0|e;var n=65535&t,r=65535&e;return n*r+((t>>>16)*r+n*(e>>>16)<<16>>>0)|0},Cn=Object.isExtensible,zn=function(){try{return Object.defineProperty({},"@",{}),!0}catch(t){return!1}}(),Rn="function"==typeof WeakMap;Rn&&(An=new WeakMap);var Ln=0,Mn="__immutablehash__";"function"==typeof Symbol&&(Mn=Symbol(Mn));var jn=16,Nn=255,kn=0,Un={};t(st,z),st.prototype.get=function(t,e){return this._iter.get(t,e)},st.prototype.has=function(t){return this._iter.has(t)},st.prototype.valueSeq=function(){return this._iter.valueSeq()},st.prototype.reverse=function(){var t=this,e=_t(this,!0);return this._useKeys||(e.valueSeq=function(){return t._iter.toSeq().reverse()}),e},st.prototype.map=function(t,e){var n=this,r=pt(this,t,e);return this._useKeys||(r.valueSeq=function(){return n._iter.toSeq().map(t,e)}),r},st.prototype.__iterate=function(t,e){var n,r=this;return this._iter.__iterate(this._useKeys?function(e,n){return t(e,n,r)}:(n=e?Rt(this):0,function(i){return t(i,e?--n:n++,r)}),e)},st.prototype.__iterator=function(t,e){if(this._useKeys)return this._iter.__iterator(t,e);var n=this._iter.__iterator(mn,e),r=e?Rt(this):0;return new E(function(){var i=n.next();return i.done?i:I(t,e?--r:r++,i.value,i)})},st.prototype[Sn]=!0,t(ct,R),ct.prototype.includes=function(t){return this._iter.includes(t)},ct.prototype.__iterate=function(t,e){var n=this,r=0;return this._iter.__iterate(function(e){return t(e,r++,n)},e)},ct.prototype.__iterator=function(t,e){var n=this._iter.__iterator(mn,e),r=0;return new E(function(){var e=n.next();return e.done?e:I(t,r++,e.value,e)})},t(ft,L),ft.prototype.has=function(t){return this._iter.includes(t)},ft.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){return t(e,e,n)},e)},ft.prototype.__iterator=function(t,e){var n=this._iter.__iterator(mn,e);return new E(function(){var e=n.next();return e.done?e:I(t,e.value,e.value,e)})},t(ht,z),ht.prototype.entrySeq=function(){return this._iter.toSeq()},ht.prototype.__iterate=function(t,e){var n=this;return this._iter.__iterate(function(e){if(e){zt(e);var r=v(e);return t(r?e.get(1):e[1],r?e.get(0):e[0],n)}},e)},ht.prototype.__iterator=function(t,e){var n=this._iter.__iterator(mn,e);return new E(function(){for(;;){var e=n.next();if(e.done)return e;var r=e.value;if(r){zt(r);var i=v(r);return I(t,i?r.get(0):r[0],i?r.get(1):r[1],e)}}})},ct.prototype.cacheResult=st.prototype.cacheResult=ft.prototype.cacheResult=ht.prototype.cacheResult=jt,t(Ut,Y),Ut.prototype.toString=function(){return this.__toString("Map {","}")},Ut.prototype.get=function(t,e){return this._root?this._root.get(0,void 0,t,e):e},Ut.prototype.set=function(t,e){return Wt(this,t,e)},Ut.prototype.setIn=function(t,e){return this.updateIn(t,ln,function(){return e})},Ut.prototype.remove=function(t){return Wt(this,t,ln)},Ut.prototype.deleteIn=function(t){return this.updateIn(t,function(){return ln})},Ut.prototype.update=function(t,e,n){return 1===arguments.length?t(this):this.updateIn([t],e,n)},Ut.prototype.updateIn=function(t,e,n){n||(n=e,e=void 0);var r=oe(this,kt(t),e,n);return r===ln?void 0:r},Ut.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):Jt()},Ut.prototype.merge=function(){return ne(this,void 0,arguments)},Ut.prototype.mergeWith=function(t){var e=an.call(arguments,1);return ne(this,t,e)},Ut.prototype.mergeIn=function(t){var e=an.call(arguments,1);return this.updateIn(t,Jt(),function(t){return"function"==typeof t.merge?t.merge.apply(t,e):e[e.length-1]})},Ut.prototype.mergeDeep=function(){return ne(this,re(void 0),arguments)},Ut.prototype.mergeDeepWith=function(t){var e=an.call(arguments,1);return ne(this,re(t),e)},Ut.prototype.mergeDeepIn=function(t){var e=an.call(arguments,1);return this.updateIn(t,Jt(),function(t){return"function"==typeof t.mergeDeep?t.mergeDeep.apply(t,e):e[e.length-1]})},Ut.prototype.sort=function(t){return be(wt(this,t))},Ut.prototype.sortBy=function(t,e){return be(wt(this,e,t))},Ut.prototype.withMutations=function(t){var e=this.asMutable();return t(e),e.wasAltered()?e.__ensureOwner(this.__ownerID):this},Ut.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new r)},Ut.prototype.asImmutable=function(){return this.__ensureOwner()},Ut.prototype.wasAltered=function(){return this.__altered},Ut.prototype.__iterator=function(t,e){return new Gt(this,t,e)},Ut.prototype.__iterate=function(t,e){var n=this,r=0;return this._root&&this._root.iterate(function(e){return r++,t(e[1],e[0],n)},e),r},Ut.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?Bt(this.size,this._root,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},Ut.isMap=Ht;var Hn="@@__IMMUTABLE_MAP__@@",Pn=Ut.prototype;Pn[Hn]=!0,Pn[sn]=Pn.remove,Pn.removeIn=Pn.deleteIn,Pt.prototype.get=function(t,e,n,r){for(var i=this.entries,o=0,u=i.length;o=Vn)return $t(t,f,o,u);var _=t&&t===this.ownerID,d=_?f:i(f);return p?c?h===l-1?d.pop():d[h]=d.pop():d[h]=[o,u]:d.push([o,u]),_?(this.entries=d,this):new Pt(t,d)}},xt.prototype.get=function(t,e,n,r){void 0===e&&(e=et(n));var i=1<<((0===t?e:e>>>t)&hn),o=this.bitmap;return 0===(o&i)?r:this.nodes[ue(o&i-1)].get(t+cn,e,n,r)},xt.prototype.update=function(t,e,n,r,i,o,u){void 0===n&&(n=et(r));var a=(0===e?n:n>>>e)&hn,s=1<=qn)return ee(t,l,c,a,_);if(f&&!_&&2===l.length&&Qt(l[1^h]))return l[1^h];if(f&&_&&1===l.length&&Qt(_))return _;var d=t&&t===this.ownerID,v=f?_?c:c^s:c|s,y=f?_?ae(l,h,_,d):ce(l,h,d):se(l,h,_,d);return d?(this.bitmap=v,this.nodes=y,this):new xt(t,v,y)},Vt.prototype.get=function(t,e,n,r){void 0===e&&(e=et(n));var i=(0===t?e:e>>>t)&hn,o=this.nodes[i];return o?o.get(t+cn,e,n,r):r},Vt.prototype.update=function(t,e,n,r,i,o,u){void 0===n&&(n=et(r));var a=(0===e?n:n>>>e)&hn,s=i===ln,c=this.nodes,f=c[a];if(s&&!f)return this;var h=Xt(f,t,e+cn,n,r,i,o,u);if(h===f)return this;var l=this.count;if(f){if(!h&&(l--,l=0&&t>>e&hn;if(r>=this.array.length)return new le([],t);var i,o=0===r;if(e>0){var u=this.array[r];if(i=u&&u.removeBefore(t,e-cn,n),i===u&&o)return this}if(o&&!i)return this;var a=Se(this,t);if(!o)for(var s=0;s>>e&hn;if(r>=this.array.length)return this;var i;if(e>0){var o=this.array[r];if(i=o&&o.removeAfter(t,e-cn,n),i===o&&r===this.array.length-1)return this}var u=Se(this,t);return u.array.splice(r+1),i&&(u.array[r]=i),u};var Yn,Bn={};t(be,Ut),be.of=function(){return this(arguments)},be.prototype.toString=function(){return this.__toString("OrderedMap {","}")},be.prototype.get=function(t,e){var n=this._map.get(t);return void 0!==n?this._list.get(n)[1]:e},be.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):Te()},be.prototype.set=function(t,e){return Ae(this,t,e)},be.prototype.remove=function(t){return Ae(this,t,ln)},be.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},be.prototype.__iterate=function(t,e){var n=this;return this._list.__iterate(function(e){return e&&t(e[1],e[0],n)},e)},be.prototype.__iterator=function(t,e){return this._list.fromEntrySeq().__iterator(t,e)},be.prototype.__ensureOwner=function(t){if(t===this.__ownerID)return this;var e=this._map.__ensureOwner(t),n=this._list.__ensureOwner(t);return t?we(e,n,t,this.__hash):(this.__ownerID=t,this._map=e,this._list=n,this)},be.isOrderedMap=Oe,be.prototype[Sn]=!0,be.prototype[sn]=be.prototype.remove;var Jn;t(De,B),De.of=function(){return this(arguments)},De.prototype.toString=function(){return this.__toString("Stack [","]")},De.prototype.get=function(t,e){var n=this._head;for(t=u(this,t);n&&t--;)n=n.next;return n?n.value:e},De.prototype.peek=function(){return this._head&&this._head.value},De.prototype.push=function(){var t=arguments;if(0===arguments.length)return this;for(var e=this.size+arguments.length,n=this._head,r=arguments.length-1;r>=0;r--)n={value:t[r],next:n};return this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):ze(e,n)},De.prototype.pushAll=function(t){if(t=_(t),0===t.size)return this;at(t.size);var e=this.size,n=this._head;return t.reverse().forEach(function(t){e++,n={value:t,next:n}}),this.__ownerID?(this.size=e,this._head=n,this.__hash=void 0,this.__altered=!0,this):ze(e,n)},De.prototype.pop=function(){return this.slice(1)},De.prototype.unshift=function(){return this.push.apply(this,arguments)},De.prototype.unshiftAll=function(t){return this.pushAll(t)},De.prototype.shift=function(){return this.pop.apply(this,arguments)},De.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Re()},De.prototype.slice=function(t,e){if(s(t,e,this.size))return this;var n=c(t,this.size),r=f(e,this.size);if(r!==this.size)return B.prototype.slice.call(this,t,e);for(var i=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=i,this._head=o,this.__hash=void 0,this.__altered=!0,this):ze(i,o)},De.prototype.__ensureOwner=function(t){return t===this.__ownerID?this:t?ze(this.size,this._head,t,this.__hash):(this.__ownerID=t,this.__altered=!1,this)},De.prototype.__iterate=function(t,e){var n=this;if(e)return this.reverse().__iterate(t);for(var r=0,i=this._head;i&&t(i.value,r++,n)!==!1;)i=i.next;return r},De.prototype.__iterator=function(t,e){if(e)return this.reverse().__iterator(t);var n=0,r=this._head;return new E(function(){if(r){var e=r.value;return r=r.next,I(t,n++,e)}return b()})},De.isStack=Ce;var Wn="@@__IMMUTABLE_STACK__@@",Xn=De.prototype;Xn[Wn]=!0,Xn.withMutations=Pn.withMutations,Xn.asMutable=Pn.asMutable,Xn.asImmutable=Pn.asImmutable,Xn.wasAltered=Pn.wasAltered;var Qn;t(Le,J),Le.of=function(){return this(arguments)},Le.fromKeys=function(t){return this(p(t).keySeq())},Le.prototype.toString=function(){return this.__toString("Set {","}")},Le.prototype.has=function(t){return this._map.has(t)},Le.prototype.add=function(t){return je(this,this._map.set(t,!0))},Le.prototype.remove=function(t){return je(this,this._map.remove(t))},Le.prototype.clear=function(){return je(this,this._map.clear())},Le.prototype.union=function(){var t=an.call(arguments,0);return t=t.filter(function(t){return 0!==t.size}),0===t.length?this:0!==this.size||this.__ownerID||1!==t.length?this.withMutations(function(e){for(var n=0;n1?" by "+this._step:"")+" ]"},Be.prototype.get=function(t,e){return this.has(t)?this._start+u(this,t)*this._step:e},Be.prototype.includes=function(t){var e=(t-this._start)/this._step;return e>=0&&e=0&&nn?b():I(t,o++,u)})},Be.prototype.equals=function(t){return t instanceof Be?this._start===t._start&&this._end===t._end&&this._step===t._step:Ye(this,t)};var ir;t(Je,R),Je.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},Je.prototype.get=function(t,e){return this.has(t)?this._value:e},Je.prototype.includes=function(t){return W(this._value,t)},Je.prototype.slice=function(t,e){var n=this.size;return s(t,e,n)?this:new Je(this._value,f(e,n)-c(t,n))},Je.prototype.reverse=function(){return this},Je.prototype.indexOf=function(t){return W(this._value,t)?0:-1},Je.prototype.lastIndexOf=function(t){return W(this._value,t)?this.size:-1},Je.prototype.__iterate=function(t,e){for(var n=this,r=0;rthis.size?e:this.find(function(e,n){return n===t},void 0,e)},has:function(t){return t=u(this,t),t>=0&&(void 0!==this.size?this.size===1/0||t-1&&t%1===0&&t<=Number.MAX_VALUE}var i=Function.prototype.bind;e.isString=function(t){return"string"==typeof t||"[object String]"===n(t)},e.isArray=Array.isArray||function(t){return"[object Array]"===n(t)},"function"!=typeof/./&&"object"!=typeof Int8Array?e.isFunction=function(t){return"function"==typeof t||!1}:e.isFunction=function(t){return"[object Function]"===toString.call(t)},e.isObject=function(t){var e=typeof t;return"function"===e||"object"===e&&!!t},e.extend=function(t){var e=arguments,n=arguments.length;if(!t||n<2)return t||{};for(var r=1;r0)){var e=this.reactorState.get("dirtyStores");if(0!==e.size){var n=c["default"].Set().withMutations(function(n){n.union(t.observerState.get("any")),e.forEach(function(e){var r=t.observerState.getIn(["stores",e]);r&&n.union(r)})});n.forEach(function(e){var n=t.observerState.getIn(["observersMap",e]);if(n){var r=n.get("getter"),i=n.get("handler"),o=p.evaluate(t.prevReactorState,r),u=p.evaluate(t.reactorState,r);t.prevReactorState=o.reactorState,t.reactorState=u.reactorState;var a=o.result,s=u.result;c["default"].is(a,s)||i.call(null,s)}});var r=p.resetDirtyStores(this.reactorState);this.prevReactorState=r,this.reactorState=r}}}},{key:"batchStart",value:function(){this.__batchDepth++}},{key:"batchEnd",value:function(){if(this.__batchDepth--,this.__batchDepth<=0){this.__isDispatching=!0;try{this.__notify()}catch(t){throw this.__isDispatching=!1,t}this.__isDispatching=!1}}}]),t}();e["default"]=(0,y.toFactory)(g),t.exports=e["default"]},function(t,e,n){function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n={};return(0,o.each)(e,function(e,r){n[r]=t.evaluate(e)}),n}Object.defineProperty(e,"__esModule",{value:!0});var o=n(4);e["default"]=function(t){return{getInitialState:function(){return i(t,this.getDataBindings())},componentDidMount:function(){var e=this;this.__unwatchFns=[],(0,o.each)(this.getDataBindings(),function(n,i){var o=t.observe(n,function(t){e.setState(r({},i,t))});e.__unwatchFns.push(o)})},componentWillUnmount:function(){for(var t=this;this.__unwatchFns.length;)t.__unwatchFns.shift()()}}},t.exports=e["default"]},function(t,e,n){function r(t){return t&&t.__esModule?t:{"default":t}}function i(t,e){return new L({result:t,reactorState:e})}function o(t,e){return t.withMutations(function(t){(0,R.each)(e,function(e,n){t.getIn(["stores",n])&&console.warn("Store already defined for id = "+n);var r=e.getInitialState();if(void 0===r&&f(t,"throwOnUndefinedStoreReturnValue"))throw new Error("Store getInitialState() must return a value, did you forget a return statement");if(f(t,"throwOnNonImmutableStore")&&!(0,D.isImmutableValue)(r))throw new Error("Store getInitialState() must return an immutable value, did you forget to call toImmutable");t.update("stores",function(t){return t.set(n,e)}).update("state",function(t){return t.set(n,r)}).update("dirtyStores",function(t){return t.add(n)}).update("storeStates",function(t){return b(t,[n])})}),I(t)})}function u(t,e){return t.withMutations(function(t){(0,R.each)(e,function(e,n){t.update("stores",function(t){return t.set(n,e)})})})}function a(t,e,n){if(void 0===e&&f(t,"throwOnUndefinedActionType"))throw new Error("`dispatch` cannot be called with an `undefined` action type.");var r=t.get("state"),i=t.get("dirtyStores"),o=r.withMutations(function(r){A["default"].dispatchStart(t,e,n),t.get("stores").forEach(function(o,u){var a=r.get(u),s=void 0;try{s=o.handle(a,e,n)}catch(c){throw A["default"].dispatchError(t,c.message),c}if(void 0===s&&f(t,"throwOnUndefinedStoreReturnValue")){var h="Store handler must return a value, did you forget a return statement";throw A["default"].dispatchError(t,h),new Error(h)}r.set(u,s),a!==s&&(i=i.add(u))}),A["default"].dispatchEnd(t,r,i)}),u=t.set("state",o).set("dirtyStores",i).update("storeStates",function(t){return b(t,i)});return I(u)}function s(t,e){var n=[],r=(0,D.toImmutable)({}).withMutations(function(r){(0,R.each)(e,function(e,i){var o=t.getIn(["stores",i]);if(o){var u=o.deserialize(e);void 0!==u&&(r.set(i,u),n.push(i))}})}),i=w["default"].Set(n);return t.update("state",function(t){return t.merge(r)}).update("dirtyStores",function(t){return t.union(i)}).update("storeStates",function(t){return b(t,n)})}function c(t,e,n){var r=e;(0,z.isKeyPath)(e)&&(e=(0,C.fromKeyPath)(e));var i=t.get("nextId"),o=(0,C.getStoreDeps)(e),u=w["default"].Map({id:i,storeDeps:o,getterKey:r,getter:e,handler:n}),a=void 0;return a=0===o.size?t.update("any",function(t){return t.add(i)}):t.withMutations(function(t){o.forEach(function(e){var n=["stores",e];t.hasIn(n)||t.setIn(n,w["default"].Set()),t.updateIn(["stores",e],function(t){return t.add(i)})})}),a=a.set("nextId",i+1).setIn(["observersMap",i],u),{observerState:a,entry:u}}function f(t,e){var n=t.getIn(["options",e]);if(void 0===n)throw new Error("Invalid option: "+e);return n}function h(t,e,n){var r=t.get("observersMap").filter(function(t){var r=t.get("getterKey"),i=!n||t.get("handler")===n;return!!i&&((0,z.isKeyPath)(e)&&(0,z.isKeyPath)(r)?(0,z.isEqual)(e,r):e===r)});return t.withMutations(function(t){r.forEach(function(e){return l(t,e)})})}function l(t,e){return t.withMutations(function(t){var n=e.get("id"),r=e.get("storeDeps");0===r.size?t.update("any",function(t){return t.remove(n)}):r.forEach(function(e){t.updateIn(["stores",e],function(t){return t?t.remove(n):t})}),t.removeIn(["observersMap",n])})}function p(t){var e=t.get("state");return t.withMutations(function(t){var n=t.get("stores"),r=n.keySeq().toJS();n.forEach(function(n,r){var i=e.get(r),o=n.handleReset(i);if(void 0===o&&f(t,"throwOnUndefinedStoreReturnValue"))throw new Error("Store handleReset() must return a value, did you forget a return statement");if(f(t,"throwOnNonImmutableStore")&&!(0,D.isImmutableValue)(o))throw new Error("Store reset state must be an immutable value, did you forget to call toImmutable");t.setIn(["state",r],o)}),t.update("storeStates",function(t){return b(t,r)}),v(t)})}function _(t,e){var n=t.get("state");if((0,z.isKeyPath)(e))return i(n.getIn(e),t);if(!(0,C.isGetter)(e))throw new Error("evaluate must be passed a keyPath or Getter");if(g(t,e))return i(E(t,e),t);var r=(0,C.getDeps)(e).map(function(e){return _(t,e).result}),o=(0,C.getComputeFn)(e).apply(null,r);return i(o,m(t,e,o))}function d(t){var e={};return t.get("stores").forEach(function(n,r){var i=t.getIn(["state",r]),o=n.serialize(i);void 0!==o&&(e[r]=o)}),e}function v(t){return t.set("dirtyStores",w["default"].Set())}function y(t){return t}function S(t,e){var n=y(e);return t.getIn(["cache",n])}function g(t,e){var n=S(t,e);if(!n)return!1;var r=n.get("storeStates");return 0!==r.size&&r.every(function(e,n){return t.getIn(["storeStates",n])===e})}function m(t,e,n){var r=y(e),i=t.get("dispatchId"),o=(0,C.getStoreDeps)(e),u=(0,D.toImmutable)({}).withMutations(function(e){o.forEach(function(n){var r=t.getIn(["storeStates",n]);e.set(n,r)})});return t.setIn(["cache",r],w["default"].Map({value:n,storeStates:u,dispatchId:i}))}function E(t,e){var n=y(e);return t.getIn(["cache",n,"value"])}function I(t){return t.update("dispatchId",function(t){return t+1})}function b(t,e){return t.withMutations(function(t){e.forEach(function(e){var n=t.has(e)?t.get(e)+1:1;t.set(e,n)})})}Object.defineProperty(e,"__esModule",{value:!0}),e.registerStores=o,e.replaceStores=u,e.dispatch=a,e.loadState=s,e.addObserver=c,e.getOption=f,e.removeObserver=h,e.removeObserverByEntry=l,e.reset=p,e.evaluate=_,e.serialize=d,e.resetDirtyStores=v;var O=n(3),w=r(O),T=n(9),A=r(T),D=n(5),C=n(10),z=n(11),R=n(4),L=w["default"].Record({result:null,reactorState:null})},function(t,e,n){var r=n(8);e.dispatchStart=function(t,e,n){(0,r.getOption)(t,"logDispatches")&&console.group&&(console.groupCollapsed("Dispatch: %s",e),console.group("payload"),console.debug(n),console.groupEnd())},e.dispatchError=function(t,e){(0,r.getOption)(t,"logDispatches")&&console.group&&(console.debug("Dispatch error: "+e),console.groupEnd())},e.dispatchEnd=function(t,e,n){(0,r.getOption)(t,"logDispatches")&&console.group&&((0,r.getOption)(t,"logDirtyStores")&&console.log("Stores updated:",n.toList().toJS()),(0,r.getOption)(t,"logAppState")&&console.debug("Dispatch done, new state: ",e.toJS()),console.groupEnd())}},function(t,e,n){function r(t){return t&&t.__esModule?t:{"default":t}}function i(t){return(0,l.isArray)(t)&&(0,l.isFunction)(t[t.length-1])}function o(t){return t[t.length-1]}function u(t){return t.slice(0,t.length-1)}function a(t,e){e||(e=h["default"].Set());var n=h["default"].Set().withMutations(function(e){if(!i(t))throw new Error("getFlattenedDeps must be passed a Getter");u(t).forEach(function(t){if((0,p.isKeyPath)(t))e.add((0,f.List)(t));else{if(!i(t))throw new Error("Invalid getter, each dependency must be a KeyPath or Getter");e.union(a(t))}})});return e.union(n)}function s(t){if(!(0,p.isKeyPath)(t))throw new Error("Cannot create Getter from KeyPath: "+t);return[t,_]}function c(t){if(t.hasOwnProperty("__storeDeps"))return t.__storeDeps;var e=a(t).map(function(t){return t.first()}).filter(function(t){return!!t});return Object.defineProperty(t,"__storeDeps",{enumerable:!1,configurable:!1,writable:!1,value:e}),e}Object.defineProperty(e,"__esModule",{value:!0});var f=n(3),h=r(f),l=n(4),p=n(11),_=function(t){return t};e["default"]={isGetter:i,getComputeFn:o,getFlattenedDeps:a,getStoreDeps:c,getDeps:u,fromKeyPath:s},t.exports=e["default"]},function(t,e,n){function r(t){return t&&t.__esModule?t:{"default":t}}function i(t){return(0,s.isArray)(t)&&!(0,s.isFunction)(t[t.length-1])}function o(t,e){var n=a["default"].List(t),r=a["default"].List(e);return a["default"].is(n,r)}Object.defineProperty(e,"__esModule",{value:!0}),e.isKeyPath=i,e.isEqual=o;var u=n(3),a=r(u),s=n(4)},function(t,e,n){Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=(0,r.Map)({logDispatches:!1,logAppState:!1,logDirtyStores:!1,throwOnUndefinedActionType:!1,throwOnUndefinedStoreReturnValue:!1,throwOnNonImmutableStore:!1,throwOnDispatchInDispatch:!1});e.PROD_OPTIONS=i;var o=(0,r.Map)({logDispatches:!0,logAppState:!0,logDirtyStores:!0,throwOnUndefinedActionType:!0,throwOnUndefinedStoreReturnValue:!0,throwOnNonImmutableStore:!0,throwOnDispatchInDispatch:!0});e.DEBUG_OPTIONS=o;var u=(0,r.Record)({dispatchId:0,state:(0,r.Map)(),stores:(0,r.Map)(),cache:(0,r.Map)(),storeStates:(0,r.Map)(),dirtyStores:(0,r.Set)(),debug:!1,options:i});e.ReactorState=u;var a=(0,r.Record)({any:(0,r.Set)(),stores:(0,r.Map)({}),observersMap:(0,r.Map)({}),nextId:1});e.ObserverState=a}])})}),be=t(Ie),Oe=e(function(t){var e=function(t){var e,n={};if(!(t instanceof Object)||Array.isArray(t))throw new Error("keyMirror(...): Argument must be an object.");for(e in t)t.hasOwnProperty(e)&&(n[e]=e);return n};t.exports=e}),we=t(Oe),Te=we({VALIDATING_AUTH_TOKEN:null,VALID_AUTH_TOKEN:null,INVALID_AUTH_TOKEN:null,LOG_OUT:null}),Ae=be.Store,De=be.toImmutable,Ce=new Ae({getInitialState:function(){return De({isValidating:!1,authToken:!1,host:null,isInvalid:!1,errorMessage:""})},initialize:function(){this.on(Te.VALIDATING_AUTH_TOKEN,n),this.on(Te.VALID_AUTH_TOKEN,r),this.on(Te.INVALID_AUTH_TOKEN,i)}}),ze=be.Store,Re=be.toImmutable,Le=new ze({getInitialState:function(){return Re({authToken:null,host:""})},initialize:function(){this.on(Te.VALID_AUTH_TOKEN,o),this.on(Te.LOG_OUT,u)}}),Me=be.Store,je=new Me({getInitialState:function(){return!0},initialize:function(){this.on(Te.VALID_AUTH_TOKEN,a)}}),Ne=we({STREAM_START:null,STREAM_STOP:null,STREAM_ERROR:null}),ke="object"==typeof window&&"EventSource"in window,Ue=be.Store,He=be.toImmutable,Pe=new Ue({getInitialState:function(){return He({isSupported:ke,isStreaming:!1,useStreaming:!0,hasError:!1})},initialize:function(){this.on(Ne.STREAM_START,s),this.on(Ne.STREAM_STOP,c),this.on(Ne.STREAM_ERROR,f),this.on(Ne.LOG_OUT,h)}}),xe=we({API_FETCH_ALL_START:null,API_FETCH_ALL_SUCCESS:null,API_FETCH_ALL_FAIL:null,SYNC_SCHEDULED:null,SYNC_SCHEDULE_CANCELLED:null}),Ve=be.Store,qe=new Ve({getInitialState:function(){return!0},initialize:function(){this.on(xe.API_FETCH_ALL_START,function(){return!0}),this.on(xe.API_FETCH_ALL_SUCCESS,function(){return!1}),this.on(xe.API_FETCH_ALL_FAIL,function(){return!1}),this.on(xe.LOG_OUT,function(){return!1})}}),Fe=be.Store,Ge=new Fe({getInitialState:function(){return!1},initialize:function(){this.on(xe.SYNC_SCHEDULED,function(){return!0}),this.on(xe.SYNC_SCHEDULE_CANCELLED,function(){return!1}),this.on(xe.LOG_OUT,function(){return!1})}}),Ke=we({API_FETCH_SUCCESS:null,API_FETCH_START:null,API_FETCH_FAIL:null,API_SAVE_SUCCESS:null,API_SAVE_START:null,API_SAVE_FAIL:null,API_DELETE_SUCCESS:null,API_DELETE_START:null,API_DELETE_FAIL:null,LOG_OUT:null}),Ye=be.Store,Be=be.toImmutable,Je=new Ye({getInitialState:function(){return Be({})},initialize:function(){var t=this;this.on(Ke.API_FETCH_SUCCESS,l),this.on(Ke.API_SAVE_SUCCESS,l),this.on(Ke.API_DELETE_SUCCESS,p),this.on(Ke.LOG_OUT,function(){return t.getInitialState()})}}),We=e(function(t){function e(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}function n(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},n=0;n<10;n++)e["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(e).map(function(t){return e[t]});if("0123456789"!==r.join(""))return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach(function(t){i[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},i)).join("")}catch(o){return!1}}var r=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;t.exports=n()?Object.assign:function(t,n){for(var o,u,a=arguments,s=e(t),c=1;c*b?OOOVAz1{IP@;@JA{cV_S)z=tfS-TU0T+7*i=9)rPPFfR<&$8#~v z<3xD=ZEK$KwJcBLVczQL_iMSA`?o32=PCT&*k~n}e{v`ghWX8mCu4dy;^SyO&08@P z>F4L>`69>{rXlX-jGLx-c+0=ck~GhP+r@(A9%sC*-uT7OqPmdPKSk-92zfi2=aaMK z0~aiXr%96KJ=O9a_ioMCKrs9kq%6+fMbmf`<*~R5);sWgAU@%nV7<$DnkMOMo@LP$ z4_d8-U-X-L2IgJfzT)|Ti1Rp_p5{@`J*!~s0%$j>LCf2p<9zaZ4ppH><{9K$C~jvw z_gXfzEwi;=RivHNBF%1UUf|(yDIOxX&y-*D>r0;QK(=d2}t&qEP^ZTlabrW&4O6LZCgC;a};rTi%#njvaf6&!TWAO{1H3oY7w|_4{dXo?fsFnjELe^~=-aqr1Cj*2=))C2YO~ zG2H4R^mxqt`gHu=O4 zgm)8k3us7&S2R=`6M2#b;2-AH#WQ!D*9{$ z-*T2Btc+`%KCJR@I04Yat*Q+i4!-FIaU_-Y{M#$4dJ8O204cG&J?8mv0xfg-t5jSK z(7+&|q#zi0dlYB02&#Cmczfr~!QlD++3t(M>DkW78M`GU2RV}{2JUjr^GPxaTGR`0 zTirGF)6OScc%$}ZEJmJ~Pp1r_6h8Y@dF4~zRCQ-M{m+049a#{=(-NTNtO$2j>IVW1 zX3-~3$j2XlVKApV@Amar^cVn{HLon{FlJLTA>$B1`iy-_3BOkr6KIg4LRjk zahCJ+G*18?5BkjVomspa4JSN!$?bjkpxEWl&s%oE7OX(IkzBB<;J3b>FD{B^F2Avv zwfyexSK5s2){dNAv6vG z>>MlaCnS&_h%rbE2}lztbZ)l3k7n`rtxeIhI#W|*i37-Qq!fbRe|vrSBF|?h{No&k z(wn!F8Aqm+pqK8q?B zq1Xoh#$S>17uEI(@DIc?;dWQHZ!v=_(LOppJ9vJuyK{DMd^FfS+21+a-vf@Iv^{6_ zeyv~cBFW>i!b27u2)oLO>=Fdz)-)M@Kw`+1puFBexw&-(Jm-oJMhS@R?pKWml$vwD zr#S)an*vageu{xS+aU6LE&MP5QnNZfwDoCVAF$L~S7|bzQ77$DavjB@-;(s16Q%IG zyH+wDTQ33tUloPMtkz%Kt)IU~7E{l)Ha2n>R_?H#KP^UfBiffY2P16irC^6vsUyid zK*qP#ZbZ*8^fb5e5l?6FHO%-{)EjPturz$y>BnIvUng^5-i&Vz{lJTf=`eA3=VdTf zq~jZJ&VbRx@M<0=k}1K6i7f%6n6rpwJ$xI6B!-3EPDgUBp}maeVLpjbH;U4$IZF8% zXghT#?SA?7R#w2!uoEuLPz6k!41;7`BH~9yyCThMM$JHyFbRWyJ*>76|^} zF1%rK4Lk*aFP7eHo=rS^(YxgYR(ApWzUd%H znbUj_vvT7>!c5b_oFSF-^qp)zh-@bCr5O8U>Db>@7*vwBPxnvW?Vk*GkB^=o{4zK^ z-q`~N#jRQ&X%XSB*ZO7u4EQqaEaUj9rG(?^mah7-L401<^X~EMH^)c&M`ya%TQkir zWBkRDMp4ZiQvvah6cxuQ*BFL@C^O6OWq{xF& z&Af=b81sjvV@|8k{D~{(aDVq~0EByR_B*@PJ-P72xg@kzDk8^p45yaadmUuz+D#~b z`XhgASx8IcA3v@00-5D`66x0g*A9_aC&xp^7~+K2bFtTbI3K2WZgA7(rD5eqZGZQ zrcx=|0LX~9}%j+eR;XF-&MD~eF6u7u{gD)Vy+b@IX z=x01kq7iU;r+DxRRvI6cTM1s)zJ5DH1dW0}9Fga$0laJYgGQ8ny_tP*s$J(Rdwft` zl^Re8dtOV9tpy84yFl*l){WDr@CIqeOcHi_$+q5hddcRd4-Ka0iN%jB1$ZsDm!)NN zt8$k8Snu5L4)))(+fOksi8%*(qxlIyj;6dKp;)kQufSqanY$lbqKQ)y^D-;@0E+7VreL*#Tz= z=(lC-DHb3TWC-~lt9_2eDEVwuJD|LLg8G;5EYq(k0Aas4jN2AA{2oZ3oElFXTWn|Z z%Pdbl^qtP8APoWlP%%tlgM`M@^X>&~F_%PO7T=KqGlMxhiD6Esd`MlA$q}YNZ>4G# z$bIp1PQD6u6tgq=)3#pKi2|?y1*sXRt`qiq)@ZL{oX=gG?;MQ$zDLvEj;{pJ#}WUM z?{NvBECQ6yPJ!f{mr%hEQnL8i*xlHO-FGDf-`zE!1|~+XFJKFC6-Tkdgm;MsVDA5n z{aYf4p7NJAjRB)EX330jv^$B!6+gr!A$S_><(9`M_t{*0MgWhZPw^Ga{PCq!7(u{I zW3|cwXgz_{1x>-mhJJ@e5Hq7WbBp36=_#)LhLV;73b9cGj*H}bK*Kg0K&y@c z5h6jW{bqsoT5T6K;MJ0y3uV6wkJBLn(YV9|-blNBzJ#p1fn_qQiU=Bj%V_ukL{vtR z5j~qLhFk*`jYj*QV04lwU2Pspk{^yjTap5!`@yjR;b{rYw(1{W&m`Z9p z(_T{{DoXpM1Zyn@T@dY}&uvhTyra@;{}}r|v&(okkNwk<_UuA9EnJ#SZRO?2h1bX# zUu@s)&f#I9SU6(wWs>BuvqZBx3tSD~{3PtC4%`joV#$2=N6jZ?P50TG>PL<=0H1Es zwlo5ww8_cUtzP)-MXU^1);IaW(W$C~)#5oy(u}5S!Io=2l{S>SwQ#P;cFImx*Eac~ zUJESrIY7#Xc&1g+8!_yaf((GPOG7*T{b+Y^y8B{(@9p9K9_;6R0wkcRx2)V{BT>2P zV0Y(ecmI&u_|vWXqG1Ka*>j8y0UZFRE%*p~e1<@u4kvsxpMqfjizB*V)Pb z&TGk8efA3E$2^%Ki-`L0V4|vEsYW5jOD#}es_p+;2ff-n3Snr?FlrJFJw!+w8??eK z|GRweFKL_0C`((|@USExcyvQ@4>WJhKzsM__;h~{4Qn-nB@2b@&GPCHEfaw}0Bgr@ z6w;!UxRLGRY2ZhaEKVs@Ab8{Yb#m=_twwDrsugWJ(zRDot}Pl(k~Z+U`3wWM`N-E1 zAHod*HuceU8RNR^N!x*t0m)WK18L{6Z)a4lx9%3C3{ad`a8;P@>`K$h>VfzA+JJ2`q$^I(@V zd{nwbaL8TE{pnEQGqgIR-GyQ((Ab<{$ON7zkOHu;Oh&g0LPKur{JJ#bVQVlLfK-*Y zC{)LBS^!jd!~k)mB75l#JgaCMW5~Q+So_V(T*V>e#Bz5M?-u0W`4!D+VX&8MG~7!z zH<@Jud2d$NF`b%df8aN0R;t>aQf+Ax=jjC*OEhv339wXRgKY%5b;SYCX{J7^)<=9C z3l5UjjHjshvvjldiz>)&ahdWUZmX({i}^KAqsyrZ7H&lZifmJYlVDu4Y8E=mGvENZ3&$)6FK8>NYk0 z=9stLi<@jMH_3i%hj`fxv6fBDr`NNiPu7A(kMS9a*nAK&6>{LXUi zyiJz5c5>d}X@sGtG0)t1Ex~?Cyp)jfF>zdHg=d%-UB6n|wcyPo)7{ni&TNmd)!ECX zoyELjXg*4ib`kZexqF{FB2Q$%sqT2vH#}y z6w#0S)s)OAxB90$&qH2!K1+&<`oNLpxh_#~EMU0t^;sH;Y?#KgoK_O>sAyWe`<4S@ zE&%#1wRs)q<%45oD9E)*pGu&#N*>`!X*_>31M{?rO-XXD#E&y#4O@V0V9TcCvGH`ugAurDS$n zYKD$kfF2H_)AUrT*ti^qiNMe~nm@qtEKOu^G^~m*RA-s^YJkWJ7)S}(n_?vNH@Uu!#3&fd@hCFBF{*Mfo-bq|@;>M=b0J08QEOdG%~IRx%RfO~iK}UH z35b<{YD;8%I_~2?!R>+_@X$F-0du}y2p#A{ublJdb!Wf(xjv{Jrk)?v2>cR`jScy? z9bJ$5@~3xx0sREke)_z9G?#(S*ru?b7T!Lukz|}xqQ!ahl$1);sC2{u{?-up3Wdu) zi_YQ^g$AR66SX|E!C_TonV|Kk(ky1hZ_r8NwycJ0+I(0j|GRZS^g1MKeTat68LlPn zfdt{5+Y?d>hIh{3=k39OXRi}9)AjS<)||Hw^2MTF4dSd-)G>OHJS6IMjj6_agm%Xi zqsZs*^dnjdQ*Z9$xn1uEpAF$D^Vt}lp7?A6f4W_tP4REXXEXTwPoE8-&j6qC20^@ZyBwVAhBN^Twj9>fqL1{ejR78_|2Orp9GV(`3-NSdK*mJ`X|eim#4wF zjep>G(Hy=qPk8#@`eHq?Vaj16CvacKUt$pqEI9C(rY3mqymuE9nje&j0=CsGnc`Um z`2%R=3Pfi06yCyPU{UmfN&ABHDi-6!ee*d=h5Lp!0_PR*6l2<0xDb}9OPyd@_wuzE zw<0m5rRe+lBuzfk5iC3rL`ToP)@~$3lCR-nSc}$%Q`i#MBKY5|!MVpaCf)fW!kegm)~JAw+IF_ zjF8c@{W*j0)!KemQ`FV zVXV&H({ha9&tthbpWx!G#|-K{9vxaiLo@sZ_A!C2XbRF^=ylk<{W_ZY9-Y&L;dNL9 zG!6p#$d|RasufE?H~xxZt^yttOq}1sK!aBCxy9t1ImF0hsgl54Q&hHGz~!5|66i`5 zZNR4aEsc*%FUcq!;!=}`}j=lhTa>aYLFrHZ2jwus{K!;za7jKJR3|uKa zk1xXfJl^CNT0Tgf^exp>_40hAj5vfJAxZ;rj^~!R7ZEn_wVk-d98d&4cgfR2CN!e{ zCMTP7Yg3@pOiN2g(NT|wLa%kc-RUDln`j@g(!Cf{P{&E@!mOMCUPp$Mn#eI^dfVZa zz(|n7*Wni6Peb7*ZLv%^6Y8Mj=2xkF=T3$c2P6xjeG%j^Hf#3yX6^?CTp(o0k1-N+ z?q*Xd8ie0aa@SEiXI6n5S>UTvU|HQsR?S;EwZnjo@UR}p?RL6=OGBfon4DTwwzH@`DZjqHetn$E96J)v~wX zl)T9~H(kghCIH-8Aum7^lk^R2|CE1($9E3+Usq@Ws)FRsN3uROcjLC1lm7rsxi|8~ z8>f?#mBCc)@}ec|ge(=h|1VC{ht@v$;HIf9pGJ|>E9V@w-smIT06_JlC&jwU6Y*z3 z1-8o&h)1>|wPoGN06&J@YLQo3JSqU7T>{0{Iv6nE*WEZilxotJ%G?)}G9o;`aE=XE z7{F(T0ayox&+vfunKZk-_RcSS_n5F*Jx($yK))=X`(<+ZtUrFJ`FN~99@TuTv29>c zoDanjg;s<2;&X zu-vL2x%s%R%Xv<=j^Eten*CoXvs)hGo}n}6Vzi_Sz3JBBY`oiDH9hi_*f{mzw( zK!LKg#Zc|I_O5RiC>@b6T6+5QX?LUB`R5P+eBAx%(c`-x9zE(ldi3P+Kf4>bdph2b z@OoFCv?@y(np1S{C)^TYE^XCmmP&T?tFAhbqdVwXdLmM{)(|^)@|>SoS0~2)H+=l) z=f^+)_|Hc_KlumBCr^v#o}YhjeP&R&a1`S?x`jDShEXalsblHW$$yHzpipfJa13hE zFp09sZZg7J`X|hF?8avcD_HogIL{5YD@E5)KkS2m7e^RO2fsS(t;}5aL2Pa^svL4B zyBt-rb5b&Cbj)p|BM*P*{sWZBHs(!2Aa`)|cO45Eyppj%CYyqJI1vQij!*$b#lb6X zrj!c8^qs#J7xs7i^ZHkLtPzF1nKDowWc$YIi5`Wz_siPkVNwRkY}WL7bMsKJVpVJ$ z;$RK|M?O0d{*Ex#EqRm=>X@c>q3AB!W905x2p4KIIZDJ9Stzr(5GJyRG zdLSC9Q8j1k=#x1`(VQ&RVeR;A5lfD+gEWret z7T0t)YiRP4a|Cmi%btw+oR_n6ATLAQ>VBVge074tf`!gctaSq;zsyDaan29+=!nAF z&&7vPGNhsJPw5y1MRL2ZOx;B_=?Crhm63Bd(+2>J<$+SV-*=eyqrljKja<{TtwqY% z5a*M%2si@Jp#Xtv4OO#tt0o;tp^q8mY@YE~WyP?p+zoSAyDRC0ZsGAm3QrzVcxtie z*ST#ZF_pPp6Vts;<5?Zi%T%`*!on-5`@&p*vWVU4tEo+03r`ht>;N{Ku=Ye$EQZth zh*SDA#?51WVU;EgoxmtT%TSQ;PaJDS8z|*iExa7Pss>TYkEn+SG8dlPT}N)ZP)UKS zVtlD1V&Y-AU-W6!p(6Jv87W!AJgFk$S`xgN4Pv68WAuuj<}Dq|)<1y(m#10;hjkp zP7}(aaE`OCb8XF^3CHz=4zPK%y$ACyO`69R9RmJjxFOU4g(Tp#v%&( z`8ya2scm?kNkUeTOMOP@66=t)%1MB16NkG_@t}~4C(9O6S$Od}F1(G6^>ss7v08cY zgBGxAr?h_i2_5^1mn~vkcq%)sl&T7gOapQgmPwXdEMa`5mr(>t2s#~8=siLc4-5v= z>@O@h>K3&PNNG`1mi}f#5h^ylo<`5yTHuMZz!O^F8L$Akz=vUm={3girz>q@dPHM3 zWQ8hv0I;R~VSpnW127n^!s2osqk=%+LhtP;do5klcCxG*eA2Mf_MBqDJ&OzyWGr6nt^5CuWa$Cc=#5ghrf zqLW;j#qo_Tq>_*_a}#tekv1P7^^s+N6*9nznhfrh6(c)0YauB{K>wSY^No#^N+pyl z<{{$Z10aT(vOum1nncQt6HU}xoltvs%AMUQH(BT9?v#Zw?oLDa)4k}GkuhW$jJ}_e z+5^OZ;%P>^Rsic|y~{2=zbu$uFPB{&A|?=PTxr&^Voy4tR$BN88#+thkurw9!vwUL zkx4Ow7XIo&#sh`{Q*Mo;Mm(Xj5yShOSulceZ(@!r6CsMkZ;OC6ec3T1tZtec!^CX7dzc4Sv1wEkzGFFTuu4cTG+6_q- zX^2N&hY4UiulP_(F-MesE}T)OuRIie^qdD@yo%!_51>tw8k!HLDmx}wX?(pw>6CuO zvVsp?`-7r=Osz(&K)N6Rup3|tGDc`)=Nd~`>!8_No zWjen-t(hjCZDLZ^`Q2T%%>j!v<6_DJ#>(B3T*m1sU#9tC`_>vPH3>l$iTvX}%p9yAW5MwJCLvib+Q5 z9&{$WpjkJcW21e;vTAH>Jo<*QelqAO%4nJlaW$ zHwz3;Ph9nX85pcYLf80dX|RHZCce9y|JNg*@`Y#`V#>~hr2k)!fSn75OMoLEmp`@1 zN!pS`IWZ>ADy%6`X^u>S9;MTD2-Moy}@$328!;4#TWa@@j_(9V)H zZ?vVH|8T(s{DV0c&mUcE3HWDGWK>A|E+Uy7VA?1_PXIdE$4O6y|psq({jLLBSO(VE>&gp?-itYAH&ZJwjmlv6JqEp zI|I_RJR|{%H3%21>0+a)723?@9CJ(_5XQ}DlY?8(aWq&(*Sx+Mjva5-o2w8e$*8om zM_vWf+zH`p;a6n)T{jU3S_=9+aD29ohtK4OL=T^IHls|oJUH(B6M+yuZ~AI&M-yZOcC^LKR65 z+Pi;VidaQZPmrH)P2&%0hI-f{t^vQsIsG=jFG?Ac3I#7@9?bP?DVgKDrW6WBETcnf9RiH+Jn`+}f0}Q5PO) zhmlavSso2Ppa_&ENxrdxNwnneQVK4MwCO+uDx936Fr5TkMX_7NN&w0NMz;qYHWqqx4RhN#+4{8n^f{G5v>9V0Y9@2}p zhdol3x3@#3fR6!`=%QyVA>)k=^w5y^^)AfV{2XMei*Rg!QMi)922QdsiwLZ{Asn#A z60RQETnH2a6A7@)0f?}>A^M#9(}yp#z=+uzVxnN$Hj>S*)4Aa0c)Q71a(%&dK1;3exT8Tc5jB6CkvP<+FMZW!6!U3c9s zx56duX~_Go5x{UL^s?9cIf+$?z{D5$mU^oW5le{%V;pMc6eqLLn|->G-WJvcET~EX zH^=QsAW&|bio;v&NHOZ2DlLY&2@!9A1@uJ=ynzu=r|wr`tysW50|fj*W~^xW6?b{u zpF)G=M$9n$fQ>_dYpA`Rntq^%A@nd->|7^;q zAG$w2dGgO6pRhdietPoL&p-e0_{q;3xxeW_fkzwW6~>k4^zyO4@#x8;A0I#I{s6T$ zv7w*T-|mmB`{=)nW^oiIaWlU;CIxfIh8(p3k-e|w(wt}k z6k7nLS~tdxAf+8(t|HJuw(waD`v5>P-%Jc7v71%S%8uo`H}zBx5RerWQ@54;@gf{Z z?}Ahz9P0?^wqAtyU$gXSXJaGX9*h2fdmUipu#rk78iq6Fo+xZwcy40}JD_E7iYX(~ zT6M*Z5;BY1camdHc#XdDi=(ehxuvf-2Q9VW%AIU)(%531{dX9sJoKGPt{bb53nyWU zp$S1UN4Bw{`VDCD(@zu_pCGLgP_ZU7Mqjh^2;x_0yIMH=7)RXp1C>JLv zw_C#ic${N1%k2xg$#JL6^&qx{79hZ86d>`_rzx-)Z%)7bO=GATOOVE8kaQprfEH;( zexz*puqiyVWaNnMZNu>YAq-+%8bm^a7zaZb1ST#)l$|FREZqX?iZ{JvdppH@kru|? zkfiZdj4PE+yv?E^UP>N?2V7<(g131TPmSnis|8a~zNSukfPp2JkfTn?U#=qbs!)U? zb)t3)xV?rYq~97AP>mwh6)==YiTEl0Lcl;yi7d@2p(hgk=k(LkoFXS}prOOxQFHno z)-0~V4y;0ZReaLhBqh1R=oE~V5RMOv*u+z_rHk#3zse!0HJD3*5wv_6bGkTJD~?X3)^N+FekYm5pXo z%uVSBAi?ueDo5qhhOW+X_ytrQMY0kQDtbx54(d#$^@mS&B-<(V;rj40kv@K5JCT3t)=k=P80}U!%aXE zn{0-F_F->={^(7hyafNr@Si#SQ*=F59DRm=Gru=`N)=(EmUrv+NBA5V<}(Us+tWT# zN``{o?CG?xnxaa<0C6(d*nkhXJm(u51E+l;5?lpij8@W+ehSCzCLH!|ovi?r)p7gKrMQj+}!~_B;n(%j+ImXDvS^mgdECU z0fo-gvo9}lxxy&R&CtUc@&9oJ$lj8DtJyfex>%s4;AtX-hcX;P7Hv&n08j=1aLVWr z4%v)~5TR@#jle%k?P=Lo#LOBABb!Z!nPJr7(3suEW(ydtwgp5K_%&uDJ8?~;ZGp*~ zFNK}>RH=&sMVttvZs5>TqIfDVzKE0!{}X(HT|R;rs~H`l!szg{$ORP^k~UtHRb!7h za8yAQ?mI!g)g?-V$+gVdm;62t#u;+uV=i46`0$@{T^!q>DHqDMo2G{^H+5gyxx>mv z@4iH6fcZNI=(8X*_%zOzo53xox}AI;rMH(N1c*>UXDHd(0^E+PT{0CR0o_WrkKH26 zS2^qq-^Z|N66~ajnjBgMXYb7=m4ztI>)((5A)}-EKzQ@2ZOGc0iy$d!{-b2|VeCX? zHF{FfiSMh^F!}(#Ew@qf!~%&nLakDuQhF&2TbVd8v1&*b78Uo>S8+SRoQNb+yQ{C_ zdXSwenHcLJ@**FNsKu?bAe~KXPTT{|c%G5;G z$)0}jSw`?$!3Os(y%St|yK3p-Lwhc=Nj%PXN(rTQ>$K+gj@JD3p0)B@y<2F)qtUmy zg-)#H@hdKmUq$$pyKbSwdr|NKQSh2O{?iYuFrm>3OvqwE(P-qA8PMxGtp4F(^-o^9 zg1bs2+#wQ9p+h7L<1^Y}(EuS=EG7HBp5-@`!)gEpK5!@M;K)hP?@r)%q7p_{usESv zoUkU6+mTWqtm(>A^mnA;k>qCfjJ>^g#=hW;y--B^0d(K z7YlU)Q76(6x;rcF0q<-Gn00(EAr_X{33Jop%$3a5i|56i@3x06MUMuSgB=2|qEjLF zrL1DVpp1q`Mdc86ge5Lvys=fTa>_C`$6qP~=sQZ<6y^)**+x{n%`vzP*k#(7v@=aD zZelwTQ#~wozP0^hWn`JVq<06@@F8RO)aitApomE>Ie0$*tLz?^>AsKOMC! zhd(d!J99&kuhew{hOaw`mkZ~6YA-MxQ*4zO__n*rGc86US3D)s#NyaYVdPhFBA#{n z7h^eYN)nR_c~_ny6}+qod}HIi7t1pQsPf<4;Uh+JV3gU$hN(r7YqBK?c`47UZ@*Hb zsLhCDMNJ_Vo$xD_twVDG5Houy(DE=*!Qt!ZDdBZt!CV^{`|J83d=U57-y_)+XJ-8X z-dNA9NKk{pfXu!vZLVnp4d+&f3b(>htIX{gcetA=jVOa9K(>{F@^e00i`Gu?y41DH zo3&1h99egF9ac*H)BV1K7tLD+m99+n8eQT=ZH#YIvLnn?TZHkXMFK{7jfVchXFA%4 z#%CpzrJq9{Pd$%s<^K0#tLtxerT^7bkoJGW=Hs*%%P3I$LOO0|YcC<`rHdq0mQ3{o zp-h)*=i{()+yW{BI|XhXa7nQTrM;vA+>6Nk6yJTK-Y%%`a}jYDl7Eg^nz3VC(({ za!cYV5@(rgm2|tQd>xOGVcI5YZtW(qXEk5Az+5#D!zsG~hE}>km8sAnu6haM3Npu6 zrGpZ=DKqDou%Ql%ojlc|&r4D5DQ3z_H|M}{D6bUlcK%(b9N-SpLR}%dInx*wa+{D1 z=nsWE8qaOm#*&g&%)>oog+Dz0;nC0CpMH4q17-rmSKHg&CwFKb-s(PKkALj`^!Ulo zoqt+ie^6h4U{CO^$2WiY>Bq;9ety*b`NzAC|G&8^`oCDL`y+ew=<$y~J$m${XheSb zf&K94#~&a6^z+Z1pYaQ34pVh(cYkRX|Cet*`tix*$3Hyz=Z`;cdinPDkIKi7!zV|D zP}x|d(m33{Wgs1G`te<>)p=b+x^q<8h@*s{=$8HD4K=+ z1Vf<1Qde}#aZ|D}4GJbfvFe>41Fx^IvH)_}MRM3}C*ztjyEd0%yDlvJV`HnkD}4Ra(5t+Pd`u!tm5qKL!yTGTwiIy>4L)As&>K_yY4Tgy1Dn2?fUGigIsM8Tr$HaSnH&IhEJRsK5?2Z z5_LB=e)1P4`WzDR9yv~T|(y}BId9jF^3Lf4ojq;FQ@)E!|!k5mt>AG zZ^RIxL&GFbh&g_)FtF48Ux|73EKyLzKna%F|Nf=Q*%5iW*}hp)2(=O6Qg=4#WLXdPxjSkf3AXK`_ham zzGW80^PCWEx94P0DqUcsYGD~mphkn4)5HVkN;YcFv7waDR!FPOt+d)Wml0+L6HD@G z*TT4T78PWv4OxYzmK|f8hXsupa@yQ{8k=dJ!!*z3v~Ne!N1I@@XDTicTlvz*r)2vEHL?Xd6Xx4q?b%Bnw6&#JqgF&meL?iQ{iu?_~eA(2Wpw0crjzFDz@`M#R!eO$r9QW-k zUs*Vk=U=b%{cdj6rF%40lzV-t8WCo*aHy*4QeL@wL+adI?&drkNIwJW13jl%m2DUk z2rPv`0icr#6q$7~t-1>fdT^TfCy?qaH}Z5NEa@^>LG!H= zwz#+rSie5-U7hM#1fB?a|3nVY53EFmu~j%`7)UJwK?nR1eSQPb74gSdf)zY|GvrPD zwwj6{bzr_HRjep&v@(rHKcEt z@^owZ>nxq{y6mjzMxp(3L6bGiA1bRhVg5e3Ml6$S(n79bTCy4E?9gZ9hw&o^pW}z& z^ILGq4JOBb4<`Q#77YeVn4Hk2FtGvDW}oFOT5+X?Tla6oBuQMiU+H30DO-N>EKcgB zecHdgt{-rDpOJj-;B)5!kuR}7`8Q+VPC~m}I8#Rstqf8$z*NispR5#PB((KYJtRy$ zW1cai77iINU0sw{s%;9)nm&x1K1`ZE{Fwu_yv^C~K6{&gqg4y!ox*(i_5p$jhR61c zpAso1D<0-k;-v<&rUu_z+j6zefmi~DJQ;d`U+lA?mY1&Fq6`kK<4Xk?Q&FxZ9U2ZO zjeu04n2HJ*vV2&+`&M7BgD!4u%QL5E)lTX5cb;D;wpP=A33u3opv*bw!&lLdY6&D# z;$R=7gUm|PuTmYz;z3&Kh|UAlP@3ZdCPE3^a1)jEMP}M%1trPgbaSP#74|4!*&)}2 z4@!360!3$_>*O~zNPSM;GM85CU+pEPg?Y}6t?FV?3n-o+UxL4stJo6%9vtd(=--G(Itt%_OKkc-k5BBi zZ~a~!ub9fMj(uEm@3ZDSeqE(!H}wqAs>o}qI)RckXp$#hYZ9Yl;51Z^vK_h7Jj^OE z7=VgCPx&z}-csP0WJ#s&P0P)@kU79*F$cRBnIfaouF10A+_K$D1ute`&Gi+JDb>8s zTZ8ca(!7^_i;5sq{#e`W5&;*ba+o}lLX@;cvVH{&3p-&$I)&O9!t^qRXImVb@5o&X1 z<`?h>_^mf@_GX!UQ_hHDXMR#A@Qryi*`8~E(R<9%d7fNgh6odYh0k5tqfdJXdGKG67ho;aI~m!P8Oe@4bYL&nE;%ZvvpHy!P-FrP^7aK6dfA<~$hM z>N}kX!4yB<@a}GXM)^813DQs|?-(0PCtAv9(A5x6)Tt}?!guD(Fr~PWsf_iJI-p!l zOFG7M6b}01Aoj*Zvi<(Bk7rM(TiyOh9ncs7u%Yun`G$g#Jjo=J53zv~A#{4KkrD`W zvL!r(wP0WFpY&2}A0^$dQS_gzpv?0Y7V$h_o^I&^27*7P44u`9}MwEwWXhRCbgdvaK za3hnxkMYJv?53`Zn|drq-Gv%fo>c@X|p^XnR&B zH|%truemop@BZ(kSaR}FRe;X!SF6)H}o8FZ^|ZY00b2bs(Yj}%3!#C4zSr>=HLB0=}%IYra(zO<8X-SqVTj8OzpUa z?0}la_0%-6(?ggVia06ZA5nnhRd_6Py0yio+s{RDx*O?h2ox5nlUvixO~oqf=wT2> zm{TW$d7fDu%d;{JPVGq^Sd&b7rlvr~3-?ay$rmxI5Bmz^B zNs9vJjR=5tsz|obg4Hn{hrvsA&dveG3t#1-uqhA7IQG?NRFWJ~OiSb+>s~GkQ!#W4 zB0Hw*DH1%T7)+GvU?M?*9%+zXI4*PydHqt?=eq|3BDrca7$#qx282?RZEPfMJ6@m! zT!|`{2Ds(cJdpwWmz?eU>=(NMG{A->1FhpFEb^c-ZStkOr#;a#$DGlS3xfroh#6f)x=!ru)PnG5#!+?%6%H%vqxi#cCd-}H~R%;sv} zQ9%6ci(v0C4*UDZ>?8es#GcFN9&EduJ@eU^*T)y)v^XJ#WB!d+XS{p82&QzJshXYX zIGG6nWI5fTm2X=IOfa3CjLa(135oDZ8{-PI66^vh`$Ud8G>Rn5E)0#9>Q9b+&#BXF zSGJ?S>m54GBk=x$tRD7YzB!w3p99xn#uSVB6iPi63(3tv)a6TMb6(P3NNat(FDe#xL#83?C=aJE$)Mcvi$ zIs?YJs2M{Ap3*2PLufLk?>C#$tM$LZ1iat8)RtMO_m^9!>)ZJY;1w3?G6%twDs}9j zpqIQ-3s-ux6VxXBO!;%<%GPZTWiGcdMTwMKzsJwo!2lVquPVGR?9uXRhnURIM6L?D zOl8s3`3m<|U{)Lp5KuG|&-W>1AYD^IVU?8&D&k6q-)!a_=-?Zj%*|nlHam2TpoSN& zW)GDZiZk2`!-@1n|57o39v+;YN&Dw3*rlxj_Ff50Wr+;+m9&4pGWO3`LOD*~s2}*o zxG-P2)=~W%%P8spjs8`a1f8*OZnbcpsyorY&-2`nDJHtkX?js8f{EL6&dKln6478K{2K1YQnImQS9H{t&C<$IJF9* zO{LgDY*L3A%wR-i1ZGmgkdRCM z?+PA3a8!0eX7z5r@+s$735Z5%f5#C)E?1NGi%Jwl;?!Ef^@xM8U9akpjvR{pq15z4 zqr9lSrSWofYNPB;Z0NPgBWm?EPLu2X;`CxETC~z`)8?&mi4#9cetI`&>M~IC7u%4BSn30 zRSvQDtsLSMO$mjjzPCDaz+7LXrdYZ=W=PGqwq%A>Gzk@#cdE>ov|pjuw1LuNngt0Rt`<+J<`%ZH_H{6J#vs{%iqx^_Y{@Rtu5aic1J~%AtnN` z=+#F@Se#B180AqD57D;2%8S2iP_r|gRu>rMdbe`P*tjUJ6YG^w;$Wa>UCO5d_G>e7 zaSU%Z=+L-WXcqn-K|`%xFZ-jNyIZbNqu1ND5U&ksIcnP}&q28@m7&kAyBvaKwh{n; z>jq5o;m*J+lX5~^^4@)lFggrLkSq*;6}~URp=V{O!9aJ^g^L%C1Is4uXXW0D8|0XC zo-VeGb;j2!DPACJOVmxH_pj#IMqBbgGN$X+U8Ma5jrS|B1ojXY`}V+|y$1>>mBV}m z*RYPnIOaQZl97-fqqw3^f28&y(^#EGwY;Kxe8odA_ra8q%upCms{F6+0AX639(9s` zrRpRlvkWQj9m9JlOwgtr?n-gsef2c{+0O1OX*2jug!WK-zX?p_iG=jqy~_A+jmr3M zOO^58nw4<^_*ax)4mo@2v%^*87buAGBc42JVw4^x3Px|Byyctfd~2eIyikXnR+b)U zL0MCuuXAceqfuS0KeeJ@YG-t;Z@p82zFFI-HlmW>=9Na8Sben#r7@Kom8z1UrLAAL6pXH#tmX=sB*TCdusZ@9>+{cf%`F)DVsSwiJzCsnisW z{kMf;OS1UJcFq%^Q)>Ilyc7qj%r7#r_Q-@OlXTwjI%)>*meT%;>5c zqx46np$&E~O=+J?Q@zi@FXL}FZ%h7mcrRr|?I$;HXb*g2?}7S@>u=X@X*adK?amjc zHT}XVQT5fs*HQ!lys1P7n0KY%@ujE@5J<9)|Zw z=qOi<_jeNyBKM3K<>;5hyk34I^Wrle<%)Z$--a8JAsJYadL|cTYb}qjc}DE%@2A@_q?{rd3>IYJGunG;Qnj<>5YikH<4_RhDe~a-7II#qKLTtGI66vN)F#))g7> z>g`H+TLs-wfzIm%vy)K=b*VHyuMJg77cBhpG-%F|zV!0Ejg8uL71(57{=uUJBzemR z+1>HczoEn9qrU!8)2UAU-GGiv*$+MG0-<{VYl^;A^Jm{INX2E2$or=Hwj5}&%2XEd zJ2e1Z@+N?c6{c<&+>_L%xIsZ)fgy_enun{^Y)16hqPzN1r*```B|{%K?zdvhfuWvU zB_hMUEgF8P>0ob#F<@kLP1W%#!>27ZXu9A4Gzr`j3lmjPyBn6GAU1iB7dxzz1JX5k z0h!Er>bL()V&S#e8tDkFP1r<-i5N!Cpze2~?W$$5Z`3dMKA+A2c#sQwkEWNPCC`N}ML)7(H z$C|B}DrX$flJsrWx8ckeD?yLBqUbt0*jFicJ5aAfUZvW_t+IK)1&bnRv6eEzv|4N> zLhx@zALlyYn;{bO7Bn4pU-X69Nji%=?O2*H<9jDfIk_uGEd$9vO))P$?mZ8VftA;#Nv*HJ?P%;PM%T`LyM|1PTMlJ2$~Txg{zp~12CEuRRxV%6u8NZUa>Sli)+O?#+B(vPD_zik zm{V2ga;)QVx&y~qNjt$RRB=tA+4CHiT(C6sPo3(EvwgI&*OV<5f!QdWZ6jE(VaI07 z9m*Anc_ixbn0R^LS@k*o+#Z1(KAU2th}qp^eLCB%BY&)0g7OX&DrURObUHqiC1Yd zpEXhbjYIj9s998!R>vs?3{C}=JrK)Et9+xne4L%mFU!}fnh2;`T}g{?{XD?XUS{#W zy41yP1d8l&hSd3>J{6dzPxD4oh;&J>q89#ESIQL^7YqrC zG|lpv6>|awW3jZYK3%352qDYf+bEXjSe{x>`F*o{wbI2mHcI_U0-CIfECYd`_d81f)fGrWoTY25BTyzOkWxv_C_4?vvNjmk%i& zVGZVN?UHk`HsZ6CL+^aV*5;T_Mi)d8axF=V7bNWgL9d@ob4YFwHf! zk$eThQ_yJFuh+LRBg=W`qL9z3ZQQT^LLH_2!UlFcZe%OE>{6@9R045NGYZt@O~FRF zU$(I<-{Asw~dBLS450HwDI1)4Wx z|5U^9pC}Dy7XOLT^G}lhM27$9Oj?o4faEIEZygR)OCY6tjJdzr3XskPxmbao2j~r0 z*#zB{RQ*8HQ&+DA;^hxs4Sie;}V=P^_5fDl*(YMi>^D%JJm?l)um;7 zs2^Y&=zfc7KvtU7)RIUmTUW?`Z{3rA$5}_7ArN%w`MTXBy* zDsQTIsA@@*(X1`nxwy7F>R?83srTJo)g-d9kv}c$BRsfAnWS(5Q(I6HPN@=#;SqffkQH#x^*7c~^)(`DVpp+$2~_ueu( zsLtDJ<~-~6EUr-M33VKn{`|unpI{n1agS1l)Unn5MumZhgYN&Md#^C1=uM$C-5c?ZFQ~=^7_x%MV~cYWD6Ew5*_EFZvql>DF$^;#F-r`DwpVt#$e zQ@7&NtuFlgU&!?->tJ|9h1#!oejCu8=nHu$__=D(nnd)a^yGO>H@>InQHm>8k9T*i za|!>NtaZ^sUQfh?O_5d>(!cuY?yja`-3XPi+9(V|>#EQ1+us*B(=XQ!ME(=i?PITc zaN%kpgC1?yt^RFAzXFnGUlK?;~Udwo5}<~ZIqIjTEV zWw!Bpd1D<0Cbl0Lq2liDc43`I#+0jq!f=YC;vCaEB>JXHbXj38+Ig7hoDmU-|Izlm z7wJT;S(spU>>N`s#qf`|b`t2rX(DQmffh(Y9%TrH7?u)7{6G&KZ_UgxI0KOp4JTop zH;FR-Vya37X#f&C?2Hr-30qG>Hwd{|f(xgGc3{cZ=)Usi@`m8v<|YhxV*`XEc{6iv z^0-kNRV))b_{x1d|Fu;;h6XMe{%bX2V`~YNhR`8uJu zyK)mK03tAX@;t%=95*%K)a1ooPK}^7%J~((y0}+RR`3*W+2!ZOrP83%c(J*n<{Z7N zW@Anfv_hu9bg_Vs!2lhx1#Utsi!b8~mkA@W)NxYcoEUVUy-r5+DM($XaV6B z>^HV54bM%Pi?-fe;5 zp(G`L9VZz3^)rD*75W9pmaulDBm<%z5dS#7nw#g(X`HLyc)0tVUtmTVhjR2`DbEQ? z2i&q5sk8<=C>Xa0h8Ccjt^{anY{565HQ_!*#*KV`QRba)ZhFe*X|Wp2 zx|h;BD1^KQR3St5u_pU}`fL(n;(a!Sr=NT_gC#KqNgtlNT@a)3FF^MR{yy>94XqS* zif=(XziL2YMF!AO9HG%??Ho~{c=T@`M z1~iDXy*QiU2b6w6B-D{IxE0+3jRY-@^aZ`Oq<5r7@0+!C8Lu)Jts|#&9VUj)IG=lN z>J|$LDHE`hxgeYY@2vwv-Dl8YpNKvCD%rgOiuQNeltOB?m6E}=?siAI*(GP7Jzr=; z)C|*3=t=Ra(?(h@P)=HUorKb+dgCC#o$=Uqu87h{eKu0}{p?1XDn+>?yz5kreJ+-c zzA4FC`Os=nOx6G7W` zhgw%^zXo4rlr&9;!N*9E{!(;Q77u-)1IEWQS-L{=EgI6X&}-|!{A&67B#OKA6cQR% zC9{yDzpPzHH*2_yU2?(|AFX{x^AI3Ok83T?a0dqFeFe)e(^#vt-&sgMTX_l2+PbB> zb&Z&m{wR#ZUJicI!C(L|qwOCgzgPg==6!_~nR&XbpCn(_q_3xV@CT1&>%5}$c3Jprc4q$)w64C&riL4I(tPvljDJ->H%b?3MQ}j5SMnnG44y{VH z{h9V*WrFe-f341j5kT-{x++v{t7vJOL?e2&DwL+eLot%^yarlnRmH*UP#qW0UKIv) zhO#0N?Fi%FZHj(?WB5ZT27K`l;5#8JMhSZE7D?UDy=tW}DbcD+RC8Cl zk~&GErLT;>Wjhh($Mr z{mJ*PF!Yaq!F?nP?UKvw3I8YRcWevK=HwQPC?V6O54xh8*-2nl^}L{ajF$u%;hQw> zgmgz2nN`)`mezEPrbZ&bnvEvbhuWd&UX(}AVljd_%P2l$m|V{i0YdR!JbLX$g4^s< z%U5&p8K?ZY$Us$K7AERDD9|G?Y(r(j*IWr+I=Oi1-V)lmQj`&5^2z}QoPOoyb&0>Q zfqxI8%3E<=hTpyCt2zd4sPJ?5wYnV1BMswQsP&snk)^ww54~H-(E?B|Efy2-gCpybU+@TA%;*wtg=&m?IH8e{RkBs1K}jeo?XO*R7O)^Iyp$5Fy z4n3@dnxNeGZD5WPVT_+roL0KsUd3qYqY?Yt0EGG0O*O!pCsI$eY_X{2s4OR*nW)-~ zf$|C_%6C(gClPW<@zgGE%SQE;Fe#;Qdw|k3+WIP&o5F@q4Tej@dL55 zaA1h6i$d&6Z)<6Fhw7l^wT?>vrPa%S!7PfBE=&5pSo_ypxAm{JNLd2W&fPMhKvL?G zGlybWUL&`Xy`=$Lup#Z(!jJ|^s+4lD%=9ALt4fpd?p+eML8hmuceKuU!n9o+{61Vc^UbXg=nEI_Op|=9i6W=mi zO#B7qEAr+bS+Z!IK=&~3Gp><2?qRIHH9FXX0gVfkmnCKDm74hS(OHS{!p{%BLXl?W5O(m9!Mxv9bBp?wLIxq%*=;*0A+52() zF;E{9a?_6~s%C*p;d5Cr6NUG6C7vfu*$?D-Qt^r(%Jqc9W`^#uN!|lYezgsUoLpKs zA-g)6qyC`p-BybhPc0F;1n@EVEbCx|u@%2t^fW0Q&6VWhfbG|%#&(Jux}eQxT_CnyI{?C{ zdS741yQOMLx%4je`|8y`o(J_wa|$pzGPT&%GD=BnDMeMB%3yqF$xT<5E>sRKInEfD zR;r)Ol7S7Hq}bKzUnP4)J`ki0`JY#()V|dqCON?@AttY1g*v6gWl%A*!j~NRqPH@3 zN)iJ)7)?4^71&T`l_KY>3QVFFQlIWpmeh1Y=Ec}u0Lfog6zsDPXY=JdFyle(?dVhd7gX64E$WT)7Yoe~O& zNiRa0eJk?iQ$-7MMV^`+w5WVzS1w+k+LVFEUYr3E&~zwY@*z|0%C08cAleY-4)~s9 zi?%7(bV2DkR5W^8IlgS4u6HF-y#fFtRPbyN^y z@*cO;c6-~*T(kohsEUBvI%+i<%vmwMAYRyWzrXq<>zEyTvJYGt+DO|5o3*>#X4jsW z%awO;_%QIpxh<_}@2#*SVfZ3Z`>>g%nk%2ONTESUBmzjBz{C zA{;Vac;Le^<0apJIH|l+5fb5)zF@BH83xxXCK?VHFIYu5(uFLSNBD`B+p!FH`W&X- zvCq!n>1WVf;pxn0dorMDSH(AdRq;+IGQjE3)iY#_y|G_PK53gU@y((pf>14b?@6p;tP+JB+ghq)lYe6rF^poW z!{23Ckb0w!8Nkc)++4|c(GXJXl&Oy+&Wl5W#kIgCTP85WyE~7Elj_Eo)qIF+zG34n-SJ<47Il%NjY*>ilCC0A5m;I5)8egSp6l?XdPMVuWSvC zRCvUlgZdzbH-)IZ_NqpjR5wj|kqoZ0_E!BxxOOxZo?C^z0+-L;;nH=jcGMaN)*5O&MZ8`V$jj#eRber zx3&kiTk^nmEe~v$>0G}kw0@JvbS(F;3G7%ZK=&~Q=*pdHP@Cv=;rdr^wO$g$%oh5k zmCT{>AY!)g7Yv!wFF=yAtad^6AM_wvY$$Wt(7JlH5+AY-KHL0(IChTue)V-B6Go-* z3zAU3>Bxe@pgOQX#-cEhX+`8jM`0?R5%tFrzKMoX*>oJzh6K_wi0{sph?HvWOzP3v z{sOv&vdLRi_qA-!u*y^{4c5163}%1{9f5<{!QEl3q6wM@)Nu#YsSK#IbU>XI2Gm(H zpw6-Zb!b3N^tvGe8j+MWVNjO(0<=y;DTeGzT_LyF2ITXYC&Mf#1B2>1Vs$_Jg$@6?1JHxa7G=baY~Xh79KM zEBhMRjs?c#*e33t#Y|y{pK*xCFvK$+e&*ioyPd;>y`8gzqhAI)Z_i!~&W>O0A4vs- zK2_cx9M!)+JO+Aud!{rMw!`s8bfN&ZN53r%pY6&p#vK6Q{&1W3Y#P(%SCOAz@) z^L%oaeBc5fCP}7rrZ`iw48A5&|F!g$QXWz~2~Is>B7t&b8T>lq?OJq@*SA#0{+v3W zs|Z53BB11}g_4sBN)9DTzOICl6DU=nfQC*;c*rPi025~fYAP|6DS-Xj0{c%1sq)XU7$u)KHd_0i zU~$O=Sa?uMzGrW(LB6QW%^NxFw=2!f3nJH39r+!6z*F+4Imocrig@Q4x1KwgErXZ= z?MC+@?FhiM(897}>g-R)Z`iQz3n7Y)olkncCxrVi68AfA4hGNn&vsu7b`B5iDJXq- zySux8dRq7C`Od+inxx;4b_b`sFZTD|9`5heyc_K99PREO>W>S&yRMj!j}raw{vN9P z!rL`tW3|a%S#u>h?wV@dWz`TT_t()AQdwd&E%;euN z%vWVnY@oJU>MY0)-<|Hf+pkuaZ{6DT&aJ$+f4F~EQ(eDz8&GeHCQ4i5@7Cl!tMHna zayoxsiPt>iDBCp6X*rS;UcRykQq%CXm=*Qi##YT|7awfq6lk1PZT+^R{Ny~pFN<47 zx#CKRN7Ug7EbDYk++iQ zt3IR4q4c!n=T9y|(C}KU^#n6ps20$2SIBNh(KW`=`*=6CX|zZ#aJyjgq;R)GXM{m3 z9<(-9>J8MLcPCMb$tOMGUxY&GWlMVEjb;sgo?k2o@K&e$=!eHoe*EW8KexznB(Fy> z785n>xNy?ppaG#*lladM(`%8;KBigTYGanFmMjfK(RYBckB^BWk{WO7imdDqAcdnzU>J6L z!|h7ik|7=d*9l0x=zMtL8!{N9*q`{RJeQHc9uDGuc0Rrc6ZnUwtaipvZ>}$sY3AR~ z!)4zAZKkUU5Zh#XuA!RXT}8Uv`T68R_Kd%@}*d{}E1fgCo1AL_Q$)&=9DUHvj4V zhW%wrikcbC%XS|ZSOf^hdQg-|Q4~c{Qled~eRt;|gZi!Egwxkyhzgndy^IVp2?Ch!IE4k&;BwQX1mK7F@Bg~6IXPuxYV{Nwkuf_%TInScFiGbz!saM=F-)uv)$wWyiD{`}QuNc=7A z%Af!GEsd1PLTcsDfByY@c)$qhg*|%z=T9@7CHQ|-z!ErE=`s9G!K6nMIEX{)lf9s1 z8;Wj(8p*i1TEiHf%-0Xmn#v^q>|NG^+UQQgeZqcgwFZ6O_Z0?j3*NewwNCU<=#uhm zNhv-PK5P^W*yd8GrabzFzb?bOKb!R=>@PkpErEtg(6%gfTepUboffHX)-r+0XNT0T zYK1UEV)yhCTG`A1lhNc~1r8SO1z0)<2b;Ks46_#fB33h7`mF@ZR4BpD=K;-GHy7a` z1kqI#a+chJ=Et4 zYs*zC%UoURWx%EGVP;gbuK5cIviOQ{>MFDK^$YPB^=^!n!fQ*8$ z6k&uqBv31(R2C47vQK9}(9aA6t6af0aD}+vk`BK|sl#HG0B1Fk3H&oNU zFlQ%pSPwDrRM|a#JZ7v$-+G*to-7LLK+3JV`z^E?wCKyIdkKX&cxG{Xk9k z&>@RVh^#_8UUaWZ$7;3gW;%Eqy=!P+52z~lTlCfl#_k~7Os#^>0pa!g8w?C_{o#fU zTp77!R^RpBjaX$3_*J1tPXN;u7Wcj%dfMF|z3p&`s=O`CMu&QeJ&5tv5-RYB1pQ?E z{b=yh!#qfhv6mW2VUL%}P)ybCVBM9&$+KQ|zJK@gohl&LBVM)0Q|A$*!KUd^(SCBc z&*^V$yiv7&7$}&dI3}qWotvp3ordYjN#uAtz>4tiYv- ztAG*+on9s!gxpQ>^APwl4y%x%xx&bi-+xzm%j5oNUrircE0kKHzCnTh@UeWtuq?g_ zxh5^GWUF+3d?Rj5vsgUvgyM0#)3p)w@Yoc?*6<(`t2fiPy=JN&PioaClOo@%e6-5U_sGZiHmk5hfO)*2w2h*cw2bT><-cREZYf35l; z!UqvC+&xpC~E_h{*cQ*dDu^0}ygn4dzQZq2aEbs_ea<8G|th~pCTi4oThl|#2YsJR>pLE}6*HGOA&%l@eZ3_=#`6EJ2 zS6E4?VL>g>q7mrn_hE8^>W4(s0f?x>SVWzWh`QGz>JYN-C3^gFO+mNhS<(#M(C;j@ zN>C3`+C!yUFoq@38oau!ABkDGE{i*e?}(N4D5|FkllfyS=BAkMT;IUtF&hceIA9W8E}lfGDPy4W1mu6)bRi6j=ZigEA`QUw zV}RpI4#ba(QV!gE^q4*gR-}f$Hoofl~_yvz32DHb)e$ZWDOh&frW~>)W<%FphZI)ryj}`8se1Tr2 zu+qfF4t9ZFAF#dq7Atpn2_Vz9ZFl)?jo;lZZ@tKtkP0MjhqbDDc_A4M^E)l@;6GN* z2urc~Eglc*iI=FlA4>%(jtn2Jfs6n}J*n^(H^5HP$De?BcUJ_mw3->DwYZBQ*~vo% zx8n0WYl&FOUrG0iWb4wskSy@Z#PU@lme)}%bI-kg)~9O-5Tttixt@HMJ+{5E!8bM} z=wcF}RD{3FDT*Oh0yWN~)XuXUbOvLN_XLKJEON*R-OPdN4`JiZVH*)cawPsrL2x_| zJ-R*e1Z|$2HBWkt_R(%@uXoU{??irtjrQSj`>1);O{HdBu0k(Ss{3AcLGnGl28G@# zYIWbMUf(SB(o|k8ix_)I^k~Q~>Jd9l6^T^seXVK_tUlc3`Y@(G3|8vH9h8~?F9zW- zvP~&DO8q2OHOBgV5C#<%@F^?@eSDd;hjt#P^6&p^K(d(f-iwk@?z9WP$+P~9o-TD_ z?~2z|#;kBqjtd9nNe{{-$76J1%JA43i`G)-YZCm>WbQ)!8L;kkg-~wjnjnCpp#dJw z=S2fmxnV_{`(#`LYf$+sOr9Q2lN>l}paJBtpiF8&q0Btj=LpK)amSf?G4;^b%jtO; ziVSh4H8Nwd2V?QOtBFi{!>eV77*=53A(}cUWX?JVk(aue| zN5brOr773;7I|t~7^FsreJaH6Tw~X@u&Wa;UGKLz0Yg(Z+1N!P7GE?LJ2_54&yS86 z^4q@WTrt_7ixJ|n&SrhdC%)mh0Db-%$nKO3jQxVY2BGHxUmjy3q@6%o!-FhV{MMg| zOYr@>W}O>$peIm*0f0EnVMr}H02f(#&UIsYw!Ea0oD-NlR&NfF%kQHV>7d!@_CUV3 zx|fAqd}Pt*f#`Fz60eYve=&*fQCM0SFdigCx=)BC15KsVJe4@U4rnxKFJKs1&PowT zo_*>nwb0vdb-L}7%ic~MeSdZ1(frMn$a!TK<|lVHO6uG0)+fydE~U#FT2#zxZy_|h z*$hdKEs{PFNskwkH1Q1HvEMks!`mGS^gS|Pn}2*jGY@3!tI+eS@0tF?G>|%-cJe6u zV$Rt2YKsWQLW@!M6GrJ1qnuei{F)PayVU2imDu>}N+K_hZrVBBFGhDj=2^GWjXRIOpjl~W5up4y&!UFk$*eKt)GY?E?45# z?NzyTrNJp?+A%ThxrOyb4(l(TTfwVB&_D#Y!mg+*=PPyP;&*msQrwjpb!9z=ejxN_ z5LbB+SG1b!3%srSj2_k^S>jW9C;}m0Vm{AQ@*t55$Sc+XC^#P8wq2)=!`5?Q4Sed0 zsz6bNEqZ*AMF`pr%d`3-zqc*wvJ(hqx~q?n0jX5)(BvgEX}ij6SXDg1%>F!+Ap|Qx z4k4<-9CMhB1wsL|^K*Tm^FX_eUO+pj6AjK8nx8svZhmyM-oS@C@fr1ofpC2odg1l~ zcTu{N=mharVj$wJ#2w-`!J(hR1Zl}T)ifu#Fzz!*pNOIpBYG9l4RE7Hg`OkpB=mS0 z=NRpAXuykF@yIR)0|4fW03-w`hNJL(JpzTWp7ZpvCr)eVOf+jWGO4qe<%}-Z%Opg+ zITYHPA)f<+Wdig?LUe?C3fny4J_|N2C*>$1WhWu!2q83utuLRon&*)=)e?yuyrn1g zTH<#p$W2kRnq-BZO|`k;kI7Z}+&#CnB%G4SYl~u4`V3$>O=SN^kv;d3N11l*_P{~Xwc%( za(NsS&Y_R4*ktl!70LK0bl`;rv5{IBK#n3kJ3n)d|57$NG#LPQ?5XeU#H^3$n#l!+ zogXsh34jpnK)5f09hS59ZNl0o32Pr9gnQwRX~yXD0?n=)8*kpTBcM1M&DQFP3Hch^w<+jM8VF=@jOZJ+)wa47A*888srnA z{8hMr@qe&gjm%yST5K*mLRQn+N9{0hK5KmdM+4(k)B`jk2YN)4fF5W{Eh=GRc|i6!pKV9? zfD#j>b+sv<-g2)FB~e*WXxvR#i=$>}<8C?+Luizlb(3ft0fpKilWv5USw%Aq%ptp{ zShmQIxAP2u28u23Ofep1=Q#ZzlBrbyL-{SVD6(yK^Oa<45unLdBC51G>mb>P>34M~x{} zv(wY{F!qIQu8b-ji<*_3sq^9Wl|7=<<5udPwJN@?jZu!)Zq@hi)mw!Zx7+x?W!h*Je0;0uI!{t>kGge3gWWs`Zu`I#if5+pcn<|8<3Wp^0_Hc9i>` zHB@&0`~tK%J!*A(-R9wOuVD_^l9XLc*{!^?6DSD6xi5$0ihL31I5VKRcg2)DDqwmv zaaX1j9_<6XQ_!7#=S97;168O4=&5?3M$Q)$;D^dRQ0!inoi-ohG&xdQ(LZSKZMWN> zi_FAP7MeC%%}(BYTU@|0+?GJFOtu*RMFJ659(*Fw7+JIJyNy8@nBb$S%nH| zv&uT{G4`z<98(YW)o(FtS_l#m;4q z<0xL1KH1h^<~gPOwUE?>kyloM>2RymgN_{y`sP=)!rhCM6Pj+Fo2KJ-y{J)UD}mO3>1d>jh%KKa;{Jzog{MtHrB?%RifOkg*;{83c^AlWwjG)-G$OV zIIt57ZDaF67K{u_j0C#xS1K`ok;Q9WS%xx%;RGSG4ZAvxhv=~uy5~?obY;j?SgKX_ zd8}1>VXRdOgb)_gl0&HDBTf3D8-~me%U0Yzf*6FBOHfD-K;bHW5|8}$K?I!{=i0QZ zMp#_QBp@C#(>SCEk?mF^72}E$PMV$5gH%fQq<+*nY;`euqMg3eK5E*(Q?dFcRu^Vr zmJfT>smUsxTAPL13a>rFO{6`6mu;m#6+sj@Qb?eHnCj$#CuSHkk?H5>Q%TEb>Nu=f zBf|#Pyo|GGj9|JIxzj0H!g3Q)4?dg`Y&Wu+^TL6_qA?Zn`k8)B%k+?1|B& z;Ixzp_3n&3qXs%1nLZeF#)5*{;=b%2Mnqo&I+M(-pNAG@(F^p($0a5r9={vN!M1<^nrov?{1D zz*@^D8~Z2!Ycn?BpDXWyd#G%fkx^cZPk%VnrtAZAv8!6q56RejzPM5?1uuS7s9Jd! gofJG$&OP3eiAQkU_kDLKd<9|nAEw90*b?OOOVAz1{IP@;@JA{cV_S)z=tfS-TU0T+7*i=9)rPPFfR<&$8#~v z<3xD=ZEK$KwJcBLVczQL_iMSA`?o32=PCT&*k~n}e{v`ghWX8mCu4dy;^SyO&08@P z>E~_r7~~7n3iooxO*=fi3`9e6$vpYTnv-eo*Zlk_#uvgnEj zt=7UX`b|9p^Db{+@%%uk50Tqv%CGtLB~N#tb={jN zN@vd4o6%$Na+;?+x|V3sC;+Ohdp(J=eMAl+&>qY1uXNh2@3ebgr{lk)Q>*ok)B2>C zo;ORUXX;MRbu!{pB8QY`uwq#ZKW9-IU1ux_MVpH}&To40*jrD14Sf%5&%+q%%%;(h z_n!gzEc_tHj=jWZQMi+)(M>zf=&zUh{WLgFFIWamj??7&<>~R!-Q6>5W#I4Mp_hA+olzyoxfeBuYf zJJ(2HDKvOtwKYJfBt*9hU6Z$CF+`#l`CgPqp&0>Zu7!Z0F>R-4c?6oJkY|ce&>IBpC%Q>IJy1 z?wa~(=MyfxQTs9$BTvkyQ-)9qpM9#l@~LmCx-*^rXTXJyEQsN03D9y@ggYzs1Azv! z=o2U8~KZfBpsV_Vy3=&*}k`ZCfB- zRYAP2r-EWtj&Oy`xyGhqcW{St6*} zH^2nr3>PQLQotaKZf;iSM$YjA;Xhrq;lBj_)e6068hGFUu2*mRFAZT|?!zg+inE-j zr+EVKc+h8-@66)eXgJ})OKxw!2gT-oe%`VRwt%kX{&B&o^4|J-zPKowx%|dv*7Cc% zUuh4vTRXN26zkP=(9k~P7mK2e&sH0Pe_q=|aU!=yepbv$X?MaU>XWDthtN34t#hor zpO74SAjTjlBp^hfthw3xKAOefw>Cx3>P$_MB?Ta}k-`Ul|LyhRi#(s5@Q-sCN^jmy zW*j+Eg3=Ml5+DVrZ!dT>;;GmAZR^F(Rx})fxZGlKArNEfL`;)t6k6&K?d`ohy}9LK zE1J!w@sQ+_@BaiM0{thPqrh{*vl+-LT=y|dL=LFjLhY#K_fgbA=>oS`{^aC#@ro+VDotME_k&bV? zIRi!$!>f6iNTviMCbk5OV$LF#_3&*Nl7JI-I~~cjhW0X=hxsH%l_*ND<|y1}pybrS zsH(zbuE(0fvGX##AO{YizY>@RM3xziV%Q!|dE_kW7;4f>-CztOloc0jSRnX=yYPm| zHSiPwzF2y*c{cIvMfbL$icyWC)G7a>Sfp9HY>~ck8=k_l%I70a%GWdj4nj{cJ;^mU z5YaU-b9j^U>lsgh=cRlwhxP$a@Dj#8_zJ+mOz`$6o@P)-Lpe^pTipfh`=)~+Wlr-! z%*u@i2{TOxbB0vT(|5A@AhMajmtyRbrDK0rVNglhKHWcgw|_F&JwAGV@XO%vcxMk7 z6t`-9q(y|gUh9|rGvLdxvy9`bmJ*JuTe|AU2Jv}a&%4L3-y9$9AD!u5Z_PBjjPVyo z9+8;X)kRyDBw`u%+PMD#V?oP~%@SVKGucw3L6$Q83I`iZ94plCE)mTl!E204&#aAO z>AbwGHa9hde(VzZ`=Zg$OB?;oZ8V!Cp9>ye6#KPkZ)a(He^jRM8i?n`@%zE)!QTF} zofCG8eYi9CU0tQ4op%Snz&?m-mniLld0toJ&Cb#O;i(}Li6FNk&r60+k|GaAHS;3! zV$2_wjybJD^CzyD!~NZ}0TAxN+3)OD_vFG8=aSG?sfZlYv6ot=?sbr5u%e zWf(1ue+0$N*xPw>aC&@7B9dbywJ`BzDJHU-=80$0M*afUQj*^2{z&*%hOxe~g0YV& z%6@2_TVj1~kCSvC6oERfLJg56jPdi%g__|(Ji5TPL7t0d-mtLi;r8m9Tdl!9Upm-v zX|Q!;Ts91G?=U=f1nk)=1DIF?c)4@{(!(+Lc0E?){q5 zcgrej4e*bp0~}Nr=8Lo~7uMj#!RguY$?t=`9aQdV%^}x7l6BYUNTW$>j8gQHl8@W; z$^I^GRHYsqgWbYcB6Uj*_8;Wh`7lMqr7Ew;IUa}3RRX_EU%YLhVwK964@szQQ+d*4ZeW*ZodqkqkHi% ziAKQXo#MeOSZRD%ZY6kG`}*w+5i|<^a73P~2Jo)o4;oSS^=9_Lsdk;O?C3#tRcb&X z?0GFYwiYZH?fJO7TQ|O*!U?4PF-h3zCEI%2=_Q++J~Wt~Cl)`l6yUYoUY3^8t;$*U zW4&{~JJ^5EZa>AmB<39Cjpipb0f}~$!`^#2&p}Hyz*L#3AWeQfCrwuP5^J$i(S_fO zQJb^dn#7|KM=Q79WI+Kd)bLp8)*BlDiUKi4CmuSZENkC#!h46Ky^QS|$F?i}LwrsE zX9puo%>L}myA1AXIKxWuRjE4N~PI6vLR6BDRid&EOTfh_0W(S-hpx>6Q zr&xeYkRjxItoAt;qvW$u?SS&~3F=?IvrNCH0EGSGFm7Ae@OvPAa%wznY_XlqFS9)L z&}BNCf;0#KK*cbH4H6np&$}0}#at4BS$szd%nau2B!)Si@*#CeCP$b8y_Kp}Aos=3 zIr%EsQOwTdPuqG`Ckns<6r^ULx=z^dS);v*aXxo#zH>10`yNeuJH8S?A4mL4zQ-ki zvItN*I|Y(+UP1*wNXg=3V|QaCcHfl{e0SG?8kiWlzJM*nRUE|*6W%2nfVuxO_HT(G zddf}OGzJX9m?bm9(e5M?SNsr{gy3ngms=j6+-Gy~838PM8~Pm@LClQi%q@zOq^G#{8%kOVD8xn$I4+X!0S()10IfO(M2G~f z_L~LTYqed}fLBX)E|mQ$JWhuQMB@?-hOS`4sNOL@NK2Kj1Jw4`NPls)MbZKO#LJ)kwjVZSfW417~i zOV9no0cQ>pFb>5sTrb~r-k^pb9HdOC`kzyV#)Z>(#4n>X*l}cxLnktKDR+V@{UTY{bTI=%r4{EJoZmZ+OrGcv~X!QwUw767hWT0e6fAE zJBNpbV&RCzmr0Vt&JxY)EO0e^^OLZHIdC_SizV~fA2pwpHQi@#svkMh0DQVh+tLV# z(k3TYw|e2T7qK#6S>NOfN2jU|R*UB-Ni&+R1zWE9RN7GP*21|W+bKI)UEAb`dM&Wf z=Kv`m;+a-OZ^W=yiZB4uE)DJU_oLmx>F$gDy|;(^d$6DP36OxM-m-F+jYQ?DgWa8@ z-Tgyq<4?Eli-r{xXU{Pt1attLw%{Y|@fiYrI-Ky)did^5dc>=~a_yofr#Ec}r!*!{dd)Km6zs##!3@UrIZ4r?k!-d$ z(8G_xyzuyIjA41A=M4W=;s(7ORTKs>x|FLsCpy_%w#puRew{>Zt*#?jU1ulzJFg{Y z_1PK`D1L3nZD_RJ?@q z=%9(xghfdiQ3prW5jpYg!nK&aDsP3*#^LcVgX6a(0a?Dc20BA@?d0f1&4XRe@KNa! z!6A1s_oqXJ&(P|Ob{C4FKx1=)Arp9pKnlRVG8x@22o1Td^Xt-#hpoY208&-nqEH>j zX#r5-$pXZY3h1Rb@LWXO=sv9d=4Gzp5OQLP-{f{Y~^xrhWid|i>#q7ire9yei?dze+d$H)W~$RNu|0?jla1j^xXt> zm0If|dW&j8@N_)S0dlwG|Ru)u06nGT42}b-pv(V{CQya%pEVuNaz- z5@dPLj*nm6@4HHtR^LB5J2}`tUBSr$lM4#vhn2l6&7G9oD{8t{@T@d8S?gMv^Oc<0>CW?z*B#4}qM|-$WO=Sj6dVf}ZhU=~Mj{)g@hqp61UxF57Vp00T$l@heoJj$ z$9eg@SQ!d(ZPKR_D6Nu5cv2eA-wb)T3Gz-e$|%ea_U*jcrtIlJ3iRmADo@+9G$*CI72C!-Iki6GZvtS zgXlCpl`1wahhZWxbdKf^a6C&B85|9(;tSPTCO(^<_l}SDU2aoXO6fzkW`9$`g;eQN zK1{9<#fgxbqR(t(x{CX$Yy|&hH*R?PmDTVy})ty98uCwH$(e9 z2CU=-n&M?&d!o7o!WafpLiT2uvN{}`?4Q0pgq^rLVR2=?Dvct+GNJT1+r_?ocYBw> z65CC#uOl%E26H@tjBkvp9E|4+8Hl_OI?P;15q8vC*HW|8cKY&9P*>t=np^^6<)7LT z8J~{(_)l=VUn}gkxhv{%uFsqrUv< zonJsdLA9SgZy(KNpfk29?5Bmd&ub(Z=Wu9o%seHf5;ZCvae%)y#Jxh{vX7v%ctoMW zXy8OG&unm56u|7iF+VHc<1(n zl!D=%bN6|BFyPti1kH5)Jh&~+*e~jpAkJDv4Wk9glc8SM7;3ynXmw06hI|fBKcby5 z_2xbv*7bhy*$|#GpN-+^iO(kRr`z?}6#sU7HiN(a^w|Ik&48uqlmFrE2?r%ENrOng zVzfSj#5^BdUxVO)%Gl7ni?dh!=1r7Of=S!_hPP6o4W@1VljX_F(_q}jKk&O~3tyQh zJmznGv7Xp4<*;=Vl&|A2u?Pkl2t16b>6;fX-Gzgu24#+bEi_A}crHQy0D8Cr@mM{D zx9}KP)VpBPmf*aK#W-=_e2!A#z9FXXyaN7V%oqz7!ZIbP(<d_SM0 z$!9ulg{Ob$bh+2sjf6<@H6;ACXl*!!?QboD|IM0fxtR|NI<;FLKA13-QP3KrorMC& zptmFuc6tIfAGPTSeF_}J>~nF^OWTF6AKDLhck5lIy=Zg!9TskjU_c`X893XY(>Pb( zme?53vV(&2qH@a4Ii)CI@q$bPvQ?fSzr&c3l-^-n1z#*YTse5+9~MX$tK;>w_#*i8 zST4mUxD@L#gF22!2UO6g41a-DOkmrYf@BwZ9X4;jj%L0`2XbL}9TowBgD^hwWi761 z#Zst^zoJO1fX5sX=eID>pjCWsF*#=rF)~@IBplZil`R)=`KGP}x>7|Ot7(2q<0G>R z*H*cjy(sOcl7mYGF+B2wOw;KSWUctvuaht1Z4{sXb$yk=1mlmC(nt4-}v6puQHc)_Xv2wG6inf zgzF{Cm{Tl(SrMUHVv;G_YsE*~t$89|o2PSxD|C~~STZmTA5;X}C@bSws8{v5Q_AvE zN#(*ZGOp7rIL>R>i`v)G7eG(07|#|44of33Wx5dP+3WP;ZPAN?C8g)_MVOz*oBTox z0;!XprFwQ=9)y&kh43T9Z9mTOfD-p2!Un#!6SJ6;h`{77d0Gg6MyB87WL$1-3iOU? zvFIo|>hVzMh0eD-eS~Ne4Ix%K7i073IB8p$b@Jcq$k)5$7PUv>*VlKPk$o;@xvFj?IgQ9U`mRk2JH#`Sa*3M{w%1#_6-8@$Tp-} ztQ#5N$BqPJw zp2R+r_O;ib`upyAV6%FhWKn>ASw8p6Od{8|FcOW}G=wz~!`o_}C#pDxyv`-Net54apukzlR0X)y`=6tO|XM`e2Z zOK=bi%o@9U=XQs=0jl}@G;aPTU{*)QM~emQ*`(mky*t@z21}=&?VSdMs3DRvjwddZ zNK8MXyl9zpNoF7H4oNqmthI1jNmBN`QpS?phT4F(`84UnJ{cUK(%H{x0MJ+t z144^@1>7WUfcF&|_lX`XTG+uO7oaV)oU_`tO#RGxdg(m9HzI5<#YBvX$Ac!8v?{Y| z5W_LAx(%DA67i46wc9w?UsaE$G)4=C+!=gLK(K-t=2sCHa? z*S8Cl&cYWhJ$?GLyV33Z^M`*v?*8=X@!b!P9(5l*dh+<6-HqHm25(4sy(^DYm8A^L zDLVHPZiz6Lw(2xXB|G|6SDn1k9rP?c5vf~ih@Crmpiiu;qhbFWK7RD`=K!W9F8DTB` z6XrU01F?k_75rA5=Z4#r!sw_U_CdglBaE7ZUmf;V=BN80Ha8hn4!M&?jw;zXCz-T3 z=C;L=hd*@x0m@_>6C@#!J2?8gj)e?fNlhTLO2Isw2m)_MsK}w>gcUbaN(Ev1&R>fQ z`@8*l{i{5`h{E1XStk#&ePi-O*FoL;Wo_~>DT8D-Yx=yoc_>)1DmD&rFo%F6pPdMQ zM;OzVJhKONOjEm1bQkS0a`!BR3$>XXC1Q)rlUZB{6WLmn@-;L{1Mf*bgCr4UC{kqY z7D*|9gC;ZWYk?^ripZ}nv#r1QtgXHHTWXMeApu{r0e={J%M8Y{V$~J*8(OJx@}h{o zdc!Ke5Lx6*_9DtS*+di}FHIT^MF4%{mS3H)w}Pa;JXwQDUyERtU;<5xYr2~?G0GDrtd8hqDqD=CQu8 z%7=#DUX-9^%t!bqjz zOB~mbLt?2zSZVXz>gl4yCqA1LU!5uiE&CWCm!zqL_p`wl(6wD&0MNdf%%Bx=z>C|OMOB$mF zB#Xe55)P5L$!N(H*%!f9cMCsY)R04UqD*zFtS=+Pmhlva0f{nW5e5DH9SnukHaxf_ zAuGtGKJRmhb;w%fY(KV%!(FF%BFM#)Wece+ym%cK-p0oIx*@Dst-Sa_3s|*NTEG2- z&iBO27BMb7m4;SIRfR>S0l5jwB+D(9Fuu~uC;}w}osKE=9-)Z`27_tz7Zx0Ki`oXH zw5TZyf3u+o6`Nj9qi1d{@Wff*2`%spSb$vM!!W}<8e{m=l{PUwqA?q?LKQs#*wX$m zz>$ps7z|ZmaXDd8L7;D;_jZ)MmVRkFD^?9YY1nCdPC?(EMFt5nmriYhT?n!Yi8-{FOzhfRtWzsEiiC_ur3^=98zb`2o~_(SUAc3|Eu~MMG3(q3pJf!& z68r8Y5J@V7~UTAY8z^J(in}*R=(nAx+6#AZo z)9p^b6R14WGnaA9+MG8vV{D7w2_ z_h2L5+}uvgbY-v(IdK>fWWZr!DLHIxWSD?tf%#^wu`QDtkuD}18>05Ui8Yy7_tmT-%m;H0b)S$G^1TB zfc3K8WtW~`7EG^~%PtQQ6NojgH0xNgCmm2LE&PNHou%(c8AIP;0$R+-q?kbqe{~__ z0mFbPx5iN;p3otP;eF057{RzVN~C2yQk1}4GJq8x>lGgB6&|x84A)-a@{O~?<*uXY zr1%Lo=^fAE5;F5Q`<@Hh9rwL#Ivo#1hAb~ zd?=-uBg!)u&M2i<9*RDC&Vw&r#c`4c&?ZR@%_mTm9h0myzTTj8?!IDK!H2H>LD4?u zP$O0#T@V1+4X_0nBebz`>J{Qayimvc$$gs^+FU;YS<(p-Ofq4ELzj%<$mYqS#PM%>A-7-;Ru3h^x-pl)6X7BqMbXI{aPGted#8 z(Y|3>H8wUL{X_l&_AHiBoGr}Dn+fjQCDMY}Ksu*;QgAyb~1K{O39WoJUt|F1{D&IQ9Iz>$y3pW5UkZAqe>0TX8x z))c5TMOp1JY*s{ZedAiXGxkj+EUJcxL^YQ z!Q_hPk1nw(ITjR3^8VdQjmOw1wibxe}cab;h%B_Pi^Ye zn6OMj_hSHRtC1tXRlZvca|h2dAY3p~SkD-7yRZ#BxN$5jtNVQ|!3)`jn^@F22H;^J zzmxeKXjmz-MV1ufGRI%E0o>iCPdnv2oy%>=au*Yg+qB+LDT3IyEx@5WeTAA@_IpCQQq39l$sxtcb3R1j};pYY05RIb=F?5xk0clzuk^sdT zgbUVmvC-5DZRQq^Ic5n6<7TwU!7b?I8LXmfUSAByjyLDcRS1)0RNC1i?|f>CKvr67?sm3>Z>c9(-a<6`l>iZaOhj7E1X=4u7{bZ$QJJVUj2K|w>^MG z5i--0Cob5vk8l(@6xYN?y9I;6+{&qx-^%(S2ikmy^$erw4o5k*fk&L+<9^lRUDn!eyMp+SBf6bj@d> zD5uqHsys~QB5$nwacSKT{N_cJO>}JyxNvi$J*fVTUHcceHl=3Ng$LSUB-C@3N5c;& z0;NfkZ){+;Ecv^XYs(^SIuL;hC#NV(C(~9@>=v;SfU?}? za)39M`$R2MRQeG*7!Rud8Z&~PFy<;u>1Q;hWQ}MZiAxEx^!+6m10mgu;co_UEH40K9j(e^K;fK4sQyUKUTCd}lAzNAV9KbuIVsNYUk7=O__WqwF>|#c4ymOGcH{G6}Lw^?+j%!+d>+2I*2~z-vF@a3j z(}o8dg=B|_`_J&E*p3xQ_-~~tV9Hpq3 zokPKk#)MPl_{iru9ujcheay@Gr)UCVxeuBZ1j3hZNdzD1Xe&Ec$0%5Qq1+g-&y&Rg zK-P5w^Xuu;r^4Tu2)tQM7D|KEyv#xzY}7y3U~CR0Bo~1v?F`Rluc*0hL%AHiD1d?d z!trl^!BXAr?fD)2gGh98Wyt};@G!xV%>I`8)>Q|pA1H>AehjDs#->8Y&0%CKfSjMt zFM4RoQ1h1;gp5JtETWZfq_jLpwMq`C;l1{j4a8EfDq^|FY-x&y)iYb@dFk;#QX z5ipSe%N&3RyBng^hwbZjQE_%p~U*`oyIkeXP+B({&zS z0AMo@4UzB<-2ymo5*2@=^ld1=lXYQka3NEMvDD2sR(HFq6Ln1|!LE6F#rHU$y@%Z& z%{!pll-|;=9_0O8)epp?oUY8;_66RdzLI^9(JC_cK?TJ(TI|_IXfVW~W=?T33$@v&3+HWFUBH5>Bx-ZKo&*Br zu&MaF)rJ(K+Nly?m>UoArdL2;w7{Dd0d?vgCDw`sY%@T>A7q}2mS6Ff$NecZNM6JY zqYv0P1h|IU>8a@ldKf|vW5v!@vPxj-ffq}8GMCA(GB$2V$+nhng*k<)KmMWn9P0odvNw$%fn6Kn7ap5(L zwqs;4ene5`UV;opz}Ky=AJ9X79&HvUVG=jPn`2QhXKct%3lQ1+S}v`L7C^BDP^wj9 z+z3+I0p=Mh+XP)S+QGQ|^hv#D&K;maqd_2B(-VBCXX{+#n&d zxP2!H=7iU%E5A7E%9LB`igV6V%dOnW>LzV1*3o~5fyy)AspPt``nYhCr5KtJBy(gN z8>-)c7C-$&f$?e5?*z$~fR#SqGG>qA(=i&ihaql*u749fCqq4H&xG=Df^NGt41mWu zCbQhWh@1R&+FB1{OK1TCY(@bRKYf}4i}B|4%ilD1nz00FTn0(U0Rd={w&O?2gb$m- zGfPO0=zcbg{vX01#-%|dG>CC9gh61^5=7Z~a>3Fqpssk+OSZRDy#HunybVbjU&Xjm z>A>488sg>SQFy>*?jd-aNAc8%Znjo11>I}vWCs{nVhQ=_l>FuDL9YruC{hP%w}9Jg zSVH=(VFAr3Qe6Q(SJ@qEyXEv(gPYg{2dji-(k(-D(t{2 zv{%I^y-iXwD-2G-Pzm98Yf}Aw9NwT;+tufAt|H*k_$_h1nHiQvm{RomCFM&_ z2vt=Ra=-R9AjlNy*@S2MB-Jc;GZYqjnK>8=;%q9_5?F}QwpxltTp4@oumXy#<}RNe z(w6tMqeb&#EyISzCWw(S_DO4py4A=>kF)&Fs{H&z-S*(gs$c8nQI0OovYmim08(nHpLv2egG0Y zFQsf$E?r(BrGmgEcfdm1pvdXz1EtW;5v56#!rQ4p4{v3A+UfZyM$6%FHJ8Y&!l5WG zu60xW*$MOSjh8DHOCe>GGRc;njKIJ#|{zn&(&HQU*JT6;5FO?B(ce62xuSn zCg_gd1jH9b6buk2gN+UNfXj2fu`zJk2O_~$Fvegd4e6(F%x=PA@8&7=cY~xL*XLxxvfKjL~&nZHnQ{9G};!Jyx~&V2~L%| zC{V4DbK~R4VvQ7BDK5vDy#?DsgjAY z4k9n|(TG~yE(^j5;z8D?oKmVTc1w3*ET~0o$!o4NDNqaRV{iIAyWS#8k2cKmC zuN7->@6tQLrMIh=9zL|^BAdkHe5aI8YPU{ne(z|_U+-Bfztww%COjH_n^)+>S{}dR z^7vJRU%BfQI=mMJ9}oqvx#K?lunH3zt-ypV78H#}UYP;CuEXjd4p#rY_o-|Ja^Ln*8VP~Zc1f)0+HMEvdqekUqXWCe>8n#BogBDozX z^}(91JVk#;8Xie*X3yB$duQwm&e#h@v|s*1Q}x0IOOcDaSG-w*I-dR|)P1o~ClGZa z4WYZU(jM^6hJab8=MrLJiJdGrEsk8tJiT~a-1%;M*i!UpU^&`jX68h)Z!+#6EU@8 zZa$W5u5KH}r9*FYFUMoFa#}&Sa!I8Qcd|No?xq5zahBYgZTYT+S^m>e%kua0BDXU) z6!}VB8({dllXSW8?W@X7StvNWg>eN9=^UgGuwa>8MCB8Z0b<%XqSFdsss%L01G@Ej zwzZT-)Nbj39NO!0_nxEQxtndt&1m$=!{A#htz_58#dU%!>Rp z7z@bkThZp4HqdZxMW}Eq8nw#Yo^gk}nbL?dSOR2QDJVbZv$bgL1g}M1yS!QJw8)Wl zch_O1%s<`lJ9weIWl-tLOs~-;UdYDyHsw0PM72c}Pg>+(l-FhGFMOtheQ11EK3V!X z@-OO$BNHH*7vmd$9}xwJ)CIcBb|cl3uzy)&Z9kdr;a-D!{#W_EY;%yOp8&9Fw}hKjz{CdrRU)*t0Nc)!i%RPH(O+ zlWAsdiL3ouYRIzI{#LR?TA?q_7m)OGE34%nwch;VwyTC5I#%e&(gwEfZy>iMo+59S zNmfa>n9A4j7#XH*qUP3a5_?wjg$vA812LMi8(?Im8&jDI9pS2%Fs>kTdR00ok()Ae zj0qd+u-HjcE&99^)ShCZtaNh@9EZ|M(QfD8b;|MWAT87tvYRuFQ6aYp*?|5~xTEpd zhHWe-hhhtD^sl#kxPTM~@!=_|v0DPl`t5mmk;iuw zAH1RCKqsR8M2}=z2yf&knW8s5rKg=NONKFM37>d)MQ@JN5h<3}@FeR&A8lO=I%=Qt zJRA`zj$jP`^FM>Z!Ryy=&vu?2?hg*m_D|@?;D7$7#XeQOzuNzOe@}kAsa8JP+y6~} zKCOH{KH1wp(Vwp{h1@lujO~l?5j%j=)m>XMtBno$x2=Qn*(J5DA6x8Lga;r(T#DYl zHBWgWFLSJBBx#)=sJa)e1>0}Ks7}Kx0l(hu9KPK@4X^RHy3sG($A_X>*iSG5IxKZX zw;4C(8q=U)4iu~2`7!YN`YH<`hg~Fx-F7mrDYI*HDYomv!ap{)y1NpBRQ&qDz}vd}tPlnRSLVrfe=krb5>c`C2H5v)4ArXwV3 zh|l$P7Mw03tgUM2Yq9J8QmUJKU)iqDzBSy@Gnc)+s=^{^eW8)`( zVWQ7rqAyydULSzYZbQ{o(Agz)9wK56>k)J4Am*?{`uTF|k2C!K7Jf1c*Q7@)~m^n>6aIR#d<`^4F`D}%(+T6;jjdK}cVlc5JopvpZOJ`9* zmfDb2XlmIhws~04m?5Xl&8M-M<~dCBTu!b99^Qu`*VGZNsiQjN)*Z}q;Fni|u97T* zbU^!NBz>|8Mti2>60x<<=sDE0IPa}{^P0njbL()Ss5xACR67d|qginXNm`6Sl*f?5 z7^E3s{j=wqK=-{%lUio!MDik6p|SYjfcso7Rys;3kCMoB`T^(d!+&Dl3Rkmx?}AxS z&P5E04eHg^lbkR{AGDk>mkajX*-o9=?&-xiFOKD7OXzR+BBwnH6)4Uq)MDn}Mg)kA zv=$l5rX2_Kw3NPr14A#uzPXb@g!kyCCPfAd>wFd{j^~<%6Le<+6rWd8rvl)EMGQ;S-cs= zBq==p_~gkCPd1PV%3sBG@t{9@UM>|(_$~h7DQy#!+8^Op2Q^5xYuqMrwr?^rv#-Jy zQP5iM+ImX1Z%`v!pfh2*?e$J!J2z?b7arz}uEWTCAiUSntVfx$cjP@H>YXGNOgPP6 zLtUUFZ3Rc8@?g;FEz!t4s3L#EFJCtGCunm&vLjIEo;+biig1|hEXRF2%U2eT7J(;1-anDU^8+hSVQdwS83s~|K+ySqM4#UPbVd9zmS6>s-wb&ZzpZ8>NFA8( z$rLL}8?DUZ(T{1P#c`!UTFKpE53UfNKz4&&c$ho3i*kn4+Vx{nrQ#wQt~}kE{yIx1 zye>H_x>0DqT+n0<^M}f+O_;w=t`W=RnzWE>n3inDIXm>(_+k9W!RPp4`1}@Ja)Zh7 z--F4&f<=SD5+*0KDNJktwb^Gmi&k7|;nw{dF-a2F?N_=KRmzs1Jd2ZhX`l8luj>a~ zUS}kqJNVqWK;%p8PyWr=w{y@g7tYj?Lo0z44KUU6|0gTM7zu6tR1XO=&zNUSsD(qu z3s)EAm1>&;v!)N@rVo>*4}a!BEpK!7yU*U{-)PkWd8aU6zI}iog5k0K;-^H4Ns5Q* zlz6GZtf|5G*0x-&b0C(0Ay0-L;1~OBsO6-bUu##EGRNr#35N+TduD5jzU zhAbbJufElH>!6EU+w#omS+!HT{hj9*imlbOU&0;sASiJT`tVisqgn!qlsMQ2=^(SR z^s7tIcHI(M~fQe87H{3+!e36NESwTrMINe-lY=u3_S9ZuX;e(PLxIobv z=sNjL4N{+zx6Gy0`gnfYnQzHWA|Z3jn98hcF``CFrY1`Sbbo_o+M;;iDh<{Kc2JLf z^;dg|XkyF|c6sT?Mcq!1--k*r?^Av6a@GFB~Z-m<1nfV3$0eD$vT;X z2hY{nuuK4!X*kxfOz?En`g<>7onM&48{`yro-VXuMy=T8rqNoF=5D~H{8gi?_<2N z5xY67kS1jEYJeNc0o*`u#c&u%2K^~aioOhefSI*s$ntPt1-x`n655`X$qhRlY-~&o z6@4_lQxc#lp8jJ4Y5U^aXmFn z?DP<(h9XYN_eT^Uc@-WDoo;Qh>GpF`obE>Y8Ulqy>g3jRb5pU(I(is{5$4p1V4i0d z$MUQMgHwBw2i7E0o~bF2@q&H)KihadK49Z9(~GIQQk>pIO|RaH$Uw5LaHMjp>Ar_j zO0d$!{ZYt5n6gb~j5Dso|C3#9s5pu3?WLq^_K2WM;w}Fl*v39qV1qr4J-?rvv`xbk zRt8E$W8Zr0ULXf}em{w*yns62dZL&0drZCIG_TO%4f~14ndvL@4T->1WYVI5c_RX# zohp(ov|x2i$6@eNowIX*@xoVmC~V3DGLC)q8I>eQ6w?y<$GVrx!c+|1g2;~PdWr;3 zDFzdzI+#dMphp^{7mf=ZLteks_4)3>fJm;|42H>9rvahVWE&ev+m06~0av1mr2%fa zHBV%~{v~JoKKsRP01dEV$w2FP35ztSOq+Zu?P*W+%rR#)oAj*xl;U@ahOsG{j8a27 z|C`#8D=pAT6ar?hV70r}?|PJSM5coMJ@@9Q-VGCx$70SG);Im5Et9$0R}>IG`y$vo zjKlu^G5bh=AF=21xd+=WXU}{#=JoM~I4w?y;h2A;)ful|FM=tZW~ydqI!Z@Fd2*E33Hle4b2vpD_!E%sL%dnSlj<;4NPBf1*b847NS)i8p>jK_-sIaZQ}Bf-MIy~Z1CI}GnpS6ZwU7u5kCY3^J{ zPAP8|=bI_Z&r=zE=faoN*+j1uO?22+w_HP=uwOE$RR+RoAe?PgM^Sfkyv~4eE^5Y5 zfu}Tz$`G1N>HE#5^lJTYFahs3FSTVB>iy*w>iTy60(gamy39c^rAi$;DCi}x)WVhC z>;$z5KU4l3xw3VeLz&BMOi?1`*6;DNb}&GO>zfMi3wyMD+94+MGm)!;?owGab-u#2 z6_^#r0t6Jz#PfYh8A!KOP*`Q7%>%Q4I=Q{driU~nbB9WUl|F5*QsfX*mj+?h9#Xa` zEJ0`Nn_DfMr|L?yIVR+B@?!zWn88nAo|zE8JNM=-q=dg7SKy5(L7$R}&`6S)z-_z? zFxyUh8D_jy0Av@Tn?@T`P(=p1Fs7S?Yfwxnx|%TTX%zc+cPpcr5>BmxXj3V65S!E? zmee3SshEpb_?*_kx7Bs9E$8jDB5uxgHbN=ErFd=|5jb}cIG1wy?}9y3QK6Tdy@gHX za#b<>@>|7lbtKY>0l8c*jN36e*U?N`6wQc>bcHH31Tz>>8G)IUFeK!X|GR<*5FC}A zkXgOkuYAfmRsy0?+TU?RkjvGi{h|^@kvO$ha6RH6Y}czgq$7u7e<(Hm&?qlzZ)v<7 zo!TgS6B~MM@`ze}jnm|Mzc{^EiWaT3+q8MB+#)3hbb0A>i$Y7DYv0%x6bjt0221_V zbXD@IzD?_z8kx3B=uQ5T7l)70(|OFDvFfl?=N)e6HS|Vfdx@t6_DE6RTa`oXeJh7J zMN>kdsqd}M95B}xsVSE3ju}$(tu2`$6-`3L-JR<0G2{?VCo|4JGy;l!Xzw`wR%a|q zEiBh6b<&q|xRpawdXKa;(9LoMW{(`C+46U^$vs7-b8E{thuu-pWQd7CEPD0P5f-P@ z1V(w(#6z_0ukzmS8r1Aer_}{Ux!$c@GBz%X+r)Y$lsFjZS$FcOfc@G`TpYuj4LUR~ z7Mg|sN6=8K*USEB=kAtk)adngEyQa>T8`Rw%5zX|OJ(SD>n?{NnXLrC-?{ZTL`&qg7;sQD5oTrN|W1aD} zN{ScA+7flq=>4lXw$YY6kc{cJbr)%WLF4_(D}g=4#lAhTXYYZ+N#!tK!8NQSF^>7p zoMa^A$0)Ao(;umQ$TU``Q7y0N9$)d$%Y85!yni!>riGtA^C@=Y@I^UY;AurS+rrbsHnA#Z~>s#+spl{YTs*R}Rw|S+JCRSfBPkOtjsfD)PyE{=NS*F~n?(nnuWu8X= ze;a-CCBe?%(TBKf@J$XA8G4Rus7W$A{5$+6_1*Bw6g5Pnzb!?hS1L6{qra_0qaXf7 z(?_X=hgvwK?q8pmvN*BEQe)XTe7I!;`*5k#$q-m$<~aOMnK=qWhH6CSf5wc__uDWe zpqLUU4_`|;ItzF9?2o+DM%`BIiSL4Z&wvn-hP9q^7bzpa2<)|tz~b* z`FkM;0|aJw)8nbOJkh~QiG?p*J`on)s9X<-g?AiJ8NT~QIG;-q!{2NbV7^;fuyS%o z*CiQxcW?a2x)p=rp8eD&3#XIw{G!53`X!q;-tZ<$eOE**b8NnD2~%U*d{s7H_loE! zTiUQL5TF^u)avSI_)!URD$BYHT6Qm5ic8Jqh35ZlWrLoJ4+2Jjw^6RO{(Cdu{O=ZK zi2mQTxfw8`=Zk*n6P<;`-b5TiQ)+Z@crwX-&UyN>qLI z@U;{{0Bu88 zZCd%cH(Tv?TfgCAwCNQox}SFYEldhtRN%9q)xup3v!y=c-mQ9U2O!Bz45=S^y^{R z(R_~E$dmVA0^-DW#bzv&ac-+y0%96v`9TdJHVr61Nq~9Azd22!3>r12P=pz8p>}91 z{YM;F&pL6Uyi1rEtB2wJ)g+0%WE1aRjf2=qm-y^~yOstqwLy$aAc}va4v6<>P>fAT z3c;8LDNCLfVQ83TZcfU%126wLkEZpqrh93C4V}DThkoi!1=IJ_Tlk^hDLTs4;{Dyk zgUCH2MmhQ=F|U{3$h`QBN4er&>bK!WWJm^9q@Kw|*;>ovYn~B%dijm)$+%@-@)h$X zy|*t7pdiPWe@l>~zL~&kTn0LB$*{+AM>UDboSe5W@8cT{S|qPc8#-OGj+Z8l(#>wmE06j*OOyu250nGr zplKBsnOa|<98KFgeR;Ug-sADiTa_i-z8ojAPOb2bQ}#nox zYC70kVGI}8vGuT{ z2ju`{D2CmuyKIrF-tG3F^bV4$Pjfs*0E+Qrpg%y zv?P67^=&xw#Y)g)t|+>W4)#^b-44|2kXNa8ajR_JZ^5DnTCAmvFs&9_i4go-(Z{(C z_-2R){^=CiIvqeajl+~!*Mxw=E%Ux&*7X%g_Xh4R3&=R;nho+`D& zr0Ox2!~M1&_3_@cAT{A?bsG((RfzF+-F4KE0P}c{9FYuWK9B`uc3BD3NqjZQm(jIz z->xB(;+8|%jPebpj{i}WuEDCtla@{VJMPN1xXWIzYYuK?FbBA(8VjhWl zJSJY=cNV^irl5RdYPX~6&l`*6$a;;lBt zI(y`=+%HKIMOIWhIJ`Cmv`KBs^?q=a!%(kkDmE+1#7^ULz}swM)eR#(#ETR#slw3k`DuP$}58-XHw zoFR2Ss80o^>C?Q?6e3;HtEh#)RTlGtO_wm!I=Kbbkw=^Jm%2fmwtWsi5m8IW+My!g_ z1m=xu?)@a5-m^DfSNCS9_*UfcbP1m@jh8m*CR~;`Y84!mM<4h-SW=gtT6n@r--suy zTE-K;TLDj3E}O<$_aVu&Y#~Xjsm)8oT}~Ksy_<}9vp6H~IQHzoalB@e{P7DF88=VE zspY7gr{^OX^#Q-|lD)YKLC)ZXven=_Wj50q>6Zy=>Cw{9Nye6*g<*zI^4&z7hI(_B*<$yXpe1&wz7 zdVL!+vYdA=3i+(s#{KFq)KSVWY+%RZMz*5MF13nGB@p*Cqd;BW6l|3HWgE*9qk1g| zb8N6=R4_7uGAx`YEWXgUMEIq1mJ*6rj;`Dg(ox$z5`T?ea?zfl* zWTjb6Es3P6`Ng6wW5~t&$hatFgya0JM^a1*Kq& zb=uQ${lUVYB^h6avt!pH4>hJd`oybtlXEO~QA064UDjb$LH&a-aM z;tHjnP{(2E&p*uZ38ujl_b6pZ9b4URR2YazzPjSUy@M?;rai3`2#G^z4};TcxSrjN zK?E>Mxr>(DlcM^5~59hKst zZAlma{K~9-l;pD$dnokg&~Aj@{9dW`tWxWxQ;WD@mWH?5Q5H-Yj$xPWCetaWaRjdz z8n@o&%<_v~awZ*ioJptO9{d259&%>+LEmzA0%B@93f{pl48aR9ppT+if|s1dS@53B zS}#w7-;Ad=ODUn0Yj4tb*Oz_M@_JUw@&VjO$q(vKuXXW#YF+vu=GT`zbt^vI>cYSO zg!X7uI=XOt~s345v6M&N011qHnrHmlfusorj6e84-c_A8pTjkxtZ_g$ZWI z&N1~;4F70rCxJekCZhHjXn`c;QHD^6VJTt65A@LS*32A(GY}cka1z#elPKdarm9qs z1|YG+&Pef)u=ON#gOHmgxNur%2bO$|?kjIDZwT&fZo+UkHb6L%H#6rZj~k^?#WJyj zuiUruUt85K^D>s1xAOe#o z&m%m*aZ>|MO_;&e6MSHs%yTD`W~x z7Yq0p4A2o<;3l-P_%gn5nJ^Md9VaEui9z?->tr;af&>=as*?ghb_Mf|tt!K|D$&*( z4^XlG>9Fj?s)a28y8%gkY?grUl%AJL+aXb=P*f=t6!6I12pg@pKylV8hT38(l?l4` zh=hy#^g`cagQ^_&vjz=cUXBOFGws|y)2`wHaB_NRU(whI?FZbY z8ELTwJ17gc2!qi^x?PZ*@h?F43I0Cu*$picc8YI7A-`%sVrARc zfg7PwVePa~plkGR7lHlUD-v6&(5H2z{>%9lFlf;~ZSU7Nh1~$6sO*0#}{r)$B`4uMTCoL}T$DpXC#i{bvwodvP|y4=C+| z2&f}taO=4R0ts3ii3_@FNpDDvo;PdjGG1jQS|?8F`b!L#aX$ClR4o<;QYK*MazQu) zo?8coy1$^qJ`r2?RdRa+6z%7-DTUE$D^~OPfJKeGEOcAAz`YfdG``L{&O^R|yc(v^U) zr)hBwkBR~J{DtSR{kLSEQkaktY@YHR?(iVbd#KFE*(-kYCW5x>4zaG(eht3LC~2Aw zgO8CS{iW!rEFSto2a1npvUG*!TQsC&q1V=d`PK6E$rE?!DI_$kN@gKPe_6YZZq{%M zyX1r`K3e;X<{&_l9@ko&;r0uh`wEs{rml!g>{7=il&x;NQ z1ArNA{UGke0^m09E3C-O(`Ef6`LZT`J;j4Qcnn+T5v8~L0?+K~W>S6?XE{ z*Ymfh9DKOt+8UA%#by zmao~r{n<-MdFtGRuvZyTg+` zMdGG~w)NUnKg!Qjt%uhsw=zYc9CaE@_9MGVDc4U=G`1)jThwpyqD$E>Dqk87c{ILt zrFJ8_=7!!(A~BlMtHcqDD$|Uz^V}_xx}SU1N?}qWRF|UWu4pB-kwlAL8GXl}y<);J z5emyd9gmg$2X6$)j3+qNB)wNqK_hinpiOH8+jLRl>%_ThNVh_&o11P$VD2^5itHUl z&8@Af2)vDFha0xTUfpiB`c~Jton7F;B+u^^>NZG2H-(wW_pUI)kAK1KBMVKj<+g+W z6MZ|j1!i+P3x<=BdC~{v(9PZ?FmrldkUPdif`tD~Dt1E3qJ_q)E^tfhI7V9{(Ou2X z66;gzP;@WKqi3-g!Bk}wfH6$2XNdqQcrPBkc0;{weyIhjx%iAT{aj?A8!!tE^&J$r z5g3=DQr&A#1TURryL2%LZB;1>1u?nZaQJq=@^-q!U)aFE2ifGUxGux*UgT9BgEmX} zx%*n(e&mr#@nAar218@%p5{aERx+>v6iJJz1bpF_Oi-4^w_!H|cwnAR>c|yO5>~br zap9LE!-yZQMN@!fbh9RDc!cKgwRp4^uC+FW=Avp}Dd^Fo{lvb!5%`wT8{P`l81-;M zBO%LUt43RrP*mDqyGAWatMhB}5H6?&qqUo4jzB^Uc(0vxSP8X0xyReU93{dSIHl;U z^tio>Vbn(h^|t{C^R1g|fHhB~PH5R%QKL~AOguADwb=mW^-7e>rYKM1;*#R2UEG#~ z>MLQwN#XVYrD?SFRW8ZCPZvJ{EtM5q#0st`yVp%3R8 z^z`ToQ?4v*oM)@^hg*5~t6FtR9{pBk(7O-fp>NqHhW>(55P5SDAz8FeaC?}_8JET! zcP&=a6dlyT0L2B0#F85I>P&q3=&Zi@VM`1f)@HT?0HdJq%$8zc<4!|jYZiy`VaN5C zP*c;|vv&3JMiNV1BGE}v62M5I<6Ah#?CQ*n`h&hiTP;*PqI58#RZpd_ zP*wtXK*-OqI8ao9CD7%(+jtbjEYoFzgh?$9gP2qGJK#($oIn7gqtb;+5#0fms6aJ? z2h?AicZQe}5ieom$r3Hq)^K6Vqr*-x-*6=kTh={B|3=Yal~M5iF0Ge#9rvx(nDfY>>^gOx`!MHU|jH7*1eW6T>-0%E z3NXkqwYbzWGD&O6L{*&1n0jZiO;;8qR4Oew&KMU}s-MhyfxVan*42q$w=#B0@&P&xO;%VHq)=yXB8RGqFQOJw zpRPof)O12t!`NK_$zRq9?8g6(^ns)iI5I2Aek5oh5B>!$ATzrxZFm^MC28X!yA;Je zeJTm!g9_s+$OceTUG=^(FbKuwF!O?OiS1f0Fe2p9H_x|>|j<~e^ZsJaYIB1>UfT;&OZ@ij4C znDPR7qhiHbIehMuv8~l&%TH=%<;p2Urq~jh5{hq0FG8AqE0*O`Md5LUo$~fs)V#54 z7OzijvcRJ&&gckYI#@56kg0ZMSCefJVF+`Nd(Sa3+hl9HpcES_qCBk}LAFoGyV9p7 ze?b@9J64lxchkfH+4`08V=fo89wa>TT8YQqwQC{oaZ5e7_sq;iJFtL~+eH<9uj`==SM&HeD(3Lz> zUaf`yeM6j_>sq9!ILG-%;c)NhJsdM$a^{DV$}1J}5Kid} zCd-~-bgW{Z;ehdiNrWR^$ns=_pJ=Te%iyKYVd@?G>ueOl@2Z4LPp3N3#DX_wviIwENbEa)pGZKB8#?dlc)sw!U9VREcv)8Pm?R{XFv{7 zm?$aF0&qj;8IJ=*GuTavID%m9zfjupnN!ef&7vEetyb}Y!kjRC)hS6nc8d9SYy+k9 zet!jW*>4f}Ku2Vy^nWiXPSE(bBeAKDWp*km!51auWNUKSj{@KkZJ8X+h>1R{Z*^xj zlb&p=$ubHsAqP{3ACb1!S}GzHo2|pizbytB#xT{P>oUYgz0pSm;N^L4u2Z~dhzWMe z)CU6R#R0$KO5c*L68PZVoyWsTX*XA~ev{Q4)hduQt_@Ct`FbwTckvPKeN{2d$YuzA z?Hxr@Y@C(ipyZWB6c&wyLhmTTehD;MC6?+cTSHS69!%$;Er{VwAz81zsu3R5{ZL*c zL*%U8RDTh!wM<3WR$;FIrsHdY1%fCmdt5_Pjs}Fz`Re}8b2hke>_aLMTj}Nq*o-Vq z)GsbpC|;{*X&h2xGE9@m#BaXo3QwLGbTs)>9eCKS?NjZRe5zf`r`lyYLodpx-{b=w z%S~$n+mwp2eT*@-a(f!ore|GP9@AT`g9I_N1$=1^a|k?$m@VrCL#A{Ikew{sT#)@| ze1aC^$y~;>u3oLgd8}i~hA9wx&QYf?y(>h&$c~&K5%inR7bu*m(*nAQfQ9<5z2pt~ZQ+&*<*%fZ~xJ&XNIjmJO&w19IZc4H3|Yq(}*avQ!ix zaT-c7WMAqtne&PilWHNQ^w{q$Em*#Xt&!eSP&-VCj%tqyTqnS1u40T_Xd`jsv{V7_ z7L5y*ov!prTAc$q-%iL|7%h~y^pc0UcK`z5F%P-7%`{#>g@(FsQ~hVD~Kc2}AshLp+8d zp7HQA_io?q93JfLoE;qfGT3>0_F`~${A&M5>KXK@^7i1U{{7)G(A(QHrI4^4j@OnG z1+YE(ZK?2VSH>Rh008%g)a*g2ID3Z@3CL7}$S0cTle6Rl7x*wqGNl^DnG#*_HA(cZ zrR$TDh2n8->IqN#mxIFK*BNiuqJuoRr84&C)cIUR5c&!MC0{L+oK#S9C{gltC6t^% zsR9KwbV9;IMri|>I3rL~iTOqW?AI39e@Y- zVKMXO_>J>o|K#NOMAO~}9#)Qie~!f{`Mj~w+W!QLOJ=FUqfPQXdut8yMP+W@$YH-- zX>MK+xt{89?cf6*Wk1b9WW83zJI}cF+`*I<#0+RRx({hb0H%c&mK9THe>#4HUi9i0 zLKGW2pY(iB2=`wk?swiC44&_w?YaMor6O)NxvWM4o-Jp z?C-rj+~2EtH`v`d+TB0Y9~XGRTrnXZCHmj}JyiFFw`<16YBRF3=1OwhHPyPysv%D9 zucIfVwjj>Ya|=7aNbEdc2|L{tu;b3w{fKFp$-iNkugav@Ky9_uS&$#TJKcG=U#%|R zy0z(@TX}E)aR02Px_<9Apxzcul(xp-t;u^<;WaPibpE~)uX)B%wrQHvax^Bqd}R}) zrr~KZE9$$At(wm+KG@7D&^W8w!fl7^$$5TX7PpK}#g)#EsKaAZ)_Kgl{s^v8VxlaI zuS7#s7`BEc3lkaED(U3TxpAF!5XC&Fb=SEfuMW}oaYmOz=|{`YpIn5k5ok`WCzyUh zwSWe?LUucft}z7O#|xxQqeTXQ+Xa(nd%GPv)yvOYgVv_XkAd3q?j%YvL!>ACi%=-N zY)MbN(Tc&(^NR%m-s*H8{qXq7kN^DX=N5T}KRtg7@!qFHo47^VNOwCw zpIpeE@fUVZe~Sa(8LsHxP|bJ`YR0b>2KNU#QNH6Em~qNE3cb>%w=;{Srkn+TaHd^B z!9J6pUql(kyelKqfqJ_y@;JW%O;5eQRPUeN9E{YfW88T#;%PRGZZOdfYt15%!$$B! zU1{37U|f_O3^F+wsEYBBE4V0>(0-xvydgh>A%T*`gg{H!@pv2{fo2DzDVM)q&ru+x zpKqvl^;^R9|2Frmy>0Bce!ssWHG;so)p6T%b`KU)3<}3_61Pd5#?Bjo;n<3;#FpH7 zIFB~}>HdcOWlM^h8O_Uf+gxA~AQ;)y;P;{BoNXE_88paS}zJ4v%R3`an z@3I!uMwb!p6ZRihYtZL?Utxr`;H_I(>qM`4E-BBJl;Sht!$!e?Z7zjs%A@D^%QC$C zvsq8V{^HZp5@@IdZOc-(b!)iTX_4w?Efc7Gc1Z22RtPgBc26&%mCXz=8BP9G;9%ii zfTeSAu!$SUFl*6oVl}g+-%7Adg%a$19?+b1b72Wmz|88ULkxVkmon|?oQ4^w(P+Yt z)Po&c+W^%HnR$aqi@o@rKax+?956~>+*K^pLw&BWwp^vM%+;k{Zi808xV{;UA*%ny zFmO%GzCLf>amuZoMKNdaz+#O+>9{Jfc#Ptv6ybv!B+%-AGCE}ey(s%+_UqlW3Kl;2 z%5`u{iE)KslhqT$jHsjZ){qtKmC7av_bN=^-YEQBLpALSb96#y1yPP4`_(b3Vip!FH zUpvet)N#AYljIZQxRp(?%O&EHc7cu157cxQ-LA-j$SSnqMJKv+JXOnVrlYOV+k>|6 ze^t5PqxV2C-UgXwY8CVi2(R8>V?2ke57%tq%E;@o`mXnG#42mRunPTm0+_9^w)g$e z)4u%ZQ->>5vAO81gi2T)=x-Io5CfGF1=GwHVV zM^Cy}6Uj=v?aF-YZ2W6uF&uIUlk%DkW!C68CVQeYmPT@*-v~5#gA!^c*>K;#T$+2IzVn2&Mp7SU9k#ozomQico;kh7akJh{4n3zb zIT>nZ*0~lfXj8e$xsaZqvX;bTUv}&_lC>hlSUow~fg;h-&bB_axsk;-+(Qg*BPha| z(}03)G`vbH)vsJLP|dE|C8R}utRls_xh8BdNDu&lrR_E&myZV=^*RirWZR%QNY=Vy7A@M= za*caG>Aue{pt=d3fiM5tRvpChXM~!ru#!;2f?A+OBhb?ixa0)YPl>2~5K#xQh&m<_ zb*Dwt0c71tbnfMvf^NyXp&7cN&sl1fpdO;Mhf1|z4C|pacy(FJ&mOF;+r(=LZ!55Q z7z}{9Z^OwNqBDF`!2?u{>mdqJK$YF25XFxZ6r%XCS1R@nZLxQ6#NG*V{gHI$p5zKLKqg$7kj!y8i47?3e$xklLBCBWoOC`#+>-6+42RZ#6>(?c4@Y3 zAqQSSfzQZ+_;H3Dh#%*r9Jpn3;AiAOqOfx&@zBdq-8o=`zU*q-1g*u+9kAP1JwKs= zk6&ffyJI8K`OqzS8oOr4{jHu!9sL2H7LUe<0%AyffV+Tot|YMIS3G_g&;|$lLAQJ{ z8QHFzv0N;b6Q*9YQ-)bTR=9=o1$vaiN)sD8*g1N9z~1hAtlXi$f2M8Q=JINd-`*~7 zy~vP|3j1xxrmA{*AsG$xJ1y|wKUU5NOR@Pq9uMk?m#Dg*N(Cv73?Ht6i~vPFsqhwe zzfRJ}Ux0XfTLiMSni-_ExQig!$vXx2;qyFeiCD^CO82W|>(V`!Ebz+2@?|2H*HJ8U z&%JumCu;~0qxnY%)aUmVb{)K8xcctB>qZ4a6Avaxjpg%Z62RCk9&>w;ZAF}x8JUBM?Qp&_Q6s6 zuzA=`rDoi%LN8IO`(AcI@;$uFLAT`%>}R9-EM7`spOXvi+=5j#m0iB#=9 zt!fXfKHTQ|Fs42XR_enol$ro92H`L=Oer}^{Ula3hWb4a1{D_YDJ%zld^)s;Mjof~ z@BeE+vY7JTvyxEmqzk{vtNxVU7Ik9JikDT!tZ-0{3J2v;56UFRV{|vl@YpGf)>7wN z61>o4?m+z+u3JE73~{D4GGnm|WAWs<6OVN~ckZ!~SGrC55^s~9 zyjaF`aIQ{it{&D;Tf4AxG(Nt2?XzB|wcXsRlXEsZsvkD@JBy}k(_-}&F?Mqm#*WM) z%Q$W7)gmO>MZ#UvguAwAcWdF%&P}-o!t7?HDcANEd1+c0q(+B*F2wFkW7oB?s}n9= z?^PUtp(&ee?7R?*uNsT(9H*eyM@J0#P2Y1ane5NS2=Q2Fv%cgL-*8-j{(cQ)cS;7v ze#T#e(DQ&Vk1!F^jv=k#K^7~1jL*a!`0+!t&NbWD6DYv|Kpf;Sq!t~3i>y57x-mUl zo>NKAF-#t-H~YxtchQQp-)wYyAm3Zvi$X3wwCHnB^f_FKSIEM@m_&CdEG-Ne4-z8X zB}9^erqW5CN*tf>Gn%v)FboxEr3fU?9(9#k=htMJ zZ2WB{k(Wm|?U?QtqdOpUcP(_k5OTY(BLhqETH&V1vOX=o6;W2(T-#Yzcj-)7j{FMK z8raEh6BOiX)bVSS#%`m5(w@R|@b5W%gm zOX|wmN?kdB&8|#}yE3D$tmn`Vgx(C|Di7j{R+Bw}H+7%TyILemd@2t`AmmHT=b1_# zBys_H#X10my~CTf>(p`BdM>Pi4|7o!D5|hUj}Nj4LAzmjR$t`zwnbfb0>Mmo_4zR% zmFgXuyksVAM|lmaiYJ)apJy_JUm+&pb*wm zo<8=(X$_r;W{pNBbr!Rn(dBxXgornXLc22Lb3m|6fWAnGj&M(4n0d<|yl z?9dD*MNSbgW4c0%%tp55x+og7c(hy|2YqwsqboL<{8U9UJ_sFjVL=$A76yo;=*`Zr zoZ~;2O%6>4z#V()JKHhqW4dN?!C~izjCl+o1lt$xvtS41tbLQP_Hn}6`v~DqxMP|z z`n*81>&C{L_v{cTjz+V!dSXJq$6IpjB+oq|-h$w#(?qB>LY)2!rn}Zgc%MKA2K+L%(q?{8(=!H@%{TtdpLp1(k=NgT#!ZkrSBaf5{tHjp2-b5P=l7oSs z7oYD`uFb_iR@r2i#Y5|ynjU<^9;{Pac=H~~75Y%sx|$DDFi?dhVxLV=VhT#w_xVwe zDJT+M@kfnD<<*C{x<2joopqGXNeF>JrDFzgr4Pr_l_-ROR2aiuxtD?|<$6$2m6B>F zA(c=usT4x!E4OkY`QuEl?rRi&kRok?aI7#t2X#*IIk>Zn#?MhZ44f}oAHdPTSQYgE zjmUu>(Il7$no^5Om^dDgJPKTh+6d=5; z?5Kcqt*|TrCZ?Og)45gXKZl=9I~vPaF`Hh_Brb+OQSWmABO|@*@v!t#X}TC-oebL( z{m>a5WaFuFeZ`u}9Vyl-p9mMpM3^QMp@|S~l)Ht`Kem-?(dWB~=zrBzwJeshd_@6% zpxk}M?o`=n^8rqiL!}k{{r2uwyZxoeOdMsQX`|KbS27Bg zR$s*&Xbn=SIq*@XH(sYSbdM@_E_)b9v9k2Zw*E3NBjxXeq;8A6unJ6v8>Q}bY-rFo zzo`{2UZkARbnDzS9k=U6jf$j2yg`t7U;ID#s4epuLsYfL7$U1Z#tpjKS=@M(g|>rv z+NJCP!#O98;{2t0sy5k<#n-zz(f5VOwX+JRukET;jGRk3HsFOU#yQ!SEqu3f_viyz#rS%J@0nU|(i7aW;VFyVV>NFmr$6Dx~LH*E`AyZ+gR@vvVR_TSYRw)odSWrt2p^lF<>4$C@GCwR^ar+2j z5LzxlAvpkrtN2Mg@SA%PbY`4u)26=(xn1xwB>`|vCt8{8@7HTWJ_6Rpo_5@zEmHt!&QP4;s zfdXQxlLwxdVZ219--}NrEuX35ux5=68(8x)&Z04b=~j?uj}{vjmB4XhlcF42FK6kj zNEGx)6bwT&t<1x`O+?L{Cysp<{@Ce6w+NgOvfUF+s8b~d+%|c1Ld#T%nGL$qulMQk zkVC=IqJlOtpzL%(*({l$c(c5ChJaAG1%;;})G6~Dp^)#~#5Y1=auXJ8ZBql`JZW(d zb66+La@Z&=;4r`=%VB^Qe+;~SD_6LM6T2O{^N>Bjd$T)IpX>C#T5%L78Fhi*>4 z{S2Gfk7XX-#!a42l@o<`{*Zpk`2}{4^YTpeI-B4`1|{LhgwE2YLRV!gm^Un< z0zo!E48$bLJkHfdwW>Z7Q2|fZZa{L;<3XTAll5}H7$u1 zD6)mE_SCGXG}&|0g>j`0XvASpj3x!ArA$8M3kKs0=0Eb}+r zsHlP77>fzMLWM&RJw;#B@4(xadLS>ML)3B098+D;Ijh)a)HA7YggzCFbrn{!Hy<_^ zjaF>E+Sn)puu4t#<~`b6U}ub01r-KZYuRLD|Kxvd#s>T|<=t}+l?^j8%8T*o4~N>6 zy>BjdRV(_f7<0?~setTimeout(e,t):(this._twiddle.textContent=this._twiddleContent++,this._callbacks.push(e),this._currVal++)},cancel:function(e){if(e<0)clearTimeout(~e);else{var t=e-this._lastVal;if(t>=0){if(!this._callbacks[t])throw"invalid async handle: "+e;this._callbacks[t]=null}}},_atEndOfMicrotask:function(){for(var e=this._callbacks.length,t=0;t \ No newline at end of file +this.currentTarget=t,this.defaultPrevented=!1,this.eventPhase=Event.AT_TARGET,this.timeStamp=Date.now()},i=window.Element.prototype.animate;window.Element.prototype.animate=function(n,r){var o=i.call(this,n,r);o._cancelHandlers=[],o.oncancel=null;var a=o.cancel;o.cancel=function(){a.call(this);var i=new e(this,null,t()),n=this._cancelHandlers.concat(this.oncancel?[this.oncancel]:[]);setTimeout(function(){n.forEach(function(t){t.call(i.target,i)})},0)};var s=o.addEventListener;o.addEventListener=function(t,e){"function"==typeof e&&"cancel"==t?this._cancelHandlers.push(e):s.call(this,t,e)};var u=o.removeEventListener;return o.removeEventListener=function(t,e){if("cancel"==t){var i=this._cancelHandlers.indexOf(e);i>=0&&this._cancelHandlers.splice(i,1)}else u.call(this,t,e)},o}}}(),function(t){var e=document.documentElement,i=null,n=!1;try{var r=getComputedStyle(e).getPropertyValue("opacity"),o="0"==r?"1":"0";i=e.animate({opacity:[o,o]},{duration:1}),i.currentTime=0,n=getComputedStyle(e).getPropertyValue("opacity")==o}catch(t){}finally{i&&i.cancel()}if(!n){var a=window.Element.prototype.animate;window.Element.prototype.animate=function(e,i){return window.Symbol&&Symbol.iterator&&Array.prototype.from&&e[Symbol.iterator]&&(e=Array.from(e)),Array.isArray(e)||null===e||(e=t.convertToArrayForm(e)),a.call(this,e,i)}}}(c),!function(t,e,i){function n(t){var i=e.timeline;i.currentTime=t,i._discardAnimations(),0==i._animations.length?o=!1:requestAnimationFrame(n)}var r=window.requestAnimationFrame;window.requestAnimationFrame=function(t){return r(function(i){e.timeline._updateAnimationsPromises(),t(i),e.timeline._updateAnimationsPromises()})},e.AnimationTimeline=function(){this._animations=[],this.currentTime=void 0},e.AnimationTimeline.prototype={getAnimations:function(){return this._discardAnimations(),this._animations.slice()},_updateAnimationsPromises:function(){e.animationsWithPromises=e.animationsWithPromises.filter(function(t){return t._updatePromises()})},_discardAnimations:function(){this._updateAnimationsPromises(),this._animations=this._animations.filter(function(t){return"finished"!=t.playState&&"idle"!=t.playState})},_play:function(t){var i=new e.Animation(t,this);return this._animations.push(i),e.restartWebAnimationsNextTick(),i._updatePromises(),i._animation.play(),i._updatePromises(),i},play:function(t){return t&&t.remove(),this._play(t)}};var o=!1;e.restartWebAnimationsNextTick=function(){o||(o=!0,requestAnimationFrame(n))};var a=new e.AnimationTimeline;e.timeline=a;try{Object.defineProperty(window.document,"timeline",{configurable:!0,get:function(){return a}})}catch(t){}try{window.document.timeline=a}catch(t){}}(c,e,f),function(t,e,i){e.animationsWithPromises=[],e.Animation=function(e,i){if(this.id="",e&&e._id&&(this.id=e._id),this.effect=e,e&&(e._animation=this),!i)throw new Error("Animation with null timeline is not supported");this._timeline=i,this._sequenceNumber=t.sequenceNumber++,this._holdTime=0,this._paused=!1,this._isGroup=!1,this._animation=null,this._childAnimations=[],this._callback=null,this._oldPlayState="idle",this._rebuildUnderlyingAnimation(),this._animation.cancel(),this._updatePromises()},e.Animation.prototype={_updatePromises:function(){var t=this._oldPlayState,e=this.playState;return this._readyPromise&&e!==t&&("idle"==e?(this._rejectReadyPromise(),this._readyPromise=void 0):"pending"==t?this._resolveReadyPromise():"pending"==e&&(this._readyPromise=void 0)),this._finishedPromise&&e!==t&&("idle"==e?(this._rejectFinishedPromise(),this._finishedPromise=void 0):"finished"==e?this._resolveFinishedPromise():"finished"==t&&(this._finishedPromise=void 0)),this._oldPlayState=this.playState,this._readyPromise||this._finishedPromise},_rebuildUnderlyingAnimation:function(){this._updatePromises();var t,i,n,r,o=!!this._animation;o&&(t=this.playbackRate,i=this._paused,n=this.startTime,r=this.currentTime,this._animation.cancel(),this._animation._wrapper=null,this._animation=null),(!this.effect||this.effect instanceof window.KeyframeEffect)&&(this._animation=e.newUnderlyingAnimationForKeyframeEffect(this.effect),e.bindAnimationForKeyframeEffect(this)),(this.effect instanceof window.SequenceEffect||this.effect instanceof window.GroupEffect)&&(this._animation=e.newUnderlyingAnimationForGroup(this.effect),e.bindAnimationForGroup(this)),this.effect&&this.effect._onsample&&e.bindAnimationForCustomEffect(this),o&&(1!=t&&(this.playbackRate=t),null!==n?this.startTime=n:null!==r?this.currentTime=r:null!==this._holdTime&&(this.currentTime=this._holdTime),i&&this.pause()),this._updatePromises()},_updateChildren:function(){if(this.effect&&"idle"!=this.playState){var t=this.effect._timing.delay;this._childAnimations.forEach(function(i){this._arrangeChildren(i,t),this.effect instanceof window.SequenceEffect&&(t+=e.groupChildDuration(i.effect))}.bind(this))}},_setExternalAnimation:function(t){if(this.effect&&this._isGroup)for(var e=0;e \ No newline at end of file diff --git a/homeassistant/components/frontend/www_static/frontend.html.gz b/homeassistant/components/frontend/www_static/frontend.html.gz index 41c7c071ac75a40a401361571b9fd1358c21cd49..e1c641e3169560539be5957dcd7cb747ecbc277d 100644 GIT binary patch delta 6526 zcmV-^8G+`m!Uwv-2L~UE2nc~kwSfn<2LWEPA@Pt+Yt^=UtP8)+a?jqLTEQrjC8^pZ zi_0P{d1*%6uerB|vH^nx0biF2w*mbc-;Pin$!=$3IBv|ltCSzTch6(!)T>X$|0uU1 zxB(*r0o}Jny8&?l0Ry+UyaBoa0lBwwz5%ra0jjqs!vUTF0iT!0!~rB0zyDIu>nsG4 z6)DgAob;$@(`weA{vDSA#Q~B5@3)l20SW_us=XiSs{cs2Ok#i@H04pual5c-uRg#^ zHpN}PzpCejG!Na3|Kbgkp(V{Qus|HCar+B9l7TcgJCp7k@<+zWZj7fH zk$x){RQu7P+^y#wrG?s!U+UXj5xL&Hr{k3?0?kB~-X9fn?;lj0CtvB#KI>!E46qx^ zMLwl7^Hjk+w(uHz>wX={rjglS`Fx6hrS=w0OkzmYO@Yk=mqYHU^G z{yw`4n^>xb$=^dANl-%@*1tVJwwo7w_Q0QIi(SXuAQqfNId_QTrDYsm&F}Ku=Ijld9JGc)mPX!Iqp#-ejyG0+B-^{s zXp?jor1_0|NZ;7X3t3}#HK)$Fz&HcY|-p{>#@QbqLhUcME2w1m0gil}s-VE)-j`A-SAdPu`l8n)+vSA7Hav*X}@S`~HQrFuVIZb>w zCw?E%bs7gY9FEA5jRq`gU^kh-T9bE)-kM+{Pwqhk+s0I$-HD2|l0=)H-ieZ0WlZJg z!#h#o6(|@ve0FylFi(kp$l=k`dvvc@yMmw2;oXMHT-k!F&XcX%h6bUi;{t0Mo2^`( z#tu-K*A9@vADYb{Yc9@qG8bpbd2Fs?vJ0zcJ1BO2!j42z`E8Xp4DaF|jJlqJugH1l zG=pNIjE{SWk*c2x1&;RNVi<5l6$>1pt*AtXnNvyLV_!;f>qy*xi-uurVDYDTM;11K zSUe`B(P4Xw?p|pXvv#h{Z95a1r&mB%vT61PGBjnh6~oXI2(YP*&w58YR`%zv_zUKN zq9;XUEwNbWmLl(9fs)XmVGrk4q@c)vM^2GJ8M{qcdQR`KV5xgu7fyfC+q0~~-@mii zsq=O>1_oyQFCF-Q*YmA%3wRUqRM{r~d3KR3_BL`NOy5?2@F{1&8RA5obh-<=Z*fk| zzKf8z)rP7t6bY!n(JZ=qrV_GtDz)7b4PUCiw52JdX9P{+LjP9Gzo74*s0M+6vShF0 zkhWbagTyh*M)D(a_6$_O`8+YvDCN|_0fYW(&k90j$J&~I3MJm?z^r!n39yDW;R^`w zF2X*;R8Dm>CP8N1qmlQ`^Um?&F({VZPOoyX33y^1?>V+k$_CBX&_Vh`A^071i`}>#U>y!U>^6Lry@5N0& z-fqq<8Fy+I{5XW7kO(22pHKew+Y{^7>G?0Ix=Mna5(qkm_bc9#oRLtk1~4r{*S!O8U4k=zt9<8QD}^jWjDw4fPK2U zIYIkA2sY?;*S^0uqGVRv>$v+zIwo|G=S;_c1;nVS_;ul5E9?OYOy8m2lldgVB0JQK z52HghWBQIYV-XJodNq2{RU-rNpme*oKax{BQznbc)Tky;f^z1j@B4pCW90D*&^y2@A~-7cLgr&dShc`mToLDmXP8`R`L~oVS%@ z2nPXR@|?5mpd7pjP&5g?36Q&&FFKC&|BWqPE=<*l^-FU(WllG(^EcZN+eB)A%Zo!E zl|GSsX!%+%U~(Z~@`n;I+#~4Syq$o!{+bSdw9hLWXiTqFiFQB^u+n!`!2`6?gxO9Sa4$^EYiHVSs8J>qRs<22M2q_&Z29N?*K3s+U+Eo zk^zws%q9?(94In@Fs2;bLPd?nxR_mcLL&>hyxG%uyH0y8a^IoHWJOzl^qQHKd+uPn zelrVtohEs|Z;#oFCl0z2#$hkLutVN^N$?Ind5W3)y5-re`q7?w!H$(OYp2fpEu9i1 z-W~c5>bq~RNtS>I{qBwYR9wdpmzB#{bDZrXkC=LSKwr0r*3K7|rk7 zgE5BNDYT!5Y3A}adJV*Xwru6{wziS_^FIf0k`(HPKZn^8H{|`=I`F(`m59eFsA)+F zv?Udgb#{5ZCby(O62PXh3F9(x$8~!Q%uGhGs{*pjYJe=ETAavRl#>d77Lv^D?j$?9 zAIuYW7{af}j(FRvNVE>@n(UpE>$4|Gzb1dUZk@;Az#;1Lp=GOoaPd-;qhFD)!cmI8 z8}%B5q>t^7_5pO4@uO{h0u5-&Sjoa9wqQYHrSm4Sqs%3-QbLm0*kyMCFI5gCw%16n z);Gyu(DxpCosDPcY~ur*TKJ`F#bi*`y(fpV)9TsNUAvNhGGpEz7hp%CA8bTCO;XLe zL|#Sa(|YE@xTPt7vFGegci~RTp*u3CX6s7+$*hHBf50;@MzB~6K}N3dXi}?YRZjAa zE^|@_*0U~i0qgQl%Xcoc``xnz_PX8J4qKkqx5my3ZL$-rmbv@sJzJ$E&SqyuC8g_I zqw}F(qxvCQ;T3W$ql<^KhO#n-H17lfY}-&b#@V3L%Y&Tv~@B zm9J)nfIX1$;d=ksBJHGmu=Yb_In&==A0;(gXB#F&?kA@zZ34 zI$d`4O}@Bpp+7htb15ppESvISoU?#jozh|a`f$q_q%h=xFr*Q5B~#?5^ud^gzVqnatkLOaeMc zQ;0l&-3*uRqT97X4!@&oQiRxt8TNRt09}>!*i&E~qnSAP*Tr%?`px*TD=Y3C0A>QS z;B1kOv(3ERZ0H#2Y8Hqw6)4;Y^t9onPL6nTvQ$;1Io5gg+VSRG_4D2^rtM$aS`f9l zhF4>XoGxE}aH8>`F0foe0XO|eZC>Ao<8%st#l+1GTC=Yvy?p=naR79P3zwR8QPd?^fxa5+FCk2WRvqt}asA3(|@!^)W*OY!!4|y`HF| zUDI=!I^&De%!Y&wR`bLMq;7UKj+mJb1BZB1&sJZLYgqASXsG5r)vK!e8?`Td%2KU= zd)d3AjBhA-**mej5P`UgorC5Ez<=nMA*ew7ymm+B*S#(m(M36&y-;9T&-}SVD6Wu2 z!l`y_O_s_yu_xATbk?w-xSl-oLYWdSD?O>oC!Y{ijG8LnNu+`dd!}vFUwdXP& zZj2^+<`-!gL{SkpS#QSXfy6IsT6rofFs)-#-LmiBr?vYfbi$rA(-|z9$^-R{+}7~* zJtF*9vl*tXSvdB$^saKVv^0X+jnKgJ!uxn@18lb+f5zAI10w{EzPb;(EJ_DOovl^E z85}{TF+*A5ulTR&Y&QPZXtnr%(z>Ouv70^j8{c#r>0B3YsmssTpb&c>kr6*pHoB=c zZQj%G!VPbj!sAjmp6cM33P(?I!wfJ+nVPn%Ts~4;7(zb8&bHPPJDD?)VM=b1vHbz_oWfTnzs>1pZ4%Dh<2R{<&x$~Qly?jYX8O#_ z!0)6R1zZnSGGLpCDL;V?84i$Io!cf_*w%okAw2`mt8)kA52V8@jDudGS=inf*l!}p zXmy}Z>9Zl!5EUBN(LwBr!=4&DZ1?tX-glGVF{-s`JJ=l6TDJUtl!1yvnuua}>590L zD#oxXXF`%wn!Q7Gt3RiIbBqyFf5s{EQT93AA)eWmK@mAkD*qIBoflT9&9Zb5J4*Zw$mff5{ht50m0Qz0@^GWSI8F z7`R@UygUJ3w&DMCF~^8|GU(v!HY$rToaFyY*1><)+N*8lgf8rVtQ`Tn^7f{#3@s*%Vd@nMDoVG3;`(g(0>y&D*1m+5l6Q0?WX13f&5UCl9CRZCQxJ;Q%g%?InA z+pIQC7g^1!vIVsj*U*pJM2Zg0YJ)W=VzZtjv%IdxEdm-*q6}D`g<+s(*sZ?eaG$kQ7WD4ON!TUbj~aJv?B zh6gNOtb>v`Z)uNLiqk4E3v}xFx%^vHY)lp47ickVm5sxHOVdztiJ4xEMSv7tOP{Yv zO4|e>7Xex}3_W2sD;;&fI@Qbh8b3cHn&S9w^$9!JZg%69P-Dnr*&tSZaOrIt$odAZ zmE{~?TvDLR4UH8Af?-W7S}cmtgj0r#K+6r~W#^IN#jf;j@pFrT%WiWrB*6e~*P1uQ zRrG$jsA-0O=@#vpgoMn9rH)^BEz2lYAC~2{MvO7-JQ* zYJrYY=}Bzps{#!TO0$j>Yd7Q7Y6i)cQ>Yn<)>Tj|e90f8aY{*x7_mjR%~Es&x5U;j`6q_&WT^9&~C_iaQN4D2mU#z z&xtW_U6~zb-P|fn-s7t|=!*Ov+|1L4sWZucL6e(!evv7Vv4iZIYqIO#2y=X@Mr`)F2uJM? zP=XiGhJdmL0s66FyRSp9A7QXr44iu+U1S@k2H)&W_xJbmUULDtW+}Ofu*<`Sa>=yS z!m=V<7B-INMI&!YI}V;VDggY3d{QUplMI(M3H`PV?&ZDHDYn8HA_sl@3 zaWGzjqhc<-h8eXJN8)341?!1Dt{bkqFn8Bp)?8eJkdF{v&ISyKLX(A{dD}Ty9bkct%?cvi>c2IJ9*1&M!S&U$rVb( zMezoe4R*yEcpx_19g*sYp;n@17sGa_)*N`08O&8gf7|NSAS|ouZELBnZd95 zAcw9bKlbDJ1EB~)pD&g(n2=dyauuPjfGSBlw#B*_6dv8^G6fB3)Q&;qPD|Jd+8K?d zMEl^`Y?M~6}r85w$L_W*pcZ{!Q7eEo3yMdEMD4XfhD!eD^99QKaTewnd;hV_ z=HDXvcRx0qOrmFhMK6<>KLN`yKVf%=Hr=aRl=Y_+b); z1>-kNen+Vd{+L8~!+OSlx+($4&a)Es!4ed_mWWo{QGkK?>Ux%mOA{fc-=;GIQm~bc zu4=MTw+hWTVrJ1gpc&N`tzbWkqM~bOFuWxh*N{lSfCXz67T9=<=0=fB5rwJ4@PS@2 z{)*jY8n+DPmcSRpr+L=8o)G+cb=S27oq5=^8FZL*63&c&e-KdAF+omk%BlW)V4qZ>h9nVSud2ruDQ|JIByV_1c(RCg4MNh3`8V9RT(r{F{u!iK&=%`3HTV*WJ^gLdTtYEFENN z!0}nx^dx;3YfuRgD}!nodNG$L7cKk>WOqfm1Iokkqz~sGVPB>MGFPpFc&~) zv4As-U0TdhG!uQzPN(_eZF$u&w{W_S{Cz$?L&r{iz%m4KrDM$=de&rqohI>OrfJ*W z1!N4X+kmZYw#GU-CKq>>;r@yZiEBTXB^YYz+A}KSFmR}UNO{tWcR7+_;sK1i*O3Dg ze`?^FhW+#tG8>irL&WXV)!5SO&VnpX@bs_FRIn1M(k`An*7uWdLQ)t7*9jB1%|N=v z+uY+9YSI;L^gq`A0WTGuwWugaRRhwFL!UkOHSuVoYFrFIG#4ViFmT=rGh&K6=#@qG z7R=@8(27n?!{>pb?>QuBz8ptxK6J8k%WF8lz+nCWpz-|w0Qg4O6=0PI0Nt$D4*&oF delta 6514 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 Y?$ZBUjK1MA1RBr(50l`&S2mRg0QWh{kpKVy diff --git a/homeassistant/components/frontend/www_static/home-assistant-polymer b/homeassistant/components/frontend/www_static/home-assistant-polymer index dd6ee9544e7..2c61fb2b72f 160000 --- a/homeassistant/components/frontend/www_static/home-assistant-polymer +++ b/homeassistant/components/frontend/www_static/home-assistant-polymer @@ -1 +1 @@ -Subproject commit dd6ee9544e7129b1735fe2377311ff2e2b7449c0 +Subproject commit 2c61fb2b72f422155dac4e7308181f7f7f845f44 diff --git a/homeassistant/components/frontend/www_static/service_worker.js b/homeassistant/components/frontend/www_static/service_worker.js index 40e47f06969..58c4b528f05 100644 --- a/homeassistant/components/frontend/www_static/service_worker.js +++ b/homeassistant/components/frontend/www_static/service_worker.js @@ -1 +1 @@ -"use strict";function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}var precacheConfig=[["/","9a5d0507bd1f13e3eca6b35abd4cbebb"],["/frontend/panels/dev-event-3cc881ae8026c0fba5aa67d334a3ab2b.html","e22ed0d2d10777c87eb9620d81f525b4"],["/frontend/panels/dev-info-34e2df1af32e60fffcafe7e008a92169.html","7e939dc762dc0c0ec769db4ea76a4b09"],["/frontend/panels/dev-service-bb5c587ada694e0fd42ceaaedd6fe6aa.html","782c4860c5e8ab274231ba9dfd528f29"],["/frontend/panels/dev-state-4608326978256644c42b13940c028e0a.html","26758b741ac1b7c8e9cfcb24762d8774"],["/frontend/panels/dev-template-0a099d4589636ed3038a3e9f020468a7.html","99114026cf9193263c74cc25f9f6a469"],["/frontend/panels/map-af7d04aff7dd5479c5a0016bc8d4dd7d.html","6031df1b4d23d5b321208449b2d293f8"],["/static/core-b4ee3a700ef5549a36b436611e27d3a9.js","e2fb4f1dc0d1e8192a327b51768b3802"],["/static/frontend-411fcc6c69b3cab0740ac3db4b9947c8.html","5967b9cdaeb14753552c2461805eb397"],["/static/mdi-b399b5d3798f5b68b0a4fbaae3432d48.html","819d479ae2b690589687469045b22c26"],["static/fonts/roboto/Roboto-Bold.ttf","d329cc8b34667f114a95422aaad1b063"],["static/fonts/roboto/Roboto-Light.ttf","7b5fb88f12bec8143f00e21bc3222124"],["static/fonts/roboto/Roboto-Medium.ttf","fe13e4170719c2fc586501e777bde143"],["static/fonts/roboto/Roboto-Regular.ttf","ac3f799d5bbaf5196fab15ab8de8431c"],["static/icons/favicon-192x192.png","419903b8422586a7e28021bbe9011175"],["static/icons/favicon.ico","04235bda7843ec2fceb1cbe2bc696cf4"],["static/images/card_media_player_bg.png","a34281d1c1835d338a642e90930e61aa"],["static/webcomponents-lite.min.js","b0f32ad3c7749c40d486603f31c9d8b1"]],cacheName="sw-precache-v2--"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},createCacheKey=function(e,t,n,a){var c=new URL(e);return a&&c.toString().match(a)||(c.search+=(c.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),c.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],a=new URL(t,self.location),c=createCacheKey(a,hashParamName,n,!1);return[a.toString(),c]}));self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n))return e.add(new Request(n,{credentials:"same-origin"}))}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching);t=urlsToCacheKeys.has(n);var a="index.html";!t&&a&&(n=addDirectoryIndex(n,a),t=urlsToCacheKeys.has(n));var c="/";!t&&c&&"navigate"===e.request.mode&&isPathWhitelisted(["^((?!(static|api|local|service_worker.js|manifest.json)).)*$"],e.request.url)&&(n=new URL(c,self.location).toString(),t=urlsToCacheKeys.has(n)),t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n))}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}}),self.addEventListener("push",function(e){var t;e.data&&(t=e.data.json(),e.waitUntil(self.registration.showNotification(t.title,t)))}),self.addEventListener("notificationclick",function(e){var t;e.notification.data&&e.notification.data.url&&(e.notification.close(),t=e.notification.data.url,t&&e.waitUntil(clients.matchAll({type:"window"}).then(function(e){var n,a;for(n=0;n|{D)TQmsX$GMMl0dLd6 zsIzUUtT!{8TG_IxM;+J~=DAQy&~MwS^C9@ug59+B2%?X0*ZDzYmr(n=4~{mh#QNzM zo3^?S?$3W(!|mubSX{wvdt2(pmZns~{pZIUsO@u6RZ^&rK7=;-WXcv^Zo1`u^^@qo zyR^~p5Ncrs{_jvuU=I>s@+cy{@*7PCs-_?Skv1Zwl_;p*P@21n`*e3fQ$JgRw~b_fSj;Y z5hFz+M4IV1<{}o7$sPsN1B`(tnrTY1EJN`iilT~g*e295MWfQm@$kP|C+2{K$n}< zR+s^bA)y(`XrY+F+Da2b0h@r-fU>_P>=i6Fm1wupgo;gu$(%?jOhSv)2uTwma}7C$ zTOCR(UEiJ>apN8)v|zvC-)LPgP!6X>fpN|eA~Z;3z_5W)DWM>g(kwYEC&GVRN?^Gs zQi}|=f^!QbRTAT<(gN$}2%>T&7SJIPwEF!Dp%L$~EbpLwFBe;DM9f)EHB~f^F>SCs zQ_j$oA|{YhAr7V8f>h0F-PG89yGd1AB=)i%%0LqAk3wVJX1q|GV5+59at47ZbS|lP zeI523@T*wC-0N;9J5re3u*t-`@H?nX)WV`f0_hp%yOWiuQwAyF2^?rIC3a$T&gzV_^?x$MAZ}W#4!|}2sCoy+4`1aM$$XByr z>_B=#wiVG@*kz5X2#G@?yS!{LUMD4u%V;RiokUtDm0l0^{4@!kc?f zy%9kWsv~pD?j`#2Zi%6+5M|Jh@F|V&1{K(jCBb0qGcr2{&IWr-X8X~uYgX{oNGGDP}+dVeD|=86%C>e=NIcEQo;H8bGv8mxgpe)6>5HJqm6Ln zXzw0g+1;yW*twv?0riSp2mL5}R@aB7taqx0XEg0m{wzhe>@gV1iRwiX1zSDyM8YJ*(Fttn0h77u{e%;;h|*^-HOt_t!-KPy$4-{^MsfaNaC#hh zv~?e$(aW}3l^sN=-v7RB#a)Cnyz(ER8Qq9#19*&i6hYBf0frf2a22!HgsuBnuHPXdLo&Dz!ZUEXbIc8f z=@`!;(z`R$SqEqT2kvJMd*Vs7#h0LTXTJwHue{+<<6Yyn--DH^N=HNZE6UYZ(CSY} z$55dm-rs(F{=oI0 z@i6(>b%pBl_H^?8wrM{?i){aSCF;^RS?*Yf^%DH~PdFwVLDCcDzRRdbUFNWBob@QQ z?iAcYhwP=_m3H~ZQ*|Jk$MP4@Q{jDZHSH6|KVXeLU{w)+g_8no008Jiu-Zb zBM&zs!Iuj1@D>FN*$th~p1RBGXP2;^VXk0NkeT?)ZlIcpi;DnTQH{JTke8i8tX5R% znMQ3oY!0J(*CXqwU-N?*ez7yd6~nt;^={kg8~=}m1Mxc!#}@;EyZboY2ebbHjt;O^ HITQc@4%&EV literal 2012 zcmV<22P60&iwFpyB(PTk19N3^c4=c}Uw3bEYh`jSYI6XkSZ#0H$PxZ43ei)@nxglO zFB??|uIZr&n%o7s3-TfL8T&FTF`<<(saSpt-a~W+K*c3esQmqS%Ce}RBZ^+*9N+E<42Huftxmrl5PP$+-*2muvDw# zFV;=h6Qyol1Mhea{iFVQ~6T%3lDVGAHW(ANtKP=1BLg#`i zLp1^i(m11;=#N*LTIKhazenRsgR0iTJS8R6d1Bh$>ei8u*+%TDCXQ!D5zwL zvs|Y%&kD_vng@1w2bc&-oiUloq~=Cxk_(~?N4jV!1wy@xI+aj(~XJHGK zOB$G$sA8&Dl$Vd5B(14e@FEDJxSV^eQ53azszHk#H0@i}nMLVQU(SDDcgxH3i&$Cv zj}rZKb#wFDTliykFIRCFeeK1`&w9Q3@cs?z)pVm^C{MH5%qJ_=Ej(IJ+6wz~IHA#a z9Ns@Zn{`p_ldk?1b=S|s=v!wF>? z(J&RA^!2$e{m#|q9z%P;pM`1{0|uKix!kLhAjY|?{jJ`Ss~ymIi{1{$t49I!&~>vu zz}Vx3Vp-g0E*^@ks?AVf$dB0}g+p~16SDXj-J$9HjxUIXFoDXu2tE6@LgGj!wK31>)VHSjpFo-`FOH@u=FlNqjyccEL%v>efVS3 zsG9_3co{xGGr3aL8gL?hkU>9G0j3#Y=quEGC)xHQ? zjDJ!$<-GI(0yF$P8k+acgRr$<%GF0iWJ892Lwo{Gh1;(%O^0}HGQAtWPabgkf8c)N zyTKnt+dlF24hn1MD`3IAIjQKY#iy7+PDi$zOtP zXHnZNh*&8nJ5zYS2aoWS5=GN)_Am<@8VwCp&9E#`lr}Tj^jS9^t6pGck7O(CwIe=d zY-7#LP__mmW;_l&&J6ROActo}Nf?hGb^Y*D@Ov1(d=_qm{#LEZ+rA}Kx7$yX%j>%N z0u4(2?Na&D^|n5@*e{|a`s-hCMmT_EP|3R%V;;1a{g!d^L@^$tx7ng}*^gzn_}_WD zQJIJK=P>9X^2-eGkMxUv=Blf{Mj9VJe^sw5>;L_{8}(SgXcH5DY`eM{1wXXGsP87D zA*2_hAAWg$hy`j_JTUN{H3MBw^L4du7e~q(i`J^H=Lh!k;daOXg1BGJM@FVaef@LY zm9E_2AEIEDUDb=~Q&r>lwqUiHFULdLU$%|!$ip584E(_xQ`IdDBsj5ULxR0lwXOOg zvp-^g`P$v|Ot6?7T6 u+N@hF&5_!*CzTA(!f1*+c472X{5ZJYEqnYX9I}nS)Bgh1c&Hko5dZ)>6XA^j diff --git a/homeassistant/components/notify/html5.py b/homeassistant/components/notify/html5.py index 33ebe8e0c0d..6aafec8e120 100644 --- a/homeassistant/components/notify/html5.py +++ b/homeassistant/components/notify/html5.py @@ -8,12 +8,14 @@ import os import logging import json import time +import datetime +import uuid import voluptuous as vol from voluptuous.humanize import humanize_error -from homeassistant.const import ( - HTTP_BAD_REQUEST, HTTP_INTERNAL_SERVER_ERROR) +from homeassistant.const import (HTTP_BAD_REQUEST, HTTP_INTERNAL_SERVER_ERROR, + HTTP_UNAUTHORIZED, URL_ROOT) from homeassistant.util import ensure_unique_string from homeassistant.components.notify import ( ATTR_TARGET, ATTR_TITLE, ATTR_DATA, BaseNotificationService, @@ -24,13 +26,13 @@ from homeassistant.helpers import config_validation as cv REQUIREMENTS = ['https://github.com/web-push-libs/pywebpush/archive/' 'e743dc92558fc62178d255c0018920d74fa778ed.zip#' - 'pywebpush==0.5.0'] + 'pywebpush==0.5.0', 'PyJWT==1.4.2'] -DEPENDENCIES = ["frontend"] +DEPENDENCIES = ['frontend'] _LOGGER = logging.getLogger(__name__) -REGISTRATIONS_FILE = "html5_push_registrations.conf" +REGISTRATIONS_FILE = 'html5_push_registrations.conf' ATTR_GCM_SENDER_ID = 'gcm_sender_id' ATTR_GCM_API_KEY = 'gcm_api_key' @@ -43,11 +45,58 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ ATTR_SUBSCRIPTION = 'subscription' ATTR_BROWSER = 'browser' +ATTR_ENDPOINT = 'endpoint' +ATTR_KEYS = 'keys' +ATTR_AUTH = 'auth' +ATTR_P256DH = 'p256dh' + +ATTR_TAG = 'tag' +ATTR_ACTION = 'action' +ATTR_ACTIONS = 'actions' +ATTR_TYPE = 'type' +ATTR_URL = 'url' + +ATTR_JWT = 'jwt' + +# The number of days after the moment a notification is sent that a JWT +# is valid. +JWT_VALID_DAYS = 7 + +KEYS_SCHEMA = vol.All(dict, + vol.Schema({ + vol.Required(ATTR_AUTH): cv.string, + vol.Required(ATTR_P256DH): cv.string + })) + +SUBSCRIPTION_SCHEMA = vol.All(dict, + vol.Schema({ + # pylint: disable=no-value-for-parameter + vol.Required(ATTR_ENDPOINT): vol.Url(), + vol.Required(ATTR_KEYS): KEYS_SCHEMA + })) + REGISTER_SCHEMA = vol.Schema({ - vol.Required(ATTR_SUBSCRIPTION): cv.match_all, + vol.Required(ATTR_SUBSCRIPTION): SUBSCRIPTION_SCHEMA, vol.Required(ATTR_BROWSER): vol.In(['chrome', 'firefox']) }) +CALLBACK_EVENT_PAYLOAD_SCHEMA = vol.Schema({ + vol.Required(ATTR_TAG): cv.string, + vol.Required(ATTR_TYPE): vol.In(['received', 'clicked', 'closed']), + vol.Required(ATTR_TARGET): cv.string, + vol.Optional(ATTR_ACTION): cv.string, + vol.Optional(ATTR_DATA): dict, +}) + +NOTIFY_CALLBACK_EVENT = 'html5_notification' + +# badge and timestamp are Chrome specific (not in official spec) + +HTML5_SHOWNOTIFICATION_PARAMETERS = ('actions', 'badge', 'body', 'dir', + 'icon', 'lang', 'renotify', + 'requireInteraction', 'tag', 'timestamp', + 'vibrate') + def get_service(hass, config): """Get the HTML5 push notification service.""" @@ -60,12 +109,14 @@ def get_service(hass, config): hass.wsgi.register_view( HTML5PushRegistrationView(hass, registrations, json_path)) + hass.wsgi.register_view(HTML5PushCallbackView(hass, registrations)) - gcm_api_key = config.get('gcm_api_key') - gcm_sender_id = config.get('gcm_sender_id') + gcm_api_key = config.get(ATTR_GCM_API_KEY) + gcm_sender_id = config.get(ATTR_GCM_SENDER_ID) if gcm_sender_id is not None: - add_manifest_json_key('gcm_sender_id', config.get('gcm_sender_id')) + add_manifest_json_key(ATTR_GCM_SENDER_ID, + config.get(ATTR_GCM_SENDER_ID)) return HTML5NotificationService(gcm_api_key, registrations) @@ -76,7 +127,7 @@ def _load_config(filename): return {} try: - with open(filename, "r") as fdesc: + with open(filename, 'r') as fdesc: inp = fdesc.read() # In case empty file @@ -85,17 +136,17 @@ def _load_config(filename): return json.loads(inp) except (IOError, ValueError) as error: - _LOGGER.error("Reading config file %s failed: %s", filename, error) + _LOGGER.error('Reading config file %s failed: %s', filename, error) return None def _save_config(filename, config): """Save configuration.""" try: - with open(filename, "w") as fdesc: + with open(filename, 'w') as fdesc: fdesc.write(json.dumps(config, indent=4, sort_keys=True)) except (IOError, TypeError) as error: - _LOGGER.error("Saving config file failed: %s", error) + _LOGGER.error('Saving config file failed: %s', error) return False return True @@ -103,8 +154,8 @@ def _save_config(filename, config): class HTML5PushRegistrationView(HomeAssistantView): """Accepts push registrations from a browser.""" - url = "/api/notify.html5" - name = "api:notify.html5" + url = '/api/notify.html5' + name = 'api:notify.html5' def __init__(self, hass, registrations, json_path): """Init HTML5PushRegistrationView.""" @@ -129,7 +180,101 @@ class HTML5PushRegistrationView(HomeAssistantView): return self.json_message('Error saving registration.', HTTP_INTERNAL_SERVER_ERROR) - return self.json_message("Push notification subscriber registered.") + return self.json_message('Push notification subscriber registered.') + + +class HTML5PushCallbackView(HomeAssistantView): + """Accepts push registrations from a browser.""" + + requires_auth = False + url = '/api/notify.html5/callback' + name = 'api:notify.html5/callback' + + def __init__(self, hass, registrations): + """Init HTML5PushCallbackView.""" + super().__init__(hass) + self.registrations = registrations + + def decode_jwt(self, token): + """Find the registration that signed this JWT and return it.""" + import jwt + + # 1. Check claims w/o verifying to see if a target is in there. + # 2. If target in claims, attempt to verify against the given name. + # 2a. If decode is successful, return the payload. + # 2b. If decode is unsuccessful, return a 401. + + target_check = jwt.decode(token, verify=False) + if target_check[ATTR_TARGET] in self.registrations: + possible_target = self.registrations[target_check[ATTR_TARGET]] + key = possible_target[ATTR_SUBSCRIPTION][ATTR_KEYS][ATTR_AUTH] + try: + return jwt.decode(token, key) + except jwt.exceptions.DecodeError: + pass + + return self.json_message('No target found in JWT', + status_code=HTTP_UNAUTHORIZED) + + # The following is based on code from Auth0 + # https://auth0.com/docs/quickstart/backend/python + # pylint: disable=too-many-return-statements + def check_authorization_header(self, request): + """Check the authorization header.""" + import jwt + auth = request.headers.get('Authorization', None) + if not auth: + return self.json_message('Authorization header is expected', + status_code=HTTP_UNAUTHORIZED) + + parts = auth.split() + + if parts[0].lower() != 'bearer': + return self.json_message('Authorization header must ' + 'start with Bearer', + status_code=HTTP_UNAUTHORIZED) + elif len(parts) != 2: + return self.json_message('Authorization header must ' + 'be Bearer token', + status_code=HTTP_UNAUTHORIZED) + + token = parts[1] + try: + payload = self.decode_jwt(token) + except jwt.exceptions.InvalidTokenError: + return self.json_message('token is invalid', + status_code=HTTP_UNAUTHORIZED) + return payload + + def post(self, request): + """Accept the POST request for push registrations event callback.""" + auth_check = self.check_authorization_header(request) + if not isinstance(auth_check, dict): + return auth_check + + event_payload = { + ATTR_TAG: request.json.get(ATTR_TAG), + ATTR_TYPE: request.json[ATTR_TYPE], + ATTR_TARGET: auth_check[ATTR_TARGET], + } + + if request.json.get(ATTR_ACTION) is not None: + event_payload[ATTR_ACTION] = request.json.get(ATTR_ACTION) + + if request.json.get(ATTR_DATA) is not None: + event_payload[ATTR_DATA] = request.json.get(ATTR_DATA) + + try: + event_payload = CALLBACK_EVENT_PAYLOAD_SCHEMA(event_payload) + except vol.Invalid as ex: + _LOGGER.warning('Callback event payload is not valid! %s', + humanize_error(event_payload, ex)) + + event_name = '{}.{}'.format(NOTIFY_CALLBACK_EVENT, + event_payload[ATTR_TYPE]) + self.hass.bus.fire(event_name, event_payload) + return self.json({'status': 'ok', + 'event': event_payload[ATTR_TYPE]}) # pylint: disable=too-few-public-methods @@ -147,31 +292,41 @@ class HTML5NotificationService(BaseNotificationService): """Return a dictionary of registered targets.""" return self.registrations.keys() + # pylint: disable=too-many-locals def send_message(self, message="", **kwargs): """Send a message to a user.""" + import jwt from pywebpush import WebPusher timestamp = int(time.time()) + tag = str(uuid.uuid4()) payload = { - 'body': message, - 'data': {}, - 'icon': '/static/icons/favicon-192x192.png', 'badge': '/static/images/notification-badge.png', + 'body': message, + ATTR_DATA: {}, + 'icon': '/static/icons/favicon-192x192.png', + ATTR_TAG: tag, 'timestamp': (timestamp*1000), # Javascript ms since epoch - 'title': kwargs.get(ATTR_TITLE) + ATTR_TITLE: kwargs.get(ATTR_TITLE) } data = kwargs.get(ATTR_DATA) if data: - payload.update(data) + # Pick out fields that should go into the notification directly vs + # into the notification data dictionary. - if data.get('url') is not None: - payload['data']['url'] = data.get('url') - elif (payload['data'].get('url') is None and - payload.get('actions') is None): - payload['data']['url'] = '/' + for key, val in data.copy().items(): + if key in HTML5_SHOWNOTIFICATION_PARAMETERS: + payload[key] = val + del data[key] + + payload[ATTR_DATA] = data + + if (payload[ATTR_DATA].get(ATTR_URL) is None and + payload.get(ATTR_ACTIONS) is None): + payload[ATTR_DATA][ATTR_URL] = URL_ROOT targets = kwargs.get(ATTR_TARGET) @@ -183,9 +338,18 @@ class HTML5NotificationService(BaseNotificationService): for target in targets: info = self.registrations.get(target) if info is None: - _LOGGER.error("%s is not a valid HTML5 push notification" - " target!", target) + _LOGGER.error('%s is not a valid HTML5 push notification' + ' target!', target) continue + jwt_exp = (datetime.datetime.fromtimestamp(timestamp) + + datetime.timedelta(days=JWT_VALID_DAYS)) + jwt_secret = info[ATTR_SUBSCRIPTION][ATTR_KEYS][ATTR_AUTH] + jwt_claims = {'exp': jwt_exp, 'nbf': timestamp, + 'iat': timestamp, ATTR_TARGET: target, + ATTR_TAG: payload[ATTR_TAG]} + jwt_token = jwt.encode(jwt_claims, jwt_secret).decode('utf-8') + payload[ATTR_DATA][ATTR_JWT] = jwt_token + WebPusher(info[ATTR_SUBSCRIPTION]).send( json.dumps(payload), gcm_key=self._gcm_key, ttl='86400') diff --git a/requirements_all.txt b/requirements_all.txt index 4f0a4aa12e6..851fd2aa3c4 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -10,6 +10,9 @@ typing>=3,<4 # homeassistant.components.isy994 PyISY==1.0.6 +# homeassistant.components.notify.html5 +PyJWT==1.4.2 + # homeassistant.components.arduino PyMata==2.12 diff --git a/tests/components/notify/test_html5.py b/tests/components/notify/test_html5.py index 121cc1096d2..6201fb24ea0 100644 --- a/tests/components/notify/test_html5.py +++ b/tests/components/notify/test_html5.py @@ -42,7 +42,10 @@ class TestHtml5Notify(object): data = { 'device': { 'browser': 'chrome', - 'subscription': 'hello world', + 'subscription': { + 'endpoint': 'https://google.com', + 'keys': {'auth': 'auth', 'p256dh': 'p256dh'} + }, } } @@ -60,7 +63,10 @@ class TestHtml5Notify(object): assert len(mock_wp.mock_calls) == 2 # WebPusher constructor - assert mock_wp.mock_calls[0][1][0] == 'hello world' + assert mock_wp.mock_calls[0][1][0] == {'endpoint': + 'https://google.com', + 'keys': {'auth': 'auth', + 'p256dh': 'p256dh'}} # Call to send payload = json.loads(mock_wp.mock_calls[1][1][0]) @@ -80,7 +86,7 @@ class TestHtml5Notify(object): assert service is not None # assert hass.called - assert len(hass.mock_calls) == 2 + assert len(hass.mock_calls) == 3 view = hass.mock_calls[1][1][0] assert view.json_path == fp.name @@ -88,7 +94,9 @@ class TestHtml5Notify(object): builder = EnvironBuilder(method='POST', data=json.dumps({ 'browser': 'chrome', - 'subscription': 'sub info', + 'subscription': {'endpoint': 'https://google.com', + 'keys': {'auth': 'auth', + 'p256dh': 'p256dh'}}, })) Request = request_class() resp = view.post(Request(builder.get_environ())) @@ -96,7 +104,9 @@ class TestHtml5Notify(object): expected = { 'unnamed device': { 'browser': 'chrome', - 'subscription': 'sub info', + 'subscription': {'endpoint': 'https://google.com', + 'keys': {'auth': 'auth', + 'p256dh': 'p256dh'}}, }, } @@ -116,7 +126,7 @@ class TestHtml5Notify(object): assert service is not None # assert hass.called - assert len(hass.mock_calls) == 2 + assert len(hass.mock_calls) == 3 view = hass.mock_calls[1][1][0] @@ -142,4 +152,89 @@ class TestHtml5Notify(object): with patch('homeassistant.components.notify.html5._save_config', return_value=False): resp = view.post(Request(builder.get_environ())) - assert resp.status_code == 500, resp.response + assert resp.status_code == 400, resp.response + + def test_callback_view_no_jwt(self): + """Test that the notification callback view works without JWT.""" + hass = MagicMock() + + with tempfile.NamedTemporaryFile() as fp: + hass.config.path.return_value = fp.name + fp.close() + service = html5.get_service(hass, {}) + + assert service is not None + + # assert hass.called + assert len(hass.mock_calls) == 3 + + view = hass.mock_calls[2][1][0] + + builder = EnvironBuilder(method='POST', data=json.dumps({ + 'type': 'push', + 'tag': '3bc28d69-0921-41f1-ac6a-7a627ba0aa72' + })) + Request = request_class() + resp = view.post(Request(builder.get_environ())) + + assert resp.status_code == 401, resp.response + + @patch('pywebpush.WebPusher') + def test_callback_view_with_jwt(self, mock_wp): + """Test that the notification callback view works with JWT.""" + hass = MagicMock() + + data = { + 'device': { + 'browser': 'chrome', + 'subscription': { + 'endpoint': 'https://google.com', + 'keys': {'auth': 'auth', 'p256dh': 'p256dh'} + }, + } + } + + with tempfile.NamedTemporaryFile() as fp: + fp.write(json.dumps(data).encode('utf-8')) + fp.flush() + hass.config.path.return_value = fp.name + service = html5.get_service(hass, {'gcm_sender_id': '100'}) + + assert service is not None + + # assert hass.called + assert len(hass.mock_calls) == 3 + + service.send_message('Hello', target=['device'], + data={'icon': 'beer.png'}) + + assert len(mock_wp.mock_calls) == 2 + + # WebPusher constructor + assert mock_wp.mock_calls[0][1][0] == {'endpoint': + 'https://google.com', + 'keys': {'auth': 'auth', + 'p256dh': + 'p256dh'}} + + # Call to send + push_payload = json.loads(mock_wp.mock_calls[1][1][0]) + + assert push_payload['body'] == 'Hello' + assert push_payload['icon'] == 'beer.png' + + view = hass.mock_calls[2][1][0] + view.registrations = data + + bearer_token = "Bearer {}".format(push_payload['data']['jwt']) + + builder = EnvironBuilder(method='POST', data=json.dumps({ + 'type': 'push', + }), headers={'Authorization': bearer_token}) + Request = request_class() + resp = view.post(Request(builder.get_environ())) + + assert resp.status_code == 200, resp.response + returned = resp.response[0].decode('utf-8') + expected = '{"event": "push", "status": "ok"}' + assert json.loads(returned) == json.loads(expected)