Adding weather data

This commit is contained in:
franzz committed 2021-09-04 21:37:37 +02:00
1 parent b0ec36ab9c
commit c04be09c3d
14 files changed
+218 -27

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
ALTER TABLE messages ADD weather_icon VARCHAR(30) AFTER posted_on;
ALTER TABLE messages ADD weather_cond VARCHAR(30) AFTER weather_icon;
ALTER TABLE messages ADD weather_temp DECIMAL(3,1) AFTER weather_cond;
+51 -3
View File
@@ -3,6 +3,7 @@
namespace Franzz\Spot;
use Franzz\Objects\PhpObject;
use Franzz\Objects\Db;
use Franzz\Objects\Translator;
use \Settings;
/**
@@ -17,6 +18,16 @@ class Feed extends PhpObject {
const FEED_TYPE_JSON = '/message.json';
const FEED_MAX_REFRESH = 5 * 60; //Seconds
//Weather
const WEATHER_HOOK = 'https://weather.visualcrossing.com/VisualCrossingWebServices/rest/services/timeline';
const WEATHER_PARAM = array(
'key' => Settings::WEATHER_TOKEN,
'unitGroup' => 'metric',
'lang' => 'en',
'include' => 'current',
'iconSet' => 'icons2'
);
//DB Tables
const SPOT_TABLE = 'spots';
const FEED_TABLE = 'feeds';
@@ -95,17 +106,35 @@ class Feed extends PhpObject {
public function getMessages($asConstraints=array()) {
$asInfo = array(
'select' => array(Db::getId(self::MSG_TABLE), 'ref_msg_id', 'type', 'latitude', 'longitude', 'site_time', 'timezone', 'unix_time'),
'select' => array(
Db::getId(self::MSG_TABLE), 'ref_msg_id', 'type', //ID
'latitude', 'longitude', //Position
'site_time', 'timezone', 'unix_time', //Time
'weather_icon', 'weather_cond', 'weather_temp' //Weather
),
'from' => self::MSG_TABLE,
'join' => array(self::FEED_TABLE => Db::getId(self::FEED_TABLE)),
'constraint'=> array(Db::getId(self::FEED_TABLE, true) => $this->getFeedId()),
'constOpe' => array(Db::getId(self::FEED_TABLE, true) => "="),
'orderBy' => array('site_time'=>'ASC')
);
if(!empty($asConstraints)) $asInfo = array_merge($asInfo, $asConstraints);
$asResult = $this->oDb->selectRows($asInfo);
return $this->oDb->selectRows($asInfo);
/* Temporary lookup - Start */
$iCount = 0;
foreach($asResult as &$asMsg) {
if($asMsg['weather_icon'] == '' && $iCount < 3) {
$asWeather = $this->getWeather(array($asMsg['latitude'], $asMsg['longitude']), $asMsg['unix_time']);
$asMsg = array_merge($asMsg, $asWeather);
$this->oDb->updateRow(self::MSG_TABLE, $asMsg[Db::getId(self::MSG_TABLE)], $asWeather, false);
$iCount++;
}
}
/* Temporary lookup - End */
return $asResult;
}
public function getLastMessageId($asConstraints=array()) {
@@ -181,7 +210,12 @@ class Feed extends PhpObject {
$iMsgId = $this->oDb->selectId(self::MSG_TABLE, array('ref_msg_id'=>$asMsg['ref_msg_id']));
if(!$iMsgId) {
//First Catch
$asMsg['posted_on'] = $sNow;
//Weather Data
$asMsg = array_merge($asMsg, $this->getWeather(array($asMsg['latitude'], $asMsg['longitude']), $asMsg['unix_time']));
$this->oDb->insertRow(self::MSG_TABLE, $asMsg);
$bNewMsg = true;
}
@@ -194,6 +228,20 @@ class Feed extends PhpObject {
return $bNewMsg;
}
private function getWeather($asLatLng, $iTimeStamp) {
$sApiUrl = self::WEATHER_HOOK.'/'.$asLatLng[0].','.$asLatLng[1].'/'.$iTimeStamp.'?'.http_build_query(self::WEATHER_PARAM);
$asWeather = json_decode(file_get_contents($sApiUrl), true);
//Get Condition ID
$sCondKey = (new Translator(self::WEATHER_PARAM['lang']))->getTranslationKey($asWeather['currentConditions']['conditions']);
return array(
'weather_icon' => $asWeather['currentConditions']['icon'],
'weather_cond' => $sCondKey,
'weather_temp' => floatval($asWeather['currentConditions']['temp'])
);
}
private function retrieveFeed() {
$sContent = '[]';
if($this->sRefFeedId !='') {
+5 -2
View File
@@ -88,7 +88,7 @@ class Spot extends Main
(
'tables' => array
(
Feed::MSG_TABLE => array('ref_msg_id', Db::getId(Feed::FEED_TABLE), 'type', 'latitude', 'longitude', 'iso_time', 'site_time', 'timezone', 'unix_time', 'content', 'battery_state', 'posted_on'),
Feed::MSG_TABLE => array('ref_msg_id', Db::getId(Feed::FEED_TABLE), 'type', 'latitude', 'longitude', 'iso_time', 'site_time', 'timezone', 'unix_time', 'content', 'battery_state', 'posted_on', 'weather_icon', 'weather_cond', 'weather_temp'),
Feed::FEED_TABLE => array('ref_feed_id', Db::getId(Feed::SPOT_TABLE), Db::getId(Project::PROJ_TABLE), 'name', 'description', 'status', 'last_update'),
Feed::SPOT_TABLE => array('ref_spot_id', 'name', 'model'),
Project::PROJ_TABLE => array('name', 'codename', 'active_from', 'active_to'),
@@ -133,7 +133,10 @@ class Spot extends Main
'min_zoom' => "TINYINT UNSIGNED",
'max_zoom' => "TINYINT UNSIGNED",
'attribution' => "VARCHAR(100)",
'gravatar' => "LONGTEXT"
'gravatar' => "LONGTEXT",
'weather_icon' => "VARCHAR(30)",
'weather_cond' => "VARCHAR(30)",
'weather_temp' => "DECIMAL(3,1)"
),
'constraints' => array
(
+44
View File
@@ -114,3 +114,47 @@ legend = Legend
credits_project = Spotty Project
credits_git = Git Repository
credits_license = under GPLv3 license
weather_type_1 = Blowing Or Drifting Snow
weather_type_2 = Drizzle
weather_type_3 = Heavy Drizzle
weather_type_4 = Light Drizzle
weather_type_5 = Heavy Drizzle/Rain
weather_type_6 = Light Drizzle/Rain
weather_type_7 = Duststorm
weather_type_8 = Fog
weather_type_9 = Freezing Drizzle/Freezing Rain
weather_type_10 = Heavy Freezing Drizzle/Freezing Rain
weather_type_11 = Light Freezing Drizzle/Freezing Rain
weather_type_12 = Freezing Fog
weather_type_13 = Heavy Freezing Rain
weather_type_14 = Light Freezing Rain
weather_type_15 = Funnel Cloud/Tornado
weather_type_16 = Hail Showers
weather_type_17 = Ice
weather_type_18 = Lightning Without Thunder
weather_type_19 = Mist
weather_type_20 = Precipitation In Vicinity
weather_type_21 = Rain
weather_type_22 = Heavy Rain And Snow
weather_type_23 = Light Rain And Snow
weather_type_24 = Rain Showers
weather_type_25 = Heavy Rain
weather_type_26 = Light Rain
weather_type_27 = Sky Coverage Decreasing
weather_type_28 = Sky Coverage Increasing
weather_type_29 = Sky Unchanged
weather_type_30 = Smoke Or Haze
weather_type_31 = Snow
weather_type_32 = Snow And Rain Showers
weather_type_33 = Snow Showers
weather_type_34 = Heavy Snow
weather_type_35 = Light Snow
weather_type_36 = Squalls
weather_type_37 = Thunderstorm
weather_type_38 = Thunderstorm Without Precipitation
weather_type_39 = Diamond Dust
weather_type_40 = Hail
weather_type_41 = Overcast
weather_type_42 = Partially cloudy
weather_type_43 = Clear
+44
View File
@@ -114,3 +114,47 @@ legend = Légende
credits_project = Projet Spotty
credits_git = Dépôt Git
credits_license = sous licence GPLv3
weather_type_1 = Poudrerie ou neige à la dérive
weather_type_2 = Bruine
weather_type_3 = Bruine lourde
weather_type_4 = Bruine légère
weather_type_5 = Forte bruine / pluie
weather_type_6 = Légère bruine / pluie
weather_type_7 = Tempête de poussière
weather_type_8 = Brouillard
weather_type_9 = Bruine verglaçante / Pluie verglaçante
weather_type_10 = Forte bruine verglaçante / pluie verglaçante
weather_type_11 = Légère bruine verglaçante / pluie verglaçante
weather_type_12 = Brouillard verglaçant
weather_type_13 = Forte pluie verglaçante
weather_type_14 = Légère pluie verglaçante
weather_type_15 = Nuage d'entonnoir / Tornade
weather_type_16 = Douches de grêle
weather_type_17 = La glace
weather_type_18 = Foudre sans tonnerre
weather_type_19 = Brouillard
weather_type_20 = Précipitations à proximité
weather_type_21 = Pluie
weather_type_22 = Forte pluie et neige
weather_type_23 = Légère pluie et neige
weather_type_24 = Averses de pluie
weather_type_25 = Forte pluie
weather_type_26 = Pluie légère
weather_type_27 = Couverture du ciel en baisse
weather_type_28 = Augmentation de la couverture du ciel
weather_type_29 = Ciel inchangé
weather_type_30 = Fumée ou brume
weather_type_31 = Neige
weather_type_32 = Averses de neige et de pluie
weather_type_33 = Douches de neige
weather_type_34 = Beaucoup de neige
weather_type_35 = Neige légère
weather_type_36 = Grains
weather_type_37 = Orage
weather_type_38 = Orage sans précipitations
weather_type_39 = La poussière de diamant
weather_type_40 = Saluer
weather_type_41 = Couvert
weather_type_42 = Partiellement nuageux
weather_type_43 = Clair
+8 -1
View File
@@ -623,6 +623,12 @@ function addSpotMessages(aoMessages) {
.append(oSpot.lang('local_time', oMsg.formatted_time_local)));
}
//Weather
$Tooltip.append($('<p>', {'class':'weather', 'title':oSpot.lang(oMsg.weather_cond)})
.addIcon('fa-'+oMsg.weather_icon+' fa-fw fa-lg', true)
.append(oMsg.weather_temp+'°C')
);
//Tooltip: Medias
if(oMsg.medias) {
var $Medias = $('<div>', {'class':'medias'});
@@ -812,10 +818,11 @@ function getPost(asPost) {
.append($('<p>').addIcon('fa-time', true).append(sAbsTime))
.append(bTimeDiff?$('<p>').addIcon('fa-timezone', true).append(oSpot.lang('local_time', sAbsTimeLocal)):'')
.append($('<a>', {'class':'drill'})
.append($('<span>', {'class':'weather', 'title':oSpot.lang(asPost.weather_cond)}).addIcon('fa-'+asPost.weather_icon, true).append(asPost.weather_temp+'°C'))
.append($('<img>', {'class':'staticmap', title: oSpot.lang('click_zoom'), src: getWmtsApiUrl('static', asPost.latitude, asPost.longitude, 13)}))
.append($('<span>', {'class': 'drill-icon fa-stack'})
.addIcon('fa-message-in fa-stack-1x fa-rotate-270')
.addIcon('fa-message fa-stack-2x')
.addIcon('fa-message-in fa-stack-1x fa-rotate-270')
)
.click(function(){
var $Parent = $(this).parent();
-1
View File
@@ -25,5 +25,4 @@
* Add mail frequency slider
* Use WMTS servers directly when not using Geo Caching Server
* Allow HEIF picture format
* Meteo on message
* pbf map format (https://www.arcgis.com/home/item.html?id=7dc6cea0b1764a1f9af2e679f642f0f5)
+1 -1
View File
@@ -315,7 +315,7 @@ $.prototype.addIcon = function(sIcon, bMargin, sStyle)
{
bMargin = bMargin || false;
sStyle = sStyle || '';
return $(this).prepend($('<i>', {'class':'fa'+sStyle+' '+sIcon+(bMargin?' push':'')}));
return $(this).append($('<i>', {'class':'fa'+sStyle+' '+sIcon+(bMargin?' push':'')}));
};
$.prototype.defaultVal = function(sDefaultValue)
+1
View File
@@ -15,5 +15,6 @@ class Settings
const MAIL_FROM = '';
const MAIL_USER = '';
const MAIL_PASS = '';
const WEATHER_TOKEN = ''; //visualcrossing.com
const DEBUG = true;
}
+25
View File
@@ -92,3 +92,28 @@ $fa-css-prefix: fa;
/* Admin */
.#{$fa-css-prefix}-new:before { content: fa-content($fa-var-plus); }
.#{$fa-css-prefix}-refresh:before { content: fa-content($fa-var-sync); }
/* Weather */
.#{$fa-css-prefix}-temperature:before { content: fa-content($fa-var-thermometer-three-quarters); }
.#{$fa-css-prefix}-clear-day:before { content: fa-content($fa-var-sun); }
.#{$fa-css-prefix}-clear-night:before { content: fa-content($fa-var-moon-stars); }
.#{$fa-css-prefix}-cloudy:before { content: fa-content($fa-var-clouds); }
.#{$fa-css-prefix}-fog:before { content: fa-content($fa-var-fog); }
.#{$fa-css-prefix}-hail:before { content: fa-content($fa-var-cloud-hail); }
.#{$fa-css-prefix}-partly-cloudy-day:before { content: fa-content($fa-var-cloud-sun); }
.#{$fa-css-prefix}-partly-cloudy-night:before { content: fa-content($fa-var-cloud-moon); }
.#{$fa-css-prefix}-rain-snow-showers-day:before { content: fa-content($fa-var-cloud-sun-rain); }
.#{$fa-css-prefix}-rain-snow-showers-night:before { content: fa-content($fa-var-cloud-moon-rain); }
.#{$fa-css-prefix}-rain-snow:before { content: fa-content($fa-var-cloud-sleet); }
.#{$fa-css-prefix}-rain:before { content: fa-content($fa-var-cloud-rain); }
.#{$fa-css-prefix}-showers-day:before { content: fa-content($fa-var-cloud-sun-rain); }
.#{$fa-css-prefix}-showers-night:before { content: fa-content($fa-var-cloud-moon-rain); }
.#{$fa-css-prefix}-sleet:before { content: fa-content($fa-var-cloud-sleet); }
.#{$fa-css-prefix}-snow-showers-day:before { content: fa-content($fa-var-cloud-snow); }
.#{$fa-css-prefix}-snow-showers-night:before { content: fa-content($fa-var-cloud-snow); }
.#{$fa-css-prefix}-snow:before { content: fa-content($fa-var-cloud-snow); }
.#{$fa-css-prefix}-thunder-rain:before { content: fa-content($fa-var-thunderstorm); }
.#{$fa-css-prefix}-thunder-showers-day:before { content: fa-content($fa-var-thunderstorm-sun); }
.#{$fa-css-prefix}-thunder-showers-night:before { content: fa-content($fa-var-thunderstorm-moon); }
.#{$fa-css-prefix}-thunder:before { content: fa-content($fa-var-thunderstorm); }
.#{$fa-css-prefix}-wind:before { content: fa-content($fa-var-wind); }
+27 -13
View File
@@ -1,6 +1,8 @@
//Feed width
$elem-spacing: 0.5rem;
$block-spacing: 1rem;
$block-radius: 3px;
$block-shadow: 3px;
$panel-width: 30%;
$panel-width-max: "400px + 3 * #{$block-spacing}";
@@ -175,7 +177,7 @@ $legend-color: $post-color;
img {
max-width: 200px;
max-height: 100px;
border-radius: 3px;
border-radius: $block-radius;
image-orientation: from-image;
transition: All 0.2s;
}
@@ -219,7 +221,7 @@ $legend-color: $post-color;
.leaflet-control {
background-color: rgba(255, 255, 255, 0.6);
font-family: Roboto, Arial, sans-serif;
border-radius: 3px;
border-radius: $block-radius;
border: none;
margin: $block-spacing;
box-shadow: 0 1px 7px rgba(0, 0, 0, .4);
@@ -410,7 +412,7 @@ $legend-color: $post-color;
margin-bottom: $block-spacing;
background: $post-bg;
color: $post-color;
border-radius: 3px;
border-radius: $block-radius;
width: calc(100% - #{$block-spacing});
box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, 0.5);
@@ -522,9 +524,21 @@ $legend-color: $post-color;
}
}
.weather {
position: absolute;
top: $block-spacing;
right: $block-spacing;
border-radius: $block-radius;
background: $message-bg;
color: $message-color;
font-size: 1.2em;
cursor: pointer;
padding: $elem-spacing;
}
.staticmap {
width: 100%;
border-radius: 3px;
border-radius: $block-radius;
cursor: pointer;
}
}
@@ -574,7 +588,7 @@ $legend-color: $post-color;
width: 100%;
image-orientation: from-image;
outline: none;
border-radius: 3px;
border-radius: $block-radius;
}
.comment {
@@ -588,7 +602,7 @@ $legend-color: $post-color;
padding: 0.5em;
text-align: justify;
background: rgba(255, 255, 255, 0.6);
border-radius: 0 0 3px 3px;
border-radius: 0 0 $block-radius $block-radius;
transition: opacity 0.3s;
opacity: 1;
}
@@ -611,16 +625,16 @@ $legend-color: $post-color;
}
}
#settings {
left: calc(min(#{$panel-width} + 3px, #{$panel-width-max} + 3px) * -1);
left: calc(min(#{$panel-width} + #{$block-shadow}, #{$panel-width-max} + #{$block-shadow}) * -1);
transition: left 0.5s;
width: calc(#{$panel-width} + 3px); //Add box-shadow
max-width: calc(#{$panel-width-max} + 3px); //Add box-shadow
width: calc(#{$panel-width} + #{$block-shadow}); //Add box-shadow
max-width: calc(#{$panel-width-max} + #{$block-shadow}); //Add box-shadow
#settings-panel {
width: calc(100% - #{$block-spacing} - 3px); //Remove box-shadow
width: calc(100% - #{$block-spacing} - #{$block-shadow}); //Remove box-shadow
margin: $block-spacing;
border-radius: 3px;
box-shadow: 2px 2px 3px 0px rgba(0, 0, 0, .5);
border-radius: $block-radius;
box-shadow: 2px 2px $block-shadow 0px rgba(0, 0, 0, .5);
color: $post-color;
background: rgba(255, 255, 255, 0.8);
display: flex;
@@ -634,7 +648,7 @@ $legend-color: $post-color;
.logo {
background: rgba(255, 255, 255, .4);
padding: 2rem 1rem;
border-radius: 3px 3px 0 0;
border-radius: $block-radius $block-radius 0 0;
img {
width: 100%;
+7 -4
View File
@@ -1,4 +1,7 @@
@media only screen and (max-width: 800px) {
$panel-width: "100% - 44px - 2 * #{$block-spacing}";
.desktop {
display: none;
}
@@ -11,7 +14,7 @@
}
.leaflet-right, .leaflet-left {
width: calc(100% - 44px - 2 * #{$block-spacing});
width: calc(#{$panel-width});
}
.leaflet-control-container .leaflet-bottom.leaflet-right {
@@ -27,15 +30,15 @@
}
#feed, #settings {
width: calc(100% - 44px - 2 * #{$block-spacing});
width: calc(#{$panel-width});
}
#feed {
right: calc((100% - 44px - 2 * #{$block-spacing}) * -1);
right: calc((#{$panel-width}) * -1);
}
#settings {
left: calc((100% - 44px - 2 * #{$block-spacing}) * -1);
left: calc((#{$panel-width}) * -1);
}
}
}
+1 -1
View File
@@ -1,4 +1,4 @@
@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKcg72j00.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKew72j00.woff2) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKcw72j00.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKfA72j00.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCs6KVjbNBYlgoKcQ72j00.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:400;src:local("Ubuntu Regular"),local("Ubuntu-Regular"),url(fonts/4iCs6KVjbNBYlgoKfw72.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjvWyNL4U.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjtGyNL4U.woff2) format("woff2");unicode-range:U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjvGyNL4U.woff2) format("woff2");unicode-range:U+1F00-1FFF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjs2yNL4U.woff2) format("woff2");unicode-range:U+0370-03FF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(https://fonts.gstatic.com/s/ubuntu/v13/4iCv6KVjbNBYlgoCxCvjvmyNL4U.woff2) format("woff2");unicode-range:U+0100-024F,U+0259,U+1E00-1EFF,U+2020,U+20A0-20AB,U+20AD-20CF,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Ubuntu";font-style:normal;font-weight:700;src:local("Ubuntu Bold"),local("Ubuntu-Bold"),url(fonts/4iCv6KVjbNBYlgoCxCvjsGyN.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@-webkit-keyframes fadeIn{from{opacity:.3}}@-moz-keyframes fadeIn{from{opacity:.3}}@-ms-keyframes fadeIn{from{opacity:.3}}@-o-keyframes fadeIn{from{opacity:.3}}@keyframes fadeIn{from{opacity:.3}}.flicker,#projects #settings #settings-panel .settings-sections .settings-section.newsletter button#nl_btn.loading span,.lightbox .lb-cancel{-webkit-animation:fadeIn .5s infinite alternate;-moz-animation:fadeIn .5s infinite alternate;-ms-animation:fadeIn .5s infinite alternate;-o-animation:fadeIn .5s infinite alternate;animation:fadeIn .5s infinite alternate}@keyframes spotlogo{0%{transform:scale(1)}1.25%{transform:scale(1.2)}2.5%{transform:scale(1);transform:rotate(0deg)}5%{transform:rotate(360deg)}100%{transform:rotate(360deg)}}body{overflow:hidden}body,textarea,input,button{font-size:14px;font-family:"Ubuntu",sans-serif;margin:0}textarea{resize:none}button{cursor:pointer;font-weight:bold}input,textarea,button{border:none;padding:.5em 1em;border-radius:3px}.feedback p{margin:0 0 1em 0}.feedback p.error{color:red}.feedback p.warning{color:orange}.feedback p.success{color:green}/*!
* Font Awesome Pro 5.15.3 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license (Commercial License)
*/@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:900;font-display:block;src:url("fa/fonts/fa-solid-900.eot");src:url("fa/fonts/fa-solid-900.eot?#iefix") format("embedded-opentype"),url("fa/fonts/fa-solid-900.woff2") format("woff2"),url("fa/fonts/fa-solid-900.woff") format("woff"),url("fa/fonts/fa-solid-900.ttf") format("truetype"),url("fa/fonts/fa-solid-900.svg#fontawesome") format("svg")}.fa,.lightbox .lb-cancel,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-next,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-prev,.control-icon,.heightgraph.leaflet-control .heightgraph-close-icon,.leaflet-control.spot-control .heightgraph.leaflet-control .heightgraph-close-icon,.heightgraph.leaflet-control .leaflet-control.spot-control .heightgraph-close-icon,.heightgraph.leaflet-control .heightgraph-toggle .heightgraph-close-icon,.leaflet-control.spot-control .fa,.leaflet-control.spot-control .control-icon,.leaflet-control.spot-control .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control.spot-control .lb-close,.leaflet-control.spot-control .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .lb-cancel,.leaflet-control.spot-control .heightgraph-toggle-icon,.leaflet-control .heightgraph-toggle .fa,.leaflet-control .heightgraph-toggle .control-icon,.leaflet-control .heightgraph-toggle .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control .heightgraph-toggle .lb-close,.leaflet-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control .heightgraph-toggle .lb-cancel,.leaflet-control .heightgraph-toggle .heightgraph-toggle-icon,.leaflet-control.spot-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .heightgraph-toggle .lb-cancel,.leaflet-control.spot-control .lightbox .heightgraph-toggle .lb-cancel,.fas{font-family:"Font Awesome 5 Pro";font-weight:900}.fa,.lightbox .lb-cancel,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-next,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-prev,.control-icon,.heightgraph.leaflet-control .heightgraph-close-icon,.leaflet-control.spot-control .heightgraph.leaflet-control .heightgraph-close-icon,.heightgraph.leaflet-control .leaflet-control.spot-control .heightgraph-close-icon,.heightgraph.leaflet-control .heightgraph-toggle .heightgraph-close-icon,.leaflet-control.spot-control .fa,.leaflet-control.spot-control .control-icon,.leaflet-control.spot-control .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control.spot-control .lb-close,.leaflet-control.spot-control .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .lb-cancel,.leaflet-control.spot-control .heightgraph-toggle-icon,.leaflet-control .heightgraph-toggle .fa,.leaflet-control .heightgraph-toggle .control-icon,.leaflet-control .heightgraph-toggle .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control .heightgraph-toggle .lb-close,.leaflet-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control .heightgraph-toggle .lb-cancel,.leaflet-control .heightgraph-toggle .heightgraph-toggle-icon,.leaflet-control.spot-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .heightgraph-toggle .lb-cancel,.leaflet-control.spot-control .lightbox .heightgraph-toggle .lb-cancel,.fas,.far,.fal,.fad,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close{font-size:1.3333333333em;line-height:.75em;vertical-align:-0.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.lightbox .fa-pull-left.lb-cancel,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .fa-pull-left.lb-close,.lightbox .lb-outerContainer .lb-container .lb-nav a.fa-pull-left.lb-next,.lightbox .lb-outerContainer .lb-container .lb-nav a.fa-pull-left.lb-prev,.fa-pull-left.control-icon,.heightgraph.leaflet-cLine truncated
*/@font-face{font-family:"Font Awesome 5 Pro";font-style:normal;font-weight:900;font-display:block;src:url("fa/fonts/fa-solid-900.eot");src:url("fa/fonts/fa-solid-900.eot?#iefix") format("embedded-opentype"),url("fa/fonts/fa-solid-900.woff2") format("woff2"),url("fa/fonts/fa-solid-900.woff") format("woff"),url("fa/fonts/fa-solid-900.ttf") format("truetype"),url("fa/fonts/fa-solid-900.svg#fontawesome") format("svg")}.fa,.lightbox .lb-cancel,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-next,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-prev,.control-icon,.heightgraph.leaflet-control .heightgraph-close-icon,.leaflet-control.spot-control .heightgraph.leaflet-control .heightgraph-close-icon,.heightgraph.leaflet-control .leaflet-control.spot-control .heightgraph-close-icon,.heightgraph.leaflet-control .heightgraph-toggle .heightgraph-close-icon,.leaflet-control.spot-control .fa,.leaflet-control.spot-control .control-icon,.leaflet-control.spot-control .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control.spot-control .lb-close,.leaflet-control.spot-control .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .lb-cancel,.leaflet-control.spot-control .heightgraph-toggle-icon,.leaflet-control .heightgraph-toggle .fa,.leaflet-control .heightgraph-toggle .control-icon,.leaflet-control .heightgraph-toggle .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control .heightgraph-toggle .lb-close,.leaflet-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control .heightgraph-toggle .lb-cancel,.leaflet-control .heightgraph-toggle .heightgraph-toggle-icon,.leaflet-control.spot-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .heightgraph-toggle .lb-cancel,.leaflet-control.spot-control .lightbox .heightgraph-toggle .lb-cancel,.fas{font-family:"Font Awesome 5 Pro";font-weight:900}.fa,.lightbox .lb-cancel,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-next,.lightbox .lb-outerContainer .lb-container .lb-nav a.lb-prev,.control-icon,.heightgraph.leaflet-control .heightgraph-close-icon,.leaflet-control.spot-control .heightgraph.leaflet-control .heightgraph-close-icon,.heightgraph.leaflet-control .leaflet-control.spot-control .heightgraph-close-icon,.heightgraph.leaflet-control .heightgraph-toggle .heightgraph-close-icon,.leaflet-control.spot-control .fa,.leaflet-control.spot-control .control-icon,.leaflet-control.spot-control .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control.spot-control .lb-close,.leaflet-control.spot-control .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .lb-cancel,.leaflet-control.spot-control .heightgraph-toggle-icon,.leaflet-control .heightgraph-toggle .fa,.leaflet-control .heightgraph-toggle .control-icon,.leaflet-control .heightgraph-toggle .lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .leaflet-control .heightgraph-toggle .lb-close,.leaflet-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control .heightgraph-toggle .lb-cancel,.leaflet-control .heightgraph-toggle .heightgraph-toggle-icon,.leaflet-control.spot-control .heightgraph-toggle .lightbox .lb-cancel,.lightbox .leaflet-control.spot-control .heightgraph-toggle .lb-cancel,.leaflet-control.spot-control .lightbox .heightgraph-toggle .lb-cancel,.fas,.far,.fal,.fad,.fab{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .lb-close{font-size:1.3333333333em;line-height:.75em;vertical-align:-0.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.lightbox .fa-pull-left.lb-cancel,.lightbox .lb-dataContainer .lb-data .lb-closeContainer .fa-pull-left.lb-close,.lightbox .lb-outerContainer .lb-container .lb-nav a.fa-pull-left.lb-next,.lightbox .lb-outerContainer .lb-container .lb-nav a.fa-pull-left.lb-prev,.fa-pull-left.control-icon,.heightgraph.leaflet-cLine truncated
+1 -1
View File
@@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["_fonts.scss","_common.scss","fa/solid.scss","fa/_variables.scss","fa/_core.scss","fa/_larger.scss","fa/_fixed-width.scss","fa/_list.scss","fa/_bordered-pulled.scss","fa/_animated.scss","fa/_rotated-flipped.scss","fa/_mixins.scss","fa/_stacked.scss","_fa.scss","lightbox/_lightbox.scss","_lightbox.scss","_simplebar.scss","leaflet/_leaflet.scss","leaflet/_leaflet_heightgraph.scss","_leaflet.scss","_mask_project.scss","_mask_upload.scss","_mask_admin.scss","_mobile.scss"],"names":[],"mappings":"CAGA,WACE,qBACA,kBACA,gBACA,8IACA,iFAGF,WACE,qBACA,kBACA,gBACA,8IACA,yDAGF,WACE,qBACA,kBACA,gBACA,8IACA,0BAGF,WACE,qBACA,kBACA,gBACA,8IACA,0BAGF,WACE,qBACA,kBACA,gBACA,8IACA,2GAGF,WACE,qBACA,kBACA,gBACA,0GACA,yJAGF,WACE,qBACA,kBACA,gBACA,4IACA,iFAGF,WACE,qBACA,kBACA,gBACA,4IACA,yDAGF,WACE,qBACA,kBACA,gBACA,4IACA,0BAGF,WACE,qBACA,kBACA,gBACA,4IACA,0BAGF,WACE,qBACA,kBACA,gBACA,4IACA,2GAGF,WACE,qBACA,kBACA,gBACA,wGACA,yJC9FF,0BACE,iBAEF,uBACE,iBAEF,sBACE,iBAEF,qBACE,iBAEF,kBACE,iBAWF,6IAPC,kBAQoB,8BAPpB,eAOoB,8BANpB,cAMoB,8BALpB,aAKoB,8BAJpB,UAIoB,8BAgBrB,oBACI,GACI,mBAEJ,MACI,qBAEJ,KACI,mBACA,uBAEJ,GACI,yBAEJ,KACI,0BAMR,KACC,gBAGD,2BACC,eACA,gCACA,SAGD,SACC,YAGD,OACC,eACA,iBAGD,sBACC,YACA,iBACA,kBAMA,YACC,iBACA,kBACC,UAED,oBACC,aAED,oBACC,YCrGH;AAAA;AAAA;AAAA,GAMA,WACE,iCACA,kBACA,gBACA,aCLqB,MDMrB,qCACA,2RAOF,wmDAEE,iCACA,gBEnBF,4nDAME,kCACA,mCACA,qBACA,kBACA,oBACA,oBACA,cCXF,yEACE,yBACA,kBACA,yBAGF,OACE,gBAGF,OACE,iBAIA,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,QACE,eClBJ,OACE,kBACA,MHOqB,OIRvB,OACE,qBACA,kBACA,eAEA,4BAGF,OACE,UACA,kBACA,kBACA,MJLqB,IIMrB,oBCbF,WACE,wBACA,mBACA,yBAGF,yBACA,2BAOE,o0CACA,21CCfF,SACE,qCAGF,UACE,uCAGF,mBACE,GACE,uBAGF,KACE,0BCdJ,cCWE,sEACA,wBDXF,eCUE,sEACA,yBDVF,eCSE,sEACA,yBDRF,oBCYE,gFACA,uBDZF,kBCWE,gFACA,uBDXF,mDCUE,gFACA,wBDLA,oIAME,YElBJ,UACE,qBACA,WACA,gBACA,kBACA,sBACA,YAGF,0BAEE,OACA,kBACA,kBACA,WAGF,aACE,oBAGF,aACE,cAGF,YACE,MTpBqB,KUQtB,0kCACC,mBAED,8qCACC,kBAIF,koEACC,eACA,kBACA,iBACA,qBACA,WACA,gBAGA,qjEACC,WAKF,2BACA,uCACA,kCACA,yCACA,mCACA,iCACA,8BACA,mHACA,gCACA,iCACA,iCACA,gCAGA,w6DACA,kCACA,+BACA,6BACA,+BACA,+BACA,urFACA,+BAGA,w0DACA,6BACA,6BACA,6BACA,+BACA,kCACA,4BACA,8BACA,mCACA,mCACA,qHACA,8BACA,kCACA,kCACA,4BAGA,8BACA,olFAGA,0DACA,wmDACA,w+CACA,sGACA,gCAGA,2BACA,+BC7FA,0BACE,gBAGF,iBACE,kBACA,MACA,OACA,aACA,sBACA,2DACA,WACA,aAGF,UACE,kBACA,OACA,WACA,cACA,kBACA,cACA,mBACA,aAGF,oBACE,cACA,YACA,kBACA,gBACA,kBAGA,sBAGF,gBACE,YAGF,mBACE,kBACA,QACA,YACA,aACA,cACA,kBAIA,sBAGF,yBACE,WACA,cACA,WAGF,WACE,kBACA,QACA,OACA,WACA,WACA,kBACA,cAGF,WACE,cACA,WACA,YACA,cACA,gDAGF,QACE,kBACA,MACA,OACA,YACA,WACA,WAGF,mBACE,OAGF,UACE,aACA,2GAGF,kBACE,YACA,eACA,cAGF,kBACE,UACA,OACA,WACA,sDACA,0DACA,UACA,+BACA,4BACA,0BACA,uBAGF,wBACE,4DACA,UAGF,kBACE,UACA,QACA,YACA,uDACA,0DACA,UACA,+BACA,4BACA,0BACA,uBAGF,wBACE,4DACA,UAGF,kBACE,cACA,gBACA,QACA,WACA,8BACA,+BAGF,wBACE,WACA,cACA,WAGF,SACE,cACA,WAGF,qBACE,UACA,WACA,gBACA,kBAGF,qBACE,eACA,iBACA,gBAGF,uBACE,WAGF,oBACE,cACA,WACA,mBACA,eACA,WAGF,mBACE,cACA,YACA,WACA,YACA,wDACA,iBACA,aACA,2DACA,WACA,+BACA,4BACA,0BACA,uBAGF,yBACE,eACA,4DACA,UCjMF,iBACC,SACA,QACA,aAGD,UACC,aACA,mBACA,uBACA,WACA,YAEA,mBACC,sBAEA,qCACC,WACA,YAGC,0DACC,eAEA,2EACC,kBAIF,iEACC,eAEA,2EACC,iBAML,qBACC,mBAEA,uCACC,YACA,YAGC,iEACC,cACA,eAGD,6EACC,eACA,WAMJ,6BACC,SACA,gBACA,sCAEA,2CACC,gBAEA,qDACC,6BACA,gBACA,YACA,iBACA,iBACA,WAEA,UACC,2FAKF,qDACC,uBAED,gEACC,SACA,yBAIA,0HACC,WACA,qBAEA,wIACC,kBACA,oBAIF,6DA3GH,gBACA,cA4GI,oEACC,SAIF,6DAlHH,gBACA,cAmHI,oEACC,UAOL,4BACC,SACA,UACA,cACA,gBAEA,qCACC,gBACA,aAEA,iDACC,WAEA,kEACC,eAGD,8EACC,aAGD,4DACC,wBAGF,wDACC,WACA,eACA,gBAEA,kEA1JH,gBACA,cA4JI,aACA,YACA,yBACA,kBAMJ,qBAtKA,gBACA,cAwKC,WC5KF,iBACE,kBACA,sBACA,eACA,2BACA,yBACA,uBAGF,mBACE,gBACA,cACA,eACA,kBACA,mBAGF,gBACE,kBACA,kBACA,gBACA,UACA,SACA,OACA,MACA,SACA,QACA,sBACA,uBACA,UAGF,kBACE,6BACA,8BACA,uBACA,kBACA,MACA,OACA,SACA,QACA,UACA,SACA,iCAGF,2BACE,kBACA,iCACA,kBACA,cACA,YACA,WACA,eACA,gBACA,qBACA,wBAGF,2FAEE,QACA,SAGF,mDAEE,YACA,cAGF,uBACE,gBACA,eACA,WACA,oBAGF,wCACE,8BACA,YACA,WACA,cACA,kBACA,WACA,eACA,gBACA,WACA,UACA,SACA,oBACA,kBACA,cACA,aAGF,gCACE,mBACA,cACA,UACA,kBACA,MACA,OACA,aACA,YACA,eACA,cACA,gBACA,oBACA,WAGF,iBACE,UACA,kBACA,QACA,SACA,oBACA,gBAGF,uDACE,oBACA,iBACA,yBAGF,qDACE,mBAGF,qBACE,kBACA,OACA,QACA,gBAGF,4BACE,kBACA,WACA,gBACA,kBACA,SACA,UACA,UACA,8BAGF,8CAEE,WACA,6BAGF,oCACE,MACA,WAGF,gEACE,QACA,WAGF,sCACE,OACA,YAGF,kEACE,YACA,SACA,UAGF,2DACE,WACA,OACA,QACA,WACA,aACA,eACA,WAIF,mEACE,WACA,OAGF,yBACE,cACA,eACA,UACA,kBACA,aACA,YACA,kBACA,kBAGF,0BACE,eACA,OACA,kBACA,kBACA,qBACA,wBC/MF,6LAUC,kBACA,OACA,MAED,mBACC,gBAED,0DAGC,yBACG,sBACK,iBACN,uBAGH,yBACC,uBAGD,8BACC,0CAGD,wCACC,aACA,cACA,6BAED,4CAEC,cAID,2PAMC,0BACA,2BAGD,sCACC,6BACA,yBAED,sCACC,4BAEA,kBACA,wBAED,yDACC,sBACA,kBAED,mBACC,wCAED,qBACC,gDAED,cACC,eACA,kBAED,qBACC,mBAED,kBACC,QACA,SACA,2BACK,sBACL,YAGD,0BACC,sBAGD,0BAEA,+BACA,kCACA,iCACA,iCACA,kCACA,gCAEA,qCACA,kCAEA,mBACC,UACA,WAED,MACC,2BACA,qBACA,kBAMD,iBACC,kBACLine truncated
{"version":3,"sourceRoot":"","sources":["_fonts.scss","_common.scss","fa/solid.scss","fa/_variables.scss","fa/_core.scss","fa/_larger.scss","fa/_fixed-width.scss","fa/_list.scss","fa/_bordered-pulled.scss","fa/_animated.scss","fa/_rotated-flipped.scss","fa/_mixins.scss","fa/_stacked.scss","_fa.scss","lightbox/_lightbox.scss","_lightbox.scss","_simplebar.scss","leaflet/_leaflet.scss","leaflet/_leaflet_heightgraph.scss","_leaflet.scss","_mask_project.scss","_mask_upload.scss","_mask_admin.scss","_mobile.scss"],"names":[],"mappings":"CAGA,WACE,qBACA,kBACA,gBACA,8IACA,iFAGF,WACE,qBACA,kBACA,gBACA,8IACA,yDAGF,WACE,qBACA,kBACA,gBACA,8IACA,0BAGF,WACE,qBACA,kBACA,gBACA,8IACA,0BAGF,WACE,qBACA,kBACA,gBACA,8IACA,2GAGF,WACE,qBACA,kBACA,gBACA,0GACA,yJAGF,WACE,qBACA,kBACA,gBACA,4IACA,iFAGF,WACE,qBACA,kBACA,gBACA,4IACA,yDAGF,WACE,qBACA,kBACA,gBACA,4IACA,0BAGF,WACE,qBACA,kBACA,gBACA,4IACA,0BAGF,WACE,qBACA,kBACA,gBACA,4IACA,2GAGF,WACE,qBACA,kBACA,gBACA,wGACA,yJC9FF,0BACE,iBAEF,uBACE,iBAEF,sBACE,iBAEF,qBACE,iBAEF,kBACE,iBAWF,6IAPC,kBAQoB,8BAPpB,eAOoB,8BANpB,cAMoB,8BALpB,aAKoB,8BAJpB,UAIoB,8BAgBrB,oBACI,GACI,mBAEJ,MACI,qBAEJ,KACI,mBACA,uBAEJ,GACI,yBAEJ,KACI,0BAMR,KACC,gBAGD,2BACC,eACA,gCACA,SAGD,SACC,YAGD,OACC,eACA,iBAGD,sBACC,YACA,iBACA,kBAMA,YACC,iBACA,kBACC,UAED,oBACC,aAED,oBACC,YCrGH;AAAA;AAAA;AAAA,GAMA,WACE,iCACA,kBACA,gBACA,aCLqB,MDMrB,qCACA,2RAOF,wmDAEE,iCACA,gBEnBF,4nDAME,kCACA,mCACA,qBACA,kBACA,oBACA,oBACA,cCXF,yEACE,yBACA,kBACA,yBAGF,OACE,gBAGF,OACE,iBAIA,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,OACE,cADF,QACE,eClBJ,OACE,kBACA,MHOqB,OIRvB,OACE,qBACA,kBACA,eAEA,4BAGF,OACE,UACA,kBACA,kBACA,MJLqB,IIMrB,oBCbF,WACE,wBACA,mBACA,yBAGF,yBACA,2BAOE,o0CACA,21CCfF,SACE,qCAGF,UACE,uCAGF,mBACE,GACE,uBAGF,KACE,0BCdJ,cCWE,sEACA,wBDXF,eCUE,sEACA,yBDVF,eCSE,sEACA,yBDRF,oBCYE,gFACA,uBDZF,kBCWE,gFACA,uBDXF,mDCUE,gFACA,wBDLA,oIAME,YElBJ,UACE,qBACA,WACA,gBACA,kBACA,sBACA,YAGF,0BAEE,OACA,kBACA,kBACA,WAGF,aACE,oBAGF,aACE,cAGF,YACE,MTpBqB,KUQtB,0kCACC,mBAED,8qCACC,kBAIF,koEACC,eACA,kBACA,iBACA,qBACA,WACA,gBAGA,qjEACC,WAKF,2BACA,uCACA,kCACA,yCACA,mCACA,iCACA,8BACA,mHACA,gCACA,iCACA,iCACA,gCAGA,w6DACA,kCACA,+BACA,6BACA,+BACA,+BACA,urFACA,+BAGA,w0DACA,6BACA,6BACA,6BACA,+BACA,kCACA,4BACA,8BACA,mCACA,mCACA,qHACA,8BACA,kCACA,kCACA,4BAGA,8BACA,olFAGA,0DACA,wmDACA,w+CACA,sGACA,gCAGA,2BACA,+BAGA,mCACA,iCACA,mCACA,8BACA,2BACA,4BACA,yCACA,2CACA,6CACA,+CACA,iCACA,4BACA,mCACA,qCACA,6BACA,wCACA,0CACA,4BACA,oCACA,2CACA,6CACA,+BACA,4BCtHA,0BACE,gBAGF,iBACE,kBACA,MACA,OACA,aACA,sBACA,2DACA,WACA,aAGF,UACE,kBACA,OACA,WACA,cACA,kBACA,cACA,mBACA,aAGF,oBACE,cACA,YACA,kBACA,gBACA,kBAGA,sBAGF,gBACE,YAGF,mBACE,kBACA,QACA,YACA,aACA,cACA,kBAIA,sBAGF,yBACE,WACA,cACA,WAGF,WACE,kBACA,QACA,OACA,WACA,WACA,kBACA,cAGF,WACE,cACA,WACA,YACA,cACA,gDAGF,QACE,kBACA,MACA,OACA,YACA,WACA,WAGF,mBACE,OAGF,UACE,aACA,2GAGF,kBACE,YACA,eACA,cAGF,kBACE,UACA,OACA,WACA,sDACA,0DACA,UACA,+BACA,4BACA,0BACA,uBAGF,wBACE,4DACA,UAGF,kBACE,UACA,QACA,YACA,uDACA,0DACA,UACA,+BACA,4BACA,0BACA,uBAGF,wBACE,4DACA,UAGF,kBACE,cACA,gBACA,QACA,WACA,8BACA,+BAGF,wBACE,WACA,cACA,WAGF,SACE,cACA,WAGF,qBACE,UACA,WACA,gBACA,kBAGF,qBACE,eACA,iBACA,gBAGF,uBACE,WAGF,oBACE,cACA,WACA,mBACA,eACA,WAGF,mBACE,cACA,YACA,WACA,YACA,wDACA,iBACA,aACA,2DACA,WACA,+BACA,4BACA,0BACA,uBAGF,yBACE,eACA,4DACA,UCjMF,iBACC,SACA,QACA,aAGD,UACC,aACA,mBACA,uBACA,WACA,YAEA,mBACC,sBAEA,qCACC,WACA,YAGC,0DACC,eAEA,2EACC,kBAIF,iEACC,eAEA,2EACC,iBAML,qBACC,mBAEA,uCACC,YACA,YAGC,iEACC,cACA,eAGD,6EACC,eACA,WAMJ,6BACC,SACA,gBACA,sCAEA,2CACC,gBAEA,qDACC,6BACA,gBACA,YACA,iBACA,iBACA,WAEA,UACC,2FAKF,qDACC,uBAED,gEACC,SACA,yBAIA,0HACC,WACA,qBAEA,wIACC,kBACA,oBAIF,6DA3GH,gBACA,cA4GI,oEACC,SAIF,6DAlHH,gBACA,cAmHI,oEACC,UAOL,4BACC,SACA,UACA,cACA,gBAEA,qCACC,gBACA,aAEA,iDACC,WAEA,kEACC,eAGD,8EACC,aAGD,4DACC,wBAGF,wDACC,WACA,eACA,gBAEA,kEA1JH,gBACA,cA4JI,aACA,YACA,yBACA,kBAMJ,qBAtKA,gBACA,cAwKC,WC5KF,iBACE,kBACA,sBACA,eACA,2BACA,yBACA,uBAGF,mBACE,gBACA,cACA,eACA,kBACA,mBAGF,gBACE,kBACA,kBACA,gBACA,UACA,SACA,OACA,MACA,SACA,QACA,sBACA,uBACA,UAGF,kBACE,6BACA,8BACA,uBACA,kBACA,MACA,OACA,SACA,QACA,UACA,SACA,iCAGF,2BACE,kBACA,iCACA,kBACA,cACA,YACA,WACA,eACA,gBACA,qBACA,wBAGF,2FAEE,QACA,SAGF,mDAEE,YACA,cAGF,uBACE,gBACA,eACA,WACA,oBAGF,wCACE,8BACA,YACA,WACA,cACA,kBACA,WACA,eACA,gBACA,WACA,UACA,SACA,oBACA,kBACA,cACA,aAGF,gCACE,mBACA,cACA,UACA,kBACA,MACA,OACA,aACA,YACA,eACA,cACA,gBACA,oBACA,WAGF,iBACE,UACA,kBACA,QACA,SACA,oBACA,gBAGF,uDACE,oBACA,iBACA,yBAGF,qDACE,mBAGF,qBACE,kBACA,OACA,QACA,gBAGF,4BACE,kBACA,WACA,gBACA,kBACA,SACA,UACA,UACA,8BAGF,8CAEE,WACA,6BAGF,oCACE,MACA,WAGF,gEACE,QACA,WAGF,sCACE,OACA,YAGF,kEACE,YACA,SACA,UAGF,2DACE,WACA,OACA,QACA,WACA,aACA,eACA,WAIF,mEACE,WACA,OAGF,yBACE,cACA,eACA,UACA,kBACA,aACA,YACA,kBACA,kBAGF,0BACE,eACA,OACA,kBACA,kBACA,qBACA,wBC/MF,6LAUC,kBACA,OACA,MAED,mBACC,gBAED,0DAGC,yBACG,sBACK,iBACN,uBAGH,yBACC,uBAGD,8BACC,0CAGD,wCACC,aACA,cACA,6BAED,4CAEC,cAID,2PAMC,0BACA,2BAGD,sCACC,6BACA,yBAED,sCACC,4BAEA,kBACA,wBAED,yDACC,sBACA,kBAED,mBACC,wCAED,qBACC,gDAED,cACC,eACA,kBAED,qBACC,mBAED,kBACC,QACALine truncated