From 5ab8c9fc28639162e455c36360613466523b444c Mon Sep 17 00:00:00 2001 From: Ethan Dye Date: Sun, 15 Dec 2024 16:06:57 -0700 Subject: [PATCH 1/3] Remove frontail by default See #1921 for more specific details for the reasoning. Signed-off-by: Ethan Dye --- NEWS.md | 16 ++--- build.bash | 6 -- docs/CHANGELOG.md | 6 ++ docs/openhabian.md | 3 - functions/menu.bash | 54 +++++++--------- functions/nodejs-apps.bash | 113 +++++---------------------------- functions/nodejs-apps.bats | 17 ----- functions/openhab.bash | 6 +- includes/dashboard-imagedata | 4 -- includes/frontail.service | 18 ------ includes/openhab-override.conf | 4 +- openhabian-setup.sh | 3 +- 12 files changed, 59 insertions(+), 191 deletions(-) delete mode 100644 includes/frontail.service diff --git a/NEWS.md b/NEWS.md index f7927086d..49fb7d0a9 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,16 +2,12 @@ Hit tab to unselect buttons and scroll through the text using UP/DOWN or PGUP/PGDN. All announcements are stored in `/opt/openhabian/docs/CHANGELOG.md` for you to lookup. +## Frontail removed ## December XX, 2024 +We have removed the frontail log-viewer package and deleted it from all +systems. As of openHAB 4.3 a log-viewer is built in to openHAB, and frontail +has serious security vulnerabilities present and is no longer maintained. We +apologize for any inconvenience this may cause. + ## Legacy openHAB 2 support removed ## November 23, 2024 We have removed legacy support for the openHAB 2 systems. Please upgrade to the latest version of openHAB to receive further support. - -## openHABian 1.9 released based on Debian 12 bookworm ## March 13, 2024 -We stepped up to latest Debian Linux release. The openHABian image for RPis -uses Raspberry Pi OS (lite) and we finally managed to switch over to latest -RaspiOS which is "bookworm" based. -Note that not all 3rd party tools are fully tested with bookworm homegear. -If you run a bullseye (Debian 11) or even older distribution, please read the -docs how to reinstall. It's safer to reinstall (and import your old config, -of course) than to attempt doing a dist-upgrade. -See also the OH4 migration FAQ on the forum. diff --git a/build.bash b/build.bash index 62e79548f..51b75894f 100755 --- a/build.bash +++ b/build.bash @@ -353,12 +353,6 @@ if [[ $hwPlatform == "raspios32" ]] || [[ $hwPlatform == "raspios64" ]]; then firemotd_download "${buildFolder}/root/opt" &> /dev/null ) - # Cache frontail for offline install. - ( - echo_process "Downloading frontail..." - frontail_download "${buildFolder}/root/opt" &> /dev/null - ) - sync umount_image_file_root "$imageFile" "$buildFolder" diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 007cf7141..157995563 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,3 +1,9 @@ +## Frontail removed ## December XX, 2024 +We have removed the frontail log-viewer package and deleted it from all +systems. As of openHAB 4.3 a log-viewer is built in to openHAB, and frontail +has serious security vulnerabilities present and is no longer maintained. We +apologize for any inconvenience this may cause. + ## Legacy openHAB 2 support removed ## November 23, 2024 We have removed legacy support for the openHAB 2 systems. Please upgrade to the latest version of openHAB to receive further support. diff --git a/docs/openhabian.md b/docs/openhabian.md index d4e62b019..8023cecfa 100644 --- a/docs/openhabian.md +++ b/docs/openhabian.md @@ -28,7 +28,6 @@ It provides: - ZRAM - [SD card mirroring](#sd-mirroring) - [Amanda backup system](openhabian-amanda.md) -- Web based openHAB Log Viewer (based on [frontail](https://github.com/mthenw/frontail)) - [Tailscale](https://tailscale.com/blog/how-tailscale-works/) VPN and [WireGuard](https://www.wireguard.com/) for remote VPN access - Samba file sharing [pre-configured ready to use shares](https://www.openhab.org/docs/installation/linux.html#mounting-locally) - Login information screen, powered by [FireMotD](https://github.com/OutsideIT/FireMotD) @@ -168,7 +167,6 @@ The whole process will take some minutes, then openHAB and all other tools requi - Insert the SD card into your Raspberry Pi. Connect your Ethernet. If you want to use Wi-Fi instead, [configure Wi-Fi](#wi-fi-based-setup-notes) before booting or use the hotspot function later on. **Do not attach a keyboard**. Power on and wait approximately 10-30 minutes for openHABian to do its magic. The system will be accessible by its IP or via the local DNS name `openhabian` and you can watch the install progress in your browser at [http://openhabian:81](http://openhabian:81). If for whatever reason networking does not work, openHABian will launch a [hotspot](#Wi-Fi-Hotspot) so if you see that, something's up with your networking. - Connect to the openHAB UI at [http://openhabian:8080](http://openhabian:8080) - [Connect to the Samba network shares](https://www.openhab.org/docs/installation/linux.html#mounting-locally) -- Connect to the openHAB Log Viewer (frontail): [http://openhabian:9001](http://openhabian:9001) - **If you encounter any setup problem, [please continue here](#successful)** When openHABian has installed and configured your openHAB system, you can start to use it right away. @@ -462,7 +460,6 @@ In `openhabian.conf`, uncomment and complete the lines reading `hw=`, `hwarch=` openHABian comes with a number of additional tools to quickly install and set up additional home automation related software. You'll find all of these in the [openHABian Configuration Tool](#openhabian-configuration-tool), menu option 20. -- [Frontail](https://github.com/mthenw/frontail) - openHAB Log Viewer accessible from [http://openhabian:9001](http://openhabian:9001) - [InfluxDB and Grafana](https://community.openhab.org/t/influxdb-grafana-persistence-and-graphing/13761/1) - persistence and graphing available from [http://openhabian:3000](http://openhabian:3000) - [Eclipse Mosquitto](http://mosquitto.org) - Open Source MQTT v3.1/v3.1.1 Broker - [Node-RED](https://nodered.org) - "Flow-based programming for the Internet of Things". Access at [http://openhabian:1880](http://openhabian:1880). diff --git a/functions/menu.bash b/functions/menu.bash index 54a3a331f..4f0d2d053 100644 --- a/functions/menu.bash +++ b/functions/menu.bash @@ -112,24 +112,21 @@ show_main_menu() { elif [[ "$choice" == "20"* ]]; then choice2=$(whiptail --title "openHABian Configuration Tool — $(get_git_revision)" --menu "Optional Components" 24 118 16 --cancel-button Back --ok-button Execute \ - "21 | Log Viewer" "openHAB Log Viewer webapp (frontail)" \ - " | Add log to viewer" "Add a custom log to openHAB Log Viewer (frontail)" \ - " | Remove log from viewer" "Remove a custom log from openHAB Log Viewer (frontail)" \ - "22 | miflora-mqtt-daemon" "Xiaomi Mi Flora Plant Sensor MQTT Client/Daemon" \ - "23 | Mosquitto" "MQTT broker Eclipse Mosquitto" \ - "24 | InfluxDB+Grafana" "A powerful persistence and graphing solution" \ - "25 | Node-RED" "Flow-based programming for the Internet of Things" \ - "26 | Homegear" "Homematic specific, the CCU2 emulation software Homegear" \ - "27 | knxd" "KNX specific, the KNX router/gateway daemon knxd" \ - "28 | 1wire" "1wire specific, owserver and related packages" \ - "29 | deCONZ" "deCONZ / Phoscon companion app for Conbee/Raspbee controller" \ - "2A | Zigbee2MQTT" "Install or Update Zigbee2MQTT" \ + "21 | miflora-mqtt-daemon" "Xiaomi Mi Flora Plant Sensor MQTT Client/Daemon" \ + "22 | Mosquitto" "MQTT broker Eclipse Mosquitto" \ + "23 | InfluxDB+Grafana" "A powerful persistence and graphing solution" \ + "24 | Node-RED" "Flow-based programming for the Internet of Things" \ + "25 | Homegear" "Homematic specific, the CCU2 emulation software Homegear" \ + "26 | knxd" "KNX specific, the KNX router/gateway daemon knxd" \ + "27 | 1wire" "1wire specific, owserver and related packages" \ + "28 | deCONZ" "deCONZ / Phoscon companion app for Conbee/Raspbee controller" \ + "29 | Zigbee2MQTT" "Install or Update Zigbee2MQTT" \ " | Remove Zigbee2MQTT" "Remove Zigbee2MQTT from this system" \ - "2B | FIND 3" "Framework for Internal Navigation and Discovery" \ + "2A | FIND 3" "Framework for Internal Navigation and Discovery" \ " | Monitor Mode" "Patch firmware to enable monitor mode (ALPHA/DANGEROUS)" \ - "2C | Install HABApp" "Python 3 integration and rule engine for openHAB" \ + "2B | Install HABApp" "Python 3 integration and rule engine for openHAB" \ " | Remove HABApp" "Remove HABApp from this system" \ - "2D | Install EVCC" "Deploy Electric Vehicle Charge Controller" \ + "2C | Install EVCC" "Deploy Electric Vehicle Charge Controller" \ " | Remove EVCC" "Uninstall EVCC" \ " | Setup EVCC" "Setup EVCC from command line (German only)" \ 3>&1 1>&2 2>&3) @@ -137,24 +134,21 @@ show_main_menu() { if [ $RET -eq 1 ] || [ $RET -eq 255 ]; then return 0; fi wait_for_apt_to_finish_update case "$choice2" in - 21\ *) frontail_setup;; - *Add\ log\ to\ viewer*) custom_frontail_log "add";; - *Remove\ log\ from\ viewer*) custom_frontail_log "remove";; - 22\ *) miflora_setup ;; - 23\ *) mqtt_setup ;; - 24\ *) influxdb_grafana_setup ;; - 25\ *) nodered_setup ;; - 26\ *) homegear_setup ;; - 27\ *) knxd_setup ;; - 28\ *) 1wire_setup ;; - 29\ *) deconz_setup ;; - 2A\ *) zigbee2mqtt_setup "install";; + 21\ *) miflora_setup ;; + 22\ *) mqtt_setup ;; + 23\ *) influxdb_grafana_setup ;; + 24\ *) nodered_setup ;; + 25\ *) homegear_setup ;; + 26\ *) knxd_setup ;; + 27\ *) 1wire_setup ;; + 28\ *) deconz_setup ;; + 29\ *) zigbee2mqtt_setup "install";; *Remove\ Zigbee2MQTT*) zigbee2mqtt_setup "remove";; - 2B\ *) find3_setup ;; + 2A\ *) find3_setup ;; *Monitor\ Mode) setup_monitor_mode ;; - 2C\ *) habapp_setup "install";; + 2B\ *) habapp_setup "install";; *Remove\ HABApp*) habapp_setup "remove";; - 2D\ *) install_evcc "install";; + 2C\ *) install_evcc "install";; *Remove\ EVCC*) install_evcc "remove";; *Setup\ EVCC*) setup_evcc;; "") return 0 ;; diff --git a/functions/nodejs-apps.bash b/functions/nodejs-apps.bash index 0dbdb1f78..40808e31a 100644 --- a/functions/nodejs-apps.bash +++ b/functions/nodejs-apps.bash @@ -1,7 +1,7 @@ #!/usr/bin/env bash # shellcheck disable=SC2181 -## Function for installing NodeJS for frontail and other addons. +## Function for installing NodeJS for Node-RED and other addons. ## ## nodejs_setup() ## @@ -54,109 +54,30 @@ nodejs_setup() { fi } -## Function for downloading frontail to current system +## Function for removing frontail as its insecure and not maintained. ## -## frontail_download(String prefix) +## frontail_remove() ## -frontail_download() { - echo -n "$(timestamp) [openHABian] Downloading frontail... " - if ! [[ -d "${1}/frontail" ]]; then - cond_echo "\\nFresh Installation... " - if cond_redirect git clone https://github.com/Interstellar0verdrive/frontail_AEM.git "${1}/frontail"; then echo "OK"; else echo "FAILED (git clone)"; return 1; fi - else - cond_echo "\\nUpdate... " - if cond_redirect update_git_repo "${1}/frontail" "master"; then echo "OK"; else echo "FAILED (update git repo)"; return 1; fi - fi -} - -## Function for installing frontail to enable the openHAB log viewer web application. -## -## frontail_setup() -## -frontail_setup() { +frontail_remove() { local frontailBase - local frontailUser="frontail" - - if ! node_is_installed || is_armv6l; then - echo -n "$(timestamp) [openHABian] Installing Frontail prerequsites (NodeJS)... " - if cond_redirect nodejs_setup; then echo "OK"; else echo "FAILED"; return 1; fi - fi + local frontailDir="/opt/frontail" frontailBase="$(npm list -g | head -n 1)/node_modules/frontail" - if ! (id -u ${frontailUser} &> /dev/null || cond_redirect useradd --groups "${username:-openhabian}",openhab -s /bin/bash -d /var/tmp ${frontailUser}); then echo "FAILED (adduser)"; return 1; fi - - echo -n "$(timestamp) [openHABian] Installing openHAB Log Viewer (frontail)... " - if [[ -d $frontailBase ]]; then - cond_echo "Removing any old installations... " + if [[ -d $frontailBase ]] || [[ -d $frontailDir ]]; then + echo -n "$(timestamp) [openHABian] Removing openHAB Log Viewer frontail... " + if [[ $(systemctl is-active frontail.service) == "active" ]]; then + if ! cond_redirect systemctl stop frontail.service; then echo "FAILED (stop service)"; return 1; fi + fi cond_redirect npm uninstall -g frontail - fi - - if ! cond_redirect frontail_download "/opt"; then echo "FAILED (download)"; return 1; fi - cd /opt/frontail || (echo "FAILED (cd)"; return 1) - # npm arguments explained: - # --omit=dev ignores the dev dependencies (we do not require them for production usage) - # Do NOT catch exit 1 for npm audit fix, because it's thrown when a vulnerability can't be fixed. Happens when a fix requires an upgrade to a new major release with possible breaking changes. - cond_redirect npm audit fix --omit=dev - if ! cond_redirect npm update --audit=false --omit=dev; then echo "FAILED (update)"; return 1; fi - if cond_redirect npm install --global --audit=false --omit=dev; then echo "OK"; else echo "FAILED (install)"; return 1; fi - - echo -n "$(timestamp) [openHABian] Setting up openHAB Log Viewer (frontail) service... " - if ! (sed -e "s|%FRONTAILBASE|${frontailBase}|g" "${BASEDIR:-/opt/openhabian}"/includes/frontail.service > /etc/systemd/system/frontail.service); then echo "FAILED (service file creation)"; return 1; fi - if ! cond_redirect chmod 644 /etc/systemd/system/frontail.service; then echo "FAILED (permissions)"; return 1; fi - if ! cond_redirect systemctl -q daemon-reload; then echo "FAILED (daemon-reload)"; return 1; fi - if ! cond_redirect systemctl enable --now frontail.service; then echo "FAILED (enable service)"; return 1; fi - if cond_redirect systemctl restart frontail.service; then echo "OK"; else echo "FAILED (restart service)"; return 1; fi # Restart the service to make the change visible - - if openhab_is_installed; then - dashboard_add_tile "frontail" - fi -} + rm -f /etc/systemd/system/frontail.service + rm -rf /var/log/frontail + rm -rf /opt/frontail -## Function for adding/removing a user specifed log to/from frontail -## -## custom_frontail_log() -## -custom_frontail_log() { - local frontailService="/etc/systemd/system/frontail.service" - local addLog - local removeLog - local array - - if ! [[ -f $frontailService ]]; then - whiptail --title "Frontail not installed" --msgbox "Frontail is not installed!\\n\\nCanceling operation!" 9 80 - return 0 - fi - - if [[ $1 == "add" ]]; then - if [[ -n $INTERACTIVE ]]; then - if ! addLog="$(whiptail --title "Enter file path" --inputbox "\\nEnter the path to the logfile that you would like to add to frontail:" 9 80 3>&1 1>&2 2>&3)"; then echo "CANCELED"; return 0; fi - else - if [[ -n $2 ]]; then addLog="$2"; else return 0; fi + if grep -qs "frontail-link" "/etc/openhab/services/runtime.cfg"; then + cond_redirect sed -i -e "/^frontail-link-*$/d" "/etc/openhab/services/runtime.cfg" fi - - for log in "${addLog[@]}"; do - if [[ -f $log ]]; then - echo -n "$(timestamp) [openHABian] Adding '${log}' to frontail... " - if ! cond_redirect sed -i -e "/^ExecStart/ s|$| ${log}|" "$frontailService"; then echo "FAILED (add log)"; return 1; fi - if ! cond_redirect systemctl -q daemon-reload; then echo "FAILED (daemon-reload)"; return 1; fi - if cond_redirect systemctl restart frontail.service; then echo "OK"; else echo "FAILED (restart service)"; return 1; fi - else - if [[ -n $INTERACTIVE ]]; then - whiptail --title "File does not exist" --msgbox "The specifed file path does not exist!\\n\\nCanceling operation!" 9 80 - return 0 - else - echo "$(timestamp) [openHABian] Adding '${log}' to frontail... FAILED (file does not exist)" - fi - fi - done - elif [[ $1 == "remove" ]] && [[ -n $INTERACTIVE ]]; then - readarray -t array < <(grep -e "^ExecStart.*$" "$frontailService" | awk '{for (i=12; i<=NF; i++) {printf "%s\n\n", $i}}') - ((count=${#array[@]} + 6)) - removeLog="$(whiptail --title "Select log to remove" --cancel-button Cancel --ok-button Select --menu "\\nPlease choose the log that you would like to remove from frontail:\\n" "$count" 80 0 "${array[@]}" 3>&1 1>&2 2>&3)" - if ! cond_redirect sed -i -e "s|${removeLog}||" -e '/^ExecStart/ s|[[:space:]]\+| |g' "$frontailService"; then echo "FAILED (remove log)"; return 1; fi - if ! cond_redirect systemctl -q daemon-reload; then echo "FAILED (daemon-reload)"; return 1; fi - if cond_redirect systemctl restart frontail.service; then echo "OK"; else echo "FAILED (restart service)"; return 1; fi + if cond_redirect systemctl -q daemon-reload; then echo "OK"; else echo "FAILED (daemon-reload)"; return 1; fi fi } @@ -174,7 +95,7 @@ nodered_setup() { local temp if ! node_is_installed || is_armv6l; then - echo -n "$(timestamp) [openHABian] Installing Frontail prerequsites (NodeJS)... " + echo -n "$(timestamp) [openHABian] Installing Node-RED prerequsites (NodeJS)... " if cond_redirect nodejs_setup; then echo "OK"; else echo "FAILED"; return 1; fi fi if ! dpkg -s 'build-essential' &> /dev/null; then diff --git a/functions/nodejs-apps.bats b/functions/nodejs-apps.bats index 544869dc4..e7c2eca9e 100644 --- a/functions/nodejs-apps.bats +++ b/functions/nodejs-apps.bats @@ -5,27 +5,10 @@ load helpers.bash setup_file() { export BASEDIR="${BATS_TEST_DIRNAME}/.." - mkdir -p /var/log/openhab - setfacl -R -m g::rwX /var/log/openhab } teardown_file() { unset BASEDIR - systemctl kill frontail.service || true -} - -@test "installation-frontail_install" { - echo -e "# ${COL_CYAN}$(timestamp) [openHABian] Frontail installation starting...${COL_DEF}" >&3 - run frontail_setup 3>&- - if [ "$status" -ne 0 ]; then echo "$output" >&3; fi - [ "$status" -eq 0 ] - echo -e "# ${COL_GREEN}$(timestamp) [openHABian] Frontail installation successful.${COL_DEF}" >&3 - - echo -e "# ${COL_CYAN}$(timestamp) [openHABian] Checking if Frontail service is running...${COL_DEF}" >&3 - run systemctl is-active --quiet frontail.service - if [ "$status" -ne 0 ]; then echo "$output" >&3; fi - [ "$status" -eq 0 ] - echo -e "# ${COL_GREEN}$(timestamp) [openHABian] Frontail service is running.${COL_DEF}" >&3 } @test "installation-zigbee2mqtt_install" { diff --git a/functions/openhab.bash b/functions/openhab.bash index 5159345c9..7f3a461f1 100644 --- a/functions/openhab.bash +++ b/functions/openhab.bash @@ -2,7 +2,7 @@ # shellcheck disable=SC2154 -## Generate systemd dependencies for zram, Frontail and others to start together with OH +## Generate systemd dependencies for zram and others to start together with OH ## This is done using /etc/systemd/system/openhab.service.d/override.conf ## ## create_systemd_dependencies() @@ -243,7 +243,7 @@ openhab_misc() { } ## Create a openHAB dashboard title and image for the input application. -## Valid arguments: "grafana", "frontail", "nodered", "find", or "openhabiandocs" +## Valid arguments: "grafana", "nodered", "find", or "openhabiandocs" ## ## dashboard_add_tile(String application) ## @@ -267,7 +267,7 @@ dashboard_add_tile() { echo -n "$(timestamp) [openHABian] Adding an openHAB dashboard tile for '${application}'... " case $application in - grafana|frontail|nodered|find3|openhabiandocs) + grafana|nodered|find3|openhabiandocs) true ;; *) echo "FAILED (tile name not valid)"; return 1 ;; diff --git a/includes/dashboard-imagedata b/includes/dashboard-imagedata index 7df6f3594..f86bedda2 100644 --- a/includes/dashboard-imagedata +++ b/includes/dashboard-imagedata @@ -12,10 +12,6 @@ tile_desc_grafana="Grafana" tile_url_grafana="http://{HOSTNAME}:3000" tile_imagedata_grafana="data:image/png;base64,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" -tile_desc_frontail="openHAB Log Viewer" -tile_url_frontail="http://{HOSTNAME}:9001" -tile_imagedata_frontail="data:image/png;base64,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" - tile_desc_nodered="Node-RED" tile_url_nodered="http://{HOSTNAME}:1880" tile_imagedata_nodered="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAV4AAADnCAMAAABhR84hAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAACZFBMVEUBAQEZGRkqKioiHh4QDg43NzdGRkZRNzc7LCxWVlZpaWm0tLR3d3duT0+lRUWlPz9uc31cbFi+vr6JiImRSUlkPz+ZmZmRbGRcT092go2bm5utra2jo6PSy8TMzMzT09NueYO4uLi4wszAwMDIxLmyvcjLu7G6urrz8ez9/f319fXr7+/r6+vm5ubo6Ojw8PDy6+vZ2dnd4eTy7/GoqKi6wrnGxsZxfYh1kG+xnrGbrpepl6nd3d3YxNjl2OLp2djm2Mnk0bry19fZybbkzrP6+vrDrcPMtczVvtXtw5jyx5z4zaHjvJX+0aPZw6jdrG/lqmHmql7lt3zoyajztWfusmfZ3uK8x9HHztX16dL36Nibr8GnvNCdscSWqLmmucyIe4jaubn017m3mXXLqoSnjXPPs4/SroOuk3PN1MvNtZfVvJygj6CXiJfY19iTfWKbhGerc3PLhISPj3GKdl3JqHzJ09qKmql7iJStrYeYmHfct4bY2LXTrXyCkJ7S1s7P2eLk49nhuoiw1MhSqYeNx7B6vaPP5NpwuJvitbrkvcLo9PrapKjXiIjXmJvkkZHij4/Zm6LPfYawdXXCf3/jq6uou6WvxKvUi5SRrIuEpn2JqYJ9m3Z/oHiBn3qZsZTerLJshGhyjG1idV6htJ1fcVtme2K5pLnq6urdwZ6Bb1m3oHmskW6ki2p7a1bo5snW1qPU1J7m5q3i4rfLy5i3t4xPqIXJyaaxxayLi27X7PeUzeqm1e17weWc0euw2u/f8Pm+4PLJ5vSIx+dzvuNpueHpzdLnxcpgtd+33fHu7u7///9t4B5eAAAAAWJLR0TLhLMGcAAAAAd0SU1FB+UMChcwFYviShkAADQvSURBVHja7X2LgxXFlbch4gZ6vnxJ3+QmdjdVMgVkum7VvVNcGUGYQcRhEIiJEEGDMJhBNBgHTBw1wizCbtZlBh+wG+U1Kqi4RljBxeVb5SXouLt/1XdOVT/vY17cOxMuObdvd3V39evXp0+dU3Xq1G23/Y3+RpNL35lWnb4bLG+f6pu8eWn6HaPTdxL5v1uKdWXsv/N3f/e98j2w5fbbb7uV3ta0OwzAM2bODNGcbrbE82lx9ulWU+rw6U1A05JbbgcAv3PH//n+//0+vpXvzJx2B2zQs9t/MPOHcJWZM2fcOgAjfDNm3DEDHnzGHfDoM2cEFGCNiQT33mFnUthMgwwzktz9vR/96EczZnz3ez/+8d9hxmnZmUhNTTObpn/3Jz+9s2nG9JkA+VQ/9aTRNEAQHj4CE5Bo0mgA2gi9485IwDs963kzU4cjeEm0EF448Lu33T4dxcN3ZjRlZs7I3pHJZGbc8QPg9RnTmwDgqX7qSaNpiOpPA6mAIkLjC59xUyXunTGLUCfJvtPhPcwsEw6ALYiH73//e7fdPm0anHU6nAQkwvTbMQ3TVD/05FFYtM28S+OJMmEGov3TmXdUkL3TftDUdEcKzOlAFUXptB//+Ke3DpdWo+mRWJhxRzX6G0oTJq3bTp9m5tOjdGpljAX97X+juhFos7Ob2Zxmm7HmOXPnNDMGKaTmebBNb7f1PF42/8yOKJEs25bexyrkbI5T88xKs87YHB6S2JbOX34epvPMa658fhacAx8qmV/vYyxxcyx5p+b6P4tXfhY8FmIFSKTOU3Z+gJDZt7X44yTe0sIDyukpSsdLkV4Kn0sBlBfllM+nlxH5ufHlh02+nx9Pfn1+fCTBw/uEJP6ACgWzrcALZc+b474c9fwcsZoAvPrA8R3C9U2LXE4ESUjrBOKfaxG8FZa4PQc7cC+kfQH5W3mwJsLtJp/Jqs8QrMNcwvn1FcLt5v3mdGZznNDnz7WE98Olvr/oPgHevBj9gVp9qc+nbzm8n/j8+n6EhpcHpx8zZgZeKoO74GM4VF+NSylDrJSSSikquaTzpZAiD9hE+Jq7lggvZMQjefAl4FyjLLnJ2JoLXlzww+vgyU0eTOFZc8HDR/lEEY/VSQ2viO7Th/OLAI38CA/kh5cQOR6yjEjeSQgvzCUjPjyt0p+kxF0AhLlwNXhpxnFcaSvGspw4o8Lr46UtmxFCLcakcC3LYvATtj3bvtulNlUW03fVGvCCQO7lede1mFSMMpswQgUsKCGMuYRRkuIZDRXnec6pa9lwHWZTYblwmKXP2cpFLvEWAHKzGnEvNfBKw72M2Cxjz6v2QHAcz0kbz06ATZjUbMvT+GI+5F7FbA7cRCk8AFeareD+aBV8Nbwqm8lk0ZTJZLj0xsa9tuu4rmdlHZd5rusSS1nSoq7nubZn2a5FeQRtwL1cQj6XOfAqLdd1mF61PAvWbY+ZfOZZWg134l9ZkDnrsawr4Bg4TojkeUvYLISXeCwQDhoXy4EHzGRpNXjhNXBmw43BxeDWCS8/fywchNIcK+Fb8oME/KrIIA2vdBybuVn4uZzbo3MvXg84F8pUy3Lh7UnbYjAJAgwG/EmAm21pBEdwi9LHdWByBjls5EaLCGB/+AYonsZWPMqvZasIVhWcCh/atuEiWIiLOJ9IvpKYe/ELtlQELzwfsxYAbFlR9YHgI6cW3jxey6Gi7PyxcBgfpYq2sUlsfGmBQDKFarjkwQoX0f1Fb98cE0/JE4h0/ujJ4JvlouwqiXzh+SMOlmG5o9EwNzr606FwiO+G2rLC+WPuHR+NX3NI8EtcEKQLJRGVTRH3JhghOioq5ARP5A8yGmzDLMFBIpUvlV+fOOBeAyfXn8xY+EUaFJMvrvT8eOLbZHjThoo8Wi9EM57MIyaimEkp0iQTKVm2Dct/UJWlTOVLZU/uClZkWabUaUtvIdjINc+Hj4YXHQu/qPL7T59f4knlbRUvmlC7K9zQuPnd53/F5Edz/XRcjoF7xnJerYHdFr05w+gRGd4tlByh+X788N4kpAiqsjU6GZTlSsMr4o+/GKwIxFekQI1XpxqFehGnTNUOXjQnZCR7RUIAaUu7wPVPJJjdLKcahboRJzYYfLWGl2sBD0aVNWt2GyVZgoIhmAoJ7o04eaphqBdx0LBqz71couotwUy5J7MQbBXCDesagEWCeUWDw0uYErWHl2ut2LVmZzKLslk34F7zi4CNy7epRqFupGVv7YSDCuENZS6hoiCEwTYCOKjhS7DwVMNQL0LurUvRZlSy2ISIJG8hwjYq2Rqae43spYTwnC9ASt7I2WSKe0t13oSym7baGpx7wWizM47rWvdmHe9GnlXaVeAts2rSZspUw1AvMnqvxPoyQNZb7GRuDF7k3glUIEw1DPWiCF6sI1GcyiVjqH6oTpp7xw8v/lV7u6Ltql1hAhbtHXqu0x1mi6ramMKX3nffsvuq0VKc3V/htu5bvvyB5ctgiuk+PX/gvs7awEtQ9oaQ8mg2IhKjwDv++l44Y/uKrq6VXUgrkdorzruqnfq+Bx98cNWy1Q+uWY3085+bRSr9ECljnKW/+OXDa9etffiXv/zVI7965BH9D2lZbeClttEceBI6nvrzeA9PvIbS94Egpbh3/YYNczdsaN6A9Gj8b9YJnM1PwIvQqnaYGzTbV7brqWsFzNvNH36qymMsB3gf+/W6B1et/vm6NTg3kP48JEjPUpTpBqmYO+775cMPr1r3CKBbRo+sqxG8gd7Lq1cLImzmrqJiqIq05Enu5XM3btz4+KZNmzZ3Iz2+qfvx7sdh6t70uF483t2deDFtAGxHh2beRUgrFi3qWrRi5ZbFuOyCDbiri1QWXWrWEw+u+vVvVq16cNXPe3q2bn1y27Y1a1Y/9fSaNdueWrNtzVYEe5YiQG227drUqCryt9t/+fCqBx+uBO8zc5bWBN7IarMycGXmecwi5fDaNiPYuMoYIxQSjFV+FynunbtxU/P8ZsAXUEUCXDeZFEANeHfPjlve/fauro4A3t89u2XLs/DfsmVx15ZFizGx5XewaWVX7xIW+7FYOFk6RdaTNb/p/PVq5NuerT1PPrlj53Nb1/z+D7/f+mTPjh1PPr9t9c9XrZsTsD5X2DpnWdaCJaTvwcdQNpTh+8hyRXO14l4tHJiXyWayrpXJuOXZiO26nkdsB4C1iEe8bIXPlAd6b8iTczc+nsu9APBuAkZFTF9E2vziSwHI3c1ERNzbHnPv4q7fPfs74NotW7pWALyLtjwL/y3PLmrvopQoCm/Z9RzPtYnSTaRyPmxbDty7Drh39eqnVgH3PvnkH9esevrlp59E2vrkLhAWDxGVaPLCun9Kd//ikdWrHv7lw+WyYV4vrYU6E+m9vpLYTKkUcSu0FQPHEmRcRYRAHwGqKn6lPMm9vHsjgPrC4xH3brzzpTt/cNc9L925yQiHuWHLfFI46GJsZVc0N/+u34F0gET4zFwoAjwYfuZi+ZpVq1tXr1q1BgUuigLAGVZXG7mg5fAsSS2LJbmCz+oH2bsa4C3n3rUP1YJ5gxozOaI6MNbXyEs0h+7N3QK5dyOiqbl389//PTJwIHy75+5pjS7QhozbrmdQjOnyzZRnQdGmS7uVHakLSso0xKg5rH7sMWDeB1fHxVkJLScUGNa2EgDfB2Jh7W/WPlzOvb/6VQ2LNqP3RuaU/swTk/CDfYnJL8+nNYe0cOjufqUZyjdTjmmEsXxrDgRwd3fRj7h3flekmBnWbYt5uCtIdlX4YOFjAqacs33NunXPrFsH86q015RniaKldVf/2v5frO3vXwu0T0+YAFq777HawjuCH93YuTelOUDRtnHT4xsR3jQZaIGaE5qDz/Nzm1/JFeCHHlsFAbOi1BVDRSBsby5W01cEsT23S4kW3goT+lu2wl//cIZbW6JjuRuXyp0trfBDak38kWpkR0aaA6cZW0gqKghVdDGRROvHSo1sdKQ0B/mooQ2PvvDoCy9seOFRmOvkCxvMpnx8AaB/+Md//FOOUnSc0nNCFBuzhZJTcyyrbSxNsj6jY8hUI4o1B99SUB47GafSLVqW54K+KF1r5HuboFGsjwB4/ylPbIKudeibp72NxnMadHxiatSrq1E9rGpHsXDwbZF1s04FtQzd0eBhXQuUCzoivHzidQ6+/+o//9OffBl4YRgHjnHXfwgKVsMoCMvJhDesc8DCyVakqgTmnEp/1PoIXbSFLLf3iYiW79//xKxgPvAEzOC/f9bS6NxmMViTJ6LaLqueYXK5N6xzCAt/oxKYpJmLYFPw94N9fmAmx7lLuPfAa6+9duB1mL3x5htvvPlmODcLnB1Mw1u7h0JtglRjfWlNJrxhncMIecZ6rrTeywHZgy37f3EI8I0IcI3XDiY1hxqTRH2tYlE3mcIB9EbjpcOhYGDVsylJsewAaYhy0Vc+SBRCpBYYsaJexr2vt+w/9OZrbwbQ9hw69C//eui5fw3WX58XGsX1eTQw00AQl4mJSeVevJ6u0iEes1S1PLATPethUhYYo8wVNty67Xk2lPGJ200ZxQcB3l//+c0I3kPPPfeTn/zkueee+33AvJSaC9avtQJkH4qJ1PnFOOC90RvTAlMYeC23akltOwApKO+KEOZ6Drpp2y5hnuWh930C3qTV9vrvX3tt/5tvHnpNi10DL4D7L/8aiIeD82hcpVM3ws/SSpZ13ArTv33r7bdS9HbJOpISokVMtDEbiyTDvaDTkKp5fDDXJVXUFwI73yiKE2xCl/5EWwdPaQ4gew/f/2co2t7URdkbuDRFm6HDrxeid1xf0pZzBDELnnP+kaMRRcljYfr40Dswf+f4vXJJL31VqgldOIK3JkVbqkJSaw5/fuM1g29Ab7yZoAN8fBe4IcLqHNDYsP9EYBv1HkE0jw0dQ0wB1WO4OnQswHto6Chw89Hj99J3jxx5t3dMBmE5JJFw8BNKmR/pYGlFzQ/rB6JEUpfzS2rMlj4x74n35r33RFUq0XvrT8DFWI3pOiiPFV1wBPA8ceLkwhMLTwwNwezkwpOwCvT+0NGho0c/ePuto0P3EgS8TRYmBC82EdfYS+evvCFeSEoYcvLeV98F5E58eOLDDz88tfAELj7Uaz98/9Txo8C9Gt53yTGgtr0TgtePZG8tqLJR3NmZbNXuLMdyatwckHsB3oXHFy488f4PT5x4/8Spkx8C+548deLEKZC9xzW877w7y3DvxISD5l4snABi5pGoHw3wISzz4zxdCt5cb28vOipgbbhCX4UOWOvQ/gsdSvfZDG9iavDtBXSRM7EcOzl0HKXuQlO4BfS2hrf3RmSv5l6AV2a572JnRc91PFiCxuVkvew4K1VSmoNxWohcF8qpfWrhDTSHoaMV6fjQcSjtho7f20HpHrXkBoo205TJfYsolPuOk3U86rowz4xPH0m3tSGw7e0RuKZdRzf1BI09XaFiNiXo+v6ct976ALXdt95N6rsfBIt7PwC69y2ajzr7TxBeETeIc66Ujb2/uOlfNc6zpuockG071kd+N+gT8tHKFYu2dAU+IV1sMsyK0QCIPWhSbjRQXtTmrmqqOSRl78rYdcG0Ry7S/gpbVgR+TV1RS/Fk4jmpFAmH2lDKKEbZ0NGh/ZqMm9iKFegUcmiFafht7yIkzb3833QTW75QKBRFUYx1PpYPd+nyG6c5D+n/eIqjqGirzctK6b2mVT1g3sBxLGj91T5k7aFHXgCv6goIj2lvG/N8Zfuo7NG6S9O+XRElkmOkvv5dz2zb1d+3fTyA8FrCm7baNFIrI8Wh3OlxZbq+ty0oClOKRvvKkSjYO2oBvHTXPsSzT7eyQ3Lfrn4N8No+WMD6Wo0fbNyl/7twm5l0Rvzt6u//uPOxZbu2bh+PLKsxvEnu7WgjK9u6YAIuayeoM+CMmiQs20OnEB69jtAPasVHK1Cnw9lHixctXvzR4o9Wdm1Z3NX1UddHsBc9Ilbot7DC+ESMwr5yz5xtAFnfX3b2Pf3J6TM9QDt6ek73nX76zNM9fac/Of1J3+nTp8/seP50X9+ZM/27Pnm+p+eTnqcx49qepzH7aUR/uf/rx9btGg+8vA5WW+JsiTtB2y2y3tK6QrAGwK43snrl77QDH/wXdWFq0ZaPtnQtXgFb7jm0RTufwb7Fh8wuQPgFQk0sHYx7QjB2i/bys0KyldoODNiz48zzZ57fuXPnX2ABy+fP7Nj573/Z8ZcdZ3Yi4aYdp3ec6dn3id515t+f37GzX29+fmcfMPxyv7Pl19vGBW8dhEOVy1f39w7gXamLQuPFtwjRBZAXLwYAtwCw6CyJcH6k/SW7FsPyRbNl7sqV69vjCGKMoBcv4CyRTMCqXjoL4N33SU/PmTPAkk/v3NnT8+STsPL007Bhx5m+nac/2fkXWO1BmHv6P+k5DdvPwGxnz84zO3FH377+fnSMat22bbzcW8NOr0l4B/emSOFsabT6acveyHHGLBIuvl0oHlYsWrFIW30frfhoUdfKuYtWrFiBcmPRohVBBpxAWHSR+aPcl9q2q6RU07O1wZb+nl27zvSE+/v7+uKCrz/eDNzr+y27xg0v/DCsDPbAUpLo6E26RU1iGz3ngvnawqAU+wmjYxJwB+BY4aWk4N199uzZc2fPnTt79jNN6QXQ7jT3dpUUbaF5154o3gIVJFXgtXeN6neTDxDVBdzaBMz70ojvCxJlegVseKp/1wMPPLDuqQloDlwHRMLgSGgTey63s66nqOd5rscsh+u9bjZrC8+yPME8HUqpCrwh7IDuZ//xH5+djfEsod2dKXjbQ00j5YU6FuoY7TE7lz/08TOGHnrm42fC9MfncR0T5v/xM8F6ROc//nh7mN62HX/b94wHXlNjxhmnxNL46tYzYWVdKC5cglU8rs0ZNqtZjsM4VpT6hEBOr0KDdqrOYffZzz5t4Y8l4P387Oefx6tn59CW8BPSC9X+aBulvR0d60EGd7SvXwolHda1dbTrqaP9FZ1aqmA/Vr91vIIbITkmPooox8dCnYmud2HKz/njdvvVRRsPwsCZyIzCN4FbuE+JFs3cx5glWAWBnbH11Sr516X7Vmh4W1pibj37MtCRT8LV5XRP7D6t6dV//ud/8HP/ls+ZahSMfVcTJ/Epozoaxf7ys5891tmSFLaff/7Hl1/+YwQvISV1Dn/6z//8U76tq625i2GQMYbN/Dd1h+Mb1RzSvJWukATZ+x8tn55Ny96z5xPpoLY+4l70QYVyk6olSqF2hSrWzc29QVsb6olU4veo0OsM+FAxhjEgJaGgr3PbJQKeVGvvUtlMUYmr1PUxlCFFbR7bqlPcuxtKNcD27LmqRVupE9Tgq/9Qky4NfzUUKmaWk4Wii7hZ0Bs8BwotNwtlmetkPFi3XOFi4wVTULBlHaxn96Dso9T2bO6gduFCyZd1RLq14tXlu3cvv7B799ndVWhveBM3NYeOhrDWZAEp7M0EUKL6QLnrYAc7UBPQOcfhzCKgqUkwL1G30P3CgGUtGzJ6FqHMsWxQ50paiuNG+6j7Jk+kk++4QSluDOK+ooETKoaZDDqr6Dy2HaIQ6Sh+1DnTdGShJrdiE+1T3JhUzzoHDqbvEm0A5ytNe/NRxsaF10+3tfmlqfGdLW0Unw/p7IVzYBufBwMZ6fzZILn7xq52M5ARDnw9akEuATMCf0J3HFZs3M+dUsz+HwJ7Fmbnzp4LKh9Qk0CkMQmLQE1ocO4tilYnk816riUsbIRnoA0QUCGy4+6ilNIcLpw/9+le/ul5jScw7fk/Gl7+/Pw5/J87PyfoZNLA8Aayd4FNXGbZnGGYcGFTsJdc5pJxPnfarLhw/uzuls4Wzb1//MPLf/gD/NEsfvm/Xv6vP3z+2fkLlJqKxIZFt8atFWk/B4D3086Ws+cQ3s8NsC9HCxAbFyKjuGHxNcJhvK5kVSlVtF04f35566coewPhoOmcmVASX9gb3USDUh0VM+DeEFFdjp37TJdt57BwMzrE2Tr2DPrroFr79ya5d8/5C2cvXDh/ARWzs8uBWYMJf2fPLb9wIWw/b1x4/frJ3lQVNg6SM2gWLeF62nhuSIra2rBiNagiQONWd32PqwuiigIlTLUB9i2GNXgz1Hj9G9t4gt7pU41C3SiUvdifyvZw0BbXcgnFwTlc28XWNtuzPFTSLGyIK9gegy1KZrK263Ks2cEmOhzJwrU9meZeDC4l83n4S6lHb8rnddO4bh7HVOImGpRCHzNFbJbNEokWheNZwbgwlOiBULDh0slYXsbJMwZ2h8MEIJ71BHFtB3HNwNuAFE3LXhz4ZLb24tC0oGxYtLCjVwPDG3AvuvMqHKeGUhzpB7utCTurh1LA4EtAzHV0vzYFRnPep1LimiKwJDoek4Ts6ToH9JJhzbNnW4GDx4I5xnmGBePj2fZkdrwKqROu1yleeUX1vtKr1Hr1ipngh4lXYMf69bVrgBqhrY2nPeNGG10Coy+kFDPs4zSLAf/aXQsQz65m7Cgbosvm2TaddKNYLMF2GTV346ZN3RXi0HQHYWhq5hVWY80hWecA8M5pQ3jnLdDwLmBOBsg16M6ZaxM66VabnI/xFdXcTZsef6V7o46wFkX3CQJWYVyl9TWD1/QMSoz/RvQwXBM7Wwn3zm5uIz+bPXtuyLAYiS5zt0mj7CWT7Z3Ol7QhnGrzpg05vgED2G1+8cXNmzdu3Lx5MyxhthHDgs0lNWK4wKwQ6IaD8XKgpIKiDAq2ifWhTdU5YAxCprtBhgIB0o4XYg0Ah2EHJw9f9SgyKd3cPfeFDS+AeHh881333HPPnXfdBYuXfnDXPXfe+dJL3d0glGt0PVO0AbzATY7lZF1m2twm1gBeXrQxK4Q3EroxvpNuFHPZhiEAaffG7lde0PBuuvPOF1/8+3vufOmeO++5C5II79w9vZXh7XyV7qF79vTSPb16DunkRPYQsmfP/LB/sB/JXu2ZpyjTbnyQEmpiX0eZYoZxNC1bY1syAi5siBSzyULX95ca7u3e1PxFboOWvRu7oZTDQJebNm7e1N394osoParUxP72qO7ejdMxM+luh2ZxbGho6Pjxo0PHfrtkrwo6wtXaSyfl3xsNShePIRdt4YkYCZMoHObLRze09WLR1v1Ctw7OGgS4fDws1TBGYHeVKsS3j4ag6r70QUIjfBTRPfL2W0eOv9PW+9bbb5G8jr1XB//ev+aWYi6XzJd71dzuzZs1y3ZXpLmVb0ja2IX+6MKFx48jnx4/fnzh0NBJXBlaePLY0XfeOfL22+8OHW1+6+jRo+/KCN569YhPDvYYjZ8YDXwoprBKh4ORns/PzyOB0Y72OqZANup05fsRVC0ATl146sNTH544dWro1ClInXj//VMnPoTlMewkC/Aef2eOgVf5tRYO6b4VRMcvjoxiu7pRPNnoTowKCO/RYwtPnjzxPiC8EP4fnvjwJKD7Q4T36NHjAO+R40fbNLzKcC8fsTp9nJHbyjUHHSEayzVWgW6y6vT8bOxDj328jx8/dQLEwtDxkyePgmgYwv70Qxpe4N62t0AYfxCO4JiElzAdHZNLyiShvvC/vPjlpctXrvpfXbvyxZVrV69eufbV5Ytjgxf1Xjup9zbPW9Bsuz+bM5V6743R2zrazrEA45Lu9CCOj33wwZHjx2e9umDBgl4jeyPhQD2QLmBcOGBZSOZms66L8F6/dOnrL69cvf71N19f//oKzL+5dHmM8CLzEmYUM1OH4znPNmWcyMi46Zoye48cOXIs+JfTO0aXuJdI2bFkSTgadKA5YAUOGMQU+1Cg379tOb7MXbl2+eKl618NXrv8JSyBLl6/fqXq5XlpnYPN9HDMxqSY97NMJnOyKRMKCvvm67It9uYllIjzseY6vzdYQkLO34t12XsxmHsxCUh5WxsnxprioRPJtavxchRZXFZjRpiWvQbeZjC9F2etSDhYk19jNslURz8HP1HnoE215gVYTzYvMuGmwCieAkoWbWFk9OiDBbFwLc2xI/JvSu9lUZ/TJM29FVsrMMYXrLkOjpfhCmJ5lkf9+YNfX//mm+vXv7h2XQveL+F3/fqly5euVTlb2ig2g1pH41Wjwi6M9i5SAVQaFt2k5uACxMBSHqgMlNlZ7AIgBr+8fOn6pS+vXbv4DWgQmLx08dLX33xTrXS7keDejUgldQ6QBN0B29iIAq0p71+9eu3a9SuDgyAjvvrqOsy+GLz21bWvqkmIEj+HlrCTng69b8Lw61WTanx4K7W1jT9keURpL53t24BwlupH+sz2cL48uodGJc29ozVSjp1S3Lu9f9cDDz2zbtfWXab3edhd2kT32Ldv3zMNrzlovZfWx4Vve9/Hj923bNmuvqiDuelX3v+U7ny+a9t2eSvovao+8AL3PrTsNw8s7+8L+vL3nek5cxr+Z/pMV//tk9+UOdmkhYOSfjCcCiwo5Rj8GOMgC9DW0m1uSW6L4p4ncqQCbW1/6uNlyx54oL8/CJjQ9/zzz+84vfMvz/dhtKBd+7ZNQUP8ZMOr/fUkd3GUMMot12MYEZ242D3QFWBz+YrMI21MyT1dlLlYicgcDzKbQ1xrfn4JiWoWS2TvumX3LXvAoAuA9n/S90nf1r6evv4gIsW8W8Ao1rKXu9SyHQWQuQogcyVTtkssZVPqEyubtTzXzjjofeYojLIOyrHAiA5Z+26ng3hOKF3Ssrf/gXXLPn0oEA6mNNsXhq3CeVS0TTUKdUUYizblU4twHDDBsqnNBFVSwiYKcyWtttmOZc2dzbBd3RbSVsQlXNfUuG13c8msFLwh9z60devWp7Zt7et7Cou1bfCLJ73+UHgHDYsvWm1KjV60rY9jZKV35FP+QiW9MpdiaKKlS3XnzKVBnKKlZiv+bwGjGDEZFV54CZ3x0ONGpPh+1LU4znczBPeeTNJ1DpFihg0Y0o+NDFPjHg7jnggqUyzivLXI/aLpBh8c9Lc6h5InCxQz2yJUtzpaHjrWcCVBS9DpDj+/f2D4iY6Bb7k/vH94oGP426L/7YGOb79denD/t8NwgqJLHJvp0QqM7I1rNcNe9YFfUJX1CcYevjkIzQruoeNeFmNiuBgRA0orVAucjGNx3nH49YOH9x98r6N14L33Dh0+eDDfMXzw9YMHDh/cf3iA53zfBjXDdTDulhYOQXXjOGiqIagftlxzL2eMKmz8wnYwRRiwIZXUbkPFn7cODAy8d//r+5cuHR64H/j38P3fDh8YHhgYPvDtwVYusT+LpBTHSDR6r44hZQLc8yCZA0mSG2F9qmGoG7yBcBiJivozHm4N5e5wUYvgzk4/P1wiNkN4Q+B4KlltvYHhRe6Vta1zCOAVpitbDGprIkRb4AgVrEw1CvWjqDEoGH1YEuy5NnjxyqBuVgsm3fhzbdC/dhHbKQYHq7W4RcKB4uxRppTtPcro0rmeFggILgiFUuZuYO41LcVchy10XQvKOOzfNnj9yhXdsnYJZpeuDF7ClUvXr1w3LW7XL1/6sqKvTgQvYZzvzWT+4GFvisy9WzKgxPFA2iakskk3MLymtUK4rofxMhxue21Otu3q9SsX/xtAvPzNJaDrg4AzNmZ+ffHKtUv/ffnK1//9deXWzJh7ETfnWVA9nKYMzL1CiGcxWAY9ORpbOIRtbbrrGg7IJqmQjwr/f7669sX1K1cHv8I2ti/8K9euYeLyVRAR/3P16lfXvrpaUTwE8AYD4+TzOSn2zs4X4AqB4C3wloB7E1MDc68WDmOM5zA4qr+k0XtDFSMZbzTHc63JAKRJ8dvA3IvCIVercBk84l4DbrEkpGsVJa2Rudf4mA1eHfxi8MrVry4PIovCbPCqDwIUtAjha09yeA+ESayF0EJTauFKQEMQPGHUGnhHN9PSWSY23NFNQgjvIPqIXL+EriJfX8Iy7EuY8o5lCdu1HAssXsfl6JqaVQrdeKAQxMr1rLQ9i3AvikOdhregp3AJU1GIXAQqj/q0NC68geYwePHiRdANENivrwPS31y//M1F7mLkLQzeSV0na/mWxRxHEQDcIxa2XDDsE28x6URjvSaM4kgkFFp4ISGLC6WioeE1h1yeozj44trVazBHwQAWxBeDvgBrmWEfN64EWHbIcCAc9Aahw1OjfaZwjOjwbFHRVggjjoRw5lpCuyJSzAKMG1tzqH0sHSzacsiqKm8gzM83CcS7GKhiIbRIDSwcIv9eFBM3HJs4gLegjWLZZFHm2rabXTzXZbYb2MW5lHQQE+4ffpMQCAdQEGzXZToqL0gCyubvBXFAyLjPFQqHAhrFMpuBX1PGy2T/KwumMQ3lr1FFRALmqcagXmSKtrwvcKQEQUE5EARUBc9zQF8Y91j1cX2vAjNN2LMzru1i7Bgra9mW0rK3NVEP3Ph6b1jnYNkYcsAmHrpO65ADlm2Pu6IyqTmgGCgUsGzLAbvmCrpCkrfylNhtcOFgghyCuYCmqTCDmWP0LJXqlTpmMvAWeEHokiyn2zy17lAQoazNxbVmAcSNW7T5degRLwNA49qFUBoUSjcEPYwbFt569AxSQphRU/LBEu1ek86nbGHZ8EZxPUJ05gtcFAoFbfYWop7wYTrXKhLbGt6sqAO8KAR0pVmq3UeXckb2ltScNTy8PBg8BqSEHj5KF3KizMcp2JP28MUyMcyXqO8VoZ3GA1hDUIsJk6Lhq9OD8do8b7bKC9DMFnismUory30bgzZZoL0ywmYTmFmOTbjnzKa2oB6xCfMI9YntKchJbHTSifVeEdebSwWaiAhLtpaIY2PTopEVMxNoy7vbcySxsxnP8rQtIHzmAWxZxbJe5m7byWQtdrfnYi1aJkupnbVwXDeLWzaOjmdns9oGiRriiQJR690NbwSrM+F0QStmQbdnJg22huZeP2gptsGg8KXFbNKLQ6RSMGolk8CxQmC3a82spM3GkfAks7myYAPkI8C9ysec2sUs0VJMALempkymyfEyTU1ZUaKUiST/NrjmoOVpSW+2dJeKKp9vWbSvoDodEAM1odVyZ2M8WrACmQgFcFmb0N/03rGfLSzaylQDHrYel5oVDS57S6w2DbdWCaIvNsHVWoMb6VOO6xyEKdxaS4emFHFVb1Tz2+DcC49sWRhgWhEo1VxXODaUWRh9GnsYu5xBEsNeMBcrepwRxmJJNQaFNTspMVCWvDWKNmw7y2K7muPZ3LUsidGomXRdm3EHx7khLsuCgpB1rRGMEC0c0CjWQ1zrSCgYckBGI16HKfMP0w0Lb1C0gXbKFCCpR2RSPqXEVwzHcmW6bxBRQsE+pfez6vDytIekSFU7JuciEhOYrpnR+FdHKdl740yUMitKpW1KaRCJtcYVDvWoc5BpII1xXOTaRVL3eRGlmkPDwuvXocZMas8QzbdEar8RLopYvVPkKZaNXKgbWDEL9N6gp1oUq2iUX8kU9fEJubcAVpvIPfvsQidzd/bujJvJZu4V2F8rFwlfcStwb1ilEwUpjeKVxihU2JIMbBrG5cUdQYWkDsDO85kmbCvOODObMk0zM6YZqCV204k03wbWHAK9tzYUVUia98QYIRboGrY702Ftget06D4d9b9ofOEgJwxoqoQSabMi4U1G8uFqrlhWst0SwqGcFW+AezVfBg2ahQhsEA+5EFAetmKKRrbagvi9+LRgRRi+IoE4xfhuRAiqRavEwCTaXXQE9uVhjVnYFqH9HLS7g4G5qH3/kyYGUuOaFb4fca+LQfqxzsFzmccsy3apQx1L2dLBigiXZgns9kbCNxAOQeA9PctHzcRgHgsTSRt3a2tYBHH6Gpd7g3GKATSLWJZjWYR4ODSIS60MdZnrEo9kYSNBNx7PIejKVJV5U30rRKAmFAIRUYg7A5Qf2KCU0ByU1ONVcAyfgT+JTr3SpDGoBq6YDGnLtlw4hCpXEVWxllAGw4aWoNdgwkBudDcSHnLv2IqzEXNUqJDMBUWc0PNcLnaS5LdOncOoqI6FQrNCe0gilro6UlH7f/MdksnIsy99CG9kvdcPhENc2IdPXUi42SXaFVINOyKuVjS14nGvTAZ70Gpz4H+vk8l62SYVdNwWqRM2tnAIKyRrwL1RfS9ghkaxvKcp62RmZu5u8jJNTqaJxh698YtpcOGgq9PrUSEJQnYPWbqkl/SqbO+jVPWSAM5cqlHoVvAxq+2oK9IIgIiKMnbN4ZEDdaJ0a2DZO1J970Tdpw2oPNLNInFgSrZE36CGFw5hU6aFviTC/KjvU9uiYGLY2J3ND6CgAgd+xj7zHMd+Vui7h0OzJEN0Irzz0dMUdDBTTVnkxaLIJeo1k+lgmmoU6gdv4KVDGXGVcizHA5vN87kFcyqdLG7EfhY4CLTjeJZHMHan57ge97DhHoNHuQl40WrbO95AUA1sFAeyVxHbAiQBQeJZrrDBBPZs22WOIo7HPAsH0sRAXBYlADMG5OKwlSqwmbNxByLjpZPPcRO4IWxg090shInkkBC9icJtqmGoN7y69yo3/VmV8sEApmAca21Lb4IfWsdCofGMBrPyYYM+NjnuY9BaYfANfKgjQHloV0QN9A3fdSV24asJmaKtGNfd5JK1OLl0eRY6pTY0995Qn+JSXBLdBkUB2H+Ja+cVnU+pJJLkmVvMpbtcNbxiFvg56CpaHWxbWjaGHcRO8BhcD2aK+QQMWoXvwTZFEeRETz9lS2KT+OOO6hyK2OkVjOJMJvNsFucZR68kNLOEstbg3Auy0PMwBkY2S32ZxUAYwsY4Ga4DxRnoCRS0BM9yshi6Acq1LIaNcm1uWY6ATF6WhaeL4MUu2woRdRe6TRnPQXizGfSiTnj/R4mpRqGO8JpOr8x2terFpHAJhh6xLdhAcNhtZluSMQfgd+Ab13B6gLutAF7bZxbxnBjeZNcVLAx7hcwvQU8+KBXzNKxoF7cM9/LQjSSIviJxkwhWfW5mYGagZ5+GIXJwMH2HfJHwXQ+FQ07XmleiYmTGpTpmTjUMdYW3xppDPgVo1CBURrdAsBd/ZBe+8bJVKlRRrkWHKSqEEYsSQYqiobcb3WoLhINSVBCFY4FQYqMogIemtsIubGAxS0UtYVM6KgxJeHNROKgSdEuAbmh4DfeCApB1LAcsXKxY4FjxACWWp/SYFVzrD9ijjY52ugqRoEILrkwoJITvVKNQP3gDLx1qu7aHHQFBg2ACB3z1bM+SFCtxuAVqm82JZY1a7R5H4Us0G6V8IVO1kZFH4FTDUD98o/i9/vr13C/6xU49REVnUQtePS/qaSwB+lMxJJMMm2r8CbfcMvW9Pg/HVuJ+p9/ZqSGGbbAw6Sj3yGdLcK8JMJBsAhVlsDZ+Q3zAvbxo/KCLWPvd2Wm8of8XA6R38tZisegHDg6jnK5Cx6uyWNNp39NbwDsduah1OD98//Bwfj8fyN+/snW4Y39rxzAsVnYUBzr254eXdgzf/21xFHiTEVATbiIJCSwqSeTGdeEzoYr+1+cDh947ePDwweGB4v7hA/sHDg0cvn94YP97B9/YD5sGvj188MCBgwe/HY19E70yI1YtJFSFZH+ghK9EgwsHsLOGDx44/N7hA8PwG9g/MHBwAOjAwHsD+/cPtPIBQBwS+wf4+pFPZ4q2QgBraaNlacT0ODXVMNQNXqwxywm/yHnHQOtA3kQ1BgHcqftImal1oBjWkI9yuoRwSMc6TQqHsp6vjQuvP57g3mM4VRhwoOT7L+HgWP0Vt4JZUSt407I37Z+aaPwpVSwal3tN0VZzeEUh3a9YpB1OEy6AjQ5vbeP3smSf4kr9BMoC6TS2cDDRp32LUuOG4/vMwj4spo+mz/UAu0rw0K7jXAV7fF31nirteBJeUaik+6b7b98aRZvkTZls1slkMzb1KQ6D53qcaN8cz3O57UDSsx0lPdiCI7NYnutaLvPRpYex+FxRp9eQQQuxMCiz3UIGbnQnKNB7saUx6zQ1WRjXiTDPc7B9zXYsRw+Z69gZx3WIsjEWr29BVo9lMSh9Fps8y+EVsX90Sg0Tobt1iXo21TDUG16ZV0RJSswHL6RC1zxJBMVhYCWRVOAPx6vQTnw4tLFCVz4qhZ2IB1VS51BirlXb3MDw3rjmkPi0474V2sGMt+R4sTWIWFRqXqQ04KmGoW50A/F7K4ASB3tJjaKgewSJSux7K3CvGbgm6IBl5j5Br1Qo6ITPMRqfRO9fqdvMcT8VvvRsGz3+0vCycGAFbrpYFYOk5t9yodDoPYPCUEWuh466LqgEHoZ8dIWDI644npu1heNlM64rqQerno1tcJ4D8pYpzGunzpaQvTGe8UhXyTHakvW9jc69guhhgCzH9iDlOLYe0Ia4xMky9OCBvVIxdJ92MSKX4xIO8DIbAE6drsT5P3YmASFcXhEZyYqpRqHe8GpPM8kodvdD1z20GSSKAXTPw02oHmAWS/v6SRPEXuetBC8cl2sNR8bMBfZFLqVDRJU9jc299fDvjT79lON0C6/UpNnoRVs9xgwK5AHyK3BxATsBlKkOt0QMST/sW6Es7ALPwTCTiqBDPyZgCwURIbCTEHYF8hVwuq07AZi+80KpVNmWNitygQjWI1iYsq1CEMmGdkA1wgG0A/TMcbGEUwQsYUtidGnsokIkjnzneFQ4lkB3VCwDnaxnfHrgsNSbCoVDLrQlcqjz5pKSQpSYFI3MvWG/NowvjRU4oCQoCrgygeMzWdTzlPA82EWpciyONTyuruex8H14FhyVPF3Mva0GQNMbKOi/0spzCVSTVWlTDUP94OWBWeEbFYnr3oMmboOI4k5z49kbdiDEzoVEGY0qHaYavgSEV0vaUC3T8bVyyNFVGjDkGKQDDyc/dHep/k9kTWwrObLq/rGcv8JxvDQVZqid5oBvQWj3aR70YQvCY+RiRJPWWvCXGAlJR+AJZkKm1oWIQv9xXREdBgqsvOQ8kTm1N5Gt2v4Rzps4f8XjKm33zdCtHEduxA5rIqhBn+jH4Cfa2gIXSR1Gp6WYQjgVbgCsGjYi6XHrI/4IGbnaMvgoY/4J2wbCdoBR9o/h/BWOS26PrhPAC+qA7YK9y1wPB8YLxtwmiikiGXYEUlRZhIyOOzfwtibCbOh/kedSbcZRO4apE6aMEDORMJHcQtOf4njf+IgHj7Z/vMdxv2QHag6exYgUjLrMt9wsVpdj+eZYoBxkbQllmOvgeBWjXVJzr5LjJBVHqJaqwl4jI0SQS4iE2Ki0DBJRbmECf8UCZ4T9Yiznr3Jc+XYTb5tLrDCnShIMBQc8a9vMxjEsbGozyyYKv11I4RtI+5Un58EgVkGYOBG1WETLcC3y/g9TMl5NtmrEKkacOY4iWn7+dNYwbmgiCL6IMpVfK7LQ4yNS8UhLl4n8ifNEWCRuGL3Tw5xhK03yfnO51lx4pVxOtMT3UOGZecKsECXLEjM4mJf6+pY2JVdvbxajXid13tJMomwt5fXNR1im8yfu2QhbP9TFUNXCKpzS0sZQoeRWiqE6W+YkEovasKW4/L5iLtLGDN4DjwdhiLl7BLBEKdyVr1N6Z6LKeUR5xpFeUfkbE6mXgaT00yuFD4JBjHUMyRLPcZ7iiLhiJq1fpeu/wmXsY5bwiCzzzPGFieanuB9/MuW3HX93JYxT5iOcesqU8EiWsmkES7an35lILlNJUeGRIlmBwHIUkrCREdyj45ilxEt04aR+WjD4FtOfYsKyNZQcdUWU/BO3Z8SCEREy9cClR5e6BpfAUvp6w3l6rygBreL2JEOUXKjytcuuEQoHKaNo3kb28gSYSebLhaPfwkpros42df7kfSdjSJZ+TOlvJAqnKioANfavtORIUXlvtaNqQSWFRVRCmlmFKHwTvzgYxayaAiaqbB23Jlf1XPWn0a9bmmOJGPcpqlJesP8Pl6T1NZ7xVoYAAAAldEVYdGRhdGU6Y3JlYXRlADIwMjEtMTItMTBUMjI6MjM6NDcrMDA6MDD+RbeWAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDIxLTEyLTEwVDIyOjIzOjQ3KzAwOjAwjxgPKgAAAABJRU5ErkJggg==" diff --git a/includes/frontail.service b/includes/frontail.service deleted file mode 100644 index ecfaceb64..000000000 --- a/includes/frontail.service +++ /dev/null @@ -1,18 +0,0 @@ -[Unit] -Description=Frontail openHAB instance, reachable at http://%H:9001 -Documentation=https://github.com/mthenw/frontail -After=openhab.service -PartOf=openhab.service - -[Service] -Type=simple -ExecStart=%FRONTAILBASE/bin/frontail --disable-usage-stats --ui-highlight --ui-highlight-preset %FRONTAILBASE/preset/openhab_AEM.json --theme openhab_AEM --lines 2000 --number 200 /var/log/openhab/openhab.log /var/log/openhab/events.log -Restart=always -User=frontail -Group=openhab -Environment=PATH=/usr/local/bin:/usr/bin/ -Environment=NODE_ENV=production -WorkingDirectory=/usr/bin/ - -[Install] -WantedBy=multi-user.target diff --git a/includes/openhab-override.conf b/includes/openhab-override.conf index 04127d683..68cd6d534 100644 --- a/includes/openhab-override.conf +++ b/includes/openhab-override.conf @@ -1,6 +1,6 @@ [Unit] -Wants=frontail.service homegear.service -Before=frontail.service homegear.service +Wants=homegear.service +Before=homegear.service [Service] UMask=0002 diff --git a/openhabian-setup.sh b/openhabian-setup.sh index 3ba493026..0675cda9e 100755 --- a/openhabian-setup.sh +++ b/openhabian-setup.sh @@ -117,8 +117,6 @@ if [[ -n "$UNATTENDED" ]]; then srv_bind_mounts samba_setup clean_config_userpw - frontail_setup - custom_frontail_log "add" "$custom_log_files" jsscripting_npm_install "openhab_rules_tools" zram_setup exim_setup @@ -134,6 +132,7 @@ else openhabian_update_check jsscripting_npm_check "openhab" jsscripting_npm_check "openhab_rules_tools" + frontail_remove # remove old frontail service if present can be removed in future while show_main_menu; do true done From 00538fc8dd4ef57578fe220dbd11194e0fc51798 Mon Sep 17 00:00:00 2001 From: Ethan Dye Date: Sun, 15 Dec 2024 16:09:50 -0700 Subject: [PATCH 2/3] Remove leftovers from openhabian.conf Signed-off-by: Ethan Dye --- build-image/openhabian.conf | 3 --- 1 file changed, 3 deletions(-) diff --git a/build-image/openhabian.conf b/build-image/openhabian.conf index b836d9c5f..14bfac21e 100644 --- a/build-image/openhabian.conf +++ b/build-image/openhabian.conf @@ -113,7 +113,4 @@ storagecapacity=1024 # preauthkey=tskey-xxxxxxxxxxxxxxxxx # tstags=tag:client -# Custom log files -# custom_log_files=("/var/log/foo.log" "/var/log/bar.log") - # vim: filetype=sh From 8b2ec1dcce3b1c45c0282226c02788b27ba85bb7 Mon Sep 17 00:00:00 2001 From: Ethan Dye Date: Tue, 17 Dec 2024 19:25:10 -0700 Subject: [PATCH 3/3] Only remove if openHAB 4.3+ installed Signed-off-by: Ethan Dye --- NEWS.md | 7 ++++--- docs/CHANGELOG.md | 7 ++++--- functions/nodejs-apps.bash | 2 ++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/NEWS.md b/NEWS.md index 49fb7d0a9..b0acbf52b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -4,9 +4,10 @@ for you to lookup. ## Frontail removed ## December XX, 2024 We have removed the frontail log-viewer package and deleted it from all -systems. As of openHAB 4.3 a log-viewer is built in to openHAB, and frontail -has serious security vulnerabilities present and is no longer maintained. We -apologize for any inconvenience this may cause. +systems with openHAB 4.3 or later installed. As of openHAB 4.3 a log-viewer +is built in to openHAB, and frontail has serious security vulnerabilities +present and is no longer maintained. We apologize for any inconvenience +this may cause. ## Legacy openHAB 2 support removed ## November 23, 2024 We have removed legacy support for the openHAB 2 systems. Please upgrade to diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 157995563..9d413ea97 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,8 +1,9 @@ ## Frontail removed ## December XX, 2024 We have removed the frontail log-viewer package and deleted it from all -systems. As of openHAB 4.3 a log-viewer is built in to openHAB, and frontail -has serious security vulnerabilities present and is no longer maintained. We -apologize for any inconvenience this may cause. +systems with openHAB 4.3 or later installed. As of openHAB 4.3 a log-viewer +is built in to openHAB, and frontail has serious security vulnerabilities +present and is no longer maintained. We apologize for any inconvenience +this may cause. ## Legacy openHAB 2 support removed ## November 23, 2024 We have removed legacy support for the openHAB 2 systems. Please upgrade to diff --git a/functions/nodejs-apps.bash b/functions/nodejs-apps.bash index 40808e31a..229ee5d33 100644 --- a/functions/nodejs-apps.bash +++ b/functions/nodejs-apps.bash @@ -64,6 +64,8 @@ frontail_remove() { frontailBase="$(npm list -g | head -n 1)/node_modules/frontail" + if ! [[ $(openhab-cli info | grep "Version" | xargs | cut -d ' ' -f 2) =~ 4.[3-9]* ]]; then return 0; fi + if [[ -d $frontailBase ]] || [[ -d $frontailDir ]]; then echo -n "$(timestamp) [openHABian] Removing openHAB Log Viewer frontail... " if [[ $(systemctl is-active frontail.service) == "active" ]]; then