From a850eb4269b192714360b86dbfb31a8cfc55e02b Mon Sep 17 00:00:00 2001 From: pucherot Date: Tue, 19 Jan 2021 23:11:01 +0100 Subject: [PATCH] v2.60 - Improved installation process --- README.md | 4 ++ back/pialert.py | 27 ++++---- {back => config}/pialert.conf | 13 ++-- config/version.conf | 3 + docs/INSTALL.md | 70 +++++++++++++++----- docs/VERSIONS_HISTORY.md | 28 ++++++++ front/img/{backgroud.png => background.png} | Bin front/php/templates/footer.php | 4 +- front/php/templates/header.php | 2 +- {back => install}/pialert.cron | 0 tar/create_tar.sh | 2 +- tar/{pialert_2.56.tar => pialert_2.60.tar} | Bin 58531840 -> 58531840 bytes tar/pialert_latest.tar | Bin 58531840 -> 58531840 bytes 13 files changed, 111 insertions(+), 42 deletions(-) rename {back => config}/pialert.conf (81%) create mode 100644 config/version.conf create mode 100644 docs/VERSIONS_HISTORY.md rename front/img/{backgroud.png => background.png} (100%) rename {back => install}/pialert.cron (100%) rename tar/{pialert_2.56.tar => pialert_2.60.tar} (99%) diff --git a/README.md b/README.md index 5d1c5b2c..85adf168 100644 --- a/README.md +++ b/README.md @@ -79,9 +79,13 @@ Linux distributions. - [Device Management instructions](docs/DEVICE_MANAGEMENT.md) + ## Other useful info +### Versions History + - [Versions History](docs/VERSIONS_HISTORY.md) + ### Powered by: | Product | Objetive | | ------------ | -------------------------------------- | diff --git a/back/pialert.py b/back/pialert.py index 93af5afa..7b4209d7 100644 --- a/back/pialert.py +++ b/back/pialert.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # #------------------------------------------------------------------------------- -# Pi.Alert v2.56 / 2021-01-15 +# Pi.Alert v2.60 / 2021-01-20 # Open Source Network Guard / WIFI & LAN intrusion detector # # pialert.py - Back module. Network scanner @@ -32,11 +32,15 @@ import csv #=============================================================================== # CONFIG CONSTANTS #=============================================================================== -PIALERT_PATH = os.path.dirname(os.path.abspath(__file__)) +PIALERT_BACK_PATH = os.path.dirname(os.path.abspath(__file__)) +PIALERT_PATH = PIALERT_BACK_PATH + "/.." + if (sys.version_info > (3,0)): - exec(open(PIALERT_PATH + "/pialert.conf").read()) + exec(open(PIALERT_PATH + "/config/version.conf").read()) + exec(open(PIALERT_PATH + "/config/pialert.conf").read()) else: - execfile (PIALERT_PATH + "/pialert.conf") + execfile (PIALERT_PATH + "/config/version.conf") + execfile (PIALERT_PATH + "/config/pialert.conf") #=============================================================================== @@ -54,7 +58,6 @@ def main (): print ('---------------------------------------------------------') # Initialize global variables - # PIALERT_PATH = os.path.dirname(os.path.abspath(__file__)) log_timestamp = datetime.datetime.now() # DB @@ -254,7 +257,7 @@ def update_devices_MAC_vendors (): # Update vendors DB (iab oui) print ('\nUpdating vendors DB (iab & oui)...') - update_args = ['sh', PIALERT_PATH + '/vendors_db_update.sh'] + update_args = ['sh', PIALERT_BACK_PATH + '/vendors_db_update.sh'] update_output = subprocess.check_output (update_args) # DEBUG # update_args = ['./vendors_db_update.sh'] @@ -1049,12 +1052,12 @@ def email_reporting (): openDB() # Open text Template - template_file = open(PIALERT_PATH + '/report_template.txt', 'r') + template_file = open(PIALERT_BACK_PATH + '/report_template.txt', 'r') mail_text = template_file.read() template_file.close() # Open html Template - template_file = open(PIALERT_PATH + '/report_template.html', 'r') + template_file = open(PIALERT_BACK_PATH + '/report_template.html', 'r') mail_html = template_file.read() template_file.close() @@ -1099,7 +1102,7 @@ def email_reporting (): eventAlert['eve_EventType'], eventAlert['eve_DateTime'], eventAlert['eve_IP'], eventAlert['eve_AdditionalInfo']) mail_html_Internet += html_line_template.format ( - PA_FRONT_URL, eventAlert['eve_MAC'], + REPORT_DEVICE_URL, eventAlert['eve_MAC'], eventAlert['eve_EventType'], eventAlert['eve_DateTime'], eventAlert['eve_IP'], eventAlert['eve_AdditionalInfo']) @@ -1127,7 +1130,7 @@ def email_reporting (): eventAlert['eve_IP'], eventAlert['dev_Name'], eventAlert['eve_AdditionalInfo']) mail_html_new_devices += html_line_template.format ( - PA_FRONT_URL, eventAlert['eve_MAC'], eventAlert['eve_MAC'], + REPORT_DEVICE_URL, eventAlert['eve_MAC'], eventAlert['eve_MAC'], eventAlert['eve_DateTime'], eventAlert['eve_IP'], eventAlert['dev_Name'], eventAlert['eve_AdditionalInfo']) @@ -1154,7 +1157,7 @@ def email_reporting (): eventAlert['eve_MAC'], eventAlert['eve_DateTime'], eventAlert['eve_IP'], eventAlert['dev_Name']) mail_html_devices_down += html_line_template.format ( - PA_FRONT_URL, eventAlert['eve_MAC'], eventAlert['eve_MAC'], + REPORT_DEVICE_URL, eventAlert['eve_MAC'], eventAlert['eve_MAC'], eventAlert['eve_DateTime'], eventAlert['eve_IP'], eventAlert['dev_Name']) @@ -1184,7 +1187,7 @@ def email_reporting (): eventAlert['eve_IP'], eventAlert['eve_EventType'], eventAlert['dev_Name'], eventAlert['eve_AdditionalInfo']) mail_html_events += html_line_template.format ( - PA_FRONT_URL, eventAlert['eve_MAC'], eventAlert['eve_MAC'], + REPORT_DEVICE_URL, eventAlert['eve_MAC'], eventAlert['eve_MAC'], eventAlert['eve_DateTime'], eventAlert['eve_IP'], eventAlert['eve_EventType'], eventAlert['dev_Name'], eventAlert['eve_AdditionalInfo']) diff --git a/back/pialert.conf b/config/pialert.conf similarity index 81% rename from back/pialert.conf rename to config/pialert.conf index 6df0ed41..68b7e5f3 100644 --- a/back/pialert.conf +++ b/config/pialert.conf @@ -1,5 +1,5 @@ #------------------------------------------------------------------------------- -# Pi.Alert v2.56 / 2021-01-15 +# Pi.Alert # Open Source Network Guard / WIFI & LAN intrusion detector # # pialert.conf - Back module. Configuration file @@ -7,14 +7,10 @@ # Puche 2021 pi.alert.application@gmail.com GNU GPLv3 #------------------------------------------------------------------------------- -VERSION = '2.56' -VERSION_YEAR = '2021' -VERSION_DATE = '2021-01-15' - -DB_PATH = '/home/pi/pialert/db/pialert.db' -LOG_PATH = '/home/pi/pialert/log' +PIALERT_PATH = '/home/pi/pialert' +DB_PATH = PIALERT_PATH + '/db/pialert.db' +LOG_PATH = PIALERT_PATH + '/log' VENDORS_DB = '/usr/share/arp-scan/ieee-oui.txt' -PA_FRONT_URL = 'http://pi.alert/deviceDetails.php?mac=' PRINT_LOG = False SMTP_SERVER = 'smtp.gmail.com' @@ -25,6 +21,7 @@ SMTP_PASS = 'password' REPORT_MAIL = False REPORT_FROM = 'Pi.Alert <' + SMTP_USER +'>' REPORT_TO = 'user@gmail.com' +REPORT_DEVICE_URL = 'http://pi.alert/deviceDetails.php?mac=' # QUERY_MYIP_SERVER = 'https://diagnostic.opendns.com/myip' QUERY_MYIP_SERVER = 'http://ipv4.icanhazip.com' diff --git a/config/version.conf b/config/version.conf new file mode 100644 index 00000000..561a2fb5 --- /dev/null +++ b/config/version.conf @@ -0,0 +1,3 @@ +VERSION = '2.60' +VERSION_YEAR = '2021' +VERSION_DATE = '2021-01-20' diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 7ba93ec2..0b7d9b35 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -77,11 +77,14 @@ Estimated time: 20' ``` 2.5 - Connect to web admin panel + ``` + hostname -I + ``` - http://192.168.1.x/admin/ - (*replace 192.168.1.x with your Raspberry IP*) 2.6 - Activate DHCP server - - Pi-hole -> Settings -> DHCP -> Mark "DHCP server enabled" + - Pi-hole admin portal -> Settings -> DHCP -> Mark "DHCP server enabled" 2.7 - Add pi.alert DNS Record ``` @@ -114,7 +117,7 @@ block is not necessary the default server page to pialert subfolder ``` sudo mv /var/www/html/index.lighttpd.html /var/www/html/index.lighttpd.html.old - sudo ln -s /home/pi/pialert/install/index.html /var/www/html/index.html + sudo ln -s ~/pialert/install/index.html /var/www/html/index.html ``` 3.3 - Install PHP @@ -144,17 +147,29 @@ block is not necessary python -V ``` -4.3 - If python is not installed in your system, you can install it with this + New versions of Ubuntu includes Python 3. You can choose between use `python3` + command or to install Python 2 (that includes `python` command). + If you prefer to use Python 3, in the next installation block, you must update + `pialert.cron` file with the correct command: `python3` instead of `python`. + ``` + python3 -V + ``` + +4.3 - If Python is not installed in your system, you can install it with this command: ``` sudo apt-get install python ``` - + Or this one if you prefer Python 3: + ``` + sudo apt-get install python3 + ``` ## Pi.Alert 5.1 - Download Pi.Alert and uncompress ``` + cd curl -LO https://github.com/pucherot/Pi.Alert/raw/main/tar/pialert_latest.tar tar xvf pialert_latest.tar rm pialert_latest.tar @@ -162,14 +177,15 @@ block is not necessary 5.2 - Public the front portal ``` - sudo ln -s /home/pi/pialert/front /var/www/html/pialert + sudo ln -s ~/pialert/front /var/www/html/pialert ``` -5.3 - If you have configured your DNS server (Pi.hole or other) to resolve - the pi.alert to your raspberry, youy must configure lighttpd to redirect - these requests to the correct pialert web folder +5.3 - Configure web server redirection + If you have configured your DNS server (Pi.hole or other) to resolve pi.alert + to your raspberry, youy must configure lighttpd to redirect these requests to + the correct pialert web folder ``` - sudo cp pialert/install/pialert_front.conf /etc/lighttpd/conf-available + sudo cp ~/pialert/install/pialert_front.conf /etc/lighttpd/conf-available sudo ln -s ../conf-available/pialert_front.conf /etc/lighttpd/conf-enabled/pialert_front.conf sudo /etc/init.d/lighttpd restart ``` @@ -183,13 +199,14 @@ block is not necessary 5.5 - Config Pialert parameters ``` - nano ~/pialert/back/pialert.conf + sed -i "s,'/home/pi/pialert','$HOME/pialert'," ~/pialert/config/pialert.conf + nano ~/pialert/config/pialert.conf ``` - If you want to use email reporting, configure this parameters ```ini REPORT_MAIL = True SMTP_USER = 'user@gmail.com' - SMTP_PASS = 'password' + SMTP_PASS = 'password' vi REPORT_TO = 'user@gmail.com' ``` @@ -212,26 +229,43 @@ block is not necessary ``` python ~/pialert/back/pialert.py update_vendors ``` + or + ``` + python3 ~/pialert/back/pialert.py update_vendors + ``` 5.7 - Test Pi.Alert Scan ``` python ~/pialert/back/pialert.py internet_IP python ~/pialert/back/pialert.py 1 ``` - -5.8 - Add crontab jobs + or ``` - (crontab -l 2>/dev/null; cat ~/pialert/back/pialert.cron) | crontab - + python3 ~/pialert/back/pialert.py internet_IP + python3 ~/pialert/back/pialert.py 1 ``` -5.9 - Add permissions to the web-server user +5.8 - Update crontab template with python3 + If you prefer to use Python 3 (installed in the previous block), you must + update `pialert.cron` file with the correct command: `python3` instead of + `python` + ``` + sed -i 's/python/python3/g' ~/pialert/install/pialert.cron + ``` + +5.9 - Add crontab jobs + ``` + (crontab -l 2>/dev/null; cat ~/pialert/install/pialert.cron) | crontab - + ``` + +5.10 - Add permissions to the web-server user ``` sudo chgrp -R www-data ~/pialert/db chmod -R 770 ~/pialert/db ``` -5.10 - Check DNS record for pi.alert (explained in point 2.7 of Pi.hole - installation) +5.11 - Check DNS record for pi.alert (explained in point 2.7 of Pi.hole + installation) - Add pi.alert DNS Record ``` hostname -I @@ -240,7 +274,7 @@ block is not necessary - pi.alert 192.168.1.x - (*replace 192.168.1.x with your Raspberry IP*) -5.11 - Use admin panel to configure the devices +5.12 - Use admin panel to configure the devices - http://pi.alert/ - http://192.168.1.x/pialert/ - (*replace 192.168.1.x with your Raspberry IP*) diff --git a/docs/VERSIONS_HISTORY.md b/docs/VERSIONS_HISTORY.md new file mode 100644 index 00000000..237f16ee --- /dev/null +++ b/docs/VERSIONS_HISTORY.md @@ -0,0 +1,28 @@ +# Pi.Alert Version History + + + | Version | Description | + | ------- | --------------------------------------------------------------- | + | v2.60 | Improved the compability of installation process (Ubuntu) | + | v2.56 | Bug fixing | + | v2.55 | Bug fixing | + | v2.52 | Bug fixing | + | v2.51 | Bug fixing | + | v2.50 | First public release | + + +## Pi.Alert v2.60 + + - `pialert.conf` moved from back to config folder + - `pialert.conf` splitted in two files: `pialert.conf` and `version.conf` + - Added compatibility with Python 3 (default version in Ubuntu) + - Added compatibility in the Installation guide with Ubuntu server + - Eliminated some unnecessary packages from the installation + + +### License + GPL 3.0 + [Read more here](../LICENSE.txt) + +### Contact + pi.alert.application@gmail.com diff --git a/front/img/backgroud.png b/front/img/background.png similarity index 100% rename from front/img/backgroud.png rename to front/img/background.png diff --git a/front/php/templates/footer.php b/front/php/templates/footer.php index 17efec20..1ef34db2 100644 --- a/front/php/templates/footer.php +++ b/front/php/templates/footer.php @@ -15,7 +15,7 @@ © 2020 Puche --> © '. $conf_data['VERSION_YEAR'] .' Puche'; ?> @@ -27,7 +27,7 @@ Pi.Alert  2.50  (2019-12-30) --> ('. $conf_data['VERSION_DATE'] .')'; ?> diff --git a/front/php/templates/header.php b/front/php/templates/header.php index c3c9087a..d1cbee52 100644 --- a/front/php/templates/header.php +++ b/front/php/templates/header.php @@ -49,7 +49,7 @@ - +
diff --git a/back/pialert.cron b/install/pialert.cron similarity index 100% rename from back/pialert.cron rename to install/pialert.cron diff --git a/tar/create_tar.sh b/tar/create_tar.sh index e68f5329..3ec88e5e 100644 --- a/tar/create_tar.sh +++ b/tar/create_tar.sh @@ -8,7 +8,7 @@ # Puche 2021 pi.alert.application@gmail.com GNU GPLv3 # ------------------------------------------------------------------------------ -PIALERT_VERSION=`awk '$1=="VERSION" { print $3 }' ../back/pialert.conf | tr -d \'` +PIALERT_VERSION=`awk '$1=="VERSION" { print $3 }' ../config/version.conf | tr -d \'` PIALERT_DEV_PATH=/media/WD_4TB/dev # ------------------------------------------------------------------------------ diff --git a/tar/pialert_2.56.tar b/tar/pialert_2.60.tar similarity index 99% rename from tar/pialert_2.56.tar rename to tar/pialert_2.60.tar index 4c75f31e8330bd52986c096b311e49ed795f1756..e556381a44867c1df413e7aa144680b1a248458d 100644 GIT binary patch delta 7420 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 delta 5525 zcmbW*X;@TcAII^|3<9zvCR$1DfZRXNm&+m(6k5^A`9>CsDiox059N%36ga9UHxW{ufqTnaagva`pE?OFcp%ON!! zj_D~$sa}U8+2KfWrnp)-T`gRxfe}H*aAQS;kzh;pT8R-x>-w(L#$jPyI%Q|1W%Y3U z{ngIVIC=b(Nx8}SdC4ncjOtcQuu&uS@5l1fJoZb|1)))fvIRn;?DLDF-9E3|%@#{>rD`Yq_ZAD$dGqWl zNL5k6Dnx~DhQ(&y5z z;7;{v4`11g6_uOO2-u!8_lH_%UNUC{a`&70K~=BrsMYBu_L_n72h1V1Fi(=((ZbPl ztRvrA`=&X|9u`)AwXM`X!a8u!bXvb3GBr4TtMy5=qBQZLNy?yoX5-@(~9cfrm zNi`#^9P`Ou%f{5P<|fsw9+K*HU;R(6FpO%pYQ};%XH8X0)mC-X^{TFNs2fy0RbMqw z4OJu6ST#{i)s3o|YOY$SB$ce3%B512TX|Hf@+zNdsamPls*P%^+Nt)cgX*Z#R43J0 zbx~baH`QJBP(4*I)mx>jKB}+kr!rK3m8k}(EHzLKQiIhHHB=2#!_^2iQr)Do)y*nL zjZ&l47?rEWs&Q((%2T(f32LI6q$aB=Dql@i1*%XLscCAunxST@S!%W_Rwb%b-KuU= zbJSdQyShWoQ}flGYJpm)7OA_`-Rd5-Slz3ZsHJL|TCV)+K6SrZp)B=)TB#mX52=UM zDz#dbsWob?dPF^{)~UzTdbL4qRGZXh^|*RMZBbj*Hua=>Nss9sY0)ywJ?^{P6cUQ@5DH`JTzpgN=ut0U?y^|m^y-ciTY zadkqSRHxLt>OJ+oI;}oXAF4CztolfOtUghns?XHt>I?OyI;Xx;U#oA_x9U4}UVX1F zsEg{7x~zUsKdPV9&*~TTtNKm-uKu_?&S@-BU;{e@K@|vw5D0~;5C-880g(^|(GUZ% zPz~ZB9;!nPNB|QOp(fOV+E53shq~Z^8=xN4hX&9P8bM=d0!`sYXa>!p1tdW-RIb;> zQ3|-h1F7HzAGCy4&>Gr6TWAOEp#yY;H0T7Kp$l|{ZqOZiKu_oey&)a?Kwszw8PFdx zVE|;oKo|srVF(O`VK5vf(*^57Pj025&nOol0t4^yE4 z3ZV$5!E~4bGhr6YhGHmzQn(dvgE=r4ZihQy9?XY3VF4_JMQ|6~4fnuexEGedQdkDd z!4LPr{jdTocmP(ygYXbM469%@l))NU3y;8~unr!B^{@dp!Y0@ZkHZtN1-8OAcoLq1 zr=c9S!!z(K1Yig3gk7*3o`XHG7b;*MJP$9xi|`WchnL|Mcoh!7Yw$X}0dK-VI0T2` z2)qSv!%=t#j=^y_0Vm-UybJHa`*0dQfDhpeoQ03zWB3F4d1}G z@Ex3o@8JSmgiCN4et;k0C-@nDfnVV__#OT*^zmoYfdMwKLl9JfUlKKM@WNC&>6ZwSLg=ap$GJYUeFuTp%3(h zevkqEArl5b77T!dMsw;~@`jfeA1XCc$Kw z0{Ji%3ZM{*U>Zz^888!O!E7jo5-5dR;Wn59bK!Ql1LnbexDyt@LRbWM!QF5VEQWhw z2`q(WupInwAKVWsz=8*0B|HcZ!Naf$Rzn%Afwk}mJPPaJF<1{9U?XgT&G0xp0b5`z zY=bA^DR>&nVLLnn&q4rpz)si&yWu(51ACzY_QCV;0=x(>!G3rdUV&HP0K5jT!yE7> z9E3w~7>>YO@HQNUci^d;O26hO7Di91I5DHZx z48kD-A|VQ*AqHZh8pJ_7REHXn045|tO{fL6p$=RRb-@8QKs~4r4WJ=3g2vDUn!=6H z44Oj=NP=XjT(66x6mWwFQo##8XbG*LHMD`Y&<@%|2j~cC&U^t9`k#G}a!_ANbqhK_Qfm|31<6u1G!7VTW zCc-3`3{xN@Z=`aIk!Yr6=uh7Szy+Xq&y7<{hSzNwM*$C=L26;ahn?6#zd#nb#-Lqa=V#Yd6-&VGcu~MY4UTSYT4!RQu~C8jS;2x SA#s6@)qdP({C_e%d-Xq6J00l& diff --git a/tar/pialert_latest.tar b/tar/pialert_latest.tar index 4c75f31e8330bd52986c096b311e49ed795f1756..e556381a44867c1df413e7aa144680b1a248458d 100644 GIT binary patch delta 7420 zcmb8!30xF)|G@EvRag-b6=f97pJ)Ol%O31vng=2(p5#GlmK?jtChX$wq9P<(mfeb5 zZFa5Qw^~$mSlD5QS6OQJeczWIn&tETEUalg&+~u&z52Xemf6`kelx>sX2sS6sVk(l zmv^=2+8t)=31*AMYBisr!cBGSHCvOiHf!2NT8|vF*}@bSn@nMqNsgZ)K?{ydiVvoA zukP)zJ5I1Lxx;R=IhbLN#UV2^hb-kYotv~TI%`@`OJ3T|VOA#+8v*!DpIpZhOo5;M%w@(+i5G$r6q&C@#z|2yWcgw^`rvbccVueP#3F zr_6tQyLscbQ62v=}Ip$_}vx$aC^OBW@vr~ZBlSUVyEWT*hDQMx*H<9$ztq1I6Z#sn6`bSj{f)8 z-eNM@QR%^n#z9HPem3%Eqj6;OA!8S<+i@Fm{;cVfgS(7Fn&aXRYN5@O^9$F-7!!}* zXW@S18Vuu`R9wjU{*JVi+@oVJ$HLgNn;Fb)V=t&_M}oWJQeqtD;HPoJ3|4b`i)HiZ zyEU2XYGa}%#k3d`4HpEuI_ws!Er)Gr$;tWqHe797Wso{Z9i><)PLg@7>LkTWouve+ zidPylQ##Q<%qFKIR;|Sr)AB-C*d`vgbv8c1)vEQ(a3``@!H>-U>CV ztkx5#Rc=ptRjt$IS4DM!O0P%ROlpp|R+X1}RC%S>>vyR#S73?DxhhF^0<~Vr^pwS2IOc~WmVqtg+n5rt*-S4RBes3G~kjMmejaQt6aW- zsodxFl&A`Kl}jyg2j*5rW>oI=`CR3J=pqb@E|je#GJ82Uuw~j;vV;XJDPdLH*IH#2 zx4#viW3s6%7QZND+o{(LQfitkf2CVCt;eO@$E{X$eL^dC>LdNKj4@BBENZMw{B)M$nlZZGUz4!Q?1eOa;hx1O7jm%&#v@V zyRvKC@_%Gj=|j>7O_(;N;IE(4)bi*L+3m;N(Tyw%dh{4qvSOZ6k5~Qo>1C>rX^-9< zzUkm^F@wXK#bm=`w`%!dk6sj$tYkd3Z=s{xJ*4f`@BWX!Nevbzbq+P|)jMf6rc9k@ ziEd)MX{hX_S&_k^7!iTeG8J%D*Hp=9VO&&3cddNlzm7$f(LVmdmUoi19*vO!nEBTT zl+U+~!T&S@{~rU8rEeQ?jJ>uI*uKZo{n?S#=1oNSE!+&P_>*4Epwu#M@1$ zhBoch^TS5@UDwc`d-c9C7IP?dpWdKZLf7om$Av!Hr~jx~TlVkQe~OWF-yOy`byH8L zx7?pyTrhn`;k2nU=1(Y`F>~7VIib9p{c>Fy)OM}Nk?TYIxyhOnxy0Bl4qNo}+J0`* zi`=F>4nF zD|h+*Dx>X`m)SmI8)Qp0DCTE(@M=u$0y$qS4SBa__G(*-@P>)=w1l?h=oXpK{=ZIW z{a+`v{NEF%M!q_-&g0xZIos9LmQ}gSuh1QPB@7cDrx~x}2e0==Cf$Hd{k8G^a z%iHzoas|jbW^BrVTcWBXo3Fy>tyX2F{V+|_Q69Q01*m-C&f&GdL&42n`; zovM*_FI^y)z{r+hG#xv9TDrZiyS1yo&QDyOXzbmRXzWw3NB#_!%dy?Y-&Zz^CHI)W z4O+CHCw0+6iD`Wj!ecJ$uBA1pj3#Hl(8{zvJ>wkmr$qEXY0>7-?xwBoKB$kBD)p86 zNheDEB_$1z(xidXAn7D&u#_%kNSV^f(kapqDN8a**^*hZNLI-v~R#rBkJ0 z(s1cCX@oRV8YPXE@}x0RzBE=Ukj6>lr3q4@G*Ox)O_rueQ>AHAk#xE=U78`ylx9iA z(izfhX^u2kI#Ze_oh6+u&6i4~QmITTmz00SJ>3Zn~=|(9mZIEt~ZkBG5Zk2A6ZkO(m?v(D5 z?w0P6?v?J7HcFeM&C>nS15&f}p!AURu+$3Qh|=|yR~v_sk{?UHs&FG(*;d!$#SSEaquK54)7n)JH#hV-WNmh`stj`Xhd zp7g%-f%KvDk@T_jiS()Tne@5zh4iKLmGrgrjr6Vbo%Fr*gY={HlXO7(S^7o#Rr*aj zC>@f1mkvvRNPkL4F6}-@TO&aX7@z}mgjk3JBXojz=nM(a1rnhvBtbXm4m}_ldO|Nq z0UdfnA4rA1&<{?8{-9t0q`^RlEb~dc8Vu=>0hw?zoB~523rvs=X0U)2Y>)$Xa6m2$ zg;QY|42RQT1dN1HFdFh;4CKRDD1dP=9wtB`OoT}=8K%Hgm){5t5yG$mZi1WP7Pu8|gWKT_xD)PzyWt+V7w&_Nun9K9{qO)Z!-Mb;JPa-H z2s{dp!Q-$6o`5Hz6}G}t@H9LF&%!o%4xWb>;6>ODJ76d5g5B^EybOEb6?hf)!amp! zufgl^2D}Mx!Q1c-ybJHa`|tsL2p_@6@CkehpTXzw1$+r#!PoE&d<);f_wWP!2tUCA z_!)kIU*R`62#4TzI1GQlpKwHz(_f6d&>#j3&;dF^EX08kIzc>ih6LyWiO?02pc{0D z9*_(@p%3Vb}mS!Od_B+zPkB?QjR&33tKWa1Y!I_rXTk1e@W0cmSH= zL3jurh8B1P9)-u?ao7S+z?0AlTj42q8lHh?VH-RL&%+DwB5a2puoHH{Zg>e^hCT2K zyb60^AMA(M;B|Nd-h{W{ZFmRXh4I1(eLKZCr`AO;N30Xjk~#DNhyK|FMZ1n2^Z z&=r!P8+3;rkPJPc7o>m=y`c}JLSN_yCqjQvFaXkEAVik=Bwh`MbjW~AI2lfXA&>J9m=kM68Dp8V|Casr zhFP67Piyge^@h6!^Xb;a*ak!6(5`ZiFUJ~r7UJM$-?0w{6m#v7hl@FXEnNF8#nu?P uWBya8@Bz7jSe4g)ThSlAuNb+}bLQXQJuBni-q18vJ2PA7%B{t-d;ANx{bu3- delta 5525 zcmbW*X;@TcAII^|3<9zvCR$1DfZRXNm&+m(6k5^A`9>CsDiox059N%36ga9UHxW{ufqTnaagva`pE?OFcp%ON!! zj_D~$sa}U8+2KfWrnp)-T`gRxfe}H*aAQS;kzh;pT8R-x>-w(L#$jPyI%Q|1W%Y3U z{ngIVIC=b(Nx8}SdC4ncjOtcQuu&uS@5l1fJoZb|1)))fvIRn;?DLDF-9E3|%@#{>rD`Yq_ZAD$dGqWl zNL5k6Dnx~DhQ(&y5z z;7;{v4`11g6_uOO2-u!8_lH_%UNUC{a`&70K~=BrsMYBu_L_n72h1V1Fi(=((ZbPl ztRvrA`=&X|9u`)AwXM`X!a8u!bXvb3GBr4TtMy5=qBQZLNy?yoX5-@(~9cfrm zNi`#^9P`Ou%f{5P<|fsw9+K*HU;R(6FpO%pYQ};%XH8X0)mC-X^{TFNs2fy0RbMqw z4OJu6ST#{i)s3o|YOY$SB$ce3%B512TX|Hf@+zNdsamPls*P%^+Nt)cgX*Z#R43J0 zbx~baH`QJBP(4*I)mx>jKB}+kr!rK3m8k}(EHzLKQiIhHHB=2#!_^2iQr)Do)y*nL zjZ&l47?rEWs&Q((%2T(f32LI6q$aB=Dql@i1*%XLscCAunxST@S!%W_Rwb%b-KuU= zbJSdQyShWoQ}flGYJpm)7OA_`-Rd5-Slz3ZsHJL|TCV)+K6SrZp)B=)TB#mX52=UM zDz#dbsWob?dPF^{)~UzTdbL4qRGZXh^|*RMZBbj*Hua=>Nss9sY0)ywJ?^{P6cUQ@5DH`JTzpgN=ut0U?y^|m^y-ciTY zadkqSRHxLt>OJ+oI;}oXAF4CztolfOtUghns?XHt>I?OyI;Xx;U#oA_x9U4}UVX1F zsEg{7x~zUsKdPV9&*~TTtNKm-uKu_?&S@-BU;{e@K@|vw5D0~;5C-880g(^|(GUZ% zPz~ZB9;!nPNB|QOp(fOV+E53shq~Z^8=xN4hX&9P8bM=d0!`sYXa>!p1tdW-RIb;> zQ3|-h1F7HzAGCy4&>Gr6TWAOEp#yY;H0T7Kp$l|{ZqOZiKu_oey&)a?Kwszw8PFdx zVE|;oKo|srVF(O`VK5vf(*^57Pj025&nOol0t4^yE4 z3ZV$5!E~4bGhr6YhGHmzQn(dvgE=r4ZihQy9?XY3VF4_JMQ|6~4fnuexEGedQdkDd z!4LPr{jdTocmP(ygYXbM469%@l))NU3y;8~unr!B^{@dp!Y0@ZkHZtN1-8OAcoLq1 zr=c9S!!z(K1Yig3gk7*3o`XHG7b;*MJP$9xi|`WchnL|Mcoh!7Yw$X}0dK-VI0T2` z2)qSv!%=t#j=^y_0Vm-UybJHa`*0dQfDhpeoQ03zWB3F4d1}G z@Ex3o@8JSmgiCN4et;k0C-@nDfnVV__#OT*^zmoYfdMwKLl9JfUlKKM@WNC&>6ZwSLg=ap$GJYUeFuTp%3(h zevkqEArl5b77T!dMsw;~@`jfeA1XCc$Kw z0{Ji%3ZM{*U>Zz^888!O!E7jo5-5dR;Wn59bK!Ql1LnbexDyt@LRbWM!QF5VEQWhw z2`q(WupInwAKVWsz=8*0B|HcZ!Naf$Rzn%Afwk}mJPPaJF<1{9U?XgT&G0xp0b5`z zY=bA^DR>&nVLLnn&q4rpz)si&yWu(51ACzY_QCV;0=x(>!G3rdUV&HP0K5jT!yE7> z9E3w~7>>YO@HQNUci^d;O26hO7Di91I5DHZx z48kD-A|VQ*AqHZh8pJ_7REHXn045|tO{fL6p$=RRb-@8QKs~4r4WJ=3g2vDUn!=6H z44Oj=NP=XjT(66x6mWwFQo##8XbG*LHMD`Y&<@%|2j~cC&U^t9`k#G}a!_ANbqhK_Qfm|31<6u1G!7VTW zCc-3`3{xN@Z=`aIk!Yr6=uh7Szy+Xq&y7<{hSzNwM*$C=L26;ahn?6#zd#nb#-Lqa=V#Yd6-&VGcu~MY4UTSYT4!RQu~C8jS;2x SA#s6@)qdP({C_e%d-Xq6J00l&