├── README ├── arcanoid.sh ├── battery.sh ├── bclock.sh ├── bolt.sh ├── bonfile.sh ├── checkflashback.sh ├── chess.sh ├── eye.bash ├── fixzip.sh ├── ftdnato23andme.sed ├── growl.sh ├── happynewyear.bash ├── helloworld.bash ├── helloworld2.bash ├── lebdec.sh ├── mac_ntfs_write_enabler.sh ├── patch-ilya-birman-typography-layout.bash ├── underwater.sh ├── us_layout_remover.sh ├── wherehaveibeen.sh ├── wifi.sh └── wifiautofix.sh /README: -------------------------------------------------------------------------------- 1 | Тут находятся всякие мои заигрывания с Bash и другими shell 2 | 3 | battery.sh - bash analog of batteryCoconut program (Mac only) 4 | block.sh - bash binary clock 5 | bolt.sh — программа, следящая за изменением папки с сайтами на Маке и заводящая сайты в Apache и hosts 6 | bonfile.sh — передача файла между «Маками», используя Бонжур для автообнаружения 7 | checkflashback.sh - check is Mac OS FlashBack virus infected 8 | chess.sh - bash network chess game (controls: ←, →, ↓, ↑ and Space) 9 | eye.bash — глаз следящий за курсором мыши (требует iTerm2 2.9+) 10 | patch-ilya-birman-typography-layout.bash — меняет значки в раскладки Бирмана на флаги стран (только для «Мака») 11 | fixzip.sh — скрипт для восстановления русских букв после раззипования архивов на «Маке» 12 | ftdnato23andme.sed — конвертор FTDNA → 23andme 13 | growl.sh - работаем с Growl на MacOS через протокол GNTP v1 14 | happynewyear.bash — запутанный скрипт на Баше, выводящий «Happy new year» (bash4) 15 | helloworld.bash — запутанный скрипт на Баше, выводящий «Hello world» (bash4) 16 | helloworld2.bash — ещё один запутанный скрипт на Баше, выводящий «Hello world» (bash4) 17 | lebdec.sh — расшифровывает через декодер Студии Лебедева то, что пришло на stdin 18 | mac_ntfs_write_enabler.sh - enable NTFS write (Mac only, very UNSAFE) 19 | underwater.sh — таймер, который я использую для измерения сколько я могу провести под водой без дыхания 20 | us_layout_remover.sh — удаляет из системы раскладку U.S. English 21 | wifi.sh - bash WiFi signal levels (Mac only) 22 | wifiautofix.sh — автоматическое пересоединение при пропадании вайфая -------------------------------------------------------------------------------- /arcanoid.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # «Арканоид» на bash. Евгений Степанищев http://bolknote.ru/ 2011 3 | # Bash Arcanoid. Copyright by Evgeny Stepanischev http://bolknote.ru/ 2011 4 | 5 | PID=$$ 6 | 7 | # Цвета блоков на уровнях 8 | MAPCOLORS=("38;5;"{34,24,204}) 9 | 10 | # Карта уровней 11 | declare -a MAPS 12 | 13 | # X Y Тип (цвет) Количество 14 | MAPS=(\ 15 | "4 4 0 12 4 5 0 12 4 6 1 12 4 7 1 12 4 8 0 12 4 9 2 12 4 10 2 12" 16 | 17 | "13 2 1 2 8 3 1 1 24 3 1 1 5 4 1 1 27 4 1 1 5 5 1 1 27 5 1 1 8 6 1 1 18 | 24 6 1 1 13 7 1 2 13 4 0 2 16 5 2 1 7 1 1 1 25 1 1 1 70 2 1 1 69 3 1 1 19 | 33 5 1 6 35 6 1 1 35 7 1 1 33 8 1 1 44 6 1 1 44 7 1 1 42 8 1 1 68 4 1 1 20 | 55 6 1 1 62 6 1 1 57 7 1 1 64 7 1 1 54 8 1 1 63 8 1 1 33 4 1 6" 21 | 22 | "28 2 1 4 16 3 1 2 52 3 1 2 10 4 0 1 22 4 0 1 34 4 0 2 52 4 0 1 23 | 64 4 0 1 4 5 2 1 16 5 2 3 46 5 2 3 70 5 2 1 4 6 1 1 22 6 1 1 24 | 34 6 0 2 52 6 1 1 70 6 1 1 10 7 0 4 46 7 0 4 22 8 1 6 4 9 2 1 25 | 70 9 2 1 16 10 1 8" 26 | 27 | "2 1 0 1 2 2 0 1 2 3 0 1 2 4 0 1 2 5 0 1 2 6 0 1 2 7 0 1 2 8 0 1 2 9 0 2 28 | 16 1 1 2 16 2 1 1 16 3 1 1 16 4 1 1 16 5 1 2 16 6 1 1 16 7 1 1 16 8 1 1 16 9 1 2 29 | 30 1 2 1 42 1 2 1 30 2 2 1 42 2 2 1 30 3 2 1 42 3 2 1 30 4 2 1 42 4 2 1 30 | 30 5 2 1 42 5 2 1 30 6 2 1 42 6 2 1 32 7 2 1 40 7 2 1 32 8 2 1 40 8 2 1 36 9 2 1 31 | 50 1 1 2 50 2 1 1 50 3 1 1 50 4 1 1 50 5 1 2 50 6 1 1 50 7 1 1 50 8 1 1 50 9 1 2 32 | 64 1 0 1 64 2 0 1 64 3 0 1 64 4 0 1 64 5 0 1 64 6 0 1 64 7 0 1 64 8 0 1 64 9 0 2" 33 | 34 | "10 2 1 10 10 9 1 10 10 3 1 1 64 3 1 1 10 4 1 1 64 4 1 1 10 5 1 1 35 | 64 5 1 1 10 6 1 1 64 6 1 1 10 7 1 1 64 7 1 1 10 8 1 1 64 8 1 1 36 | 16 4 2 8 16 7 2 8 16 5 2 1 16 6 2 1 58 5 2 1 58 6 2 1 34 5 0 2 34 6 0 2" 37 | 38 | "6 2 0 1 6 3 0 1 6 4 0 1 6 5 0 1 6 6 0 1 6 7 0 1 6 8 0 1 6 9 0 1 39 | 24 2 0 1 24 3 0 1 24 4 0 1 24 5 0 1 24 6 0 1 24 7 0 1 24 8 0 1 24 9 0 1 40 | 15 7 0 1 12 8 0 2 34 2 1 2 34 9 1 2 37 3 1 1 37 4 1 1 37 5 1 1 37 6 1 1 41 | 37 7 1 1 37 8 1 1 50 2 2 1 50 3 2 1 50 4 2 1 50 5 2 1 50 6 2 1 50 7 2 1 42 | 50 8 2 1 50 9 2 1 67 2 2 1 67 3 2 1 67 4 2 1 67 5 2 1 67 6 2 1 67 7 2 1 43 | 67 8 2 1 67 9 2 1 56 4 2 1 57 5 2 1 59 6 2 1 61 7 2 1" 44 | ) 45 | 46 | # Счёт 47 | SCORE=0 48 | 49 | # Количество жизней 50 | LIVES=5 51 | 52 | # Количество блоков на уровне 53 | MAPQUANT= 54 | 55 | # Номер уровня 56 | MAPNUMBER=1 57 | 58 | # Прилипает ли мяч к ракетке 59 | STICKY= 60 | 61 | # Создание каретки заданной длины, заполняем глобальные 62 | # переменные 63 | function CreateСarriage { 64 | CW=$1 65 | # Каретка, забитая пробелами и ☰, для ускорения 66 | CSPACES=$(printf "% $(($CW+2))s") 67 | CBLOCKS=$(printf "%0$(($CW-2))s" | sed 's/0/☰/g') 68 | } 69 | 70 | CreateСarriage 5 71 | 72 | # Координаты каретки 73 | CX=2 OCX= 74 | 75 | # Координаты падающего подарка и тип 76 | GX= GY= GT= 77 | 78 | # Координаты мяча 79 | BX=5 BY=2900 80 | 81 | # Угол приращения мяча 82 | BAX=0 BAY=0 83 | 84 | # Версия bash 85 | BASH=(${BASH_VERSION/./ }) 86 | 87 | # Координатная сетка виртуального экрана 88 | declare -a XY 89 | 90 | # Заменяем say, если её нет 91 | which say &>/dev/null || function say { 92 | : 93 | } 94 | 95 | # Отрисовка уровня по номеру 96 | function DrawMap { 97 | local i j x y t q map=(${MAPS[$1]}) c 98 | 99 | MAPQUANT=0 100 | 101 | for ((i=0; i<${#map[@]}; i+=4)); do 102 | x=${map[$i]} y=${map[$i+1]} 103 | t=${map[$i+2]} q=${map[$i+3]} 104 | 105 | let "MAPQUANT+=$q" 106 | 107 | c="\033[${MAPCOLORS[$t]}m☲" 108 | 109 | while [ $q -gt 0 ]; do 110 | for j in {0..3}; do 111 | XY[$x+100*$y+$j]=$c 112 | done 113 | let 'x+=6, q--' 114 | done 115 | done 116 | } 117 | 118 | # Обработка клавиатурных событий 119 | function KeyEvent { 120 | case $1 in 121 | LEFT) 122 | if [ $CX -gt 2 ]; then 123 | [ -z "$OCX" ] && OCX=$CX 124 | 125 | let "CX--" 126 | fi 127 | ;; 128 | RIGHT) 129 | if [ $CX -lt $((75-$CW)) ]; then 130 | [ -z "$OCX" ] && OCX=$CX 131 | 132 | let "CX++" 133 | fi 134 | ;; 135 | SPACE) 136 | SpaceEvent 137 | ;; 138 | esac 139 | } 140 | 141 | # Отрисовываем коробку в виртуальный экран 142 | function DrawBox { 143 | local x y b="\033[38;5;8m♻" 144 | 145 | for (( x=0; x<78; x+=2 )); do 146 | XY[$x]=$b XY[$x+3100]=$b 147 | XY[$x+1]=' ' XY[$x+3101]=' ' 148 | done 149 | 150 | for (( y=100; y<=3000; y+=100)) do 151 | XY[$y]=$b XY[$y+1]=' ' 152 | XY[$y+76]=$b XY[$y+75]=' ' 153 | done 154 | } 155 | 156 | function PrintСarriage { 157 | # Если предыдущая и текущая позиция совпадают, то надо только 158 | # нарисовать каретку 159 | 160 | if [ -z "$OCX" ]; then 161 | echo -ne "\033[$(($CX+1))G" 162 | else 163 | # Стираем каретку с того места, где она была, 164 | # дополнительные пробелы по краям стирают глюки 165 | echo -ne "\033[${OCX}G${CSPACES}" 166 | echo -ne "\033[$(($CX+1))G" 167 | fi 168 | 169 | echo -ne "\033[38;5;160m☗\033[38;5;202m$CBLOCKS\033[38;5;160m☗" 170 | 171 | OCX= 172 | } 173 | 174 | # Нажали на space 175 | function SpaceEvent { 176 | # если мяч прилеплен к каретке, стартуем 177 | if [ $BAX -eq 0 ]; then 178 | BAY=-100 179 | [ $CX -gt 38 ] && BAX=1 || BAX=-1 180 | 181 | SoundSpace 182 | 183 | return 184 | fi 185 | } 186 | 187 | # Мячик ушёл в аут 188 | function MissBall { 189 | SoundOut 190 | BAX=0 BAY=0 191 | let BX="$CX+4" 192 | BY=2900 193 | 194 | # Сбрасываем размер ракетки 195 | CreateСarriage 5 196 | 197 | # Очищаем каретку 198 | echo -ne "\033[2G" 199 | printf "% 75s" 200 | 201 | STICKY= 202 | 203 | let 'LIVES--' 204 | PrintLives 205 | 206 | if [ $LIVES -le 0 ]; then 207 | SoundGameover 208 | 209 | echo -ne "\033[18A\033[29G\033[48;5;15;38;5;16m G A M E O V E R " 210 | echo -ne "\033[20B\033[1G\033[0m" 211 | kill -HUP $PID 212 | while true; do 213 | sleep 0.3 214 | done 215 | fi 216 | } 217 | 218 | # Игрок победил 219 | function YouWin { 220 | SoundWin 221 | DrawBox 222 | DrawMap $(($MAPNUMBER-1)) 223 | PrintScreen WIN 224 | 225 | echo -ne "\033[18A\033[31G\033[48;5;15;38;5;16m Y O U W I N " 226 | echo -ne "\033[20B\033[1G\033[0m" 227 | kill -HUP $PID 228 | while true; do 229 | sleep 0.3 230 | done 231 | } 232 | 233 | # Рисуем виртуальный экран на экран 234 | function PrintScreen { 235 | local x y xy 236 | 237 | [ -z "$1" ] && SoundWelcome 238 | 239 | for y in {0..31}; do 240 | for x in {0..76}; do 241 | xy=$(($x+$y*100)) 242 | echo -ne "${XY[$xy]:- }" 243 | done 244 | echo 245 | done 246 | 247 | if [ -z "$1" ]; then 248 | # Пишем и стираем номер уровня 249 | echo -ne "\033[20A\033[31G\033[48;5;15;38;5;16m L E V E L $MAPNUMBER " 250 | sleep 1.3 251 | echo -ne "\033[31G\033[0m " 252 | fi 253 | 254 | # Курсор в нижний угол (по y=линия каретки) 255 | echo -ne "\033[2A\033[20B" 256 | } 257 | 258 | # Игра окончена 259 | function SoundGameover { 260 | (say -v Zarvox "Loo Loo Loo" &>/dev/null) & 261 | } 262 | 263 | # Нажатие на Space 264 | function SoundSpace { 265 | (say -v Whisper -r 1000 forfor &>/dev/null) & 266 | } 267 | 268 | # Столкновение мяча 269 | function SoundBoom { 270 | (say -v Whisper -r 1000 1 &>/dev/null) & 271 | } 272 | 273 | # Звук прилипания 274 | function SoundStick { 275 | (say -v Junior -r 1200 chpock &>/dev/null) & 276 | } 277 | 278 | # Звук ракетка стала длинее 279 | function SoundWide { 280 | (say -v Whisper -r 400 heh &>/dev/null) & 281 | } 282 | 283 | # Звук шарик в аут 284 | function SoundOut { 285 | (say -v Whisper -r 1000 2 uo &>/dev/null) & 286 | } 287 | 288 | # Звук заставки 289 | function SoundWelcome { 290 | (say -v Zarvox "eueir" &>/dev/null) & 291 | } 292 | 293 | # Звук, когда жизнь увеличивается 294 | function SoundLives { 295 | (say -r 1200 -v Princess yes &>/dev/null ) & 296 | } 297 | 298 | # Победитель 299 | function SoundWin { 300 | (say -v Hysterical 'Das kewl man!' &>/dev/null) & 301 | } 302 | 303 | # Очистка уровня 304 | function ClearLevel { 305 | local i 306 | for i in {1..30}; do 307 | printf "\033[1G% 75s\033[1A" 308 | done 309 | 310 | echo -ne "\033[1G" 311 | } 312 | 313 | # Убрать блок 314 | function RemoveBlock { 315 | local y 316 | 317 | for y in {0..3}; do 318 | unset XY[$1+$2+$y] 319 | done 320 | 321 | y=$((30-$2/100)) 322 | 323 | echo -ne "\033[$(($1+1))G\033[${y}A \033[${y}B" 324 | 325 | let 'MAPQUANT--' 326 | 327 | # Разбили все блоки, следующий уровень 328 | if [ $MAPQUANT -le 0 ]; then 329 | let 'MAPNUMBER++' 330 | ClearLevel 331 | 332 | if [ $MAPNUMBER -ge ${#MAPS[@]} ]; then 333 | # Игра окончена, игрок выиграл 334 | YouWin ! 335 | else 336 | NextLevel 337 | fi 338 | fi 339 | } 340 | 341 | # Роняем подарок 342 | function StartGift { 343 | local r=$(( $RANDOM % 20 )) 344 | 345 | if [ $r -ge 17 ]; then 346 | GX=$1 347 | GY=$((30-$2/100+1)) 348 | 349 | local gifts=(S W L) 350 | GT=${gifts[$r-17]} 351 | fi 352 | } 353 | 354 | # Рисуем мяч, должен рисоваться после всех объектов 355 | function PrintBall { 356 | # Чистим предыдущую позицию 357 | local y=$((30-$BY/100)) 358 | echo -ne "\033[$(($BX+1))G\033[${y}A${XY[$BX+$BY]:- }\033[${y}B" 359 | 360 | # Если мяч не двигается, следуем за кареткой 361 | if [ $BAX -eq 0 ]; then 362 | let BX="$CX+$CW/2" 363 | else 364 | local bx=$(($BX+$BAX)) 365 | local by=$(($BY+$BAY)) 366 | 367 | # Мяч коснулся каретки или дна 368 | if [[ $by -eq 3000 ]]; then 369 | # Каретки 370 | if [[ $bx -ge $CX && $bx -le $(($CX+$CW)) ]]; then 371 | if [ -z "$STICKY" ]; then 372 | SoundBoom 373 | let BAY="-$BAY" 374 | let "BX+=$BAX" 375 | let "BY+=$BAY" 376 | # Ракетка «липкая» 377 | else 378 | SoundStick 379 | 380 | BAX=0 BAY=0 381 | let BX="$CX+4" 382 | BY=2900 383 | fi 384 | # Дна 385 | else 386 | MissBall 387 | return 388 | fi 389 | else 390 | # Проверяем, не наткнулись ли мы на какое-то препятствие 391 | local c=${XY[$bx+$by]:-0} 392 | 393 | if [[ "$c" == "0" ]]; then 394 | # Нет 395 | BX=$bx BY=$by 396 | else 397 | SoundBoom 398 | local h=0 v=0 399 | declare -i h v 400 | 401 | [[ "${XY[$bx+$by+100]:-0}" != "0" ]] && v=1 402 | [[ $by > 100 && "${XY[$bx+$by-100]:-0}" != "0" ]] && v="1$v" 403 | [[ "${XY[$bx+$by+1]:-0}" != "0" ]] && h=1 404 | [[ $bx > 1 && "${XY[$bx+$by-1]:-0}" != "0" ]] && h="1$h" 405 | 406 | if [ $h -ge $v ]; then 407 | let BAY="-$BAY" 408 | fi 409 | 410 | if [ $h -le $v ]; then 411 | let BAX="-$BAX" 412 | fi 413 | 414 | let "BX+=$BAX" 415 | let "BY+=$BAY" 416 | 417 | # Проверка на столкновение с блоком 418 | if [[ $c =~ ☲ ]]; then 419 | # Ищем начало блока 420 | while [[ ${XY[$bx+$by-1]} =~ ☲ ]]; do 421 | let 'bx--' 422 | done 423 | 424 | # Выясняем цвет блока 425 | case ${XY[$bx+$by]} in 426 | 427 | # Этот блок будет преобразован в другой цвет 428 | *${MAPCOLORS[1]}* ) 429 | for y in {0..3}; do 430 | XY[$bx+$by+$y]="\033[${MAPCOLORS[2]}m☲" 431 | done 432 | 433 | y=$((30-$by/100)) 434 | 435 | echo -ne "\033[$(($bx+1))G\033[${y}A\033[${MAPCOLORS[2]}m☲☲☲☲\033[${y}B" 436 | 437 | PrintScores 2 438 | ;; 439 | 440 | # Этот блок исчезает 441 | *${MAPCOLORS[2]}* ) 442 | RemoveBlock $bx $by 443 | PrintScores 444 | ;; 445 | 446 | # Этот блок исчезает, но даёт подарки 447 | *${MAPCOLORS[0]}* ) 448 | RemoveBlock $bx $by 449 | 450 | [ -z "$GT" ] && StartGift $BX $by 451 | PrintScores 452 | ;; 453 | esac 454 | fi 455 | fi 456 | fi 457 | fi 458 | 459 | local y=$((30-$BY/100)) 460 | echo -ne "\033[$(($BX+1))G\033[${y}A\033[38;5;15m◯\033[${y}B" 461 | } 462 | 463 | # Рисуем падающий подарок 464 | function PrintGift { 465 | echo -en "\033[$(($GX+1))G\033[${GY}A${XY[$GX+(30-$GY)*100]:- }" 466 | 467 | if [ $GY -le 1 ]; then 468 | echo -ne "\033[${GY}B" 469 | 470 | # Поймали подарок 471 | if [[ $GX -ge $CX && $GX -le $(($CX+$CW)) ]]; then 472 | PrintScores 5 473 | 474 | case $GT in 475 | W) 476 | CreateСarriage 7 477 | if [ $CX -gt $((75-$CW)) ]; then 478 | CX=$((75-$CW)) 479 | fi 480 | 481 | PrintLives 482 | 483 | SoundWide 484 | 485 | ;; 486 | 487 | S) 488 | STICKY=1 489 | SoundStick 490 | ;; 491 | 492 | L) 493 | SoundLives 494 | let 'LIVES++' 495 | PrintLives 496 | esac 497 | fi 498 | GT= 499 | else 500 | let 'GY--' 501 | echo -ne "\n\033[38;5;34m\033[$(($GX+1))G☲\033[${GY}B" 502 | fi 503 | } 504 | 505 | # Печать жизней 506 | function PrintLives { 507 | echo -ne "\033[31A\033[3G\033[0;1m${LIVES} " 508 | echo -ne "\033[38;5;160m☗\033[38;5;202m$CBLOCKS\033[38;5;160m☗ \033[31B" 509 | } 510 | 511 | # Copyright 512 | function PrintCopy { 513 | echo -ne "\033[2B\033[52G\033[0;1mhttp://bolknote.ru © 2011\033[2A" 514 | } 515 | 516 | # Печать счёта 517 | function PrintScores { 518 | let "SCORE+=${1:-1}" 519 | 520 | PrintCopy 521 | 522 | echo -ne "\033[31A\033[$((69-${#SCORE}))G\033[0mScore: \033[1m$SCORE\033[31B" 523 | } 524 | 525 | # Переход на следующий уровень 526 | function NextLevel { 527 | XY=() 528 | CreateСarriage 5 529 | CX=2 OCX= 530 | GX= GY= GT= 531 | BX=5 BY=2900 532 | BAX=0 BAY=0 533 | STICKY= 534 | 535 | DrawBox 536 | DrawMap $(($MAPNUMBER-1)) 537 | PrintScreen 538 | PrintLives 539 | PrintScores 0 540 | } 541 | 542 | # Очистка клавиатурного буфера 543 | function ClearKeyboardBuffer { 544 | # Быстро — через bash 4+ 545 | [ ${BASH_VERSINFO:-0} -ge 4 ] && while read -t0.1 -n1 -rs; do :; done && return 546 | 547 | # Быстро — через zsh 548 | which zsh &>/dev/null && zsh -c 'while {} {read -rstk1 || break}' && return 549 | 550 | # Медленно — через bash 3- 551 | local delta 552 | while true; do 553 | delta=`(time -p read -rs -n1 -t1) 2>&1 | awk 'NR==1{print $2}'` 554 | [[ "$delta" == "0.00" ]] || break 555 | done 556 | } 557 | 558 | function Arcanoid { 559 | exec 2>&- 560 | CHLD= 561 | 562 | trap 'KeyEvent LEFT' USR1 563 | trap 'KeyEvent RIGHT' USR2 564 | trap 'KeyEvent SPACE' HUP 565 | trap "kill $PID" EXIT 566 | trap exit TERM 567 | 568 | echo -e "\033[J\n\n" 569 | 570 | NextLevel 571 | 572 | local i j 573 | 574 | while true; do 575 | [ -n "$GT" ] && PrintGift 576 | 577 | for i in {1..2}; do 578 | PrintСarriage 579 | PrintBall 580 | for j in {1..5}; do 581 | sleep 0.02; PrintСarriage 582 | done 583 | sleep 0.02 584 | done 585 | done 586 | } 587 | 588 | function Restore { 589 | [ -n "$CHILD" ] && pkill -F <(printf "%d" $CHILD) bash 590 | wait 591 | 592 | stty "$ORIG" 593 | echo -e "\033[?25h\033[0m" 594 | 595 | (bind '"\r":accept-line') &>/dev/null 596 | CHILD= 597 | 598 | trap '' EXIT HUP 599 | 600 | ClearKeyboardBuffer 601 | 602 | exit 603 | } 604 | 605 | 606 | # Запрещаем печатать вводимое на экран 607 | ORIG=`stty -g` 608 | stty -echo 609 | (bind -r '\r') &>/dev/null 610 | 611 | trap 'Restore' EXIT HUP 612 | trap '' TERM 613 | 614 | # Убирам курсор 615 | echo -en "\033[?25l\033[0m" 616 | 617 | Arcanoid & 618 | CHILD=$! 619 | 620 | # Клавиатурные комбинации извстной длины 621 | SEQLEN=(1b5b4. [2-7]. [cd]... [89ab].{5} f.{7}) 622 | 623 | # Проверка совпадения с известной клавиатурной комбинацией 624 | function CheckCons { 625 | local i 626 | 627 | for i in ${SEQLEN[@]}; do 628 | if [[ $1 =~ ^$i ]]; then 629 | return 0 630 | fi 631 | done 632 | 633 | return 1 634 | } 635 | 636 | # Функция реакции на клавиатуру, вызывает React на каждую нажатую клавишу 637 | function PressEvents { 638 | local real code action ch 639 | 640 | # Цикл обработки клавиш, здесь считываются коды клавиш, 641 | # по паузам между нажатиями собираются комбинации и известные 642 | # обрабатываются сразу 643 | while true; do 644 | # измеряем время выполнения команды read и смотрим код нажатой клавиши 645 | # akw NR==1||NR==4 забирает только строку №1 (там время real) и №4 (код клавиши) 646 | eval $( (time -p read -r -s -n1 ch; printf 'code %d\n' "'$ch") 2>&1 | 647 | awk 'NR==1||NR==4 {print $1 "=" $2}' | tr '\r\n' ' ') 648 | 649 | # read возвращает пусто для Enter и пробела, присваиваем им код 20, 650 | # а так же возвращаются отрицательные коды для UTF8 651 | if [ "$code" = 0 ]; then 652 | React 20 653 | else 654 | [ $code -lt 0 ] && code=$((256+$code)) 655 | 656 | code=$(printf '%02x' $code) 657 | fi 658 | 659 | # Если клавиши идут подряд (задержки по времени нет) 660 | if [[ $real =~ ^0[.,]00$ ]]; then 661 | seq="$seq$code" 662 | 663 | if CheckCons $seq; then 664 | React $seq 665 | seq= 666 | fi 667 | 668 | # Клавиши идут с задержкой (пользователь не может печатать с нулевой задержкой), 669 | # значит последовательность собрана, надо начинать новую 670 | else 671 | [ "$seq" ] && React $seq 672 | seq=$code 673 | 674 | # возможно последовательность состоит из одного символа 675 | if CheckCons $seq; then 676 | React $seq 677 | seq= 678 | fi 679 | fi 680 | done 681 | } 682 | 683 | function React { 684 | case $1 in 685 | 1b5b44) 686 | kill -USR1 $CHILD 687 | ;; 688 | 1b5b43) 689 | kill -USR2 $CHILD 690 | ;; 691 | *) 692 | kill -HUP $CHILD 693 | ;; 694 | esac &>/dev/null 695 | } 696 | 697 | PressEvents 698 | -------------------------------------------------------------------------------- /battery.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Информация о батарейке на bash. Евгений Степанищев http://bolknote.ru/ 2011 3 | # Bash Battery Info. Copyright by Evgeny Stepanischev http://bolknote.ru/ 2011 4 | 5 | 6 | # Хост для информации о серийнике 7 | HOST='www.chipmunk.nl' 8 | 9 | # Выбираем информацию о батарее, получится что-то вроде 10 | # Amperage 18446744073709550574 Flags 4 Capacity 6632 Current 6338 Voltage 8192 CycleCount 14 и тд 11 | 12 | BATTERY=( $(\ 13 | ioreg -w0 -l | 14 | egrep '(Max|Design)Capacity|(Legacy|IO)BatteryInfo|product-name|Temperature|PlatformSerialNumber' | 15 | tee >(awk -F{ '/(Legacy|IO)BatteryInfo/ { gsub(/ |\}|"/, ""); gsub(/,|=/, " "); print $2 }') | 16 | tee >(awk -F'"' '/(Max|Design)Capacity|product-name|Temperature|PlatformSerialNumber/ { gsub(/[=<>-]/, ""); print $2 $3 $4}') | 17 | grep -vF '"' | 18 | tr '\n' ' ' 19 | )) 20 | 21 | # Достаём значение по ключу из BATTERY 22 | function GetBatVal { 23 | local i 24 | 25 | for ((i=0; i<${#BATTERY[@]}; i+=2)); do 26 | if [ $1 = ${BATTERY[$i]} ]; then 27 | echo ${BATTERY[$i+1]} 28 | break 29 | fi 30 | done 31 | } 32 | 33 | # Получаем информацию о неделе выпуска 34 | function GetPlatform { 35 | local tmpfile="$TMPDIR/battery-age-mac" 36 | 37 | # Файл с кешем, чтобы не дёргать сервис каждый раз 38 | if [ -e $tmpfile ]; then 39 | # проверим время создания файла 40 | eval $(stat -s $tmpfile) 41 | 42 | # Если кеш устарел, то удаляем его 43 | if [ $((`date +%s` - $st_mtime)) -gt 86400 ]; then 44 | rm -f $tmpfile 45 | else 46 | cat $tmpfile 47 | return 48 | fi 49 | fi 50 | 51 | local date=($(\ 52 | curl --connect-timeout 3 -H 'User-Agent: M' -XPOST -s \ 53 | -d "serienummer2=$1&submit=Submit" "http://$HOST/cgi-fast/applemodel.cgi" | 54 | sed 's/
/`/g' | awk 'BEGIN {RS="`"} /Production (year|week)/{gsub("<[^>]+>", ""); print}' | 55 | sort | sed 's/^[^:]*: *//;s/[^0-9 ]//g' | tr "\r\n" ' ' 56 | )) 57 | 58 | if [ ${#date[@]} -le 1 ]; then 59 | echo NA 60 | return 61 | fi 62 | 63 | local scale 64 | local diff 65 | 66 | # Считаем количество недель 67 | let diff="($(date +%Y)-${date[1]})*52177 + ( $(date +%V) - ${date[0]}) * 1000" 68 | 69 | # Выбираем что будем отображать — недели, месяцы, годы 70 | if [ $diff -gt 5 ]; then 71 | diff=$(( $diff / 4340 )) 72 | scale=Month 73 | 74 | if [ $diff -gt 12 ]; then 75 | diff=$(( $diff / 12 )) 76 | scale=Year 77 | fi 78 | else 79 | diff=$(( $diff / 1000 )) 80 | scale=Week 81 | fi 82 | 83 | [ $diff -gt 1 ] && scale=${scale}s 84 | 85 | echo $diff $scale | tee $tmpfile 86 | } 87 | 88 | # Фоновый процесс — выводим возраст модели в определённые координаты 89 | function PrintAgeAt { 90 | echo -en '\033[5A\033[26G\033[K' 91 | 92 | printf "% 17s |" "$1" 93 | 94 | echo -en '\033[5B\033[0G' 95 | } 96 | 97 | # Рисуем прогрессбар 98 | function PrintBat { 99 | # Если терминал поддерживает 256 цветов, покажем красиво 100 | if [[ $TERM =~ 256 ]]; then 101 | local colors=("38;5;160" "38;5;220" "38;5;34") 102 | else 103 | # Иначе, увы, цвета попроще 104 | local colors=(31 33 32) 105 | fi 106 | 107 | local c=${colors[0]} 108 | 109 | [ $1 -ge 13 ] && c=${colors[1]} 110 | [ $1 -ge 20 ] && c=${colors[2]} 111 | 112 | local bar=$(cat) 113 | local prg=$(printf "%0$1s" | tr 0 ${bar:2:1}) 114 | local rep="\033[${c}m$prg\033[30m" 115 | 116 | echo -e ${bar/$prg/$rep} 117 | } 118 | 119 | # Всё достаточно очевидно: боксы с информацией 120 | cur=$(GetBatVal Current) 121 | max=$(GetBatVal Capacity) 122 | let percent="($cur*40/$max)" 123 | 124 | echo -e '\033[1m\n Bashnut Battery by Evgeny Stepanischev\033[0m' 125 | 126 | echo 127 | echo ' Battery charge' 128 | echo ┌──────────────────────────────────────────┐ 129 | printf '│ Current charge: % 5d mAh │\n' $cur 130 | printf '│ Maximum charge: % 5d mAh │\n' $max 131 | echo '│ │' 132 | echo -e '│ ████████████████████████████████████████ \033[0m│' | PrintBat $percent 133 | echo └──────────────────────────────────────────┘ 134 | 135 | des=$(GetBatVal DesignCapacity) 136 | max=$(GetBatVal MaxCapacity) 137 | let percent="($max*40/$des)" 138 | 139 | echo ' Battery capacity' 140 | echo ┌──────────────────────────────────────────┐ 141 | printf '│ Current capacity: % 5d mAh │\n' $max 142 | printf '│ Design capacity: % 5d mAh │\n' $des 143 | echo '│ │' 144 | echo -e '│ ████████████████████████████████████████ \033[0m│' | PrintBat $percent 145 | echo └──────────────────────────────────────────┘ 146 | 147 | echo ' Details' 148 | echo ┌──────────────────────────────────────────┐ 149 | printf '│ Mac model: % 17s │\n' $(GetBatVal productname) 150 | echo -e '│ Age of your Mac: \033[1m…loading…\033[0m │' 151 | printf '│ Battery loadcycles: % 5d │\n' $(GetBatVal CycleCount) 152 | printf '│ Battery temperature: % 5s˚С │\n' `echo "scale=1;($(GetBatVal Temperature)+5)/100" | bc` 153 | echo └──────────────────────────────────────────┘ 154 | 155 | echo -e "\033[0m" 156 | 157 | # Возраст Мака 158 | PrintAgeAt "$(GetPlatform `GetBatVal IOPlatformSerialNumber`)" & 159 | 160 | wait 161 | -------------------------------------------------------------------------------- /bclock.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Бинарные часы на bash. Евгений Степанищев http://bolknote.ru/ 2011 3 | # Bash Binary clock. Copyright by Evgeny Stepanischev http://bolknote.ru/ 2011 4 | 5 | declare -a xy 6 | 7 | # Выключаем Enter 8 | bind -r '\r' 9 | # Выключаем остальную клавиатуру 10 | ORIG=`stty -g` 11 | stty -echo 12 | 13 | function Restore { 14 | stty "$ORIG" 15 | bind '"\r":accept-line' 16 | echo -ne "\033[5B\033[?25h\033[m" 17 | } 18 | 19 | trap 'Restore' EXIT 20 | 21 | # Цвета наших «стрелок» 22 | colors=(30 34) 23 | 24 | # Очистка графического массива 25 | function Clear { 26 | xy= 27 | } 28 | 29 | # Подготовка маски одного разряда 30 | function Print { 31 | mask=$(printf '%08d' `echo "obase=2; $1" | bc`) 32 | let pos="$2*4" 33 | 34 | for x in {0..1}; do 35 | for y in {0..3}; do 36 | xy[$pos+$x+$y*100]=${mask:$x*4+$y:1} 37 | done 38 | done 39 | } 40 | 41 | # Печать часов на экран 42 | function PrintClock { 43 | echo -e "\033[?25l\033[1mBash Binary Clock by Evgeny Stepanischev\033[0m\n" 44 | 45 | for y in {0..3}; do 46 | for x in {0..9}; do 47 | c=${colors[${xy[$x+$y*100]:-0}]} 48 | echo -ne "\033[${c}m▣" 49 | done 50 | echo -e "\033[0m" 51 | done 52 | 53 | # после печати часов передвигаем курсов так, 54 | # чтобы следующий кадр выводился поверх предыдущего 55 | echo -en "\033[8A" 56 | } 57 | 58 | # Вывод часов 59 | function Clock { 60 | Clear 61 | for i in {0..2}; do 62 | Print $1 $i 63 | shift 64 | done 65 | 66 | PrintClock 67 | 68 | echo -e "\n" 69 | } 70 | 71 | while true; do 72 | Clock `date "+%H %M %S"` 73 | sleep 1 74 | done 75 | -------------------------------------------------------------------------------- /bolt.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # bolt — программа, которая следит за изменением папки с сайтами 3 | # на Маке и добавляет сайты в конфиг Апача и в hosts 4 | # Evgeny Stepanischev http://bolknote.ru Feb 2012 5 | 6 | # Запуск: ./bolt.sh & 7 | 8 | MYSITES=~/Sites/ 9 | HOSTS=/etc/hosts 10 | HTTPDCONF=/etc/apache2/other/bolt-httpd.conf 11 | 12 | MD5CURRENT= 13 | MAGIC='# bolt' # mark regexp 14 | MYIP='127.0.0.1' 15 | 16 | HOSTPATT=$(/bin/cat <\n 19 | \tServerAdmin $(/usr/bin/whoami)@%host%\n 20 | \tDocumentRoot "$MYSITES%host%"\n 21 | \tServerName %host%\n 22 | \tServerAlias www.%host%\n 23 | \n 24 | PATTERN 25 | ) 26 | 27 | # вызывается, чтобы убрать из /etc/hosts старые хосты 28 | function ClearHosts { 29 | /usr/bin/sed -iE "/${MAGIC}$/d" "$HOSTS" 30 | /usr/bin/sed -iE "/${MAGIC}-www$/d" "$HOSTS" 31 | } 32 | 33 | # скан папки Apache и высеивание того, что на имена доменов не тянет 34 | function NewSites { 35 | local host 36 | 37 | for host in `/bin/ls -1d "$MYSITES"*/ 2>&- | /usr/bin/egrep -o '/([a-z0-9]+\.)*[a-z0-9]+/$'`; do 38 | host="${host//\//}" 39 | 40 | echo "$MYIP $host $MAGIC" 41 | echo "$MYIP www.$host ${MAGIC}-www" 42 | done 43 | } 44 | 45 | # Обновление файла hosts из папки Apache 46 | function RenewHosts { 47 | ClearHosts 48 | NewSites >> "$HOSTS" 49 | } 50 | 51 | # Убиваем старую конфигурацию 52 | function ClearConfig { 53 | /bin/rm -f "$HTTPDCONF" 54 | } 55 | 56 | # Обновление конфигурации 57 | function RenewConfigFromHosts { 58 | local host 59 | 60 | ClearConfig 61 | 62 | echo 'NameVirtualHost *:80' > "$HTTPDCONF" 63 | 64 | for host in `/usr/bin/awk "/$MAGIC$/ {print \\$2}" "$HOSTS"`; do 65 | echo -e ${HOSTPATT//%host%/$host} >> "$HTTPDCONF" 66 | done 67 | } 68 | 69 | # говорим Apache, что конфигурация изменилась 70 | function TouchApache { 71 | /usr/bin/killall -HUP httpd 2>&- 72 | } 73 | 74 | # Обновление всего 75 | # вызывается, если в папке Apache изменились папки 76 | function SmthChanged { 77 | RenewHosts 78 | RenewConfigFromHosts 79 | TouchApache 80 | } 81 | 82 | # Подсчёт контрольной суммы папок в домашней папке Apache 83 | function CheckNew { 84 | /bin/ls -1d "$MYSITES"*/ 2>&- | /sbin/md5 85 | } 86 | 87 | # Убираем всё, что записали на выходе 88 | function Restore { 89 | ClearHosts 90 | ClearConfig 91 | TouchApache 92 | } 93 | 94 | # Подсчёт суммы в цикле и инициация события, если что-то сменилось 95 | function CheckLoop { 96 | local md5 97 | 98 | while :; do 99 | md5=$(CheckNew) 100 | 101 | if [[ $md5 != "$MD5CURRENT" ]]; then 102 | SmthChanged 103 | 104 | MD5CURRENT=$md5 105 | fi 106 | 107 | /bin/sleep 1 108 | done 109 | } 110 | 111 | if [[ `/usr/bin/whoami` == root ]]; then 112 | trap Restore EXIT 113 | CheckLoop 114 | else 115 | /usr/bin/sudo -b bash "$0" 116 | fi 117 | 118 | -------------------------------------------------------------------------------- /bonfile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Передача файлов на Баше с использованием Бонжура. Евгений Степанищев http://bolknote.ru/ 2012 4 | # Bash file transfer using Bonjour. Copyright by Evgeny Stepanischev http://bolknote.ru/ 2012 5 | 6 | # пути до утилит 7 | DNSSD=/usr/bin/dns-sd 8 | EXPECT=/usr/bin/expect 9 | PS=/bin/ps 10 | SORT=/usr/bin/sort 11 | NC=/usr/bin/nc 12 | AWK=/usr/bin/awk 13 | KILL=/bin/kill 14 | XARGS=/usr/bin/xargs 15 | GZIP=/usr/bin/gzip 16 | MD5=/sbin/md5 17 | TEE=/usr/bin/tee 18 | IPCONFIG=/usr/sbin/ipconfig 19 | EGREP=/usr/bin/egrep 20 | CUT=/usr/bin/cut 21 | HEAD=/usr/bin/head 22 | IFCONFIG=/sbin/ifconfig 23 | ROUTE=/sbin/route 24 | TR=/usr/bin/tr 25 | 26 | # конфигурация 27 | GZIPLEVEL=3 # уровень сжатия gzip 28 | PORT=1111 # порт, на котором будет передаваться файл 29 | SNAME=_bolk-fileshare._tcp # имя сервиса 30 | 31 | # Получаем наш IP 32 | function _GetMyIP { 33 | local route=`$ROUTE -n get default 2>&-` 34 | 35 | if [ -z "$route" ]; then 36 | # Либо, первый попавшийся, если нет IP по-умолчанию 37 | $IFCONFIG | 38 | $AWK '/^[\t ]*inet/ {print $2}' | 39 | ($EGREP -v '^(127\.|::1)' || echo 127.0.0.1) | 40 | $HEAD -n1 41 | 42 | else 43 | # Либо IP по-умолчанию в системе, если он назначен 44 | echo "$route" | 45 | $EGREP -oi 'interface: [^ ]+' | 46 | $CUT -c12- | 47 | $XARGS $IPCONFIG getifaddr 48 | fi 49 | } 50 | 51 | # клиентская часть 52 | function Client { 53 | # ждём когда в сети появится сервис с нужным нам именем 54 | local info=($($EXPECT <2 {print $7 " " $8}' | $SORT -u | $TR -d '\r' | $HEAD -n1 55 | spawn -noecho $DNSSD -B $SNAME 56 | expect Timestamp 57 | expect -- "$SNAME" 58 | exit 59 | CMDS)) 60 | 61 | # в поле информации будет контрольная сумма и хост с которым нужно соединиться 62 | local remotesum=${info[0]} 63 | local host=${info[1]} 64 | 65 | echo -n "Found file server on $host:$PORT. Getting file... " >&2 66 | 67 | # соединяемся с сервером, получаем файл, считая его контрольную сумму 68 | exec 3>&1 69 | local localsum=$($NC $host $PORT | $GZIP -d | $TEE >&3 | $MD5 -q) 70 | 71 | # проверяем — совпадают ли суммы 72 | if [ "$localsum"=="$remotesum" ]; then 73 | echo done. >&2 74 | else 75 | echo 'error (incorrect checksum)' >&2 76 | exit 1 77 | fi 78 | } 79 | 80 | # Убийство dns-sd, которая анонсирует сервис 81 | function _ClearServer { 82 | $PS -f | $AWK "\$2==$1 && /$SNAME/ { print \$2 }" | $XARGS $KILL 83 | } 84 | 85 | # серверая часть 86 | function Server { 87 | # если переданный файл существует 88 | if [ -e "$1" ]; then 89 | local info=$($MD5 -q "$1")" "$(_GetMyIP) 90 | 91 | # анонсируем сервис, передавая контрольную сумму и свой IP 92 | $DNSSD -R "$info" "$SNAME" . $PORT >/dev/null & 93 | 94 | trap "_ClearServer $!" EXIT 95 | 96 | # если соединился клиент, передаём ему файл 97 | $GZIP -nc$GZIPLEVEL "$1" | $NC -l $PORT 98 | else 99 | echo "File '$1' not found!" 100 | exit 1 101 | fi 102 | } 103 | 104 | # main() 105 | if [ -z "$1" ]; then 106 | Client 107 | else 108 | Server "$1" 109 | fi -------------------------------------------------------------------------------- /checkflashback.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | UUID=$(/usr/sbin/system_profiler SPHardwareDataType | /usr/bin/awk '/UUID/ {print $3}') 4 | result=$(/usr/bin/curl "http://flashbackcheck.com/check/?uuid=$UUID" 2>&-) 5 | 6 | echo -n "Your system status is " 7 | 8 | case "$result" in 9 | "") echo NA.;; 10 | clean) echo -e "\033[1;32mclean.\033[0m";; 11 | *) echo -e "\033[1;31minfected.\033[0m";; 12 | esac 13 | -------------------------------------------------------------------------------- /chess.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Network chess by Evgeny Stepanischev http://bolknote.ru 2011 3 | 4 | if [ $# -ne 2 ]; then 5 | echo Usage: $0 host-of-opponent port 6 | exit 7 | fi 8 | 9 | # Нам требуется netcat, ищем как он называется на этой системе 10 | NC= 11 | for i in nc netcat ncat pnetcat nc.openbsd; do 12 | which $i &>/dev/null && NC=$i && break 13 | done 14 | 15 | [ -z "$NC" ] && echo 'Error: you have to install netcat to continue' && exit 2 16 | 17 | # Версия bash 18 | BASH=(${BASH_VERSION/./ }) 19 | 20 | # Хост оппонента 21 | HOST="$1" 22 | 23 | # Общий порт 24 | PORT="$2" 25 | 26 | # Клавиатурные комбинации извстной длины 27 | SEQLEN=(1b5b4. [2-7]. [cd]... [89ab].{5} f.{7}) 28 | 29 | # Фигуры 30 | WHITE=(♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖) 31 | BLACK=(♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜ ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟) 32 | 33 | # Наш ход? 34 | OURMOVE= 35 | 36 | # Я чёрный или белый? 37 | MYCOLOR= 38 | 39 | # Доска 40 | declare -a XY 41 | 42 | # Курсор 43 | CX=1 CY=7 44 | TAKEN= 45 | 46 | # Необходимые нам клавиатурные коды 47 | KUP=1b5b41 48 | KDOWN=1b5b42 49 | KLEFT=1b5b44 50 | KRIGHT=1b5b43 51 | KSPACE=20 52 | 53 | # Восстановление экрана 54 | function Restore { 55 | echo -ne "\033[10B\033[?25h\033[0m" 56 | stty "$ORIG" 2>/dev/null 57 | (bind '"\r":accept-line' 2>/dev/null) 58 | } 59 | 60 | trap Restore EXIT 61 | 62 | # Выключаем Enter 63 | (bind -r '\r' 2>/dev/null) 64 | # Выключаем остальную клавиатуру 65 | ORIG=`stty -g` 66 | stty -echo 67 | 68 | # Убирам курсор 69 | echo -e "\033[?25l" 70 | 71 | # Ошибка в обмене через сеть 72 | function NetworkError { 73 | echo Error: cannot use port $PORT 74 | exit 1 75 | } 76 | 77 | # Отдаём события клавиатуры в сеть 78 | function ToNet { 79 | while true; do 80 | echo $1 | $NC "$HOST" "$PORT" 2>&- 81 | 82 | [ $? = 0 -o -n "$2" ] && break 83 | sleep .2 84 | done 85 | } 86 | 87 | # Реакция на клавиши курсора 88 | function React { 89 | case $1 in 90 | $KLEFT) 91 | if [ $CX -gt 1 ]; then 92 | CX=$(($CX-1)) 93 | PrintBoard 94 | fi 95 | ;; 96 | 97 | $KRIGHT) 98 | if [ $CX -lt 8 ]; then 99 | CX=$(($CX+1)) 100 | PrintBoard 101 | fi 102 | ;; 103 | 104 | $KUP) 105 | if [ $CY -gt 1 ]; then 106 | CY=$(($CY-1)) 107 | PrintBoard 108 | fi 109 | ;; 110 | 111 | $KDOWN) 112 | if [ $CY -lt 8 ]; then 113 | CY=$(($CY+1)) 114 | PrintBoard 115 | fi 116 | esac 117 | 118 | # Отдаём события клавиатуры в сеть 119 | [ "$OURMOVE" ] && ToNet $1 120 | } 121 | 122 | 123 | # Проверка совпадения с известной клавиатурной комбинацией 124 | function CheckCons { 125 | local i 126 | 127 | for i in ${SEQLEN[@]}; do 128 | if [[ $1 =~ ^$i ]]; then 129 | return 0 130 | fi 131 | done 132 | 133 | return 1 134 | } 135 | 136 | # Функция реакции на клавиатуру, вызывает React на каждую нажатую клавишу, 137 | # кроме KSPACE — на неё возвращается управление 138 | 139 | function PressEvents { 140 | local real code action ch 141 | 142 | # Цикл обработки клавиш, здесь считываются коды клавиш, 143 | # по паузам между нажатиями собираются комбинации и известные 144 | # обрабатываются сразу 145 | while true; do 146 | # измеряем время выполнения команды read и смотрим код нажатой клавиши 147 | # akw NR==1||NR==4 забирает только строку №1 (там время real) и №4 (код клавиши) 148 | eval $( (time -p read -r -s -n1 ch; printf 'code %d\n' "'$ch ") 2>&1 | 149 | awk 'NR==1||NR==4 {print $1 "=" $2}' | tr '\r\n' ' ') 150 | 151 | [ $code -lt 0 ] && code=$((256+$code)) 152 | 153 | code=$(printf '%02x' $code) 154 | 155 | if [ $code = $KSPACE ]; then 156 | [ "$OURMOVE" ] && sleep 0.2 && ToNet $KSPACE 157 | 158 | SpaceEvent && return 159 | continue 160 | fi 161 | 162 | # Если клавиши идут подряд (задержки по времени нет) 163 | if [ $real = 0.00 ]; then 164 | seq="$seq$code" 165 | 166 | if CheckCons $seq; then 167 | React $seq 168 | seq= 169 | fi 170 | 171 | # Клавиши идут с задержкой (пользователь не может печатать с нулевой задержкой), 172 | # значит последовательность собрана, надо начинать новую 173 | else 174 | [ "$seq" ] && React $seq 175 | seq=$code 176 | 177 | # возможно последовательность состоит из одного символа 178 | if CheckCons $seq; then 179 | React $seq 180 | seq= 181 | fi 182 | fi 183 | done 184 | } 185 | 186 | # Проверяем чёрная или белая фигура 187 | function CheckColor { 188 | echo -n ${1:0:1} 189 | } 190 | 191 | # Первичное заполнение доски 192 | function FillBoard { 193 | local x y ch 194 | 195 | for y in {1..8}; do 196 | for x in {1..8}; do 197 | ch='S ' 198 | 199 | if [ $y -le 2 ]; then 200 | ch=B${BLACK[$x+8*$y-9]} 201 | else 202 | if [ $y -ge 7 ]; then 203 | ch=W${WHITE[$x+8*$y-57]} 204 | fi 205 | fi 206 | 207 | XY[$x+100*$y]=$ch 208 | done 209 | done 210 | } 211 | 212 | # Вывод букв по краю доски 213 | function PrintBoardLetters { 214 | local letters=abcdefgh 215 | 216 | [ -z "$OURMOVE" ] && echo -ne "\033[30m" || echo -ne "\033[0m" 217 | 218 | echo -n ' ' 219 | 220 | for x in {0..7}; do 221 | echo -n "${letters:$x:1} " 222 | done 223 | echo 224 | } 225 | 226 | # Вывод цифры по краю доски 227 | function PrintBoardDigit { 228 | [ -z "$OURMOVE" ] && echo -ne "\033[30m" 229 | echo -en " $((9-$1))\033[0m " 230 | } 231 | 232 | # Вывод доски 233 | function PrintBoard { 234 | local x y c ch 235 | local colors=('48;5;209;37;1' '48;5;94;37;1') 236 | 237 | PrintBoardLetters 238 | 239 | for y in {1..8}; do 240 | PrintBoardDigit $y 241 | 242 | for x in {1..8}; do 243 | c=${colors[($x+$y) & 1]} 244 | ch=${XY[$x+100*$y]} 245 | 246 | if [[ $CX == $x && $CY == $y ]]; then 247 | c="$c;7" 248 | [ "$TAKEN" ] && ch=$TAKEN 249 | [ $MYCOLOR == B ] && c="$c;38;5;16" 250 | fi 251 | 252 | [[ $(CheckColor "$ch") == "B" ]] && c="$c;38;5;16" 253 | 254 | echo -en "\033[${c}m${ch:1:1} \033[m" 255 | done 256 | 257 | PrintBoardDigit $y 258 | echo 259 | done 260 | 261 | PrintBoardLetters 262 | 263 | echo -e "\033[11A" 264 | } 265 | 266 | # Приём событий 267 | function NetListen { 268 | $NC -l -p $PORT 2>&- || $NC -l $PORT 2>&- || NetworkError 269 | } 270 | 271 | # Готовы слушать события сети 272 | function NetEvents { 273 | local code 274 | 275 | while true; do 276 | code=$(NetListen) 277 | 278 | [[ "$code" == "$KSPACE" ]] && SpaceEvent && return 279 | 280 | React $code 281 | done 282 | } 283 | 284 | # Реакция на нажатие Space и Enter — взять или положить фигуру 285 | function SpaceEvent { 286 | local xy 287 | 288 | # Проверяем, есть ли фигура под курсором 289 | let xy="$CX+$CY*100" 290 | 291 | # Фигуры нет 292 | if [ "${XY[$xy]:-S }" = "S " ]; then 293 | if [ -z "$TAKEN" ]; then 294 | echo -en "\007" 295 | else 296 | # Положили фигуру 297 | XY[$xy]=$TAKEN 298 | TAKEN= 299 | return 0 300 | fi 301 | # Фигура есть 302 | else 303 | # Мы не должны позволять «съесть» свою фигуру 304 | if [[ $(CheckColor "$TAKEN") == $(CheckColor "${XY[$xy]}") ]]; then 305 | echo -en "\007" 306 | else 307 | # Фигура есть «в руке», мы «съедаем» противника 308 | if [ "$TAKEN" ]; then 309 | XY[$xy]=$TAKEN 310 | TAKEN= 311 | return 0 312 | else 313 | # «В руке» ничего не было, мы взяли фигуру 314 | TAKEN=${XY[$xy]} 315 | XY[$xy]="S " 316 | fi 317 | fi 318 | fi 319 | 320 | return 1 321 | } 322 | 323 | # Очистка клавиатурного буфера 324 | function ClearKeyboardBuffer { 325 | # Быстро — через bash 4+ 326 | [ $BASH -ge 4 ] && while read -t0.1 -n1 -rs; do :; done && return 327 | 328 | # Быстро — через zsh 329 | which zsh &>/dev/null && zsh -c 'while {} {read -rstk1 || break}' && return 330 | 331 | # Медленно — через bash 3- 332 | local delta 333 | while true; do 334 | delta=`(time -p read -rs -n1 -t1) 2>&1 | awk 'NR==1{print $2}'` 335 | [[ "$delta" == "0.00" ]] || break 336 | done 337 | } 338 | 339 | FillBoard 340 | 341 | # Кто будет ходить первым 342 | ToNet HI IGNORE 343 | [[ "$(NetListen)" == "HI" ]] && OURMOVE=1 344 | sleep 0.2 345 | ToNet ULOOSE IGNORE 346 | 347 | [ "$OURMOVE" ] && MYCOLOR=W || MYCOLOR=B 348 | 349 | PrintBoard 350 | 351 | # Основной цикл — обрабатываем события из сети или с клавиатуры 352 | while true; do 353 | if [ -n "$OURMOVE" ]; then 354 | ClearKeyboardBuffer 355 | PressEvents 356 | OURMOVE= 357 | else 358 | NetEvents 359 | OURMOVE=1 360 | fi 361 | 362 | PrintBoard 363 | done 364 | -------------------------------------------------------------------------------- /eye.bash: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Только для терминала iTerm 2 версии 2.9 и выше! 3 | # Требует Imagemagick для работы 4 | W=32 5 | Z=4 # во сколько раз увеличение 6 | 7 | CONVERT=$(command -v magick || command -v convert) 8 | 9 | # Отключаем вывод на экран 10 | ORIG=$(stty -g) 11 | stty -echo 12 | # Убираем курсор 13 | printf "\033[?25l\033[2J" 14 | 15 | # На выходе восстанавливаем параметры экраны 16 | function Restore { 17 | stty "$ORIG" 2>&- 18 | printf "\033[?1003l\033[?25h" 19 | exit 20 | } 21 | 22 | trap 'Restore' EXIT 23 | 24 | # Слушаем мышь 25 | function Listener { 26 | # Будем слушать перемещения, координаты в десятичном виде 27 | printf "\033[?1006h\e[?1003h" 28 | local n code= 29 | local -a arr 30 | 31 | # Собираем координаты, считывая их побайтно 32 | while read -n 1 n; do 33 | case "$n" in 34 | [0-9] | ";") 35 | code="$code$n" 36 | ;; 37 | *) 38 | if [ -n "$code" ]; then 39 | IFS=";" read -ra arr <<<"$code" 40 | if [ ${#arr[@]} -gt 1 ]; then 41 | Eye "${arr[1]}" "${arr[2]}" 42 | fi 43 | code= 44 | fi 45 | ;; 46 | esac 47 | done 48 | } 49 | 50 | # Выводим картинку на экран 51 | function Img { 52 | local w=$(($W * $Z)) 53 | printf "\033]1337;File=width=${w}px;height=${w}px;inline=1:%s\a\n" $(base64) 54 | } 55 | 56 | # Рисуем глаз по зрачком 57 | function DrawEye { 58 | local x="$1" y="$2" w="$3" 59 | 60 | # На белом фоне — круг с обводкой, потом вырезаем из этого круг 61 | $CONVERT -size ${W}x${W} xc: -strokewidth 2 -stroke LightBlue \ 62 | -fill Blue -draw "circle $x,$y $(($x+4)),$(($y+4))" \ 63 | -strokewidth 0 \ 64 | \( +clone -negate -fill white -draw "circle $(($w-1)),$((w-1)) 0,$w" \) \ 65 | -alpha off -compose copy_opacity -strip -composite png:- 66 | } 67 | 68 | # Выводим глаз по координатам на которые надо смотреть 69 | function Eye { 70 | printf "\033[0;0H" 71 | local mx="$1" my="$2" w=$(($W/2)) 72 | 73 | # Считаем гипотенузу, потом sin/cos угла, а из них выводим координаты зрачка 74 | xy=($(/usr/bin/awk "BEGIN {c=sqrt($mx^2+$my^2); sn=$my/c; cs=$mx/c; print int(3+$w*cs), int(3+$w*sn)}")) 75 | DrawEye ${xy[0]} ${xy[1]} $w | Img 76 | } 77 | 78 | Eye 1 1 79 | Listener 80 | -------------------------------------------------------------------------------- /fixzip.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Переименование ущербных имён файлов после распаковки zip-архивов 3 | # запуск: fixzip.sh "папка, где надо поправить имена" 4 | 5 | function rename() { 6 | tr '†°Ґ£§•с¶І®©™Ђђ≠а-р' 'а-еёж-нр-яЁ' <<< "$1" | sed $'s/Г\xcc\x81/о/g;s/у\xcc\x81/п/g;s/ш\xcc\x86/щ/g' 7 | } 8 | 9 | function renamefile() { 10 | local new="$(rename "$2")" 11 | 12 | if [[ "$2" != "$new" ]]; then 13 | mv "$1/$2" "$1/$new" 14 | echo "$new" 15 | fi 16 | } 17 | 18 | function scan() { 19 | ls -1 "$1" | while read file; do 20 | if [ -d "$1/$file" ]; then 21 | scan "$1/$file" 22 | fi 23 | renamefile "$1" "$file" 24 | done 25 | } 26 | 27 | SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd) 28 | 29 | scan "${1-${SCRIPT_DIR}}" 30 | -------------------------------------------------------------------------------- /ftdnato23andme.sed: -------------------------------------------------------------------------------- 1 | #!/usr/bin/sed -n -f 2 | 3 | # Convert FTDNA format to 23andme 4 | # usage: ./ftdnato23andme.sed < ftdna.csv > 23andme.txt 5 | 6 | 1a\ 7 | # rsid chromosome position genotype 8 | 9 | y/-,/m /; s/"//g 10 | 11 | 2,$p -------------------------------------------------------------------------------- /growl.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Работа с Growl на bash. Евгений Степанищев http://bolknote.ru/ 2012 4 | # Growl communication in Bash. Copyright by Evgeny Stepanischev http://bolknote.ru/ 2012 5 | 6 | APPLICATION="My Shell Script" 7 | NOTIFYNAME="Shell Message" 8 | MESSAGE="Hi all!" 9 | 10 | # Получаем наш IP 11 | function _GetMyIP { 12 | local route=`/sbin/route -n get default 2>&-` 13 | 14 | if [ -z "$route" ]; then 15 | # Либо, первый попавшийся, если нет IP по-умолчанию 16 | /sbin/ifconfig | 17 | /usr/bin/awk '/^[\t ]*inet/ {print $2}' | 18 | (/usr/bin/egrep -v '^(127\.|::1)' || echo 127.0.0.1) | 19 | /usr/bin/head -n1 20 | 21 | else 22 | # Либо IP по-умолчанию в системе, если он назначен 23 | echo "$route" | 24 | /usr/bin/egrep -oi 'interface: [^ ]+' | 25 | /usr/bin/cut -c12- | 26 | /usr/bin/xargs /usr/sbin/ipconfig getifaddr 27 | fi 28 | } 29 | 30 | # Отсылка сообщение в growl через telnet при помощи expect 31 | # Возвращает «-OK» в случае успеха 32 | function _GrowlSend { 33 | local ip="$1" 34 | local port="$2" 35 | 36 | ( 37 | echo "spawn -noecho /usr/bin/telnet -N8EL $ip $port" 38 | echo set timeout 1 39 | echo expect_after timeout exit 40 | echo 'expect "Escape" {' 41 | 42 | while read -re; do 43 | echo "send -- \"$REPLY\\n\"" 44 | done 45 | 46 | echo 'send "\n"' 47 | echo expect '"Response-Action"' 48 | echo '}' 49 | ) | 50 | /usr/bin/expect | 51 | /usr/bin/awk '/^GNTP\/1.0 -(OK|ERROR)/{print $2}' 52 | } 53 | 54 | # Посылаем нотификацию 55 | # параметры: 56 | # IP на котором «слушает» Growl (если пустой, используется локальный) 57 | # порт на котором «слушает» Growl (если пустой, используется 23053) 58 | # текст сообщения 59 | # пример: 60 | # GlowSendNotify "" "" 'Привет всем!' 61 | function GrowlSendNotify { 62 | local ip="$1" 63 | [ -z "$ip" ] && ip=$(_GetMyIP) 64 | 65 | local -i port="$2" 66 | [ $port -gt 0 ] || port=23053 67 | 68 | local text="$3" 69 | 70 | res=`_GrowlSend "$ip" $port <>${#?})):${#?}}${__:${#_____}:${#?}} 7 | ___=$___${____:$((${#___}-${#?}-${#?})):${#?}};___=${___,,} 8 | ____=${____:$((${#___}+${#__}-${#?})):$((${#?}+${#?}))} 9 | ____=${____::${#?}}${__:${#_____}:${#?}}${____:${#?}};${____,,}<<<${___^} 10 | -------------------------------------------------------------------------------- /helloworld.bash: -------------------------------------------------------------------------------- 1 | __=${_##*/} ___=${#__} 2 | __=($__ $(${__:$(($___-${#___}))}${__:${#___}:$___}) $__) 3 | ____=${__::$((${#__}-${#___}))}${__[$___]::${#___}}${#__[@]}${#__} 4 | _____=$($____<<<${__[@]}) ______=${_____:${#__[${#__}]}:${#___}} 5 | ______=${______,}${__[${#_}]:${#___}:${#___}}${__[$(($___-${#___}))]:${#_}:${#___}} 6 | _______=$($____<<<$_____) 7 | ____=${__[${#______}]:${#______}:${#___}} ____=$____$____ 8 | __=${__[${#_}]:${#______}}${__[$___]:${#_}:${#___}}$____${_____:$((${#__[@]}+${#__[$___]})):${#___}} 9 | __=$__' '${_______::${#___}}${__:$___}${_____:$((${#_____}>>${#___})):${#___}} 10 | __=$__${____:${#___}}${_______:$(($___+${#______})):${#___}} __=${__,,} 11 | $______<<<${__^} -------------------------------------------------------------------------------- /helloworld2.bash: -------------------------------------------------------------------------------- 1 | _...._.(){ __=<(:) __=${__#/*/};${__:${#?}:${#?}}${__%?/*};} 2 | _._..__(){ ___=$((${#?}+${#-})) __=($(_...._.)) ____=${__[${#?}]} 3 | ___=${___//*-/} ____=${____:(-$___):${#?}} _____=${__[$___],,} 4 | ____=$____${_____::${#?}}${__:(-$___):${#?}};$____<<<$____;} 5 | ._.(){ __=/${-:${#?}} ___=($(_...._.)) 6 | __=$__${___:${#?}:${#?}}?/?${___:(-${#?})} 7 | __=$(${___:${#-}:${#?}}${___:$((${#-}+${#-})):${#?}} ${__,,}); 8 | $(_._..__)<<<${__:(-${#-}):${#?}};} 9 | .__() { __=$(_._..__) ___=$(_...._.) 10 | ____=${___:$(((${#-}<<${#?})+${#?})):${#?}} 11 | __="${__:(-${#?})}$(._.) ${__:${#?}:${#?}}-$____" ___=<(:) 12 | __="$__ ${___:${#?}:${#?}}-$____" ___=$(_._..__) 13 | $__<<<${___:(-${#?})};};__=($(_...._.)) ___=$((${#?}+${#-})) 14 | ____=${-::${#?}}${__:$___:${#?}}${__:${#-}:${#?}}${__:${#-}:${#?}} 15 | ___=${__[${#?}]#*-} ____="$____${___:${#-}:${#?}} $(.__)${___:${#-}:${#?}}" 16 | __=<(:) ____=$____$(._.)${___:${#?}:${#?}}${__:${#?}:${#?}}! 17 | $(_._..__)<<<${____^} 18 | -------------------------------------------------------------------------------- /lebdec.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | while read query; do 3 | curl -d "text=$(echo -n "$query" | od -t x1 -A n | tr -d "\n" | sed -E 's/ +/%/g;s/%$//g')&Decode=go" \ 4 | "http://www.artlebedev.ru/tools/decoder/" 2>&- | 5 | fgrep -v '&- 6 | done -------------------------------------------------------------------------------- /mac_ntfs_write_enabler.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Enable built-in Mac OS NTFS driver for writing 3 | # Very UNSAFE!!! 4 | 5 | ARCH=`uname -r | cut -d. -f1` 6 | NMOUNT=/sbin/mount_ntfs 7 | NLIBRA=/System/Library/Extensions/ntfs.kext/Contents/MacOS/ntfs 8 | 9 | function usage { 10 | cat < 14 | - "enable" for enable NTFS write, "disable" otherwise. 15 | USAGE 16 | exit 17 | } 18 | 19 | function ntfsdisable { 20 | if [ -e "${NMOUNT}_orig" ] && [[ -e "${NLIBRA}_orig" || $ARCH -eq 10 ]]; then 21 | sudo /bin/mv "${NMOUNT}_orig" "$NMOUNT" 22 | [ $ARCH -eq 11 ] && sudo mv "${NLIBRA}_orig" "$NLIBRA" 23 | 24 | echo Disabled 25 | else 26 | echo "Error: cannot disable NTFS. Already disabled?" 27 | fi 28 | } 29 | 30 | function ntfsenable { 31 | ntfsenable$ARCH 32 | echo Enabled 33 | } 34 | 35 | function ntfsenable10 { 36 | echo -n 'Please enter your administrator password. ' 37 | 38 | sudo /bin/mv "$NMOUNT" "${NMOUNT}_orig" 39 | /bin/cat << MNT | sudo /usr/bin/tee "$NMOUNT" >/dev/null 40 | #!/bin/sh 41 | /sbin/mount_ntfs_orig -o rw "\$@" 42 | MNT 43 | sudo /usr/sbin/chown root:wheel "$NMOUNT" 44 | sudo /bin/chmod 755 "$NMOUNT" 45 | } 46 | 47 | function ntfsenable11 { 48 | TEMP=`mktemp -d /tmp/ntfs$$.XXXXXX` || ( 49 | echo 'Cannot create temporary directory.' 50 | exit 51 | ) 52 | 53 | trap "/bin/rm -rf $TEMP" EXIT 54 | 55 | echo -n 'Please wait. Downloading...' 56 | 57 | curl -o "$TEMP/arch.zip" 'http://dl.dropbox.com/u/9349175/datahost-macdaily/NTFS_Enabler.zip' 2>&- 1>&- || 58 | curl -o "$TEMP/arch.zip" 'http://ntfs_enabler.chat.ru/NTFS_Enabler.zip' 2>&- 1>&- || ( 59 | echo 'Cannot download NTFS enabler bundle.' 60 | exit 61 | ) 62 | 63 | echo ' done' 64 | 65 | unzip "$TEMP/arch.zip" -d "$TEMP" 2>&- 1>&- 66 | [ `md5 "$TEMP/NTFS_Enabler/ntfs"` == a88031b3257379257086af017891f229 ] || ( 67 | echo "Error: invalid checksum NTFS enabler bundle" 68 | exit 69 | ) 70 | 71 | ntfsenable10 72 | 73 | sudo /bin/mv "$NLIBRA" "${NLIBRA}_orig" 74 | sudo /bin/mv "$TEMP/NTFS_Enabler/ntfs" "$NLIBRA" 75 | sudo /usr/sbin/chown root:wheel "$NLIBRA" 76 | sudo /bin/chmod 755 "$NLIBRA" 77 | } 78 | 79 | if [[ $ARCH -lt 10 || $ARCH -gt 11 ]]; then 80 | echo 'Unknown Mac OS version (Snow Leopard or Lion required).' 81 | exit 82 | fi 83 | 84 | [ "$1" == "" ] && usage 85 | 86 | case "$1" in 87 | enable) 88 | ntfsenable 89 | ;; 90 | disable) 91 | ntfsdisable 92 | ;; 93 | esac 94 | -------------------------------------------------------------------------------- /patch-ilya-birman-typography-layout.bash: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # https://bolknote.ru (bash script) 3 | # https://eugenelazarev.medium.com (icons) 4 | 5 | function writeFlag() 6 | { 7 | local mark="$1" 8 | local file="$2" 9 | 10 | /usr/bin/awk "/^#$mark/{print \$2}" "$0" | /usr/bin/base64 -d | /usr/bin/bunzip2 > $file 11 | } 12 | 13 | MOUNT='/Volumes/Ilya Birman Typography Layout' 14 | TMPDIR=$(/usr/bin/mktemp -d) 15 | TMP="$TMPDIR/installer.app" 16 | trap "/bin/rm -rf $TMPDIR" EXIT 17 | 18 | echo Mounting dmg file 19 | /usr/bin/hdiutil attach -quiet ~/Downloads/ilya-birman-typolayout-*-mac.dmg -mountpoint "$MOUNT" 20 | echo Copying the installer 21 | /bin/cp -r "$MOUNT/"*.app "$TMP" 22 | /usr/bin/xattr -cr "$TMP" 23 | 24 | APP=$(echo "$TMP/Contents/Resources/Layout/"*.bundle'/Contents/Resources') 25 | 26 | echo Patching English language flag 27 | writeFlag EN "$APP/English - Ilya Birman Typography.icns" 28 | echo Patching Russian language flag 29 | writeFlag RU "$APP/Russian - Ilya Birman Typography.icns" 30 | 31 | echo Running patched installer 32 | 33 | /usr/bin/open -W "$TMP" 34 | 35 | echo Removing patched installer 36 | 37 | exit 38 | 39 | #EN QlpoOTFBWSZTWXZb0wEANRX/////////////////////////////////////////////4JEfAAAAaFKHVGdm3vfe3zvr7b533b57fKm+7u9bvczXbbtrdvu+fZt997b7ve857au+b3vvtybnenu69bq9271ufPfebfW7a90zfervr2K93Hu7d7eet7u3tu++9GXn3e7r17e3cXzffdZ7e65t3c+Bd9wPt7X3tpVdPO3Te+2N7xvLuk533e23vkX3n167fTpa7veTvb3fefd3w5V719Xd2492vbZ1t33On1432PO9z1e7pvr33nVvu9vTrTW9uPe3fT1x77N17um990fJ3vfOfeO9y1q3fWdb2+3trtu49vObu6pZc13b7uvvLPaXecPe925jc+xe7vdPr577vfHqyvc+7ve9e726r2z3udq57vr19Xe889jX3vLvc7333n1m+5ut2Du1XdyzuWsd7Pdvffd8883XbZrJqtt8Z29z3m9W7p32d92cKvth733HqT2y2S771d73ZzbWtuvr7xp773ee1533u9333z7fNbco3vTqMW7VVu5726114u68d5Ny973z77vmdV9s691arzp7udZ7V6evXpu7ve72e3uuc9u21r0q72e9j2r17K9z17ruOPu595p8vda97vvoe+7bgVU0AEwAU8IwABMACYJgAAACZNMAmAmE0YjTAjAAAIxMATCYAmAJpgAaNAADQGQABQqqeINAmAAAjAmBMAATTJgmATJiYBMBMAAEyYAABNMTAGgANGmjQAA0BMmTCaaaZMAqbyaaaYmqFVMQAJgAExMJgEwFPBGmCYE0xU/TEwE0xM1NMNGmgaGhoaDTRqbRkJgmTEyZNMmTAmEwmmBDCYCNNDAEYEaUKqZAAAAATBM1MAmmTCbI0BoxGUzRpo0aAaTAAmU9MTTTJkxJ4EaY1GRhMJgEwmmJkwptGmmBGACZMmmTENMlBVCGRpoAwmU2jQNAaGg0GgCMATRhTaZGJgmT0ATBMABGmp4jJgJiMJT8mTE00aYTRpk0wI0yDBME00xoCmMmTVBppJAmQEyBkyDTTJqZo0JkxkNDRoCYDQE9AGgTEzJoEwBkJgBoAmExqYTaamBGJjRMACPQTEwTAjCaniap+KkbybU+Odk2ssZwoCFy9JiR2co3onAkZJuiIiZyCHy681WFFHGmb0cwT+VDp5wGffATcNRqH8jveNszRnxw/GGfryqlWmQLpqBctyqsLhu36bHT2je1TryZyfQfYK9wFsutNhPcC2+RQgYCjKqqAABgDI1QgTJsowbE1UFESrlBBgkhAtKnau0iAe6D2sNd2yIid3FZH8KZrd64SoBuNFp4qnNxGhaOyBbWksSnUWHgGkAgyKc8csACBIkok0a4UArGiX9SEDchGxRMef+dKkQ9u2IAHh20ROZxoBEeOFQb4FNebKZu/rniE94pLlQwPRDwyhFI2itx9qDusQfyUbzC4doYRm6YsI6QPxobVFpshoao6ldNVHXTOMIblAS9kl5imMBS/+QM/f/f3ZxH/DZdod4iF+rDMCIAj4EqYQgIqCmAoiUjX2oMTdUTcFvANho97x+N/DZAIb/MKAGIjghHdaVEsHmasFhAbDa2dWCu87iuWyAQgsAkAxAkJTq2xLIXLWfd7C7t4GC8LO+QPpKDuRKBSgIKAolCNtKAYyK1gRiBY8KmPtS1YTK0TWCqsAgbfpGN8WorsqoqzpdKQ+7xfeZqtqBdDzlCicCFBlKzb4doUKKQ6n1tUVqs2Rrs/0tHklSVr2H+XPv1Iw9bdWeHhMDAV+4I9uQFQVxQuaW4siaPYdJNOBh5ZUpnG+wcFoDJm31ReUXNKbT7WUIEQ1gmLQlTV68AfeJP74roywnXQUIRyBk+4/adsNuZSTVtBYpnxIrU/MTt6isX9k1prNF2ek1f31NmLAHi7187te7Nl1Owo8NsqQlTpypUySEFS/ChWSKntSAOVjhmnoWIsIreQ7Ub6eG7Fg6dM0OagmN7Hcn2o878vxzzHUwgRBivU1k+F/GXcAAfsQBDggJABUALlVdkAUD+0GCNUblqo9pW/7ldiXjlondTD9jokdB1QiK71JDjxukbXVw4Mx8btjOP4OBiLdSc1X4cZuwKAjkgR8VIgb2vWQiGqRk87+dPDRA4uxwOFxedeaLiakZHSZGDheh4pG90G9mGpvBVLIFKWn0RTJApZKqtyKNi3PgLRA/EkM9EXB42YcQWz1dos1KxOKqHg+vkRG+wON2fQgB5+zZtq16q0NEwAACswVI816umfkYnbQnHreDsP007rV7/anqtVEgIP7IRAMJtttCBABE04BNF37e2CRIhwSASEIIATvIQSQUREQBgRwifqqBUABROICOcUpus0rE0AwOfYHAAIU32XjxT+XRmBG4mnLIfZA2Hu9shAZISauvgtgLvpTqYaetEqLNUoI6H7nFIbBkfjexOcvsdYlhRyJOxfRdb11nDBsoEKACAO79Wu1w4rkdmj3j+v5kKBxsdBB0a5VV8z+a0FNzmGr0P2X7r9H5r555O7TlfqNO3wz0MyKBlCpLkzmBvjIPmcbd9XZ3gILDGPdyW2ScNpcLrsPXZ++XLl6/ufPoLRfaUahDMJ+Or9TGoKSzionNN4pTLS0Td5DisUuMwHp28N/p3Ygl/h6UTJvPQqX24Nxs6jLJcuG2JvOD/32ZPpQPnG2Z16Fhcrkq7N0fsl2CHoUKXhL8u/dZQoH+/3caBx8KFqb3CBhkztdVeA465lLmm0THJqDxXPuyR53Rgq9XhkP5t8BpoTnyEhl49jCSSYq6TVHETaKCpJHwqiOo9Ov3n8Pz+/x16z0yl1r8rHo+nu8lrvLSfZff8z+qFTCCvxyi2kfca2DwjyWLqeksLWqky0z1lpLT76vlzk9GvrueRY62/i+OwzJohLvqjRVGdO3WdpRpwWunjCHhVpuIcA/9/8UlCN/ASlfygbMzmFr91AIbqB0uq0GEDQLjmCgxeO/JzyKbKPVxelBGm/PTRU5o/PHxH1SVrqdc1XRzEBR6EpIIc9C1v2RdoNoQL4aRfnYHzl4gO572tcpa4Sdg686D0CCL6oUb5Qo8V4t0/5XxIAz834nbvGKoPbVS4Qaadgo1oDO31QLt/D0HoEEEPuFYGAgj3qPXB716AjqHivBW/A3CCKnO3vjmMlznzqjZ8qcUJ9AKRhkjC7a6z+/1a5h9SUZX8xVrY1MdO5xBylSyFC1xgdaGb3LCbs0o/SdKGCg42pzzZSg1Jo/DlO40MtzdzrMPorS4AeyM2QaIVQCe2oIB1PH1Tueqh7TAAgndMYb68AW5rpPnRc91qdyzjpeYxZrXYbfQbSvNYTaJJdou18Dx3ABQH+Y0IaA71ibs6dJYz3cljDEqpuqvGKbvuGMJuXB+zQNu83X8lU1bls/EtAggmM8OhO8s0lTPqAEcZt2HdVVSSR+VxubhOtP+HFNeGWVPScRQujdIiVhnHwxawRgiFVQpXAMWWvtscYvdPv0Z/0Y7vgAPhER1hGaofx4HtLAoO6w1t3MrIV5Cs+4owBzLptDg4sJ1XByZO3Zf7+yEo3gVY8XRmVK1+IVk9//kTIS/32MT2h4UIAAMZfsC/arVR/RAAA6qQAwBQQUGG079njA63oGMjW6aHy9VFGOCDORgclRPlxszTKWs3Jtr/h6f8RdJWF3MUANigGvgFgQ4QDN/rcCkfM2QX1pBz2CEYFBBBBDbPMFzgsdsYC3fTfXYDokCGiM9JyVH5m6/N7u2QxOEQVwgZfI3qptIKmQk3RVGNF86y3jRxa1+y811MEAKK0jikmlo6YCnxo2eZaX6ClixlNxyi5NTiC9Q4MNNigV2ksUU6GKOTe2r2Eifi24s6Ux/J8D1642yknY9TyP0Sn+q5SiK8s/af3ebEk51JZok4eSLv4ZjXsZw6ihuR+VNBdDBKlxoEiI4AUBd7U4szRPFPTQVZRzbNdcrMxRaa0mgik/6zSBpxl0Da4uRw1a8RZdYspiIjLy3Mb6WFP+gsIC9kxnrp2iFAc+LHe866Mo6YU1RccBipXLSG22mOYoYi7uVb8a20RZ7+skWbJ1SIALoUiEAKpJmHF6+eLZF3GVqnwd99+8Ys86W9EtJCwgIBS1mrebFTGmutzGpQF58Y1h4B/iMmFr5lnvPHzk8D6pWmTyv7ir4xe7wk9/j6vtdZNiTKWbnHDROylJbRkm410FJormHBrhIO1ClTRsCtSJmS2752XkZfwWk5pLDe/PEhirfCADHB/CPenCNhzjqCiXEgCO0uY8XH9c38Nu6mvd82TubbTyOczHKureeipCRyVMbQE852B4sLOM5/Ye3toBPVRe/B+KkUGRQP+RQUf1DUevb07fwO/+fzdbATPGl67Bwq2cmgQBAt5k7mr7bj8oIDNIPJxBv2byfX51cB25VGqdhoOLcF+uRrdSTrB3HmQ/8/r0hhmiZcs8V/3h0ByPx+Hfp8yJK01ca5cOuv206YmfGYd8xqju4tmqQoAiAUtjY2cRtW7M5V5bS2x2Cgrh5VDcc9D3Lp8jUDlJA8oAm4gGvdbQ2GFBUSRwC24G7lKKt08m71jS3fW94+xYNYKkZroiTUEH7hpetsrmHvGz61xU8+ZnEwKUGB1hAjfjXW41PCq1f8u5AWiKLw9kLz2rHHuiF7wa1eOo3TECkMAWNsojldXQzprp/dKitvz/vY9LyHQV1Es2zA61/41blJMCLUO1nH8+Sr3t7/wRfUMJzVtchSkU28NFFmciMBYjEriT2/e3yYhSdKo5bVJdKMV+6Ekjn7fNmYKAS9nUu1ZTpKn3K018PCLt4Qi4tecQGEj6clOscGOr1r6ir8GOG5X7YSeWdXokIYElv3xP2XfF0qjgFoExBaiZIdEzCCNpHMpp2O4/KaxBR6HCpTeDu8KGXQGHgG54nLcD4LNLpRXHU34s4St1AUjBRo1fKfLCaM/HzQ29PKbhIHLLcvD4V7RneyM9CHRXdCohJyqI3TLvzbXmhmjjsUanTZv62ScWHjadF6snFNT6Z0KPcPYyq8smBjlu5s/EW/CibArUvT+/G/CPPlDq4VDGYjUlazsJLhQbijp8zR0OMQmzaDIW7v6hARQuQs0nYLVaIEDn/IZpQhwAWE/fUOqUTc5cb6Dw2ABd6q8yjH0sV5l8px5bVVJ552P7eGb78swyF2GokrtobnkXI7v7WuotZbM1dlkxcKPSRNEbyqOLF0fe/V9y3RnTKDLECjQdHaaGsbKEYAWxQKSswwIpDCBD0uCeWx7j+Quw8P7Ln+SsikIk9HWisDoo7fFycE/3KRh56PXnflg3rDgbWuHbNo47wNJ1zb2TyL0fyixZ9ebH0yaG7xqbDahatxPIxXCYGQHQ/bqgVqYu1UYQQbQb67Qk1dm9TrzJg7dCgaQhcCLCAtC9yFrUIAWCCh7zCoNzlijJQ1jjjx06ubyJjgG7O7Tus6FmFzcgbH8exkTqoMpBHQLDEYJESdR343DccWD0i+BP2HHmyc8Wi3+s5WjU0mZ+TakmwMjfp3T/vTNz1RFHSnjtflFtAHVqBtq6e2Si4aWq0ZCd3IemU4MvvW1GsXPBd/bCijuJcd1CRETJ2a51ix5P1kfdvFEiQG178BzT6uBYJu81dmLpG0iGqmIySx3Z5zOTznOKVLyMskufMjD86jb8Lj9vSV4G7ZsbGSDcNo9TtPaNwJ9HU00uMgSQjcb3lWQ33yVJ2Vru3xDu4LjfX7MclJulWIo8h9SNX3ZpQik9LQyHWDrWGXAAFtSKahe9brloUF2NQY2vhnBpeWyg/YvmBx/k/vHWRz6yGk+4ocBrTpjizMHH8KPiiqJpYJbxf2NORg86IvGPN1Tqh+J7T6kuJEVNpanvKgzp175MWLoNfk5WGuujZnf4ise6ynJzLYjQqBaYep0iUAeQE0gDHJ301MwWbMPceeXGRCeRD+4yxMnDF72UEigk5nuHL/SI3wXsBg3oAz0ZQPDaV1Lq9jGRG6MLHFs45ogTVdi2uOJo+vXRgix2aCOVyk2ZWkjNS5HwsWj7vmPKXDuw42cjfUeJmeYUfjVpi86yPdRdQomnR2uHElHWoLp/ilj2+8fUuMcW1tjoBpwz+HqaY9X0vgQmBngbAL1YzMyGavYy9Jz/Pv9txk3R6KAMwCTjStwfenLbXROFIAwHJ2Gw4+C9Ns9uU+MPUof6rzoxhnuzrEPJSFcEvMA+cx68xd2WbI1NjXYko5coVhpDdlPOzSg9JPyEBOiu146nOIXsR3ZyZO39EabKD+qz9H+8tgWFZ2h8q2m5t6VkEpwchnvA6JGjfG9HL+zQyDZ8xW9fzfpQjKuu2yQmbtH3CV87dUjS8j3XeboYUs+UBL/0I4z1MsJ5VC7Fa6ebtIWY+e6JLu5Qi9u7v7yb/jMofqBU7R0ifbAtHue2CvjD39CMndoHwsZAztstxSRJom5h2/4CbN+AIWYG8s7CKIZt4IY/edZBMmz+GpmPtx+dLD3PTIFRZ2/c1X/PgzhCX41wqioQHjBSRI/tHR1UOw7l5tMHmpBG5iMVxWJMMKNXDcDJ0htMAqiJwPpXLfkLXSekXZWOyNULoqVql7WjDBl9xaNgcqubSbQc5pl36aIHzGLirbThBL99HnLhMgA/CcbX37DdwDiJzS95ODnn4Q3oaIFfK6SIwUZ98aiqzSo9Rql8nb9DoDR+N8O+aesh6nHZY5oruU++0HWQx2BOIpRM4uh/E1FK/LwiTm+cMyRyQaZF8vLlcHpT6Vt5xF/5jnfomPTka4/E54hzRQbC4DduYssxO3SVG+/plozyNVftQspRXBY5rFPoZ3A9+GERXsD7Jd0ytu+F1tMgLGtqlyyMU2gj6XZQkBZbbt9qzJ0h6Qlo+bbY7XIy+PPpP64krnJ3kSCndnvTMX4sXxddcqGlodx0PS8K2+zcTaQVyEhACFX/PxCryNTrBrlp9KKtu/VqEC7vYAMDCZiTT7fprn2XtEEkUXyoO9qwRZvftQtrWwXqyRVhNLy9+FEWh1nH3RCZRNVFXx2rMdGs4msstRzA+GN9GCqCIHXB8Ib3veEOFJ77yyvyxoC8sfOa7VtRYbGmPojNyTN1+MwgCZVltUm7co3oV/DMKlgcVY2l1rCrougQRvxJza7lEliWr33s+G9qwWSZqMIbuJ+n5V3V2p6ReP/Vsp8eWPzqcW5r7XmmzlrLHoem6brXU7BK6F/0W7i+gBXCivrm7U9K3bVy5bcDergsPVHEat77Cw9mOX/G2Dp/mfk1US8ikIMi8iAy2OQHSI4sBJ6DQ31hgdHMsZ3LI/dl77aY1tiBTs3gPiDeG/rnMyhtEGWnUvVyCys2NaLofrgqc2Thy+MzcDeA++IPfnMzk+eg/oD3bbf0Rq+YeDy8d2UlZvK3lZGI7tThYufdTdOeFEW+LazTNoZw7uXKbro27COlEglAOdEyQ/9NV/g/x6MXFYxKO8zpKq9hXgYe+Abnlc5TZbEI8PDwTA0Twju7etoqBxGv2W0bMD512PhO7yzAuKFXlZvTtNlSkDbsQ5Ie8PJz5kz7yl47nJ5YQgRgkIuj+Nx8EvFt+fRmLYKmOoiaBxxVCAEjT2Y5hwtmjSofurxoKx26NZf/q4ciDiXKxOt7TsbrxIYQBKsVxrwf10d0qJUjubDPK/9SzCU75vHhqGLKg0Qw19JH5Q8Bo99cGjlO7gr3GPC3e0VUwk5FhXq0yq7f7OJ49DeOlo5X0W6FFNk1mbZgGJ3cLAe3ndeR2PSkOxMwb3eM75aCr6e9PtIdVFCUG6KPL+x7VoNi02VApYWihqun0bQcFAHBCQnR2Hxl3lzueC4enMTUw5g/0Rsx9GsaAwPw5wdhG4/GBdDxnLOGsY4pX+s4fZSYrrayniedMVvmpBOe3ICorxN0+V7Xbzs5gb907aVry91gY/QQ4GX978J6pcLrYWgeGUgayQK6Qa+/rHlN6H5dEdbIpyzLyFr+SGAt35as5cRcGU2x1xd1tqE97wjIkQ+WkXDqDIosppbOgXPKj1zix0uCPfMwli810kqzLQHLd7MpL+hRzTm+av94BUHW4K3kim5tR1qC85DmXyq7fwVi0j2g9j8HGMwPDJgrY3lvymOA+PUtU3eusmTDuHhmvRu2srSvOY750nn5mbSPyb3Fw5J1BfqePbF0ZORSgIkc3TSOM17w/rtQ2ClDeW+G3Xo9U92nT+Ez/Kp/0sDp4RhB9COmMpT2Mxl2WQi2EEEHhS0eJv3yf0RhCPjO/DVB3n/M2HJjouxcTyMeSnez8JkwoTzinlUOL1OVlE5OI5PE6c4MK6N+VHysudfaCKCEqRYqX68QAdDFK83aZT4Skx2W1yq2ENwh28dO7TOBLCAB0lNhRMNTjilZi/1JNIE+lKK6DauuU3CbFj3Qrz+1kCUhw3C8/2HYV9ralT65uvhLPIrIFB0kDpgjaJqQY+OMl6t2Erg8f9iKtfkkGmQJsv9Swp5Ip7u9vdqXhdEcQdpAFRWXCq+rA6/rWb2sC92mOZJLMIm/frkYP7BnL5HQPfchby6W37BKZxZPhneViNe9NHOtLQ1BTmC0+DYBlwojIs29P2DqNLDVeTzR2dqmEsjzI7/LEG91QeJHvsTzxGPBhoB/wvfom33trM1DqTlRYByfLfjvkPXMPiKPN/RDpXdnyC//tlAFVtTO+U41fl8eEKn/hOAmhQBXIJJlbb4eQVvQX6xBnudAypfV2bLfpVJ1nl3FIZzosESbBbzS/PxTv2XvUXdv3+6OXCVZF6jMsWkOoDnscf/KzeyDJiMbUwiOJC1rV3sCW1s1SPI+RjXtjodxcbxJHJMpiGRnMbrN2YucVydB+OyKDhjuJxIOQgbFswwW3C/7r2MmN2+fs9lUyc3sia2EWyuF782y1XIqi9m+bYCoz/Cf5btAeqz6PtXrIagJVxTdMszbfjMVujoFWNcrPHAnElk5OdNnM+qP/TTMuVhXAUtnVdDVA+BiWYEmGmfaDuyv80EPhyAuBpB7T6HJokDCs9DVHvTxzfjMD4BwmyQe49Exbp57DL6jgoeDffTGR6Vx7z7oJy9K9jl1GwBtSKYrXrtc08ETE91FB9/HewqRa4cNvKA/7d5zHCTug1qklVt5MD2Jltl7yt9ngwEq1pXDh415GsD/rPYqMRi2vYrqUkYXDVOzryYecMXBGp5EGv2pa5pPYnS/cXkM98qeimtTCHphFdmco1XPBthkhkVmKTCCfq+iOYW3emsH7XqIaejTpyY9vXgEi5mPxWgWBwYDPiq6fdDMV+oKlbS+hN/R/+2MFaIrGjOcnnHcsISt6lAHLJBG7XjJ1qaspS9bdi4mrIE/LyU4/5N897Z7rRiI0x4yzoLWpBxmyLk4x0NDZ6rmUy1BM22ifkoNyPZ0OxEQNXr53XTSEupCFRE8axs6iJvFp0WlqOZ+Hs/yr6t1J6XC2XyZqq/R6nFRkD1zC/7ZdANUUQRDSxJY40HHasRaIbkTBGo3zZg5b9X7R7uFcdNiNJBwdq7EribjmgMFYvhseliLJat5G54cw6VGzMtIkSvKuN8Ok7dH8CbRr58eLEGABdiAtCiaDm+C6o8mEqF3/qwf38YrYaq9w8o7zLDHoYOkDw9y+QwSQ/yYKGvDSShJeytnLdrfbnC2u8RMbnQv2h6orpyp1vE/ug6pO+k5mNxdQZg0lEit6pvhEWkVNLLp6ZqPJPjqfmhZmg0ytzKLalEqfkmRNzxEENNncn7txGIB9UYykef5/pjy4aS0uedAugj877eus4qsDAmQ1pfT02cNb+0eL6VfI/9TEdqTR8ESzCrk+RV3pQVhJQzdLT/EX+Xv+F/8Ha3+OLORCXgBZ5n3uG2s1J3Inkypg/nNKGBnJsQygO3kYI78GLnneHLemfRBt6/Dexe6bGV3Fh66DnwDmHrVZHkfnpiiTy7MdkV8xiASo3Hl/0NsKGkbJ35LSFUMQfhFlSzsqS36KarOo7Z44NM81at0kUejSl2RLhFCvK2JU+s8/8P3a15dsO3eaZTQ2zJzi5RMCkQpVdC5vHurA2sy7C8VVDWGsVKlk3U3OGLBfRpK3F117L4plMFFLjvi1HOFMOGHBnL8QcTRJtwAABLW5Tic7F22slG00wBM6jw84IWC8ZiBK2j+gxAJIoCpRKCafLG5ISZZOICJyC5r/LjrtXGILijG1kSBdpjwpoVuQi9Y/uhqwPMPx9aG+6nQTlnxyWTieiXMY+gU6yJLvgtxdqjlT6yQ89GtlMGDtw5Q7BptkLA1mXBV9vMHrk38dU6bJ08iMVh5PtHkLUi1x0MrRHKOwNznfmwcr5OqGXeJ+LHYnfnKMtAFTFKVzWquHj9PK74dVDaLSWBcgW7UvcwDr5aZh8UOvMl9Ne8MQrtO7XLQYTA2tJkynUBry4iDdv+kz9YLVZctwlphCUPyJ+tXq0/fmcTbj83nb81Sacuhhis9QoqDWTC1GJm7LjLAGfULGSykif5ofYmzbtfen0D8rHOF3fAVJUa2SdlOAEKEZS4c9I9QmSG1CW3QqpMou/kHjTQILPkESZPViR67agcPtVxzBXDbG7oeCMq3VLlHemKXpyljKBUbaP64l1YSshqGFLX/MVOrd7iUziPQ5PClW7zSZGvU2VodZVyrXJJV7DUuPDaTEgdBp+PKojg39g2QQUH8rzHq74I8n3+JO8MlHDQgoMFkApYihvfa4oSPxMpY41Y+kc4jjm4Vhmrx+5RhzwYruaoSXz72/KmqJSddosK9le/i8KWTpY092biJZiQ5n/mJInDXmi7SixU61vMoC29FOleIHZs/PtJ/dEaRE3xmlO0OFwj/If1bPy1/P+90+cC6PR1ospYUauuDk87OC64kBCLFNLJcjptumSLLMszfidvJR/E1P4qIK9NPy6kLuvVbCA5a286amJKF5hraBH7oqgTGfLR51Geh3pwONXIfYnvJ0WXoTL4RIiIzBMzrOfRSvLg/il90SQgoinRk1kH3fjW3JLgmnmc5Ut5/Vf+yACD/uYDEO4qJbXjwHTVM3NhE+HrKZ0MwtlqrBS+wZOPIBYuw4bmEjoAjWFscYufiquYdjC5YVx3U38+0qpaC/1hwdS5SMkAfRNx+F5mw2sJV4eu6uZrvE+/KeDwyKgkhMalvj2tnsye+jPhKHD+n83V4ZuhTq4Xm1n1oDE76wG33klPPvqxme71HP5jj8nhEC25krL5EasYMc9Mc/F6BuuqtXBWfYmT1dwW2UZWd+uIAIl3hxvH3yrw9xRMDXlKB8yjpFmtEzNVDECw4sW646hxfiIp/SmpsGdKNvbk6NqbbHj2BiAcLEcq01IIDlR/3og/vJfIjcpnJnEOBTYZAyH7DqO6mWCGtWaHsDRX++GUOemcyWnn6SNGmyQMEIAb8YctX39b0YGrL/oa2w8xGuqUdGTdm9Kt1NtIsu7RYaVwxQ5UW+JxhRXDhGsSAiH0G/+3bePC7dMB/5/uf0Ml3fJm7HdSy3t9AbdtCDnzSJPUkAPxFXV1lk3MNk/TIZGGarxmbO2LoZ3n0sJtPzS0Xj73R/Lf5kfxnZVPbP7f3HZOGdpI0ZtOPrVKeylpxeVqzXj0LltObnQWdCumzfycX9qhC2q699x3Isj9ZmEA2BAJkTrpnG2Vp7vRpGw/9USRA7Yxw1f9ZGBrLKYoKncNwW99JNJaU5Ay14soQVgoD2YeD8S0+2owo68v9rwZ9x8BUs7/8VqeFeoL5LeN46EvIBv6unRNKrw9oaJy+6yjoaubl3rJqedWf3rw8U9xI/ZE5DjDt4veG9Bjcoo2RjHlEZJxkN8LrO33TWLNeI6PJeeTk8J8jzj/ORZo3gcONB4fFR4FwoG42YLbG9iNJgbr8EGrEUPcP0viLORGxG5mWfVvfdy4QW21Tw945x0FZX4RXtsx8xf8z4ngx1AXVvW+6vCh8BbM13MbQunlaDD2qdeKQSUlzCkCdgbMwINmU93yAINshCCHGkUIky9gAKAUSdKIgVMr++uyDztWnv1itxzfkFAP/FALzaVcROZd3DgZGFzH0HJT+4/m364nPdpM3u54JAN2emZYbFypKk3/oO2drAMi/g47q2zj2AoCsciN12dJp7QYknZ1cQqSjaKSfz3CSaXUXwpTn5zijNXDLfBDRaeTx4FpoWXitmgrmYj5Z4oZzqG6IrPyrufzug9T5/WTgWj8kd9p4fV+hSaz20d71PXNy7MzTJv0cbujbDkmskarTzA5nIfmwaaXHk/KRIxm6xsAphOAAUIoECCaH1g/xXEBcll0AJvSXpjI5+146RYDhguvgDyCAuFRUABVTwSHrIBbl8aY9JJE41yfA+SMXasCtTPAfj3FoGMqGe5gqANjF3Xqou9yL53Q56HfEOZwF6xOt6Ivjm1nzqxv/XD/FCOTWVeCEwc8IAIyBe8BDeO/5y3vi6MVV4WXBEef1exxU6tUoJwniDCsj+fRUxeb7HNw6Mv75A/bOmSRrqiW6CdXAfd87SGa3lZ0B0Eu1sNOVgyih8ZDim4wWlrnndcyGGwtBxQl67G+z/Lvz8ddGdHiiQoHnphV5yVjZBzVNJ/5kmb4sBj5mjGG3Huj90h5OIuVJP7BmodQyuvk/1ogudOav4AfCAcz6AeBgti/3/NMxnwsoQMZwklu6Q0uML6wxtND8/IAsyGmrzXKM7N0hYtTB9P4TQnMsz2ITic9PnWG7zBCrwBurAY04sN0gyC2g0DXxPgW4zmJtSrWvlpUyT8V18JbBNsYauLyck4GvjWaHOhPLx/+EAEh6q7vavoW/yWO9QZgH13OWXMlLjAEzEcJ+br82w4JrThj1/2aAm8ka1n6+Svqt807kvXIbZ4xa/K5yi8e0RnYiGf2iTYDDWci8VEBBP01QUusytDi/bzehWH+32vnsCNFFKUBCkEgTxYQwEAEUTuWlx0L9iPPP2KnapRhLNOJBQ4bMxmYBFYrnr1LG5gTaglSPocVMq7DAcQTZGYTjpyGxhxgn7nH5X2LobJtrfm+Tw3H2momErrWEqk51+Pruzf70glstSbFbqU/QFvw84zQnnG7k7tU7RQIJwhhRoqCSAEKqgD2QinJHX/2tx4O+36PIZ8czprrXbixAV+5bVhOqd5b6eusyWso28TmA5zOTHFc7g95mp0/nlsJamOP51YEwh0QPcpJtSUge2GZoWqS5aq2HOE3vyvVn+IqqCHoPOijlaaaZLg8cdpJLz+d+9Dh+sNuRQxjjPSzoJU+htNrCwRngFY7wrBC47EgJOrjeM+s5y6XxAgEoJ/34muQd8ojJq9mz2Sy/Q+jVycqBvdjweOiAjxZN/HSSJfzfx+FiKfurr01RiRRjnuRDwiYiqyFJUjte3TF4RrPjf71QOTD0Mg9Ldj6YcMzrdlx/7lU2W8zJd0K4On1ai4IkNApq5Zb5/VJdH89RXdsAZBZvDB8xYfFVjXrzr43mGq6rIo6liZJbbIziM9AIXFy3vX0BJdfqZ2EE1Mf/YzMwu7iFEDkTjvkUFVdlGP7W9L8rPCvoW3s7PObZnTppPqSs/U0+PcTuxuppiVMCSikafsZ9n8uCx7R+iBQF4SdNOaFHyCE31JL7Zwrayr6ueCkDKmJfS8AMv6lxJBYl7js6IoTIoJkHNXmktotC5c90x7ou7ZEfBCMedSCaxmNlE38HSVdPAEX90l/F6xzYbj5mr/qz+4CUUlGlp5V33azwNMeUEmjDUUELZL9lMokH1Lrx5hgptdFT6JdFi5XTasUIuYIj1wmKhJL/RBy63xpwbBxsOK/5YnPPKopo2jJpHiOZ3BnLEm/4Zwsb77PRIOgMIW4ghiAdKf+KMn7BiwI/pGDHUUmQiEvWk7KNX6Z9yjjs/ktwsfk9FMhmZqKZhnywew94hfk2Dqp9N5XdeD1KSr4Rzmeus4nKVaT/pzGk1GTJSu0syF7sltTm05peC+jqK9oXjF56XcB0m/fYvEzRb0O8N9gsVd0N9/wmYYTmmDnSK67RQRz796iveHGNdDlFf5V/EPnpIzA+K8fHWS3dLHlI7Y4HAnydwSsZTKv5DaGgZxo+2bRbv01IA9rR3o98wTAzDzAE4y7Ja9rk5T3TKbBYwJYRV00gkyN28iUdVBEfYajsZ/umrMnn/8SvlkmZAhhEXQXxC7O70IUBmPBfF6+nlRMIzKdKNd11ouOIpDn0p8F0qwd3m4tReF2Ao71CB30fXw3/9BhWFQiJb/374ZxC1GUEk+5k3FDMQ/gf/6Sfh1XyM1RruFveIeM0X7T3/VaqRSQfRuebQZvwOAq3S/vlUfhcXjB66vajeMquW8JlqT9QnZVSD+Q/xfPPJRgSQPqatE6K9AQ8kcRl9CUYfU0EdQBQdSgdpCJ/nUTn9vG4/usg+ZgKtigPLgs6TaWZ6Qlzwv/nEy5Q+rD1Uyjr+rYnTe3NUh+dQb4A5TidIE5xhXjjMa6Pi30bHoIRgaGCRf7HKvlDqCoS/qoX96OU86XWmVezHmvJP4Z2nzzpDCSnkkM8RgMTYJ4nL/eJND5Icn6ZpDUxkFvQPuIL2Cauw4w+gbPGrfoyaE4I7hF4zABC4IIKV2BPT+VM+W4frIij6g8sZlUd8lj+7TF69betHY9wGU8dYfgxzi4QXXWsaMW7lGAAHPAm1RZRP0d2YOhBqHZPztf8whNSF24do+krcPfO3oXHI1U8OkNl/+Y2xRtS/ayDnjX+2kmd9CcS7ub3kgE72yJFaM6wmyeXTY/NdSqgcQgU4P7RT6FuNIrDaGdo/WZDJE0OrYpd5yI2Wozg7Svy5AJJMnNsPly8doUsuN0ySIXfCPXGmdRqP4ufdx/i/dTT+ykD7WZ3g8OjPNAqNMj3zUQINUptIuLWxHbIkPxR77G82rtrS9UENhMrUtKZXjlSeZBqNiXVdwIsnq0lR+M/kvj3Dj1icMT4cnXTaHt3fZI/uTV47p78DtNXUEhi45XYsYuaUtkfsV3a4hAeKCnu8jnQb8WioTd9N5gIYxLP2E5R+R0nVBU2/SNKsjLp4HQ/7hm4VCwfwyz/458Yk/pRur+u/efSbrKWIL/ms8VLlU6HE0hCCGX+U0oId3vZItgkjUZG/1pzcmP3UHrtlwFlFxFc8ReICqKeQ4xTa6fPaVs2XApuW7I7M47+woYCS0qRJ4Ujvu2XxWKJojwHU5jru/TkyT1n0+2d/07zt2ZRjae2wiKqY1ulnyn04ptMeWQmwltu/wqdimtfHRHuYKXEakgl80UumWAFswGlFT1iLu5w1hNb4dktovvatkxT+pkWzsf+0lJQ2/kfxyBt3/rcuSJ7ODSQ+tP2fGSgh2VHmFzgME+cdvWkMsfPYlWwC1D/tAMF3Af6TeFj/a9N3M0myLRz3RX8IwBt2qPMMmTVMbFHse18relJJzw0XhBtnLRVjSkJo7W5+WyX7tFLdLZYX+0UBMomPrJ3O2JKcap91VdJXSg8ECZ4Cigw4U8mZ9zh5AObWEwcS9F02PsltyZdU7XDqZYZSkpfSDR8H7AGBF03Mf8GOb3hcnkWrHkFmvtkSy57K/VpCx7Wb5eYj5c0nrwFvB+B3LiCKPDua5mMSg3bdJGstuZsObdibs5RY+Y60ZlZ8dbfdWVqHn4F2BHH89gyTtlegt2zsVDdqJbkx3rbc6UY94x3ILgfE6sypsi8yyZMPjH5iyGBrdEI2QRyYjghithEe91yOKpdCjgZ3TqeRd4g+KDIDBXwAHAgLDFcMDqqKPfO7SrhFaDmH6CnpTINRNERpqKm8jnQ+P9amJWnDBy3mdPZkOA0h1hg6TwtfG770fjFA9bilYAyf/dkdNo8o6nFxVg4Uv987/6o95/2BmKN0tG1+hzXzTma/IcHTxsr2te11BoX35Xr/EoqD3XupNuRgJPyHgrFNsyqh4SKl19e6bjiPxlrWHxXVA51m7gJkKnGMdWwyRoxnSHghH9FX68t1edhmNLv3VybQVVEmNypiP7pJ+HYVFrHcTBF5eRxjaKFo1fBaBDkeRbzwNB5kJ42Dl73bORll4ZKUpI4XVlGAZVrGP4zAuRF1/V8J01W594PfTBuJVdVI23GTVeQW1K4HYS1lvG0o2x4TJg+3XXjtynRrth17yjujpoUqmugI54Xf3UzDwaN6RhNQDWXUjIS18JpS2kxfV9zDyjHaUdd7JeLJKgfRgYQIx04thxiwz6dwi9Y4xKyR3GRI/JQbFeuUo96VL38FB4KNtkvuusdv7tfuzY/qwj/KXflu43f0+r4vT9Dt9AiW09GjKbfhfYhpgQfhHLIEZ4jjns/9oWJs2ytipcOt0xE4n2edcU2+jQXS+t8LnoPj9D9pGoZKlGxYvjduw8LMxLUVboTamKHu+hJlCl3AoWV6S/vLsPg4MtWWjk0F/QN1j1nRfFUKOA/1R2bdKKzpmPNHRJ0AXJfLnHb6Z8sJ4JT9CBOi1t8LSMcnb2f3h6vOJQK7vPvfzd7WXj1h2OuTl+bnnM2moSUukVXyxT6qsqkX5IenddO50olQIAcWPNjG1y0f/Hiw/f6poL0aSqpWyzdR548ingf4ohtIg51D/RKDNh7naFNKlHJELBOvydSvYoIGLW0JPkTktX82HKlfKDMSUNq+Iw9+P2rnab/XOYEG9FQCASdZyPDU7dP6o4ejbrS1977No8mD49352zFBkuz4aenFK9xh4ZfXZPsHPi1xtoxaxongNYvoAUAATscojNbnlIUm1H+yUVMaOa7l5Ag8B8uWIgB0pgBMiOR+d0i3PBjCSE6e8w3317Ld15io6kZVut0Zo1z+vmtGRV89gwbwHmSzxQ6mbZ/0/wJpUHvQgDJ5gZVIdB+Hl0brZVzN7puX3Y20BHWDkc0ImqQxtkTsPteU3gUp/w2SP1ZnjX7Iwk/quWzrI8tr+Rcd9f7K7oetF+Und22hYxUIAC4U6MJNF1fHwocxxF1RR8cvYGU3gR+uRx45bQT/38rNha1O+3YRuVSXJQhSFKTYLGmjqBlh6k0u7Pw73MNlekfntfF1Tj7zkdcM7yPguAD1DTFQKKex9lmEho7vH8Q7V+rDZdXUJxS+AAIKbeFMNBAnkEkoRHkJFC3ohQEgB6AAbAED0lEQKnUj6fwLH7d6hZwMOQXjV6CVg9qkNp/3gzLZHuBj4QWFNiKbpZEV48iioN4b0Y/8YtKzWRAbl30wkoiXM3jw696IIV/CNX61S92fbvM+ob83oUeTlSJLhZeXXZ/cNR7k26G1r13skoexePp1nv8nk0fyydzrnPtLW/4//YLq0HXydQu7jLSgAH/iEeHxcoVQAiOnhYOeiKulq9GDtU7wTjOvQMkmCXtl0k5ePhHAULgJ9OY71/JLnh4ge13Q/SdAAKA3hQIABUVaCjMNMFP16vGSbaNAOrp7/GaND8NGHiOgRuLy0ytz/f2aRnyRQ2YJdi0XKUHj4kMks55dvPdskSm/1Ii7JYKmA+B0wAKnUKAqoS6QHajsXZCnLeiPbGuYPKJgphOv3QHsaqKcVZvMb6sl0aWt2kVXQBvkisir+cXNGvaeW1Sp/aYGMbUIwvKThwr30ByytVjZL9CJWCqVwR7y8s42/8y5rvkh2OAoZBBs5yrVHzLsXaLZcDPZrWMFBo16kbtEX0Nw3etXrPgcEq4Fks/bFzIFeevPlg7TcSjzCeAD5R+pruZLmwscRONHJz43eOo3xdvK3DbwEbL2sPq9g3I4rEc1mtLKHLmDcrBaLj5weSAznbnt+OVi/4o1r7DdCYNd+RrMOc/EaDvxvt57jqys9otGGj4RzwF8KgDuj1UKNhtKI0L6Ls6t5fI8lQxrXXUm0Ka91PZP60q4TyAT46jwVohn2dzRf9lfOE2M686dPYMsqjyZDvLRiK+N2dOdMEl1k7Lvdh1pZTQNDbwlCe6j1OKB0X+dpSMOCfivDe3z6q4v9XzR+tUnt+2AGwyfBbMunxQ+KmBfmMkwGYX3UuWoOWAIp3GfnyuDMWWZYI+7C8XjTRZnj59pIY7C38+kNK4WxmxX1j42Sed9w79vYPEJNZ9F9j3lSnho60oe6oZlvF+d+Rlt193enxiqheqOx7Wx5/UBZwtbrR35o5LDbyLYDpU+fuF7EX0kO5Gqw+ltPzFIv5gdo4N3axsz2G/AWjFh2DzGBhhD41QHeLxbZoRjscyWUU7MxW2vSwud2HRcRicBujn6ouchDHpyzoJmStKmVb2KNlVVSh23Ufx1Ntl6j9WjLzo4JltS+ORx0/M5jElhZ/uc2k7tUakYmcptFHtWTj6d9MlGUxw2Lg+OW16PXdWpOIcy/ueNwE6oAA7kz+0pl2YFWedyiRlI8GVMcEDvLUp/DHR4QWLJ8fho9XqU+qoobXOHy5SofDFCw8VlzqcVH7ZTXhLzek03JP3nL7uWvtkd+vHgTWU0QvmBquoVtwrjCaV7dcLjDgDpZNtK4gXa+zKKxf6OEUe3k5MZUbXjCc1anzOGJ+cnbfZVbSTrL5lHQL8xk2a5QXm5iyQUOoqemyHPztkVZ0A7eSuJnVRI7vihXdl5eApl2hh/IdGW3uIvgjisZOG20a3JopHY+WDuay+JHI5gm8L8PULmEjEkveUC8VEhPEkul/bvbmt9iXOJ5ekiMf0oTgJ3X+pvt87rnhnaTMj8K8tPdlo8qRca2MB+feJDKNT2o1A6/PAjTAf5pIP+iRX0YaRndU7+1+xh7zjhQhI+LLCZDLbutPsnUMzpHidAkQ5P8Wp6Wv9biVeDOmkuvv4nPgO93+/7i0NGm7ftlb1ASSoA8IAADkJWwDh47/bnvKZj2MweahUuleti31XLm6KRGycNwtUesPR4RanMxt7N3rrn3IiPQqfU/Zent1W6h2Ys282+xPjBoLSQt8b0dPhkaDNo6A263bCJASiLvpAj1we8lQDs34/4uxiMwzb6QPKOHSHP3dojP49IP+4Y4KC7BV+fqfqBp9CcUVtvEjPoFjTn+Uil1WYCMqHz0/F0XK7DxdcQmpol1LwudVsP1FPo207ylKqYdxYKeSiHjjriDVPnTwTFMAlh2BJCatgEeg3DPIjRvuwX3X9TRVnQ/fnrN5ebFJ4mc57S5SCav24KL8GC/Ghbff87YbLvTkfg7TWc1jf86vriar5MvcLlk9BOhfk3qliwgVSxSQwAdxuxsSSSSUDSAoGyIGEIMC0pJJLQDRJJJJjTLkkktFAgIDQRGMJJJCcpoI0gteFdOtxU898Km/vWr/GYp7unSO0eXnr9u0PYGv2rdO0CL3nKbusy2hbpSlgmtbi/BZoUaveNMHU0avXgS3Nt2HIbuA3UNaRg6KgP7mxPHxqMlv0AbjCSXVjKxx/JMgPJPI+R5mM93N3TOyaG5VA3vShK4QLMYwpaIKIHXiQ2CSz2KeGIg7bPFgkub8g+3++rDcH8xEWtcfQQ0X6CDvFawk7vaKA33khN8tyVy6gITTEPihQIISA47JfL2pXK2G4f7JyuGCgGQM5u8Z81GnAtBjd35KXuQDTpvS+fBTEl4AH8Alt6eT3xEmfZO3QBX40U49i2ewVl9aKlPmnFaiobbCCT09+3IlRObkMfKLGRpePl/3OwWVkue1MxwMzUluitMqwChWEkMCRatEkkklA3aQKgbX0ogbEIGiSSS1uCjRJJJJxJw5JJLYoEBAr7YIjTRJJIRoIxB/9Y/8SC22Dn+W+wV+1bae22J5VhptQ5Vy7wpWV/e28uo3DyZep0kDMdT9jB5X9b88+y9ultNx9GPFlGQBGBzecdu2iHbCGwbtw2RqDBDxUjc6Q9F6dvGWb47X/MCBJfnYrtmdDYJfQV+fAzr/dIe+zVQy+630/WxhCQPUqhHvqT860gGuporAYmrKXT5qcKeGkBKXNVTX2Zv5MDP3FpBfSyZsAGi/vOmxVVFQQCXEPT6pnk/EppTKUejFZhsSjsNsOrdaC8OlDSEx/CppChggaKgZlFY2mf/Lgv5B+BCC/b9C/yY/ItzpruXGdClOnM8DABBIS2nn8LWiUxRoWaJiouhltAmeW/yKLzaeZk6SCVSzQWt3fv/MmJHqPrICfc0Sjy0xmujOtANGqRsaIeuNdPbDV2YZ/23KOqiOhR97/k/oJORRz0gLeUXIpCR9zUQutbTD3Luw+qREtjnD8ef/FiITqzO6DT/zgf6fTjoSC6sg+PsKlJVL3wjohZ/+l7VzWZbxpTxVxTCx7DF677efZPXoQOICC3mFbPDFdjUod3KX24IiiP1ustKOtK8ku8fAaaeT52d5rcWogS2ZLkjhMd5/k0fyj32NrxIJJGhtgm/u6E698N1er9Meu0bLvTO6ZrdxpEHWwOFlZ6L9uKlc5BZpvfYDePbMlyeXEMYaEKs8m6WxZevMt9ebhWjLHIf1ny/mtHQaXvqirWGLIcJPTy8FUHqedcI9fBPB187kcQEqgjHQLSpkWDl30wdk7AHGDwIAsIX8sbdY3AwRAtOdKsd1QvmlQ5LI532+68+H4+BfK5NnkBb9LNzdeOjtDZJetQ+kpZYjElKir7SxJehvImz+4uWNr94BW+ujw+zUUHFQ8Dgn6cyUUtRxJHhHJism7q9P1HWOpYwQb3Rt+uGycJocWcF8EBj7GnTRUeMg4QgMaulxYENQ/FM7WK/8cRMABuqUX3ieVQFs1f6JwbkM5O/qAe3Tti3IMmUChgKoP663pYz9oAOIQAAPQo1zO43B9vMoOL1BH80/1Iev3IA5N2g/wdVIyfHX/CGke43u/9+9rj4xW7xMfM5VJjOlWQLVFh90QAW1j5HGaTN3Y581YYKwek22l53R8RgkCv9c9wCrM4afr9WDvwkW8E9C+TA5QVP3LVgxAtVU5wDRnmlEft61eXwTDIKkyP2J4r0OAhRcCQWqTdOkp5LzWrE2cux3I7oZdjSX5S8Fmk4Db3VsnTuCLTl4MUIB2rxIYDIE3L92/Vt03n1ajaRl5HGM5exKHuVLg+/rGFeOl6KQsz3mnh/SjhnjYOfd1EsXfQcczQHe1ggCIkauBI2pmWmKW1OAwj600w8ZgZ2IyKIDsqq1pl6XddDJThyhvb/1kQX18wvouuVD0STrryTSrtiC97niRA5f9lp039oQCGfmUpbp6WladgEec+SGJilPkSCtPLzFiqPw5/+PKDsSOyX9ejgIAzenP2yEkC//Npyme0lecfTTC3ouB7Ukk7oynVabH68qkEaXrc9YeCZcIbb6wAyAIB/wE61KAABuL59LV6Q7ABpN1cnTUAh9EkjmX3b+uZU9BjHRIQEt9jwAaoRdEgUJBStuu+1/YRu9StaxshuxghY+lZDfv8jo/cs7GUDhaahA6PDxc3ARv+GQySrVti6OTMX2JghQ6hKV7+gZQn7fKWPCsFuOpc5uStUYMYgxMjHWbe5gOrMKAzKlkSwTXmhZHp9jJGkbEJtxBb81NvR5Qc3xEVQN2jLST91edWXOSqnpI6nf9NYDXLsGWqfu4LcQ03riY1zyqeLzt5XtXEM5VIaETiKkmEz61Nrp5/zIfISIhMogvgPK3v9NPkvuEEyChyUkJLUxSYzByfI+VUiewAcGs79mydDXQKr4Scdx+HdeLhJUm2ddFL2R91jXmuOLkGtVsXclKzb7ysf39xqufSh3DSPXZxPf5TMXF4OJterkqW1aHzBtNmzfO2xtkcccMJ4lv71iNmQxwwMuMDONGjjClLhBpu1quDtQ9qap5bbWZl8aaB+yIrTRaNbv2UTwoFO2oDK5O5VCKkbRambHFOTF9O7jUBcq9Gh5qiCe6Chprg5y/KRu4x8t9WHGPuTuSldrzFiKX7Y2L3TeDxi5UjcHckJD65cIcKRaDjfIomiKqbdzfexN7sVTK837bPDZ2RtljoLC7+O74TOryF/jH/rRdk+t/f7Gf/NCT2KrqlHuDFUK0PHRG0ZrlOM+nhNXAoKoUG5pKp1JN/ot1uTmvVnB5fPWG89TM9et7TixM3S14jIDeEozCXcK9SnzEYIhuzEwDfWrwg7O2JWpZhqt0G+TnsFDq52DjPL5sf/GJ+o0yOok3+5zFLh6/yDXH8j/fliCI0Z13p0FOhFs0+dcBkSPrT1v/tIxKucMqhrc2ptM9NjT45xvhz4+IN7+Ea/Izyk5ksTvvnPCWX3VqiLgwh3+MH4ytd7xpUqCUOiv3Pp0ZNFmtM7sERNAK5A628Npg90MQuRpanBd3aGSQI1v7tcmhQxC+FH6wMKbCB226cXPK3gpTiLCkkopXhmZTRD57wH52PtUib2LDINNUyQ3xebYNcYCvDCf7Ndcvk40/cgKTAwxPiF3LGyg3Gr5iBHUSmLH9yUWTEx/R9f1C8Hq1/QL5w3RsegoHeVqWqQIINJneOut6GchS5xY3KXMnoxt/WT5EGBmANkTHfsi1zU8Uuu+AQVUJCNZIX3tXPRqk3E1m0Pn06ho5toeJ+NetJxsQ354r9WBxAFm32fV2kJ8xM7Y3zvsfJUQQ6FzxCIZUZHyVVRq5kVluZR92KliGgQuCZmpmIshfpELd/Y0OfvSzdDebHMvr+2iXYi3E8NXpSZskN0cS3OUodjPVKfHPag/pTrvy2YEtZQrlWivk6l5jcwxZ5Uy2EJeuhgH2jhEiUslT+ZGybOitKxowwar4ffz4hzIufpgsJtBMygklSvTAcVL9+wrrfU2qRFIGhrikhrZtraHEI0gS+TJPRhUorXnFHn3VZ5rZJErmXR0i0jb2keQpHLfr9CFfmTlfaQnDKEtdxnhBBSKc/xsuFfXr3dDn+IjU1MZBkGh4nvvYX6WyoOvaqjspyM+GJ4bOM/u0sBvYgFE+MKomdbSWLylupBxk+KIyzJtFQkXWJ0sH2h/GZdeRmOjfeSUTE9UzhLWQYYqOU+tqoiAwj7u8w0k7koX3HrX4DX2aH6WS3U9yScDUtx0pwfGRu2tr7HyYJhkKWCqRWLDUc8RyVzc6wgPmX2Uro/N059V/3lrTqL2Dh2Ie2zDJCMDQCTqDg3/hZNfuzhwcvGApKTW108hAMgYeR5RYihchkl4sj04pOLE0+RX0lg2EkC/gIYGvGn1bZxJs9MNP2t6vsUY2/I81FuSIfnihkyGMmQ74EWoemu/c+4eINAtmd1aPNshUvON703B8TfyAZShjIGig/KNwJtEc4ZtDrSqAYbcHJiIKKJDwp9De4i+/Cffd3Q3ZiqyU3OvUDkkEzOCrPiv3E7m54MGChQoUKF4mXWKXffWMXXaewZGn6Dv6nof8sC4Ja6tZYypR9/SDrfTe6xaT9ZY3owqT9lhh/ry7fCHPw8YsDxSv+1J7qP0zeltC+V5sVjyneS7BXQt5yFH/bpIP0KQb4TReG6R3Ps22Uyi4e8WAIo7YG8Ph5l3HDc7hkgI0RisqZK9Enpmylt9zq1w2rafpLwXjrakfHXLr9J0voquTqsMAbMCkoKCefAP0AIYx8N4RaGS2wjB/eLCHfJy/BHd4sBLpCNL4Pt54BO709hSoyIUKECbr8GDBAgkyc2L6J/ngdsNdD9I1bVXcqPKnqZZjlM9TF9kht2b7bL7ltH5nI1CsxW7be7HNwemgY8Wz2vJO72+D897yxUYuEIOeD6iwNNUigI6szjweL4jjxFl63sLcAiBeUtoh8KN0Le/4m/f3Laj5oLTusvW6/t85WOQqvpCANiKgR/YA2QASgIAPgapxHBnVRBn/m1tbx8HloJECCCdYn2cFtlsBsaF1u/1eJs56zPXbgqX5I222HgRkddKB8pInSUyj4TD1Oro6TLfNjP5eTp2w05kzcHOcy8O2RJSm3dxvf11QV1UAfNqQiQEe7hkJunjINr3tP99UC7C2nFl869/3c2iw56EfKy6bFY53sRcv7Sx2jVjn6P9H5yxdIXX1r4yTzH1RAunS0kWTkvEGpx4kq2ndVBcgpx062+ySKbceNt0zgx9xGsOZ9YUlB7OEu+maMUm+r2iEU18oAFPlKIA+kC9lCxQLaQEx5CYfeLMyyrwTB/5dmRySAGIZ1JQfEXdDtDN7bo0icR7r7sS3Kvja9X0Kq5+gKmxjDP/3DqSBu6Dx9EH0ZWvjB7eWhNy3BZAYHHV/RRYojAAg1k4rmqQoPbm439RolSWjWkCZEe8EADku1fpfkytFdHRbzJO1XK1h86OZ65fT/+G5szO3mRzDimvNjdyOTwmmTboAcNOgYa4crTUQ1aGH2TnEvHwRdikNOW+y2CuLF7DAVCm3BnfxhKpm4qCcxKh+bMfPz8DJ2F5gQ9yKsL6FZBrcmO+UiahPk7P+TMHw1huoPd/qMvBixgsdFWm0yUsJsuUXKMZuGpyXZAU4kpst1nsLQf603EIDceEvgBovjt0j7XbGF5DspTIPGDj7NWcKwoQXJck5BIEph+O7v2+8KI7+jAtFh6rJuBnzOqK/hWXFXXvzVoEPNIslTEdim55Vayl4gkwIytQTIylNX0oPQPtje+/LQBbBHLSXOq4wAfBBcxZYWYXmWn7d12AJ63fv9Phfq9/nYyYA5hfgzCMqEQe5fER0r2kCkOwMs6rcJmwS/YSLwt/HX5olpgX/ki1ggX7q6kyWOdzBghlAZK17IWJWHlXEGNZR4y4CxZ8lMsiJq7j/y6ScSqS13TrShxki7qw537krx4F7a7gYAJZpOQwP2LRhcVf4LJdNvhKcXgltOxpjkF4RvwJNJCJMm9+HHjYOhWGcdJKSE3+CWN4tVNpQ0V6v6rAZUMqK99reaL1270SFFYA+ENgi4Iiu1BZG2x4Oki8qdDXQEOggKb9tk4JVqGYxCC3Mz2llvP0KfVxSDF5nPG70b4qU3NnmOoINt8zqwGzSQTJqBspFA7iCrjOSfJYCvKohI0WUx3SlvkK/AEEl4PYzEG7x8UCfbeWelQUtGdZIDw49HPf4yKoaHl5++00bfMXPW+hyslDc856MPadn36ouHhWiiHUABMUg95TphWIS1o5usaPM/TSoiYudgRMySz/OwBVqQXItICOL8BVsR53YUaANaB4UIMmTbOeIXf51t1AY3XAK9yY1hZp/e9zbWvhLAJJaxe7l3xOEw7h5XyIzAnmt/65SgWGY9MnvNfIN71fjnwYrxwb43S785Ut46xkWdBqM12fHvhrwoY+KvW5YNYAC/y/sNpn46XuWm6/zH0tP+/Kuw8SQeiTHWlLknceHr34hT4/0QVu96p3F/3b57yq0m+jwH7afHA0mhFvV1jsjJbZbtsf5gZICDRivODZvEVYqGF5PLjGLW5yGmRKWfR1eG6LFhS3uCQH33zDN7fsDTqQCmXGh6j2noBTotXT/u1THKQ7J+4007Mi9YXEH1yrBoJAK2vjUfeKc00tN9saon37SBB+mJRbHxZ57x8jUmRKKr2jSZSvABIE6nCmfzSxx/DeDbpsbMd+RG47O5dL+JplASkmnAeVOBSi3cYuI7ICuWH7sZfhyDL3Cmthq16w4kpj+UcUpDXXwGqOcoizDv30LvVFMc3N0yzBnZb2XoyUiPl1B29DUhqPk/Dnm3RLP6r2D/Rn9iCCrQUgKP3gx5uZ/FAxMJ/KYaXPpzQr+5jUR2fd/goiAj6TrgW8vBjH/Kp+yerLteGSIsxWvdeT4PsZS+xUI1obduD97YtTEKrlGHGPP8uJjsOuBSKCtqbeSPBKz9ZWnVP5Zpmt4223tP4A7N1uPaj2tAyPj+tgC7ms1WOItApw6AkgeXB/mrAaEkd8rajgyoLwnIBGYzPLfV4MN5hVtYyv4nby08Ccs/R+zW2NvaAgbX9XTooSeYxIU/Ty4hutz+nYHOgatFtb0Ou4xihULFu+/ykgqZl9G+2sDxiPpbwl6hMZheTua24Yd/VEX003oCEk9eokR7NGckHCWAhw1XXEi56jv5PdamivhsBz6L3yc5+SgNuqCAAD6ydoww8Lj/KcpyEB+DuQl9L1iMw1sWDvGRSYQhyFzHiea2VmH67JoQCjU7brQgqAcyhi1AFueIsJVgzSiSPAzmqlXPH0GU8/z7wAAZ43b7c8sJnrHs8pMyI2fwj8de4uoZ8ORpx/keU4ioaw/AAAqZXYwfH96NSjzY14w6i/nLhLcuA5uyjnD/KiwIUL73aCfXvl/tnjZ9IdQE8dhDpZz2McBjLAUanEsq6RlO8IFeFS7Ice0wPj5hTQl8WOe8Z3NExEQV/iZoxTJqdiUg9/Jz0tUsQHzua8nThiUAQNTPs8YVyCKGcFfrmp0mPL6LiyCmgDEH4oQAAL5cx4oh1HZk/8Xt7mnel5DpyNw7qleklpb/tyMJib8Ez1P4IQ95tmerWutppt8E9zkzcORjM9T5ayj2h9wBGVKsFhVL1SW1haCzucqH71r0aH0R4xtG2vN3Wj7Y5CFOmFum/mKqokdC0jd228F8UImRnfP5iYok2x9iJKsXSd2cCCYEVKHFBgwYL0IYMGDMKV4RXUOnFw31EOAvto714ZdcYlZLg0Y2RJCp+ydVy8G9HbPHVo+ZzX1/VNpk9qqAOXaB8s3yVHnDTpw7X1GNLThr5ChsyqrQhk6Q72OahGuIVu+v2xwwlrSVXH9f6QFfuj/O8I75xokU69cTFHRwFEnAmPdKFLtSGqCFu/2oKjwh56eUWE86mJ/ZAYCGJqEA4gTBhqnNS1/xWZNZvBTR8zNW/TNg8vVx8DsnqJ0LGBkI3qL0cui/f5aNjiYUVvuYIpDxdSLsYPZXVUKXRGzQiniVPkgBqjBAnxl1biUKrdu3wATKzbeHMcX8QFq8304qjmae6drXjfcrt0+bSYpK+7kleVBnL3EZkNrMfyVFHZQ3U/7R+ofxOdqZvD7mysw++quYqjC46GGBXBOsHszia07W0uw0rE9cCYAqf32zWVhs5dcxuShj7XfUiJ6Zyizu1C/xFjL12qIXlS2tDKO0fdQx6WgJLBMU0H5iobL1fPepiFRxysfhf9ZQ/qafkY3L3e/k6StBDJyr8/V0sGeyFPUYfmeNjZyM3vZKyBpjrKeOAUew1ZJquo/MA8vFcx8yKajVA9rDSl9PYawo5rsXiS6Nabz9bYjzPnDm5dERraIoPpcc6lh6U+yC9lsvSSAtf8k3ZFWF6H0BlXuj8/4+eOVcptgp6t4yMmh37y6iGNkm1IEFp5pnuStpWASnw13EHrfxSmEesK5kVDNvWFPVqj5ieKU5HVe9MCQ/8cPy8CEFMV/w8lvaNB3jxHz5xm/dPsDifxP9qQ83AzW40PESJdr0LspynvNmaruTISaHmli1ZTVi9r/Ad6QbOJof73b/slGkdXGUi7XoSbMcVrOeutveVyPgu3wnW5WXnBYE/gULwSXGAJ/3Mw6Pq+0cz54IlWn+nriAzGqemDh82MGVtR3A5JbTScihUdDUM1t8eLiircntdGiBKfvvX+TOd5jayLhO36wuj2gTVc9jT4JDPpt69LjV/MUyOjay+ehl1oIqE5gvaAknhhsQwTy426TLN0FOzsEIicIZ5qVS0fNNYr4qEcnwOxJibwon3cGom5nBhbkIkXva3gBx3IRCArfZvHt2nO3Ef6RJzCnfmOYRbcdfEW9Hvx/M1P2HCBAL06jCd13Wcny7YZSW5ka+wVb6SCBX/gdfdBos46lYZXUTmYfPPfOciwtXsSrsokxIyXE/thpaZJjtx2Zp2FofR8cXFNWhPer/YlVzk6on+HHb0xlbEZ3NhdYMpZc7GXtlulkIPONDyWw9kpTjZFWWeRrpSs9/FNvzkRh6Saq1/P2+l/zNrRSpinLU/PtWCa+kMBmBvZq6TBL7n9Mz9rXiIsOPl3SmYqh/yMdOnxJzatOAQp+QJIOVfQuWwXhWug+IAlWngASeoWEgFcy2EuHwp09Kxzisse5kTWZgFh2cvZ+vSnNDNrynb+CuGEJcC6zYfsI5vLqATeN+OLf8wbEH9RMETJkiPnLrNUhc0cyDjPinZdLw6t4n4HRFS8lm7pSvCoX0PSZGXkke5TeJjZCB62rwQtk60EcV+EFK3i3xkHrH2VI7aTcVqd2v0XOvQA2bKuJdHCmaP9y6NJaxZK9XBoDkZl7mEX1g81ONip+FMlEDiNiYma25n3Fz96NiCzhU+PrN377qQvvQDMmBxoykeYM1sS93L4SxWsRV3XhogZLfCt1U0waj0PERrcqLm13WennhV7HHTjMov9knr6PNsBwBp87+nTTQ4xphTMkwh7WRiv+zzQEZNUWQl8tQHSY7SugObLD+AgUausR2TOboWN4tHN0TtsM0B8z1eAUX0O1Ox/3owjM5yPnshaMqXly7JHzWaBERR/h6OiGY7LjWj9Ny6kPDhDc5JDPhFjOdJ1hN9wYp0adlmlvkQiQfUIA8IAizYw2JegRAKsdZ8HDd1qO2DNxlE9ax0HC+M6KZ7ku4w3jMk07tanqJKZPboBdHEe2Nmy/YB+3E+MvNcYJQBGN59A0I9SXQEv2/sKY9f4sFUjI1yjshJueJ3Kdh8LIsa2A/BpAuAoUAAgABAgSvKCuQX41f6yfgqfYOIiA3ZlCmi22PphHnTp6ieL5nhZJ633phbFv95IPJHaihB3JqiTJRNstHOtbjXglj68uMNE3stFvyyO8ftPQHA75F7YiK/LOyV/QkxJPGJwdNM2oHeGgA/F5WEDM0fSSVwN9X49GqvvI7Owdou1pV9JI3pGPzhQhE7pdilwo/fvtXTOsmbqtPBNkp5++FgoI3S7nzkgiv+hTGPuN/M3DI0HhU/bp4H8ggZ9sP8pnV10o7SGyrNqepaOisl/s9NyuvEby5ad+R3bfTiL3cs2ST27mvoG/bMaMJh7rJSef4uU8LyB1a0bN1twMZ8VcOewa/WdnwkI7pE2S1dMP3BnSG8+lpdVrO4Wyly5zboI7ExFx8LZ0fBIkv/F+xVCaeBAaeUOMFLh2KWflhCb8S6UFURSFojyq0u8S7QE5thYh7HV54FvkamPP4Gbv38DzTOGo9nVh/vVjByasrv3XUfh9e0yxmc9wI4cVkTKZ6CKf8eRmTKYeOK94O7V+bbHkx4HY1J4kCp+wCjT0yYzwGL8udm7u4eXLTfQMpdegjyIuVoMGbAoUSmpXoa6ZDFZupvCnKZIsY7/Q2LbnyCpzgaR+9ghNLwvXh9ZOfbtfGRTpv7pC60owR0+ovxT2Juk/Ifc2+F5tPKkhdq1Smso5N2HvKrC5ReJ+SzCLnUhTJk1AKVVR76Yib+viUFQ/78kDCRx7gkwLC+A2So93HLnphEHGci87xqo1J95r8fEVYg8gzPT5yI04x8Z/OY1zVV6d9+t8raVqAw4eetyfvClWeeFr89zRZsslsvdGyz4UmV8Gef5zRyYd6ImIym3ZlNJWwOvTwUI/plU/dbL1mAgiQ0JndZf+GhPcDyJoT6lfA06IXs/qiLWR3oszh+Yb8b/Jy99tPiUxOdzEpC3x0WjtweSuMoU+o4tJTPpR/WDuHOVwApv9YgCwESrGIt3X5mFVwhcFx6Vx2lZoZLVHfF1gqCRf6FtZmQWfT34doayi3xHX6d39wnlOldzlC+Oljl+j5y/uto+ZIo/DqcwarJ4T03NYZmbkzcPoMb+Becr8KVeb0/+SJp/Uavimc4m09npy0AUsk0glXfstZ2oT+uskmXcOpRQPGH89IkivE/Tyv+/v4GmN7ZtfJ0NrIn440AKM5sfLjwlNuQZjgBbF2aVntdMPklDnGVyh4wlc9rfISE7VorDid/wZadUJJfV/avkMMJyp4UUc9m6LO2xZu2BlEXde0Biou95zvpGnsz8hM7pzxZhr8mtBPDRa7np9ipax5P4LDMT0PlQPlv1jlUlpwe88Wb+fG8at7vGv6DcEew1AfsJ6BwziIHzbVfE8FgQtvVF9qslVSo0lGKk4rJ5lujn9t+dtuHQOfROElR23phUkXX6fERQHgIa4Ma245Wi4hX583CMTPsV3+7ODVfglRshdIpOtwkNTvMfxvnJp7uAL+bXlx7XqnMGw8MxAZb2m/KriI5e3VVJ7HOlLy13G4jZuFP4+vL20onIfY3jvoaQneQammuhc5WbvJ6WGbjA27DYPqW3u+fYx2X6gc3LUoyN6efPugyNOdXVZ/NNMrYUQC7WP0bGrn+w68r3ZcDxZRfKH8gh/rNC+Q7mKCEdt64QSFzZDcOhykznPTBkGjJO9zUty2uNmy6g7+HcZeAtwf1g/+KNsptB/rUd1+TGbL7xr2CFUP51kMEUZt7BO7bC8wuDYUHvu688ZzIlEvg0w1sdknBOXn6wsTpSq9dmQZYhSJ/7av8RvKbeIbqkzi9fUK6prZtsh1iweyfx1FmmwUVPW87oyQWLpwgX/0Y6SF9zaSVrnEi1NvEs57ULCa/zd0wEVzIdykLeAyGw7ZOmXrtZwBp1gy8lDx4ejhZgSEe6rncc3baEkw/pS12dZEkO3uAeKuhnFdyz7Pew0WmzXiLeZ8/7OLIKk3UFbsbEkLrxSIgAaYMtvTPBwUbDMZA0oMU+8h8P1CcFqHxNDAivH/Xv31/OZ9i280HF/J7eJrMpOkUSyRWjvB3eR2+JcmWFohMuy0qCB3mh2d4DXPBfB6iHKPVm5w5EsSkHz4n7NIQG9/QCrQE/ca74rGhp/yv+ezjDF1CkFZ53eaT+dKKQx0WABJutm0OrNL8hV74OrAozSq50CYele0Wu7J3vVGoHC3Zu7GFJmu7DkMrUgT98Pcx42PMl9JNZL6xTL7ACY5ABk90RqICFiXHbB7RuTSznWebsaGsKVhf6A1p/nDhDCPo+w1I57bdDK5NKHg0nNK2vLEaiOl+CSOJyhkmInz633josBSHMUz/0LPRn6xauKK6+JrERj/0at5lIdayUDNUuKIGBzbmQacUR0ylFsR1XtSwGMFXQhVxY/q65OhOdjxnUk59PBHEeNwlgT/fOOEGu7vLqQ+k/nJR+xSHHkBOI5bkpU7EtWo3II6mHlErRpi5um6JkxAxbFVYnZkUm3PkQZFuTg3xbJZPlrHOp98zNObzNW4PTihpHTZjOc3sklT4OEqaYoDyGO7+f4VPL4ZvHbKTp1pwnxSUmj8E9bQurzqOzyKATl0Ff1x/Q4RQ9DvWhtnHiTMA3bEtb1qoi8lOAnmPbM9ws8WGzGPnGJp79wtwRxajSgfztMB4tStz/CBi9+DrTlA2Hv3vvI0DecZGHxCd1tsg6sDZkJJhRDq9Cbau1DnYgTM72r0+7WGU1s3rhoZF9rvIsBsBGEV/byOp0PKO+Y3hXxY5o/WJizrS6s2xs+rFeiQiW0QjJfUKN9sTLTrqgB3OJox2CEasF1EZd7IIydnw47ZaZ3cN7GCP8nmwaJ0awsV9OSxFiWpXHxw7qyNJzIH9EtsfvdPhN4CLtC5g3KDteT/hUPhilE45YAENjpGIsnCj2BvMEsIFsJaCVXq8Ufu38W8Vz/8WbWQXZhm5uSCji/I2AuRifXJ+klxytL3hygX7G7bEN8tvYeGXSzUopMLZy3YsGxRX0vbhMKa9gyr9FPlcEnGAc6hpaqsxVsW0sM+8y1F1hITS4aoHTTq6v25rhNUudo7RJXz/j9gBm0b24Jpsyrx1XxZpUESVTJ3kVEMedKwrbNXbtdvDsTDm+e53l8iPBwlHmby+YURWY2ovaY6mUDQiJnoMSnu59ROpjX1rHM+VFYCYZpuVAFpEhlq3xsBbMoY7/77tJy93HUPXYB24S1LTgew+wVfaoXvB9hH5qvEisbkYNuEYj5LOLihcIjRRBDZVkgBqh5A1+Xb64aK9vq99YhTwc+mFCs5/XMWGKxqZ2gSTLbLS2eYmGvaH5Bqyj66BWVMMlmfEvLkXQ35wHWTIwPBUei7mqismSf7jp7Pz1RsOtqUVCZPK4y4vRb9z81yMY9EAtnIlj1ANh/TvFPet2mgp9NtJiwQ+X1DWfVTGQxB/82EbLlgFBX7ZdC12Gx8zprSRI13pYu8mgmjNccoCjA5HqmTZM7CMyVe3hnnUvNSk7CU7UU3Cfgjl3nGmGPS/0WyPUZwsSUNNl5yx65WryTMKWaXg7/cNupMimsJmqKuZmvAngxy8xCzdUWa2ftxjvJTu8ajfexxyJQdm5nE0Z3QlpxbCGxxFC8hvMz4GYOuwIy2h2gZVZLtE+UzWw+0Oa5bkeTSTG4KS9M/mMG/FSaM9qTFadVSSLGi9THpNXUs2EjIbHOd8lXgbqLkmxxenG4/1dTWmXZqT1MEN4Lntwry3pG9/xfMy56zeqWwOydE4zusgaoCu0TPiMvt+5DqjBH3PtiJA7xqMRt5AhdyF+BBS4ejQ3UfAuLSIGVB8bDvZOzr19OTYU35+19w2RMSDHOP45Gwkgl8N6AExLZOxn1B0LJfyGKFUNSeijP19zVuuDxqn8uRD0MZJF7jJDZseRuuFR0lI8OAjAy00U5/JVV2M9ehJoS/P/j8GMYEL4hwn51xomxmWU1IoRJAUA+OFtnuEYyvVK9qbSq1gB1M1nXL3nufMTdTL6cJQJbmwyGbEZCc8WmOm10bvU3jLLZYhlT1/8Dh3KTI1JwfRgIitVTxGRX7dMA4W72fHNc5y+Te9+H7MXdXwLR4t+iZcXj9yKuZL9t2iZhM0CJskQZjX+wvoKin3rerc/COzR43u29doWBZfjK8bjLsakh5BY1fFzVoH40aG9wvD3MAQe75prcyomJlWjprqliUcDMhF1jlnIxlk2CxxwkEnEl5TkGjo30CstEoXVggSURMbeQr8OT2oXzjzuJ6UsGe6OSP13bYdnxH5oeCD9uOXpERPwlLI1KLc/YgzPUdykzYof2RQWg+/MjisYp+ChE03TNKSvptPTpVgA8ZIUCx4zyAadKkoobbIaSjxXhlaza2cjIlidZX1Cj7PrytDe9C63S9nR19vn0jpYsb3MORXAdkgbrwFjcxStf/kKIxJoIXDYHE5BbEP8iDFfnp3gUF+eDmn0YfrfNRdp4j05aWZcoZwdOqi5nSSPxBm5hwekkGxY8kkfBqK1hanGa+5uo0vpaDF3u5fX55r5WFCFXESHGKdda2DBx1j1YJoFHAjlJGNiVGS5pdRLqmV+xP8zT1juN++rzmX/2SzGVxu4xll1yxVbvG5nOB8bw/7axzFOqmk52hYwAoCSL49Gd1+zXe6TY97xYmtvCcdrLUx5ZXBFQpTbaCzAgNq/i4brLv0oTRyvJv+DDkWggdNk4/WOuP7El1x/cfzNqgD8SuL1ymqYe/ItANTkNH+PffgvIc/W8zPMXtJXvboR96o1mjijeSZBtOc/ekTwKGyEbQ+SgtmLel651UKDyywQf8cW3N3geJBGePvGkoFc7EB87CAlYWGgBZbznpxMfVc8KFYehUWzSu+lP3KNFOH/iGi4aWx1ph6cA/tzilvZArI/aZzb/UDR9nDsPwNFv3YLfMYKH8KJe6c9y7MLX3KlDxDsfgVM/QLu1qeIqcJgySh1und2um/5Iw1YEaCl2WVAchJy0vXUO4/z5v2VeM2G5SO4RYRgkMQVq33r3YJxx+bJR6a834ZRhn0hQaTcHMBdR/AFkxOLeH5qxzk8ks0HJ1sgElDXVAoLXUleeYq91NsKodbtwXqnK8+WX3fqmjBLAlflTgO7NBp2ErXhM5KMSxXHGcAAEsOQ/jvyTnXW2OM0EdbPhdNzO91J+tYiZ+Vzs+6fLjjONlWUy0MlDBd7oGOeMa1pqBH5KbtTdRccZK7rBs3bYFO+lZ4Z97qO/myIOIq6FElIgN2S253G9/gAN7Pa+1uo+HsP1eLtb3In7FVsI0oSmmuD44Zhg/9/dtuVFyspDAtbYYb4i1Cv72+9YVbZvxtypiLHkrxyEjhGJEzqo4P1nFBVLUY1efetox5sfSymZ5KInXS1YJVDzaLXtDUqTl8NN+z3sCTOF5IegIz0ZmAeEcnK7oJtaNYx0nRL/NPZwDWbjtUQz+vdQf3GzBq1ePOZuCuoa1BNlXHNfdXXt3hWwI+KzTm3pc4/Z48YDic55SMIGgQ/tCT+Fp4PSh0gKlsLsKQdhDSvBIdOlD/mnlqH3Bz1b1icI+g/vFjAukp8nXGmgRvrV93YzFVfKwuMshBL4foZoD68J8ytaYStaut0cLHgnuV/SjuCgds2n9HsaxHZEksi10hSq3ZH757A6reHsd0GVaoucdPewC9Cr3z8cS5c0aww7RWKkbRusJQ41D2IuNIJKh6Lreu2NDGFHiL2m4PYKPQeym59bdSstQn4VTrC6oqglfe28dkhYyuhSaOjjli9HwzH/5iuhl2TrSitlsWNWsmXwoKCla7bc5QogONShki+xf77fcyLpBwTd8H8SOPaUztc/zl1Luyx8jW1xPO5xRYImK2t1xKB/RnSYPwrNw2TfXtmYGBvTC2OYNyVtAJ6HJ4X4kG9DXNRfN8lIBx7MXmCwA/eWdyhjNBQJdDkNG6Z7SITQcy+h/QtsxN/OmLfKFWoSMLPJ9hz3IEdmveO0H5fMAEd9CzKpiDnn3buUSZqPUZOG04jPWheM1eaXTbde1D59ikgyiovhUf6xRvPtUAZIq0qRBRE2xREgijcgdPb3Q/U6ZFFnZBdqKEnZY6h5FYGgASpPRR4I77JytebzteDZ2J4K4xIy2D4zTbLnlHauxrGj/vzCrbHT62B1OTtn18PBY2coXqgArq3KWdtjcBilpSQwJs1aJJJJKBiAoO65bogbEIGxJJJbAMJJJJI3BJJLCgQEBgRGMJJJCMCVdpBdoiWi8riNT5uFpbd38tkMRF1gmsa+PHFWR28nsz9MGQQwAgEzpVORIapfj1E45/+TARDCurmAyiMOfQJaQG5ZCkOa+eXgLlwE9iCz94yDn7LhKJhI/Q2xUYqCACAsImvoULTz5vzJ7Y1iv7PLT2SI61mEEdCcC5aingzgy7FDi6tMYHKBgYQUWDIdPTAG7kMxL0ODlPbN4DmCmh1I07LYDN2twNtIKE9fxGwYiRvXqemaROZA0qEJaTzFP6h4YE0AAIkg7oY/yG2VdEgU9/DkF1TZqSux4Tv12L2w6JtRH5edQgFAq0xIi0sb3NpP5QSFTzjJedwqZ0zEH02XzZs77NxnkiTP65xa0s1WRMakK63FfQt+V0fIn325Lq7wW3gdLA+O2yJX8ilbf62rWvdoClS0a3w52BR6cMqw2ml/NwPnCHeeS8v7Oxob4gFLBWOWLVjlGwaTaX3FbcwhXxvUY1KSUVKZ5cu3mcdYHGa/RKpTB05kGK5BOpG86xY3cIXYhAskn1A8gP/9hxAIBVCrv4aIfw+bKx2hFukkdZ/mUfBp5BZkpLwqYAJ4QAAlNuwY0Uu+zDqA/0D4mo+Y+d/PzB/q+r5WmAIB8CgCby+Gn16cquzvP5VZvRkJ18Z9ThSVxUIQGnR24xHWV2+F7OIUhjchlBjp6hXz6c8ZS+Ow32C4jRMp+PLF2RCfDvPM5TZ7mk/J/Lt6sFEGi6yU7UTk/s5pUZxdh1h+hCk5lk68GOxt/00bLvMxsnH99pQzPw72qmc06Vm+UPttTnAACF1kl0Lz73Uw0XuDJm2ew/e95iaYxrOXae3NQciimNKO39zhEU0e+KX8lxAHOwpYA5kngDY0Zz9XJq5k/zQPdbbLMX31v14sb46uzPdhDwsZjazvdBWBsJHkd2fp22eCKse+bHqARCAsBXTmTAHsCAIhAEJGE5NJcTOMyGjc6oZ/KHJadyG+P1Fw0mKsp81P4O/ACYeOCuhmeTJ9NB5fnx8+evqbTK0za37My+8sa7JV3O27aAR7EGgltwzJSERIxxLL1cdhjb2vTnHwLmE+iWBXDVBaAbXL5/OmBDgfsYFZf7xwOrmFno/70cqhtPyCtQpIFBPEpJl4gvs9zRFZc9to9trjR5pBWkwybSenFi72lH75LzIV6KZF0y0S0xGeHaAGVqaYsbbqecI2A5KPfiL+Xx6YZwfrlz67LFRTdPUxQFVQO6RhRsx8Pz266WyCNWWonAhuskGhI65wWD1itP6TYHgID65NmalqZrJvpnNQgzS1xgWdxxXsJWEAuIjhzY9YuHTRu6SPwn7f4HAzR1+ce6AbIEMuak8ytOmdK3B9djZNZKbooBoL7txKNG+jQOlMs6r1mR4jZrbtovRPLaR49USkAcEdMoVLO8k1dysFAx7HbgNq1FfD1sHL4jIVLQZ0b3Bh8c5SmWTpm4uK5Qj/1D+wwL35AWEKGY8evDt4xcIIyY9oBYXFpdKlpcXBlLANzQbu+7Mnxy5CHn6VgU1vgMyY1xmqgbLGwbaMin8ewYuDMjd9rDAaSByFc1onTyCNMCk4qpQTc6FyIdJCYtneG1vqLwjnzw0h5qkGunGn+Oi1Gz+nAEKE+abN+Hvvjc6sTLfL2Ll4k8WML67D47zEXFq7RwUlJ367mc0A3dnVNvPTbKs/8RyTjoOdm6ImYP9fqXkGrYjomcsh1rw6oRe+bZlMCP1J+kkPgWv0PUSJe4k7BQtJUeV3vvw1YhQHaEoMcA5ACWAIDkBWsGb/hm+0aaY1bY9tjMFAM/bz9/RSf39HU5na4Hd9fPdq7bfEPnt7+B9UCEHUKaHzgCoyhv+VCu15afZy/o00qy6f/vgK5XeFTqi2g+yOvNaqZKm6fesL6c1hSmJXldIXwByhqF/2gHoSEOc0m5/Pkx531IbegeGA8/cjRR9qx/Ahy57z2gliRgTexPpWi3iP8huGaflYxn5WVUh8C2Dbr0ORCKRaJ9qFuqlc8KM84hGmQytoT6LYbT4U/O2CAH5GfZ6Zo+I1Q55m+VUNNOFKVpOAxCuV4htSvt+adrm3CUjkB/TSdX76JE8IV2qA04QkQg70LEq9wd1AkFBdk3NTJW+Qa59zBUBYhjZGGysm7Zn23r/E6v1IfGNsycK36BxyFNcLqZa+cbXgiKRo9HAsjn0EQvKv+J0GjA3oNGf22AlDMwLwYlFgQpkwaoD+kXcNOtqAwcfjR8HUd7smYDR6Fn1hZkBO56DRuZKJFwVHJxXv4NLL4xT21wxtB3ww4vDHrycRIIVYObyhgeGID4xkulmD5XbYSqNNt3TtEOsFVZ36tBp4uDaPUC3n4w1WOL+olNeo1OaOuSsztJYy78CqE5m1n1EjO9lNWpbPblcV774k76e9y6yoeX/YgnXzNxcqgoAY4uZb3b6c81RzR2zLSAHLgwb6yY+4beGyK8i68qr9718wWqe+YMAUMF/gvJe+4YpcN3Y70QsKYLiBsNviOVi+DzMX2ByTDMn7cTh+YClKhwgS4Tw8g+qPiuydIbVdhQxPmrGLzY+ZCOZd4uN01v6E4nOgr6rDaYP7TfJiNjap6HpyOae5RviRO9aOWtop92IU1xsXs3flBJpF5d/3inxkgyErHegWLJbQa5QTgKSnyMhhIBgz0VZpzIRbZlzLHBdN1bxyjkZP7ItF9fTY49Ctc8s3NSa5+NT0sQ+W07U+pzC1PBwwAwO8GDBQsDRbjmZfqzhSuO6/cRqU3onaVSG4BA4AAAAAPkP4MYYSM/1t3T2+b+hjjNAZIjFDe+AshvuMTAYnO1Hl1mYr5yXN5Obh9tpb7mj8nLEWr0q0iYoAm2qrkIC7zcBvROc5ZqMzGXroh1wRGSl62L/QWUW8Nt9V5hy7yY9S4fq2468EWxBAgRxbVlQnVmzGJ6eFAfvFa/RRx2R9h95fzKKhHU9SVVW2HnyZHnTpw39STqL8dKspwnSKiAS0xyRAoDqh/24KoBhRjP11ya0uKXzKCGvGO48tOnMMcJe+VzQcT0QkK+KIaIJIqvynPrk/isz8WkLYoKCnXo97EUexKPJZq9gYZT72d3itGopbe9+acZI/a4L5QTmwM3Q6hIfQI5M1klYQh+csrGNR43meOUAkoRzHV/5jHsSq7PcmYzEM2e1i9DRVSdNweDEWS3nAzyHp3qzKUJrLVV1ptj+aofej4dgVJa2nEq8fuAHGIQyMu0ZQ/aZAaPJlVmCiq/9RPlsNbo7fIqDBp+RHG23sc5wrX/8k81fM6Rt72F7r+QOV4rz+lIJtRGBn2Zu8iEvBJ8tXcy4R/3RBvi3krmXz4g6ia3bNsLVLE3RWEnqCu4YYBrl9Jlz4df2MdDXXy3erqan5PYCvzoSmhTmrjCTpM9I/Zv1BokjHL8/Poggsfg5DE8Bl3zai5qMmnPMiTNLfXqKtQtYWfZ2XcEXBDTPEB3iYftJ8zKyJxCU6wQLbOTNAr6iCn/VoTBcXl1BQOcZ3d9y5kr6cegf0zvdWRyRU/y/6SsDrhjVBbezkVc0lYWl0RRrjzvTor95TTOe3QyLwVJ9IZLFZ94CXWj0Vzn5V2GNSo0DSEJOrMEMYIvGCkjH6gwnKRoUqgHNZ3PUuiQYsOKtutrW1t7rnhFUKs+NjvvToLJsv0VrmyE33b2P3nY9eDu/Q+20k6Le/N/qhWEfwM70xYOfZkR/nEtew2GquJrlbt9bPF+lntzsgzp4CHb7v27TKCVr9hhkkyz8zspHUe1IunsrpmfyEuQGyJ04dMsXXUOOZRiBpwQi0jUdRDQ57tnu9oQOJgv2da2zHS/6Zw20vpgnu6ZxazT7Dbus5axj1m5DEVeiRXNVZk4wk5KTqRrsQSRSQEuPXh3RA+PbA1011/uNRpjYA2v1RC1zFl3k14qIldbjnyLqG96Rxfr7spkzV6xyGIyVNoAGnKqeaLWJ+0phu3psE8glLJUvz4i807WLK0WIZ6l2ht3LcRIlmMaRfbQu+r9ZO4aBYJH0Ck8MMp11EdN3dZhQqcHR1eGlRsROEqEzPCfIuUxkLea56oK/e8zTlYpuUIKB+cbm7+8SPvl6eeeN4WXcF7agJ2hQPpYqLAFystXWLbfTLftqrBImqJbH8L2tISYO1iR5v1PhfSl4nuYuer3ayLchI9iGBn7spOzZB0MPfYvi7jbUm37c4ExX7XfzjWNCVcN72nEKOMrMJTpzRP5WM8fJ5ql2XE7apr5gcp+5/PzE+APbE22b1pIedS8UIQYo13mtGw1e6rgdsFYaDxabuxKbIvYErcCL+AYBlSBX3U/64W0Re9MJxbc604mFVJxpXYnYZmZN7weCodBWxyTsjuelxqFIBnFp1UdVAVb6NCxy3f5NF4i6noBqpp1nfYtK8uFKpuZ4Nm66mdbjj0AoB7iGAXw3s7aXOWnDysUv/fIge+ak/j+Tlm3d976Pns5LTp8xU/nUmNJHAuvE8EjAczWT1LWAa8aoheqdvrTYjzMUNx7oz7J8c7yfUaPg0M91FQpKiHiHkuVteYLeO7+V8GZrJiMDBc7YjB5DSXuVYdtMLpnsLmeJ2x7dMehHrftgmwBQAN2AL8G7oltXDjj1ydTYWtbl3QdfjHY17qOIRracFst/Kcc3+CthVB16/+oUoIg+Lcwae2qsJuzfh9Uwi9RS7TFAAydff7i1tOw5DWksGWFQKdnKEfzTyn7utTMebFanCTU/fso650exkTUTiMSvHslE9Yv4zLDZoiG9VBcmGs9VEAF84zxwiTk97nqlusFYV4K80gm1fPh8o9jXzLuD5T7i4x3kjEIEU7Js/trEy3T6PbteA0ekDpWZ4Z7+kKsGdlqK5I+sLY7pkD+UqFk6gkXfhzprqGuZU7JVSEUcLYMFFAiRI9GNuNc7vjDcXH23K544ayars7QqTiO3qLQK/Y/t7FSwTTTTTXYhnhHPmyL80hRrzL6m+g6RUSnwTRMRSRqqA9f23znMT4kKPe2VT+rbkb5VbqXXr4lPLKMw5o4Q6HKVXlUP6P9UJMMvWHiruI5ALpTzH0RkOetysjjwu+ahqD7oR2BZXEEFucUkeDmhzlLCGYTIsgo23jHH1yeDBGLA4fq56mrSkjjJJRugVvargASClbSrZRY2Gzu+8joFafhkoKFWmTrVkiUwzWmOGJyoNs9cqlbNxBTyjDVZjhRxWnhOXvkn055H91qE9+xOV4iF/TtgLE+k0ddRzZjQN3SwYrsUGwbS2/F2GMwCfdqqzxAS01qtKSxjy+r66jNGS+AqE8IQfVGfsBdewvchpPsIS18G/2JO7OUUpUGIGBLJFoMGRWCKFchHQay0qImmf9imPK9dh/Ca8aOHOb/f+B1DSkTCrZ/UqDkreXc/F8SESWLRPX2p7dxQBjSdiLV3ExKnlmoH24yFABZDVtlP/8iWzTxcWjefitZ8XPSC3uTvpiXV6X35hSTpgR6A5N2tiOgMgl5Wrfy5cAYVzqqTr5G7TnJ1JkGPAyQntRJMMSz5GLeIxZOCVTyXvOJGmCqHYcYkwKsJ+U/qMbbSEn273L5Op/266Gg1LMR3lAHykINz0iPsvfO9kL3+q5GM0oldvqnPLkk0ktZNZ7s9pejoUB4bTc7794AOJtk7qyoy/AlI7DzylvahTaggDC2V+fyuiT9feiydD9k9FBVZ7ncadZkOYMPWb6vQ2+9S3dn1+S45On0bS5SqogvkuUtYFnCDCNgNLWHjyV9/pcIgeINQB0ggYBqOTVHyG+PL/SQxO/3F+5m5/r7urdrp4d/pOJQ6sPyac8TGIl/pw0XrSldWNhOp9utfrDmcRLkp9KYwH/jZx3yzmYHace5gk10IEBGhAI4AXICoAYAH4iHyMCdjo9+aPiSrdtv9tzG+h0SePtpgHR0f3QnbnQZRQfSvoJbpIFk4lRrWDxgbUve1GUldAHGeaFFJtY86KyJv6GjQGb85HNZez9hucDAvG2LjJxXsmNS+/lIdOyPSTLXb8gfVTliZHBiobe+F/JLGIg/wtKJhLm3jjXg6bU8AUWYzbnABdxbDLCupTUF6CUvyVBYFpLVZuBr3vYnG1kv0yYiArhbQAcvb4qfusCyLLIBy8kWlTtqonyvBe3yqNKmmWQYSv2vHz9GmOmmzHeDbsobWrY9ZRux6a0bVDeKIB6UPrhZdu2acK3aQewEtgNOR3FeBy4DkDS9XlsCPyEPiAUIBhKaB1C17ad2u6OzP8pEXG+RD3rsxbrz436PjvHdvDTmsiIjB25zaBHgFqGSv823rt7phBXF2xxx/hsr6RXOcD4JUOE/VWiVHebAkR5r/9zUHPBAl5JKR4bm6vOn5+hYY4d1eIQAcbhTcdUoQQA35EiQ5CChEhiiysbrwnBK65GdY/CBlT8HpiJKo/gRmVDNx+uK4s5BcyvChRg/pzcBuTnVg5UwcBQx5e0mUqQN1MWg0i4IEywRKSh4mwfn3TTIGq7z0UGpMrBDtESndl5GSxP56n3zfEe/1npW/V68xebiKjehYQaJFHVv6x0xTiWIMxadqUskU4ftXO50AFuPShGLMzRQgGGO+rr6ij+4CWdv9HxqYaI/wLO34W82d8abNMHCzhwxgyrcU8OBYRwcQwoUIEfirw/pQ3KKn2xrjeOrX/0BwKp0SOzgMTg3HAO2NIe1dWkAq2Cvv34YxvSuSh1X/syz6XpbBStjEEcy2KQPVimOyvlVWNZ+fh97Tqvm8DG9vwfP7/zl4Ch/XJSepAkK16G+Ff0OO/Gm5S4DCfwOcDdVIcwv2Pj88chyDXbl+utAwbngUOhwSB+l+1BQQ++AD+kABf829vb48chykDkYLJZPB63cHB0SR89i7ET/eUj7vvex2Xm+6X98zZRAHK+O3D4g1lDp+06qZJBegG9lz7vFEiAgDuLAprVK159FAiWI47zzfVaXFNNsqpeBJsLiP9BjWLroVcFLprj5NEBgBl5lwWvK4qUSRHSaiW0XxE6hCZFBon5WfGkQJ831kcl1TU0wJ256G5ZLtm56luMun7VNv3ISqMphlmq8bmhYehOY8d8oS44W2UBoefVU2zng1dayYqrPwBABQoVnChTn/wYMMVC8vKYzUqu+LPBbskWQjAFayckmrobGZ68Q2MrpAK8tulXvMu/UWe5+iY7Dw4FO0fU0dmxe6DTeaB2VpfVHSFIFfzalRT76ckC10mEAMkA0IZQxf4lKwvp8ttAACwMbgr+hd1cGgGjXAaugAOAOCXX3dxw4cOHDhwAA7Hkp8FAYrE/B+MTiW3n+nc9ftW8j5HDdZKvBQpYEfImGVIS/pBrhta5XDR07oQCg79T/hyQGgX8sICNCAS8KWym7y0gHoMAAKAc0ywC4P/lOX8OtVRnDxC/GVMqqnVz/55XmQddwAZFqxag+f71epbxyrSg8t7I7x9MQ1QLxLTcKIVu0FBsLzFGnf+YBfhf+jLmkU3yNUofhzPibtp7RzwLWRzNdlo0MbAaXR9fItiEqFoZrKUW3zOPrrDHRuo/RJtuN/rWYc7or7J61fuRE5zYwE7wO7lG87xGwuhtArABrNdjs6eC2ttOe+NipN9NQF/jo46FN1ZvrCSG6cg/+M2tYYMgEKBBBiAsstLjcMBGbL6bIHYdh6D0FXx5Z27AzE/IiuaXWXiutTb5VN9eOL3Gw4bhg9gcop97JSyEAOAtCvGQmqerYmSqwEAAUI/XKZ2GGIv4DgeY83Bqg4gJQKkKud1j/GAYa/Cp2WdWtB/WbbtC5+j9M3vKo9RDsPsa9WvAit8h1iDUHpTlxbQ8YgEiU5PuFXdtpumuE7BFmIi3SjPH54WwSWZ0kXE9Py7LNz8vMSMMpvaxM81FaWFTheP4iLlUBR2aYeEukvX9jgP4ykK7KrAWOJbkvyOCgomBACnWE3b8t3HwfbALkQbYqgpBaSy1+8XCb/DGu8ASTXVXIc/B8TiaTb9TqU+Ty0ZhqHdeXJLqcCsa6+QunNuVt2Yri9A0NaKdb+iYtab2mesvI/TyKvaGwwZki+nbHfb9kfj+i77CxhMpAsRx1jnwJvjIxv3+uOkE/zJNmlx2k+Z0vhb16P94dV9ymTeb2TODF0oIYY693uhPrjZF/Sz3LXt5ZYxXmgAlUHLnylttoiGAFtGnmP05XhC3snot9JnqMgeGhfHvx9LJvLTxlh3ONAYUrGTS69/6z1dLaIHgnsH/c0a2fCOA4MCxYmfHxU2hKm2UprTbGAF5l1tlLjwpQkgpuzeJf1yj/fNVtthmeL91vx9843u4Vn+h9me/or9b/rfvjYfN5W9owN0w93XP7jX3IEA1MQrWmNTsQz7LfcNdnUaIRNMUind3YB2YTrOVV4f5vc0hLx9Gly/n1nMqWcL3BfT1t59WTsArBbgyg5rpUpQEhQPhl/asV3KdT6bThHYhLz1LTXmd4pjtFOqdyBwVoHyDh1TC7x+7XwbL5GiS4YuPAOF4ErVR/M9w6nSxidFXMsW0fU39cVlhPT3euboYWvLXfV+Sbhm2G//G/ob4PlXodH/iU3I2bKEmfR5TJXwmpTE58HQfDPqCHrKM/gdycfLdO9H8gzbN9hUOT6pqEChQAC/XYxWAd5JxGhRP1tpCycPvdyojk/HZFgLYO0kcXKs/z5V6wbQ642gHJLmy7MWO7q5Ouwqj28D1eMWlZu6PhKJjLrc6OTLokWXyTOdOC3n39fMjJ7cMK6l1hJEhcd5I4HxhlgJm/qujQ1PEkTzrU0UzftfTt+8gEZCDtxqLdpVvf7oOaHDP/BQ+PXHdtZyBrRLLk7Jud9a087SIZksmP4xAjtyupCariHCZk3961XQOxs04BpIz0uqg6nqStYZQIEhnO4f+apGh7yL3EGBfrQbHuVuZM5tB7CPxVKWdHuBPKN6EZadSmFXbofNwOo/BmPKvY6pwOskE90n2j5WC1E39p+ujIGUy3ACsyGKKqQYqRXxhHWf4YfIM/tOX4bxEZ93Q7FXrUU29hrxM3UF20A0IK5kQ66vPfrA8a72tb4STMVq4S0h8LvrTgrJMo8e+Kpg6QwH8hBOJfbRkVjXGOsNrIzVj2rBEv2Mv3KdSq7vksBqFUHEiEAz6ygh6Fk4aXZASx+9nnukLARZdqnh1FwtqiKurVBbbEe4nvvzvrwlEIYNvBMhzEQQOa9PN0IrIWZCNhvIQoS/gFVsRHVmiWyJ226uQOEdKfCKbEJKqOpeRrquNYl03i5O3/+kioZD/koiFjYpRh7rzNa3z20hp65Zx91QfGl4ubn439Z7GEDPmj9b7wXi9jSavr8DqaBWI/6IBBCuDw++HASjIyRNILEJtT2GVnVxz9y1GVnZQuXr2UQPSXztWh5nW1xLlq7BaUw0f19FsTrSl7AOwM3BDC3L5H76Z2dvXko+o9ky9JefTJ/vGVuFGlSiXOOxfFKrTMvKCKo8BHxX/xF4bHODw3TGjBFq9L6GPTekuuKi8yafHwNzDmdk7CYT5rQooE1WMxWPnxhzR/lhF19jKIyclCwWrsNHlu5xXZn9tAbCsOucRt40mXKrqeq9oJbvTrbyOwyzny/TS7/0mXnMv4vVly58MYT4NirGqn0ZYEfpkQXk2RO5uaUgnr6oIU6NwahOYmCQFf5zbNx3vWwrVNYQsz1b3GexXpg0WmxLtrT+aGJDM2G5lQXA1ptfZkNaFPGuEJqVY1kCnr/NvHvF7Due1k8/xVr/CB3DiGVc+udftEVrObb5neNH+Zlrw3oFk81m4U9kxA3pif7kRFashKU50J5RlOb1PzICqVhfjgv5j0GNJyQ/Qzvk5iB60lXj1yRqSw/K4BO/ce03uvbfkEQ5W3OglenF6DcWAi43qYAa/0opcYsPxqMYD1zYp6b2b3VZaDWmJtC3bNOVkhnX4oxDfrqd0hh8E7QMGjLxIsygdI527H7fObNXaQEFmbyxhL8GO/rt6Iyweb67ODcGS68WGfVwxq8KNeaqEyxGz0BPV39RJPKi6aeZUON2rTLIt9GiyDqZsg47JxWy7UZrQxM6dAOhJbYcPiP4u8xlrj+wuJuSlHm787e98wxUBrUAAYa+s9u/Et1LIdPFVvkcRBhGGVUvmBtGfYgJezQIZJG7mfOkku9wHZuzJAHT8UtwXMbWw6C0sBCesGDGAS8LDhjFCoX6Rhce+0PbcIGrt77Pako15c2fAepM4D0Mqj1QdqdPy/VsXWLdB6RRBhZlLQSHjaSavvpW6c/mJN5kbrluscOV7+K7NZybzMODSwsxr4gxjlUIIHw+w5G3Md10i37Zn0U8a6GKZlrvcjHVtDMDRG0BtfBikYEh+oqVWcdb0Qm8cjB1OWkum2fTnLhSr2ZJb1c/DipmWSMZU/U7ey0dAmyurp85bc5oSur7PkSIWeebsOR6Fe+8cfQQ2UsmdrqeJZ2lpCUWkSA4MvTatXu8N+1BPUjFu5834mSSLWh1QlZKSRgACbHsjlUJClVRkq/qJPC6gCPmqlrmyFTRH5DwCdjX2t2/Yp1pf6DFRLpnilqemnVr8VmlWEBSVBdcPuyyFsKA5rusyzeIYxg6X+XsjtD8kTOF62vnoS6Q6DJb5RnOsXTtMCmh2mSadmPe+ER2C0mPCPtRr9dO9/ar79C6xWQeTsQmYwxVD537k+Km3+7Owes/Jap62m3Z6oaNUjH+xtkW7q9TxpMhsqEWD/pUZuGnwgKkIBwlQWWucYX/jKpsT0ouS6/DmeB9LcxmXeGCvawEL1ShCoj6AF2ZtqPC1v5EkLectGizkv2dJu0CPEIzGpnjl7g3n53djRRa9/wUs9pylc12ojcvANf9QHCSTjFx2WbFehm99YTI+K4wr63vWqWJ9ROgBDiRlE0ccXLmbAyaNNec3tjO6/5DoZz43EHMPhBOln8QjTP/Ixb/Rt5b1wmys1+2wszw6stKP3nVAXdlM2qlo9LrBvIlO4vvBEACCh9GS6cE4fq+eeDQg085O4ogSt4aTtCSaaRzbnnnVCUXnUNMh8daBwJ2ZdwiniLAAPqJeGtJgBSO/iWO5qhLpeqsLjwnpTvl+ZtTs3tY2C3kXsyi181CMkWvoqaLKK/+rbTE0CbyNhP8PaFvxaJcr7VHmXDWgmBF9FrcNSshXi8c+05WPu4EISv3OJgR8liLWAapgGdd6hxKr3xe0yfyxwCRLM8aT5KZDJKJ30j27R4HbY1uINtbF2f+Ie3FSLPhFXwaVr3o8c6ZLcSmw+3wTd7YMTAmFe4Rb5UGLW2J8cv8n8De6dLdUUOIJyv4jsaNoRx5f5b7wjwcbHA0PC9mMn8P1cV6W308FQgHzEfMf55S9vTVbVtCBBRHVQVP0IA5FcptRnPG/Uc73P7pJRhhGyJekmzskTU/sMI3ph1uwEfCD+95/fUieX8kO01Q9EgqAbW5YqrZel3IgVWDYp+bEpOhrEk9JDtsTqDqGWNLq5WrliHx3pCa4YoeR2oKEPt7O49zzLktTbEVGyl98f2SBe5LJxhIoNg+3Y+zUpfYqWruBs34sXSo4yKv7ktV9WUf9iYX2Z6W1cqqP0mahUtioLEbAfZC/BWyW5Ia5TW+9qDTCOcqPFupmux8SOKHHXnpIB/5tUMyWvAv172oVvkOIoYih7QBPuH4RkSPo+ySRdjpTY4vqhDZ78WJIm+4IkUFTHvJRGBpkDJF2qHsOZt6e/zwhQj8QdRe0d6qLkpPHKK6bFyVEkQa7tGDFgT67r3pJ6s87F1aAynGX5GaqEsXdgfZKO8nqdWzDGcq/PjZU0M5oonTIATgFApDCgRVYWBGEDOELgA3QgC4HTptR0D0hTsSxrOPxyz60XI+Af6Yzd7ZyOk49OliCk18CT6RD1M27UfXoZq+PUPZTjYRvjCIljcgD03tRWDU38460j+FhcAep6ooAFdgKKC1+Pxh6rSoMyus/ePtzZx/e3jV+uOhhSOgKk9fZmzEq5M2C7gcrODuPZ07qCTBXLa+VGuf07bi/p7hW+QgRjzr8NoyznF5/7a+2nz1dDnbFHIJ0g1r66ZKwWe13BHcjrapFwUgtur3wCmimcoZMjPLAx/qJecynaG9yBonw9n3Wr0u+ZPmiTo5ga3+ps3AbOEXezJZ9zZGDIblF0l0eB1Xl+Sej43q/qgvZNpC+qOQHPGe98xlQpgmi5iUl8KJC4fYo45s8Hd/6r5oCcN1JKcGpABxybwloTOmzv245tWbfReGJphs+TiXJql+8uWy+jR5d1YUoc2CwWt/oitGs8wGw71jJFQzpgqhmfLU0DZGWzwAo1PLRopAduzqeutfCkD5ISpqkVyX+g5+EXVzjdzVWXeqdPDpFK7uC2udHM1tCJItlXOoFZeuV3eYr1osoPrlWVOgetGvXGbPXVJ+r0pY/pbwHeds6b2fpatNFNn4lI/TXsuzwCH2H0wT3M4cxN24oUN9m+jXIoH9yF7vshZf7cmprtgr+5Vko809ThGvrRKQbW+ONimsGb6B37mC4zRfe8YwtAKtFxNvt/JhJ7syra56Xyu1M4uswk+FMenSpCuvnVU7JUJgR0besUUE/JlBxWzxGYFKoWEj89GS/bY/xW2aPVpcMT+wM/m4es2xSy9aG0AgjI7/R7QZYTxlDQN3sJ014qas3JN1oo7BJbEPX+KkQ2Zxp5Y8oILiyAASeI8SXe465PxEvUkRPqZbfuxPW/2++0O1NpanAS37AL15oha9NxzJLmpMtb9t9vaTamL2Qcpq0wxlIh+W2jbqusownDcD0XWe6Yc/uXp8mu4Lkr0BV5m4KkhL7jU48vSgpr6Pmg3QhWu5KTsm9E1HHXGCOdLnIUwoQtYad2VdVxYIF+aMOXAsDg2in2GoPY4tsxYrViLXMzoqopatld7lzhvoU8+NB9UqWeJRHGhHSg+OEhFzpkz3njhj5pPoUKFrTorCBBCn/bqLXBV47rOuaTX44aY6nsWLjLZ1LweohMtDMTQyG9vMf7n4JkckQc94L+5VMSybgTGXLLsi/sHfJ81t1m4rHNJAtYvO9LnWYA3vEXM7Jy3QQxAQw177asZKUm/P3gjQ8E+h3O9ivtiXU6QhaHhxfhnGsbRI8ZFhAGJcZr0uJUuXLtIhu9UlrhAajauii5lW/JQv3kIlStOv+/4qq3H7Ejoi68lleyUZD516yItQCCx3SR8KLHKrPFsgu+yF7IUKF/rLVmZ05oM30Ua106Rsy+LiziTI/FemFR9LLyOHmh119GNN4rLp/0XET/dgMhMA2JNR8n1eYrGbptA31Qp9XmpvE5khfOJNk/gt1CY7uUFJrVh5UHZsfejTYayUEdhpp3PzGHvc6lKoBFY8BvxKk4MPnttUEhvyRnc+YTWpbOPMWv9UCfAvkspoHHzGRVflpLZU/NzV4cHV4jwm/qG8aydRrT0P2NSBH8bfU1xnFhXn26YFCBwynL3KbpLz592EjT+W7Ag9Ocw4KG7dvj6aRn0zTRQBj9VyDEeiO+vR3WvTK0WCfOcmJt9Z7p1WZ+0E7oCUJLOBajUzVIKPfeXYW/ddP7dFQX2IVwEJDBCGMEV4k3X84mqSmHXfUfpms/vl0CFNn2pxJidwKTEt8gORbY8s4yEFPrB8K5oC4yJtUJkvbTTg8++n9LYXhLJfx69qI4Tz8vJq5/38gA8s9x884L7i04yDkJjBDOMz9WRhyxzkGndUDjS/tyFRG0JJpAtctiP/TV/OMvDN131jI3K0995MHB+RjOS6pt76MQaBtb6F+fgtEESfolqy4X2rjbSSW843+aYGBOu+J84je59VBE9VDe9jG6SOlliNb8wGPJots6MC9ORD7EERMmynP2BUUgV4QRT8O17gCl6fu4SwdHUAK4Aj2VTg06PqolKNf+cFYRXdfoooWcuJT3cayTmXUvaRvuGaB7hoZpOl780fE2NFylB/FgYAlZPu/tOeHBuPaFZI4rabqa44PcpeN6eaqvk+UTxqQk5vCl5b1m+q2tr50Pna24fMj5LlJHTPMeqomuqmJ2OetkrW7FRtCTeC3RNLjhKsTVuwJED/6OtFc8qRkmgt2l8CdOsNh9UsjyhujNKHml7zWXmZpOvq2vf1mqZs12l5B0Pf6/QFmfvCMPKHJcY+s8R0Pru0d8cu060FEmq5cl5AsyWTRmQrhwo8cKe9jk2HyFWbhkjjyjIT43xf5ONMz2dBVLQ51+X1sMbtOUB/Z9Fp/Mbu1n1HqZgYdWnVIE5rey1/s801dU2nzKlyP2TwIR72RecXTvqfQmemJpgvrJGkW0vzswwyMehmp1K5TT77DPQyyqF0m3/vmnEdwqGkYLcgpnmoa41uWFOCX+yDfjFmPXdGkkgOfK7VKU+DJ4ryf7igik45XLpMcA+IyaPO9Y3bQBmcNrodMjUPHHID2gbTYj36aZ2Ec9flRLecCNV3f3quyI2fzYio4n8yY6L4a14IxfcT+Alh5qDI+POwU6l/vSD+4Q8gAnACCgBSaoDxFkhqbJPuVr0R7WMObrFyuUEmQ5UbYhoUkEi1HMDu7Q8UC6fJcHTg8/L6Y7wk2ua7el85+HcTt4vYoYjlzQGJ1JznCb4yybB0fOxWQvZiy1DrQ/nVXubVeA1N9udxGDjy1pouJqWoows870imhQzUbAVlh7zhCmFJmFE6o1YMoW9rGKoh9KCphrPFFbTh+H4dyt7E2nf1rhqoU+7oJCa9bpZjjMzRvq7P5nMpNlHFxDVndw+LiSM4zYlwIVFRMIAq76lijXV0Vpzlcr1VKHkhJ8Xi5jCy2beTOpevC0xzfyHDNhGUXN2nZ9zjnwvrNXkr2n91z5xBeQMxs/MR4BU/X9adjKLT85J24+sU2Dqqm0To3LOh49Rqrf5SfYfYUxt5nWr2CaEntGRi9O2k1aZvVxfX0Q09NwsVve++qrpkl8SNy8EhTjqiV1PdQF16NvO93xk10nLpMVQSTv4jA4Y4U2UUOojpu97YyiZX8IO+1B4rPksP01RYJBAzmwhTZtR4AonM6bsoMXatWCMHQt5ven3i7fRPgs+sY0PY+E/h6jPr9Fjpmr/S/C/qMVCncRY5mDbKq0TJJajSOt3/wibbqOfiCNaY/P4c5n0B0dwCF3y8HLN2ptQa63pnM6/HnXYeJld/9MYvAoDuSoMkkN9/iVbn7jSfqx4LEgs9UVnEmK203pb7VRLHCU1NO1Hev89MXcDTOKebbmrfCIveCAynRFvrsoht+t8YQwoFEwicC/PqbGs9RkxqF7lV9O+suXS5AiyW2dj5iC68kQmzotAyWTWby5vdGrhaecm695fFS9I/JIJaEXQU35jbEeafvyY0rjWHkiXammFJkQhWMjDBM1AZal9a6V+hXD+rlrLqCN9/TWm6DvLrbKdS4LviXHgSjKkcZ5gGfsW+2QdsoIsh2nwcvuzdHVjccobDoLaJC7MFYBwImFI9ay1qBgKB0KiQ6LLFjSpvozHrXxUeYFFh2tYyrj5IFcrkS5HkFbjEgrsExtjYwGgB/LUiAueHrvnEu0f7vV1QGFEtZxBn0SmM3ojzzAF14i06sOO4r/pBM4lsQBATMnp168L2JaIC9/Iw9qooQGGKVUPL29g+OFon5IVXzNTnh7d7GWcr/XZ1+pWON+gPWdWBb2cm8PqXs8qL8hQMYD+TTL9TXAddOeayC8+oaiKdGxXTGgJ/kfoTn4989dnG7nQzBVlmbAdQwhMa3VGkloM1ElfZRKbKkR/w/QutUO8Tmb6rZKphTgFJ9wSrBffqL2MXe0Vo/5AxN0M3QjQzJD6MCG+NPJ5aNWEFQ/fmjqH4p8Te+gGhrb5bRduqds93c84WRgAC8CU7MFpL4GdW87Odkq2hGrcpFq0Il7T7UrAJD75FnyZ3XSnSPf2xa+4RZktQvoWR88nJ5DiTesmMfawCXjNz+3fL6NXZmrwyYHgbGiGr50tdrK3g2nmh+aleojXN7hWf7sEcM2Rxse86+OWEN9bQxZrbfSonsJj1Ff+YfknG3e/wzpdI+Kp4xxKo50U/LUEI41fa3KD0gQs8UdF8IjuQiApjLUdpcyouUyT2inE1FKiuVqk9xyJHE+uNavwzD+bFO+3IsrUzk2YzKKBbeo2tko80dCprz8d+i9D33180OQROReZsLKrOCMcKP1myq3t8/OMuJmay4R5okRbS1DTnxiURxhgQeKisJgYmQUxMjIG7/Z7va0TL1paQm3ZKZPFf2R7QVDPjHKLTJRHqsdhs76z0lKpa8IZnSScr5EVCv9+X7NEykPucpJx348jWEk0yM0ziFbt5dVp+61k277sEz9rFx7xYMm9cvh/DuhSoy/0R6ppuGpkeS1jt1STiniAYCzZa+Iy5q5DPv39H+ghPxB0qezvnfCOoc5+UqLrkwrOOwiY+w2jmOPdpWqCHM4AocVbo5htQkEUe2QRiJwKt9cwYG0QX+SQlWAri1WF40L5iJsXDpUH1s+obgCsIBlPNulJzy8zpCULQk/Y8PP579LFfrVyTvAi2nKplZdGDtyk7WoUI7eW2Vy1GOkmrysjJn35dN00I28qcer79mddj+z+i9YGPgZbQb7ODlueUgO5ENDYIj1hI7OuXXAjpoM8HOjKPlN8LSZskDmx5qc/X4ZHXbO8wsKxdG682ctFR4PP5V9gd9fJKfMO36vc9yxMaXDzbcSn9aN9itskrqOOiX09UHAzXt8sATnJ+fVEQzFqHQF7ZjJeTPw5R3PnO1FxaMQ2PfEpGkrgNw/f7vd2kFtwfVKHQV+siPLA3az2pvcKiA5I5qJHM9EJ3rniDqZyEwEWPT3NrLZGlbXb7Oix2Py/4RgdEHsKoKUvUZ+4UiRgYzn6uI9WxeSWs09v/Jjm4Vcz4YzFY2nZWwps2ohpJ4EerUg8ZAlIgO9+10boU5Pu3U4Z1i++n6CrJgzWZbyS5TEukLCwKbQyAeq/FpjIUtwdW0sQhXB94bIBZnOR+0q7zp6wiBvYU8iOJbyEZGUokd8rtMi1WQDojuH30jLUuMWDPz4weLhZiMj5ueyzSOkZsEfSgjvpJgwFDfJmCen4NlGl8j00rskdqJI37sNHwYWjgQbKolj47hTRRB/f4YpEv5MaIIuLc24fa1Q1EVnZ6cqZUUAPmxBgVUa2D5xy5XyZp3kvbf8uSmqr/8lzH4wk1+lrJyXe/Z4ATEdWp+o1Kc14Fn41IllWV1T2GzScrMnyr6tSJ+l/p9lNUPBxkV6HuJ9qYbjqYGZhIFDR0oSq4A8VoRtHzNxYWT/kfkH3gn+0EM/9R3QfIbiTA0lGjnj+p2TYQ0OdlqH491weDgyFHbC3OVY/YJrftFg9JOnFsk0hX2WvX3LBQatHK8pMeHJv3crEJkhd76umTaUssroeMWEp5+76QUHD0gsMPU+Jk4RiaX5XnI39Qxk8TrGDft2QYbxSDnHuIxHVCgOTb/FQ/BNmyOB8r2PZSmmk/XzYMloHSKbu8Xyxgq39rjGm5zzerd4ILMQP3TgpVIL1K31iCneYk7KsxrN73ufJNNs0ua15ds2wiw/d6dQtpKEQjIriO4AUhHdkw9jliqyfNa/RLuuAnZbRgd5GO7wpzV9py06d9D+BmVUxiOd+Y8Hd3/PomCOmzD3DnWpdzmmulNwJmIOGHMtMG2C++HDvPSrfJS7jzlU2YfOCYAC4ql57O94zcammNWCc/8tEwymffuM8YqHyxsVRQMTyvXdutH1HEHYZrJ4u7DnpI5wu6j8o3xtyP82IEICVpbKbo7AeFkYUGRhZsOVDM7R9WYyF6U4vGtfs25e3utExWxTxgNQdMgbhmj9gEjnLNueXv/Xtkx2aUH4RuRL153n7Akc1bIHiCvklaKaRht312Pk761XT+lbjd1jdWsP7KEGylkFY87PuCpHOrKthA8vJ2Oq1uo04mXpgGiKE4hKFnuDrgbzyjykj6r4vm/4+SDyUvxmDTZnMaIoiMWMwnkFrS9n0qzfR2f0opO+eLMIsFU7zoaic+MowZ3MtPbAwbDn/uGJWXvDuJARL6WtneY0dRkGxQaFh8/LZu2rRjHLue8DKz59br+6eEvDGWJFJl8HbUirs+EBTA+TH+i8/LZpVf3GBAnN62UiwHu4dnTm/wXRGQt6v4bd1eCHIf9J7XPFjrDA5Hpacv+dc8LPVqFIpc927vDIJIuLK056j+ydvegSgADC+8Vi7LZdj/3WOW5jRvChTIuq/LNIDeW6FgABjKqk4j5GsJVlxsAapQMVwSmt3O97X97hYMn/NvavoblpkSCh8Eux/2xQb28bl7AUagMD5JMGJw5B7iZCFOXb/ZzcJFUpZjCjgklaCbm51VfKPIYH4I6FhABJAQJI2z+2z+ZzUbHAWS16YrK2M/f5A2OUWhJhiHO8nGaW7OsBurSBdLn2/z+MpOVoB3otjI37nx8c2+GnNO3b9/FbU8+8C44vURGCfnBnoy9XIJic0qpJ6pxjeIMK6Tp/pxYcvkHtwnmh39rlsWqh5YD0ce58Y1mt1AP5tmmL7KlZ2pVvIokR1ZkVUAQd3/PoULPM3OWlNETm/mXDwNetXjLVtismGC5GgZeeu3RbTaN4pf1ckey8g+fc30+unOUQMAN/o0LrxnrHpM1deaknaLwkjE0HFL9NFOYlSP4K6v3PdGaQXU5PgaS86SeBsm8M/4FybqyKysrApQTwzkKpD9jTKJgkQrpXpQYOOyOKWvTE3rCoy2OlcWHpu2MDnurU8sxMdgwD2aJAZRRW+Lq3+NUKFBOPyjMav3VY+kOy5EAhyN+h30dcxP8WVyukt3wJEGZb4xSDMlJpPr3vE/menCoqrXJf6RCGWCJhsV62KGqc0jp0GrqbvV3J9YBbLCcV3D/khNrthOZSLDRAQ8K5mAyEG+kAKg+jIZrIw80xjeV9Y20NuSWuNI4eX06PUAMWsCXsa2e3l3Y/mEGKqaP1BbS2hj/UWpXbF8wNII9k6oD5w83xJ49FEqqEoZzJSqJR45wHsUe62vLhu7WkNbxjggZ4tlNUMv9LXEiEv2jfERyfIcFOqEUYWMf/Dl8h4ZxwcDZlfSMdOultZC7gLEV6m567ewiebYehGzV2Kdil6UwvF8lbHxjC7nhYTG2Vg5IOKLaOP902dk9r3/N/KkYeQ/lnsrumID42XcqsCkXXIc96HlL1xsXJNhZrNpxWMrt9Q0F8h2zN5BVP5gp7ViUp4gO0OkstRXYi4iuc1M53Xxino4vyGaxKbgqvqaoNuJx5e0e4R0nxrjdEvvWoxKJrg4XkTWvOWTLeq2y4rSr2xMHOeEAlM/8ZtxtN+9C46MWCCjasWNT7IYM8cU7t3BxITKtaH6codpr4b78Cc5r68O0rZcDuU95mbNv0ljtRy3W+qtLfXPhcN8QQIHAeNGHvyDYG4r6gIDWkAnx6AODF9tBQvKY2bAwTWkQy9s3dtLLPASbu6Fqn1/uR/t7d3bugs1Yr59rQ2gy9eqrMRMNVABiBGhAL1oJLFEhdaCLO9fGRkx/kq0L799Zfxv8/8L2njstJ2vqhztSF9ykiU9XY629JUeEC8qPC8ZF6daKy4KfuSTivrYwGJlbOFd/Tt1pLCrtuhqAAtEIwhKmGNwgRlAkebBg+XTa3j7obvEy2d8FNY6qYHF5Iu6wgQ/7ZhovDlONQwY/5uMorf8h1ddwIaVWOhU9nMTwFZVYegl1XxBIr6RO3o5Hrrkr7Fg/yGfSAAC7CAuWszIKUqRTrX5qDt3MeIAk0szy86MQIvox8Wt9GVN+K94nbGheHwUtlnE4lK+F2f1X8p+TtlnhYtNbPFhO6ugOD/v9CohblWeo6QyYlhkdSZ5ihBQoQFZgfiSGYy6wzqiC96/TJiDC2oqaKk/sPfW91mQZ7LVsOeVRK3E+JiOEjIdyNt5tcyPOKVhhgi3zZ2OFTzNJj51fbPZpkpM1viRTkLGFSOnafqaQuPi8wHdAE9sQF7DSWjMjsaL8F3DPvv8EDWgr/aycT59NzsDbGyMgS0ShD9LGHaq3hK7AURXIIgcQQAo+Ixb6LKqpJsJKgcgAGWQOKNgjhm47vS9L39CLT9tgt8/I8lUFQvlY3Z3eyrAmkDl1YhYsKffcEcn/9eJi8hRbK8nfCkn3WxuxNuXO7D+xlA7R9K8snRbuTDBq71EFw5JrZKfWoAdWFveVTI1vm6W54jUMFDBuJPaS+OO3gNa/5trULCmAkohRo8VsHcbuSXYeNLABV3PMSW/hZTSX/OXPz3Jl3fs+ECYhCgQQlQqwADACkOQAmNqUNlO/yhXx1fq5R0ez91Deti69gYWNQCcv1AhW5ZtU3zgZZqZYtP5fq6PQPvJcNjIWYQHcSfeA21V/rhlp5fMCGGv4sFgaiEKI/3PZUVpt3AEYqP/4i2zEcUXADmcND2n9PJdD3l3D3KqyCp/TBS6aeJQiq3rPp6KpzDSzpeSxtPV1v/ZSHgi7o6OrUN2stqZbh2FOlyhw6dIOlhf+9A8uTjVvdmptCXt9goAIj8MXhaD7JC+6DIzG/lw3qFaxMmEuwgAjwFdwATgzEIxre85znfFupL9Lbw7P45S1XDDwFUjn7qWj/mAIN6hARKjwoP0Wfh4bu15ZceZaDlcNCjRq6yo7R6v8l6CZ6LOcIiY0hMqO4WePy6q0ocI9DAjTfIgxbZ9qL4qRo0vIPUlgi0gh/RDt0ERn0BBO3eWtaAeJQbcwDpPhE7ewK9tZ82A2D7zDgZBycAnko8E43xpMLid9xL7BWxBkIQe6JmIK1HWUrW7WzTveCWvCo6LL65pH5UHS+X4BINucFfmORwD123R+c+c0W6njnacLwtShmfbDJkpz81uQw286zLdpfqh16q+F/sG/HIet6V6zq3iUsQbWiseLAq3DZqoXFlBXdSvr6On1ZLrol45lFeT66g5f9nJ2s7jU35P2dR8xzFbUgpM/ZnJQBMI2XUVWWRw+F3Ts8xmcQKDb1HxQOK+3qiDvoWVtPLAeSy+CuVv+eM/8j2NMOd4HsApsDFhCsc7D0eK8utgT/qCRbHMdMDCC9p1b+TicWiFMjB+3RDdpdY9K9XDecY2m7GIVtQCRIUFigRVHdmsMPM4TMpabXz9Zh8ivSaquUnvK0sa5kO1H0S5shZhlgoiSmzm6tEVUVfyW+X3hUH9dyUgohTfdvb4AvHx+jGi83tUMBM9+My4yTed+wu6bc+Bi0zwDz/LPUdT1eKiSdlKeyvq2+UyzjE/OIOJOVPpGVi1tc+vZ0HrOCqVpZ8fw5P4v0iucWL+hkVKw8VYjuXeMg+O4xaUgYLzlfguhrIj4JNLm/BUK6e7U9DbJGr1CfqH55W2SvdQMurzaCUhove4G7MvZl7b/yg3xwOwBl8OX2Sx6nH1BaLTd5V/teVfQIcF9LJmgg7k7IBi1gxhSTIitXiuM7H+VNuc3y9W8Jy7PBV/KakvJMI6Bra/rCxE4ZDX0n5BE4IpGJXHcAyKMhynb/SWhHyFA5ZoxYM5yugwhA+bCARD+fQXKE8lLR1XZlreIGHslWk+otrXoxjgzCHyiwrmGTf40ZlJc6tp12tiokEpUu21cRySDxI6Ki2W5WXDecXg58xSRfplo/hL/vG0Jp8apOVMkpAzbEN4KTZ9MHhi6TCYyBE3DjTWQYKj4GTaz/4sHfan4Pvv30VL68wfdjsT/voQ7/V9zMjdbN4Wn3UTNLiW+ucIlyKD7yAie3jqmXMOQAHsgEN6/5L63aki4YmhURMNNSiqr4YX/J4CiZPKSeOV6x2k15WDYaQ5PifVNepiHOqzM+YaENgv/h7Hxt+0v4Zq6qr/RU34/QP9ZQgWsFT/CnmnhY952GXF0cwUw7JZbxkL+269HpRtRy5hBT8VZev/6uZTRbi9F3Ij1QjViwp5LnymBjye0g4InI9rjnWH+kMt+WE3Qmb3rGrfcZFAZqedgjyp5ed3lsQNGPHQvsaShfVjqWoig8Jkcwv/h4mw99QNHDi3Vg1DkIGL4GpVJ5Qmc6N75m+IBJMk+zxaE1EgZwRgG2KwV0yg7JGF2oQruXNeZk++XP4tRiU5dXJ+MhrskrZPMh65d0tPBnavvkKwgbGuluatMDgRz+B9184hBLFwbk4sCSQj3J3PTB6cuHHRC/0qj3bw8aAjqG20dMFpsRkxCFaer9sb6hNx+RZeYGBsZvlxVUsjiZm5dpk5lHOxCHOeir1uvJ1LTi8p7GES75uyLsN13c5A3/A32ukvzc6kQJGNa+YMG34UHUCXIkIVd2lFsvFL1dNxyFgo02zcl5ql8/lkSYeP76lVMlOCCiPdVeenYt7b+Lcp3PPiZcZM/bvdfoAXDzEY/1S95rLnpGEFtUEfDMCHIbH4jgq9h+9DOg/2koe25fJfRHoNQlPJM4XPPqaUPqPQdmJML9QeqoM5YIfrqJ3xj1eRDvIXGEKAb/kAsFqXG8g1u/vxvL9uuSv/EruVP47Hs/iO+m8nR9aJHGhfyxaVKaLwMnEJZh4pIeBp8pL7Fnsy/pXlhHtUVH3qBVm9qmpTxJq3+kmI2JIZEPGi0Gv0mQOcpvHUE0tn33vb7Arj6HSw6+Y37giQ6+ahGLvotH9apfFiFq689y6fshGdN765MB3yPGnEKEML4NVCb1C7hnCpO9BMmq5GCrI2ph39NQNqUv5Gva5Lar7TdvY9ey0Hx46kY0dk6fXhiGjuEO+eF5NzluS7ut9XQt1aQ4TFMobNIlgOYCiIXstfS9neFob7jWOzlpyVg/MpHxCMOzV7UuXCRwuqZSk0q7mcVQqDLeLb6e/6CMYMCwRD5JguFsRLiz49l+kWoqnujYpVn3Hm+yHU7ggys8gRWhdvJEETTp5LhdiHTz+SRaLhm799h8lJEe/v1PwnEAlQ/wrvZCnTRCW62P2bKDWbWwUFN0msajZ11UZuDWyLBHf5m2M9nppdBmjmK7hgJcV3dDEo/w9sGnipixHYIdFW46S9AiMXAgQV3IEB1d8Sq8mHfD6Lk8oXD9u4VcyVyf0G37cL/kPnFeIxmnGen7ibh2KtkJeDdjsbdQmXpRw/7s+tgOiAlatXUYnNUPKq1+jU2x3LrnBGPeiwOqWVex8HKAdmFfONuaXUMDm+1XFSxj9Mo26MHBiPW69MuDNUrNyKSKt0cbQ/DHSCeiiFXBPRekqi4Bt0Mb6p6D6y4hToRAQAD+DRE8JNmtquTiC/G8atKcH1MnN1WVuby2SHoDm0vbIvniN65mAfYEvxL4tMS9yGV2OtWR+AjT/P1/5iCp2DRDYkYreAp97DjXamHcjOVXjpe2hJjmLspuvXdCsBRcDvVeeaJbub72c9eb7Lev+6k+VRPuyKl4MGnGCIwmJas6+tRMwfmGYQhdFqyoJDEH2aIrrd6uC6OfxvEy6/O6MU4dRg/HEL/8OXdTKmpj6yqPZw7C27zTndN5R5Z5E72rwVFVprNu1+auqzZtmR9QwlCNDvxUrXtJKXPgG09efCrgRxdU28kxMI016wuGnHu1Bn4G2cgDzUbnm+mCLNEBbbimtCXeX7we5KrFtCB2Df0GthLaZIjfYvawRx37kWXRMvo+yEROsmKwAgAWQXwWGS+ejoucz1UPJUiKmDWTJqlK+WRnXmannh6p7KfvOx4lG/XZIXLPhG2xk2pV0Y1ukPtw98n4GLFXAX/K0wdevz9mHRssE7byQ3i4sqo3MP6/apGemHhdN8UsffuiUq+rjq4zffQHwL/9vOkFKumeuFgkWGPvGz5vcYTclN6szx6IiNpxhRAZVd+7iCJBAPBlNW0cRIWKQj2kPta8hjdmERu6slvrjjdL6i1OLNFOqTsp9g+h1zrNxRie3XlnqVHnizQsi62sNrjQfvfzH4yHgR1BcDSNL8nL+loX533cn2VUYeNDy5My2SY1n6dfc4SipDWK1lJzrDIn8TbZPil9mtCr9s7TtEiRpQiN+XuWb2ZTgnMbBvnvaV9cDGsdlLNGfmjIIJM2eJRQqS3/wljdvoQi/lYJ3i+quFiwEp7eGoI8kyA0j/xAAOwWJm66bkyui6xqMLNbd/h93gaS7fQNY/6l47uXR70+uqyiJYEUZamweKCN1fO1mjpyMOaGY0Cm78SxlJa4bqq1R+pk5ec/9MFrbaBfn1q0ikbklBCEppgk4ZtjWeQuM5OxLqf0cg6vnBZXJw925runG+J/3ewMFIIWjZ97SEMvsdenJv/kk1zVXCRSmCzqkWQMINrzSsiZXbxdTKvl5tznvDYUo0CIff3uLXsqOivUFZfxGvzIJGfcF4nJRthyAvEXzrRz1lE91X8Y+Fjp5FTJTnqjDdHVgN8G5sB+RZQfTf2ep8XHkYMW70DBg87barvfuxiD/sHbqGAtONLQOCS668zpb/kb1M+CQaTlsfJjCBTTowZ0b+gR/wPMnPTP2b7erC0LGZEhe1kt8H4Rcv1obHbfVgPjLfRnn3UV+Ci0wAkvdn33IuJFLmcC8Boorf2ypPjehK96q6UtVL7e3iEKqk+3Hrd5fvSlfReIy5NrU50vI7ydXWG3kQcVimRi5nzzQp16yntCSXtO17dihA/Gs7OK/ElZuK0gZ5CdHTo4KgD9M1pGu4PSEev9jyxI/+4+tS/yL1AwYrqPA/ujDZvuye28fvQ+hW0jrc0ft0m0SIy2jAiIv66GdbDXwFHwoEN29rMrrVsRH1u3DMmUcfKoRtMOz9Uy2CUxxsrzzpY7TyXRYLdd72fWI6JcoIiNXob7XRz948mg8leivv1sU0orYKQuyR3Ec+G4ScCxM0Eqk1FZZxalOs1HvOPBqW7QYxPS+Ro2WCswb+bAFJFFUoLwbLiBiWP65Hjs2sO7WWmk10ReJOuIa+nvnbx9radPB7l8iI/vg/F0bTvS+fI0oUqpY6X3La8YUyG6iIekEurB1YkuAAMUtIOOe9I9WOJtqxmFW5UTX6cqF5okz8sgi6afEa8M5ttmSaCIdxExvtg+pgCPGJS52xiTCCYZGY6KQhr9qze15IZ5I4Zc05juLjbOQEXX536X50wZpYOX/zQC87ep4GL+mAUl5B9hH9hLahNULe2ZVjgUJjP+iTeAACkFpgZMGBmdcA8AY8NZioqn8LZFvNKRWKf0jQBStB9k+BgpyGQgmTHcFXT99qiFFcWbO20YyDuhNZDecKSv56MR9CluQd/JozsiEJ2xr1GL9g3/yLXcDYaU+dkHZrkUcHVAAjI6J2o9TXWYf0DbntCajHpraKcV4uIUwIFlDvZyApVlFXgU3r63KVGQ2syGAklOcHk0P4n0kwiqx0tXZP5ksfCE2YMnudjPe7aMr5KLBNSrTkvaTNu0eo2pkKm5YPASmulckNn6+Dy1FQBWH93DIXvaPGwh3B0APUhtVa9KdhjPfQge0GAYV+4uCMsWemEa4CggEXJ7+dQpdXso/TMC/+L2fRxxH0sUCFK8D1NdTo/B+E1QaijVPMe5vLjqYV5jKpjF9R2Y3GA1A4wCoAIwQABi3TDYuDQAANkV0UVYHvo0ajnG1UDwvozaCcGitgo9Jt2t6OW+3nf5uH9GXIpKPlTf7RS7XfY+J8KS50U+YjzLsPmPnn7RrckOlc2IZNzbcgBfZcdJLMjLUyuvh/kHF+cHKK4+4kz/ZcFf58Ol0dUQyDfAjRDA5q+2a9/HsTlZRqAV+oyENuvg/AvnVhUwcJGW7ofoKFZN8JO9W9RvxOw2qSGEGKB2/lxju5CeRaK0x1PUsdzCS7ZiKpOV8k39ri4j9ElidLRf3OgwMrACV0a9ZeigP0bCSP5vur6DH2+c8ACENKgR7M6AA7W0gfa+ul3Iy73wAICbFVsD9oL4q8hXB0Qnfly0lY2vWXmIT8U4Ei3cwjWxF40M4I2hjHzUHXGnWCM64YU0qW88v+TiVjm5jGKHbQzGiWQZdxTDq4VLd+kftMM87uo4pIi4JFtKK6yc0RngY1SMX5Oicj25Sake0bPgHyWs4Y/FpzP+FCnrRVd8faHPygPUMpJoghGTHR8IEwAICow9fIgNgnHihhPJKNrBJPyhSpUEKJKS2mkitPxe/4/+51dqV5yHBofepG1qhpNYQJb8VcudEweQLdkUdWih8lSVFQAFD6/xLe11qfsZp4uv+2WjAyvYEsg0QTECcIGKq3tvu9B0DhmFoPLRpdzf82Qc01DnP09fBVfo9nqcvC3vzdOaPHh6nxOLoW2rxnVvdkMsvdNaWNdaKr75xjvG33/3Sus8+gKir6YsROcckaLLy5VGnK68+kGnAz7MBZJZWHxR5tKGYVLR6KEvtUolaxm4mtRw+lbvBgMy9ReKlxqejF6roXzcd3I2nl4v73vLVxMylIRVVQoUQ++iyrQXU2I56RmEQxqaTWkKE9T05TzE5qPrfLrfiDORP6+Bslb7NgWcZ1I5mgrGeKuAgKQoqFG2HrnP49cFdQEG45y1p/bz2dqxWK+B95RY7I7reMqzwvHQJz3Tolov37Ufg6gM9y/7FFurgzIbV/GXRjKZGPoW9cEV0K7cdJpDGCXueHzHcP2/H4VzDkw0ng7aUUW9JPRmod4VRQDTjJ8WY2plNoE0sRUxTuI4GvMPQujyI61UZImL9Nci23U+aPxfqNsS65Cs25IaQbLyBuWWgcnQ7Qyqg8PsCKpymzfJPAkQFCSkX16mj0RVHgT0WQGp9VLettrNw391SIM+PjDv3JWpswJzE25B3ilcuJqYKPXfigPn7KZfHqBzFUYlh1NVzSWruMfz9WuJ/lqwGOxgF9ywKf3bXtCgRLBMleaW6tQagA1Kyu5U8SMv1wcZ/M2MrmpgzNkXQgW8q7K9GzU/mVjx57rNVi1bV2b3f4+MedAhIXKvFKCRt8QBjAqywAwHkwZjf6XYiMWOlooqbFgbdtGvfT5EJexONVQWN6TC8ViBsjeFTe53uksccOo8ROwf+BE24mebDZjjr4Rg3Z3fJy9mTrFeVTwN5PNs6kbeYsleHqACK9MstHf9x6cGklQGwfwYzpDuxSdGI5ozGOlkramjFxTuGxlscrpq/b4nwJiGRQrURzW4u7Xo8r5pxQ9UyMaQ7nH6PHpB0VddU9hjJoaQSNcgzHk0QOTOtcL5rDSWP8vEKDYheKN8JSVkdHm8ePrJirfTPl0gtPrAR3kTahLEIHofdZO979H2vly0YdYDnIbTRmjsY4ZcNJQ3KvN9j6K5h5mpg2l8M1FixBo/rXwfh8WjKZGB6zds/KLyw7Eo0fSd7UU23TB8Wc8uxhPwcvFVnZZ7Zi3fmnyFGxTBtLVtjqQNh/V1gXQIz0yRC+pcuy0uOscT/WwmevPA26wwTzq8UVP4Alj+Ks8ACQy7Zuq454nRS0etfTWaNhhiLGONGqHZMWqCSfS0eDn0ZTyiytLdelEQF/QW1uLrjbthGb1gyReVBLI/0gyz9pxblTg6GnoRvo9uWbB6mbhsLaJZBz2borSLvRpMJq3BLuKLkl757lHep75YNC+X7aBKFY1GV5ILybluW9GbrRuuaFXFCYuai96GRQE/LVjiTh4TPCnSzo1n5Ud0T7TCmxoaQu/gYRFPi41Yy7+c9UZj8+RSGi0s65zPq6MWWo2rKjVxRRf+IKpqMk15p2TgZLU3U+L+TE9qGwp7IDO48invRvWccE6OhACYPk5ffzpftXM0+MlCgyYDrajW12ULd6P+fjtDNScRz92/egSjlGrPo55X3m6tjb5Y1YLLR9tM7aosjR/DXxVEuBEM2l1jJsETvWdoTjD8KcTp8XvYZ/8tZS0tojkvL4faKJSf3N3psM2EQo3TMZX5LXGv+oxhEbGUv8dfAkt12IrMsfgNPmzudWiZLTr2nKb8FdKH+HPR1/zC41CytrqUxHU/T72ps80pHVdSVi9ZrntDgarUyZVUIfZ4GGBj0VQ799sdY0POpNwzhgMpHHcYDIAPAAQAE3DN1ncWoCuTYf5Xtiu2WH2pJKd27J4br1Pm2lyOMct6mQ0dzSyMEt3qAy7n46ie6YmD9IZelELZHEyfbyesr6/7Sibdfvsb6CyM4+uLm7xWPfX8JCwUPoQ8rdMMkj/UI1jGviclKLgBvBBQUBaBPIHL4yBpVW5jPl23RKfycgx3l3zLZo/2vcyX0F5+qC4y9r4Z7SfdhrKEJibTscDksT0SP3G8/OotcQT2xsMb2TVgCvqkloElqDYX7Qq7gy9vHWnypdHTe5dYht6gi5lIdK3U22KwfHJMUrMUxx/qWmrO0jgW9ast0WFW6FnWCZk0zBc0t+SJxfSdA6wnZz6JA5inC++zkM9KVRX3V4G2C1ejCldH7lpZPBP+zNCPfmMj1L/kXcuFbg0IyQjckrX9X+RfgjC6En2IZuSoW8T+n9F3k09IMB0vpqKe90/CscSt/0u89ncQrhkUijzym4S+35jJrk4HdApI0CRVFryYKPmKnNBEBmgIPfSVEiwU3VA+VKqWQwRSG48buKTNX0psOxUCWsYz5V2RnfjxzeaWzHICL53QsKvh6S3YcBW2GKMNOJh9Tio+dliySOgOuEWTfz96UO0ZCT9T4ql/rmTcPE/p0rKoqQ0u1gxOvJGNTe/chtAI3CHzhSd5AcRxwEnxuNKDIG2E4P7UcMiPl9z5D35cvmPw+/s6obQpfM3tDjxQWY2k2V9R6CtyW6TfhHxdPRBipIV+WFCguoY5UdzgQ0yA6nKcM4ODDzloE1G/Ss8mZ7GwT8zkoMDaqJrx/vGuXtFbxcuYg/8+s+FkgVGCzW5HLmpCEHNjdaMNsRVUvepCoSFHXD+mU6EM25e1S946FlHguHOdLmuhpjUng1JKE/kZOkqteB9ai9eL9d0Vns+DRc/pGlMESqmtTyC4fKBJ33U0KlCWJVJZKhRDqtF3y6vhfdLAeQ1jxK7/C76GuFI9Hq2XvYXRrO0/73vf/F/CjEX/Rhg8IUhe8x3ypi+DuhxoB4K9FbvnvIMQ41ZxYY8y+P2lAsyF7dTpK5m/VCNFHUnbsN0fPB8ECKUTMJME2KRxv55u7JapBZnnt4P032zuiFzbTq/sB/6jBQW8RuPbx4fStPQLsE8tqGgKex85oXdLGe73r9NEmcZKX/zouWYbQHaT4RWTLgBCpj5FIwVLnsvOLTLlpAlBcbc7k/7gy2mEv+cd5yDn64usuPAsSabRJRdIw8YwLCQ1jzjYr22jXZQXkXFHk6Vm+e+fBIZhP+/xXgvLeVYRk3I/0XE7khlY4F+g/3nOoYlq92Y5nfD6Li4XzVFC4KcIw8S44DypSznvZlTS3dT1KjgbJmGuKFXfn2oqPWk36Z4zMhz8YBCnbX6bBWbJnjj9N0EumSVAjxNA1jrYBpTaXEzLvhM3PW+y6+cFV4egz/wHkkX0tvw3hVOE0A2yI2brxfGhDXP7mIojS6/tev1RhOw097UJfRHoFwkseJk5+5wf7u0Ris8IlFEoCtoohZ/nww0WkyrdzdL6x0h7OmAL0r068ZmEOiAMc5iy5HRZAUO8Uhdq5aD2juXd7jVc53MhgkkWp30i1ele+bgD/tkUsiwVNAi+Eo/1hjfa9G01jawD1YcPWWtAiSVLmxhCdHNXN4Z1x/9C8HxUSosuzofNwIDlWxzePFdL18vqQoSab8QgBfqD8VyzBBgvVKASpbOv+Ha26gIF+nRMWPOeLq6QxY+2RUBHhKOCJqcpaEvZogp7TXiqwMiLqMiPwFLXE7LU+i3dDebzAj0UemrqX+ZtgLbaj5JxrwExaDg6271ARWoLE2aiEPAgwX5HogLJf4jh+R02sS/R5drwMjmrPJQ6W8pjGcOyveLmenVUXxDsX2UrffMrBac9B+gMQK/a0Enru1WGKHvcK2WyTw4B32I9ddAAi/93Gkv3flivR5Yi4pGIBgdvr2bk71o9K3CaN0q6oe2+3iwrxx+ft2kXLgvSn936Jk3rKrIz0SuuMfZrWsmzRONAbEYz0IrSyPcHeGMW/apizVuhg+gE8EBddJOnKUPo1bXdzjNFqBN3W3NdMWEgkrjC7VHk53I5qoaM8AMsLvQxvZbW5FKZTdWFF5xFe8iFwrUm5yvBjebHHPpkqVokp8IxLkQrbhoPWrvlIYtHhikPRs3SBdgPpqJVkk8AF18oFnSeeZp2r6U6tU3c1bHXfy84+NNH36bJ6lVi598e3tAHgoQSQmQjnfQNzoRbqhaUYHNcbYIF+pOmUt55XnzPzEC8bStUlI69gX+GcMTSigZepHdVHejyJxprly9zyMI9zLP4iHRU0ruUN/fv+ZgOa71xlxtUIfE7VXiJEs7228VSH0TXpoeZeTZQt3fALPeUZ1Y/OwYxf/4yCP/Wr1jnrbywppYALsMCeeMpyf6cI1LyjkQ1YNJLPf+lFo27DQNG6l+5gxxdkIU5xNwYS68mrwNu3xOxHaozjb7Wmxx4F4derbeyWL2oo9XfSvqayaVLJwK4DElJ+bEQ5yk9jlPP7g3gutNEEjZd7fJux4WG4dwvI2s3za1ab1lC8EsjH1yo2Hii3q0LArXE0rtvE+z88YmbmKIefvw6dD+pAk502AHlXD6CPBs8J/Vt6E2wBddaf7lq0kdLdBOv2VwMHgm0lw1nyzoiZHqzceXvmJNdyLtH35vBxBabjGZTUg1NjOtHFQt7cFoHK4vEm+4CBTeu6nHJOkgu+4kqCLfU54LCo0FC5zxUnXZDzPNa15D7z8OqX6LL1886UqgnzUq1lqF1bktnT5Cb7QS3BkyFh/bmigjCeFDglNXdD5QFmYZzhzzVu4snAY08HUhgOt1bZo0kDFnUnmI1cpP7bXbxF1EYJA2BfOB3qkv6i1LxB43necD1MpYwLvLnUM43XQbct5mRzRxFZ/GNIMf3Xn1EbqDapBcXfQWtSYcbMviR2sKQMG1Cf9pMVLBJUsTlrZRJmqeHVptX3Ms+AH4LtWHee2HzcxL1NbEm0tmtdBzbrPu6kNIS7rGCwA+Rgkpmet3sJN5wef+HGYsJ0jJVqznkwkqloQ2NM7CrRtLj00NDeO5d5BjUl0d7OzFJJcBj/BwhYSp98HerDvf/9h1vXrE0lky2+/JqCOMD9rdrEXzdNATHim4+JHTlddi95Lg1hN6mdjFMmmPEV30/TbU5jZm7ksC6j+522ZdnwJjo5HLkyJ9pDeeDnqbRbW2eUzvkcP4/7Iw1E860pAMY0n8m1dAY0jo9rjJkXmM2GGDLmjrsvronUOTplXN40TGdbjpN3gTtG4wzpAf17niTP0rFf1RE+UN/PTl/Di0YgWZUwaPZekqurkj72deVTJn0zbmCdP3y4Q17ljUvAasXxb1Li/z7Eev9jcWRoB0FJTeF89dXvHp5HzPMzW6L9f6tWmycl/+G7W54S4PiBTpWKAJwgINKz9GBuWxRGmBUA0Jw5GBPyHczOHH8bnn4aw9C3Wia9+Imtc4tuw8174eSsc5qpd6+/dnJWjsPx6bEFK6UtNuwzIkZ0hW2VdyAL6sETwFJHJTB/otNpmESdgm7sHNKuoEFKwm5+OczP47QLz2sy3XNOVDCyDDWydtzf4VMLX7wqieNlpdX9o9oWLmaOohwhagL8QG+huKVjAwXfu8f6ADSNgLHXrcpMy5OpNuzNW3N65PnFKyLJLz17/YfUriDqkxuFnQlVUP4wUekUsIhd85MtC4HOS2kupBTS3lByEqGw/kIj17U2znk10KV/GSoQwM3A5XlJFvnHOE7H1nxe9Lsaj/vqW0i1F9GEphcHv3wJkKswcSAX2Md5L9/PDvPgNsxRhf77WqzCowr7GrvlLe/9bbEd+ljSZ8Kl0WQ+J40ktdexTJbCR4436Xl5QyLNnQkCzfWv0nHxfUx54aTbEDw9mwQS+QU/uHhhxT9PypOrLJ60PrE4Qcew5VMru9SLOOI/iAHfuZdEVfy8EKI79A7FjJ1fAYpvinHf2TauAELNZCcN/u/xlNviz9Doclg8JMp1rnDYWKqpRw5cjOiynHuQOhb/tI2r4lpTc65yBVXHw7MaUJKGZ8BmFVeBvLCGkuQI1fd+RBQ7BivM43DbsvHkCE9ro47MF4DDchjewJJ7Z8taHrWK9KzNMX/ceurfsu8OUYffR2w7wsGRXBfsit7SfqmCVUBTl+zoNiHJwbIXHvGXiJTe/oK5Fi0Eiz/lJ5xDfUSF91bp+J5+04luH0QUQVWgV3Emu0f732o8CBj9nVPU2n2Z6Y77BkJVqmNEDxZZBzh/diKlzVTvCSe3nHUU4xWtPOrFC1SIGn9orBv50q9Nh+YOXRYfz+OW3IjMb+UMN6a7ua5KJ+ErNPpJmCyoFL6r4bZdgvjlbDBUcdHjXKghJ7SZYgpc9pGAAAAAmFp8qDrzKkG8P7wQ4ddin91vxPm+MLV47I2/O8MD9lBZ37WX9MREVQAJoQqBaivQxqNZ03UTJxovePGShhhP34OKn24KILC7/KbGQzTHhnmzTFejPqxtoh77Vb3s3IZ7/SOLwiDcNw9lsCrjHqxNTXet2s/U3UQJzC0BEzTlw3ODIasLJtsX2RuMua1HgHpzWlzcl6fQ/eywWjtdI80S3PHRQ2ZwexOn7BBgsBEI+c1Pl06SAvJoQunWvcEza0EUgNJX0tYkouJG73vzyZuyOKJdW/JarW+PyBt7SgAAAALhYy8OPBRy2dEWN6ZY45C9tIW8mltIjdWXa5CW2NN+6VQuX/3HPIxtizp8A4L9ypGnEClmVYPvOgedBaww7diBhxOBaSdyw4A/fex5nopxKrFovCyDkZM5sOh8uoGqnE70SkLtKIQJWNMB28j1qGVJkOPmwmYlRFUQr+OxNECuwmRGqLf+Kjp1mPFedTIOstPC6CAvkoU8NrIMPOXv2Jd36Wn1nwXGjr+Zov/YriqaNFRbf71h3TJB92sh1Qzznlv779i3I5epi5z1dV9xTud1DJteUFWvh8ys5aWvcn9ct0x3Vmykowsb79pnk8kfyFdUiFvBaBAb/+iwpuKokVFkkbDRkrVjYs1QCSZN97FzPs0/U3rWcjYMkUcnJ8rX33glNQXtlbL38/O33N/yXBxR/1y1yCq2hAzVGSv98cld3952VhcH2EqldqZQcsQfTurRT3ZR5ql0zvv8u0nvWs8Z14CU+6q99AELe765/UY8lpAwjXRoQ191Yk4OQHywQH7VZluuYiEas5cpWc2sF9i3dNePdmhcL2Hqj/o4nJ/s24HzAb3E24V3+Qzg8kbLreay6otzgj0LTFhIyeyX65sne+0i7dLeluaXSLyHiWaop7KqMlgbgP0FCFYUW1KydIEHQSzULwCAnvFdgR7v1EhN5hvgaY8q120YtRytjrN4OLdmE0+5Bh/vNFYV+8ZnVHlm5Sbmt5y+KnPoL4tHavXZRRb7K2IskzuLJFpMootcjZuDANvI694SQ6R8Vf2cjFXSrxiy+P6f2vtZ3reqgpceA0fkSUmwTQF6hq6LCsWSEUe4aAyZ4cUz8pn8CZkpGFp9qK+t4AUFA0scmsPhHyneQcS/IzAw9KO+NJaW8rhDP2WvBT4XLnzL5DbAEbBQ2A1rxFZc57DlUZBK2VXV08o8QxhXleH5V+o/HEtAGumYPSKRRdlqqZu0RnG+P/xN0xUGJVbz2vRF4jtiadRNjxEsew9klmVf7k6fHGmgMGDwbpvYw9OuEazy90lkl7tQyDGZlx6XXArVwfAs+lVfUWCfoqUKN95k9zd2/gQD8uKShS2H79KnWbIHiweQHkIOdD/vqS9tNsfEi6gmkFmEBDNgyUl+hfu2TLD+mBPvQkRjtv+KvK1P7iIwIQXBPyRCecrCnZFVZYV1zIxhXOE8LuCb3JcOjWJQNXnz8hrmyNg0b2Y779wdKgFeI8Uosq1INZjQwWPX5H8yEAgLidg1RyK+dqT84K6xulW+oB/Mn9n4Y70rcC/zAY+yl8w5uOTzHjPwigS+TqZUcdaSl0hYtNKQCQJ+dj5dOxwHjlU4sML2Xf21vN7i+QIaraELY2PBR0KMkU+vGQlm5NKGpgHvVFtUEN+0+GSsoaCpVGXPu5tji8Op/XHgD6NDDTKGXoTNr7XeUZNorPRXEJbX5aVYzHA3JAnvSuIlt/ysjm9pTJkSK3xNnBj74tEgSWi4tflRaYERkIlzu1um1H/D4kaWm+BerjKrT1r5Cq/X4Zdyf7DsqzXTQEwKdZO6riM0tpEqjCswI3zeYUInzaZsR9R1anuUELSGK0MYdVBSCVqS8CiAIDr90JLub5J8yvUiBrCBky2I4Tv25/aPC7LbmgUqBxgiCq0oBps2aTVOkbTk6tkxoX9OqbHeqIhJ8A05Stfi6C+sThMpSDVcINpd0tB/IU6kQkolxnYnbS89ABloh0ryuo6I5uLwA+T0MHeaDUtq4udUOsOg7koYzWiXBkgaBQAAJOGxCwLhB96sLnujrxa+cH3AdOyvBblE6ZQ/O3PNIziRkYspzMXvo/fzP+UABcuBARMg+4qm3EPgaau9cl+HTwRa9iNb7UrpmMllz4hMtIN5deYd2oFAXYZaWfXHJMCjHE8DhHOCLE4rzTreThFNtqbWK4M0610NSXPOCihZTaU1G9mN0tc7p6V8Kr/WPlrUA+vNJ5l/7OBpAjyUOt+hMOLHzNBEI9og9eAXGGFHBmr9Pvdzq8vEKfgYVvZfCEQ6g1yy8tUU00XOj1WT4QHxsHRXNdB5Ln0+5mv2wwqLC4oY0XmT1dsZzJkDVCpq2GIV5YcLx7PjvgRNcsoDMk6aAqZyB1arEingzXeykvCo/3YPc+AOzyD7khbdkJc0T7Gbzg4gA45tAVNLBBTYm2EY/xeUqCMhGJxATDOgGBxFHdsS1Jb+dcIaueip1sL/kfmA/Fux9f+4J9o7WcRFYlRpVUk1pIxW9Aa89xOKm3qGxLrWm/sNGDvPNoeIOTpLAdN6M31k2fDeaO8413qkWAkTS2X/ToaKRm1DqZSj2S0R7OB/L8+9fVXx64oXYnPIqGoAwpMIefDg/k9QLxPxCnCRqfwmuspXCKK/X/U4hEvvX3uAYM0IBPDlrLk1QIH3DYDNhXlcs4kpHOtR7DLKQG5h6HliKvp/39N3pDCyK0K6SqRfHy9pE1B+ErA4plRXpIypcBRxqZ4Jc+Kx4Mn30YsDEalYy7PZnWsz740C3cF5kkbIzspD9ZcLyKwq+Izjg/LevedHLtBwfm/5HZM0ynytd4AePK93NCze1DvnEcJFa82ZcXbt1BrXsu9Yxbv8RjOQ1yBANs4pmMPCSGvb9eVMJRt7XikwGk8B2KIOTePVFESZsPydf20iix4VWnITukJOwqrcZ9Wh6K3HYGRKpQD59j7Mxic1OoWOkp/K1TKgd86QT+6ksPf5WBIDGev4D8Srtn0RyYmWKN636s1EALQb8aJpzBmVcerH3fDLkicK5FqNlwrNEyWaA9PRk8u96v+HEJwkd6FHCsV2IqTFZv3i+ODGjbk6wVVCiDIrR8lVw/86EVt+rYIwUKglJfig+lrfnVcv8Y6xrTjyDkf5HmI2TncuU4KrQn+ki0kDXJ0RayeYUKEsWsX5766c5Gjbm+ezPm+98ow7kfM6LFHo1jkXEulrkcWCp+AWdaxJdBWnBnLDHrecLD+ompmhfwGQGIce7vA/O6ZSIHzQcNjNp8y6XpUrjPT3BtI+2oz7kb5HUR1BgKWdfh4tIPBcwUeT1hiDFVEq4LhwXU3m/umXYQXHq7cPVRRF3u2iaT2iN5+jXJ9Frd2vVXiI1tLU1TtiLGOqhm6jOfhUwQz/JjXCNzopEVYtTpXgh1sf0lA8h6GtYJRLwmD2jyKRKxia6/7QDhMtNdU7coM9gsFHiYNz00UgMwy9lcilDT3kwktfCNfSdxHpj3TUNdHXZumu1uCDQQA9cxr9g5AUWJnAm4+S2aOtHNP1uj7lEl0MFkynmyxx+a1tQYyfV9sUgToeE32Qo5iZ1KqeP/L0Y+qHzM8hG5DMXDzzd5E609h27d1sXcTryRFiYDFdvl3CV28QsVHmXWE/a5/HRzrs1ghj4ljPoli6yB9Wo8KWswOn9ypCSl9eGiYhnevE/rhQ+FbH87WTvq8BKm58qlpR9F3pxToLS9z8LnwlZXgROT3Mvd2d5Z6f0kQwUYgMiUH6eemvKsAE+Yd6zE551vLFLRGyRibCZr3CRk+gSOKWGzOI6fO4Mqw6c1unZYvjmzb4qAfHydXvYURUm8A2EE7yERtoe2+WEY3GBOygMefKpWiWzi8YufZLFpRECv0HDVoX7yFl2fOFcRgaYW0Mr8zJkir72LwkSb9VmQh1Gs/2GO0bMAC58j1jaDmWB15w+lLt+sVXI7xvoCA1kW4mh2XQSo+FgjrBtNtHUeeCX9iVPpMxNmo+00bfTgMIvZ/3LjwMgmtJhVnVuebOMWzysXQlqTrMHX2pNmZ30spWdmCC+Yo4IvlQpbPhAUcw01Z/iPDajPUGWR41U8U7avv4DH978pN2ZyMxkouGvEzheQ/gU8rT0PI1WJfKhQc04mfWscGh21XkynlvxYN2/uv1TZZHLrYZNFw3JENjdo8WJQY4oyGK36Ar5hL83Ny6UT6/qMKkPmtQoCkfTaPnapmQJ0hp7tWz26GD/LK7dtl4Yado4nftnftqMI4DKODhm/11zjFVuFRsRq7+6Nf+GC+vOq64hWe4Ev5aR8s5Zc+6TItuQ4RzZbY5TR6DP+yTVEadmvk5t3AZMmtNRuGg99jJhiE44SBXT6JQFMtZt6wvLYxKNTNAv51DhOIATB3eDsRC7KJgrOFUQ2HHSrjvj2PYFXvFWmFmPC0D4KLY72luVkCFuRBv4anyDAoWfkcsXVCOpbqJpDjeM6EggsnPSL8vf8N/yZrOZySOXCvvveqx+Wm53oZyCyMgzTeD5Vnr+53TO4nRT6kNuuTmykXQYD9foEytr8dPH9rDUQ6LxQiHO6j+I/mYQzfr+WJb9p8TH88744touPp43Vq2iBqU5Lg/jXYXhZFUs8gNusKeePqdAanYXeuimqbyfWYsvyXjZIm5TvHwcJxbewj+LhoOLUQknqis/zkGaqwdm+6pQJ45bS/OXQ5/yavhlL+qVxsZgvhCfx6W2FnHw2x7LxG+rWB6C8isL6BDSdSiOOtzm8hknvT8t9LEc9E0Suo4BNkZppy7oeBRhFMcLy/xmQJVCfjDMa2RyBEOjsV1Z2p7Z26llYnySqyQ1PpImyqTh3K9gdD6yqc9+iuwJmZUa2Mlk8Y3uzjUb1A+/00fRcvceKDYxx50sZvgZHmecDKPFpb7KH6VWb3aIMugAcH/z4DR2CZGMxMGa0YBmw5CrGviCbSEAPgZODXZ75smZlv/eTidBseIXwh7RlczpJm/lIeJxqCgGEwxN01vp3SBKlYA7lq5w+myUhQEXanlVRgB5M8Gtk0WioBco+FVZULZpEVpNTUr8V/JVGf4YeXOZeGg66+lHXsoM5z5Wd7DPATEGJa1VLX8wCb324U411Ys2OXDV7V2KyNeyiM9FbVtMlfGagpyuklNhKUpxw3a31FOhA0gnoPJlJYC0NRyI1Pq3nQhYMlQQDwIBCFKcEO/ElmcEhk/d5F8MHSWWhvet+kMd2U3qEYuZnvm+ubDyPk+mU3Cjasy2Kyu9fsxvY15KPhhUgKTN95amZagu3arpA6VQ6JEZ2Ye/+hOQGGwN1y8nqKz3/7V7iIJcZ9/s46HEob5X9v+26lXx2NmvmBssm02Uz6TxrG8ybeu2qSMR+UYqh8qTVq7C0LeSbypgluslifvnTEN4hdBe4+510yBCAA+6QYHpjj51YT1Y6z5oqSz5xizEWigGjVz0ynZmcmMA3rpmbAAuCAQniW/YRAxuazL5aMeX3c0/LCNA4ulN6cEp+rbXNNcy52Y9xkf7YfU+mLtARpyy5Urse+HNHDbGMwey0IlvrQw81HxLPoYWhZpYroE679nIwUsXnbndSnLXMt2zyWuh2aJesH/kHsUMyslWjb4vr5UwW6uLKOBDpuKl4cEWJg2po1l8NF0fRf1KnKeWhhTkT7459t7D73stVoqUgapT6ie27P4B4AJQH+ll7eEiiVwFB3vsCuCAYjasREU706LK9B2SkzmSWbXNzOO9dCYxnKxeOEsROaYla0krsaYv8/3fOMVuYj2PKjOOtQ6Nsgm1CmdNnwdeshNUS+uxdvGImViM5t6+PPl0paYNrx6Pox1mUbQtSUHMCW1TcwgIQ6U3RyfBKtRo9VQJ+KbTQrJ6uI1kZOWxlDnTxzn1tH+ogEFh8CpGaD7O/N0H2uUIoP1kJhDRYpTIqPwU5mWfo+QY19Mxtd6uSTS3xltOt4CjnOnx9DWaX/DMoR1BLAOc2vPYp03TV2EM6to1OGwTQJdSZn6Np+VXEzaldRdfIfWMM6EOzn6yzpPgR+d0srXLoiu1+mhuL1L7EycEMYukOIIVxHr0xwjUYUHasfNro8TVcAZoWYpqP33opvl0HcOuF+P7PG7pxCnzFjatXYT1OIQzEnR0YdSS14s/LNHK6+ZEoefh5yWt5o6ZYvatI/zVg4ejLrLREgs+vTJnBFvAFEYdcbFOjfJ80eWI0vwUluf+8tsFSmRW+neOb13pmiqwMZPnJE4KH8zRflKkpCPbXt0i9S0STvxTfMIHUQ7b1xnK9qsU22ABvTL9KJidsvgGMJESOIYRCFQorB17JxwZY9+RXHUf+VkZjL0kT4DyAn4pAEpDzT/VqjFwTFCPihHJGkwLCTiLSVNTLX83RRdxfRRgH6d0VB8KbQJD3hOnkwnBwqHvOHf65XDyZjqsCuBYyjYG3045cK+zpKDpWLaUPFUT0andK0xJyiMZ3IdoQvz4kPXcH+sfxifEgw1kK7QhnyNwUWfAuPFj+vzRa9RvD8UYD+vJ9ml7PprvLme90rCryWGU6diawCBfZMsfSlLI25pC51uo5sX5NO9x98Z7W5jO++17YxJfu7bVptYEoEsFAWPhbMlLHCwNSC0t5u8t59ISzbPvvas62iO9tAxMGIhKHcWTbpZh1NU55WePwbc4fVuy4rtgAJ4ggEYIEPW3+LRqWmVmGdK3Bdk/U4bj+sik2X8FaXYxFF0Tu7e3BiFBUWYAndKXw+vPBdhf21/SRCe2NighGxG9sKngt9B58C3Fnc8zlCoXU+VDnmV5iISVvmSm3lJVidM4lZH9p8cS6IwRzFwzjt9sQFoqKai0BTisqrHTgx+9q2MPlI9oVqR3uP6cDXAEpibUtclCHHmiiK50mxY7ffWYJVKxZ1xHdIgMsQPKxlovV6gbZvLVQwhe9cvCzr8ItvQZ7tUShVSvwvZR9PNLQeH93N/O/PVicwOQyS36G+ggIuUa2Pkix3Gg3JeCd7vKXPdy9Oxsv8lKNjIqIIAABpOm4lSy3cId4Ridi0eTYClqultzxxu/dr8SkN/HmyJHa15PSzMCoa6O4SzSgy36S9Oxrwa/4KxHGcMe6PpTQEoDYrQhwdBj3oGqt53LKrdu3saz/7h2e38/H/ZGZKAfUCS/GveRrzru2jAd5vrNTg9f9aAC/0lWaAB9ica08yz7uG7ByXxQnLaELxQkzhQf1ZyQGgGD5xHxK9PTjt9L6xSOn/DbL++tubZlkfPLsX7rg+5K2THVmABQAP0otRzZ5n7qqfUIj2tkiHA0525wnYnDeshWSZRjjHzJRfn8F1tG6jjBzeSnexvXvKNWBx1+pMoWBdjp7WuS5nrlWZ+l7bi7z2P58LE9UwnB90CWSLgfLpObir98smDYw2iIUotRCU4tWyE7iP/MWv0PchHEXJQtBeugsycYGXEZR4cvxv1pVkdaDXR+pY+CZaQ6CfUSt1zaM64C8jbt8axAJjjvK3+BtFOSEnFCnCcLqcz6jBfoZScAKhRCuP5rrOgsvpkWzH89XQTSbv1qQDvAACUNCyViroUZWt6CyNDwM+r7+/ITivi5bq3P805Q3y4eC27Z2SgeoSUKFv313bdRGVVxlPestZG6Pu9wZ9rpTt/SWZYqnRbr/BWUXactYyPTQpUtfdqtMjQKbu2KJZ5NyKYxmuq9/8KM6Xmo/N4A/fLT+Dil7snvwHoTn8t76biCZINXQ5KLNGI4meuhnBivd/e4PrdBLL171YLIWk4vyfdXG0Kn1qtUkBIXxuzwRNKjoOzxBQZX0UpB4cKuTww1Y+xhL9mA9UlGIQ+lRPprQNPLJku9Nwle6qfzxs9vWzLsjtTuGJszMPnuLPVvIc1GVW6b4GbCagISB4i6fl7u3MvU2fN4V+Wu2GanLvI5CbLalpArN1Bdd8IazTfhAnb9SOkV46EeDjByZE1VyRZp1EQb8V/cc2F95pavvg7MuECAke4OiNcnC1mDxXGF1KCWPOd6naKrFvbg65Uwz58Q9X3fvr7kVNEDazKMJ9n5ilbH/+Pn7CViMtQT1XN+WjLhDHAUGBQvB987CdaHQfio/IqcANjGeWflvNR5fBUJPwiUIPU6ZNWH+Whv3USAJoy3iT0eKECAAAECACZomxb+rp3Kf2tmokI9JgT/z9taddFO87WU8lNebx2YwCBQ7uvmaDozrL0jZn9mHYE5d+qKzzkknBwLfkd63YYqzr5FVcPbiIpryJOwqJBHz/6BTIckIEaxKpFTh3h3qpAomq8vnkFyy+Q8+qy2jC0fShaO5aDtCV+ZIaY+uAKW8Sncbt62nyKTZBdfJQmUUKrcYLZit07f4tjhat7+3B6WQIR3NDudlwDmEOzbnjgHawVePr2JyVAZZh/yN3OHNsdHuHb/GhqcD3ZgYOq0uvmHN0pz4kiAqwh+Pi09zA3Wlfv4AAA8OXDZd/eRw6MORt2cmsIzqEX9hTgXQr9Xfmk2EqIpwolz/sL4ELqgKl9GA18G57lBpLhGVaqcu7Zi//9akAHFns32+P1KEKoRcDZigg55UGh8uhvidEm6tspltBsrM3XE0q4ife+QsIRc1aWNV1wyj2HxWBBz/+9Ee5aOcip+qvUhDw1t7JXVt9A/nIXfE173eN0E/yHgfHZtl89+qLoeXvz1BH3PGTzu32pE091+Hz5GL+IAHJsqogRALQAAQEQTKelIEABiIiABpERCAAUCIgKIiEIgSlRChSSpVFUAAIPPNcW+AFAQQUBCAoleSq2TewP0x+8kMRJP0HlqL75jE0UAbdvQtBk+Q47P3a/cz41dtpWLipeDgTJ1IUCvOooAABaLZefkxNtmcS5AxyLx+fW8SNtn4AATxdY2JU4Car7lm30DuJL6GEbsTYIKi87tNSQx9cFJGl/o8t0xItlPB+sZaypsSiete1BK3vjdlidlhYFplZF2f1mz4umQ5my0nu+R0mjArGAEN/tGaU5wOHh3cIP37yQWAkAAQuN0lTB/Vw06YG4N5XCgLu8Lo+uf2gkpmlLl6avAiJp8kARktMhtECfTTFfmxXBJspCAR3zZ+WPQZDoPYI5WxbNg9XUpnevioUAAAADwJTCdPGXQ8dcpYDmrQ595ubaSYhT8mpwKhZIAK8M1Rfe8zsHe9fHbqjPVG9PGrEFmvBUZSrIBAyBquGVHruLMawJtkA8AQAoBRbh5XvV4+uzEiLuOUBZQO5QAifA6Qt4qQ4o1olBePdUbP4ujAjfzNiwHWt1MRAiILIEICBAloAAAT+gBUAAPtAHiAAA//F3JFOFCQdlvTAQA== 40 | #RU QlpoOTFBWSZTWQvRUCsADqx/////////////////////////////////////////////4B1+fFCglFN7W82Wb6fPPPfNrwvvt23t1e92H33vfO3vfdZHrdV1kr6ePdvvvc5596983c+972+hfDvcd5e866+3vvbrbNilbjvevOnw+931PfPeb19tvoAiiJpo1MDSZqMammlP002pkMaTAJo0xMTEaaRtMGkYpmKZim1PEwTRlPQ0yYaIniYmJo1PBMTJpk0MAaMgAak3ok80mTABMTaCoRIiaaGgnplMaCaY1NMp6p+mEwJpo9RkMjDSNpTzSnpknpPJPKbInhMjU9MmmAYiYmJmianieiME2jUbTU1PSmxtSepiaPQxMFNphSb1PJgjVPKe1QiSEZMjVPSn4qe2hoRqeANAjTZAmCaYExPKepjTQ00GjSZGCZpoaNIYU9MFJ5PAJlTbFMNJ6nkynqYwSnk1PNMp+lNqmxMaYp6p+UxJ+p6maaMmqEUUyGmp6NT0EwamGRo01PQmGg1PTRlM0001MjTFNkmMU8RpghgCZD0TCMJNNPUzRPIaeoyBiMmmJkJ6ek0aTNGGonqeE2o00noRvUn6mjU9NQagggJmo1NMU9MRjUxqaaCZqep6YKek9T1P0kxMPQk2ieEnqHpM0mekZT0amyJhPRpPU2k9JskeiNMj1PRpoTTE8k9MibRkCaYNJp6GQ0ahhqZPSeSCSSQQTAmmARiE8mInpqepgTanqbQE9U9PUY0mTRkyGjaRinplNmkMCNGEekwmmmIxM1Tek0wmDTRDFPKeUbSbU9NqBtJpPRp6U8pptJ4Kemp6TELyprg061sHwXgOQAEHorAbjKBeLBUl6enMZc2+s6KBz/egY5lbJA6FMZMxUCnTkkFXXVpIq0kzZFPfJpFisqc7VxwZ2JaFn5RHQCryOhNXFwoI9RPAhDw9QuEDpiUH7NNDASozMkiyMkIzc78r0vNmTHgtQyD3mJ5kJCzTI85kTcs6XgNHPBBY/83M3Mw8SEfEPCh2SDvJdwknzCfMKRfORZexC1nYfpyJhsCkPUOWlU3KSd+ORQ518dfAJhAjqYJHIYYo+tODOhbQ/dEJgSkfF0aCwgQwwCfxInnhWQZWdkF4GVBc3G+8i9APCh2PfY71oJPDkQBiJI4vg8KmYFIsIvDeawhZQGYZKNYr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 41 | -------------------------------------------------------------------------------- /underwater.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | VOICE=Alex 3 | 4 | function SayMinute { 5 | local s= 6 | 7 | [ "$1" -gt 1 ] && s=s 8 | say -v "$VOICE" "$1" minute$s & 9 | } 10 | 11 | function SayMiddle { 12 | say -v "$VOICE" half & 13 | } 14 | 15 | function PrintTimer { 16 | printf "\r⏰ \033[7m %02d:%02d \033[0m" $1 $2 17 | } 18 | 19 | function VolumeUp { 20 | which -s osascript || return 21 | 22 | eval "local _$(osascript -e 'get volume settings' | tr ',: ' ' =_' )" 23 | [[ "$_output_muted" == true ]] && osascript -e 'set volume output muted false' 24 | [ $_output_volume -lt 50 ] && osascript -e 'set volume output volume 50' 25 | } 26 | 27 | trap 'echo -e "\033[?25h\033[0m"' EXIT 28 | 29 | echo -e "\033[?25l" 30 | start=$(date +%s) 31 | echo -e 'Press ^C key to exit and any other key to memory current value.\n' 32 | PrintTimer 0 0 33 | 34 | VolumeUp 35 | 36 | while true; do 37 | timeout=( $( (time -p read -n1 -t1 -rs) 2>&1) ) 38 | 39 | [[ ${timeout[1]} != 1* ]] && printf "\n\n" 40 | 41 | now=$(date +%s) 42 | per=$(( $now - $start)) 43 | sec=$(( $per % 60 )) 44 | min=$(( $per / 60)) 45 | 46 | [ $sec = 30 ] && SayMiddle 47 | 48 | PrintTimer $min $sec 49 | 50 | [[ $min > 0 && $sec == 0 ]] && SayMinute $min 51 | done -------------------------------------------------------------------------------- /us_layout_remover.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Evgeny Stepanischev Aug 2012 http://bolknote.ru 3 | # http://artpolikarpov.ru/2012/08/24/1/ 4 | 5 | PLIST=~/Library/Preferences/ByHost/com.apple.HIToolbox.*.plist 6 | BACKUP=$(echo $PLIST).backup 7 | 8 | function GetSection { 9 | /usr/libexec/PlistBuddy -c "Print :$1" $PLIST 10 | } 11 | 12 | function WhereUS { 13 | local num=0 14 | 15 | GetSection "$1" | 16 | while read -r -d} line; do 17 | if echo "$line" | grep -Fq U.S.; then 18 | echo $num 19 | break 20 | fi 21 | 22 | let 'num++' 23 | done 24 | } 25 | 26 | function DeleteFromSection { 27 | [ -n "$2" ] || return 28 | 29 | /usr/libexec/PlistBuddy -c "Delete :$1:$2 dict" $PLIST 30 | } 31 | 32 | # Смотрим, не было ли бакапа 33 | if [ -e $BACKUP ]; then 34 | mv -f $BACKUP $PLIST 35 | echo Restored. 36 | else 37 | # если не было, сохраняем исходный файл 38 | if cp $PLIST $BACKUP; then 39 | # удаляем упоминание о раскладке US изо всех секций 40 | /usr/libexec/PlistBuddy -c Print $PLIST | awk '/Array {/ {print $1}' | 41 | while read field; do 42 | DeleteFromSection $field `WhereUS $field` 43 | done 44 | 45 | echo Removed. 46 | else 47 | echo Error: cannot backup file. Exiting. 48 | exit 1 49 | fi 50 | fi 51 | 52 | echo Try to logout. 53 | osascript -e 'tell application "System Events" to log out' -------------------------------------------------------------------------------- /wherehaveibeen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | function coordsToAddress 3 | { 4 | local x="$1" y="$2" lang=en 5 | 6 | [[ "$LANG" == ru* ]] && lang=ru 7 | 8 | curl -s "http://data.esosedi.org/geocode/v1?lng=$lang&point=$x,$y" | 9 | awk -F: '/"name"/ {print $2}' | xargs echo | sed 's/,$//;s/, *,/,/g' 10 | } 11 | 12 | function macToCoords 13 | { 14 | local mac="$1" 15 | local where=$(curl -s "https://api.mylnikov.org/wifi/main.py/get?bssid=$mac" 2>&-) 16 | 17 | if [[ "$where" == *'"result":200'* ]]; then 18 | echo $(grep -Eo '"(lat|lon)": *[^ ",]*'<<<"$where" | xargs echo) 19 | fi 20 | } 21 | 22 | function macToAddress 23 | { 24 | local mac="$1" 25 | local coords=$(macToCoords "$1") 26 | 27 | if [[ "$coords" != "" ]]; then 28 | if [[ "$coords" == 'lon'* ]]; then 29 | local xy=$(awk '{print $4" "$2}' <<< "$coords") 30 | else 31 | local xy=$(awk '{print $2" "$4}' <<< "$coords") 32 | fi 33 | 34 | local address=$(coordsToAddress $xy) 35 | if [[ "$address" == "" ]]; then 36 | address='N/A' 37 | fi 38 | else 39 | address='N/A' 40 | coords='N/A' 41 | fi 42 | 43 | echo -e "BSSID: $mac\nAddress: $address\nGeo: $coords" 44 | } 45 | 46 | MASK='(BSSID changed|UserEventAgent.*Probing)' 47 | 48 | fgrep -B1 'Probing' < <(zgrep -Eh "$MASK" /var/log/system.log.*.gz ; grep -Eh "$MASK" /var/log/system.log) | 49 | while read line; do 50 | case "$line" in 51 | *BSSID*) 52 | mac=$(grep -o '[^ ]*$' <<<"$line") 53 | ;; 54 | *Probing*) 55 | name=$(sed "s/^.*Probing *'//;s/'$//" <<<"$line") 56 | echo "$mac $name" 57 | mac= 58 | ;; 59 | esac 60 | done | sort -u | 61 | while read line; do 62 | line=($line) 63 | 64 | echo "Name: ${line[@]:1}" 65 | macToAddress "${line[0]}" 66 | echo 67 | done -------------------------------------------------------------------------------- /wifi.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # График занятости каналов WiFi на bash. Евгений Степанищев http://bolknote.ru/ 2011 3 | # Bash simple WiFi channels scanner. Copyright by Evgeny Stepanischev http://bolknote.ru/ 2011 4 | 5 | declare -a dots 6 | 7 | TEMP=$(mktemp -t `basename "$0"`) 8 | trap "/bin/rm -f $TEMP" EXIT 9 | 10 | if [ -z $1 ]; then 11 | /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s > $TEMP 12 | else 13 | /bin/cp "$1" $TEMP 14 | fi 15 | 16 | # Если название точки содержит пробел, у нас всё поедет, надо избавиться от названия 17 | # для этого мы меряем с каким отступом идёт первая строка 18 | cutname=`awk 'NR==1 {l=length; gsub(/^ +/, ""); print l-length+6}' $TEMP` 19 | 20 | # Название будет отрезано командой cut 21 | while read line; do 22 | line=($line) 23 | 24 | chs=(${line[2]//,/ }) 25 | 26 | # Берём только каналы 2,4ГГц 27 | if [ ${chs[0]} -gt 13 ]; then 28 | continue 29 | fi 30 | 31 | # Округляем уровень сигнала 32 | let lvl="(100 + ${line[1]} + 9) / 10" 33 | # Уровень прозрачности верхней линии 34 | let alpha="$lvl*10 - (100 + ${line[1]})" 35 | 36 | # Номера каналов 37 | let start="${chs[0]}-2+1" 38 | let end="${chs[0]}+2+${chs[1]:-0}*5+1" 39 | 40 | # Набор точек для рисования прямоугольника wifi-точки 41 | for x in $(seq $start $end); do 42 | 43 | # Прямоугольник закрашивается сплошным… 44 | for y in $(seq 0 $(($lvl - 1)) ); do 45 | dots[$x+$y*100]=10 46 | done 47 | 48 | # Кроме верхней границы, она закрашивается значением 49 | # наибольшей насыщенности 50 | let xy="$x+($y+1)*100" 51 | 52 | if [[ -z ${dots[$xy]} || ${dots[$xy]} -lt $alpha ]]; then 53 | dots[$xy]=$alpha 54 | fi 55 | done 56 | 57 | done < <(tail -n +2 $TEMP | cut -b${cutname}- | sort -rgk2) 58 | 59 | # Блоки по насыщенности границы 60 | blocks=(_ ░ ░ ░ ▒ ▒ ▒ ▒ ▒ ▒ █) 61 | 62 | # Цвета вертикальной оси 63 | colors=(32 32 32 32 32 33 33 31 31 31 31) 64 | 65 | # Счётчик вертикальной оси 66 | lvl=0 67 | 68 | declare -i alpha 69 | 70 | # Отрисовка шкалы и данных точек 71 | for y in {10..0}; do 72 | printf "\033[${colors[-$lvl/10]}m% 4d " $lvl 73 | let lvl="$lvl - 10" 74 | 75 | for x in {0..15}; do 76 | alpha=${dots[$x+100*$y]} 77 | 78 | if [ $alpha -le 0 ]; then 79 | echo -n ' ' 80 | else 81 | b=${blocks[$alpha]} 82 | 83 | echo -ne "\033[37m$b$b$b" 84 | fi 85 | done 86 | 87 | echo 88 | done 89 | 90 | # Горизонтальная ось 91 | echo -e "\033[37m -- -- 01 02 03 04 05 06 07 08 09 10 11 12 13" 92 | 93 | echo -e "\033[0m" 94 | 95 | -------------------------------------------------------------------------------- /wifiautofix.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | wifi=$(networksetup -listallhardwareports | fgrep Wi-Fi -A1 | awk 'NF==2{print $2}') 4 | 5 | while true; do 6 | if networksetup -getairportpower $wifi | fgrep -q On; then 7 | ip=$(netstat -rn | awk "/^default.*$wifi\$/{print \$2;exit}") 8 | 9 | ping -b $wifi -t2 -n $ip >&- 2>&- || 10 | ( 11 | networksetup -setairportpower $wifi off 12 | echo "$(date +%d.%m.%Y\ %R:%S) Reconnecting…" 13 | 14 | until networksetup -getairportpower $wifi | fgrep -q On; do 15 | networksetup -setairportpower $wifi on 16 | sleep 1 17 | done 18 | sleep 10 19 | ) 20 | fi 21 | sleep 1 22 | done 23 | --------------------------------------------------------------------------------