#!/usr/bin/env bash #=============================================================================== # # DIRECTORY: # --- # # FILE: # ./template_engine.sh # # USAGE: # . template_engine.sh # OR # source template_engine.sh # # EXIT STATES: # 201 = functions library not loaded # 202 = libplist (Linux/FreeBSD) not installed # 203 = base64 not installed # 204 = vim (xxd) not installed # 205 = sqlite3 not installed # 206 = os not supported (yet) # # DESCRIPTION: # Simple template engine (library) with templates for basic content. # # REQUIREMENTS: # cat, base64, mkdir, ... # # BUGS: # --- # # TESTS: # - shellcheck -s bash -e SC2086,SC2034 ./template_engine.sh # - shellcheck -s ksh -e SC2086,SC2034 ./template_engine.sh # - shellcheck -s dash -e SC2086,SC2034 ./template_engine.sh # # AUTHOR: # Patrick Neumann, patrick@neumannsland.de # # COAUTHOR(S): # Odin Heitmann, odin.heitmann@gmail.com # # COMPANY: # (privately) # # VERSION: # 1.0 # # LINK TO THE MOST CURRENT VERSION: # (Sorry, we bet, I'm not allowed to publish it over GitHub!) # # CREATED: # 2018-06-01 # # COPYRIGHT (C): # 2018 - Patrick Neumann & Odin Heitmann # # LICENSE: # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # WARRANTY: # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # NOTES: # --- # # TODO: # --- # # HISTORY: # 1.0 - P. N. & O. H. - Initial (for the trainers eyes only) release # #=============================================================================== #------------------------------------------------------------------------------- # Check if functions library is loaded first. #------------------------------------------------------------------------------- if [ "${FUNCTIONS_LOADED}" != "true" ] ; then printf "\\n\\033[01;31;40mERROR: functions library not loaded... EXIT!!!\\033[00m\\n\\n" exit 201 fi #=== CONFIGURATION (static) ==================================================== assign_binary "echo" # common assign_binary "base64" # uncommon: FreeBSD assign_binary "cat" # common assign_binary "file" # common # for plugins: assign_binary "cp" # common assign_binary "head" # common assign_binary "tail" # common assign_binary "xxd" # uncommon: Arch Linux/FreeBSD assign_binary "find" # common case "${OS_NAME}" in Darwin) assign_binary "plutil" # common only macOS ;; Linux|FreeBSD) assign_binary "plistutil" [ -z "${BIN_PLISTUTIL}" ] && error_exit "please install libplist and retry" 202 ;; *) error_exit "Sorry, your os is actually not supported\\!" ;; esac # Because sqlite3 from macOS 10.13.4 does not remove *-wal and *-shm files # after exit it is better to use that one from Homebrew (if installed): readonly HOMEBREW_SQLITE="/usr/local/opt/sqlite/bin" if [ -d "${HOMEBREW_SQLITE}" ] && [ -n "${PATH##*${HOMEBREW_SQLITE}*}" ] ; then export PATH="/usr/local/opt/sqlite/bin:${PATH}" fi assign_binary "sqlite3" # uncommon: FreeBSD #------------------------------------------------------------------------------- # Check existence of uncommon binaries. #------------------------------------------------------------------------------- [ -z "${BIN_BASE64}" ] && error_exit "please install base64 and retry" 203 [ -z "${BIN_XXD}" ] && error_exit "please install vim (xxd) and retry" 204 [ -z "${BIN_SQLITE3}" ] && error_exit "please install vim (xxd) and retry" 205 #=== FUNCTION ================================================================== # "The template engine" # (inspired by: http://pempek.net/articles/2013/07/08/bash-sh-as-template-engine/) #=============================================================================== render_template() { # with no options echo from each shell will do it eval "echo \"${1}\"" } #=== FUNCTION ================================================================== # NAME: init_folder # DESCRIPTION: create folder with initial content (html, css, jpg and images) # PARAMETERS: none (global vars will be used.) #=============================================================================== init_folder () { #------------------------------------------------------------------------------- # Create the favicon. #------------------------------------------------------------------------------- # Into base64 converted binary data could be "a little bit longer". # "echo" expects longer argument list then printf. # Freeing some memory afterwards could not be amiss. FAVICON_BASE64="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ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAWgAAAPoAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8eHh7/nJyc/5CQkP9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//kZGR/5ubm/8eHh7/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA+gAAAGAAAAAaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA7AAAA5gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/0hISP+hoaH/gICA/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//4CAgP+hoaH/SEhI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOYAAAA6AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACIAAACwAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/VlZW/5qamv9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//m5ub/1VVVf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACxAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAF0AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9JSUn/nJyc/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//5ubm/9ISEj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAYgAAABgAAAAAAAAAAAAAAAAAAAAAAAAAKQAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/x8fH/+ioqL/f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+ZmZn/HBwc/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAzwAAACkAAAAAAAAAAAAAAAAAAAASAAAAaQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/5ycnP+AgID/aGho/0hISP9HR0f/VFRU/3p6ev9/f3//cXFx/1BQUP9ISEj/ZWVl/1ZWVv9ERET/QkJC/0JCQv9CQkL/SEhI/0BAQP9AQED/XV1d/39/f/9/f3//f39//15eXv8+Pj7/Pj4+/0hISP91dXX/m5ub/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAGEAAAATAAAAAAAAAAAAAAAjAAAAuwAAAP8cHBz/AQEB/wAAAP8AAAD/W1tb/5CQkP9/f3//TU1N/4KCgv+AgID/ICAg/3Fxcf9sbGz/QUFB/3Z2dv8/Pz//NjY2/29vb/+Xl5f/mZmZ/5mZmf+ZmZn/MTEx/5mZmf9gYGD/Ozs7/3x8fP99fX3/f39//0dHR/+pqan/qamp/yMjI/9ra2v/kZGR/1lZWf8AAAD/AAAA/wQEBP8HBwf/AAAA/wAAALYAAAAjAAAAAAAAAAAAAABDAAAA+gAAAP+Dg4P/sbGx/2dnZ/8CAgL/oKCg/39/f/9/f3//TU1N//Dw8P/w8PD/Hx8f/0xMTP89PT3/t7e3//////9zc3P/p6en///////V1dX/w8PD/8PDw//Dw8P/S0tL//////+hoaH/KCgo/zIyMv85OTn/XFxc/0xMTP///////////ysrK/9ra2v/f39//5+fn/8BAQH/UVFR/4qKiv+Kior/AAAA/wAAAPoAAABDAAAAAAAAABcAAAB2AAAA/xkZGf+Ojo7/xsbG/xcXF/9SUlL/kpKS/39/f/9/f3//TU1N//Dw8P/39/f/eHh4/0BAQP/V1dX///////////9zc3P/2NjY/8jIyP8xMTH/Wlpa/1lZWf9ZWVn/Wlpa///////n5+f/vb29/7q6uv+UlJT/JiYm/0ZGRv///////////ysrK/9ra2v/f39//5KSkv9QUFD/WFhY/8nJyf+ZmZn/BAQE/wAAAP8AAAB3AAAAGwAAABwAAACtAAAA/x8fH/9ZWVn/V1dX/ygoKP+QkJD/f39//39/f/9/f3//TU1N//Dw8P///////////2lpaf+Dg4P/tLS0//////9zc3P/2dnZ/8vLy/8ZGRn/Jycn/ycnJ/8nJyf/QUFB/7u7u/+7u7v/u7u7/7u7u/+7u7v/YGBg/zExMf///////////ysrK/9ra2v/f39//39/f/+Pj4//HBwc/1BQUP+Tk5P/Ozs7/wAAAP8AAACtAAAAIgAAACIAAADdAAAA/4uLi/9KSkr/np6e/wICAv+ioqL/f39//39/f/9/f3//TU1N//Dw8P/39/f/ampq/1RUVP9qamr/fHx8//////9zc3P/oqKi///////q6ur/2NjY/9jY2P/Y2Nj/QUFB/+Dg4P/g4OD/4ODg/+Dg4P/g4OD/4ODg/0pKSv///////////ysrK/9ra2v/f39//39/f/+hoaH/AgIC/6Ojo/82Njb/g4OD/wAAAP8AAADdAAAAIgAAADkAAAD+AAAA/0RERP+hoaH/dnZ2/zExMf+ZmZn/f39//39/f/9/f3//VVVV/5OTk/9WVlb/XFxc/3p6ev91dXX/YWFh/5qamv9TU1P/UlJS/4ODg/+bm5v/nZ2d/56env+dnZ3/RkZG/5ubm/+ampr/mpqa/5qamv+ampr/mpqa/0RERP+hoaH/oaGh/zIyMv9ubm7/f39//39/f/+ampr/Li4u/1paWv95eXn/PT09/wAAAP8AAAD7AAAAMQAAAFoAAAD/EBAQ/6Ojo/+fn5//VVVV/2hoaP+Hh4f/f39//39/f/9/f3//eHh4/21tbf9wcHD/fHx8/39/f/99fX3/cXFx/21tbf9wcHD/h4eH/5SUlP+ZmZn/qKio/62trf+hoaH/kpKS/4KCgv90dHT/bGxs/2xsbP9sbGz/bGxs/25ubv9sbGz/bGxs/29vb/98fHz/f39//39/f/+IiIj/ZWVl/15eXv+enp7/xMTE/wsLC/8AAAD/AAAAVAAAAGcAAAD/GRkZ/5mZmf+goKD/Ozs7/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+Hh4f/nZ2d/7e3t//S0tL/6Ojs/+3t8v/g4OD/xMTE/6qqqv+SkpL/gICA/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//z4+Pv9MTEz/FRUV/wQEBP8AAAD/AAAAZwAAAGcAAAD/CQkJ/0xMTP9ISEj/Ly8v/4GBgf9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+MjIz/q6ur/8vLy/+nser/GELX/xc/1/+hrfD/3t7e/7y8vP+bm5v/goKC/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//gYGB/wsLC/+pqan/2NjY/x8fH/8AAAD/AAAAbAAAAGcAAAD/Ojo6/4CAgP9dXV3/cHBw/4GBgf9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+QkJD/tLS0/9jY2P9DYt//QWbZ/32W5v89X97/6urq/8bGxv+ioqL/g4OD/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//gYGB/z09Pf9kZGT/EhIS/wAAAP8AAAD/AAAAbAAAAGcAAAD/BgYG/4uLi/+ZmZn/Gxsb/35+fv9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+MjIz/q6ur/83Nzf9YceH/Xn/e/67A7v9eduT/39/f/7y8vP+bm5v/goKC/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//29vb/+rq6v/NjY2/xUVFf8AAAD/AAAAZwAAAFoAAAD/BwcH/5+fn/+jo6P/Xl5e/2hoaP+Hh4f/f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+Hh4f/np6e/7e3t//Ky9X/Um7f/2N65f/MzuL/xMTE/6qqqv+SkpL/gICA/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+IiIj/Z2dn/1lZWf+bm5v/oaGh/wwMDP8AAAD/AAAAVAAAADsAAAD+AAAA/ysrK/+YmJj/a2tr/zExMf+ampr/f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+Dg4P/enp6/6Kiov+3t7f/ysrK/9HR0f/BwcH/ra2t/3t7e/+Kior/f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+bm5v/Ly8v/3l5ef90dHT/Ojo6/wAAAP8AAAD7AAAAMgAAACIAAADdAAAA/42Njf8SEhL/VlZW/wMDA/+ioqL/f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9ra2v/BgYG/yIiIv9xcXH/pKSk/6qqqv9+fn7/Li4u/wAAAP9XV1f/f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+ioqL/CAgI/xkZGf8zMzP/SUlJ/wAAAP8AAADdAAAAIgAAABwAAACtAAAA/xUVFf8AAAD/AAAA/wAAAP+QkJD/f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/98fHz/OTk5/wICAv8AAAD/AgIC/wICAv8AAAD/AQEB/y8vL/93d3f/f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+Pj4//ExMT/5SUlP+pqan/aWlp/wAAAP8AAACtAAAAIgAAABcAAAB3AAAA/wAAAP8sLCz/np6e/2xsbP9SUlL/kpKS/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//TExM/0FBQf9/f3//f39//3BwcP9CQkL/Kysr/yoqKv8/Pz//a2tr/39/f/9/f3//YWFh/1xcXP9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//5KSkv9RUVH/cHBw/3h4eP8TExP/Hx8f/wAAAP8AAAB3AAAAGwAAAAAAAABEAAAA+gAAAP+SkpL/DAwM/z8/P/8CAgL/np6e/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9+fn7/Gxsb/wAAAP8mJib/b29v/39/f/9/f3//f39//39/f/9/f3//f39//3R0dP81NTX/AQEB/w4ODv99fX3/f39//39/f/9/f3//f39//39/f/9/f3//f39//56env8ODg7/SEhI/5+fn/+Ghob/AAAA/wAAAPoAAABEAAAAAAAAAAAAAAAmAAAAuwAAAP8jIyP/h4eH/5qamv9sbGz/XV1d/5CQkP9/f3//f39//39/f/9/f3//f39//35+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AK0AAADdAAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAADdAAAArQAAAHYAAABDAAAAIwAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAABwAAAAiAAAAOwAAAFoAAABnAAAAZwAAAGcAAABnAAAAWgAAADkAAAAiAAAAHAAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA///AA///AAD//gAAf/8AAP/4AAAf/wAA/+AAAAf/AAD/wAAAA/8AAP+AAAAB/wAA/gAAAAB/AAD+AAAAAH8AAPwAAAAAPwAA+AAAAAAfAADwAAAAAA8AAPAAAAAADwAA4AAAAAAHAADgAAAAAAcAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAIAAAAAAAQAAgAAAAAABAACAAAAAAAEAAMAAAAAAAwAAwAAAAAADAADAAAAAAAMAAOAAAAAABwAA4AAAAAAHAADwAAAAAA8AAPAAAAAADwAA+AAAAAAfAAD8AAAAAD8AAP4AAAAAfwAA/gAAAAB/AAD/gAAAAf8AAP/AAAAD/wAA/+AAAAf/AAD/+AAAH/8AAP/+AAB//wAA///AA///AAD///////8AACgAAAAgAAAAQAAAAAEAIAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAABRAAAAewAAAJMAAACbAAAAmwAAAJEAAAB6AAAAUAAAACAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAA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f/9/f3//np6e/8zMzv9pe+b/W3Pl/+Pj5/+1tbX/iYmJ/39/f/9/f3//f39//39/f/9/f3//f39//39/f/95eXn/Y2Nj/5CQkP8ODg7/AAAAmwAAAJscHBz/mpqa/3Fxcf94eHj/f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+lpaX/p6zd/zhk2v+Fnuf/l6bn/7+/v/+Li4v/f39//39/f/9/f3//f39//39/f/9/f3//f39//3l5ef9XV1f/LS0t/wEBAf8AAACbAAAAkwMDA/91dXX/T09P/3Fxcf9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//5eXl/+8vL//UGzg/2qC5v/OztX/qamp/4aGhv9/f3//f39//39/f/9/f3//f39//39/f/9/f3//cXFx/3Fxcf+Tk5P/Dg4O/wAAAJMAAAB7AAAA/1paWv9xcXH/YmJi/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//ZGRk/4uLi/+3t7f/wMDA/5ubm/9gYGD/goKC/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9gYGD/X19f/2RkZP8AAAD/AAAAewAAAFMAAAD/JCQk/wgICP8rKyv/jIyM/39/f/9/f3//f39//39/f/9/f3//f39//39/f/85OTn/BQUF/ygoKP8rKyv/BgYG/y8vL/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//jY2N/zIyMv9xcXH/VFRU/wAAAP8AAABRAAAAIwAAAOENDQ3/d3d3/0tLS/+Ghob/f39//39/f/9/f3//f39//39/f/9NTU3/PDw8/35+fv9tbW3/S0tL/0lJSf9paWn/f39//1BQUP9XV1f/f39//39/f/9/f3//f39//39/f/+FhYX/TExM/1hYWP8qKir/AAAA3QAAACAAAAAUAAAAnRAQEP9QUFD/cXFx/1FRUf+Hh4f/f39//39/f/9/f3//f39//2xsbP8WFhb/FxcX/05OTv9oaGj/aGho/01NTf8bGxv/Dg4O/1xcXP9+fn7/f39//39/f/9/f3//h4eH/1JSUv9mZmb/WFhY/w4ODv8AAACaAAAAEAAAAAAAAABQAAAA+lJSUv93d3f/MjIy/4SEhP9/f3//f39//2ZmZv8YGBj/aGho/319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" ${BIN_ECHO} -n "${FAVICON_BASE64}" | ${BIN_BASE64} --decode > "${FOLDER}/favicon.ico" FAVICON_BASE64= #------------------------------------------------------------------------------- # Create the logo. #------------------------------------------------------------------------------- LOGO_BASE64="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" ${BIN_ECHO} -n "${LOGO_BASE64}" | ${BIN_BASE64} --decode > "${FOLDER}/logo_72x72.png" LOGO_BASE64= #------------------------------------------------------------------------------- # Create the CSS files (customized YAML). #------------------------------------------------------------------------------- IEHACKS_BASE64="LyogWWV0IEFub3RoZXIgTXVsdGljb2x1bW4gTGF5b3V0IC0gaHR0cDovL3d3dy55YW1sLmRlICovCkBtZWRpYSBhbGx7Ym9keXtvXHZlcmZsb3c6dmlzaWJsZX1hcnRpY2xlLGFzaWRlLGRldGFpbHMsZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixtYWluLG5hdixzZWN0aW9ue3pvb206MX1hdWRpbyxjYW52YXMsdmlkZW97KmRpc3BsYXk6aW5saW5lOyp6b29tOjF9aW1ney1tcy1pbnRlcnBvbGF0aW9uLW1vZGU6YmljdWJpYzt6b29tOjF9KiBodG1sIGlmcmFtZSwqIGh0bWwgZnJhbWV7b3ZlcmZsb3c6YXV0b30qIGh0bWwgaW5wdXQsKiBodG1sIGZyYW1lc2V0e292ZXJmbG93OmhpZGRlbn0qIGh0bWwgdGV4dGFyZWF7b3ZlcmZsb3c6c2Nyb2xsO292ZXJmbG93LXg6aGlkZGVufWJvZHksI21haW57cG9zaXRpb246cmVsYXRpdmV9KiBodG1sIGJvZHl7cG9zaXRpb246c3RhdGljfS55bS1jbGVhcmZpeHt6b29tOjF9KiBodG1sIC55bS1jb2wxLCogaHRtbCAueW0tY29sMiwqIGh0bWwgLnltLWNvbDN7cG9zaXRpb246cmVsYXRpdmV9Ym9keXtoZWlnaHQ6MSV9LnltLXdyYXBwZXIsLnltLXdib3gsI2hlYWRlciwjbmF2LCNtYWluLCNmb290ZXJ7em9vbToxfSogaHRtbCAueW0td3JhcHBlciwqIGh0bWwgLnltLXdib3h7aGVpZ2h0OjElO2hlaVxnaHQ6YXV0b30qIGh0bWwgI2hlYWRlciwqIGh0bWwgI25hdiwqIGh0bWwgI21haW4sKiBodG1sICNmb290ZXJ7d2lkdGg6MTAwJTt3aWRcdGg6YXV0b30ueW0tZ2JveCwueW0tZ2JveC1sZWZ0LC55bS1nYm94LXJpZ2h0e2hlaWdodDoxJX0qIGh0bWwgdWwsKiBodG1sIG9sLCogaHRtbCBkbHtwb3NpdGlvbjpyZWxhdGl2ZX1ib2R5IG9sIGxpe2Rpc3BsYXk6bGlzdC1pdGVtfSogaHRtbCAuZmxleGlibGV7em9vbToxfWJ1dHRvbixpbnB1dHsqb3ZlcmZsb3c6dmlzaWJsZSFpbXBvcnRhbnR9dGFibGUgYnV0dG9uLHRhYmxlIGlucHV0eypvdmVyZmxvdzphdXRvfWZpZWxkc2V0LGxlZ2VuZHtwb3NpdGlvbjpyZWxhdGl2ZX0ueW0tZm9ybSwueW0tZm9ybSBkaXYsLnltLWZvcm0gZGl2ICp7em9vbToxfS55bS1mb3JtIGlucHV0LC55bS1mb3JtIHRleHRhcmVhe3dpZHRoOjY4JTtwYWRkaW5nLWxlZnQ6MSUhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MSUhaW1wb3J0YW50fS55bS1mb3JtIHNlbGVjdHt3aWR0aDo3MCU7cGFkZGluZy1sZWZ0OjElIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjElIWltcG9ydGFudH0ueW0tZm9ybSAueW0tZmJveC13cmFwe2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbi1yaWdodDotNXB4fS55bS1mYm94LXdyYXAgaW5wdXQsLnltLWZib3gtd3JhcCB0ZXh0YXJlYSwueW0tZnVsbCBpbnB1dCwueW0tZnVsbCB0ZXh0YXJlYXt3aWR0aDo5OCU7bWFyZ2luLXJpZ2h0Oi0zcHh9LnltLWZib3gtd3JhcCBzZWxlY3QsLnltLWZ1bGwgc2VsZWN0e3dpZHRoOjEwMCU7bWFyZ2luLXJpZ2h0Oi0zcHh9KiBodG1sIC55bS1mb3JtIC55bS1mYm94LWNoZWNrIGlucHV0e2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudDt3aWR0aDphdXRvIWltcG9ydGFudDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IWltcG9ydGFudDtib3JkZXI6MCBub25lIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0YW50fSogaHRtbCAueW0tZm9ybSAueW0tZmJveC13cmFwIC55bS1mYm94LWNoZWNrIGlucHV0e21hcmdpbi1sZWZ0OjB9aHRtbCAueW0taWUtY2xlYXJpbmd7cG9zaXRpb246c3RhdGljO2Rpc3BsYXk6YmxvY2s7XGNsZWFyOmJvdGg7d2lkdGg6MTAwJTtsaW5lLWhlaWdodDowO2ZvbnQtc2l6ZTowO21hcmdpbjotMnB4IDAgLTFlbSAxcHh9KiBodG1sIC55bS1pZS1jbGVhcmluZ3ttYXJnaW46LTJweCAwIC0xZW0gMH0ueW0tY2JveHttYXJnaW4tYm90dG9tOi0ycHh9aHRtbHttYXJnaW4tcmlnaHQ6MXB4fSogaHRtbHttYXJnaW4tcmlnaHQ6MH0ueW0tY29sM3twb3NpdGlvbjpyZWxhdGl2ZX19QG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uey55bS1jb2wxLC55bS1jb2wye2Rpc3BsYXk6aW5saW5lfS55bS1ncmlke292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrfSogaHRtbCAueW0tZ3JpZHtvdmVyZmxvdzp2aXNpYmxlfS55bS1nbCwueW0tZ3J7ZGlzcGxheTppbmxpbmV9LnltLWVxdWFsaXplIC55bS1nbHtmbG9hdDpsZWZ0O2Rpc3BsYXk6aW5saW5lO3BhZGRpbmctYm90dG9tOjMyNzY3cHg7bWFyZ2luLWJvdHRvbTotMzI3NjdweH0ueW0tZXF1YWxpemUgLnltLWdye2Zsb2F0OnJpZ2h0O21hcmdpbi1sZWZ0Oi01cHg7ZGlzcGxheTppbmxpbmU7cGFkZGluZy1ib3R0b206MzI3NjdweDttYXJnaW4tYm90dG9tOi0zMjc2N3B4fS5uby1pZS1wYWRkaW5nIC55bS1nbCwubm8taWUtcGFkZGluZyAueW0tZ3J7cGFkZGluZy1ib3R0b206MDttYXJnaW4tYm90dG9tOjB9KiBodG1sIC55bS1jYm94LWxlZnQsKiBodG1sIC55bS1jYm94LXJpZ2h0LCogaHRtbCAueW0tY2JveHt3b3JkLXdyYXA6YnJlYWstd29yZH0qIGh0bWwgLnltLWdib3gsKiBodG1sIC55bS1nYm94LWxlZnQsKiBodG1sIC55bS1nYm94LXJpZ2h0e3dvcmQtd3JhcDpicmVhay13b3JkO29cdmVyZmxvdzpoaWRkZW59fUBtZWRpYSBwcmludHsueW0tZ2JveCwueW0tZ2JveC1sZWZ0LC55bS1nYm94LXJpZ2h0LC55bS1jb2wze2hlaWdodDoxJX19" ${BIN_ECHO} -n "${IEHACKS_BASE64}" | ${BIN_BASE64} --decode > "${FOLDER}/iehacks.min.css" IEHACKS_BASE64= THEME_BASE64="LyogWWV0IEFub3RoZXIgTXVsdGljb2x1bW4gTGF5b3V0IC0gaHR0cDovL3d3dy55YW1sLmRlICovCkBpbXBvcnQgdXJsKGh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NlcmlmOjQwMCw0MDBpdGFsaWMsNzAwfERyb2lkK1NhbnM6NzAwKTsKQG1lZGlhIGFsbHsqe21hcmdpbjowO3BhZGRpbmc6MH1vcHRpb257cGFkZGluZy1sZWZ0Oi40ZW19c2VsZWN0e3BhZGRpbmc6MXB4fSogaHRtbCBib2R5ICp7b3ZlcmZsb3c6dmlzaWJsZX1ib2R5e2ZvbnQtc2l6ZToxMDAlO2JhY2tncm91bmQ6I2ZmZjtjb2xvcjojMDAwO3RleHQtYWxpZ246bGVmdH1kaXY6dGFyZ2V0LGgxOnRhcmdldCxoMjp0YXJnZXQsaDM6dGFyZ2V0LGg0OnRhcmdldCxoNTp0YXJnZXQsaDY6dGFyZ2V0e291dGxpbmU6MCBub25lfWFydGljbGUsYXNpZGUsZGV0YWlscyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLG1haW4sbmF2LHNlY3Rpb24sc3VtbWFyeXtkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja31hdWRpbzpub3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lfVtoaWRkZW5de2Rpc3BsYXk6bm9uZX1odG1sey1tcy10ZXh0LXNpemUtYWRqdXN0OjEwMCU7LXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OjEwMCV9aW5wdXRbdHlwZT1jaGVja2JveF0saW5wdXRbdHlwZT1yYWRpb117Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1pbnB1dFt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3h9aW5wdXRbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLGlucHV0W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1zdmc6bm90KDpyb290KXtvdmVyZmxvdzpoaWRkZW59ZmlndXJle21hcmdpbjowfWZpZWxkc2V0LGltZ3tib3JkZXI6MCBzb2xpZH11bCxvbCxkbHttYXJnaW46MCAwIDFlbSAxZW19bGl7bGluZS1oZWlnaHQ6MS41ZW07bWFyZ2luLWxlZnQ6LjhlbX1kdHtmb250LXdlaWdodDo3MDB9ZGR7bWFyZ2luOjAgMCAxZW0gLjhlbX1ibG9ja3F1b3Rle21hcmdpbjowIDAgMWVtIC44ZW19cXtxdW90ZXM6bm9uZX1ibG9ja3F1b3RlOmJlZm9yZSxibG9ja3F1b3RlOmFmdGVyLHE6YmVmb3JlLHE6YWZ0ZXJ7Y29udGVudDoiIjtjb250ZW50Om5vbmV9dGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9LnltLWNsZWFyZml4OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6dGFibGV9LnltLWNsZWFyZml4OmFmdGVye2NsZWFyOmJvdGg7Y29udGVudDoiLiI7ZGlzcGxheTpibG9jaztmb250LXNpemU6MDtoZWlnaHQ6MDt2aXNpYmlsaXR5OmhpZGRlbn0ueW0tY29udGFpbi1kdHtkaXNwbGF5OnRhYmxlO3RhYmxlLWxheW91dDpmaXhlZDt3aWR0aDoxMDAlfS55bS1jb250YWluLW9oe2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCV9LnltLWNvbnRhaW4tZmx7ZmxvYXQ6bGVmdDt3aWR0aDoxMDAlfS55bS1jb2x1bW57ZGlzcGxheTp0YWJsZTt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MTAwJX0ueW0tY29sMXtmbG9hdDpsZWZ0O3dpZHRoOjIwJX0ueW0tY29sMntmbG9hdDpyaWdodDt3aWR0aDoyMCV9LnltLWNvbDN7d2lkdGg6YXV0bzttYXJnaW46MCAyMCV9LnltLWNib3h7cGFkZGluZzowIDEwcHh9LnltLWNib3gtbGVmdHtwYWRkaW5nOjAgMTBweCAwIDB9LnltLWNib3gtcmlnaHR7cGFkZGluZzowIDAgMCAxMHB4fS55bS1pZS1jbGVhcmluZ3tkaXNwbGF5Om5vbmV9LnltLWdyaWR7ZGlzcGxheTp0YWJsZTt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6MTAwJTtsaXN0LXN0eWxlLXR5cGU6bm9uZTtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MH0ueW0tZ2x7ZmxvYXQ6bGVmdDttYXJnaW46MH0ueW0tZ3J7ZmxvYXQ6cmlnaHQ7bWFyZ2luOjAgMCAwIC01cHh9LnltLWcyMHt3aWR0aDoyMCV9LnltLWc0MHt3aWR0aDo0MCV9LnltLWc2MHt3aWR0aDo2MCV9LnltLWc4MHt3aWR0aDo4MCV9LnltLWcyNXt3aWR0aDoyNSV9LnltLWczM3t3aWR0aDozMy4zMzMlfS55bS1nNTB7d2lkdGg6NTAlfS55bS1nNjZ7d2lkdGg6NjYuNjY2JX0ueW0tZzc1e3dpZHRoOjc1JX0ueW0tZzM4e3dpZHRoOjM4LjIlfS55bS1nNjJ7d2lkdGg6NjEuOCV9LnltLWdib3h7cGFkZGluZzowIDEwcHh9LnltLWdib3gtbGVmdHtwYWRkaW5nOjAgMTBweCAwIDB9LnltLWdib3gtcmlnaHR7cGFkZGluZzowIDAgMCAxMHB4fS55bS1lcXVhbGl6ZXtvdmVyZmxvdzpoaWRkZW59LnltLWVxdWFsaXplPltjbGFzcyo9eW0tZ117ZGlzcGxheTp0YWJsZS1jZWxsO2Zsb2F0Om5vbmU7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wfS55bS1lcXVhbGl6ZT5bY2xhc3MqPXltLWddPltjbGFzcyo9eW0tZ2JveF17cGFkZGluZy1ib3R0b206MTAwMDBweDttYXJnaW4tYm90dG9tOi0xMDAwMHB4fS55bS1mb3JtLC55bS1mb3JtIGZpZWxkc2V0e292ZXJmbG93OmhpZGRlbn0ueW0tZm9ybSBkaXZ7cG9zaXRpb246cmVsYXRpdmV9LnltLWZvcm0gbGFiZWwsLnltLWZvcm0gLnltLWxhYmVsLC55bS1mb3JtIC55bS1tZXNzYWdle3Bvc2l0aW9uOnJlbGF0aXZlO2xpbmUtaGVpZ2h0OjEuNTtkaXNwbGF5OmJsb2NrfS55bS1mb3JtIC55bS1tZXNzYWdle2NsZWFyOmJvdGh9LnltLWZvcm0gLnltLWZib3gtY2hlY2sgbGFiZWx7ZGlzcGxheTppbmxpbmV9LnltLWZvcm0gaW5wdXQsLnltLWZvcm0gdGV4dGFyZWF7Y3Vyc29yOnRleHR9LnltLWZvcm0gLnltLWZib3gtY2hlY2sgaW5wdXQsLnltLWZvcm0gaW5wdXRbdHlwZT1pbWFnZV0sLnltLWZvcm0gaW5wdXRbdHlwZT1yYWRpb10sLnltLWZvcm0gaW5wdXRbdHlwZT1jaGVja2JveF0sLnltLWZvcm0gc2VsZWN0LC55bS1mb3JtIGxhYmVse2N1cnNvcjpwb2ludGVyfS55bS1mb3JtIHRleHRhcmVhe292ZXJmbG93OmF1dG99LnltLWZvcm0gaW5wdXQuaGlkZGVuLC55bS1mb3JtIGlucHV0W3R5cGU9aGlkZGVuXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS55bS1mb3JtIC55bS1mYm94OmJlZm9yZSwueW0tZm9ybSAueW0tZmJveC10ZXh0OmJlZm9yZSwueW0tZm9ybSAueW0tZmJveC1zZWxlY3Q6YmVmb3JlLC55bS1mb3JtIC55bS1mYm94LWNoZWNrOmJlZm9yZSwueW0tZm9ybSAueW0tZmJveC1idXR0b246YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTp0YWJsZX0ueW0tZm9ybSAueW0tZmJveDphZnRlciwueW0tZm9ybSAueW0tZmJveC10ZXh0OmFmdGVyLC55bS1mb3JtIC55bS1mYm94LXNlbGVjdDphZnRlciwueW0tZm9ybSAueW0tZmJveC1jaGVjazphZnRlciwueW0tZm9ybSAueW0tZmJveC1idXR0b246YWZ0ZXJ7Y2xlYXI6Ym90aDtjb250ZW50OiIuIjtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZTowO2hlaWdodDowO3Zpc2liaWxpdHk6aGlkZGVufS55bS1mb3JtIC55bS1mYm94LWNoZWNrIGlucHV0OmZvY3VzLC55bS1mb3JtIC55bS1mYm94LWNoZWNrIGlucHV0OmhvdmVyLC55bS1mb3JtIC55bS1mYm94LWNoZWNrIGlucHV0OmFjdGl2ZSwueW0tZm9ybSBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1cywueW0tZm9ybSBpbnB1dFt0eXBlPXJhZGlvXTpob3ZlciwueW0tZm9ybSBpbnB1dFt0eXBlPXJhZGlvXTphY3RpdmUsLnltLWZvcm0gaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXMsLnltLWZvcm0gaW5wdXRbdHlwZT1jaGVja2JveF06aG92ZXIsLnltLWZvcm0gaW5wdXRbdHlwZT1jaGVja2JveF06YWN0aXZle2JvcmRlcjowIG5vbmV9LnltLWZvcm0gaW5wdXQsLnltLWZvcm0gdGV4dGFyZWEsLnltLWZvcm0gc2VsZWN0e2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNpemluZzpib3JkZXItYm94O3dpZHRoOjcwJX0ueW0tZm9ybSAueW0tZmJveC1jaGVjayBpbnB1dCwueW0tZm9ybSBpbnB1dFt0eXBlPXJhZGlvXSwueW0tZm9ybSBpbnB1dFt0eXBlPWNoZWNrYm94XXtkaXNwbGF5OmlubGluZTttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDouNWV4O3dpZHRoOmF1dG87aGVpZ2h0OmF1dG99LnltLWZvcm0gaW5wdXRbdHlwZT1pbWFnZV17Ym9yZGVyOjA7ZGlzcGxheTppbmxpbmU7aGVpZ2h0OmF1dG87bWFyZ2luOjA7cGFkZGluZzowO3dpZHRoOmF1dG99LnltLWZvcm0gbGFiZWwsLnltLWZvcm0gLnltLWxhYmVsey13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O2JveC1zaXppbmc6Ym9yZGVyLWJveH0ueW0tZm9ybSAueW0tZmJveC1idXR0b24gaW5wdXR7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt3aWR0aDphdXRvfS55bS1mb3JtIC55bS1pbmxpbmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxvYXQ6bm9uZTttYXJnaW4tcmlnaHQ6MDt3aWR0aDphdXRvO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfS55bS1mYm94LXdyYXB7ZGlzcGxheTp0YWJsZTt0YWJsZS1sYXlvdXQ6Zml4ZWQ7d2lkdGg6NzAlfS55bS1mYm94LXdyYXAgaW5wdXQsLnltLWZib3gtd3JhcCB0ZXh0YXJlYSwueW0tZmJveC13cmFwIHNlbGVjdHt3aWR0aDoxMDAlfS55bS1mYm94LXdyYXAgaW5wdXRbdHlwZT1pbWFnZV17d2lkdGg6YXV0b30ueW0tZmJveC13cmFwIGlucHV0W3R5cGU9cmFkaW9dLC55bS1mYm94LXdyYXAgaW5wdXRbdHlwZT1jaGVja2JveF17ZGlzcGxheTppbmxpbmU7d2lkdGg6YXV0bzttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDouNWV4fS55bS1mYm94LXdyYXAgbGFiZWwsLnltLWZib3gtd3JhcCAueW0tbGFiZWx7ZGlzcGxheTppbmxpbmV9LnltLWZ1bGwgaW5wdXQsLnltLWZ1bGwgdGV4dGFyZWEsLnltLWZ1bGwgc2VsZWN0e3dpZHRoOjEwMCV9LnltLWZ1bGwgLnltLWZib3gtd3JhcHt3aWR0aDoxMDAlfS55bS1jb2x1bW5hciBpbnB1dCwueW0tY29sdW1uYXIgdGV4dGFyZWEsLnltLWNvbHVtbmFyIHNlbGVjdHtmbG9hdDpsZWZ0O21hcmdpbi1yaWdodDotM3B4fS55bS1jb2x1bW5hciBsYWJlbCwueW0tY29sdW1uYXIgLnltLWxhYmVse2Rpc3BsYXk6aW5saW5lO2Zsb2F0OmxlZnQ7d2lkdGg6MzAlO3otaW5kZXg6MX0ueW0tY29sdW1uYXIgLnltLWZib3gtY2hlY2sgaW5wdXQsLnltLWNvbHVtbmFyIC55bS1tZXNzYWdle21hcmdpbi1sZWZ0OjMwJX0ueW0tY29sdW1uYXIgLnltLWZib3gtd3JhcHttYXJnaW4tbGVmdDozMCU7bWFyZ2luLXJpZ2h0Oi0zcHh9LnltLWNvbHVtbmFyIC55bS1mYm94LXdyYXAgLnltLW1lc3NhZ2V7bWFyZ2luLWxlZnQ6MH0ueW0tY29sdW1uYXIgLnltLWZib3gtd3JhcCBsYWJlbHtmbG9hdDpub25lO3dpZHRoOmF1dG87ei1pbmRleDoxO21hcmdpbi1sZWZ0OjB9LnltLWNvbHVtbmFyIC55bS1mYm94LXdyYXAgaW5wdXR7bWFyZ2luLWxlZnQ6MDtwb3NpdGlvbjpyZWxhdGl2ZX0ueW0tY29sdW1uYXIgLnltLWZib3gtY2hlY2t7cG9zaXRpb246cmVsYXRpdmV9LnltLWNvbHVtbmFyIC55bS1mYm94LWNoZWNrIGxhYmVsLC55bS1jb2x1bW5hciAueW0tZmJveC1jaGVjayAueW0tbGFiZWx7cGFkZGluZy10b3A6MH0ueW0tY29sdW1uYXIgLnltLWZib3gtY2hlY2sgaW5wdXR7dG9wOjNweH0ueW0tY29sdW1uYXIgLnltLWZib3gtYnV0dG9uIGlucHV0e2Zsb2F0Om5vbmU7bWFyZ2luLXJpZ2h0OjFlbX0ueW0tZmJveC13cmFwKy55bS1mYm94LXdyYXB7bWFyZ2luLXRvcDouNWVtfS55bS1jb2x1bW5hciBmaWVsZHNldCAueW0tZmJveC1idXR0b24sZmllbGRzZXQueW0tY29sdW1uYXIgLnltLWZib3gtYnV0dG9ue3BhZGRpbmctbGVmdDozMCV9LnltLXNraXAsLnltLWhpZGVtZSwueW0tcHJpbnR7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0zMjc2OHB4O2xlZnQ6LTMyNzY4cHh9LnltLXNraXA6Zm9jdXMsLnltLXNraXA6YWN0aXZle3Bvc2l0aW9uOnN0YXRpYzt0b3A6MDtsZWZ0OjB9LnltLXNraXBsaW5rc3twb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0Oi0zMjc2OHB4O3otaW5kZXg6MTAwMDt3aWR0aDoxMDAlO21hcmdpbjowO3BhZGRpbmc6MDtsaXN0LXN0eWxlLXR5cGU6bm9uZX0ueW0tc2tpcGxpbmtzIC55bS1za2lwOmZvY3VzLC55bS1za2lwbGlua3MgLnltLXNraXA6YWN0aXZle2xlZnQ6MzI3NjhweDtvdXRsaW5lOjAgbm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMDAlfX1AbWVkaWEgcHJpbnR7LnltLWdyaWQ+LnltLWdsLC55bS1ncmlkPi55bS1ncntvdmVyZmxvdzp2aXNpYmxlO2Rpc3BsYXk6dGFibGU7dGFibGUtbGF5b3V0OmZpeGVkfS55bS1wcmludHtwb3NpdGlvbjpzdGF0aWM7bGVmdDowfS55bS1ub3ByaW50e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fQpAbWVkaWEgYWxsey55bS1obGlzdHt3aWR0aDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZTtsaW5lLWhlaWdodDoxZW07YmFja2dyb3VuZDojMjIyfS55bS1obGlzdCB1bHttYXJnaW46MDtwYWRkaW5nOi41ZW0gMS41ZW07ZGlzcGxheTppbmxpbmU7ZmxvYXQ6bGVmdH0ueW0taGxpc3QgdWwgbGl7ZGlzcGxheTppbmxpbmU7ZmxvYXQ6bGVmdDtmb250LXNpemU6MWVtO2xpbmUtaGVpZ2h0OjE7bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2luOjAgLjI1ZW0gMCAwO3BhZGRpbmc6MH0ueW0taGxpc3QgdWwgbGkgYSwueW0taGxpc3QgdWwgbGkgc3Ryb25ne2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6I2FhYTtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxZW07bGluZS1oZWlnaHQ6MmVtO3BhZGRpbmc6MCAuNWVtO2ZvbnQtd2VpZ2h0OjQwMDt0ZXh0LWRlY29yYXRpb246bm9uZTt0ZXh0LXNoYWRvdzowIDFweCAxcHggcmdiYSgwLDAsMCwuNSk7d2lkdGg6YXV0b30ueW0taGxpc3QgdWwgbGkgYTpmb2N1cywueW0taGxpc3QgdWwgbGkgYTpob3ZlciwueW0taGxpc3QgdWwgbGkgYTphY3RpdmV7Y29sb3I6I2NjYztiYWNrZ3JvdW5kOiM2NjY7YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4yNSk7Ym9yZGVyLXJhZGl1czouMmVtO3RleHQtZGVjb3JhdGlvbjpub25lO291dGxpbmU6MCBub25lfS55bS1obGlzdCB1bCBsaS5hY3RpdmV7YmFja2dyb3VuZDojNjY2O2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMyk7Ym9yZGVyLXJhZGl1czouMmVtO2NvbG9yOiNmZmZ9LnltLWhsaXN0IHVsIGxpLmFjdGl2ZSBzdHJvbmcsLnltLWhsaXN0IHVsIGxpLmFjdGl2ZSBhOmZvY3VzLC55bS1obGlzdCB1bCBsaS5hY3RpdmUgYTpob3ZlciwueW0taGxpc3QgdWwgbGkuYWN0aXZlIGE6YWN0aXZle2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Y29sb3I6I2ZmZjt0ZXh0LWRlY29yYXRpb246bm9uZX0ueW0tc2VhcmNoZm9ybXtmbG9hdDpyaWdodDtkaXNwbGF5OmlubGluZTtsaW5lLWhlaWdodDoyO3BhZGRpbmc6LjVlbSAxLjVlbX0ueW0tc2VhcmNoZm9ybSAueW0tc2VhcmNoZmllbGR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZDojZmZmO2xpbmUtaGVpZ2h0OjE7cGFkZGluZzouMjVlbTt3aWR0aDoxMmVtO2JvcmRlcjpzb2xpZCAxcHggIzg4ODtib3JkZXI6c29saWQgMXB4IHJnYmEoMjU1LDI1NSwyNTUsLjEpO291dGxpbmU6bm9uZTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMCAxcHggM3B4IHJnYmEoMCwwLDAsLjIpO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggM3B4IHJnYmEoMCwwLDAsLjIpfS55bS1zZWFyY2hmb3JtIC55bS1zZWFyY2hidXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZDojNWY1ZjVmO2JhY2tncm91bmQ6cmdiYSgyNTUsMjU1LDI1NSwuMik7Ym9yZGVyLXJhZGl1czouMmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtYmxvY2s7Zm9udC1zaXplOjFlbTtsaW5lLWhlaWdodDoxLjI1O3BhZGRpbmc6LjI1ZW07Ym9yZGVyOnNvbGlkIDFweCB0cmFuc3BhcmVudDt0ZXh0LXNoYWRvdzowIDFweCAxcHggcmdiYSgwLDAsMCwuNSl9fQpAbWVkaWEgYWxse2h0bWwgKntmb250LXNpemU6MTAwJX10ZXh0YXJlYSxwcmUsY29kZSxrYmQsc2FtcCx2YXIsdHR7Zm9udC1mYW1pbHk6Q29uc29sYXMsIkx1Y2lkYSBDb25zb2xlIiwiQW5kYWxlIE1vbm8iLCJCaXRzdHJlYW0gVmVyYSBTYW5zIE1vbm8iLCJDb3VyaWVyIE5ldyIsQ291cmllcn1ib2R5e2ZvbnQtZmFtaWx5OiJEcm9pZCBTZXJpZiIsR2VvcmdpYSwiVGltZXMgTmV3IFJvbWFuIixUaW1lcyxzZXJpZjtmb250LXNpemU6ODcuNSU7Y29sb3I6IzQ0NH1oMSxoMixoMyxoNCxoNSxoNntmb250LWZhbWlseToiRHJvaWQgU2FucyIsQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NDAwO2NvbG9yOiMxNjFlMjE7bWFyZ2luOjB9aDF7Zm9udC1zaXplOjM0Mi44NTcxNCU7bGluZS1oZWlnaHQ6Ljg3NTttYXJnaW46MCAwIC40Mzc1ZW0gMH1oMntmb250LXNpemU6MjI4LjU3MTQzJTtsaW5lLWhlaWdodDoxLjMxMjU7bWFyZ2luOjAgMCAuNjU2MjVlbSAwfWgze2ZvbnQtc2l6ZToxNzEuNDI4NTclO2xpbmUtaGVpZ2h0Oi44NzU7bWFyZ2luOjAgMCAuODc1ZW0gMH1oNHtmb250LXNpemU6MTUwJTtsaW5lLWhlaWdodDoxO21hcmdpbjowIDAgMWVtIDB9aDV7Zm9udC1zaXplOjEyOC41NzE0MyU7bGluZS1oZWlnaHQ6MS4xNjY2NzttYXJnaW46MCAwIDEuMTY2NjdlbSAwfWg2e2ZvbnQtc2l6ZToxMDAlO2ZvbnQtd2VpZ2h0OjcwMDtsaW5lLWhlaWdodDoxLjU7bWFyZ2luOjAgMCAxLjVlbSAwfXVsLG9sLGRse2ZvbnQtc2l6ZToxMDAlO2xpbmUtaGVpZ2h0OjEuNTttYXJnaW46MCAwIDEuNWVtIDB9dWx7bGlzdC1zdHlsZS10eXBlOmRpc2N9b2x7bGlzdC1zdHlsZS10eXBlOmRlY2ltYWx9dWwgdWx7bGlzdC1zdHlsZS10eXBlOmNpcmNsZTttYXJnaW4tdG9wOjB9b2wgb2x7bGlzdC1zdHlsZS10eXBlOmxvd2VyLWxhdGluO21hcmdpbi10b3A6MH1vbCB1bHtsaXN0LXN0eWxlLXR5cGU6Y2lyY2xlO21hcmdpbi10b3A6MH1saXtmb250LXNpemU6MTAwJTtsaW5lLWhlaWdodDoxLjU7bWFyZ2luLWxlZnQ6MS4yZW19ZHR7Zm9udC13ZWlnaHQ6NzAwfWRke21hcmdpbjowIDAgMS41ZW0gLjhlbX1we2ZvbnQtc2l6ZToxMDAlO2xpbmUtaGVpZ2h0OjEuNTttYXJnaW46MCAwIDEuNWVtIDB9YmxvY2txdW90ZSxjaXRlLHF7Zm9udC1mYW1pbHk6IkRyb2lkIFNlcmlmIixHZW9yZ2lhLCJUaW1lcyBOZXcgUm9tYW4iLFRpbWVzLHNlcmlmO2ZvbnQtc3R5bGU6aXRhbGljfWJsb2NrcXVvdGV7YmFja2dyb3VuZDp0cmFuc3BhcmVudDtjb2xvcjojNjY2O21hcmdpbjoxLjVlbSAwIDAgMS41ZW19c3Ryb25nLGJ7Zm9udC13ZWlnaHQ6NzAwfWVtLGl7Zm9udC1zdHlsZTppdGFsaWN9Ymlne2ZvbnQtc2l6ZToxMTQuMjg1NzElO2xpbmUtaGVpZ2h0OjEuMzEyNX1zbWFsbHtmb250LXNpemU6ODUuNzE0MjklO2xpbmUtaGVpZ2h0OjEuNzV9cHJlLGNvZGUsa2JkLHR0LHNhbXAsdmFye2ZvbnQtc2l6ZToxMDAlfXByZXtmb250LXNpemU6MTAwJTtsaW5lLWhlaWdodDoxLjU7bWFyZ2luOjAgMCAxLjVlbSAwO3doaXRlLXNwYWNlOnByZTt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3b3JkLXdyYXA6YnJlYWstd29yZH1wcmUsY29kZXtjb2xvcjojODAwfWtiZCxzYW1wLHZhcix0dHtjb2xvcjojNjY2O2ZvbnQtd2VpZ2h0OjcwMH12YXIsZGZue2ZvbnQtc3R5bGU6aXRhbGljfWFjcm9ueW0sYWJicntib3JkZXItYm90dG9tOjFweCAjYWFhIGRvdHRlZDtmb250LXZhcmlhbnQ6c21hbGwtY2FwcztsZXR0ZXItc3BhY2luZzouMDdlbTtjdXJzb3I6aGVscH1zdWIsc3Vwe2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdXB7dG9wOi0uNWVtfXN1Yntib3R0b206LS4yNWVtfW1hcmt7YmFja2dyb3VuZDp5ZWxsb3c7Y29sb3I6YmxhY2t9aHJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O21hcmdpbjowIDAgLjc1ZW0gMDtwYWRkaW5nOjAgMCAuNjc4NTdlbSAwO2JvcmRlcjowO2JvcmRlci1ib3R0b206MXB4ICNlZWUgc29saWR9YXtjb2xvcjojNGQ4N2M3O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7dGV4dC1kZWNvcmF0aW9uOm5vbmV9YTphY3RpdmV7b3V0bGluZTpub25lfWE6aG92ZXIsYTpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOiM0ZDg3Yzc7Y29sb3I6d2hpdGU7dGV4dC1kZWNvcmF0aW9uOm5vbmV9aW1nLGZpZ3VyZXttYXJnaW46MH0uZmxleGlibGV7bWFyZ2luLWJvdHRvbToxLjVlbTttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b30qIGh0bWwgLmZsZXhpYmxle3dpZHRoOjk4JX0uYm9yZGVyZWR7bWFyZ2luLWJvdHRvbToxLjVlbTtib3JkZXI6MnB4ICNlZWUgc29saWQ7Ym9yZGVyOjJweCB3aGl0ZSBzb2xpZDstd2Via2l0LWJveC1zaGFkb3c6MCAwIDNweCByZ2JhKDAsMCwwLC4yNSk7Ym94LXNoYWRvdzowIDAgM3B4IHJnYmEoMCwwLDAsLjI1KX0uaGlnaGxpZ2h0e2NvbG9yOiNjMzB9LmRpbW1lZHtjb2xvcjojODg4fS5ib3h7Ym9yZGVyLXJhZGl1czouM2VtO2JvcmRlci13aWR0aDoxcHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjojODg4O2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLC4zKTstd2Via2l0LWJveC1zaGFkb3c6aW5zZXQgMXB4IDFweCAzcHggcmdiYSgwLDAsMCwuMik7Ym94LXNoYWRvdzppbnNldCAxcHggMXB4IDNweCByZ2JhKDAsMCwwLC4yKTtjb2xvcjojNDQ0O2NvbG9yOnJnYmEoMCwwLDAsLjgpO3BhZGRpbmc6MS40Mjg1N2VtO21hcmdpbjowIDAgMS41ZW0gMH0uYm94Pio6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LmxhYmVse2ZvbnQtZmFtaWx5OlZlcmRhbmEsR2VuZXZhLHNhbnMtc2VyaWY7cGFkZGluZzoxcHggNnB4IDJweDtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3doaXRlLXNwYWNlOm5vd3JhcDtib3JkZXItcmFkaXVzOjNweDtiYWNrZ3JvdW5kOiMwNkM7Y29sb3I6I2ZmZjtmb250LXNpemU6MTBweDtsaW5lLWhlaWdodDoxMnB4fS5pbmZve2JhY2tncm91bmQ6I2Y0ZjRmNH0uc3VjY2Vzc3tiYWNrZ3JvdW5kOiM4Yzh9Lndhcm5pbmd7YmFja2dyb3VuZDojY2M4fS5lcnJvcntiYWNrZ3JvdW5kOiNjODh9LmZsb2F0LWxlZnR7ZmxvYXQ6bGVmdDtkaXNwbGF5OmlubGluZTttYXJnaW46MCAxZW0gMS41ZW0gMH0uZmxvYXQtcmlnaHR7ZmxvYXQ6cmlnaHQ7ZGlzcGxheTppbmxpbmU7bWFyZ2luOjAgMCAxLjVlbSAxZW19LmNlbnRlcntkaXNwbGF5OmJsb2NrO3RleHQtYWxpZ246Y2VudGVyO21hcmdpbjowIGF1dG8gMS41ZW0gYXV0b310YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtjb2xvcjojNDQ0O2JvcmRlci10b3A6MXB4ICNjY2Mgc29saWQ7Ym9yZGVyLWJvdHRvbToxcHggI2NjYyBzb2xpZDttYXJnaW46MCAwIDEuMzU3MTRlbSAwfXRhYmxlLm5hcnJvd3ttYXJnaW46MCAwIDEuNDI4NTdlbSAwfXRhYmxlLm5hcnJvdyB0aCx0YWJsZS5uYXJyb3cgdGR7cGFkZGluZzowIC41ZW07bGluZS1oZWlnaHQ6MS40Mjg1N310YWJsZS5maXhlZHt0YWJsZS1sYXlvdXQ6Zml4ZWR9dGFibGUuYm9yZGVydGFibGV7Ym9yZGVyOjFweCAjY2NjIHNvbGlkfXRhYmxlLmJvcmRlcnRhYmxlIHRoZWFkIHRoe2JhY2tncm91bmQ6I2UwZTBlMDtib3JkZXItcmlnaHQ6MXB4ICNjY2Mgc29saWQ7Ym9yZGVyLWJvdHRvbToxcHggI2NjYyBzb2xpZH10YWJsZS5ib3JkZXJ0YWJsZSB0Ym9keSB0aFtzY29wZT0icm93Il17YmFja2dyb3VuZDojZjBmMGYwfXRhYmxlLmJvcmRlcnRhYmxlIHRib2R5IHRoe2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY310YWJsZS5ib3JkZXJ0YWJsZSB0Ym9keSB0ZHtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9Y2FwdGlvbntmb250LXZhcmlhbnQ6c21hbGwtY2Fwc310aCx0ZHtsaW5lLWhlaWdodDoxLjVlbTt2ZXJ0aWNhbC1hbGlnbjp0b3A7cGFkZGluZzouNzE0MjllbSAuNWVtfXRoICo6Zmlyc3QtY2hpbGQsdGQgKjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9dGgubm93cmFwLHRkLm5vd3JhcHt3aGl0ZS1zcGFjZTpub3dyYXB9dGhlYWQgdGh7dGV4dC1hbGlnbjpsZWZ0O2NvbG9yOiMwMDA7Ym9yZGVyLWJvdHRvbToycHggIzAwMCBzb2xpZH10Ym9keSB0aHt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjY310Ym9keSB0ZHt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjY310Ym9keSB0cjpob3ZlciB0aCx0Ym9keSB0cjpob3ZlciB0ZHtiYWNrZ3JvdW5kOiNmOGY4Zjh9fQpAbWVkaWEgc2NyZWVue2JvZHl7b3ZlcmZsb3cteTpzY3JvbGx9LnltLXdyYXBwZXJ7bWluLXdpZHRoOjc2MHB4O21heC13aWR0aDo4MGVtO21hcmdpbjowIGF1dG99LnltLXdib3h7cGFkZGluZzoxMHB4fWhlYWRlcntiYWNrZ3JvdW5kOiM0NDQ7Y29sb3I6I2NjYztwYWRkaW5nOjEuNWVtfWhlYWRlciBoMXtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2NvbG9yOiNmZmZ9bmF2e2JhY2tncm91bmQ6IzIyMn1tYWlue3BhZGRpbmc6MS41ZW0gMCAwIDB9Zm9vdGVye21hcmdpbjowO2JhY2tncm91bmQ6I2VlZTtjb2xvcjojNDQ0O3BhZGRpbmc6MS41ZW19Zm9vdGVyIHB7bWFyZ2luOjB9LnltLWNvbHVtbntkaXNwbGF5OmJsb2NrO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLXJpZ2h0OjM0MHB4O3dpZHRoOmF1dG99LnltLWNvbDF7ZmxvYXQ6bGVmdDt3aWR0aDoxMDAlfS55bS1jb2wze3Bvc2l0aW9uOnJlbGF0aXZlO2Zsb2F0OmxlZnQ7d2lkdGg6MzQwcHg7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6LTM0MHB4fS55bS1jb2wxIC55bS1jYm94e3BhZGRpbmc6MCAuNzVlbSAwIDEuNWVtfS55bS1jb2wzIC55bS1jYm94e3BhZGRpbmc6MCAyMHB4IDAgMTJweH0ueW0tZ2JveHtwYWRkaW5nOjAgMS41ZW0gMCAwfS55bS1za2lwbGlua3MgYS55bS1za2lwOmZvY3VzLC55bS1za2lwbGlua3MgYS55bS1za2lwOmFjdGl2ZXtjb2xvcjojZmZmO2JhY2tncm91bmQ6IzMzMztib3JkZXItYm90dG9tOjFweCAjMDAwIHNvbGlkO3BhZGRpbmc6MTBweCAwO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lfX1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjApey55bS13cmFwcGVye21pbi13aWR0aDowfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2MHB4KXsubGluZWFyaXplLWxldmVsLTEsLmxpbmVhcml6ZS1sZXZlbC0xPltjbGFzcyo9InltLWMiXSwubGluZWFyaXplLWxldmVsLTE+W2NsYXNzKj0ieW0tZyJde2Rpc3BsYXk6YmxvY2s7ZmxvYXQ6bm9uZTtwYWRkaW5nOjA7bWFyZ2luOjA7d2lkdGg6YXV0byFpbXBvcnRhbnR9LmxpbmVhcml6ZS1sZXZlbC0xPltjbGFzcyo9InltLWMiXT5bY2xhc3MqPSJ5bS1jYm94Il0sLmxpbmVhcml6ZS1sZXZlbC0xPltjbGFzcyo9InltLWciXT5bY2xhc3MqPSJ5bS1nYm94Il17bWFyZ2luOjA7cGFkZGluZzowO292ZXJmbG93OmhpZGRlbn1uYXYgLnltLWhsaXN0IHVse3BhZGRpbmctcmlnaHQ6MTBweH0ueW0tc2VhcmNoZm9ybXtkaXNwbGF5OmJsb2NrO2Zsb2F0Om5vbmU7d2lkdGg6YXV0bztwYWRkaW5nLXJpZ2h0OjEwcHg7dGV4dC1hbGlnbjpyaWdodH0ueW0tc2VhcmNoZm9ybSBpbnB1dFt0eXBlPSJzZWFyY2giXXt3aWR0aDoxNCV9fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NDgwcHgpey55bS13Ym94e3BhZGRpbmc6MH1oZWFkZXJ7cGFkZGluZzouNzVlbSAxMHB4fWhlYWRlciBoMXtmb250LXNpemU6MS41ZW07bGluZS1oZWlnaHQ6MWVtO21hcmdpbjowfWZvb3RlcixtYWluLC55bS1zZWFyY2hmb3JtLG5hdiAueW0taGxpc3QgdWx7cGFkZGluZy1sZWZ0OjEwcHg7cGFkZGluZy1yaWdodDoxMHB4fS5saW5lYXJpemUtbGV2ZWwtMiwubGluZWFyaXplLWxldmVsLTI+W2NsYXNzKj0ieW0tYyJdLC5saW5lYXJpemUtbGV2ZWwtMj5bY2xhc3MqPSJ5bS1nIl17ZGlzcGxheTpibG9jaztmbG9hdDpub25lO3BhZGRpbmc6MDttYXJnaW46MDt3aWR0aDphdXRvIWltcG9ydGFudH0ubGluZWFyaXplLWxldmVsLTI+W2NsYXNzKj0ieW0tYyJdPltjbGFzcyo9InltLWNib3giXSwubGluZWFyaXplLWxldmVsLTI+W2NsYXNzKj0ieW0tZyJdPltjbGFzcyo9InltLWdib3giXXttYXJnaW46MDtwYWRkaW5nOjA7b3ZlcmZsb3c6aGlkZGVufS55bS1zZWFyY2hmb3JtLG5hdiAueW0taGxpc3QgdWwsbmF2IC55bS1obGlzdCBsaXtkaXNwbGF5OmJsb2NrO2Zsb2F0Om5vbmU7d2lkdGg6YXV0bzt0ZXh0LWFsaWduOmxlZnR9LnltLXNlYXJjaGZvcm0gaW5wdXRbdHlwZT0ic2VhcmNoIl17d2lkdGg6NzUlfX0KQG1lZGlhIHByaW50e2JvZHl7Zm9udC1zaXplOjEwcHQ7cGFkZGluZzowIDVweH1uYXYsLnltLXNlYXJjaGZvcm17ZGlzcGxheTpub25lfWgxLGgyLGgzLGg0LGg1LGg2e3BhZ2UtYnJlYWstYWZ0ZXI6YXZvaWR9fQ==" ${BIN_ECHO} -n "${THEME_BASE64}" | ${BIN_BASE64} --decode > "${FOLDER}/theme.css" THEME_BASE64= ${BIN_CAT} <> "${FOLDER}/theme.css" /* Individual customizations */ .ym-wrapper { max-width: 74em; } header { background: #fff; padding: 0em; background: rgba(0,0,0,0) url("logo_72x72.png") no-repeat scroll left center; padding-left: 84px; height: 72px; margin-bottom: 6px; } header h1 { padding-top: 7px; color: #000; } h1 { margin: 0; } .ym-hlist { border-top: 1px solid; background: #fff; border-bottom: 1px solid; } .ym-hlist ul li a:focus, .ym-hlist ul li a:hover, .ym-hlist ul li a:active { background: rgba(0, 0, 0, 0.25); } .ym-hlist ul li.active strong, .ym-hlist ul li.active a:focus, .ym-hlist ul li.active a:hover, .ym-hlist ul li.active a:active { color: #fff; } .ym-hlist ul li.active { background: rgba(0, 0, 0, 0.3); } .ym-hlist ul li a, .ym-hlist ul li strong { color: #000; text-shadow: 0 0px 0px; } .ym-hlist ul li a:focus, .ym-hlist ul li a:hover, .ym-hlist ul li a:active { color: #fff; } .cmd li { list-style-type: "$ "; } .file li { list-style-image: url('file.png'); } footer { border-top: 1px solid; background: #fff; color: #000; padding: 0em; } footer p { padding-top: 7px; } EOF #------------------------------------------------------------------------------- # Create the JS files (HTML5 support for older Microsoft Internet Explorer # and skiplink support for Apple Safari). # (Skiplinks actually seems to be broken, eventually the next YAML release # will fix this?) #------------------------------------------------------------------------------- HTML5SHIV_BASE64="LyoqCiogQHByZXNlcnZlIEhUTUw1IFNoaXYgMy43LjMgfCBAYWZhcmthcyBAamRhbHRvbiBAam9uX25lYWwgQHJlbSB8IE1JVC9HUEwyIExpY2Vuc2VkCiovCiFmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSxiKXt2YXIgYz1hLmNyZWF0ZUVsZW1lbnQoInAiKSxkPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXXx8YS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGMuaW5uZXJIVE1MPSJ4PHN0eWxlPiIrYisiPC9zdHlsZT4iLGQuaW5zZXJ0QmVmb3JlKGMubGFzdENoaWxkLGQuZmlyc3RDaGlsZCl9ZnVuY3Rpb24gZCgpe3ZhciBhPXQuZWxlbWVudHM7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhP2Euc3BsaXQoIiAiKTphfWZ1bmN0aW9uIGUoYSxiKXt2YXIgYz10LmVsZW1lbnRzOyJzdHJpbmciIT10eXBlb2YgYyYmKGM9Yy5qb2luKCIgIikpLCJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS5qb2luKCIgIikpLHQuZWxlbWVudHM9YysiICIrYSxqKGIpfWZ1bmN0aW9uIGYoYSl7dmFyIGI9c1thW3FdXTtyZXR1cm4gYnx8KGI9e30scisrLGFbcV09cixzW3JdPWIpLGJ9ZnVuY3Rpb24gZyhhLGMsZCl7aWYoY3x8KGM9YiksbClyZXR1cm4gYy5jcmVhdGVFbGVtZW50KGEpO2R8fChkPWYoYykpO3ZhciBlO3JldHVybiBlPWQuY2FjaGVbYV0/ZC5jYWNoZVthXS5jbG9uZU5vZGUoKTpwLnRlc3QoYSk/KGQuY2FjaGVbYV09ZC5jcmVhdGVFbGVtKGEpKS5jbG9uZU5vZGUoKTpkLmNyZWF0ZUVsZW0oYSksIWUuY2FuSGF2ZUNoaWxkcmVufHxvLnRlc3QoYSl8fGUudGFnVXJuP2U6ZC5mcmFnLmFwcGVuZENoaWxkKGUpfWZ1bmN0aW9uIGgoYSxjKXtpZihhfHwoYT1iKSxsKXJldHVybiBhLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtjPWN8fGYoYSk7Zm9yKHZhciBlPWMuZnJhZy5jbG9uZU5vZGUoKSxnPTAsaD1kKCksaT1oLmxlbmd0aDtpPmc7ZysrKWUuY3JlYXRlRWxlbWVudChoW2ddKTtyZXR1cm4gZX1mdW5jdGlvbiBpKGEsYil7Yi5jYWNoZXx8KGIuY2FjaGU9e30sYi5jcmVhdGVFbGVtPWEuY3JlYXRlRWxlbWVudCxiLmNyZWF0ZUZyYWc9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50LGIuZnJhZz1iLmNyZWF0ZUZyYWcoKSksYS5jcmVhdGVFbGVtZW50PWZ1bmN0aW9uKGMpe3JldHVybiB0LnNoaXZNZXRob2RzP2coYyxhLGIpOmIuY3JlYXRlRWxlbShjKX0sYS5jcmVhdGVEb2N1bWVudEZyYWdtZW50PUZ1bmN0aW9uKCJoLGYiLCJyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1mLmNsb25lTm9kZSgpLGM9bi5jcmVhdGVFbGVtZW50O2guc2hpdk1ldGhvZHMmJigiK2QoKS5qb2luKCkucmVwbGFjZSgvW1x3XC06XSsvZyxmdW5jdGlvbihhKXtyZXR1cm4gYi5jcmVhdGVFbGVtKGEpLGIuZnJhZy5jcmVhdGVFbGVtZW50KGEpLCdjKCInK2ErJyIpJ30pKyIpO3JldHVybiBufSIpKHQsYi5mcmFnKX1mdW5jdGlvbiBqKGEpe2F8fChhPWIpO3ZhciBkPWYoYSk7cmV0dXJuIXQuc2hpdkNTU3x8a3x8ZC5oYXNDU1N8fChkLmhhc0NTUz0hIWMoYSwiYXJ0aWNsZSxhc2lkZSxkaWFsb2csZmlnY2FwdGlvbixmaWd1cmUsZm9vdGVyLGhlYWRlcixoZ3JvdXAsbWFpbixuYXYsc2VjdGlvbntkaXNwbGF5OmJsb2NrfW1hcmt7YmFja2dyb3VuZDojRkYwO2NvbG9yOiMwMDB9dGVtcGxhdGV7ZGlzcGxheTpub25lfSIpKSxsfHxpKGEsZCksYX12YXIgayxsLG09IjMuNy4zIixuPWEuaHRtbDV8fHt9LG89L148fF4oPzpidXR0b258bWFwfHNlbGVjdHx0ZXh0YXJlYXxvYmplY3R8aWZyYW1lfG9wdGlvbnxvcHRncm91cCkkL2kscD0vXig/OmF8Ynxjb2RlfGRpdnxmaWVsZHNldHxoMXxoMnxoM3xoNHxoNXxoNnxpfGxhYmVsfGxpfG9sfHB8cXxzcGFufHN0cm9uZ3xzdHlsZXx0YWJsZXx0Ym9keXx0ZHx0aHx0cnx1bCkkL2kscT0iX2h0bWw1c2hpdiIscj0wLHM9e307IWZ1bmN0aW9uKCl7dHJ5e3ZhciBhPWIuY3JlYXRlRWxlbWVudCgiYSIpO2EuaW5uZXJIVE1MPSI8eHl6PjwveHl6PiIsaz0iaGlkZGVuImluIGEsbD0xPT1hLmNoaWxkTm9kZXMubGVuZ3RofHxmdW5jdGlvbigpe2IuY3JlYXRlRWxlbWVudCgiYSIpO3ZhciBhPWIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgYS5jbG9uZU5vZGV8fCJ1bmRlZmluZWQiPT10eXBlb2YgYS5jcmVhdGVEb2N1bWVudEZyYWdtZW50fHwidW5kZWZpbmVkIj09dHlwZW9mIGEuY3JlYXRlRWxlbWVudH0oKX1jYXRjaChjKXtrPSEwLGw9ITB9fSgpO3ZhciB0PXtlbGVtZW50czpuLmVsZW1lbnRzfHwiYWJiciBhcnRpY2xlIGFzaWRlIGF1ZGlvIGJkaSBjYW52YXMgZGF0YSBkYXRhbGlzdCBkZXRhaWxzIGRpYWxvZyBmaWdjYXB0aW9uIGZpZ3VyZSBmb290ZXIgaGVhZGVyIGhncm91cCBtYWluIG1hcmsgbWV0ZXIgbmF2IG91dHB1dCBwaWN0dXJlIHByb2dyZXNzIHNlY3Rpb24gc3VtbWFyeSB0ZW1wbGF0ZSB0aW1lIHZpZGVvIix2ZXJzaW9uOm0sc2hpdkNTUzpuLnNoaXZDU1MhPT0hMSxzdXBwb3J0c1Vua25vd25FbGVtZW50czpsLHNoaXZNZXRob2RzOm4uc2hpdk1ldGhvZHMhPT0hMSx0eXBlOiJkZWZhdWx0IixzaGl2RG9jdW1lbnQ6aixjcmVhdGVFbGVtZW50OmcsY3JlYXRlRG9jdW1lbnRGcmFnbWVudDpoLGFkZEVsZW1lbnRzOmV9O2EuaHRtbDU9dCxqKGIpLCJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUuZXhwb3J0cyYmKG1vZHVsZS5leHBvcnRzPXQpfSgidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxkb2N1bWVudCk7" ${BIN_ECHO} -n "${HTML5SHIV_BASE64}" | ${BIN_BASE64} --decode > "${FOLDER}/html5shiv.min.js" HTML5SHIV_BASE64= FOCUSFIX_BASE64="LyogWWV0IEFub3RoZXIgTXVsdGljb2x1bW4gTGF5b3V0IC0gaHR0cDovL3d3dy55YW1sLmRlICovCihmdW5jdGlvbigpe3ZhciBZQU1MX2ZvY3VzRml4PXtza2lwQ2xhc3M6J3ltLXNraXAnLGluaXQ6ZnVuY3Rpb24oKXt2YXIgdXNlckFnZW50PW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTt2YXIgaXNfd2Via2l0PXVzZXJBZ2VudC5pbmRleE9mKCd3ZWJraXQnKT4tMTt2YXIgaXNfaWU9dXNlckFnZW50LmluZGV4T2YoJ21zaWUnKT4tMTtpZihpc193ZWJraXR8fGlzX2llKXt2YXIgYm9keT1kb2N1bWVudC5ib2R5LGhhbmRsZXI9WUFNTF9mb2N1c0ZpeC5jbGljaztpZihib2R5LmFkZEV2ZW50TGlzdGVuZXIpe2JvZHkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGhhbmRsZXIsITEpfWVsc2UgaWYoYm9keS5hdHRhY2hFdmVudCl7Ym9keS5hdHRhY2hFdmVudCgnb25jbGljaycsaGFuZGxlcil9fX0sdHJpbTpmdW5jdGlvbihzdHIpe3JldHVybiBzdHIucmVwbGFjZSgvXlxzXHMqLywnJykucmVwbGFjZSgvXHNccyokLywnJyl9LGNsaWNrOmZ1bmN0aW9uKGUpe2U9ZXx8d2luZG93LmV2ZW50O3ZhciB0YXJnZXQ9ZS50YXJnZXR8fGUuc3JjRWxlbWVudDt2YXIgYT10YXJnZXQuY2xhc3NOYW1lLnNwbGl0KCcgJyk7Zm9yKHZhciBpPTA7aTxhLmxlbmd0aDtpKyspe3ZhciBjbHM9WUFNTF9mb2N1c0ZpeC50cmltKGFbaV0pO2lmKGNscz09PVlBTUxfZm9jdXNGaXguc2tpcENsYXNzKXtZQU1MX2ZvY3VzRml4LmZvY3VzKHRhcmdldCk7YnJlYWt9fX0sZm9jdXM6ZnVuY3Rpb24obGluayl7aWYobGluay5ocmVmKXt2YXIgaHJlZj1saW5rLmhyZWYsaWQ9aHJlZi5zdWJzdHIoaHJlZi5pbmRleE9mKCcjJykrMSksdGFyZ2V0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtpZih0YXJnZXQpe3RhcmdldC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKTt0YXJnZXQuZm9jdXMoKX19fX07WUFNTF9mb2N1c0ZpeC5pbml0KCl9KSgp" ${BIN_ECHO} -n "${FOCUSFIX_BASE64}" | ${BIN_BASE64} --decode > "${FOLDER}/yaml-focusfix.min.js" FOCUSFIX_BASE64= #------------------------------------------------------------------------------- # Create robots.txt for later use on a public web server. #------------------------------------------------------------------------------- ${BIN_CAT} < "${FOLDER}/robots.txt" User-Agent: * Disallow: / EOF #------------------------------------------------------------------------------- # Create file.png for indivualized unordered lists. #------------------------------------------------------------------------------- FILE_BASE64="iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWBJREFUeNqEUj1LxEAQnd1MVA4lyIEWx6UIKEGUExGsbC3tLfwJ/hT/g7VlCnubqxXBwg/Q4hQP/LhKL5nZuBsvuGfW5MGyuzM7jzdvVuR5DgYnZ+f99ai7Vt5t9K9unu4HLweI3qWYxI6PDosdy0fhcntxO44CcOBzPA7mfEyuHwf7ntQk4jcnywOxIlfxOCNYaLVgb6cXbkTdhJXq2SIlNMC0xIqhHczDbi8OVzpLSUa0WebRfmigLHqj1EcPZnwf7gbDIrYVRyEinurj6jTBHyI7pqVrFQqEbt6TEmZ9v1NRAJNC1xTYxIQh/MmRUlmFQE3qWOW1nqB2TWk1/3tgJV0waVvkFIEeZbHq4ElyKzAmEXOx6gnEVJuWBzmkRJBRPYGZBDsVaOlpSgVJE2yVaAe/0kx/3azBRO0VsbMFZE3CDSZKweZfYIVg+DZ6v7h9GDVOwZPw/PoxKu/fAgwALbDAXf7DdQkAAAAASUVORK5CYII=" ${BIN_ECHO} -n "${FILE_BASE64}" | ${BIN_BASE64} --decode > "${FOLDER}/file.png" FILE_BASE64= #------------------------------------------------------------------------------- # Create text file with usage of the script. #------------------------------------------------------------------------------- # SC2086: a unix command should never contains spaces! ./${0} -h > "${FOLDER}/ios2html.txt" } #=== FUNCTION ================================================================== # NAME: plist_bin2xml # DESCRIPTION: Converts a binary or xml plist on macOS into the report folder # or converts a binary plist on Linux into xml or just copy # it if already xml. # PARAMETER 1: string (source) # PARAMETER 2: string (destination) #=============================================================================== plist_bin2xml () { case "${OS_NAME}" in Darwin) ${BIN_PLUTIL} -convert xml1 "${1}" -o "${2}" ;; Linux|FreeBSD) if [ "$( ${BIN_FILE} --brief "${1}" )" = "Apple binary property list" ] ; then ${BIN_PLISTUTIL} --infile "${1}" --outfile "${2}" else ${BIN_CP} "${1}" "${2}" fi ;; *) error_exit "your os is not supported (yet)" 206 ;; esac } #------------------------------------------------------------------------------- # Global header template for the simple template engine. #------------------------------------------------------------------------------- # SC2034: all "unused" vars are verified! # zsh: readonly is not valid in this context: HEADER=$( ${BIN_CAT} <<'EOF' ${HEAD_TITLE}

${HEADER_H1}

${HEADER_SUBTITLE}
EOF ) #------------------------------------------------------------------------------- # Partial template for the case information for the simple template engine. #------------------------------------------------------------------------------- CASE_INFORMATION=$( ${BIN_CAT} <<'EOF'

Case

Commands

Information

${LOGFILE_INFO}
Backup: ${IOS_BACKUP}
Report: ${FOLDER}/index.html
Case Number: ${CASE_NUMBER}
Officer: ${OFFICER}
Date: ${DATE}
EOF ) #------------------------------------------------------------------------------- # Global footer template for the simple template engine. #------------------------------------------------------------------------------- FOOTER=$( ${BIN_CAT} <<'EOF'
EOF ) readonly TEMPLATE_ENGINE_LOADED="true" if [ "${DEBUG}" = "on" ] ; then ${BIN_PRINTF} "INFO: template_engine.sh loaded.\\n" 1>&2 fi # Do not use "exit" at the end of a sourced library!