├── .gitignore ├── img ├── .gitignore ├── jb-img.png ├── logo1.png ├── logo2.png └── screengrab.png ├── .gitattributes ├── local.lcars.DNSCryptLoopback.plist ├── LICENSE ├── README.md └── DNSCryptMenu.30s.sh /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .CS_Store 3 | TODO 4 | *.base64 -------------------------------------------------------------------------------- /img/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .CS_Store 3 | TODO 4 | *.base64 -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /img/jb-img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JayBrown/DNSCrypt-Menu/HEAD/img/jb-img.png -------------------------------------------------------------------------------- /img/logo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JayBrown/DNSCrypt-Menu/HEAD/img/logo1.png -------------------------------------------------------------------------------- /img/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JayBrown/DNSCrypt-Menu/HEAD/img/logo2.png -------------------------------------------------------------------------------- /img/screengrab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JayBrown/DNSCrypt-Menu/HEAD/img/screengrab.png -------------------------------------------------------------------------------- /local.lcars.DNSCryptLoopback.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AbandonProcessGroup 6 | 7 | KeepAlive 8 | 9 | Label 10 | local.lcars.DNSCryptLoopback 11 | Nice 12 | 8 13 | ProgramArguments 14 | 15 | /sbin/ifconfig 16 | lo0 17 | alias 18 | 127.0.0.54 19 | 20 | RunAtLoad 21 | 22 | StandardErrorPath 23 | /tmp/local.lcars.DNSCryptLoopback.stderr 24 | StandardOutPath 25 | /tmp/local.lcars.DNSCryptLoopback.stdout 26 | 27 | 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Joss Brown (pseud.) -- German laws apply -- Place of jurisdiction: Berlin, Germany 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![bbdnsc-platform-macos](https://img.shields.io/badge/platform-macOS-lightgrey.svg) 2 | ![bbdnsc-code-shell](https://img.shields.io/badge/code-shell-yellow.svg) 3 | [![bbdnsc-prereq-dnsc](https://img.shields.io/badge/prerequisite-dnscrypt--proxy%202.x-green.svg)](https://github.com/jedisct1/dnscrypt-proxy) 4 | [![bbdnsc-prereq-bbar](https://img.shields.io/badge/prerequisite-BitBar%202.0%20beta10-brightgreen.svg)](https://github.com/matryer/bitbar) 5 | [![bbdnsc-license](http://img.shields.io/badge/license-MIT+-blue.svg)](https://github.com/JayBrown/DNSCrypt-Menu/blob/master/LICENSE) 6 | 7 | # DNSCrypt Menu 8 | 9 | **DNSCrypt Menu is a [BitBar](https://github.com/matryer/bitbar) plugin to manage the [DNSCrypt](https://github.com/jedisct1/dnscrypt-proxy) proxy from the macOS menu bar.** 10 | 11 | **DNSCrypt Menu** also works as a tool to configure your default DNS setup. 12 | 13 | ## Functionality 14 | * start, stop or force-restart the DNSCrypt service with support for Homebrew installations 15 | * switch between settings (_see below_; exception: **Other DNS** via VPN) 16 | * configure additional resolvers for **DNSCrypt + Fallback** setting 17 | * configure resolvers for the **Default DNS** setting 18 | * _Note_: at initial run the user's original DNS resolvers, as specified in the **Network** preference pane, are saved to `$HOME/.config/dnscrypt/backup-*`, followed by the service name and `-initial`, e.g. `backup-Wi-Fi-initial`; backed-up resolvers can be reloaded at any time. 19 | * display DNS information: service, devices (incl. TUN/TAP), current resolvers (`/etc/resolv.conf`), configured resolvers (Network preferences), internal fallback resolver (DNSCrypt), configured fallback resolvers (DNSCrypt Menu), public DNS IP with hostname, Whois & ping, local area DNS 20 | * display DNSCrypt executable and service information: owner, PID, version, network status, used resolvers, ignored resolvers, executable path, config path, latest log & output, full log, log settings 21 | * backup and reload resolvers from **Other DNS** setups (excluding VPN tunnels) 22 | * options to clear DNS cache or renew DHCP lease 23 | * links to robtex (IP & hostname), current resolver source, this repository, the dnscrypt-proxy repository, and a list of available public DNSCrypt server 24 | 25 | ![screengrab](https://github.com/JayBrown/DNSCrypt-Menu/blob/master/img/screengrab.png) 26 | 27 | ## Installation 28 | * install `dnscrypt-proxy` version 2, e.g. with **[Homebrew](https://brew.sh)** (recommended): `brew install dnscrypt-proxy` 29 | * configure `dnscrypt-proxy` by editing the `.toml` configuration file 30 | * download the latest version of **BitBar**, currently at **[v2.0.0 beta 10](https://github.com/matryer/bitbar/releases/tag/v2.0.0-beta10)** 31 | * install and configure BitBar 32 | * quit BitBar 33 | * clone the **DNSCrypt Menu** GitHub repository and symlink `DNSCryptMenu.30s.sh` to your BitBar plugins folder 34 | * refresh clone for updates 35 | * install **[terminal-notifier](https://github.com/julienXX/terminal-notifier)** (optional, recommended) 36 | * launch BitBar 37 | 38 | ## Settings 39 | * **DNSCrypt** — basic DNSCrypt setting without fallback DNS except the one specified in the TOML configuration file 40 | * **DNSCrypt + Fallback** — DNSCrypt using additional fallback DNS, with Quad9 (9.9.9.9) as initial preset 41 | * **Default DNS** — DNS without DNSCrypt and without initial resolvers, i.e. macOS will use the LAN DNS 42 | * **Other DNS** 43 | * fixed auto-setting when using a VPN 44 | * user-defined settings based on manual configuration in the Network preference pane (excluding VPN scenarios) 45 | 46 | ## Notes 47 | * The file `local.lcars.DNSCryptLoopback.plist` is a LaunchDaemon for demonstration purposes. If you use a different proxy address than the default `127.0.0.1`, you need to map your alternate address at every system boot for DNSCrypt to work. This particular daemon runs the command `ifconfig lo0 alias 127.0.0.54`. Edit to your needs and install/enable using the following commands: 48 | 49 | * `cp local.lcars.DNSCryptLoopback.plist /Library/LaunchDaemons/local.lcars.DNSCryptLoopback.plist` 50 | * `chmod 0644 /Library/LaunchDaemons/local.lcars.DNSCryptLoopback.plist` 51 | * `launchctl load /Library/LaunchDaemons/local.lcars DNSCryptLoopback.plist` 52 | * Verify with: `netstat -nr | grep "^127\.0\.0\..*lo0$"` 53 | 54 | * Stop and restart the plugin from external scripts with: 55 | * stop: `mv $HOME/.config/dnscrypt/run $HOME/.config/dnscrypt/stop` 56 | * restart: `mv $HOME/.config/dnscrypt/stop $HOME/.config/dnscrypt/run` 57 | 58 | * This BitBar plugin has only been tested on El Capitan (OS X 10.11.6); IPv6 network setups have _not_ been tested; please report any issues or create a **pull request**. 59 | 60 | ## Todo 61 | * Tweaking & testing, lots of testing 62 | * script comments 63 | * TOML parsing (blocklists, IPv6 etc.)? 64 | 65 | ## Thank you 66 | Thank you to **[Frank Denis](https://github.com/jedisct1/bitbar-dnscrypt-proxy-switcher)** for kicking this off with his original plugin. 67 | -------------------------------------------------------------------------------- /DNSCryptMenu.30s.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # DNSCrypt Menu 4 | # 1.0.34 5 | # Joss Brown 6 | # JayBrown 7 | # Manage DNSCrypt from the macOS menu bar 8 | # https://raw.githubusercontent.com/JayBrown/DNSCrypt-Menu/master/img/screengrab.png 9 | # https://github.com/JayBrown/DNSCrypt-Menu 10 | 11 | # DNSCrypt Menu 12 | # version 1.0.34 13 | # Copyright (c) 2018 Joss Brown (pseud.) 14 | # License: MIT+ 15 | # derived from: dnscrypt-proxy-switcher by Frank Denis (jedisct1) https://github.com/jedisct1/bitbar-dnscrypt-proxy-switcher 16 | 17 | dcmver="1.0.34" 18 | dcmvadd="" 19 | 20 | export LANG=en_US.UTF-8 21 | export HISTIGNORE='*sudo -S*' 22 | export PATH=$PATH:/usr/local/bin:/usr/local/sbin:/opt/local/bin:/opt/local/sbin:/sw/bin:/sw/sbin:$HOME/bin:$HOME/sbin 23 | 24 | osversion=$(sw_vers -productVersion) 25 | osmajor=$(echo "$osversion" | awk -F. '{print $2}') 26 | [ $osmajor -lt 7 ] && exit 1 27 | 28 | theme="classic" 29 | if test -t 0 ; then 30 | theme="emoji" 31 | fi 32 | 33 | if [[ $theme == "classic" ]] ; then 34 | ERROR_ICON="| dropdown=false templateImage=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c2VkIDE1IDAgUiBdCmVuZG9iagozIDAgb2JqCjw8IC9UeXBlIC9QYWdlcyAvTWVkaWFCb3ggWzAgMCAxNiAxNl0gL0NvdW50IDEgL0tpZHMgWyAyIDAgUiBdID4+CmVuZG9iagoxNyAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMyAwIFIgL1ZlcnNpb24gLzEuNCA+PgplbmRvYmoKMTggMCBvYmoKKE1hYyBPUyBYIDEwLjkuNSBRdWFydHogUERGQ29udGV4dCkKZW5kb2JqCjE5IDAgb2JqCihEOjIwMTYwMzAzMTkwNDI3WjAwJzAwJykKZW5kb2JqCjEgMCBvYmoKPDwgL1Byb2R1Y2VyIDE4IDAgUiAvQ3JlYXRpb25EYXRlIDE5IDAgUiAvTW9kRGF0ZSAxOSAwIFIgPj4KZW5kb2JqCnhyZWYKMCAyMAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDU2NTkgMDAwMDAgbiAKMDAwMDAwMDUwNSAwMDAwMCBuIAowMDAwMDA1NDIwIDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAwMDQ4NiAwMDAwMCBuIAowMDAwMDAwNjA3IDAwMDAwIG4gCjAwMDAwMDA3MzEgMDAwMDAgbiAKMDAwMDAwMTMwMyAwMDAwMCBuIAowMDAwMDAxMzIyIDAwMDAwIG4gCjAwMDAwMDUzODMgMDAwMDAgbiAKMDAwMDAwMTM5MSAwMDAwMCBuIAowMDAwMDAyNjEwIDAwMDAwIG4gCjAwMDAwMDE0MzkgMDAwMDAgbiAKMDAwMDAwMjU4OSAwMDAwMCBuIAowMDAwMDAyNjQ3IDAwMDAwIG4gCjAwMDAwMDUzNjIgMDAwMDAgbiAKMDAwMDAwNTUwMSAwMDAwMCBuIAowMDAwMDA1NTY1IDAwMDAwIG4gCjAwMDAwMDU2MTcgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAyMCAvUm9vdCAxNyAwIFIgL0luZm8gMSAwIFIgL0lEIFsgPDY3NGRkZmQ4MGY5ZTc3Yzg4ZDhjNjZhMTJhYTk4NTk0Pgo8Njc0ZGRmZDgwZjllNzdjODhkOGM2NmExMmFhOTg1OTQ+IF0gPj4Kc3RhcnR4cmVmCjU3MzQKJSVFT0YK" 35 | elif [[ $theme == "emoji" ]] ; then 36 | ERROR_ICON="✖"︎ 37 | fi 38 | 39 | cfgdir="$HOME/.config/dnscrypt" 40 | if ! [[ -d "$cfgdir" ]] ; then 41 | mkdir -p "$cfgdir" 42 | touch "$cfgdir/run" 43 | fi 44 | 45 | if [[ $1 == "toggle" ]] ; then 46 | if [[ $2 == "stop" ]] ; then 47 | mv "$cfgdir/run" "$cfgdir/stop" 48 | elif [[ $2 == "start" ]] ; then 49 | mv "$cfgdir/stop" "$cfgdir/run" 50 | fi 51 | exit 0 52 | fi 53 | 54 | if [[ -e "$cfgdir/stop" ]] ; then 55 | echo "$ERROR_ICON" 56 | echo "---" 57 | echo "Plugin Stopped" 58 | echo "---" 59 | echo "Restart… | refresh=true terminal=false bash=$0 param1=toggle param2=start" 60 | exit 0 61 | else 62 | stopped=false 63 | fi 64 | 65 | interface=$(route get 0.0.0.0 2>/dev/null | awk '/interface: / {print $2}') 66 | if ! [[ $interface ]] ; then 67 | echo "$ERROR_ICON" 68 | echo "---" 69 | echo "No Connection Available | color=red" 70 | echo "---" 71 | echo "Refresh… | refresh=true" 72 | exit 0 73 | fi 74 | 75 | dcpver=$(dnscrypt-proxy --version 2>/dev/null) 76 | if ! [[ $dcpver ]] ; then 77 | echo "$ERROR_ICON" 78 | echo "---" 79 | echo "dnscrypt-proxy is not in your \$PATH | color=red" 80 | echo "Please make sure to install DNSCrypt correctly" 81 | echo "---" 82 | echo "Refresh… | refresh=true" 83 | exit 0 84 | fi 85 | dcploc=$(which dnscrypt-proxy 2>/dev/null) 86 | 87 | read -d '' ltoml <<"EOF" 88 | /usr/local/etc/dnscrypt-proxy.toml 89 | /opt/local/etc/dnscrypt-proxy.toml 90 | /sw/etc/dnscrypt-proxy.toml 91 | $HOME/etc/dnscrypt-proxy.toml 92 | /private/etc/dnscrypt-proxy.toml 93 | EOF 94 | 95 | while read -r TOML 96 | do 97 | [[ -f $TOML ]] && break 98 | done < <(echo "$ltoml") 99 | if ! [[ $TOML ]] ; then 100 | echo "$ERROR_ICON" 101 | echo "---" 102 | echo "dnscrypt-proxy.toml not available | color=red" 103 | echo "Please make sure to install DNSCrypt correctly" 104 | echo "---" 105 | echo "Refresh… | refresh=true" 106 | exit 0 107 | fi 108 | etcdir=$(dirname "$TOML") 109 | 110 | process="DNSCrypt Menu" 111 | account=$(id -un) 112 | 113 | _beep () { 114 | osascript -e "beep" 115 | } 116 | 117 | _notify () { 118 | if [[ $tn_status == "osa" ]] ; then 119 | osascript &>/dev/null << EOT 120 | tell application "System Events" 121 | display notification "$2" with title "$process [" & "$account" & "]" subtitle "$1" 122 | end tell 123 | EOT 124 | elif [[ $tn_status == "tn-app-new" ]] || [[ $tn_status == "tn-app-old" ]] ; then 125 | "$tn_loc/Contents/MacOS/terminal-notifier" \ 126 | -title "$process [$account]" \ 127 | -subtitle "$1" \ 128 | -message "$2" \ 129 | -appIcon "$icon_loc" \ 130 | >/dev/null 131 | elif [[ $tn_status == "tn-cli" ]] ; then 132 | "$tn" \ 133 | -title "$process [$account]" \ 134 | -subtitle "$1" \ 135 | -message "$2" \ 136 | -appIcon "$icon_loc" \ 137 | >/dev/null 138 | fi 139 | } 140 | 141 | tn=$(which terminal-notifier 2>/dev/null) 142 | if [[ $tn == "" ]] || [[ $tn == *"not found" ]] ; then 143 | tn_loc=$(mdfind "kMDItemCFBundleIdentifier == 'fr.julienxx.oss.terminal-notifier'" 2>/dev/null | awk 'NR==1') 144 | if [[ $tn_loc == "" ]] ; then 145 | tn_loc=$(mdfind "kMDItemCFBundleIdentifier == 'nl.superalloy.oss.terminal-notifier'" 2>/dev/null | awk 'NR==1') 146 | if ! [[ $tn_loc ]] ; then 147 | tn_status="osa" 148 | else 149 | tn_status="tn-app-old" 150 | fi 151 | else 152 | tn_status="tn-app-new" 153 | fi 154 | else 155 | tn_vers=$("$tn" -help | head -1 | awk -F'[()]' '{print $2}' | awk -F. '{print $1"."$2}') 156 | if (( $(echo "$tn_vers >= 1.8" | bc -l) )) && (( $(echo "$tn_vers < 2.0" | bc -l) )) ; then 157 | tn_status="tn-cli" 158 | else 159 | tn_loc=$(mdfind "kMDItemCFBundleIdentifier == 'fr.julienxx.oss.terminal-notifier'" 2>/dev/null | awk 'NR==1') 160 | if ! [[ $tn_loc ]] ; then 161 | tn_loc=$(mdfind "kMDItemCFBundleIdentifier == 'nl.superalloy.oss.terminal-notifier'" 2>/dev/null | awk 'NR==1') 162 | if ! [[ $tn_loc ]] ; then 163 | tn_status="osa" 164 | else 165 | tn_status="tn-app-old" 166 | fi 167 | else 168 | tn_status="tn-app-new" 169 | fi 170 | fi 171 | fi 172 | 173 | service=$(networksetup -listnetworkserviceorder | grep -B1 "Device: $interface)$" | head -1 | awk -F")" '{print substr($0, index($0,$2))}' | xargs) 174 | 175 | _flush () { 176 | if [[ $osmajor -le 8 ]] ; then 177 | killall -HUP mDNSResponder 2>/dev/null 178 | elif [[ $osmajor == 9 ]] ; then 179 | dscacheutil -flushcache 2>/dev/null 180 | killall -HUP mDNSResponder 2>/dev/null 181 | elif [[ $osmajor == 10 ]] ; then 182 | osminor=$(echo "$osversion" | awk -F. '{print $3}') 183 | if [[ $osminor -le 3 ]] ; then 184 | discoveryutil mdnsflushcache 2>/dev/null 185 | discoveryutil udnsflushcaches 2>/dev/null 186 | else 187 | dscacheutil -flushcache 2>/dev/null 188 | killall -HUP mDNSResponder 2>/dev/null 189 | fi 190 | elif [[ $osmajor == 11 ]] ; then 191 | dscacheutil -flushcache 2>/dev/null 192 | killall -HUP mDNSResponder 2>/dev/null 193 | elif [[ $osmajor == 12 ]] ; then 194 | osminor=$(echo "$osversion" | awk -F. '{print $3}') 195 | if [[ $osminor -le 2 ]] ; then 196 | killall -HUP mDNSResponder 2>/dev/null 197 | else 198 | killall -HUP mDNSResponder 2>/dev/null 199 | killall mDNSResponderHelper 2>/dev/null 200 | dscacheutil -flushcache 2>/dev/null 201 | fi 202 | else 203 | killall -HUP mDNSResponder 2>/dev/null 204 | fi 205 | } 206 | 207 | _rootpw () { 208 | if [[ $1 == "dhcp" ]] ; then 209 | osascript 2>/dev/null << EOT 210 | tell application "System Events" 211 | activate 212 | set theLogoPath to ((path to home folder from user domain) as text) & ".cache:dnscrypt:icon.png" 213 | set thePW to text returned of (display dialog "Please enter your administrator password to renew the DHCP lease for the $service service on interface $interface." & ¬ 214 | return & return & ¬ 215 | "Please note that this operation can reset your system's resolvers configuration file, and you might need to reboot your Mac to restore your network settings to the desired state." ¬ 216 | default answer "" ¬ 217 | with hidden answer ¬ 218 | buttons {"Cancel", "Renew"} ¬ 219 | default button 2 ¬ 220 | with title "DNSCrypt: DHCP Lease" ¬ 221 | with icon file theLogoPath ¬ 222 | giving up after 180) 223 | end tell 224 | thePW 225 | EOT 226 | elif [[ $1 == "service" ]] ; then 227 | osascript 2>/dev/null << EOT 228 | tell application "System Events" 229 | activate 230 | set theLogoPath to ((path to home folder from user domain) as text) & ".cache:dnscrypt:icon.png" 231 | set thePW to text returned of (display dialog "Please enter your administrator password to $2 the DNSCrypt Service." & ¬ 232 | return & return & ¬ 233 | "Please wait for the process to finish. You will need to enter your password again to change the macOS Network configuration." ¬ 234 | default answer "" ¬ 235 | with hidden answer ¬ 236 | buttons {"Cancel", "$3"} ¬ 237 | default button 2 ¬ 238 | with title "DNSCrypt: Service" ¬ 239 | with icon file theLogoPath ¬ 240 | giving up after 180) 241 | end tell 242 | thePW 243 | EOT 244 | fi 245 | } 246 | 247 | CONFIG=$(cat "$TOML" | sed -e 's/^[ \t]*//' | grep -v -e "^$" -e "##" -e "^# *#$") 248 | 249 | DNSCRYPT_PROXY_ALL=$(echo "$CONFIG" | awk -F"'" '/^listen_addresses =/{print $2}') 250 | DNSCRYPT_PROXY_IPS=$(echo "$DNSCRYPT_PROXY_ALL" | awk -F: '{print $1}') 251 | ! [[ $DNSCRYPT_PROXY_IPS ]] && DNSCRYPT_PROXY_IPS="127.0.0.1" 252 | dnsport=$(echo "$DNSCRYPT_PROXY_ALL" | awk -F: '{print $2}') 253 | ! [[ $dnsport ]] && dnsport="53" 254 | 255 | nstat_all=$(netstat -nr 2>/dev/null) 256 | 257 | if [[ $DNSCRYPT_PROXY_IPS != "127.0.0.1" ]] ; then 258 | int1=$(echo "$DNSCRYPT_PROXY_IPS" | awk -F. '{print $1}') 259 | int2=$(echo "$DNSCRYPT_PROXY_IPS" | awk -F. '{print $2}') 260 | int3=$(echo "$DNSCRYPT_PROXY_IPS" | awk -F. '{print $3}') 261 | int4=$(echo "$DNSCRYPT_PROXY_IPS" | awk -F. '{print $4}') 262 | chnstat=$(echo "$nstat_all" | grep "^$int1\.$int2\.$int3\.$int4.*lo0") 263 | if ! [[ $chnstat ]] ; then 264 | echo "$ERROR_ICON" 265 | echo "---" 266 | echo "$DNSCRYPT_PROXY_IPS is not in your routing table | color=red" 267 | echo "Please make sure to install DNSCrypt correctly" 268 | echo "---" 269 | echo "You should either" 270 | echo "● edit and load the provided LaunchDaemon, or" 271 | echo "● manually run the following command:" 272 | echo "sudo ifconfig lo0 alias $DNSCRYPT_PROXY_IPS | font=Menlo size=12" 273 | echo "---" 274 | echo "Refresh… | refresh=true" 275 | exit 0 276 | fi 277 | nstat_listen=$(netstat -an 2>/dev/null | grep "$int1\.$int2\.$int3\.$int4\.$dnsport") 278 | else 279 | chnstat=$(echo "$nstat_all" | grep "^127\.0\.0\.1.*lo0") 280 | nstat_listen=$(netstat -an 2>/dev/null | grep "127\.0\.0\.1\.$dnsport") 281 | fi 282 | 283 | localdns=$(ipconfig getoption $interface domain_name_server 2>/dev/null) 284 | 285 | fbloc="$cfgdir/cdefault" 286 | dfloc="$cfgdir/pdefault" 287 | udfloc="$cfgdir/udefault" 288 | dfb="# FALLBACK SERVER LIST FOR DNSCRYPT\n# Please enter the DNS IP address in column 1.\n# You may add a description in column 2.\n# Columns must be separated by a whitespace character.\n\n1.1.1.1 Cloudflare\n1.0.0.1 Cloudflare" 289 | udf="# DNS LIST FOR DEFAULT DNS WITHOUT DNSCRYPT\n# Please enter the DNS IP address in column 1.\n# You may add a description in column 2.\n# Columns must be separated by a whitespace character.\n\nempty empty" 290 | 291 | ! [[ -f "$fbloc" ]] && echo -e "$dfb" > "$fbloc" 292 | ! [[ -f "$udfloc" ]] && echo -e "$udf" > "$udfloc" 293 | ! [[ -f "$dfloc" ]] && echo "${DNSCRYPT_PROXY_IPS}" > "$dfloc" 294 | 295 | cachedir="$HOME/.cache/dnscrypt" 296 | currloc="$cachedir/current" 297 | if ! [[ -d "$cachedir" ]] ; then 298 | mkdir -p "$cachedir" 299 | echo "0.0.0.0 placeholder" > "$currloc" 300 | else 301 | ! [[ -f "$currloc" ]] && echo "0.0.0.0 placeholder" > "$currloc" 302 | fi 303 | 304 | dcpicon="iVBORw0KGgoAAAANSUhEUgAAAMgAAAC1CAYAAAAa5LCBAACl7ElEQVR4nOx9B5gd 305 | xZVudd87SXEEyGRbCIXJc8PciRqNNJqsLI0SEgqIoABKIASSQUIEIYRAZGHAJGPM 306 | rlmwjb3GYC/xrcHPJjzAa3vx7nsfH7uf93te88hBU++cSn26bt+5986MRJr+vv87 307 | NVXV1V11zl+nTnXfHsYGj74eDoGrEFIIA3IUchXyAPmAAsAQwFDAMMBwhREB0GXD 308 | FIaqcwtUW3mqbX2tMLkHfU+OhcFj8Dgsh00ImwxoqJoA2vhHHDfsuNGxcHVzbah+ 309 | ZaPbcOlkt+5gs1P/yDSn4YkWp+GZllDDr9vc+t92uHWvtrkNL7eE6l5sdeqfh/J/ 310 | anbqftbk1t9f79ZeW+PWbIqGovPH5Y4rhXZHA44GjAIUMo9MmkA2eTRxbNIMHoNH 311 | vw6bEDYZ0BiHHXXUUSNqQjVdTW7DdWDcT3e6dW/Ocmv/1u0mPl3qVvUsdWN8mRsP 312 | hC5DmSkWuVWH5rjV73e5dW+3uHUvNbm1Dybc+IZj8k6YCPdzLOAYJskzknnEQeLm 313 | sWTCDHqXwSOrI4gUlBDDO0LRxfNDiSeXhqr+a7kb/3hVKNqz2o1yiQiRiEoiK628 314 | INj1o0QCQkQKRIw8IxTpWeHGP1sWir270K16o9ON7Ts2P38s3PNxTHodJA16m6Gq 315 | P9rDDHqXwaPXIxUpxHKpLVTVuSCUeG6FG3tvDRjhulAFXx+qFNBplDSty9eHiQxb 316 | eUHnhyuNDKqfBKv9dSFPKvQAgT5d4sb/vc2NXVNQUPBN6NPxTHoZXJ6hh0Hia+9i 317 | e5bB42t69OYphs10a/YsCyXeOiccOXRuuLIHwDMBGuu5xKBpXmB9ItdbecHtVxi5 318 | 3hCxIuPrrQHCrAAPM9eJ/7IofGId9PVEwDeY9C6DZBk8koiBhoCkGDrDrd61LBR/ 319 | e20vhDiPyPOsvEzK+9veQAKJvyoU+2BOqOoXJ+ccl4AxOIl5ZMFNBvSgOGmE2SBR 320 | vvIHJYZZQrWEq6YsDVe/sSYc6UGj2aCMZ4NGTsSTNG3VPc9KZ3r+hhwic6y8gPZt 321 | 2NdLWz/HkzSNZFkeqnqn1Y3eAOOCccsJTC7DMNBP5VUGj6/AoYmhl1Go6CFzQtV3 322 | rQ7H39+YE+nZCAYCUgCNayMx4I05nqRpr9w7J+j8dMi2fe9e+3Y/9vX8bcp6a3Oi 323 | hxa48ddLwt+cBmOFMQvujGmvgt52kChfgSOJGGVDv3HswlD10+vBADwD8WMTkZus 324 | vL6UbwKj82RElUVIfS8vuDzd9fzn+6+Z/vq99R88Xc/poaq/VIeKz2TSq2BwfxST 325 | scogUb6kh72UyqvLjRedFk784TxQ+KYcaryVfDOREhEiI6oskrI+zaN1+3p+0v3l 326 | RowU0OkMz0+HTPq/KSfasyoce3+aW74bxnMck4E9PqgcJMqX7PARozlv3KkYX2zK 327 | jfRsAaMKAhrDFmJwNmidgTjfrr+FyC26Xm/107WX5n77ef89uCyd4lbsgPEdz1IT 328 | ZTCY/4IddFcqt2j4iUcDMV7amBvtQWM7XxtdAHQZyiDY59v1sy1Pd/2k+hZhzify 329 | cFw/w/4jUd6tc0vPZdKjYECPSy98AIkxHt31Gjw+x4PGGWK7ttFt3H1mOPbpBaDI 330 | C5SSLyAKp3kyXWmkRITI9PVpXtD1/G0m17eRvn37fv1Idz8D1X/ciVvixnqanNrf 331 | jg6PmsRkjIJP7PHhI+565bLBZdfneviWU/Wh+tldbv1fFrpxfFeJrw1HQZGVfGte 332 | xEiavkAoGtK5ESNpWpcnI0KkbjOSsn27fjJonUzq+5Hu+oej/2vCEb7IifOFjhzr 333 | uU71Z3Vu4iHQQwngW0y+1kKXXYPPUI7g4fMaRcOLjm52Gp7uduM9SI6FoDAtzwrH 334 | jOJT4cI8T16ojEjLrVZeELaC0Wi51RhaZcr2k8/3ZOD9WO3TvKD73ZpLZAbIpv9b 335 | 86L8jFBMjrEiiEmD7HTr3pkQKjob9DKByfhEL7sGvckROvy7U27DubPc2o8WOFWK 336 | GFV8gVIWSsQqIMmFoFhtANuI3GblCWjjQ0nTGZb3v30ic9W5uZm3t02lU9Xv6/2d 337 | D2OIbxIv0GOLMgDz3aqeSU7t8zk5OTHQ0SlMPkPBFyTxqTz1JoPHAB+aHDnjhkVH 338 | t7gNL4FCepKU5BCp0itAsVuJUWSDi4gMAq3Tp/bzPUnTfW7Put9+3x9gY26UL05B 339 | CBvdijydTs2HxW7xJtBXEZOvsAx6k8N00CVVbm2oYdEMt/ZDVISAUoqQWklUYUou 340 | DcX5BflRaTj5ngFdnO9Jmk5FiHTob3sDfT+mr/lWOsPrrc+JKcOX0GmPEFUpy9Gb 341 | 1Du1vwC9RZgM4vE9L/QmGJsM7nQNwEGXVPlNzqRH5rmJHk2Gbq0YoiBfnoUlEJuc 342 | jwZADCJbbAeSaUnTKc/JIzLPyutD/e1Ebjf30cv9ZHt9grNy4snja8Me74D6bU7d 343 | /z0xdEo36BB/0IWxCb62gjtd9LnJ4JHlYZZUkfzImDa34W0c+PlKAShpWivILreB 344 | 8clmWE/vyA8GGtsOY3QZII/IPCuPtNXn9gcY9v0E9R8JhrGbHNMEkQkrLwjB9We5 345 | NZ+VuZGrQJ/lTO504YuQ+G6XXnIN7nJlcZglVV1o0tyZbu3H86XLloZOCUDzlDLm 346 | EwXRPC8/zjfDuvrbYAxJKIh6kqZTldtIqk9kgT4vdfuXqDTKS1SdS3prP9v7T4Pt 347 | UHc5kCPVBGOPd5I+LIix1xK8f62TeAL0igH8qcwL4AcfLmZ40Hgjb5LbuH+2k+iB 348 | geXzYJDnCWUkjJyvBt9IXUfJeVYerYsK25QXVYboGaSXjkjkE6kNlxiwLy+ofMDb 349 | s2G1n9SfzOsjOZaFyDgFwRpvX15guUUoKGt2697KDw9rYnLJhU/h8ZX6wbgkzeHb 350 | wp3iTPpHMOwemxCUJIGEsZCuPu7QXFqAiChEiYzynUM8SdO63H9OwPlE7rTyMoPd 351 | vg3/9fpaf3tBRMRo/R3vdOOv0e7Uvndc6MQFoGv8SgvucmFcMrgVnOIw5Bg9evSw 352 | Frfh92Yw9eCipOmBKgdsyI0ZAuwEQzGSpjMuJ7JA1yP1k0DrBNS327eR7f3a14Oy 353 | HQVyGzeIAPOITDV+fiSITFh5fn1Md2s/Ge9O3Ah6r2Dydyf44qMO3gdJog5DjsqC 354 | yhPb3fq/zKUGbUGXoZyrBn8uVYhLpGvlBZUrbMiN811gKLvAYIyk6YJoivKIJ2l6 355 | SDQYadsb4OslXd9//rcLYnxJqCr1+JK8bMYzJazzZzmJQ6Vu5dWg/yiTDxYxeKfP 356 | S77WJDHkKM9PjO1w696Z62hFKbhEasX1osCk80W93up7s9rGvBi/DIznSAKN9DJi 357 | sDQvI+i6KGk6g+vhZsFiWFZRQvjHzD+mQQTy6cS1dJbB+CNmu9U95W7lzWAHcSaf 358 | l+C7XPYO19fuMOSI5taUdDp17wcTwhrwdOU27Po2SB2c0TblxfluMKCUGErkUDS6 359 | iJEiPSRqZFB9X96RQIrr49IKPceAj28f25vjVPdUupG7wR7w4xH4Cj0+VPzaksRb 360 | VuXURbvc2g/niEFKxlwigwZ8juNJmk5VnrZ9wOb8OL98aEwCDMlIkSZSGdzlxOBp 361 | nq+uOn83kZnUT0K66xOZCuhBcLcqqP80L2g8bWQ7/r2V445lxI3hW8HV7GtMEkOO 362 | eG5dUYdT9+Fct5oMYLWRIu0mjJyjB7oXg/fVIeea9sg1gurL8iq+NT/GrwDDG3jE 363 | iIxZeYAhRA5RZUO8+pertDb2K4Z6MqP2Aatyqnrt/xyfQfdTH/aEZLeXpA/0JNH7 364 | wD5qmPzV4teKJIYc+HS8w6l9b7ZjZg9O03OsdKryOXpwhdKq/XlB57uepGmvvFpI 365 | XBtfVBDnVyqjujIlYkRKY9ZSpj0ZhCuIvMLKywzW9VXaa8/LQ5yTW5VR/zMfz97r 366 | Z60fBwN3EZPczoJJ8pXd3dIPAcPFQ4qPb3fr/0YHN+WAp0G68/tTPh/w7SFxfhUY 367 | 2FXDYhI6jVIZ6VXEYGmer64+34bV3lVDY0TGVFsxr/1hMSODz0+NjRBf9Xd8bAx0 368 | fZ2e5db0lLhl+I0uvdzCwB13t76yW8DiCfkJJ5wwpMVp+I/ZOBB6YHoZ0LSgbfSl 369 | vTTn47tEO4fE+B4wsD3K0PYQo9szzJMSMSJjVp7/HJmOGUnTqcr36HTK+7Hqq+tf 370 | DH2YczjGL9v2srjeDKem5xR3PH4gAgN3fDVFbwF/5UhiXh+Z6kx6ZbaDA6LgEula 371 | eX0on6UGfJZw1QlRpmVf6y8JJcQsfXVGiBIZtfIGotyPPapME5DmXa2ItHtoXLxa 372 | MxDjlQ5p27ORRr8dbt2nx4ZOwO9y4RYwPifRDxO/Mq+lmBcPG53GR9MNaDKqiay2 373 | 8pLLZVu0fU8Gnq+vjVLXC6i/IlxljHavMd5k7FUGjZKmB6o83fX2mrS+zxg/PdzL 374 | +GXY/4HSR1/03+LUfjA8NHwukw8T8U1g/VpKmH3JCaKD8twGt3E3Bl8zVadR0rQ3 375 | 4Bao0oKQpNA059v107Q/UxkPSgxwrxke49eA0QlJ08OstCpHI9VSpJXxDlT9dFgL 376 | ccdA9T8ItE4m+uir/pvc+r+AHbUw+VrKyUx+PQVfcPzS7myZ33NUhxvbpzs1h2aa 377 | QaID5skgpKsvFUQV6smZRhGpFZLUnnU924A25wNJwGD3gfHtE8YaNfIaZdxG6jpK 378 | BsE+n+YF1/ckTQeVX1wQH/D+2+Pb3/rZ6L/aSbwI9jSVyRcc8S1gfFX+S7v9a3as 379 | Wp36D2biIOmBcnsZELfGSJpOVT/5/DSEofeQwf0kKyzBL4U1/bVghEHYR+Q+K29g 380 | 6keNlIgR6Z1/NaA7lBjw/meNLK/Xm/4xaC92K+4Eu2pk8rfu+HsS3P790gXtJChv 381 | +LcZvgGr8SRghkrPEAMgB28GGVCaR+vq831t6jqOV98GnZnSeaQghWIbuP2LO0P7 382 | lUHuJwZM84LKbaSrb5fvH0HkCFU2Irn+6pxEyv779NFL/2el6D8dX1sfSfq0r9dP 383 | /Xe5dYeOd7+JH4OoZXL7F3e2aND+hT9I3NF0tz0AhxsznRojJdAAaogB9NNDqfaX 384 | hav9hqtw3QhPBmI4kcOtvBH+NjKBfT1MbxsSN/2fcZj6T9vXMhPCDASanbr3QqFQ 385 | F5M7W2OYDNq/FPGIiTsS4UkdXeASp6tOTVeYQaSAHjyUNJ3pgFnn2x7FRtIMmGaG 386 | 681DrYeg/foRcWHgKEV6RMzITAhxPZHXq7LrSX2aFwTaBmLv8Dife4T6r9M+fVo4 387 | XPpPOInfgZ21Mhm044cgvhTxiFhajR01dmSLW/+u7KjuuIQcnBozYDZoHd+5agCn 388 | qwFMPi9Tl297GD+ynREvGVrFDxCDPUBkEGgdmY4bSdOp2ks+319+dl7iiPbff06y 389 | vg6X/ruc6p5T3eIDYG+T2ZckHvF+S+5MfibVAEw3g1MjIDvdGwH89f15eiDJgPry 390 | gpCuvl1uw19/HqyPrxkeNwZ6w8i4kTRtyom8wcoLQrr2KHYBWY90/4Pao/o5nPpv 391 | deo+LQgNW8xkPIJP2vEh4hfy+YhZWsVCDQu7XFxa1fBg2ANoD0DmyEiBgUswuuRI 392 | GCnSbrWRNN3bDHdGTrUx+BtGEgm4URi2lDSty20k1R8RM5Km7XL0IotCttEGLWFq 393 | suq/bbDpZniad7j1j6h1av8IdtfJ5ENEfD6CH4DAr6R8oZZawnsce+yxQ6c59e92 394 | kQ7rNEqaTlXeZdI1gZiuZGqXnTzg/hlULUHMw65qIoPX7BRenv/6Wwuq+E1gpDeD 395 | sRopjDhmpMAIIq368pyYkTcGgLZ5Ezl3U35VVv3XhJhh9T993OefnOzxtwl0uPSv 396 | z++EpdZYd8J1TD4fwa/L479g+EIttcyuVb3T+Eiqjhm4RLpWXgbIzsMkG3fyrkxv 397 | T32JtyHbjjNcf7t4Lay/b0SVMNZblLFLxIiM8VsK40bKtCczq+/laewfERe7S6n6 398 | 3Vv/00L1X/SZ9D8bPQyk/oPQ7NR/FAqF8Asp9lLrC+FFxAPBeM6kmnantqdTsPrw 399 | IJgwtUbqtH9GGwAjSeFR7PX1ipwEkCPKb0VjRkPWhk0M/JaRRI7U9Uh9X14AaBsA 400 | vJYMzJNn9IEiid0G7XOmRnz4bKJWyLiTeAHssIPJ7wDjZ4T0rtbn6kVMYD7ZaXyz 401 | E262Q9y4lB2qEx39GoRaMxBdigCetMmSvKuVbBT62YiG/bJdMnrbJrWXFBcPAaNF 402 | kijcVhgzMgi3jvSkQCGR6lwjA9q7GrzHjIA+pyZDjZGp+t8bWehWrX95VGuMVUs9 403 | qVHZV/1LWWvleWiDyflod/QGJne18IN0+PsR/QDxcyOIfOYRmnQ2kKAniBA0j5JH 404 | d9gmVBAymUFoEBi0i+O9i+SHfh17jlMtMFulU5PFQ9AMjb+5OAAGfnuhxEEiJaJE 405 | Rq285PLbVTpVeyvDun/B27S99T3odXSal66/0wlREDYhgsmRvf57t41aPsVpgGB9 406 | Ch/n1P8z2ONMQBWTb/3iC4157HPyItp75Dc5jX/tEJ3UHc2mw/ScZHQmwT+D6KDO 407 | v/6uIYZBZ0lpBJoM4uMErMpImfak/mTNHEUaz4gCYhXiWc7KTRiDTofvjPIkTWdy 408 | 7hXD4mQy0J6B9tn/+vlsq/+iTyxhpExLqX+0ZL++PpN4S29ZR2ON6sAZniIb/ScD 409 | Yw5JiEqnlU9wuvipbDofJ/HZcHbShWCTzUwG7PhsBH9g9bl4EeE9TmGty8Y503mJ 410 | 0w7rwGbe6EzmLU5dxh1uV4OD0kagx2E1nmSoDJi9mHb3WnnaSKTBzDaeocpgrvlm 411 | b8L/7V7r277zHI8scwxhqoyB6RnXflv2quExfgfM/HfAcshImi6MBpbfWehJmjbn 412 | EywLV8nrskTS9b0fJWnvWJXU/6AP78319VFitvX7DE1Curyku1CdhiSpkYn+dVkr 413 | AO0q5kzjE1inIMOpBl1EdvExbMqrYJdzmPyp7hjmeZEjGrAL73ESO6ngVNb5L/rm 414 | EOLmgdWlQJgqIMxkZxKuD71OMyJFutaTFjrIYHYmpbUHsR8c0llUz5Ted688Msh/ 415 | wCP/ExX+v70qgQVEIuQ/6pH1JTzSSANKGKkNEq97WqhKGP5dYMh3aUnThSmQYf0r 416 | hsUs76Bn/WpyX9roE2IiMF9cJ/3pNmOh8+kkkVD9TCSRhS676LayXmohSQJXDMyT 417 | vem/xakHL9HEK5w2WDp1ag+RBGNzxP4K2ZhdTP52BF+Lx23fI+5FhPcYy9rOkDfa 418 | RW66i0h50+OhgxXgDmvALU4F9xhEBg81ihzBLrjduGnpPbRSaFDqLaVwuaBmR5RM 419 | EYLFzT+hXOTE+GKQi4Wk6bjAIoWFhkypDMn/PSnEDgjY74Hl0t1g0Chp+u7CSBaI 420 | +vDdQvyuVRz6qInpEcKbCCQhsM/iPkF2k/7LiQD7FSMyZiYMu5/zrP7NtpaV9rau 421 | t5zqbfXgRyusPOrAU5SDreCqJJU9jbMnZGJ/0os0vwH2ib9AxK+i4M908WXGI+ZF 422 | 5McX2AlD4Ib+NZnBnvR3zutwERAmzmA5xiYJ99nGxC6E8jRS0kGkg0kDd++5SDA5 423 | 5hKP0a2MWxs8Gv8SgRg/jYJFPanSS0Amk0UZkTJANERBQvQuKq7pBhwcGeH3gJHf 424 | qzEq6kmaVuX3qTTK+1QdLRHYFn7nipJhLvEO863+ekSQWGz1n0rRPxaTfQS5gMX8 425 | fSQxmfaUcnkHBAEpl7o1QtINmnaqT1ZjZLvSO9oBxhPjHWo3qe2HEiZV+Sh26pVM 426 | vsxYxjwvknMkCKJij7bV/emALscgK+K08Hpwpxi7tNkzC3XDyj13Mm/HpMsE5BI6 427 | wJzLpNeYL2bMKuUtpCFoMiwFLAPjX+ZE+elMYrlOOxLLFJYSEi1RHsYmizQmZaRM 428 | Ar/3ez8Y9v1g2PcXViZjVMSTNG3KiRR1onwFeA/6/080IbpVX8WSkUlIo9dE8E8G 429 | 2KelzJOnMT1JBPexm8RlPpI43hZwF1N6ETGi1Fc7S/YW02AJVQ0riiKnI4399A1j 430 | 2NTfg53OY/Lh4RHzImbnajzrfKW/nbCBS7FKIMskcLPobpNjEkkS4b6VAkTcwRQ5 431 | fMsMbTSaGFLp2uCRCCsAKwGrAGekwEqFFeocSpogwlAvo3HriCh/AIz7gUJEpZDf 432 | L6xQqCSy0sqrUPU97BsWkcaqlkzCeJn/2pQMSzQR1D1r4uv+U9j9W6rORywiE8E8 433 | 4k0CSUKWWdrj6xXCVIhJcUJEbzGeSfRqE0SOt/JkerqRNI1yBDv52yzZixzWWETF 434 | Hi3T+9qhdJig6k+EAYzCQDYKsnhBPn0u0kXWwIYcagbHmVzPoEuYZyArmCIFi/DV 435 | gDMdAMiznEp+NuAc+PscI2X+WY6stxqA561S7axQnkZ7oaWKNEso4NobcqL8B2Ds 436 | iIcKyy1UEFlh5QFGyfQPQCLWhWMkXvJI4HkEZeDEI4p71ZMBwwkhws9gCiqNeSIf 437 | 2pATQkxAkkVPAjHhjXDSQe+IYy2+hMgSRg8zyDORTh2Mg5wMy6gK1iJ2ocYT+7Bt 438 | Iz0hMrevk1kjPl1HL4KxyBh2mJ+LmKfm4D1+YXcy0w4l1+80EiEJIuVEkAjcQk44 439 | U8EtN5htXlxm4Vp3hloHzybbld1qV0ovp5YJZWtPIY1dkqGSr4X0OpDrAeciWIUn 440 | AZi/jsl6axV5zlbEOdORBiaNS8/EMTUbxwROV7hteAX/IRi6jYeBDA+PrJBSpYPq 441 | IbANYfiaCISgy8n1pVeMCQ+4WvQ3Ku7VmwSCEJH9YrJfOHngZLAS+8MkSZZa3qTb 442 | 7OZ5T+D11m+XeYiHQXcbL1K61JhgJkOZ1vqnNjEA+KyAHYX/oGca856LHLan6+Kd 443 | qzFsSgQu3DNedEJ3pD8d8tqYYAbOT5AigkomvYpYXjH1ygTzAtb5wmsAOZgMtJep 444 | mR6VjZ4CDWENk4Q4D7CBlfNNIDcBGTYjnHKQ5VIKVEB5haizEeR5ikCCNAwNq4Kf 445 | zSoVYSrFNVbTGVphS6iSPzKyjD9aCNAS8MjIUiNpWpebekCQC8OVoh9naE8m0sob 446 | ChJElTeMiHtCnAP3u1bdK94znQTOI+n1IOVEUCnG52xH90l6nJWK8EjMJSrGWaCC 447 | d3ywqrd/cbmLBGlm9TwGuiq29GcTZAKZFDOxJ3tCTSYUbaOTn8Sqf87kcxH8OiM+ 448 | XcfX4Qf8HS3zxu441n7TALE7CRMs2OTAwS5lHQIRmJUaIbDHmWq2eCou9/MXqnjj 449 | NLWeRsWudqTRrAFIYlSAsVcK478ASLAVsE3hIoEyfrFOszKRfyHIrQCsv4VJ4myE 450 | 9AYHDUyRxpEGtlZcq1JALtUqxLXvHFrOHwPjf6ywlP8USCJR6ocuK5TQ9R8YXiba 451 | OUd5P4pz1PXWKqwT3lDe13nqPrG/m1SfEVsU9CSw2dST56xX/UCCnUU8CnoqSZKY 452 | 2CLXW8F66xe9Ro0zjZezdqGnEkBxAEH8JMnORsZb5/V2/jjW8U6I5Sxn8nV4/OUh 453 | vqM14G/6Cu8xio0dCaz8r94Z72dwMvz1TcyhMEEMHqY7BOTAdhiC4ICXASpAAZWA 454 | KGsVREFv0m1iDrkM0eQ4WxkOGgx6jC1gCBeg4UN6O6S3Q/oSkJcCMXYGAPOx/NtY 455 | V5FHkAYJBm2cjwaGnohJT4PXQEPbIDxOuZE7QmX8H0eW8J8Xengc5UgpH6d5BHjO 456 | lTmqHUVGAybzxHWYJMJG5pEACS0nAUl07DNOANuYxEUqbxvU3arqblEec4O61lo1 457 | hmeqpeRys9ySXgRJgruHTayJxyBuRL1UsDbQE5KkHfTWoXTYoUjSYQgy0UyG/iVX 458 | 5isU296S6x/Dim8F+53B5I+q8E3f4cz7vciAHCI4P5W1LE9l4KkYbZfbGM/ossqD 459 | JkixIkiJ8h5+crTxOLjxakAtmwZufTLMZtVihpPkiArFrlPK3qwMepsmBZMEuAzk 460 | bpBXOKX8SgbGCOmrWKkEpGVeKb8c6wJ2CcKUJREGob0MXkeSB8DKjaE+MKSMP1lY 461 | DCjhvxQoToknFR4dUSLOPV95ry2KkIgtCuer620V3k7ey8WOnAB2qHtFYJ8F4VX/ 462 | L1HpHaov2mPiBLJZLT+RhOuUp1ptkQTjvC6njtc7zTwBk1UcgHpBHaEXKVNepERN 463 | cPaSS0+IE1JMqH4bSW0/qepjegxreh3sdxFgEpOfCjqKDeBXUMzWLnTil+luMFto 464 | cmgPoqE9RrEiifQc7QKVoABEDJSBSqkBcjQAJrNmPoVNhTVwIyivSnoOJpdUm5hU 465 | Os6YOxQxBCnA+PeA8V8N8hogxLWQvhbS+0FqYN4+wDVQH+tdpc7bDfWxjV0gdxLS 466 | aGMLwtWhUv7UyCL+tMJTRD6VIu/m3FJB6IuZIqPqh8bFhgzS0AURlOfbCfe2S0wC 467 | peJ+keSXg8TJAOH1QdbF83ao66CHRFJuUp4LSXI2kAVJsgKWW4sh9miFsZ4E414H 468 | qAYdVMFkhXqpFCSRXqQkyYt0mAmQrhqCSeCfQMcTmYoQyYTpOjSUHbUFbLgdUM4G 469 | eMtXLK9OYfXfwl0BepN2UB3UoeTyoFiDotMsqyg5PO/RZpZWVcp71Iun8kiOZt7C 470 | pvAOcPUzwJsshvXwWpjtZKxRAUqXRowGgx7hamX4+50Sfj3IGwA3AW6GvxG3KInA 471 | /BsBB8CIrhMkgnMBeyG9R3saZXxohGh4lwlo4ywTwLJHhxbz5wsVgADPFxZJqdLP 472 | CSnLnxxRJNsj3msXXQIylcckdjvyOtg/4QlVPzWQ5NeofiP2ImmdUlFP3L9q/1JF 473 | touU59usSLJWBfCLYUnbDuPcDBNSEwAnqFrQRQJQJbyIJkm7IonnQfwxCV1eZ2I/ 474 | fSs/nkUfZnLLF19iHNBgXQfnm/p2g34kzwDazWp0+WIOvbwqUQNdoWammCJIrfAe 475 | zUJJ04AcbYDpoLg5QJAFDD1JA18DysRlw2WhcmE8aAzoLa5jkhQ3gze4FeTtQITv 476 | QPoOkHcyRKkC5AFuh/RBKLsVpCbPDZA+4Mi2rlMeCIkjPY68zjU6T+UfDJXwF0ZO 477 | 5C8iCqX8TaGXRonliO/nlYjzsJ29DD1YqQESU3o/QgB1DTxnP9zzdereDogJAO+3 478 | RPQZ7xvT+t5xktin2rpSkQwJd2NBnP/02EZ+/ZAqEWOtA++xiNXzmQx3EifzVhh3 479 | 9No4QdWDLmqEF2kV+okQL1IqSNJhJj7Pg/j1b9tTskewJ2gbwfY4lk39d7DjZYAp 480 | TP6gCr/I2O9gnSyvOp5NfVP98SidxnN427odxIN0iMEtU2tanJUiIvZoFd6jDrd9 481 | hZKahbJQabMwFgFyLGGTYCnQwM9kdXw9eJODRzXwt5rn8ueKm/m9+LEDMIrbFCHu 482 | AsO4G9L3Ae6H9PdAPkDwPVV2L9aD+t8FY7oTgOfe7ijigLxFkwfq3sSU92ElPq+E 483 | 9Z4aNpG/VKgwcgJ/GciAMHmA34D3OAjGKs+V3k0YN+ShsaNxG8N3PMO/SZFeEx8J 484 | fRuUHxT3KoHp2wjZb0QSKULdEq7gT4yu529NbOPvlk/nr45tEZ7kXBF3NMDEM4nP 485 | hfGdDuPc5vMizcaLxIWepL7KlQ71jlYxoztbHT79Z2Zj2dibh6Hs6IvAlvGLjJVM 486 | fvwaP+7Qr2WWWF59i1WfAhc9RAMquiSyO5hNRycGwE+OTjG4OMiVasBjAPQeOFvV 487 | E++BLh+VhspbBEpcBuQ4A2a7tUCQjawWAuga/uvIdP7ZvMX8s7mL+NtNM/kzYxr4 488 | A+BZkADfByN5COTfAf4e8EP424PMewjSP1B1v6+Ig4S6F+Q9mjyQvgtJB8amgYS6 489 | W+EewCPhEv4aEALxupIiXajSsNR6Ir8YzkPyyraQkOjhvuNIbyY8GvPS0vuVCm93 490 | p7l2ibpuiQDeI14fJ4PvqnaFdwT5UEGEv37yZP5uWQd/r6wL0MnfKZvOD+RGYfwS 491 | fDWMI044iwHdMM6zAV3Ki0w1XqQZ9NIi9KOXWeVmmeXptdgXj3SmJIhtbzQvW5zA 492 | Yo+APXcz+X7WGCafrPdrmaWWV63rszF4v8v0d9wuL2LJD5LoIJao2adcLa8iJjhH 493 | 7zFNBIjo4luBIJ1Kaeg9lgJBVoEizwGlbgCSbAWC7ADsy63n781YwD+bswiwWMgP 494 | urr5a0XN/Cc5lfwRMKAfw9LiJyAfA/kYkT8RZaX8R2BQWO8RkA8b8pQK8iDBfgDy 495 | QUMimX5Q5EtgPSThK8OL+B+AED6MRFnEfw9e5WHH39YDcB/fA3m/wn0CJUbK/BKf 496 | 99P3IO9D30upak+e81hBlP95zBT+QWknf7+0A9ApgAR57vjJfKtTzc+DscOxxAkH 497 | J56FlhdBgkxWXgQnLulFWs2GiiZICdGrRxR7V6s/9pV6Ah/LpvwZ7Pl0Jp+J9HuZ 498 | ZZZXE1n7jzI1+Gw7qEmi03pmKSEot5ZXlCCT1ezVrgJzVNpC5T1wxjsXsAWUezF4 499 | j12APYCnxrcpcqAnkd7kEMiPZy3kfyydxp8Il/NfgDE+AXiSAP/G/McBPwfD+pmC 500 | JtGPFbl+BHgU0n6UCGL9WBEN8SzEF38GQvx5VBH/t9FlsKSpF+k3Ie+3EMjr9h4V 501 | ZESUKUKWCm/2d4qYWv69ytde72GBEh/+QbQhif2z3Ah/8+Qm/iGQ4gPwGkiQDwRB 502 | JEneKenge8O1fBuMH47hehjLM4UXqRdeZB6MNS5ncVMEN0emKILUEYLYcUipRRDv 503 | 2UiyDfXFntLY52d5bCi+eqKXWcezfuxmieXVUWzcCIg//ha0FJIX7zCSplPVT15O 504 | 2U/LvQHUu1flZGs3KpZXrcKN6+VVi/AeTST2aOArjfeo5RcCKS6BQP0KwLWAW8M1 505 | /L2uBYIYSJBDc5fwQ/MQp/FD80/jH85YxP9wShN/BowJ8ayC/LucPw3yKZD/BPgV 506 | GJokUCkQqNQQ6HFIS5QZKUnn1f8lyDdHFvP/A6R4d+Ua/smlO/lbJ0T4/x5VzJ9x 507 | SwUhHzeELAMylilClhmS2ZBlZcrrSfyUAP/+GcQwr3+jnn8ABPgQiCDRIYmigCR5 508 | 7ripEKxX8+0A9MA4lmssLzIbgMusFhj/KaCHRrXlW2N2s9p8y6xSotsgD2KTpb+w 509 | 7XM0m3gX2PV8Jl9gtHezsjrU7z4mt2VHgA4iO6y85BvWT1ZTE6RNLa/QXbeq3atp 510 | ZvdKL69QSXOAHN0m9qiD2KNWeY9qoei9QJQDgNsg/eKENkmOeYsVMZYIchzqXiqx 511 | YBn/f9Pm8VcKE/wFIMKLrELIXwtU8H8G+T8Az0P6OTC65yD9LICSSEKmnxFlss5z 512 | 4jyJ1/JL+V8hFjp0YL/AB+s38X8dXmLa0208BfJXAuVJHs2PUpUvCfuEIa7EC0Pi 513 | /K8TWvhHEGNIdPKPDEkkkCDvAXkO5tSKSWUnjNlFgM0A9CLomZcDSRaZZVYTWWZN 514 | UXEIepFp6plIK9nu1bFIO+i73exopSJIthNwuvrfZHX4hu9SQBOT/4MdPzKX9UND 515 | /e5V3njWujcbAmQD+hqJf+eqnTz7CF5e1ar4Y6oiCCpJL69OB4KcpZZXOPNdAoq9 516 | EhS9H+TNIO8A+SAo/+NZi4zXoMQ4tPB0fmgRYjn8vZy/XdbOX3Yq+MtAhpdYJaCc 517 | /w7k7+Dv3wL+J+A3gBcJkEwULyqS/UbULxfn4Lmvj67nh67dx3tuOmDwnx3LfO29 518 | QEj5PBj/84pkzxriaSKWGyImo4K/eewk/lF5F/8YAu+Py6cLmUwU6VVeO6mZX68m 519 | ld0AjN8uAMhYpB48dB146npYZk0SS9v2pN0sucyKWc9DqAfxiOLpv6gf9pQJxrOW 520 | /wa7Xs3kQ0P8nUif3vDV8UfBBNb+tP+GeydIEaPG73mHoPo2QYrVjFLiI0iberVE 521 | PnyKC4JME+tcdOfNavcKlYTKwrXxClDeOWrn6iLALqHoan4D4HZQ9j0gHwT5p8rp 522 | HjmQGAs8YvQsXgFYyXuWIFbx99sW8D8Nq+ZvADFeZxFAJX9N4X8pvKrwig8VQr4K 523 | EqHr4nmvu1H+/radvOe2WxRuFjh0y438zXEdoh6e+7JAhSBlpoTUQGL9LjfK/3tc 524 | G/+kfCZgBv+kYoYkSLmSAd7kHwrq+E1qUsHJ5VKQ2wCb1DJrFZBjqdjNauQzARiH 525 | TFPPRHQcUi0I0kLikDZFkPYsCJJuQrbL/bBXKFh3CDt6O9j2bCb/AQ99NysrgoSP 526 | YccML2ad79trxKJeCWAjNYGKDTFSE6RCLK/alfeQzz9k/CEDdFRKh4o/usnu1ToV 527 | nG8XsUcNxB4J4T3uBHwP0j+EvF8Nn2x5DSDGohWKFIDTzpBYiljNP1u0kv/HyVP5 528 | n1jU4I9AFsQfDKIpIMuxrj73r/PW8J47DvrxHYlP9l0LS61ace6/wDlvKCA5bTK+ 529 | TEhEgd7uj0DqD0uRFLMUZnrQBPF5k07+n6e28u+qpegBwNWAy+Dv7QAvWJdxyAIR 530 | h8iHhjoOmQQ6wThEL7EiZIml383Sb2VLnacmSPKE23uckm6CxvQ3WNG9YN8LAfVM 531 | /hyXbvf6jv8PAAD//7ydBZhd1fW3T9wn7u4Zv3N13DNx92QmHpIQLDiUoi1SpBQt 532 | UigUh9IWaKFQoKVQwyVACHEXEqRYbH3vlnPvuXfuTCah/y/P83v2zciVtda711p7 533 | 73Omrn9u/1F8LAASCT0WQO7j2JED9/GoaGmVZlNxhm7QTWnl0/1HpT1e4u5/lEaX 534 | d9XO+UwAqcZxS9AqHHmWbc6vBIgbGJXDTfYIy+/43p/4mf1l02zmsFmDbOGF4mj1 535 | Ujlao7Qsqs9zJshmx6+1iQB2tZH/u9rgebzR83Pu7+0eMUGO3nOXHL33V0nE1391 536 | l3xzziWysVGA58qR9ehTC5cL5McWno8SAHK1o2uJHMqeiCbF6WC2BxSySmIm+U+X 537 | ErkP+9yJnW7CdtfqMitMmRXWNj0Fu6nVLGVr06gX0QOWaF+UeXbVw3olq9IeXqzS 538 | vszw+NcFJM2J7YnEYGnYBFw7Qxz75/s5kVed2HLvMOc4+5Bo/zHcGXluYo8w4hgf 539 | YIRnTPbzsWMksbNW8U25a7xR2qCZFg4XkJDdIHQbdHO0xDToZnMw3/YfZmNQNZhX 540 | 2/JKOfx+9Dhfewr9GX00oEqXVVE45i3ygAEQ85VOkqMLlsfp24rZsqNpSLY7QRSw 541 | o/s4uXZY7W5bIIdvppz6za/jdb+re43uu1e+nLpStvE7W4FqC6MLpYHQgOOFJ5qd 542 | +lTKYd9UOZQzRQ75lCbHFAfKRE/JNU6+BZA/NMkly0Z0tr3VU2apyeZcu5p1km7U 543 | 1UpWgbb9WDRSN+omg+RHDy+657JG2RO+BpJ0z/GTNJtF4nfZ42Pph07I3u8Pdcq3 544 | E99Lndp9SIMBsf3HyIeOReixv58ITPxuqjmMOMrTuMUAybBLhLHVq0rbf5RrJ5Tp 545 | DKJ2z4to0AsBpECvriyzTjxPlwZhZsBwtLx6EP0W/RGn/4Wf+UezQjk8vSZWUrlw 546 | aDAsEAtXGC1aGff44MQFso9afQ9g7CF4jYKeMfFxUPYyI39/9qUiDz2QVEcf+o3R 547 | g/cbAc7+jCmyk+fZqQGLQbiVxwaaQDQzbW4UlK8Gj5HD/mlGOVM1KIcBJQ6Y7Mnx 548 | kNgssn3ASOyTKw9ho3ts1r1BZ+GI7kPUkvnpUUDMStZkZDYMS3WJVWyXekP2dK/P 549 | c7o3M25PpDYg3ixSV/wkngqOB6j+n7c63NhpdgoxPhH5HfM3Dht87KSR/cHWw51R 550 | 7xzjherMEPV9PzZTjPb0HDGjxc5emZO7JnuY/Y+w3SAssitYVbpBL9EN+hzdoOfr 551 | Bv0Muzl4uQXkNgLzHvQQX1Pl1bN8/2V+7h9of+F04FiUHA4FhdLikz1aZbRkFX0J 552 | JVe7IvmM506m/R4dQN9ULRN59KFj6xGlB7SO3HGX7O9YquFyQduFYtDYDNWY5x82 553 | ATBmoOlyODDdQjI9BguKZhQXEltuqVLrnU6l8nvs8wg2uw/9kte8EV2ll3vDetI5 554 | ne8rG6uVrNkJgJRZQBIziC96jUhiBokdh09U8vhJVGK8NSxe2zk9r3LMsRN3P8T7 555 | 5xKOCUizTk6nFJ7o24a/cMOUaIQ0j5HSbRPnPXvls5tNAVteuf2HOqDormBN0BuE 556 | hXaD0KxgrdYNekSu0CVCCEBM/6Ec/wdbXv2Nn/sX2jhgtCmtomVVQtZQUCwxQMiS 557 | U2JaeqrWkbnL5asOJfIFz12XvuT1/tt3rBx9+EGRxx+tR4/E67GHNTCHLvuZ7G8c 558 | seAFZR+jAcZC0yQs342YKEeCM+VIwNUMLQ2LkguKz4VkSlwW+T5rnLzYNE/b5zF0 559 | vy1Lf2Eb9UstIGfYYycGkAILSJHdCynVvokBUmkBGVlHBokHJC1actfOKP9LdXdG 560 | PEicz0VFjvmjO+59s455LkufvxrkFARdihMvdjleINwxLaniM4c3e2TpnfORnms/ 561 | KqL9R7E9oGh20IvM0XYcpZx2sgYkopvKn9oSQc2E96HHbP/xAk7+Oz/3HzLO+02L 562 | 5cicRbHs4WYON1u4YCggliXqNK2j80+WbzqVy1e81n8VDHqMPf66WYEcufF2kd8+ 563 | 3gA9Fi8LznfVZ8vnPNfnPOcBxv1IA9M4V75PmyJHQrMBRGkWYMyqBYsBZVoMkpwp 564 | 0Z5EAbJnUJU8j12e5vmf0Kt9as9INeoxQM4/TkBCFpCcuDJrVPTiN9fnyTJIakL8 565 | JIvH+IWehgPV1wm+TJwvcMyd4NW16upcVoMadd2gD3PK5icGePI3WP/368oc9ZVW 566 | 7lWD7upVwANIbAe9VB8xGasPKJoNwnn6/FU+gLgrWBFq57AuEdRM+BukHP+M7T9e 567 | w8Fv8PPv8btflc022cPtOTQgycAAiJOslp+OzohKQfJth1L5lueNKVePh5dfJPK7 568 | 3zZQT1g9buSB5tvAXA2hykg6O5FVDo6YLEdDcwwgWnNisMSB4oEkZ5ruS7yArO1c 569 | qieOZzQgEb0cfpddyfpZEkDcM1mJgBRbQCINyCCJWcR7mDEtIa6Od0KuLx4HOoXq 570 | zouqUVd/larBjbrn+o+Ki80Tu5dLjop7XB/xyWGorUQo3F3zrOi5q1j2CHmyR5Ft 571 | 0KuSNOhL7ArW2XbVxaxgGUcrhz/JqJZ3X+Ln/snPv8nvfcDv7xo8rnb2UJljaQIY 572 | CVDI8tVGK87QOlpzinyfUirf8Rrf8xpKhyI1In94Mqanfldb3u8r/f63RgnQHP3N 573 | A/JN15E2M/Hcw4EjPDemkBnjQZlls4oHElVuuVmEXkSVWf9pVigv8r7VAsaT1l53 574 | o5vRNehSdIEGJKw3CxdaQKZ4AFFlb7Ld9MQMkiyLxJr2ugFJBKB2tmlYvA51yncR 575 | 5ysd8wd31J9tU9eHHPPgYnQFa7hT+avjhaCuN+zumKZ6HseM4s4oVXbXvEqfu/JZ 576 | QNwLo9xrPwo913+YS2uLdP8xG2epHXS1xHuqXW1RTeXP9ApWSH7F+JDd/3iOIPgr 577 | Uv3H2zj4Q35/Y+vyWO+hAHHLKheOODBiQMiK1UYrYzo672Q52KpYDqoA7jxK5KGH 578 | k0PRECUB5sjPbpFvmxbIoUET5WikGiDmeZQElGBdkLj9yGT5avg4eZX3+xJ2URPI 579 | k3bFzwUkMYPUBqS4DkAq7KneSr0aaQ4ujvQcXnSPwldZxfZGkoFyokDU1qjvifNT 580 | HXMXePUXqdSfkD7mjrq7gtWGJ3ihjif2jO6bGlXnGzz+zOHCURnXmOd5eo8yu0Ho 581 | HlCcgZPm4axFOG2FPmIS0Y50l3hv1UuWId2g/x6pBv0VnPxvfvZdfu9jHLye5zk4 582 | aaEBhOyRHI7VSaA4M6mOTj9JDjUrkqNX3izy9B9EnmmgnvaoLmAA5cikU4GjRo7m 583 | VptRgRIHSyyrREuvYKzciq1wmWZ9R+8qSk6TWZ+1GaQuQMwqVkT3IOry2yn6RK/Z 584 | BynXJVZpFJCwPfburmQl60MyEiZMtzeNLf/XvtjqxBWL35ZOW3XvXrWjri6gcley 585 | 6r0dkAtIW55k7Q99A6me+tL7gdP1mRzXOG7K9WaOyui+R6zvUDu0ap1dnfkpkVHA 586 | MV6fJjXlVY3dQVf9x2p7xOQKHGtWsEJ6BetRpBr0522D/jq/9z6/vxbnbuD5vgzN 587 | rJ09dFmVAEcyME4+q5aOLmV8+vcNh6M+YLyQXHMzYMw30nAkgJIko0TLrYDJInop 588 | WJVZdtl3bbsy3ZMlA+Qme5btkjhAvD2I9/LbEptByjx3OqnQPs2x57Kyo/2I8b8b 589 | B25cxCAZHQdJalJ5Y652/CV+39vjdHB630isz3HM7YAGOQ04ctLIEtSOJ/082RtK 590 | TIHeryW+IffMjffsTWLmcAFxj7PHskfs1G7sriVu71EavfZcnQWaq5d38/Xm1Srd 591 | f0TkIruC9XMnKL/UO+hqBSskT/P4L3z/VX5ONegKkE/QJp5rb6/xMUASs0ddcCQB 592 | I07X3xgL9j8+VbcaCspdvxYpWiwCHJIISVJQTLkVv8LlllmmxDpID/J24wK9J/SS 593 | 3iNyAVG9W0g36VejS9D5eqNQAZKrAZmlS6yihB6kNHpg0W3UA54bOfjiskgMkAwP 594 | IG4/khg/3iCvq6mPzzaJwMTU1RmszmSpIyeljjn6ru6XVe9Srz6D1d7p15EXOZoM 595 | gLpqxGTAuLvisbNVsZrTNUiWhcNnL4Zy4Qjq9Gx2zQvsdQbe7KEcolZPzOpVns4e 596 | K/UFUqb/uBgHX4VDVYN+B3JXsFQD+qJdwTINeoGs47k285w7mpTSpK+sI3scBxyr 597 | zo7XnXfVD0dDgXn8cZGq5YCxIApIFJJk2cSbRXQGmWMhiQfky6HjsUW+LrHU5umf 598 | sJMLyJ1MMGaZN2Q3CiPaxi4gs6OAuEfeY8dN8jzXhbiA5NizWSaLuIcYY427tyet 599 | XX2MqpVJjjVh1xevPZ20J4j3hY65uXWDlnr1HkhfJzC4IQAcK8O4GcN7dMTd43AN 600 | 4j2M6PYdQTvz5NmmvNju0FZGV66K9d7HNJwz1x5vX2azx2qceIHuP1TdbOpnVSY8 601 | GF3BCutG9B8akDxZA2Cf8lxbeN4dPP/BsQtrAxLNHvXAkQiFV6edK/LoIyJ/ejq5 602 | GgrK/PNF8hYY5S5IDoo3m3iziFtmJQFkV8+ROpu+5mnSf6uXec0+yC9sBlGTzjka 603 | EHXUJFfm6x7Eu8xbbC+9LdEZ3/Qh5boPCdqj7/6EfiQzLpOY/7sLNu7x+FgMxSbb 604 | ugHw9i3J4XLHXk6WurG1ujakyjF3fz/mfXs1IAOcSG5DXiA14WveN5eeAEiG50O7 605 | hxBjTflIa7xKe5ykwpZWFXomKtW75iW6CRxje4+ptveotku7K/T5q4he3lUbhD+J 606 | 9h9huZfxYd2gqxWsiGcFK18+4jnWa0CKZRfO/ZryI7q0q8urJNmjoWB4df7Fph+p 607 | C5JjAXPJ9TE46oAkLpPEZRFPmeU26+5KFoBsSCmzgORqQP5oNwp/ozOIe9REARKy 608 | gET0ebf5no1CtZo4ygJShp/UYop7x8WIXaYPRCGJ7Y3E+pEqz8RZ5WnevdeQxO+b 609 | HE88JgOonxN4hXhfhsY45o6L9e6FRE/xDnMKxjbkBepT7d3xqriG3PQd7oVQbmNu 610 | DBl2YgcSSywcVXbXfLwurczK1Vx7ZZuazU7R1ypEdPa4xJYEN9ry6j7bf5gG3axg 611 | qR30d3GsWsFSDfpWC8gXfSZYQBLLqx8Ah6urr28YIImg3HWfSOHi2oDUBYk3i7hl 612 | VlJATAZZ06QoCsiL2McF5H5rP9XHqQ1XdVjxHEY3gyywgEy1gIzWtwByG/XYqd6I 613 | 9WmsF6n03FhupOeMVlWt0Xuzh8SK5FgxmFyxGB7g5L5JvK9A4xxzE4d6b0nqAtJy 614 | qFM07cRePNZzZDijPeeqRh0zewQ8m4G5nr6jTN8xo0QbX6XxSfq68wJ9uafaGFyq 615 | j5bkyhm297jIrl5dm1Be/RaZE7ymQX+d33uf51ErWBt57m28xm5eb3/z8trl1Q/N 616 | Hl7d/avjg+TJJ0XGrQKGhVZ1QZKk1MqtTmjW59QC5OvUifIedlD2UHZR9nnGUZcE 617 | GEB+aQH5KeOPdQYJ6wziAuJedjsBjbEHFsuj16eX29WsimgvErS+rj+LeAHxNu/J 618 | d+BPVIOcPPU31Ru8Wej5+4PFc71v4njfTO2jI/Ef3L19qM82bt7rPNzdclNaleqm 619 | 3N0xn2g3BWPLuqq0MjWxKq0u1Gv1pl5WTr1dL++q/Y8Q5VVIl1cvI9N/5Mc36LzG 620 | HgUIr3t42rLkgPxQOJROp4944rGGA7L0xx446oCkrizSAEA+6ztGA6Iy6t81ILl6 621 | pe9x7KUAuV3bMlQvIKoXnGivCamyE5ops2LNem4CJH5PT+KLghKLj0RIYvE02jOO 622 | jpuU64pFb0x6vzbYyVN3fV/lmMtvj3nsPbqLPtQpWdSQF6jr+4nHBxKzR2aS7BGO 623 | NuZl2qjF2shmbX2MhsP0He6moGnMVWkVtqWVqpHNTHcdo5s9VB2tZkPl9Bf0CV6z 624 | QfgOz/FhtEEvlp28zl5edz/O/L6wOqH/+AHZ45RzautHl5vgf/YZo7rguOGOJHDU 625 | B0n9gMRKLNuk50yX7Z0r9Wbpf7CJAkTZ6Gl9mteUprfbXk7Z9SLdpIc9q1h5usyd 626 | Ht0LMX1IlQXELbNUFsmtVWolByQrmk1GWqnYGSneM1zxp4Hd1a6qhMfHBmaIU7CW 627 | eFfXhai/QOVen35sQEY4pcsbSmQyxe+Q184e2UmyhwtIfkL2GO1Z0nX7jgUJpdV5 628 | +mBiSJdWP7O9hyoNTHMekt/Z1asXbXll+o98238UUV6Z/mMfOsBrfzt8Wv39x4mC 629 | 4dUtt8cASQaJKq1GrvjfARK3FxIDZEOrUiaLAj1pqN7seX3a2Wyq/toDyE8sIOda 630 | QNSiiDq5oCarGZ5GfawFpDIBknxPFnFP+SZCUl+p5W3cvWrIhF3X94c6hZ868cdN 631 | 6r2Bg+dKwuJV9QGQWAfGl2DezZ6quBkg084MBpDKOpZ1y7RRy21p5Z7WnWbvWFKt 632 | b1yWp486uKtWF+K8y+xKy/Vkj1t19giSPYK6VHgKPW+zR6y8ypdPdP9RqPuPXbzO 633 | Z7zu57yHrzuN/WHl1bHgUDr9PHNKty5ITr60Hjh+ICB2J/0QDfpH2EFl03/p82nq 634 | OpmwLkcftRPMbUkAURuFK9FiC8jMOEDcMqtYVwDmJg7eht3dGynH9xX2mnVvP1IV 635 | d/VhPCjx+ySxDcUq8WaUWGap/X2vhjlFG4n30xzzZxHU3zCs9zyWJ4MULz+RFzxW 636 | BnF7D/ekrvcmDO4x9iKbPSr1hqC7ahXLHmc1L5RLWhbqPY8z7dEHtWp1pW3MbwKK 637 | Ozy9h8keEZ09/q6zhymv1kT7jyLZrvuPEsqrUvmC9/DfRuVydNnpJwZIQ+BwdfFP 638 | kwNy2z3HgOM4AIlbxZoT3UlXS7xfD5+AHfLlLX2y2QCi+rTfW9spQG7FnqpkvUID 639 | ErIZJKwBWcLv1Ni9kKn25g0q24+xWaTCc/y90B5gLMS21S1K9JiYRXLiSq26IUlU 640 | QyfzRNkMogCZdlyAqB6k7ieOzxDxX6u9Ux6rJd2d05HR7OGPZo9yT+9RplOzu+cx 641 | EeO7p3WVM05qlCcfDx0j21PHyqt9KuTBlCK5tklErsGJN6Lb9MndoD6q/bg+WmKy 642 | x191c66Ol+TRlKrySu1/FOrl3Z3qmIntPzQgvKcjU05KDsj/Int4dcdd8ZD84XcJ 643 | q1Y/ABDvPojqQYKes1iB6TToo3UmfdNm1pctIGpSedge8LzV9nSxDBKKZpAlei8k 644 | X/vG7UMm2FuRjtJLvsXal9OaFsmFrQvkvo74oDvPl5KvfR5GQZ1FKuyqVmW01Ipl 645 | kZHRykMpFluxBaBjxWP892Ma4uR/4gEk3GBAhjtF1d6NmsSUVt8bcJd03Z1ydyaI 646 | 9R6xY+zudR65nua8VJdXxdGVq/jew9w8+bIW+bI/fay9RT9KHyMbB1XKq92K5fEW 647 | ubq5NNkjFO09/q6b81y9ObjGlleb9PJusV7edfuPLy0ghwprjr//OF44lM64wBxj 648 | dwE5+6oGwLGwYdnjGCtYOzqP1CtYatIwm4QRnW2fdNS1+2qicTOIW2KZDHKGziC5 649 | 9kbWefpS5xn6VG+BvlfvxEaFckrzArmlXUT+0iUgb3f3y9s9AvIWerpLRIobJV/V 650 | ipValZ6d9vimPRGQzISqpXa8xsv7M0OcvA9PKIMMdwpnxJ4wfuu/NsHJDx/WlUF8 651 | 1gBu7xGy+x75GpBS/ZdSK+wMNM6e1p2ps0d+XO/xcKdifXv+/9pb9X9jpe4KuH94 652 | laztVSb/bFskLzQKx2WPd/XqVb58yvO65dVuZPqPMvlK9SDoYNqM/z+AKF15rYHj 653 | 4UfNQcT/NSB1NOgbW5dqe7yuTzerJd6w3gNRe0YPAIbq425B19oM8mMLiDrOo0rc 654 | ZfayW9WHLGycL5e1zJWH2wfl9a4+ebdbjrzbPUfe0TKA/Lt7QKY3K9G+zrPHUEL2 655 | tK/fA4l77Yh3RcudZBPjK6MeAI4FzCAn9/0T6kGGOnnjvQEff9qy9pvyyptB3Iuf 656 | 3DHxtK77R3Dc/qNYZxBTXo226Xqa/oMt+fpYg0rpK/XtL82huf9QYn1t/6bFN/YW 657 | /uresvoWmhlj9Y3Qvs0YJ7v6V8m6DqXyXpNCXVKs1atXqrwq0uVVrP9QgFRoQL7v 658 | MSn5BuH/BSBKDz8ssuSi44cjEZBau+hJyit72e1HjQt0P6Yy69/0dfpmk/AJW6Le 659 | rZfLg7q3cwE5D52pAYnImY0jckuroDzXIUc+6JYlH3TNkve7Zsv73XzyXiIgwHFW 660 | qwLdY7qbh7EsYibMQPQw40gPIPHlufckRvyxlIZN4F5gBjqht5wTWcUa7ITy637B 661 | xDcUr/imfGSc3L2P+NWr8ujqVbFdvRqpb2Vp9j6me8orte9xsj5SoprzkPy0cVi2 662 | Dq2KAuLeeFndX9YAMk7fFE3d0sbcvWOyfDF4vOyitNjStMQu75bY8qqU8qpMl1ff 663 | oO+aVf3fNuiJOvfiBsLxvyivpmOnSXqyeMve2cVdwXrKbhKqFcC7ooC4GSQsVzUB 664 | ntY58mqHLFnbNUM+7pIpH3bNlDVdFSDZWgYQbxbxy20puXp1sii6ouXujcSySCAu 665 | i7i9SHwMxfZGkh9uPLZiMdzf8b/mnMA+SMteTuaIhr9g/YBke8bYLURH1gtIlf7T 666 | XupYSUG0/1hkb+dzql7aVXcsCcnlyon0HOoPvXyTHvtbF272UDdCM4DY22/6Jpt7 667 | Q+k7e0yXb4YBTJfRsr9JebS8UoB8qwBBR6tX/f8DRP3+2OUnAMeCBpzB8q5emfLq 668 | 84Fj9WLFm/reYKr/CNOgmyXex7DrfcgcdQ/KbY0D8vvW2fJmxwxZ3yVdPu2cLp90 669 | yfAAklUvIE93DsqoRu6KVqm9NWnDAPF54ie2kRi/OnqisdrXyXzBOc6ddH0Wq63T 670 | vRvp62hmkp4iGRDJjpJ4d8y92cO7ex60/UeeXd519z9GJQUkV+/enooTzYldk/bV 671 | 7PZUu3xbXo2JK6++zzTZ46C+P+1kfYMCFxB9zygVNLY2Pzhsmnzbeax807jSAlIp 672 | R8Ys/f8DiPv7y8hYBf/DvQ83eySsXqnPv7tnFf1Hnu4/XtXL4GYzVV2SrBY4HmkU 673 | lBdaEejtM2RL5zTZhDagZIB8BBwakm7ZpszqFiuzXuvqlxlNiuySb4kFJLa7nhu9 674 | PVD8EZS6MkhW3J7asQFJjE/v13o6w3/vHOdZLH2aF3XiCb441gskkwtHbPVqZBwk 675 | ObbEit2ppDy6e56YQSZbQObpzcFce+7KHHe4yB5/uN42kv/qVmz6DzeDZMaXVzp7 676 | +Gz2IEjMVXWzdPDErt9WM261HB4yXQ52GCtHCLb/k03CZHC4mrLyB8KReMR9TnRz 677 | MHqCl0liS8dyeRu7qv7jFdt/PAsUr7XIkY9TMmRn51TZjraizahuQDJqA2KzyNsA 678 | clKzAj3hVdgl3xILSOLGYd0ZJBY78Y17LM6OJz696uYMesg5jtO8jgVEXZPbMd0Z 679 | +UnyJx7pGePPyiRuCDYUkGQ9yDgPINX671EYQE63gFwcBSQgtwHIrxg/7VseD0im 680 | t7yaElde6YDRGWSOvQOILUncIFNBF64RmUzZs/iM/xtAkv3+cl6jYNEPL61q9R7x 681 | N2pY17rYllcReb1ZUNa2y5LdnTNkDxDsQjvRdqQB6eICkl4HILYP6WbKLBeQS1tF 682 | 9FGh4wGk9s56YhaJjzHvea342Ky7wnHV0en5S+c4rgfxAtI+3al4KdmTHksZCevW 683 | 5sNVehr02A66ufaj3F5WW6oPKBpAihIySL7OIMv1RVEGkB97MogC5B70SKOQ7Bky 684 | MlZeZU6IzyD63rTTdR1uADGH96KAqNLEA4iZoW1QVi4RmXkKGeV/BEl9vz/15AbB 685 | kXzVKqG0Cia5SQOAfNg0Xza0DsiejplygKD/DO1Fe7ooQFJlh84gCpA0MkjacQNy 686 | V7uQXqY3u+rF+uhJeQIg5mKqMnuA0Xv0pKIWIDFQEifgY8ejFyDv11o6bX/qnMAV 687 | hWqJKyXdKbsvtoMZv58RL+/P1M4g2dH7IVXaDSAFSEW0B/ECUmQBqbSATNKbhPme 688 | HiSie5Bz9KaVOrkbtGevgnb3PCh/bBaRr1JHewDxZBCfAcT0Hx5AwrUBkURAXKnZ 689 | faK6bv2M4welIYcclVZQ1hUuOnE4kl5ea+6DdXDEKPm6T658SUB/0cXAsZ+A34f2 690 | ot0qgwDJDsZt0RIrTTbWW2LFA/JUB79MbVSgjwmNiV5pWKQ3gN2VrIIGAxKLHyV3 691 | yTe2t5ZYwSTGa+34tJCo+2Jd4BznNemeu5oUX9GwrFH7DWV5SE+cAXw2fQZsWg3b 692 | XXRzW58ye4FUsT1mopZ58/U1Bwv1VWwRfeXg2QDyI316NwbI3RaQx9GrbfIps8Yl 693 | ZJAp0R7kBwHindlHLhOZc+oPuz6kLk1ZUWfPUQuOWteex9/BRH3u74dWyDc9A/Jf 694 | eoSvkALk8y6x7LGP4Ffl1W5dXpnssQ1tsRlkYxcXkDRZRylWFyCvds6R6sb5enIb 695 | Hz2XVRxt0kv09eplekLMs426OXJSWcfFVPGAZCXEV+0McixAzONUp2QPcX6ec5x3 696 | NYneF2uYU7DUu83vrfkSz+snvoHYh4h9MFexU7wVnlO8ZZ6DiiX2oKLaKCywf3cw 697 | T28ULnPUX1kN632QCy0g19J73Izu0qd3A3qJ8in0XqcS24P8HwLiSu1+q7Jo+Zn/ 698 | GzgUcCetJossrP+cVV1w2PtfHc6eLN8PLJFvu+fI1zTQUTi6ZMVlD11eKTii5VVa 699 | tEF3V7BcQD5VgHRJnkHeInuc3DTXHlws0CXWaH26tyjagxRrQEqjgORZQEL2sgfv 700 | Cd/YjnplrSY9fl+kvoomOTBDnTx1Duts5wTui6X/Nkg/x1dQd1kVn+LiAYodV07M 701 | ILEeZGT0rokhW2J5j5qUe46amJsz5EV30tVGoblziTriHtSHFG/SNxcI6LV7dUz7 702 | D0htem3sWVZ7D8TtQY4BSK0epD5AXOVTFk1g5l+y+ofB4WrSioZdb55wc7jD6WTO 703 | fgXyHWB8S7P8DXB83dUFhNJKZ4+MJNkj1ZZXqba8SouuYG10yysUD4hZ5lWrVxc1 704 | j+ieUflsor3b4hh7aNE92VtiT/cWRG/oELu5nDm0WBGFwy3JsxMOMXqVOGEfa0J3 705 | Hw9wctQm4WrnBO6sqHfT2zhtevBk3yUSm5jiameU+KMBdWURf7TEKrdLvQYQcx26 706 | ScvuStZMu9Tr9iGn2VOllwDEVcjcHC4gv0YP81gdUnwWvaSa9oFVwDHJ7IH4UUAt 707 | 81pAQpQgYQtIxK5g5SlICL48glKLAM23aggkrkafJLLw9BOHQ2nZGTaDNAQOBQZl 708 | Zd9c+b6738KRI9909dnskR0trb7QcGTEsgdQ6OYc7exCecW4DW3tolawyCAqe6D1 709 | XQGkqwtIuqwFDnej8IZWAT2RqZJ4MlLZfyyQqEpA9R/m2pASu5NeajcKy+x5rGSb 710 | hSMT4KistR+S/ChK7R4lGTA9nKG/dU7w3rx6Nx11znQq368LgMyEN5PsWIlLvDsT 711 | uEpcyYrE9SHujRqKdHqeZM9jzbHHTbx9yEWNaNSB4HrGW9Gv0IPot+gZvv5io7D8 712 | swkN6fCxAGIziAIkON0DyJwYIBqSmgRAEiDRWthwjaJPWUign3J23UoEw3v/rTHL 713 | 7O18amLwuu81ot73HMAYa8DokaPB+I5RlVU6c3QHDsavulk4VPboBhzM/p8R7Pss 714 | HLq86kr28ACyBSlANnZ1AUkzGYTf+0Rlj66Zurx6oJ1f5jbKk1loOs35ZDShERmk 715 | UaxBL7N/Ade7xOtmkFB0o9BkEH+0vErMIFWeLOJd1fL2JIkTenKlOF1vdU7g7u6O 716 | E9ss7JjulD5eF611Eeq+wcTG3OfJIO59Wt0+JGSvB8m3jXqJ9w6KGHoqmonxq9Hi 717 | RrmyksBfjS4AhMvRz9BNjQJyJ7qfx4+hpwDkeX7mFfR28wL5NoNSS2UQ/1SzURic 718 | Gd1JN4E2Nx4QVDcgxwmJkvrTayqjJMKx6qx4nXymR5Rq80/1wFHtgUOBMV6DcbBH 719 | oB44siwc9B3dgIPAPkCA79dw2OzRNZY9dmg4KK80HKk6e2y0GeRTfs6FY203BUiG 720 | PNshWxY0zpU5jfLxUYFM04DQoKMxChBU0Yj+oxENeiN1oRT9B8ptVGZXsMw1IYnX 721 | hcT+pkhldEzcU0se/PUDY+P3cGOn6cXOCfx9EBcQ1aikjHCKLj4WiXUpfvUqvqb0 722 | 2SvI3Fv96CsKGwEJRlPGK0ZlGLUK445DakaagQPULLWwUUSWo9MI/HOB4GJguKqR 723 | KrMCcjuA3Mvjh9Hv0HN8/2V+7h+NI/JR2yI5mDMJOCwgIcqsMJBEZutgO5oLILnz 724 | TCDmq1KLoMyvD5ATgMTNKGrj8Vhg6IOS5o6OR8sWeuCgnMocL4f6RgDDDxhGuqTq 725 | 4QMO1XP46oGD7KF6DwJ9b9d0mz1SgSMxe9RRXnkA+UfnLFnRJKInrjlI+Ugt705C 726 | amIbje9GonJ8WQocyq+F+DgfKX9HGuF7xmAjqgkeB5C/UWVcD5IdN7km7omcmFKd 727 | YvW3Qc53TvAvTLlLvW2HOP5RtQM//vBY7ZQXPyYCEl3JwhB+DKIME0IRC4gyXhGG 728 | VAatxLhqFpqIwVXqVk6YTwZZBiCrCPyzAOBHjUNyReOgXNs4ILegu4DkN4xP8LVn 729 | +N6LjcPyKnodSDZ3KTdZJGjLrBCAhMkiCpCIBURDUhMDJCq1B5JMC+tWUkgsXGPp 730 | UZaecQw47B/lmbFCw3Eka7IcGlCgM8bBnglwKDC0bOZAX3UHDgD5orspqw7o0go4 731 | upE9uprMsVtlj64AwrgdbePxVsYtaBPa2A1AGNd3SzOA8Luf8DzvUlqd0ywiC8ke 732 | all3dmMAaUz2QBORKq/UBKd8qCY7b/bI04CUaZ+HtFw4KnRcKPm8imvYvTd4ODEN 733 | cvyvO2YF64T+RmF0Jau107oXT/h1/W+m0jPGL8vFPhD/T/jQaqYI1ALEQFKks0iJ 734 | nnmqGpkySxl+Bo6YhyMW4ZQVBPwZAHA+ugwYrgaKGxl/yfhr9CiPn+J7zzcJyd+a 735 | hOVfzHRv0Y/s6VdlskgIQMJkkcgsk0Xy5loBSH5NVFIw38gN7OOFRKuu30NTlhsg 736 | Vq02cJx8RgyQlerWQ6fJ0TnL5PCQUjnUMwgYAa3ve5py6rueKnNQUpE9vu5h4eiR 737 | dUw4dPboZvqOnUCxIwoIcHQje/C9Td0sIAqO7jE4Pu6eIT9tGZTF+GE+MnDkyVS1 738 | /4GfxqExjQEElTemvGpM9kCFjWPlVV4UEON/N4N4Acn2jEbEUqPaWcQbn7Un59o/ 739 | 39MZrBr0050f8Fdu3Ua9S6ZT/o/jeUNxX2vkKh6Q7EZuBlGQuEaiHrUzSz5GLMKY 740 | 5Ri1EiMrY6tZaSqaZZ2yjKxwCjobCC5qQrOOrmtCFkF38/hB9Fv0J/QigLyG3gCQ 741 | 95rk0bSPk8NhsogGhCySO1uO5M02ZZYGhHKmoNpA4gKiRUAXNlD1QREt0Wx2Kgai 742 | OSdbOKxWqD8OukqOFJM1elswepExehrF4DCZQ8HxX6BQ0nAAhoaDYD6A9hPcnxHk 743 | +wj2vUjBsVsB0p3SCiC2o238f2s3BUiaBsTAkS7r+b1PGdcxfoLubpsjS5lwFqIa 744 | 7DkLTW+SL1PQhCZkj8aFMgqfKd+VAUiJCwfKbwwYKLdxuYQbq/KqXMPhZ8xBfh0j 745 | FXVAMjI6ZjWqPSE3FJg2Tsr1xPbJzg/4O+nRRj3NKbopK0n9F3tDsTcZfRz9MIZ4 746 | X2LK9ADillk6k2CwXIyXh5RBSzFsBQZWxh7X2GYRnDAPhywi2FfioNVkiPPRZYBw 747 | DXDc2JQs0jQg96FH0VP8//mmIXkF/aspDXvTXPmoZb58l00/Ep5uAFFZBEiO5s+1 748 | ApKCmqikcL5HBHaRVUNhSQqOgU4BGM1YVYvoT04FELLG1Bo5PLRQDvUCjl4Bre8V 749 | IEiD0QsweiqRNXrarKGVKV/28MKRHg9HdwtHdwPHTrQdbetOaYW2oM38fxPaiDag 750 | T3vQnPNcn/TIkGc6+WR504gsxo4L0Fw0E39MxS8TNSD0HqiqSbFUNgEQxpImMUDy 751 | NBwKknLt70BjfI/8KKdx7fIqsfLwNfJOvB41MD4znLLPiWv1l6VUgz7KOc4G3f0X 752 | PZNFvTa1FgDJgLFvNMtLePQDVUQ/YFb0cYWWMkxAzSSNDSARC4kypkrLpRhZGVoZ 753 | Xc1OyhEzgWM+cJxEwJ+KzgGCi9BP0LVAcQu6u5lfHkRP8rU/NQvKS83IIuiNZmSR 754 | ZnmyMaVEDoWmAgZZJG+mziBH8i0kBQBSSAYpQoUEbhHB7MoN9KLjVBQSC5oXDjdb 755 | qcxFFjvsG0XWCFg4/BYOkzG+Y/xWgaEA6WXhQF/1JGv0BAwlAvlzdKAHcADGZ4z7 756 | CPS9BPqe7l44KK1cQPjeVrQFbUYb0Qa0vifZA61D/6TRP615RJZhx4WAUY1mNyV7 757 | NCV7NKX3QGPQqKb4rGkhcBThP+AAkoImZA8UQblNyvB1GT4v04D48blfj5UGEuRr 758 | HB8vKoaMKm2M1c4qOu6STdieeB3iBN5xYkdMytAw1NlpYIPuzSL6bxW2clr1obH+ 759 | 0ttwe8/GZDdKVPwbTpwBst0Pbw3hj84i5dpg4Sbl2oj5GLGQUc0+FRi6CqOPwegT 760 | ccY0NA/nLGImW4lWA8D5zUJyKePV6OfNAvLL5mQR9FhzehH0fHN6keb0Is3Vsm+u 761 | rGmeJ7t6VcjhvOkWkFkGkMK5VkBSRNAWV9tRlUJW3sAvrkdxkMSy0FElN0MVuuUc 762 | Tbh/shzuH5FDfcgYAHKwDxmjt5EC47vebuYADBeOXmSNXgoO+o1egNETMR4goPcD 763 | xmeM+wj0vT2Bg3E32oV2oh09KK16UlqhrWgLP7MZbUIbewEI43pGBchH6OLWQVmO 764 | /ZYAyXw0j8lmBprKhDOpWb6MB47R+Ghks0KpwF+lTckeTQEEFTQlezQlczQxCuHn 765 | IApoAQdjTuNyC0eFjo/sxp54iWaUimPEW/1ZpYczSP3RHHcHPR8NdBpwxCQZIHpH 766 | HXXNdEqfjdsNr+cN+hJKq2ybOtWHztYyX9OANFFi9sBAAW0wY7gIhsxF+Ri1CCMr 767 | Q1dg9FFIOWEKzpiBU2oI9KU47FR0DhBc1CIoV6BrW5BF0N0t/PIQ/3+yZUCebRmS 768 | l1qG5VX0esuIvNsyTz6m1PpiBP1IPlmkEEgKySJFQFIEIMXzjEoUHFYlBHicFhjV 769 | B4kHrKOuvOCpLEXGOpJRJYf6kTX6kjX6BrS+7wsYfQCjL2D0AQwtwED/7Q0YWpRU 770 | 6ItemQaMXula+wnozxj3EeR7CfI9jLsZdyn1Bg7G7WhbLwBh3Mq4GW3isZICZH1v 771 | sgdah25NyZEVLcKyFC1oEZFqNLtFrkxrkSeTWwBHc3qP5vioOdkDVaDS5sVS1KxY 772 | CpspOEoklzHcjEkQ3wabAgbyNzX+V3Gg5CMmfPxfjW6sxEbP41qxl2yythVMbKP6 773 | SHOn1VWO6T/UZbbudejH3EFPBki0D0l18s/TL9CotqJvwvvGoh/GfKCs6AerNB+8 774 | iQuHASTQtEIbKqANByQYMWKNWtisRIoxdjkaiUbhiIk4ZCqOmYODFhDsywn601sG 775 | 5Tx0aaugXNWKXgTdARj3MT6GnmodkOdbh+Svrcki6K3WZJHWefJpu3z5PjwZMACk 776 | iCxSDCAlc+RoKZCUAkhZtVFpjVEZwe6q1NWCBHm+B0hHXUVBq7aAqAWBWfQaRXKo 777 | P1D0UyJjWCkwvusHHIwajL4WDvRVH7JGH8BQ6k3WQAfQ/j5KwIH2AcJetAft7m3A 778 | 2NWH7KEAYdyOtqGtaAvajDahjX3JHozr+wIIz/PHbj5Z1Sosy1rRe2Dvmlb0Hmhm 779 | qzyZgia1BA4mm9GMI1sWSjkqbVEoRS2KpLBFieSh3ObA0bxMS/k31IwJsZkFBP/n 780 | MPqiIl6aGJl4qdAx48aSr3FCjHmyijcmE+MztVHBFuL5R465BiSx/2hQg+79F+1D 781 | ejUb4ofSI3US2ihWNnmlP5D9cFnRD8yIAXzWKFrNzOjHcMHmGM4aMg+j5rUo1kYu 782 | wdhlLYu0A5QzJrUii+CkauU0An4VOhMALmxDFkHXtiGLoF+1DciDbf3y27b0IujF 783 | tmH5e9uQvN4uIu+1y5OP0LYepXK4hCxSAiSlQFIGIOVzrQjiimqj8hqjCgJfqbwe 784 | AdBRV1G4XNAYS8gauVPl0GBKqgFkjQEBre8H+LW+6w8YA8gY/VE/n3zdHzD6ZWl9 785 | hb7sCxj9yBqMBwhkJQ0G4z4FB0G+F+1Bu9EupX7AwbgDbe9H5kBb0Ra0uT/Zg+8r 786 | bUQb+gPIgDR5h+c/q11IlrcJyeI2ZA80t01EZrYhe6BJbfJlXOt8GdO6QKpaU1q1 787 | wk+tKK0YCxnzWxZLXssSCaNQC6VSCaBgC/oPfJyjZWLAp+KgWYUefU0rtXSs2PiJ 788 | k4XD56lI9ONkE7ZVv0ZpLxLV51IbVRPXJY454n7c/UcsiwQApKvTFr56ZjUq+3ey 789 | 1Sjz5mI0q8f6zTepiJGvofB8YDVag/gwiDZQc7IIYwDDKeOFWtLQYdRclI+hCzF4 790 | cSvjgKpWBTK+TYFMbpMns3DSgrY0jgT+Ke2Ccja6GF2ZQhZJ8csdjPehx9qTRdqH 791 | 5M/tg/LX9mQR9Fb7iKxpnyeftM+XA2mj5Ug5kFQASOVsraMVAFI5z2ikWmUisCtr 792 | jEbON6oEBo+OehUFyoVLZaN5Wkcik+TQkLAcHAQYg4BCi4wxEDF+y/jNQMAYSNYY 793 | ABzoqwGAMSBT64v+wNGfrIH2awEH2tcvXfYOQDzeQ5DvRruUCPadjDsG0HegbVpk 794 | D7QFbR4IHGjjIOAYmC7rB5E90HWd/bIiheyREpKFjDUpEZmDprfLlSloPBPMWLLw 795 | yLb5Ut62ABVKcRuyBypoUyR5rfFh62IJty7VPg20Qi3LxI9y1NiCGMDfvhbERXMT 796 | C2r02fjIbmYm1CwrFUdZ0bgyseWL9i2xGEySUY62adzhFwByOihMJ7LdE7ztnePs 797 | P8y/S/mFUtJOH/qQdk6XEY3zLo5LWd43446Wbnc0Hyg2ZjeLfXAfhshWxlCGwUg5 798 | yN+y3BitVZk2ZKhViUQwrjKwMrYyeikOqMQRo3HKBJwzLSVXO2wBAb8cAE4HgPM6 799 | UGp1CMi16NaOAbkHPdTRL092Csof0V86heRV9HonskinXPmoU55s6Fwg3xVRao0k 800 | i4wEkpEAUkUmGQUkowjqKjSKIB9dbcYqj0YBQ5WVAskrF6qKeVEdiYyTQ0MBYwga 801 | ChhDjL4bDBhDfPLtYLLGIMAYDBiDsrS+Ql8OpBEfRDk10OgA2o8+I6A/I5j3EeB7 802 | GfcwKu1Gu5QI+p1oxyDgYFTahrYOJnsMBo4hZA9GpY1owxCyx9B0eYaS7uSOwNEx 803 | JIsYazoAB5qJpnYADjSWCWYUE0wlKk8pkJIU4EAF7Qolr12RRNoCBwq1KdEKAkwA 804 | WPxK+DmnlfG5D9/7WhIjxEE2MZHtxgfKckGxsESVEG+J8ahlJ/K0RoXbieiL0XIA 805 | GQcgPib+XjoBHFd5Jfygqxk81RD6kA5Ohy7N+vtzGo08rF/Q+wYae2pET7bI9kBh 806 | VB73oY0hyq1hMJA2FnC0LtPGC7QhDWNQZVxlZGXsQoxejPHLcMRIHKKcM7lDnszo 807 | GJF5OHAxjlxJ4K8Gggs7B+Qn6Odd6EW6+OV+9DiPn+pKFulKFulKFukakbfQmq5k 808 | EbRzcLkcGU0WGQMko8kiYwBk7FyjMfOMxhLsY6uNxihgkqk6BtKoagOX1lw5kjdG 809 | Dg2npBoe0Pp+OHAMA45hwDEUMJSA5OuhwDEEMLTIGuiLoWQNxgND0rX2DwYMxn2D 810 | lYAD7VEiwHcz7mLcNRQ4AGAH2s7/t/P/bUMprbTIHsMABG1CG602oA+GZshZ2Gt5 811 | 56As6RyS+Z0prdCszhGZhiZ1zpVxTC6jO+VLFSrvWCClHYGjQ6EUdiBzMOa2L5Iw 812 | CqUUS7BdsQTalWj525ZITttS8eHjHPzta238n+2KmNCyMeLGTXY9oHgVH59G/Rql 813 | /gU4ziOi54NDOTljBGh0BZHWOhE0CBAvHEoqi8TKrF5ZTcpeTXzhuDfnfdNJwFAf 814 | NqtFecwA1iA+a6ScNkql2ngBjBjEmEGMG0bK2MroBagEZ5R3VI7Jk/E4aQoOm92F 815 | GQ4HLgWAVeicbgG5pJtfrukekJu7++Ue9HCPgDzZg14EvdgjJK/1CMvrPcgiPcgi 816 | PWjYe+TLV/nj5cg4ABlLFhk/W+voOAAZr0SQj0PjCfrxNXb0aJyVC5EL1Wgl4Cgi 817 | c6QCR6ofAUcq5dQIxPjtCMDQInMMB47hgKEFHOiLYcAxjKyhBRzM8J8x7mPcy7iX 818 | YN9DYO8ZDhyMu6x2DgOO4UrAwbhNaQTZYwTZA21WSgUQtDENOFKN7uzrk5Xdgtgz 819 | KAux57xuYZnNpDKjW0SmMKlM6Er2QFVMLJVd8qUMlZCFC1B+Z+DoRPYAmFDHIgl2 820 | AA7kb18sOe2BIwXhW1+7UslWoLTF//g+28aBjolWJqtkJQOl+XGDcrRN05QbbXk1 821 | Axzy6DoGUlx11AlAJQIV65fqyile0QeJcLiAKLoC4NHd6Ta0Wej0BoORJFvEwCiP 822 | QpHdxhoHQ2VjMGU0nzIghlQGVYYNYuQwinQibWP8IpxQikMquuZrJ03oliszupP+ 823 | ceJCAn8FAJzeMygXoCt6BeSGXn75ZW96EfQ4erpPUJ7vE5K/oX/3oRfpQxbpQxZB 824 | WwYWy+EJZJGJQDIJSCYCyCQyyaS5VgT7RKtJQDCxJqYJ1UYKJFfjTAY6UjFZDmYA 825 | RwYZQwsw0hHjt4zfpAFGOmL8L/oqjZIqDTCUUimp0AG0Xws40L4RgMG4l4Dfg3YT 826 | 4LsJ7l1WO1MBg3EHX9+eRgZh3JYOHOlkD8YtaHMm5VVGmtbGTODITJc30jLklN5B 827 | Wd4rKItQTa+QzO4FHGhqz4hMRGN7kj2YVCpRGRNLSfd8KUQF3Qokt2uhRFCoS5FW 828 | oHOR+DsVG3UEkg7A0cH4ODtF+btUsjQsZUYWliylVkoGlGSw+Gy8+ezCj2nq4yGh 829 | PVhPFP+YqX45OJjyqpXT2+lC86ASgIrzWNw7cbIPasMRg6QpkLR0+jkd27VrNyy7 830 | Sfl+nweM6JtqZpQIhfvB9IdUH5byKUsZoI2ZPZRhstoZQ2W3N4bLVsbraAyaAxDB 831 | zsrQBRLC6Mr4+d3ypQhnlCoH4SjlrIm9aBx7h2UeWkTgr+oblLP6BuSifgG5qp9f 832 | ftE/IHf198sD6Hc8fnZAQF4aEJTXBoTlDfTegFz5sH+urOufL58XjpEjU4FkKpBM 833 | JYtMA5CpSnOt5hlNsZqcIAWRC9RE4Bg7TQ76Q3LQBxjZRt9lAUc2cGSRNTIBIwsw 834 | Muk3ssgajF9m0G9kAkYGYjyQQdZIB4wMo3083su4l3EPwb2b4N6dkSq7eKy0k8c7 835 | +doOANjOqLQti+yRBSCMW7PJINkAgjb5jDaiDb50uYFe6KR+QVmM5qO5/UIyq29Y 836 | pqFJaHzfiIzukysjUTkq6Z0nRb2AA+X2VMJXPfBb90LxK3UrkpyuReIDlmylzsWS 837 | TYbJwsfZHUskC39ntScOVAwkwJKl4qS1jRsVPzqeypKUXzFQ3Lh047RH0wG/JYrP 838 | BYUaIrmMeig1rryKByQelHrhEH7xMZ2UmjsRJ4WGvXd6s6JfZzcpjxLrguGzYPha 839 | GHmzhfqA2TZbRD94u1ILRakGQgtjZXcq0Qb0dUHKqF2VgZWhCyTYo0DCGD8XRxQi 840 | 5ZgKHDSqL/VwP1J//7DM7B+SagJ/ycCgnDrQL+cO8ssl6GeDA3ILuhc9SnP8zJCg 841 | vIBeGRKSfw0Jy9tDIvLBkFxZOzifsqNIDs+YLkdmAMhMsshMIJlBJpkJJDPnGs1w 842 | BQzTXfH/aVYapDlyZMpsOZSXLwcDlFSBHAQcfsAIAIYf5dBv+IEjBzCsvvSRNXIo 843 | qRgPELBK+7MBw2e0j6DeSzDvyTbabbVLia/v9AEH4w7GHTnAkQMYSn7g8AMH45YA 844 | pZUWcASBw+p1f6aswHZLBlFaoXmDAjJrUEimDQzJpIFhmYBGo6oBEalgUiljUinq 845 | nycF/fIkvx9w9M2XSB8AQYHe+K1XoeT0xI8A4+tepJUNMNldgQMfK19ndbJ+72jj 846 | wMKS5YFFgRKFRZfmJr7ceHPjL9uujGY3LdfKalr6VePmTa8gc5xG1piOcimtBqoJ 847 | X0/8qryqO/7rBKRxVI/p+qy5U+W0oV7r2idl+GjAOFo3GGWx/qK1/VDqw7nZgg+d 848 | mWJnDDVzdDQGysRQmV2M4bKUAZUxe6CexsDK0H4Mrgwfxgl5OKMQx5TgqMqB1MKD 849 | wjIOR04dTCNJ4M8fGpLlQwOyelhALkA/oRm+Ht0+goZ9RECeYHyO8aUR9CLo9RER 850 | eRd9iD4ZkSdfjh4rh+eQReYAyVwgmTM7qqNzAGUOAMy2mmU10x3nGKimA0dVlXwf 851 | 8Wt9FyZrRIAjDBhKITJHEDjQV0HACGZqfREAjgBZA+3XAgy0z0/GCCgBhhIBvTtg 852 | tItg38X/dzLuZNwRBA7G7YzbQ2QPq63hVK0tEbJHBEAYN+UCh9XNGT5ZOozSCptV 853 | o9nDQjIdTUHjh4ZlLBrNZFKByphQigfnSiHKH5QnkYHAgS9CA/IlgG8C+MjXt0Ar 854 | q0+hZPVmxI9Z+DQL32bh40x8ndXV+D7TwpJJ5ZClM0tpLLO0K6tVgmXbqsQ09GVa 855 | ZnW0LDpxD2yW+U8w+BFaSr4Y43RwsimtejnDKa/UxP9YvYA0SgZI4wQ1ce4gOa2G 856 | vUKoG+AMyGhe9JpZqrVvqkWZTns69ak33brUfAg3Y/Dh9GygoSg1H15DwdilRBso 857 | qxtG6q5kjdfLGDS7T5Excj8A6c+shPFDOCI8CEgGk9pxUunQXKkchuOGh2TCcEqB 858 | EUGZQzO8KC0oK9MCcnaaXy5K98uVGQH5OeMdmZRaPP49eoG+4JVMskgmvQh6P4OG 859 | HW0Nl8jhmmkISGqAZD6Q1KD5BH41qpmjx6PVwDLP6Mhcvj53jgFJPZ4xTb4vDMr3 860 | BcCRDxwFwMH4TR5ZIw84coEjj6yRCxwRSqpcyqmI0QG0H30WSdfaFyZrMO4NU1Lx 861 | eDfBvJvg3qUFFIw7GXcw7shl5PvbGbfnAUYe2YNxaz5w5JM9GLcUAEghgBQCCNqI 862 | 3i9Ml5PSA7IQm9Vgu9loBnackoZdeTyOcVRqWCpRGSoeEZYCJpT84bkSHgYY+CE4 863 | FDCG5ImfTJyDj3IG4sMBgNEff+LDrL6FkgksmUx2mb2AgskvE38r3+sYoGrI7FJi 864 | YXFBKYkHpZ0XlFKTTTQoZXaiNqDkNC8/3LpVys1E7llM73OBowQ4hquJXk/4JxHX 865 | BpBkJVZSQGrDofQGT3QTSWoeZVaO02tg+6ylCg6zwWOzRrSUsnDYpjtLZwv7IaNg 866 | FBsjqJmjmzFOJik4s6cxWgZgZCpDYtBMoMjCwD6g8DFL5QCFHweEcEgYx+SPIMXj 867 | rPK0iIxMC8uY9JBMzGDWy2QGzArIsuyAnErNf54vIJega3ICcjO6Bz2aE5SnGV/K 868 | IYug/+RQauXkyge+XPnYlyffVU+Ww4umIyBZNNNo4SyjRQCwEC2YbaBxVTPbgFQ9 869 | Sw6OLpbvigGjBDBKfPJtMVmjCDDQfwvpN4qAg/HLArJGIVmD8fNC4CigpMoHjAKj 870 | fQT1XgJ6T77Rbh7vJsh3MSrt1AIKxh1qJNi3E/zbGbcVAUdRmtbWYgApBpASACkB 871 | EKVS4EDr0CP5mbIIm9WguZnAkU1GRhOygjKWSWR0VkgqGcuZSEozwlKI8jMikpse 872 | kUgaPknLFX8qIgP7hqNheZINMNlD8iULYDIHFUjGQHyKP5VvM/BxBhVBZm9igAkx 873 | A/9n9FCTZJGJDUowN6vEQCnRMZVtV8AMKKXRjOJWMCo2h7bwr6HXuBSdDByTgSOo 874 | Jnha9A7OQnKKmvjj471eQJLDITQxCpA/AcjZUFfldKPFGZrdsnitz5ZSPg1HabTx 875 | 9oKR7ckYWWQM9aGzLBgZGEIbpZeZUZSxtNEUGAMKtTGzMWr2EDQUQIblSzaGVw5Q 876 | jggDRR6zfT4OK8mMSHk2tbEvJOMI9skE/ix/QBZQ+y8PBuSMoF8uCPnlMnRtKEdu 877 | C/vlvnBAHkd/Cgflr+GQ/DMUkjdCYXk3FJE1wVzZN6lKDi8jiywDkqVAsgxAls60 878 | IxAsRkvsqLTI1Uydfb4rJ3NUAEc5WaMcOMrIHGXAUZql9RX6sgQ4SgGD8UBJutb+ 879 | YsBg3FesBBxojxIBvbtYCTgYlXaWGO3QStXj9lKlVD1uKwOQMuBg3FrOWA4cFWla 880 | myuBA61DH41Mk0sjPqnx+2UuNpuJpgaCMgmN4/FoxpH+oFT6sbU/JMVMJgU5wOEL 881 | Szg7IsGsiAQygQM/+PCJLz1XsoEmewRw4LMsfJc5FBiAJXNwgaQrWAAlo7/yN/+n 882 | SshQMdCryAOKzSpdTOy4oOiYioJiJmO1EuqzE7TPgtKhTdd76TfO1zh0dirpO9KJ 883 | 3Z7ORMor1Ta8TGxLNIMkh+SYcBg1c9bwhHdQxc2lzCp0+g3p6LvQF93DsG9Ql1N2 884 | JcJmDdV46VnAllJuxoiBUSTpCgydLQqN0QAjfbAxZgazUKYyMFBkpWLwdJRhHBHA 885 | Kco5uTirSDkuEJaKYFBGEejjQwGZRvDPiwRkca5fVuVSauUF5CJ0ZX5AbkR3oQfQ 886 | 7/KD8hz6Wz5ZJC8ib+VRauXlEjyUWSumyuGVQLJiutaRFYCyAkCWo5M8owuP1gw5 887 | OKNcvq3yaX2jReYYCRyVWVpfoS8rgKMSOBgPVKRr7S8HDsZ95UrAgfYoEdC7y412 888 | We1UqgAKvrfDjtuVKoGDoN/GuI3AV9o6EkCqGKsAZFSa1obRwIE+Qm+PSZcF9Enz 889 | IkGZic2mM05G43k8NhKSkTwuZxIpYzIpZixgIsnHzpFgRELYPeDHH2Rfnw9AyL7Z 890 | +CYTYLIy8iQDUDLTACMVf+LLjGH4mAkvnYkvY5CaCF1QCjUomZTVGdGMUmQzSpEn 891 | o8RKL9PQG1B8NpuomBzROrwJMK5Ap1FQzaDryKe0Gkxj3oXSqjWllReQuiFJAkht 892 | OJTWkUGe5okvpcya4fRoHmyekdmmZEti1sj2gKE/iPpAfLisbvaD9jDpVNeg1KLp 893 | /ZRxmEEAI03NKoCRocHI12Aoo2aSupWBszL5fxZOyFaOABK/cg7pPRiWPBxWFAYS 894 | HDkyNyhjAGESwT+rICDzC/1yEjqtKEfOKfLLJcV+uQbdhO4uDshDxUH5PXq+OCx/ 895 | L6JhLwrLO0VkkeJcObRqihw+BUhOAZJV041OVgIUVyutgOfw8hkapO8mheWbsYAx 896 | hqwxBjhGAwf6ajRwjKYZR1+MAo5RlFRovxZwoH1V9BqMewnoPWg3wbybcZcW2YP/ 897 | 72Tcyf93MGrxte2jUq2AYjRwjE7T2joGOMYwjgWMsamyaVyarB+XKp8wfjQ+TT5A 898 | fxyTIXOx12w0HZtNQRPQ2IKQVBWQORhLmUCKUSHKywOO3LCEckMSjIQlB9v78IEP 899 | YLLwSZYfOMgwWfgpA59l4LsMBQuZJYOJLoMJL2N4fhQU5ft0BcoAGxMaFLdPKYzr 900 | UbLcHsWTTbKjjbyZrDu17/EwWeNHwLGEnDHaGUphFXH6ELvtnRvoSt7QcV0XII29 901 | gCSDo0kcHAJtAiD/4Il/RXo6lZcd5wwa3C37xz4LR7aFQ73hbLek0n1Gkf5gaibI 902 | 0D2GKqUKtQEUGNogyjiDzayiZxc1y6jZBijSlVGVcYEi3WeMnonxlSNycEgAx4Rx 903 | UoRZP185EEeWFQakqigg4wn+aQT+nBK/LCz1y4oSSq2yHDm/zC+XU/5ci24tpx9B 904 | j5QH5Q9lQFIWklfQ66VAUhqRr1eMl0OnA4nSaYByOqCcCiCn2vEUKw0PX1upMs1k 905 | +WYCYEwAjPGAMT5L66txZI1xgKE0lmYcHUD70Wdj07X2Ech7Gfcyo+/h8W6CejcB 906 | vovHSju1AIJxhxr5/natVDsCBcG/bVya1tbxqVpbJlBSTUiVDRPT5FP08eRU+XAS 907 | jTl6Z3Ka3Am4M5kwpmOzyWgiGotGY79KxnLGElSI8plEclGoEDiwtx+752B/pexc 908 | oMAnWSEmNcrUjECu9lcavktXPszKkzR8mu4BJX1YDJT0aEYp0hklo4+pMnRGcbOJ 909 | WvnqYidfJuHshN5keEpoMxH6U6e7s5rMMdsZ6BQ52c4wSqvuzrnEr2oX1uiYbloP 910 | JLUASYSjqQcOA8hWAHmZlucGp5Oz1OnTvKJ5Vlb7oo0xOGwz1dk2WF3NB8qIyxpF 911 | uubUBqCU0jOHMgxGSmdGSVcGSzMGTAeM9CwDRgbpO5OZSRk9ix4hi1nLxwzmxynK 912 | ScpZuUVBKSgOSQkgVJTi3DIcDQQzAGBehV8WV/plJTqzMkcunpIt183PkLtPGSGP 913 | XjhUnrtqsLx28wB5457+8u4TfeTD53rJJ690ly+vK5FDZ06WQ6vRGUCyWsECKGdY 914 | WE6z0sDwtVVT5eDS0fL1ZMCYBBiTAWOSElkDfYE+n4AmAscESqrxgMG4b7wScKA9 915 | SgT0bsZdWmQLxp123MG4Q438zHaC3gggGLdNVErT2joJMNAmINgIEOsA4ZMpZI0p 916 | qbJmapq8h96eliZvotvPHyynXjVIlmGL+aeNkFmL0mXCtCypqgpIGfYrYfIoYuLI 917 | Z8wtDUm4NCjBEuDA3jnA4kPZhYBREJbM/LCk45v0SEQywhFJ16AwKlBy8iwoavLL 918 | lzRK5nQmwzQPKGnRHqXQTKLRbGIXcrqbikRXJi4kHW0MEovtu3R7kKxxEfniJGeQ 919 | M97JdAJOudOfXNLJuZ8+WlVDscm/fkiOUVrF4BC6fgEQtS7wOyq7S50ezixn2MC+ 920 | GRdGd8A7mY0fvQHUza5zqzXvXqac0lmjn/3gA71Zw4KRqsCwM0yWMWRajjUuRk5n 921 | VspQRsf4mWq2whk5hcpBpHqcFcFpRRNzZNTiDJlydqrMw+HLb+8nZz3aWy7+c3e5 922 | 5p+d5NaP28v929vI47vayjO72shLu9vKP/e0kbf2tpV397aTDz5rKx/ubydrD7SV 923 | dV+0lc/vD8mhsyZZAclZUwDGSsFyhoFFZRmt06bId0sq5L8E11dTlQBjCmBMJWNM 924 | NjqA9msBB9pHAO9l3MOotJtA3k1g7+LxLh7v5PEOHu+IjoDBYy2+v43gN0rT2goA 925 | m9FGYFgPBOumpspaIPgIfTA9Vd6bkSrvzEiTt9Dr6N8z0+TeZ7rJ1Tvayk/RFTva 926 | yaXb28ol6KJtbeTcT1Pk1Lc7yUl/7SYL/tBLZv+6r0z6+WAZddFwKV2ZLrkzfJJT 927 | EZRsYMnCF5kWlAwNSkT7LC2M/8j66fgyzWaUtGx8zSSYpiZDNSmqGBjuzSYFNpt4 928 | IOltIelhIMm2kKjY8wHJ8E6BjU5v50qnr3MWcMylLS8jf6Q51SBzNeWVahM26lhu 929 | Xgcg8ZDU23ckwqG0CwL/RR9yD0nsDGcAaSsno3PBmmi/0aU41m944MhUH9CWVBne 930 | kspmDdXIpdN8p2VaOJQBMaQ2KGCkq5lIpW9msMjcbCkFgDHXDpap9/WTuX/sIUv+ 931 | 1UVOWZcip29pJ2duaSvnbG0rF2xrJxdvb4fD28o1O1Lkhp3t5BbAuGt3O7kfMB5D 932 | z+xpJ3/Z01b+ARxv7msr73zWTt4HkA8/T5GPD7STXS+MkK9uKZavbyyT7386QQ7+ 933 | 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 1154 | mOhLeGda6bTnJlw3gdx0L7gLbNOSYRVoBQG5ZKqRM8QiLSEK5SyRLv+CO4bfK2im 1155 | 0JPC4CWUPlv8nyTG50sWWoZRJamyVGlKGPq3LSJhMuUMU8zvL9RgmhrpEwaRNC55 1156 | xwbZSavwlLWUOBEzIu6aPm/6UwmehB+mrkk/lH1Pzpn8Rws/KXp21r+UvFz66ewf 1157 | zDFDeEVTLpdZyszRFIGUZdJSea7SsOjPCIv+jLLQOoS9/srn63XS6zrq8///2v/Z 1158 | rOdKfl3wROHf5dyX+2H6pozBxPqkvTNui/o+ZoQnELudcka4U0uE9XKZ1C4HSBoo 1159 | PVoyLOHl+kRjLg+uNMjSuwT9ZZ5IiFieJWhApiW/Wj59yUkx2p+vBFHLMPXOYk8Y 1160 | Wo7Riz5Ng7QkowaLWSaPP36byFfOxx0Wyk5aiTtWaYkTkFNtO3ewTB6weVLCpPum 1161 | zp3+dGx1/CtJranvpm/KPJ69M/f8zEcK/zz/6Vn/WPhc6a9LXi7771nfLzO/CEpe 1162 | mRtUvTzm678/N6h6+cuqTziKXpjz24Jvlvxb7mNFf5N9X95HGVuzTyd3pHXHuhPe 1163 | jlwY9dKUrOufHDdp3P3o/3vkTLAd0HvCJpkEXXJ51CpfomuDiSCWScvkALmAP2mi 1164 | pblYLuXwcp1ermk1omYIWjaphLBmCVo6jTf+wJJitD9f0RgnoYpTVk/khKGGqSUZ 1165 | NVjNMiJpEvnlijqHOkksz4q1xLlFTrXL+C986MMAkTw+OQo1ype3djn7rOFAiYBt 1166 | Hjdh3LZJsZPuv7542uMzFkc/H+NIeD2hMeWd5NUZR9O35Axm3J17PvuBgp/mfr3o 1167 | L2c+MevvC745+1/zv13668IXyn5b9PLc/wFmkJc0fcm2DxS/PC+oXH5pblDHdL62 1168 | LxzFmhbLexVr9Qk+88V5/1X4nbLf5D9T+qu8J0v+aeajxb/Ifqjwk6x7899P2zpz 1169 | JGVtZl9iS+qhOE/iT6KWx746dc6M71ybOuWxcZMn3CeNv0OO/vROsEXOABt4cBKz 1170 | QIdMgCY5gPnl8rlGfqK0XL4vLOS/hxCJUMLLJFpNiHeHNFsyiNnBgEcM+ndROGpw 1171 | MkQYIiHCzRJ/sElxpT9XThjRYGo4dcBkcJ0hOmUqmAGiQCxIAMkgDWSCmQb9RItB 1172 | P/llzAZlBv2MpIEEon/IbxhLwQqDfjWFgSQyDCfwGPRvmA2jHjSCZtAKOsAqg37P 1173 | i4E1sIHgG5iVDBjBgCEMjIiGcce4ceO2R0yL2Dk55bqvXV8w7cmpZTO+Ne2W6Ocj 1174 | l8S9FFWe8Gp0deIbsd7kt+LqUt5JaErbn9iWcSRpVeax5K6s3uQ12SdS1mb1pazP 1175 | 6U9dnz2YsjFnKGVTznDq5pmn0rbkjqRtzR1B+TRtY/9Qyoack8nrswdS1uX0J63J 1176 | 6ktenXmc7pPUkdmd2JJ+KD6Qug/P2h3jTPpxdHnC6zOWxb4yfWH0izfOi3ruhqLp 1177 | 35qScf0TEdGTHhoXMe5e1H0HuAvcCbaDbbJNm2Ubqa3rZdvXgNWyT9pAC2gCAVAL 1178 | fMANHKAKrATLwGJwK1gA5oE5YBYoBLkgG6SDFJAI4kAMiASUCDeC6w0rGSYZ4ZPh 1179 | jz4hrvbnK8aVk0ZPHOok6izqND1xphuiY6MNK3mSQKohgpBliATKM0SAKFClhkii 1180 | +YYI4kJwG1hiiABToCmZKOg1hkgoMoLXEElVZ4jEajCs5CLzUIK1gXZDmKrTEMlG 1181 | JuuSkOnWStZprB8j+jXqPmskXfJZqySdsh7tsl6tsq5Nsu4B2RZqE5mdBg2XIQxP 1182 | A0klKAfLDTHILDKE8W82xAA01xDmLwFFoMCwEiDDEAMYDWR6EkTJmFHs9ESYLGMc 1183 | bmb4k0mIsfy5UtKESxzqUHvyUKdT59sTiAJEgVJJRCMYBZGCSYmUY4gA02xEyUQz 1184 | EgWfEoqMQIagEZHMQYlFM5RKrkWGSDAyEiUZmYpmLUo2MhklXKWEEq9aUmPDcQX0 1185 | 89T1VZJK+Yxy+cwVsg7LZJ2obotlXW+VdVdGny/bVibbSm2mgUSZngYXGmTI+DRj 1186 | 08CTaljmjzfE4BQt+5pmezUT3CBjopLAvjwaSyL8ySbD5/kzWuJcKXnsCUQB0pOI 1187 | gqcnEgXWnkwUfEooMoJKqlRDJBYZhZKLTEMJRgaiJCMzUaKRsSjZyGSUcEWSYsks 1188 | jRIbsyX2/SW269S9iuQzCuQz8+Xzc2V9cmT9smSd02UbUmWbkmX7lOGp7cr0UbJf 1189 | qI+mGdbof4MROgOo5dA1xtiSIFwi/EEmw/8CAAD//wMAaoKUNkxPr+QAAAAASUVO 1190 | RK5CYII=" 1191 | if ! [[ -f "$cachedir/icon.png" ]] ; then 1192 | echo "$dcpicon" > "$cachedir/icon.base64" 1193 | base64 -D -i "$cachedir/icon.base64" -o "$cachedir/icon.png" && rm -f "$cachedir/icon.base64" 2>/dev/null 1194 | fi 1195 | [[ -f "$cachedir/icon.base64" ]] && rm -f "$cachedir/icon.base64" 2>/dev/null 1196 | icon_loc="$cachedir/icon.png" 1197 | 1198 | if [[ $1 == "dnscopy" ]] ; then 1199 | if [[ $2 == "ip" ]] ; then 1200 | copynote="IP address" 1201 | elif [[ $2 == "hostname" ]] ; then 1202 | copynote="hostname" 1203 | fi 1204 | echo -n "$3" | pbcopy 1205 | _notify "Copied DNS $copynote to clipboard" "$3" 1206 | exit 0 1207 | fi 1208 | 1209 | if [[ $1 == "network" ]] ; then 1210 | if [[ $2 == "flush" ]] ; then 1211 | _flush 1212 | elif [[ $2 == "dhcp" ]] ; then 1213 | rootpw=$(_rootpw dhcp) 1214 | if [[ $rootpw ]] ; then 1215 | echo "$rootpw" | sudo -S 2>/dev/null ipconfig set $interface DHCP || { _beep ; _notify "⚠️ Error!" "Renew DHCP Lease" ; } 1216 | sudo -k && rootpw="" && sleep 1 1217 | fi 1218 | fi 1219 | exit 0 1220 | fi 1221 | 1222 | if [[ $localdns ]] ; then 1223 | fallbacks=$(cat "$fbloc" | grep -v -e "^#" -e "^$" | awk '!seen[$0]++' | grep -v "$localdns") 1224 | else 1225 | fallbacks=$(cat "$fbloc" | grep -v -e "^#" -e "^$" | awk '!seen[$0]++') 1226 | fi 1227 | fbips=$(echo "$fallbacks" | awk '{print $1}') 1228 | fbipss=$(echo "$fbips" | sort) 1229 | ADDITIONAL_IP=$(echo "$fbips" | xargs) 1230 | ADDITIONAL_IPS=$(echo "$fbipss" | xargs) 1231 | 1232 | _service_resolvers () { 1233 | fservice="$1" 1234 | getdnsservers=$(networksetup -getdnsservers "$fservice" | awk '!seen[$0]++') 1235 | if [[ $(echo "$getdnsservers" | grep "^There") != "" ]] ; then 1236 | echo "None" 1237 | else 1238 | ips="" 1239 | while read -r ip 1240 | do 1241 | [[ $ips ]] && ips="$ips " 1242 | ips="$ips$ip" 1243 | done < <(echo "$getdnsservers") 1244 | echo "$ips" | sed 's/^ //' 1245 | fi 1246 | } 1247 | 1248 | baklocname=$(echo "backup-$service" | sed -e 's/:/-/g' -e 's,/,-,g' -e 's/ /_/g') 1249 | bakloc="$cfgdir/$baklocname" 1250 | ibakloc="$bakloc-initial" 1251 | if ! [[ -f "$ibakloc" ]] ; then 1252 | if [[ -f "$bakloc" ]] ; then 1253 | obak=$(cat "$bakloc" | grep -v "^#") 1254 | pdate=$(date +%s) 1255 | echo -e "# $pdate\n$obak" > "$ibakloc" && rm -f "$bakloc" 2>/dev/null 1256 | else 1257 | iresolvers=$(_service_resolvers "$service") 1258 | pdate=$(date +%s) 1259 | echo "# $pdate" > "$ibakloc" 1260 | if [[ $iresolvers != "None" ]] ; then 1261 | echo ${iresolvers} >> "$ibakloc" && _notify "✅ Initial backup successful!" "${iresolvers}" 1262 | fi 1263 | fi 1264 | fi 1265 | 1266 | if [[ $1 == "cbackup" ]] ; then 1267 | bresolvers=$(_service_resolvers "$service") 1268 | if [[ $bresolvers == "None" ]] ; then 1269 | _beep 1270 | _notify "⚠️ Backup error!" "No resolvers detected" 1271 | else 1272 | pdate=$(date +%s) 1273 | echo ${bresolvers} > "$bakloc-d$pdate" && _notify "✅ Backup successful!" "${bresolvers}" 1274 | fi 1275 | exit 0 1276 | fi 1277 | 1278 | if [[ $1 == "rload" ]] ; then 1279 | if [[ $2 == "initial" ]] ; then 1280 | lresolvers=$(cat "$ibakloc" | grep -v "^#") 1281 | else 1282 | lresolvers=$(cat "$bakloc-d$2") 1283 | fi 1284 | if [[ $lresolvers ]] ; then 1285 | networksetup -setdnsservers "$service" ${lresolvers} 2>/dev/null && _flush 2>/dev/null 1286 | else 1287 | _beep 1288 | _notify "⚠️ Error!" "No resolvers detected" 1289 | fi 1290 | exit 0 1291 | fi 1292 | 1293 | if [[ $localdns ]] ; then 1294 | defaultdns=$(cat "$udfloc" | grep -v -e "^#" -e "^$" -e "^empty empty$" | awk '!seen[$0]++' | grep -v "$localdns") 1295 | else 1296 | defaultdns=$(cat "$udfloc" | grep -v -e "^#" -e "^$" -e "^empty empty$" | awk '!seen[$0]++') 1297 | fi 1298 | nodefault=false 1299 | if ! [[ $defaultdns ]] ; then 1300 | if ! [[ $localdns ]] ; then 1301 | UDEFAULT="1.1.1.1 1.0.0.1" 1302 | UDEFAULTS="1.0.0.1 1.1.1.1" 1303 | nodefault=true 1304 | else 1305 | UDEFAULT="empty" 1306 | UDEFAULTS="" 1307 | fi 1308 | else 1309 | udfips=$(echo "$defaultdns" | awk '{print $1}') 1310 | udfipss=$(echo "$udfips" | sort) 1311 | UDEFAULT=$(echo "$udfips" | xargs) 1312 | UDEFAULTS=$(echo "$udfipss" | xargs) 1313 | [[ $localdns ]] && UDEFAULT="${UDEFAULT} $localdns" 1314 | fi 1315 | 1316 | proxystatus=$(pgrep -U 0 "dnscrypt-proxy") 1317 | ! [[ $proxystatus ]] && proxy=false || proxy=true 1318 | 1319 | service_resolvers=$(_service_resolvers "$service") 1320 | 1321 | SCRNAME=$(basename $0) 1322 | 1323 | _setdefault () { 1324 | networksetup -setdnsservers "$service" ${UDEFAULT} 2>/dev/null && _flush 2>/dev/null 1325 | } 1326 | 1327 | nstat=$(echo "$nstat_all" | awk '/^0\/1/ {print $6}') 1328 | if [[ $(echo "$nstat" | grep 'tun\|tap') == "" ]] ; then 1329 | vpn=false 1330 | else 1331 | vpn=true 1332 | fi 1333 | 1334 | if [[ $service_resolvers == "None" ]] && [[ $UDEFAULTS ]] && ! $vpn ; then 1335 | _beep 1336 | _notify "Detected Network DNS Reset!" "Resetting to Default DNS…" 1337 | _setdefault && /usr/bin/open "bitbar://refreshPlugin?name=$SCRNAME" 1338 | exit 0 1339 | fi 1340 | 1341 | dnsip=$(dig whoami.akamai.net +short 2>/dev/null) 1342 | if [[ $(echo "$dnsip" | wc -l | xargs) -gt 1 ]] ; then 1343 | echo "$ERROR_ICON" 1344 | echo "---" 1345 | echo "No Connection Available | color=red" 1346 | echo "---" 1347 | echo "Refresh… | refresh=true" 1348 | exit 0 1349 | fi 1350 | 1351 | if [[ $1 == "default" ]] ; then 1352 | if [[ $2 == "dcp" ]] ; then 1353 | echo "${DNSCRYPT_PROXY_IPS}" > "$dfloc" 1354 | elif [[ $2 == "dcpfb" ]] ; then 1355 | echo "${DNSCRYPT_PROXY_IPS} ${ADDITIONAL_IP}" > "$dfloc" 1356 | fi 1357 | exit 0 1358 | fi 1359 | 1360 | currentdns=$(cat "$currloc") 1361 | currentdnsip=$(echo "$currentdns" | awk '{print $1}') 1362 | currentdnsname=$(echo "$currentdns" | awk '{print substr($0, index($0,$2))}') 1363 | 1364 | DEFAULT=$(cat "$dfloc") 1365 | 1366 | _abspath () { 1367 | python - "$1" << 'EOF' 1368 | import os.path 1369 | import sys 1370 | for arg in sys.argv[1:]: 1371 | print os.path.realpath(os.path.abspath(arg)) 1372 | EOF 1373 | } 1374 | 1375 | if [[ $1 == "proxyservice" ]] ; then 1376 | if [[ $2 == "start" ]] ; then 1377 | mprompt="Start" 1378 | servopt="start" 1379 | elif [[ $2 == "stop" ]] ; then 1380 | mprompt="Stop" 1381 | servopt="stop" 1382 | elif [[ $2 == "force-restart" ]] ; then 1383 | mprompt="Restart" 1384 | servopt="restart" 1385 | fi 1386 | rootpw=$(_rootpw service $2 $mprompt) 1387 | if [[ $rootpw != "" ]] ; then 1388 | dcptloc=$(_abspath "$dcploc") 1389 | brewed=false 1390 | [[ $(echo "$dcptloc" | grep "/Cellar/") != "" ]] && brewed=true 1391 | brewstatus=$(brew help 2>/dev/null) 1392 | if [[ $brewstatus ]] && $brewed ; then 1393 | echo "$rootpw" | sudo -S 2>/dev/null brew services $servopt dnscrypt-proxy > "$cachedir/service" 2>&1 \ 1394 | && sleep 1 1395 | if [[ $2 == "stop" ]] ; then 1396 | sudo -k && rootpw="" 1397 | networksetup -setdnsservers "$service" ${UDEFAULT} 2>/dev/null \ 1398 | && _flush 2>/dev/null \ 1399 | && /usr/bin/open "bitbar://refreshPlugin?name=$SCRNAME" 1400 | else 1401 | proxystatus=$(pgrep -U 0 "dnscrypt-proxy") 1402 | if [[ $proxystatus ]] ; then 1403 | sudo -k && rootpw="" 1404 | networksetup -setdnsservers "$service" ${DEFAULT} 2>/dev/null \ 1405 | && _flush 2>/dev/null \ 1406 | && /usr/bin/open "bitbar://refreshPlugin?name=$SCRNAME" 1407 | else 1408 | if [[ $servopt == "start" ]] ; then 1409 | echo "$rootpw" | sudo -S 2>/dev/null brew services restart dnscrypt-proxy >> "$cachedir/service" 2>&1 \ 1410 | && sudo -k && rootpw="" && sleep 1 1411 | proxystatus=$(pgrep -U 0 "dnscrypt-proxy") 1412 | if [[ $proxystatus ]] ; then 1413 | networksetup -setdnsservers "$service" ${DEFAULT} 2>/dev/null \ 1414 | && _flush 2>/dev/null \ 1415 | && /usr/bin/open "bitbar://refreshPlugin?name=$SCRNAME" 1416 | else 1417 | _beep 1418 | _notify "DNSCrypt Service Error!" "Resetting to Default DNS…" 1419 | _setdefault && /usr/bin/open "bitbar://refreshPlugin?name=$SCRNAME" 1420 | fi 1421 | else 1422 | _beep 1423 | _notify "DNSCrypt Service Error!" "Resetting to Default DNS…" 1424 | _setdefault && /usr/bin/open "bitbar://refreshPlugin?name=$SCRNAME" 1425 | fi 1426 | fi 1427 | fi 1428 | else 1429 | if [[ $dcpver ]] ; then 1430 | echo "$rootpw" | sudo -S 2>/dev/null dnscrypt-proxy -service stop > "$cachedir/service" 2>&1 \ 1431 | && sleep 1 1432 | if [[ $2 == "stop" ]] ; then 1433 | sudo -k && rootpw="" 1434 | networksetup -setdnsservers "$service" ${UDEFAULT} 2>/dev/null \ 1435 | && _flush 2>/dev/null \ 1436 | && /usr/bin/open "bitbar://refreshPlugin?name=$SCRNAME" 1437 | else 1438 | proxystatus=$(pgrep -U 0 "dnscrypt-proxy") 1439 | if [[ $proxystatus ]] ; then 1440 | sudo -k && rootpw="" 1441 | networksetup -setdnsservers "$service" ${DEFAULT} 2>/dev/null \ 1442 | && _flush 2>/dev/null \ 1443 | && /usr/bin/open "bitbar://refreshPlugin?name=$SCRNAME" 1444 | else 1445 | if [[ $servopt == "start" ]] ; then 1446 | echo "$rootpw" | sudo -S 2>/dev/null dnscrypt-proxy -service restart >> "$cachedir/service" 2>&1 \ 1447 | && sudo -k && rootpw="" && sleep 1 1448 | proxystatus=$(pgrep -U 0 "dnscrypt-proxy") 1449 | if [[ $proxystatus ]] ; then 1450 | networksetup -setdnsservers "$service" ${DEFAULT} 2>/dev/null \ 1451 | && _flush 2>/dev/null \ 1452 | && /usr/bin/open "bitbar://refreshPlugin?name=$SCRNAME" 1453 | else 1454 | _beep 1455 | _notify "DNSCrypt Service Error!" "Resetting to Default DNS…" 1456 | _setdefault && /usr/bin/open "bitbar://refreshPlugin?name=$SCRNAME" 1457 | fi 1458 | else 1459 | _beep 1460 | _notify "DNSCrypt Service Error!" "Resetting to Default DNS…" 1461 | _setdefault && /usr/bin/open "bitbar://refreshPlugin?name=$SCRNAME" 1462 | fi 1463 | fi 1464 | fi 1465 | fi 1466 | fi 1467 | fi 1468 | exit 0 1469 | fi 1470 | 1471 | if ! $proxy && [[ $(echo "$service_resolvers" | grep "$DNSCRYPT_PROXY_IPS") != "" ]] ; then 1472 | _beep 1473 | _notify "DNSCrypt Service Error!" "Resetting to Default DNS…" 1474 | _setdefault && /usr/bin/open "bitbar://refreshPlugin?name=$SCRNAME" 1475 | exit 0 1476 | fi 1477 | 1478 | tomldir=$(dirname "$TOML") 1479 | 1480 | if [[ $1 == "opensource" ]] ; then 1481 | shift 1482 | for resolversource in ${@} 1483 | do 1484 | resloc=$(basename "$resolversource") 1485 | open "$tomldir/$resloc" 1486 | done 1487 | exit 0 1488 | fi 1489 | 1490 | if [[ $# -gt 0 ]] ; then 1491 | resopt="$*" 1492 | # shellcheck disable=2086 1493 | networksetup -setdnsservers "$service" $resopt 1494 | _flush 2>/dev/null 1495 | exit 0 1496 | fi 1497 | 1498 | if [[ $theme == "classic" ]] ; then 1499 | CONNECTED_ICON="| dropdown=false templateImage=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agoyNjEyCmVuZG9iago3IDAgb2JqClsgL0lDQ0Jhc2VkIDggMCBSIF0KZW5kb2JqCjMgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9NZWRpYUJveCBbMCAwIDE2IDE2XSAvQ291bnQgMSAvS2lkcyBbIDIgMCBSIF0gPj4KZW5kb2JqCjEwIDAgb2JqCjw8IC9UeXBlIC9DYXRhbG9nIC9QYWdlcyAzIDAgUiA+PgplbmRvYmoKMTEgMCBvYmoKKE1hYyBPUyBYIDEwLjkuNSBRdWFydHogUERGQ29udGV4dCkKZW5kb2JqCjEyIDAgb2JqCihEOjIwMTYwMzA0MjExMjA0WjAwJzAwJykKZW5kb2JqCjEgMCBvYmoKPDwgL1Byb2R1Y2VyIDExIDAgUiAvQ3JlYXRpb25EYXRlIDEyIDAgUiAvTW9kRGF0ZSAxMiAwIFIgPj4KZW5kb2JqCnhyZWYKMCAxMwowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDM4NzQgMDAwMDAgbiAKMDAwMDAwMDcxMSAwMDAwMCBuIAowMDAwMDAzNjQ5IDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAwMDY5MiAwMDAwMCBuIAowMDAwMDAwODEzIDAwMDAwIG4gCjAwMDAwMDM2MTQgMDAwMDAgbiAKMDAwMDAwMDg4MSAwMDAwMCBuIAowMDAwMDAzNTk0IDAwMDAwIG4gCjAwMDAwMDM3MzAgMDAwMDAgbiAKMDAwMDAwMzc4MCAwMDAwMCBuIAowMDAwMDAzODMyIDAwMDAwIG4gCnRyYWlsZXIKPDwgL1NpemUgMTMgL1Jvb3QgMTAgMCBSIC9JbmZvIDEgMCBSIC9JRCBbIDw1NGY5OWIwZmViMWMxNzViOGE0NmQ3NTM2MTdlNmFhMD4KPDU0Zjk5YjBmZWIxYzE3NWI4YTQ2ZDc1MzYxN2U2YWEwPiBdID4+CnN0YXJ0eHJlZgozOTQ5CiUlRU9GCg==" 1500 | DISCONNECTED_ICON="| dropdown=false templateImage=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IC9QYWdlcyAvTWVkaWFCb3ggWzAgMCAxNiAxNl0gL0NvdW50IDEgL0tpZHMgWyAyIDAgUiBdID4+CmVuZG9iagoxNyAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMyAwIFIgL1ZlcnNpb24gLzEuNCA+PgplbmRvYmoKMTggMCBvYmoKKE1hYyBPUyBYIDEwLjkuNSBRdWFydHogUERGQ29udGV4dCkKZW5kb2JqCjE5IDAgb2JqCihEOjIwMTYwMzA0MjA1OTAzWjAwJzAwJykKZW5kb2JqCjEgMCBvYmoKPDwgL1Byb2R1Y2VyIDE4IDAgUiAvQ3JlYXRpb25EYXRlIDE5IDAgUiAvTW9kRGF0ZSAxOSAwIFIgPj4KZW5kb2JqCnhyZWYKMCAyMAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDU2MjMgMDAwMDAgbiAKMDAwMDAwMDU1MyAwMDAwMCBuIAowMDAwMDA1Mzg0IDAwMDAwIG4gCjAwMDAwMDAwMjIgMDAwMDAgbiAKMDAwMDAwMDUzNCAwMDAwMCBuIAowMDAwMDAwNjU1IDAwMDAwIG4gCjAwMDAwMDA3NzkgMDAwMDAgbiAKMDAwMDAwMTI2NyAwMDAwMCBuIAowMDAwMDAxMjg2IDAwMDAwIG4gCjAwMDAwMDUzNDcgMDAwMDAgbiAKMDAwMDAwMTM1NSAwMDAwMCBuIAowMDAwMDAyNTc0IDAwMDAwIG4gCjAwMDAwMDE0MDMgMDAwMDAgbiAKMDAwMDAwMjU1MyAwMDAwMCBuIAowMDAwMDAyNjExIDAwMDAwIG4gCjAwMDAwMDUzMjYgMDAwMDAgbiAKMDAwMDAwNTQ2NSAwMDAwMCBuIAowMDAwMDA1NTI5IDAwMDAwIG4gCjAwMDAwMDU1ODEgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAyMCAvUm9vdCAxNyAwIFIgL0luZm8gMSAwIFIgL0lEIFsgPDZlYTc3ZjkwNzY2OGY2YTkzY2UyNDliYWM1NzMyYWEwPgo8NmVhNzdmOTA3NjY4ZjZhOTNjZTI0OWJhYzU3MzJhYTA+IF0gPj4Kc3RhcnR4cmVmCjU2OTgKJSVFT0YK" 1501 | elif [[ $theme == "emoji" ]] ; then 1502 | CONNECTED_ICON='✔️' 1503 | DISCONNECTED_ICON='❕' 1504 | fi 1505 | 1506 | _current_resolvers () { 1507 | confrs=$(cat /etc/resolv.conf | awk '/^nameserver /{print $2}' | awk '!seen[$0]++' | sort) 1508 | [[ $confrs == "" ]] && exit 0 1509 | [[ $localdns ]] && confrs=$(echo "$confrs" | grep -v "$localdns") 1510 | ips="" 1511 | while read -r confr 1512 | do 1513 | [[ $ips ]] && ips="$ips " 1514 | ips="$ips$confr" 1515 | done < <(echo "$confrs") 1516 | echo "$ips" 1517 | } 1518 | 1519 | _displayname () { 1520 | resolvers="$1" 1521 | if [[ $resolvers == $DNSCRYPT_PROXY_IPS ]] ; then 1522 | echo "DNSCrypt" 1523 | elif [[ $resolvers == "$DNSCRYPT_PROXY_IPS $ADDITIONAL_IPS" ]] ; then 1524 | echo "DNSCrypt + Fallback" 1525 | elif [[ $resolvers == $UDEFAULTS ]] ; then 1526 | if [[ $UDEFAULTS == $DNSCRYPT_PROXY_IPS ]] ; then 1527 | echo "DNSCrypt" 1528 | elif [[ $UDEFAULTS == "$DNSCRYPT_PROXY_IPS $ADDITIONAL_IPS" ]] ; then 1529 | echo "DNSCrypt + Fallback" 1530 | else 1531 | echo "Default DNS" 1532 | fi 1533 | else 1534 | echo "Other DNS" 1535 | fi 1536 | } 1537 | 1538 | current_resolvers=$(_current_resolvers) 1539 | setting=$(_displayname "$current_resolvers") 1540 | 1541 | if $proxy ; then 1542 | if [[ $setting == "DNSCrypt" ]] ; then 1543 | echo "$CONNECTED_ICON" 1544 | dnsc=true 1545 | dnscf=false 1546 | dnsd=false 1547 | dnso=false 1548 | elif [[ $setting == "DNSCrypt + Fallback" ]] ; then 1549 | echo "$CONNECTED_ICON" 1550 | dnsc=false 1551 | dnscf=true 1552 | dnsd=false 1553 | dnso=false 1554 | elif [[ $setting == "Default DNS" ]] ; then 1555 | echo "$DISCONNECTED_ICON" 1556 | dnsc=false 1557 | dnscf=false 1558 | dnsd=true 1559 | dnso=false 1560 | elif [[ $setting == "Other DNS" ]] ; then 1561 | echo "$DISCONNECTED_ICON" 1562 | dnsc=false 1563 | dnscf=false 1564 | dnsd=false 1565 | dnso=true 1566 | fi 1567 | else 1568 | echo "$ERROR_ICON" 1569 | dnsc=false 1570 | dnscf=false 1571 | if [[ $setting == "Default DNS" ]] ; then 1572 | dnsd=true 1573 | dnso=false 1574 | else 1575 | dnsd=false 1576 | dnso=true 1577 | fi 1578 | fi 1579 | 1580 | echo "---" 1581 | 1582 | if ! [[ $localdns ]] ; then 1583 | localdns="None" 1584 | ldnsname="" 1585 | else 1586 | ldnsname=$(ipconfig getpacket $interface 2>/dev/null | awk -F": " '/^domain_name \(string\): /{print $2}') 1587 | [[ "$ldnsname" == "" ]] && ldnsname="Unknown Hostname" 1588 | fi 1589 | 1590 | oneshotline=$(echo "$CONFIG" | grep "^fallback_resolver = ") 1591 | if [[ $oneshotline ]] ; then 1592 | oneshotres=$(echo "$oneshotline" | awk -F\' '{print $2}') 1593 | fi 1594 | 1595 | _dnsinfo () { 1596 | echo "--Service | size=11 color=gray" 1597 | echo "--${service}" 1598 | echo "-----" 1599 | devifcfg=$(ifconfig $interface 2>/dev/null | sed 's/^'"$interface"': //') 1600 | if [[ $nstat ]] ; then 1601 | echo "--Devices | size=11 color=gray" 1602 | echo "--$interface (Default)" 1603 | while read -r devifcfgline 1604 | do 1605 | echo "----$devifcfgline | font=Menlo size=11" 1606 | done < <(echo "$devifcfg") 1607 | nstatifcfg=$(ifconfig $nstat 2>/dev/null | sed 's/^'"$nstat"': //') 1608 | if $vpn ; then 1609 | echo "--$nstat (TUN/TAP)" 1610 | else 1611 | echo "--$nstat (Other)" 1612 | fi 1613 | while read -r nstatifcfgline 1614 | do 1615 | echo "----$nstatifcfgline | font=Menlo size=11" 1616 | done < <(echo "$nstatifcfg") 1617 | else 1618 | echo "--Device | size=11 color=gray" 1619 | echo "--$interface" 1620 | while read -r devifcfgline 1621 | do 1622 | echo "----$devifcfgline | font=Menlo size=11" 1623 | done < <(echo "$devifcfg") 1624 | fi 1625 | echo "-----" 1626 | echo "--Current DNS Resolvers | size=11 color=gray" 1627 | if ! [[ ${current_resolvers} ]] ; then 1628 | echo "--None" 1629 | else 1630 | for cres in ${current_resolvers} 1631 | do 1632 | if $dnso ; then 1633 | echo "--$cres" 1634 | elif $dnsd ; then 1635 | cresname=$(echo "$defaultdns" | grep -F "$cres" | awk '{print substr($0, index($0,$2))}') 1636 | ! [[ $cresname ]] && cresname="n/a" 1637 | echo "--$cres ($cresname)" 1638 | else 1639 | if [[ $cres == $DNSCRYPT_PROXY_IPS ]] ; then 1640 | cresname="DNSCrypt" 1641 | else 1642 | if $dnscf ; then 1643 | cresname=$(echo "$fallbacks" | grep -F "$cres" | awk '{print substr($0, index($0,$2))}') 1644 | ! [[ $cresname ]] && cresname="n/a" 1645 | else 1646 | cresname="n/a" 1647 | fi 1648 | fi 1649 | echo "--$cres ($cresname)" 1650 | fi 1651 | done 1652 | fi 1653 | echo "-----" 1654 | if ! [[ $dnsip ]] ; then 1655 | echo "--Public DNS Information | size=11 color=gray" 1656 | echo "--Unknown IP" 1657 | echo "--Unknown Hostname" 1658 | echo "--No Ping Result" 1659 | else 1660 | if [[ $dnsip != $currentdnsip ]] ; then 1661 | whois $dnsip > "$cachedir/whois.log" 2>/dev/null 1662 | dnsname="" 1663 | method="" 1664 | dnsname=$(nslookup "$dnsip" 2>/dev/null | grep -v "canonical name = " | awk -F" = " '/name = /{print substr($0, index($0,$2))}' | sed 's/\.$//') 1665 | if ! [[ $dnsname ]] ; then 1666 | hostall=$(host "$dnsip" 2>/dev/null) 1667 | if [[ $hostall ]] && ! [[ $(echo "$hostall" | grep "not found") ]] && ! [[ $(echo "$hostall" | grep "timed out") ]] ; then 1668 | dnsname=$(echo "$hostall" | awk -F"domain name pointer " '{print substr($0, index($0,$2))}' | sed 's/\.$//') 1669 | fi 1670 | if ! [[ $dnsname ]] || ! [[ $hostall ]] || [[ $(echo "$hostall" | grep "not found") ]] || [[ $(echo "$hostall" | grep "timed out") ]] ; then 1671 | dnsname=$(dig +short -x "$dnsip" 2>/dev/null | sed 's/\.$//') 1672 | if ! [[ $dnsname ]] ; then 1673 | dnsname=$(curl -sL "https://ipinfo.io/$dnsip/hostname" 2>/dev/null | xargs) 1674 | if ! [[ $dnsname ]] || [[ $(echo "$dnsname" | grep "requests") ]] ; then 1675 | dnsname=$(curl -sL "https://www.robtex.com/ip/$dnsip.html" 2>/dev/null | grep -m1 "The PTR is" | awk -F"The PTR is " '{print $2}' | awk -F". " '{print $1}' | xargs) 1676 | [[ $dnsname ]] && method="robtex" 1677 | else 1678 | method="ipinfo" 1679 | fi 1680 | else 1681 | method="dig" 1682 | fi 1683 | else 1684 | method="host" 1685 | fi 1686 | else 1687 | method="nslookup" 1688 | fi 1689 | ! [[ $dnsname ]] && dnsname="Unknown Hostname" 1690 | echo "$dnsip $dnsname" > "$currloc" 1691 | else 1692 | dnsname="$currentdnsname" 1693 | ! [[ $dnsname ]] && dnsname="Unknown Hostname" 1694 | fi 1695 | ! [[ $method ]] && method="cache" 1696 | echo "--Public DNS Information ($method)| size=11 color=gray" 1697 | echo "--$dnsip | href=\"https://www.robtex.com/ip-lookup/$dnsip\"" 1698 | echo "--Copy Address… | alternate=true terminal=false bash=$0 param1=dnscopy param2=ip param3=\"$dnsip\"" 1699 | if [[ $dnsname != "Unknown Hostname" ]] ; then 1700 | echo "--$dnsname | href=\"https://www.robtex.com/dns-lookup/$dnsname\"" 1701 | echo "--Copy Hostname… | alternate=true terminal=false bash=$0 param1=dnscopy param2=hostname param3=\"$dnsname\"" 1702 | else 1703 | echo "--$dnsname" 1704 | fi 1705 | whoisout=$(cat "$cachedir/whois.log" 2>/dev/null) 1706 | if [[ $whoisout ]] ; then 1707 | echo "--Whois Information" 1708 | echo "----Open Current Whois Log File… | terminal=false bash=/usr/bin/open param1=\"$cachedir/whois.log\"" 1709 | echo "-------" 1710 | while read -r line 1711 | do 1712 | ! [[ $line ]] && { echo "-------" ; continue ; } 1713 | ! [[ $(echo "$line" | grep ":") ]] && continue 1714 | echo -e "----$line | font=Menlo size=11" 1715 | done < <(echo "$whoisout" | grep -v -e "^#" -e "^%" -e "^remarks:" -e "^Comment:" -e ":$") 1716 | else 1717 | echo "--Whois" 1718 | fi 1719 | millisecs=$(ping -c 2 -n -q "$dnsip" 2>/dev/null | tail -n 1 | awk -F/ '{print $5}') 1720 | if [[ $millisecs ]] ; then 1721 | echo "--$millisecs ms" 1722 | else 1723 | echo "--No Ping Result" 1724 | fi 1725 | fi 1726 | if $dnsc || $dnscf ; then 1727 | if [[ $oneshotres ]] ; then 1728 | echo "-----" 1729 | echo "--Internal Fallback Resolver | size=11 color=gray" 1730 | echo "--$oneshotres" 1731 | fi 1732 | fi 1733 | if $dnsd ; then 1734 | echo "-----" 1735 | echo "--Local Area DNS | size=11 color=gray" 1736 | if [[ $ldnsname != "" ]] ; then 1737 | echo "--$localdns ($ldnsname)" 1738 | else 1739 | echo "--$localdns" 1740 | fi 1741 | fi 1742 | echo "-----" 1743 | echo "--Configured $service Resolvers | size=11 color=gray" 1744 | for sresolv in ${service_resolvers} 1745 | do 1746 | echo "--$sresolv" 1747 | done 1748 | if $dnso && ! $vpn ; then 1749 | echo "-----" 1750 | echo "--Backup Current $service Resolvers… | terminal=false refresh=true bash=$0 param1=cbackup" 1751 | echo "-----" 1752 | _omenu 1753 | fi 1754 | } 1755 | 1756 | _dnscmenu () { 1757 | echo "--Configured Resolver | size=11 color=gray" 1758 | for proxyip in ${DNSCRYPT_PROXY_IPS} 1759 | do 1760 | echo "--$proxyip" 1761 | done 1762 | if [[ $oneshotres ]] ; then 1763 | echo "-----" 1764 | echo "--Internal Fallback Resolver | size=11 color=gray" 1765 | echo "--$oneshotres" 1766 | fi 1767 | } 1768 | 1769 | _fbmenu () { 1770 | echo "--Configured DNSCrypt Resolver | size=11 color=gray" 1771 | for proxyip in ${DNSCRYPT_PROXY_IPS} 1772 | do 1773 | echo "--$proxyip" 1774 | done 1775 | if [[ $oneshotres ]] ; then 1776 | echo "-----" 1777 | echo "--Internal Fallback Resolver | size=11 color=gray" 1778 | echo "--$oneshotres" 1779 | fi 1780 | echo "-----" 1781 | echo "--Configured Fallback Resolvers | size=11 color=gray" 1782 | if ! [[ $fbipss ]] ; then 1783 | echo "--None" 1784 | else 1785 | while read -r fbip 1786 | do 1787 | fbname=$(echo "$fallbacks" | grep -F "$fbip" | awk '{print substr($0, index($0,$2))}') 1788 | [[ $fbname == "" ]] && fbname="n/a" 1789 | echo "--$fbip ($fbname)" 1790 | done < <(echo "$fbipss") 1791 | fi 1792 | echo "-----" 1793 | echo "--Edit Fallback Resolvers… | terminal=false bash=/usr/bin/open param1=-a param2=TextEdit param3=$fbloc" 1794 | } 1795 | 1796 | _dfmenu () { 1797 | if $nodefault ; then 1798 | echo "--Preconfigured Resolvers | size=11 color=gray" 1799 | for precfg in ${UDEFAULTS} 1800 | do 1801 | echo "--$precfg" 1802 | done 1803 | else 1804 | echo "--Configured Resolvers | size=11 color=gray" 1805 | if ! [[ $udfipss ]] ; then 1806 | echo "--None" 1807 | else 1808 | while read -r cddnsr 1809 | do 1810 | cddnsrname=$(echo "$defaultdns" | grep -F "$cddnsr" | awk '{print substr($0, index($0,$2))}') 1811 | [[ $cddnsrname == "" ]] && fbname="n/a" 1812 | echo "--$cddnsr ($cddnsrname)" 1813 | done < <(echo "$udfipss") 1814 | fi 1815 | fi 1816 | echo "-----" 1817 | echo "--Available Local Area DNS | size=11 color=gray" 1818 | if [[ $ldnsname != "" ]] ; then 1819 | echo "--$localdns ($ldnsname)" 1820 | else 1821 | echo "--$localdns" 1822 | fi 1823 | echo "-----" 1824 | echo "--Edit Default DNS Resolvers… | terminal=false bash=/usr/bin/open param1=-a param2=TextEdit param3=$udfloc" 1825 | } 1826 | 1827 | _omenu () { 1828 | echo "--$service Resolver Backups | size=11 color=gray" 1829 | rbackuplist=$(find "$cfgdir" -maxdepth 1 -type f -name "$baklocname-d*") 1830 | if [[ $rbackuplist ]] ; then 1831 | while read -r rbackup 1832 | do 1833 | bpdate=$(basename "$rbackup" | awk -F"-d" '{print $2}') 1834 | bdate=$(date -j -f "%s" "$bpdate" "%a %d %b %Y %T %Z" 2>/dev/null) 1835 | ! [[ $bdate ]] && bdate="Undated Backup" 1836 | echo "--$bdate" 1837 | bresolvers=$(cat "$rbackup") 1838 | if [[ $bresolvers ]] ; then 1839 | for bresolver in ${bresolvers} 1840 | do 1841 | echo "----$bresolver" 1842 | done 1843 | echo "-------" 1844 | if [[ ${bresolvers} != ${service_resolvers} ]] ; then 1845 | echo "----Load Resolvers From Backup… | terminal=false refresh=true bash=$0 param1=rload param2=\"$bpdate\"" 1846 | else 1847 | echo "----Currently Loaded" 1848 | fi 1849 | else 1850 | echo "----Empty" 1851 | fi 1852 | done < <(echo "$rbackuplist" | sort -r) 1853 | fi 1854 | iball=$(cat "$ibakloc" 2>/dev/null) 1855 | if [[ $iball ]] ; then 1856 | bpdate=$(echo "$iball" | grep "^#" | awk '{print $2}') 1857 | bdate=$(date -j -f "%s" "$bpdate" "%a %d %b %Y %T %Z" 2>/dev/null) 1858 | ! [[ $bdate ]] && bdate="Undated Backup" 1859 | echo "--$bdate" 1860 | echo "----Initial Resolver Backup | size=11 color=gray" 1861 | ibresolvers=$(echo "$iball" | grep -v "^#") 1862 | if [[ $ibresolvers ]] ; then 1863 | for ibresolver in ${ibresolvers} 1864 | do 1865 | echo "----$ibresolver" 1866 | done 1867 | echo "-------" 1868 | if [[ ${ibresolvers} != ${service_resolvers} ]] ; then 1869 | echo "----Load Resolvers From Backup… | terminal=false refresh=true bash=$0 param1=rload param2=initial" 1870 | else 1871 | echo "----Currently Loaded" 1872 | fi 1873 | echo "-----" 1874 | else 1875 | echo "----Empty" 1876 | fi 1877 | else 1878 | echo "--No Initial Backup Detected" 1879 | fi 1880 | } 1881 | 1882 | echo "---" 1883 | 1884 | if $proxy ; then 1885 | if $dnsc ; then 1886 | echo "DNSCrypt | checked=true" 1887 | _dnsinfo 1888 | echo "Set As Default… | alternate=true refresh=true terminal=false checked=true bash=$0 param1=default param2=dcp" 1889 | _dnsinfo 1890 | else 1891 | if ! $dnso ; then 1892 | echo "DNSCrypt | terminal=false refresh=true bash=$0 param1='${DNSCRYPT_PROXY_IPS}'" 1893 | _dnscmenu 1894 | echo "Set As Default… | alternate=true refresh=true terminal=false bash=$0 param1=default param2=dcp" 1895 | _dnscmenu 1896 | else 1897 | if $vpn ; then 1898 | echo "DNSCrypt | color=gray" 1899 | else 1900 | echo "DNSCrypt | terminal=false refresh=true bash=$0 param1='${DNSCRYPT_PROXY_IPS}'" 1901 | fi 1902 | _dnscmenu 1903 | echo "Set As Default… | alternate=true refresh=true terminal=false bash=$0 param1=default param2=dcp" 1904 | _dnscmenu 1905 | fi 1906 | fi 1907 | if $dnscf ; then 1908 | echo "DNSCrypt + Fallback | checked=true" 1909 | _dnsinfo 1910 | echo "Set As Default… | alternate=true refresh=true terminal=false checked=true bash=$0 param1=default param2=dcpfb" 1911 | _dnsinfo 1912 | else 1913 | if ! $dnso ; then 1914 | echo "DNSCrypt + Fallback | terminal=false refresh=true bash=$0 param1='${DNSCRYPT_PROXY_IPS} ${ADDITIONAL_IP}'" 1915 | _fbmenu 1916 | echo "Set As Default… | alternate=true refresh=true terminal=false bash=$0 param1=default param2=dcpfb" 1917 | _fbmenu 1918 | else 1919 | if $vpn ; then 1920 | echo "DNSCrypt + Fallback | color=gray" 1921 | else 1922 | echo "DNSCrypt + Fallback | terminal=false refresh=true bash=$0 param1='${DNSCRYPT_PROXY_IPS} ${ADDITIONAL_IP}'" 1923 | fi 1924 | _fbmenu 1925 | echo "Set As Default… | alternate=true refresh=true terminal=false bash=$0 param1=default param2=dcpfb" 1926 | _fbmenu 1927 | fi 1928 | fi 1929 | if $dnsd ; then 1930 | echo "Default DNS | checked=true" 1931 | _dnsinfo 1932 | echo "Other DNS" 1933 | _omenu 1934 | else 1935 | if $dnso ; then 1936 | if $vpn ; then 1937 | echo "Default DNS | color=gray" 1938 | else 1939 | echo "Default DNS | terminal=false refresh=true bash=$0 param1='${UDEFAULT}'" 1940 | fi 1941 | _dfmenu 1942 | echo "Other DNS | checked=true" 1943 | _dnsinfo 1944 | else 1945 | echo "Default DNS | terminal=false refresh=true bash=$0 param1='${UDEFAULT}'" 1946 | _dfmenu 1947 | echo "Other DNS" 1948 | _omenu 1949 | fi 1950 | fi 1951 | else 1952 | echo "DNSCrypt" 1953 | echo "Set As Default… | alternate=true refresh=true terminal=false bash=$0 param1=default param2=dcp" 1954 | echo "DNSCrypt + Fallback" 1955 | echo "Set As Default… | alternate=true refresh=true terminal=false bash=$0 param1=default param2=dcpfb" 1956 | if $dnsd ; then 1957 | echo "Default DNS | checked=true" 1958 | _dnsinfo 1959 | echo "Other DNS" 1960 | _omenu 1961 | elif $dnso ; then 1962 | if $vpn ; then 1963 | echo "Default DNS | color=gray" 1964 | else 1965 | echo "Default DNS | terminal=false refresh=true bash=$0 param1='${UDEFAULT}'" 1966 | fi 1967 | _dfmenu 1968 | echo "Other DNS | checked=true" 1969 | _dnsinfo 1970 | fi 1971 | fi 1972 | 1973 | scrparent="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 1974 | scrpath="$scrparent/$SCRNAME" 1975 | scrshort="${scrpath/#$HOME/~}" 1976 | 1977 | _serviceinfo () { 1978 | echo "--Configure… | terminal=false bash=/usr/bin/open param1=\"$TOML\"" 1979 | echo "-----" 1980 | ! [[ $dcpver ]] && dcpverp="n/a" || dcpverp="v$dcpver" 1981 | if $proxy ; then 1982 | echo "--PID $proxystatus ($dcpverp)" 1983 | echo "--$DNSCRYPT_PROXY_IPS:$dnsport" 1984 | else 1985 | echo "--Disabled ($dcpverp)" 1986 | fi 1987 | servout=$(cat "$cachedir/service" 2>/dev/null) 1988 | if [[ $servout ]] ; then 1989 | mdate=$(stat -f "%Sc" "$cachedir/service") 1990 | servout=$(echo "$servout" | sed -e 's/^Password://g' -e 's/^==> //g') 1991 | if $proxy ; then 1992 | servlabel=$(echo "$servout" | grep "label: " | awk -F": " '{print $2}' | sed 's/)$//g' | awk '!seen[$0]++') 1993 | ! [[ $servlabel ]] && servlabel="Unknown Service Name" 1994 | echo "--$servlabel" 1995 | fi 1996 | if [[ $servout ]] ; then 1997 | echo "-----" 1998 | echo "--Latest Output" 1999 | echo "----$mdate | font=Menlo size=11" 2000 | while read -r line 2001 | do 2002 | echo "----$line | font=Menlo size=11" 2003 | done < <(echo -e "$servout" | sed 's/ (label: .*)$//g') 2004 | fi 2005 | fi 2006 | echo "-----" 2007 | echo "--Network Status" 2008 | if [[ $chnstat ]] || [[ $nstat_listen ]] ; then 2009 | if [[ $chnstat ]] ; then 2010 | while read -r nstati 2011 | do 2012 | echo "----$nstati | font=Menlo size=11" 2013 | done < <(echo "$chnstat") 2014 | echo "-------" 2015 | liface=$(echo "$chnstat" | rev | awk '{print $1}' | rev) 2016 | ifcfg=$(ifconfig "$liface" 2>/dev/null | sed 's/^'"$liface"': //') 2017 | fi 2018 | if [[ $nstat_listen ]] ; then 2019 | while read -r nstatl 2020 | do 2021 | echo "----$nstatl | font=Menlo size=11" 2022 | done < <(echo "$nstat_listen") 2023 | else 2024 | echo "----$DNSCRYPT_PROXY_IPS.$dnsport NOT LISTENING | font=Menlo size=11" 2025 | fi 2026 | if [[ $ifcfg ]] ; then 2027 | echo "-------" 2028 | while read -r ifcfgline 2029 | do 2030 | echo "----$ifcfgline | font=Menlo size=11" 2031 | done < <(echo "$ifcfg") 2032 | fi 2033 | else 2034 | echo "----No Information" 2035 | fi 2036 | logline=$(echo "$CONFIG" | grep "log_file = " | head -n 1) 2037 | echo "-----" 2038 | if [[ $logline != "#"* ]] ; then 2039 | logloc=$(echo "$logline" | awk -F\' '{print $2}') 2040 | if [[ $logloc != "/"* ]] ; then 2041 | logloc="$etcdir/$logloc" 2042 | fi 2043 | if [[ -f $logloc ]] ; then 2044 | if $proxy ; then 2045 | logcont=$(tail -r "$logloc" | awk '{print} / Source \[/ {exit}' | tail -r) 2046 | if [[ $logcont ]] ; then 2047 | logcont=$(echo "$logcont" | grep -v "^$") 2048 | echo "--Latest Log Data" 2049 | loglevelline=$(echo "$CONFIG" | grep "log_level = ") 2050 | if [[ $loglevelline == "#"* ]] ; then 2051 | loglevel="2" 2052 | else 2053 | loglevel=$(echo "$loglevelline" | awk -F" = " '{print $2}') 2054 | ! [[ $loglevel ]] && loglevel="2" 2055 | fi 2056 | echo "----Log Level: $loglevel" 2057 | syslogline=$(echo "$CONFIG" | grep "use_syslog = ") 2058 | if [[ $syslogline == "#"* ]] ; then 2059 | syslog="false" 2060 | else 2061 | syslog=$(echo "$syslogline" | awk -F" = " '{print $2}') 2062 | fi 2063 | echo "----System Logging: $syslog" 2064 | echo "-------" 2065 | today=$(date +"%Y-%m-%d") 2066 | logtimeouts=$(echo -e "$logcont" | grep "TIMEOUT$" | sed -e 's/TIMEOUT$//g' -e 's/\[NOTICE\] //g' | grep "^\[$today") 2067 | logerrors=$(echo -e "$logcont" | grep -F "[ERROR]" | sed -e 's/\[ERROR\] //g' | grep "^\[$today") 2068 | logfatal=$(echo -e "$logcont" | grep -F "[FATAL]" | sed -e 's/\[FATAL\] //g' | grep "^\[$today") 2069 | logwarnings=$(echo -e "$logcont" | grep -F "[WARNING]" | sed -e 's/\[WARNING\] //g' | grep "^\[$today" | sed -e "s/ -- if you don't manage this server, tell the server operator about it/ -- notify operator/g") 2070 | lowlat=$(echo -e "$logcont" | grep "\] \[NOTICE\] Server with the lowest initial latency: " | sed -e '$!d' -e 's/\[NOTICE\] //g' -e 's/Server with the lowest/Lowest/') 2071 | logcont=$(echo -e "$logcont" | grep -v -e "\[ERROR\]" -e "\[FATAL\]" -e "\[WARNING\]" -e "TIMEOUT$" -e "\] \[NOTICE\] Server with the lowest initial latency: " | sed 's/\[NOTICE\] //g') 2072 | if [[ $logfatal ]] ; then 2073 | echo "----Fatal Errors" 2074 | while read -r line 2075 | do 2076 | echo "------$line | font=Menlo size=11" 2077 | done < <(echo "$logfatal") 2078 | fi 2079 | if [[ $logerrors ]] ; then 2080 | echo "----Errors" 2081 | while read -r line 2082 | do 2083 | echo "------$line | font=Menlo size=11" 2084 | done < <(echo "$logerrors") 2085 | fi 2086 | if [[ $logwarnings ]] ; then 2087 | echo "----Warnings" 2088 | while read -r line 2089 | do 2090 | echo "------$line | font=Menlo size=11" 2091 | done < <(echo "$logwarnings") 2092 | fi 2093 | if [[ $logtimeouts ]] ; then 2094 | echo "----Timeouts" 2095 | while read -r line 2096 | do 2097 | echo "------$line | font=Menlo size=11" 2098 | done < <(echo "$logtimeouts") 2099 | fi 2100 | if [[ $logcont ]] ; then 2101 | echo "-------" 2102 | while read -r line 2103 | do 2104 | echo "----$line | font=Menlo size=11" 2105 | done < <(echo "$logcont" | sed 's/dnscrypt-proxy is //g') 2106 | fi 2107 | if [[ $lowlat ]] ; then 2108 | echo "-------" 2109 | echo "----$lowlat | font=Menlo size=11" 2110 | fi 2111 | fi 2112 | echo "--View Full Log… | terminal=false bash=/usr/bin/open param1=\"$logloc\"" 2113 | else 2114 | echo "--View Log… | terminal=false bash=/usr/bin/open param1=\"$logloc\"" 2115 | fi 2116 | else 2117 | echo "--Logging Disabled" 2118 | fi 2119 | fi 2120 | echo "-----" 2121 | serverscfg=$(echo "$CONFIG" | grep "^server_names =" | awk -F'[][]' '{print $2}' | sed -e 's/, /\\n/g' -e "s/\\'//g") 2122 | serverscfg=$(echo -e "$serverscfg" | sort) 2123 | cd "$tomldir" 2124 | serversall=$(dnscrypt-proxy -list-all 2>/dev/null) 2125 | resolversources=$(echo "$CONFIG" | grep "url = " | grep -v -e "# url = " -e "# url = " | awk -F\' '{print $2}' | xargs) 2126 | if [[ $serverscfg ]] ; then 2127 | serversreal=$(dnscrypt-proxy -list 2>/dev/null | sort) 2128 | serversrej=$(comm -23 <(echo "$serverscfg") <(echo "$serversreal")) 2129 | echo "--Current DNSCrypt Servers" 2130 | [[ $serversrej ]] && echo "----Configured | color=gray size=11" 2131 | while read -r server 2132 | do 2133 | echo "----$server | font=Menlo size=11" 2134 | done < <(echo "$serverscfg") 2135 | if [[ $serversrej ]] ; then 2136 | echo "-------" 2137 | echo "----Ignored | size=11 color=gray" 2138 | while read -r server 2139 | do 2140 | echo "----$server | font=Menlo size=11" 2141 | done < <(echo "$serversrej") 2142 | fi 2143 | echo "--Available DNSCrypt Servers" 2144 | echo "----Open Resolver Lists… | terminal=false bash=$0 param1=opensource param2=\"${resolversources}\"" 2145 | echo "-------" 2146 | while read -r server 2147 | do 2148 | echo "----$server | font=Menlo size=11" 2149 | done < <(echo "$serversall") 2150 | else 2151 | echo "--Current DNSCrypt Servers" 2152 | while read -r server 2153 | do 2154 | echo "----$server | font=Menlo size=11" 2155 | done < <(echo "$serversall") 2156 | fi 2157 | if [[ $resolversources ]] ; then 2158 | echo "--Configured Resolver Sources" 2159 | for resolversource in ${resolversources} 2160 | do 2161 | echo "----$resolversource | font=Menlo size=11 href=\"$resolversource\"" 2162 | done 2163 | fi 2164 | echo "--DNSCrypt Public Server List | href=https://dnscrypt.info/public-servers" 2165 | echo "-----" 2166 | echo "--Paths" 2167 | echo "----Executable | size=11 color=gray" 2168 | shortpath="${dcploc/#$HOME/~}" 2169 | pathdir=$(dirname "$dcploc") 2170 | echo "----$shortpath | font=Menlo size=11 terminal=false bash=/usr/bin/open param1=\"$pathdir\"" 2171 | if [[ -h $dcploc ]] ; then 2172 | dcpaloc=$(_abspath "$dcploc") 2173 | dcpashort="${dcpaloc/#$HOME/~}" 2174 | dcpaparent=$(dirname "$dcpaloc") 2175 | echo "----→ $dcpashort | font=Menlo size=11 terminal=false bash=/usr/bin/open param1=\"$dcpaparent\"" 2176 | fi 2177 | echo "-------" 2178 | echo "----Configuration File | size=11 color=gray" 2179 | shorttoml="${TOML/#$HOME/~}" 2180 | echo "----$shorttoml | font=Menlo size=11 terminal=false bash=/usr/bin/open param1=\"$tomldir\"" 2181 | if [[ -h $TOML ]] ; then 2182 | tomla=$(_abspath "$TOML") 2183 | tomlashort="${tomla/#$HOME/~}" 2184 | tomlaparent=$(dirname "$tomla") 2185 | echo "----→ $tomlashort | font=Menlo size=11 terminal=false bash=/usr/bin/open param1=\"$tomlaparent\"" 2186 | fi 2187 | echo "-----" 2188 | echo "--Clear DNS Cache… | terminal=false refresh=true bash=$0 param1=network param2=flush" 2189 | echo "--Renew DHCP Lease… | terminal=false refresh=true bash=$0 param1=network param2=dhcp" 2190 | echo "-----" 2191 | echo "--Open Network Preferences… | terminal=false bash=/usr/bin/open param1=\"/System/Library/PreferencePanes/Network.prefPane\"" 2192 | } 2193 | 2194 | echo "---" 2195 | 2196 | if $proxy ; then 2197 | echo "DNSCrypt Service | checked=true terminal=false bash=$0 param1=proxyservice param2=stop" 2198 | _serviceinfo 2199 | echo "Force-Restart… | checked=true alternate=true terminal=false bash=$0 param1=proxyservice param2=force-restart" 2200 | _serviceinfo 2201 | else 2202 | echo "DNSCrypt Service | terminal=false bash=$0 param1=proxyservice param2=start" 2203 | _serviceinfo 2204 | fi 2205 | 2206 | echo "---" 2207 | 2208 | echo "DNSCrypt Menu" 2209 | if ! $stopped ; then 2210 | echo "--Stop Plugin… | terminal=false refresh=true bash=$0 param1=toggle param2=stop" 2211 | echo "-----" 2212 | fi 2213 | echo "--Version $dcmver$dcmvadd" 2214 | echo "-----" 2215 | if [[ -h $scrpath ]] ; then 2216 | echo "--Plugin Script Paths" 2217 | echo "----$scrshort | font=Menlo size=11 terminal=false bash=/usr/bin/open param1=\"$scrparent\"" 2218 | scrapath=$(_abspath "$scrpath") 2219 | scrashort="${scrapath/#$HOME/~}" 2220 | scraparent=$(dirname "$scrapath") 2221 | echo "----→ $scrashort | font=Menlo size=11 terminal=false bash=/usr/bin/open param1=\"$scraparent\"" 2222 | else 2223 | echo "--Plugin Script Path" 2224 | echo "----$scrshort | font=Menlo size=11 terminal=false bash=/usr/bin/open param1=\"$scrparent\"" 2225 | fi 2226 | echo "-----" 2227 | echo "--Edit Plugin… | terminal=false bash=/usr/bin/open param1=\"$scrpath\"" 2228 | echo "--Open Configuration Directory… | terminal=false bash=/usr/bin/open param1=\"$cfgdir\"" 2229 | echo "--Open Cache Directory… | terminal=false bash=/usr/bin/open param1=\"$cachedir\"" 2230 | echo "-----" 2231 | echo "--External Links" 2232 | echo "----DNSCrypt Menu | size=11 color=gray" 2233 | echo "----GitHub Repository | href=https://github.com/JayBrown/DNSCrypt-Menu" 2234 | echo "----Issues | href=https://github.com/JayBrown/DNSCrypt-Menu/issues" 2235 | echo "-------" 2236 | echo "----dnscrypt-proxy | size=11 color=gray" 2237 | echo "----GitHub Repository | href=https://github.com/jedisct1/dnscrypt-proxy" 2238 | echo "----Documentation | href=https://github.com/jedisct1/dnscrypt-proxy/wiki" 2239 | echo "----Issues | href=https://github.com/jedisct1/dnscrypt-proxy/issues" 2240 | echo "-------" 2241 | echo "----DNSCrypt | size=11 color=gray" 2242 | echo "----Homepage | href= https://dnscrypt.info" 2243 | echo "-----" 2244 | echo "Refresh… | refresh=true" 2245 | --------------------------------------------------------------------------------