From 7c37b1adaff4dd80d1fc1cc9101aae6783c55bc8 Mon Sep 17 00:00:00 2001 From: "thomas.guiseppin" Date: Tue, 7 Nov 2017 10:30:33 +0100 Subject: [PATCH] =?UTF-8?q?=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20README.md=20=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?=20code/scripts/main/api/v1/=5F=5Fpycache=5F=5F/api.cpython-35.?= =?UTF-8?q?pyc=20=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20=20=20=20code/scr?= =?UTF-8?q?ipts/main/core/=5F=5Fpycache=5F=5F/core.cpython-35.pyc=20=09mod?= =?UTF-8?q?ifi=C3=A9=C2=A0:=20=20=20=20=20=20=20=20=20code/scripts/main/co?= =?UTF-8?q?re/libs/=5F=5Fpycache=5F=5F/hcrypt.cpython-35.pyc=20=09modifi?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20=20code/scripts/main/core/?= =?UTF-8?q?modules/=5F=5Fpycache=5F=5F/mod=5Faccess.cpython-35.pyc=20=09mo?= =?UTF-8?q?difi=C3=A9=C2=A0:=20=20=20=20=20=20=20=20=20code/scripts/main/c?= =?UTF-8?q?ore/modules/=5F=5Fpycache=5F=5F/mod=5Fanalyst.cpython-35.pyc=20?= =?UTF-8?q?=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20=20=20=20code/scripts/m?= =?UTF-8?q?ain/core/modules/=5F=5Fpycache=5F=5F/mod=5Fdatabase.cpython-35.?= =?UTF-8?q?pyc=20=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20=20=20=20code/scr?= =?UTF-8?q?ipts/main/core/modules/=5F=5Fpycache=5F=5F/mod=5Fproxmox.cpytho?= =?UTF-8?q?n-35.pyc=20=09modifi=C3=A9=C2=A0:=20=20=20=20=20=20=20=20=20cod?= =?UTF-8?q?e/scripts/main/core/modules/mod=5Faccess.py=20=09modifi=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20=20code/scripts/main/startup.py?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/back?= =?UTF-8?q?end/.htaccess=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?code/web/backend/.scrutinizer.yml=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20code/web/backend/.travis.yml=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/CHANGELOG?= =?UTF-8?q?.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/b?= =?UTF-8?q?ackend/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20?= =?UTF-8?q?=20code/web/backend/=5Fone-click-installation/Vagrantfile=20=09?= =?UTF-8?q?supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/?= =?UTF-8?q?=5Fone-click-installation/bootstrap.sh=20=09supprim=C3=A9=C2=A0?= =?UTF-8?q?:=20=20=20=20=20=20=20=20code/web/backend/=5Fpictures/huge-logo?= =?UTF-8?q?.png=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/?= =?UTF-8?q?backend/=5Fpictures/support-via-a2hosting.png=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/=5Fpictur?= =?UTF-8?q?es/support-via-paypal.png=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20code/web/backend/application/=5Finstallation/01-cre?= =?UTF-8?q?ate-database.sql=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20?= =?UTF-8?q?=20code/web/backend/application/=5Finstallation/02-create-table?= =?UTF-8?q?-users.sql=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20cod?= =?UTF-8?q?e/web/backend/application/=5Finstallation/03-create-table-notes?= =?UTF-8?q?.sql=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/?= =?UTF-8?q?backend/application/config/config.development.php=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/applicati?= =?UTF-8?q?on/config/texts.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20code/web/backend/application/controller/DashboardControll?= =?UTF-8?q?er.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/we?= =?UTF-8?q?b/backend/application/controller/ErrorController.php=20=09suppr?= =?UTF-8?q?im=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/applica?= =?UTF-8?q?tion/controller/IndexController.php=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20code/web/backend/application/controller?= =?UTF-8?q?/LoginController.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20?= =?UTF-8?q?=20=20=20code/web/backend/application/controller/NoteController?= =?UTF-8?q?.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/?= =?UTF-8?q?backend/application/controller/ProfileController.php=20=09suppr?= =?UTF-8?q?im=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/applica?= =?UTF-8?q?tion/core/Application.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20code/web/backend/application/core/Auth.php=20=09sup?= =?UTF-8?q?prim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/appli?= =?UTF-8?q?cation/core/Config.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20?= =?UTF-8?q?=20=20=20code/web/backend/application/core/Controller.php=20=09?= =?UTF-8?q?supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/ap?= =?UTF-8?q?plication/core/DatabaseFactory.php=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20code/web/backend/application/core/Environm?= =?UTF-8?q?ent.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/w?= =?UTF-8?q?eb/backend/application/core/Mail.php=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20code/web/backend/application/core/Redir?= =?UTF-8?q?ect.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/w?= =?UTF-8?q?eb/backend/application/core/Request.php=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/application/cor?= =?UTF-8?q?e/Session.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?code/web/backend/application/core/Text.php=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/application/cor?= =?UTF-8?q?e/View.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20cod?= =?UTF-8?q?e/web/backend/application/model/AvatarModel.php=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/applicati?= =?UTF-8?q?on/model/CaptchaModel.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20code/web/backend/application/model/LoginModel.php?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/back?= =?UTF-8?q?end/application/model/NoteModel.php=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20code/web/backend/application/model/Pass?= =?UTF-8?q?wordResetModel.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20code/web/backend/application/model/RegistrationModel.php?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/back?= =?UTF-8?q?end/application/model/UserModel.php=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20code/web/backend/application/model/User?= =?UTF-8?q?RoleModel.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?code/web/backend/application/view/=5Ftemplates/feedback.php=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend?= =?UTF-8?q?/application/view/=5Ftemplates/footer.php=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/application/vie?= =?UTF-8?q?w/=5Ftemplates/header.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20code/web/backend/application/view/dashboard/index.p?= =?UTF-8?q?hp=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/ba?= =?UTF-8?q?ckend/application/view/error/index.php=20=09supprim=C3=A9=C2=A0?= =?UTF-8?q?:=20=20=20=20=20=20=20=20code/web/backend/application/view/inde?= =?UTF-8?q?x/index.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20co?= =?UTF-8?q?de/web/backend/application/view/login/changePassword.php=20=09s?= =?UTF-8?q?upprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/app?= =?UTF-8?q?lication/view/login/changeUserRole.php=20=09supprim=C3=A9=C2=A0?= =?UTF-8?q?:=20=20=20=20=20=20=20=20code/web/backend/application/view/logi?= =?UTF-8?q?n/editAvatar.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20?= =?UTF-8?q?=20code/web/backend/application/view/login/editUserEmail.php=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend?= =?UTF-8?q?/application/view/login/editUsername.php=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/application/vie?= =?UTF-8?q?w/login/index.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20code/web/backend/application/view/login/register.php=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend?= =?UTF-8?q?/application/view/login/requestPasswordReset.php=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/applicati?= =?UTF-8?q?on/view/login/showProfile.php=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20code/web/backend/application/view/login/verif?= =?UTF-8?q?y.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web?= =?UTF-8?q?/backend/application/view/note/edit.php=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/application/vie?= =?UTF-8?q?w/note/index.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20?= =?UTF-8?q?=20code/web/backend/application/view/profile/index.php=20=09sup?= =?UTF-8?q?prim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/appli?= =?UTF-8?q?cation/view/profile/showProfile.php=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20code/web/backend/composer.json=20=09sup?= =?UTF-8?q?prim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/publi?= =?UTF-8?q?c/.htaccess=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20co?= =?UTF-8?q?de/web/backend/public/avatars/.htaccess=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/public/avatars/?= =?UTF-8?q?default.jpg=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20co?= =?UTF-8?q?de/web/backend/public/css/style.css=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20code/web/backend/public/index.php=20=09?= =?UTF-8?q?supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/te?= =?UTF-8?q?sts/core/ConfigTest.php=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20code/web/backend/tests/core/EnvironmentTest.php=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend?= =?UTF-8?q?/tests/core/RequestTest.php=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20code/web/backend/tests/core/TextTest.php=20=09su?= =?UTF-8?q?pprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20code/web/backend/test?= =?UTF-8?q?s/phpunit.xml=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?code/web/backend/travis-ci-apache=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20code/web/frontend/README.md=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20doc/Command=20Process.dia?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.2/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/.htpasswd=20=09sup?= =?UTF-8?q?prim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APA?= =?UTF-8?q?CHE/2.4/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/APACHE/2.4/apache2.conf=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/conf-available/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/conf-available/cha?= =?UTF-8?q?rset.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syst?= =?UTF-8?q?em/BASE=5FSOFT/APACHE/2.4/conf-available/javascript-common.conf?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.4/conf-available/localized-error-pages.conf=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSO?= =?UTF-8?q?FT/APACHE/2.4/conf-available/other-vhosts-access-log.conf=20=09?= =?UTF-8?q?supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/?= =?UTF-8?q?APACHE/2.4/conf-available/security.conf=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/co?= =?UTF-8?q?nf-available/serve-cgi-bin.conf=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/conf-enabled/RE?= =?UTF-8?q?ADME.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system?= =?UTF-8?q?/BASE=5FSOFT/APACHE/2.4/conf-enabled/charset.conf=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/conf-enabled/localized-error-pages.conf=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/co?= =?UTF-8?q?nf-enabled/other-vhosts-access-log.conf=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/co?= =?UTF-8?q?nf-enabled/security.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/conf-enabled/serve-cg?= =?UTF-8?q?i-bin.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20sys?= =?UTF-8?q?tem/BASE=5FSOFT/APACHE/2.4/conf.d/README.md=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/co?= =?UTF-8?q?nf.d/awhsecure.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/APACHE/2.4/conf.d/badbot.conf=20=09sup?= =?UTF-8?q?prim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APA?= =?UTF-8?q?CHE/2.4/conf.d/security.conf=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/envvars=20=09suppr?= =?UTF-8?q?im=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACH?= =?UTF-8?q?E/2.4/magic=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20sy?= =?UTF-8?q?stem/BASE=5FSOFT/APACHE/2.4/mods-available/README.md=20=09suppr?= =?UTF-8?q?im=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACH?= =?UTF-8?q?E/2.4/mods-available/access=5Fcompat.load=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mo?= =?UTF-8?q?ds-available/actions.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/action?= =?UTF-8?q?s.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/?= =?UTF-8?q?BASE=5FSOFT/APACHE/2.4/mods-available/alias.conf=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/alias.load=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/?= =?UTF-8?q?allowmethods.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/asis.load=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSO?= =?UTF-8?q?FT/APACHE/2.4/mods-available/auth=5Fbasic.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/auth=5Fdigest.load=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-avai?= =?UTF-8?q?lable/auth=5Fform.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20?= =?UTF-8?q?=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/authn=5Fa?= =?UTF-8?q?non.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syste?= =?UTF-8?q?m/BASE=5FSOFT/APACHE/2.4/mods-available/authn=5Fcore.load=20=09?= =?UTF-8?q?supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/?= =?UTF-8?q?APACHE/2.4/mods-available/authn=5Fdbd.load=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mo?= =?UTF-8?q?ds-available/authn=5Fdbm.load=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/?= =?UTF-8?q?authn=5Ffile.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/authn=5Fsoca?= =?UTF-8?q?che.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syste?= =?UTF-8?q?m/BASE=5FSOFT/APACHE/2.4/mods-available/authnz=5Ffcgi.load=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSO?= =?UTF-8?q?FT/APACHE/2.4/mods-available/authnz=5Fldap.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/authz=5Fcore.load=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-avai?= =?UTF-8?q?lable/authz=5Fdbd.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20?= =?UTF-8?q?=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/authz=5Fd?= =?UTF-8?q?bm.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system?= =?UTF-8?q?/BASE=5FSOFT/APACHE/2.4/mods-available/authz=5Fgroupfile.load?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.4/mods-available/authz=5Fhost.load=20=09suppri?= =?UTF-8?q?m=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE?= =?UTF-8?q?/2.4/mods-available/authz=5Fowner.load=20=09supprim=C3=A9=C2=A0?= =?UTF-8?q?:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-ava?= =?UTF-8?q?ilable/authz=5Fuser.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/autoin?= =?UTF-8?q?dex.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syste?= =?UTF-8?q?m/BASE=5FSOFT/APACHE/2.4/mods-available/autoindex.load=20=09sup?= =?UTF-8?q?prim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APA?= =?UTF-8?q?CHE/2.4/mods-available/buffer.load=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-availab?= =?UTF-8?q?le/cache.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?system/BASE=5FSOFT/APACHE/2.4/mods-available/cache=5Fdisk.conf?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.4/mods-available/cache=5Fdisk.load=20=09suppri?= =?UTF-8?q?m=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE?= =?UTF-8?q?/2.4/mods-available/cache=5Fsocache.load=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mo?= =?UTF-8?q?ds-available/cgi.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20?= =?UTF-8?q?=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/cgid.conf?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.4/mods-available/cgid.load=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mo?= =?UTF-8?q?ds-available/charset=5Flite.load=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-availab?= =?UTF-8?q?le/data.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20s?= =?UTF-8?q?ystem/BASE=5FSOFT/APACHE/2.4/mods-available/dav.load=20=09suppr?= =?UTF-8?q?im=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACH?= =?UTF-8?q?E/2.4/mods-available/dav=5Ffs.conf=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-availab?= =?UTF-8?q?le/dav=5Ffs.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20?= =?UTF-8?q?=20system/BASE=5FSOFT/APACHE/2.4/mods-available/dav=5Flock.load?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.4/mods-available/dbd.load=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mo?= =?UTF-8?q?ds-available/deflate.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/deflat?= =?UTF-8?q?e.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/?= =?UTF-8?q?BASE=5FSOFT/APACHE/2.4/mods-available/dialup.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/dir.conf=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/dir?= =?UTF-8?q?.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/B?= =?UTF-8?q?ASE=5FSOFT/APACHE/2.4/mods-available/dump=5Fio.load=20=09suppri?= =?UTF-8?q?m=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE?= =?UTF-8?q?/2.4/mods-available/echo.load=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/?= =?UTF-8?q?env.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syste?= =?UTF-8?q?m/BASE=5FSOFT/APACHE/2.4/mods-available/expires.load=20=09suppr?= =?UTF-8?q?im=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACH?= =?UTF-8?q?E/2.4/mods-available/ext=5Ffilter.load=20=09supprim=C3=A9=C2=A0?= =?UTF-8?q?:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-ava?= =?UTF-8?q?ilable/fastcgi.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/fastcgi.load?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.4/mods-available/file=5Fcache.load=20=09suppri?= =?UTF-8?q?m=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE?= =?UTF-8?q?/2.4/mods-available/filter.load=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/?= =?UTF-8?q?headers.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20s?= =?UTF-8?q?ystem/BASE=5FSOFT/APACHE/2.4/mods-available/heartbeat.load=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSO?= =?UTF-8?q?FT/APACHE/2.4/mods-available/heartmonitor.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/ident.load=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/?= =?UTF-8?q?include.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20s?= =?UTF-8?q?ystem/BASE=5FSOFT/APACHE/2.4/mods-available/info.conf=20=09supp?= =?UTF-8?q?rim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APAC?= =?UTF-8?q?HE/2.4/mods-available/info.load=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/?= =?UTF-8?q?lbmethod=5Fbybusyness.load=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/lbm?= =?UTF-8?q?ethod=5Fbyrequests.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/lbmeth?= =?UTF-8?q?od=5Fbytraffic.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/lbmethod=5Fh?= =?UTF-8?q?eartbeat.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?system/BASE=5FSOFT/APACHE/2.4/mods-available/ldap.conf=20=09sup?= =?UTF-8?q?prim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APA?= =?UTF-8?q?CHE/2.4/mods-available/ldap.load=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-availab?= =?UTF-8?q?le/log=5Fdebug.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/log=5Fforens?= =?UTF-8?q?ic.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system?= =?UTF-8?q?/BASE=5FSOFT/APACHE/2.4/mods-available/lua.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/macro.load=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/?= =?UTF-8?q?mime.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syst?= =?UTF-8?q?em/BASE=5FSOFT/APACHE/2.4/mods-available/mime.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/mime=5Fmagic.conf=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-avai?= =?UTF-8?q?lable/mime=5Fmagic.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/mpm=5F?= =?UTF-8?q?event.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20sys?= =?UTF-8?q?tem/BASE=5FSOFT/APACHE/2.4/mods-available/mpm=5Fevent.load=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSO?= =?UTF-8?q?FT/APACHE/2.4/mods-available/mpm=5Fprefork.conf=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/mpm=5Fprefork.load=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-avai?= =?UTF-8?q?lable/mpm=5Fworker.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/mpm=5F?= =?UTF-8?q?worker.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20sy?= =?UTF-8?q?stem/BASE=5FSOFT/APACHE/2.4/mods-available/negotiation.conf=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSO?= =?UTF-8?q?FT/APACHE/2.4/mods-available/negotiation.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/proxy.conf=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/?= =?UTF-8?q?proxy.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20sys?= =?UTF-8?q?tem/BASE=5FSOFT/APACHE/2.4/mods-available/proxy=5Fajp.load=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSO?= =?UTF-8?q?FT/APACHE/2.4/mods-available/proxy=5Fbalancer.conf=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/proxy=5Fbalancer.load=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mo?= =?UTF-8?q?ds-available/proxy=5Fconnect.load=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-availab?= =?UTF-8?q?le/proxy=5Fexpress.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/proxy?= =?UTF-8?q?=5Ffcgi.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20s?= =?UTF-8?q?ystem/BASE=5FSOFT/APACHE/2.4/mods-available/proxy=5Ffdpass.load?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.4/mods-available/proxy=5Fftp.conf=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/proxy=5Fftp.load=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-avai?= =?UTF-8?q?lable/proxy=5Fhtml.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/proxy?= =?UTF-8?q?=5Fhtml.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20s?= =?UTF-8?q?ystem/BASE=5FSOFT/APACHE/2.4/mods-available/proxy=5Fhttp.load?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.4/mods-available/proxy=5Fscgi.load=20=09suppri?= =?UTF-8?q?m=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE?= =?UTF-8?q?/2.4/mods-available/proxy=5Fwstunnel.load=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mo?= =?UTF-8?q?ds-available/ratelimit.load=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/ref?= =?UTF-8?q?lector.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20sy?= =?UTF-8?q?stem/BASE=5FSOFT/APACHE/2.4/mods-available/remoteip.conf=20=09s?= =?UTF-8?q?upprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/A?= =?UTF-8?q?PACHE/2.4/mods-available/remoteip.load=20=09supprim=C3=A9=C2=A0?= =?UTF-8?q?:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-ava?= =?UTF-8?q?ilable/reqtimeout.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20?= =?UTF-8?q?=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/reqtimeou?= =?UTF-8?q?t.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/?= =?UTF-8?q?BASE=5FSOFT/APACHE/2.4/mods-available/request.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/rewrite.load=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/?= =?UTF-8?q?rpaf.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syst?= =?UTF-8?q?em/BASE=5FSOFT/APACHE/2.4/mods-available/rpaf.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/sed.load=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/ses?= =?UTF-8?q?sion.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syst?= =?UTF-8?q?em/BASE=5FSOFT/APACHE/2.4/mods-available/session=5Fcookie.load?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.4/mods-available/session=5Fcrypto.load=20=09su?= =?UTF-8?q?pprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/AP?= =?UTF-8?q?ACHE/2.4/mods-available/session=5Fdbd.load=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mo?= =?UTF-8?q?ds-available/setenvif.conf=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/set?= =?UTF-8?q?envif.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20sys?= =?UTF-8?q?tem/BASE=5FSOFT/APACHE/2.4/mods-available/slotmem=5Fplain.load?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.4/mods-available/slotmem=5Fshm.load=20=09suppr?= =?UTF-8?q?im=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACH?= =?UTF-8?q?E/2.4/mods-available/socache=5Fdbm.load=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mo?= =?UTF-8?q?ds-available/socache=5Fmemcache.load=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-avai?= =?UTF-8?q?lable/socache=5Fshmcb.load=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/spe?= =?UTF-8?q?ling.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syst?= =?UTF-8?q?em/BASE=5FSOFT/APACHE/2.4/mods-available/ssl.conf=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/ssl.load=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/sta?= =?UTF-8?q?tus.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syste?= =?UTF-8?q?m/BASE=5FSOFT/APACHE/2.4/mods-available/status.load=20=09suppri?= =?UTF-8?q?m=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE?= =?UTF-8?q?/2.4/mods-available/substitute.load=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-avai?= =?UTF-8?q?lable/suexec.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/unique=5Fid.?= =?UTF-8?q?load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BA?= =?UTF-8?q?SE=5FSOFT/APACHE/2.4/mods-available/userdir.conf=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/userdir.load=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-available/?= =?UTF-8?q?usertrack.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20?= =?UTF-8?q?=20system/BASE=5FSOFT/APACHE/2.4/mods-available/vhost=5Falias.l?= =?UTF-8?q?oad=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BAS?= =?UTF-8?q?E=5FSOFT/APACHE/2.4/mods-available/worker.conf=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-available/xml2enc.load=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled/RE?= =?UTF-8?q?ADME.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system?= =?UTF-8?q?/BASE=5FSOFT/APACHE/2.4/mods-enabled/access=5Fcompat.load=20=09?= =?UTF-8?q?supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/?= =?UTF-8?q?APACHE/2.4/mods-enabled/actions.load=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enab?= =?UTF-8?q?led/alias.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20?= =?UTF-8?q?=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled/alias.load=20=09s?= =?UTF-8?q?upprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/A?= =?UTF-8?q?PACHE/2.4/mods-enabled/auth=5Fbasic.load=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mo?= =?UTF-8?q?ds-enabled/authn=5Fcore.load=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled/authn?= =?UTF-8?q?=5Ffile.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20s?= =?UTF-8?q?ystem/BASE=5FSOFT/APACHE/2.4/mods-enabled/authz=5Fcore.load=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSO?= =?UTF-8?q?FT/APACHE/2.4/mods-enabled/authz=5Fhost.load=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mo?= =?UTF-8?q?ds-enabled/authz=5Fuser.load=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled/autoi?= =?UTF-8?q?ndex.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syst?= =?UTF-8?q?em/BASE=5FSOFT/APACHE/2.4/mods-enabled/autoindex.load=20=09supp?= =?UTF-8?q?rim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APAC?= =?UTF-8?q?HE/2.4/mods-enabled/deflate.conf=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled?= =?UTF-8?q?/deflate.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?system/BASE=5FSOFT/APACHE/2.4/mods-enabled/dir.conf=20=09suppri?= =?UTF-8?q?m=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE?= =?UTF-8?q?/2.4/mods-enabled/dir.load=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled/env.l?= =?UTF-8?q?oad=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BAS?= =?UTF-8?q?E=5FSOFT/APACHE/2.4/mods-enabled/expires.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-enabled/fastcgi.conf=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled/fa?= =?UTF-8?q?stcgi.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20sys?= =?UTF-8?q?tem/BASE=5FSOFT/APACHE/2.4/mods-enabled/filter.load=20=09suppri?= =?UTF-8?q?m=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE?= =?UTF-8?q?/2.4/mods-enabled/headers.load=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled/mi?= =?UTF-8?q?me.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system?= =?UTF-8?q?/BASE=5FSOFT/APACHE/2.4/mods-enabled/mime.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-enabled/mpm=5Fevent.conf=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled?= =?UTF-8?q?/mpm=5Fevent.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled/negotiation.co?= =?UTF-8?q?nf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.4/mods-enabled/negotiation.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-enabled/remoteip.conf=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled/re?= =?UTF-8?q?moteip.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20sy?= =?UTF-8?q?stem/BASE=5FSOFT/APACHE/2.4/mods-enabled/rewrite.load=20=09supp?= =?UTF-8?q?rim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APAC?= =?UTF-8?q?HE/2.4/mods-enabled/rpaf.conf=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled/rp?= =?UTF-8?q?af.load=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system?= =?UTF-8?q?/BASE=5FSOFT/APACHE/2.4/mods-enabled/setenvif.conf=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-enabled/setenvif.load=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/mods-enabled/st?= =?UTF-8?q?atus.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syst?= =?UTF-8?q?em/BASE=5FSOFT/APACHE/2.4/mods-enabled/status.load=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/?= =?UTF-8?q?2.4/mods-enabled/worker.conf=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/ports.conf=20=09su?= =?UTF-8?q?pprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/AP?= =?UTF-8?q?ACHE/2.4/sites-available/000-default.conf=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/si?= =?UTF-8?q?tes-available/010-mywebsite.com.conf=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/2.4/sites-ava?= =?UTF-8?q?ilable/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20?= =?UTF-8?q?=20system/BASE=5FSOFT/APACHE/2.4/sites-enabled/000-default.conf?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/APACHE/2.4/sites-enabled/README.md=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/APACHE/README?= =?UTF-8?q?.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BAS?= =?UTF-8?q?E=5FSOFT/ES/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20?= =?UTF-8?q?=20=20=20system/BASE=5FSOFT/FPM/README.md=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/FPM/conf.d/05?= =?UTF-8?q?-opcache.ini=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20s?= =?UTF-8?q?ystem/BASE=5FSOFT/FPM/conf.d/10-pdo.ini=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/FPM/conf.d/20?= =?UTF-8?q?-curl.ini=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20syst?= =?UTF-8?q?em/BASE=5FSOFT/FPM/conf.d/20-gd.ini=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/BASE=5FSOFT/FPM/conf.d/20-intl.i?= =?UTF-8?q?ni=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/FPM/conf.d/20-json.ini=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/FPM/conf.d/20-mcrypt.ini?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/FPM/conf.d/20-mysql.ini=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/FPM/conf.d/20-mysqli.ini?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/FPM/conf.d/20-pdo=5Fmysql.ini=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/BASE=5FSOFT/FPM/conf.d/README.md?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/FPM/php-fpm.conf=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/BASE=5FSOFT/FPM/php.ini=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/FPM/pool.d/RE?= =?UTF-8?q?ADME.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system?= =?UTF-8?q?/BASE=5FSOFT/FPM/pool.d/www.conf=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20system/BASE=5FSOFT/HAPROXY/1.7.5/README.md?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/HAPROXY/1.7.5/haproxy.cfg=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20system/BASE=5FSOFT/HAPROXY/README.md=20=09?= =?UTF-8?q?supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/?= =?UTF-8?q?KEEPALIVED/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20?= =?UTF-8?q?=20=20=20system/BASE=5FSOFT/KEEPALIVED/keepalived.conf=20=09sup?= =?UTF-8?q?prim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/LET?= =?UTF-8?q?SENCRYPT/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/LETSENCRYPT/cron/README.md=20=09suppri?= =?UTF-8?q?m=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/LETSEN?= =?UTF-8?q?CRYPT/cron/certbot=5Frenew=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/LETSENCRYPT/scripts/README.md?= =?UTF-8?q?=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/LETSENCRYPT/scripts/newdomain.sh=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/LETSENCRYPT/s?= =?UTF-8?q?cripts/renew.sh=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20?= =?UTF-8?q?=20system/BASE=5FSOFT/MEMCACHE/README.md=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/MONGODB/READM?= =?UTF-8?q?E.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BA?= =?UTF-8?q?SE=5FSOFT/MYSQL/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/BASE=5FSOFT/PSQL/README.md=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/README.?= =?UTF-8?q?md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE?= =?UTF-8?q?=5FSOFT/REDIS/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/BASE=5FSOFT/SYSTEM/FIREWALL/README.md=20=09s?= =?UTF-8?q?upprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/S?= =?UTF-8?q?YSTEM/FIREWALL/firewall.sh=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/SYSTEM/NETWORK/README.md=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSO?= =?UTF-8?q?FT/SYSTEM/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/SYSTEM/SSH/README.md=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/SYSTEM/?= =?UTF-8?q?SSH/sshd=5Fconfig=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/SYSTEM/SUDO/README.md=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/SYSTEM/?= =?UTF-8?q?USERS/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20?= =?UTF-8?q?=20system/BASE=5FSOFT/VARNISH/4.1/README.md=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/VARNISH/4.1/c?= =?UTF-8?q?onf/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?system/BASE=5FSOFT/VARNISH/4.1/conf/VMODS/README.md=20=09suppri?= =?UTF-8?q?m=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/VARNIS?= =?UTF-8?q?H/4.1/conf/VMODS/libvmod=5Fshield.so=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/BASE=5FSOFT/VARNISH/4.1/conf/VMO?= =?UTF-8?q?DS/libvmod=5Fvsthrottle.so=20=09supprim=C3=A9=C2=A0:=20=20=20?= =?UTF-8?q?=20=20=20=20=20system/BASE=5FSOFT/VARNISH/4.1/conf/includes/REA?= =?UTF-8?q?DME.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/?= =?UTF-8?q?BASE=5FSOFT/VARNISH/4.1/conf/includes/acls.vcl=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/VARNISH?= =?UTF-8?q?/4.1/conf/includes/backends.vcl=20=09supprim=C3=A9=C2=A0:=20=20?= =?UTF-8?q?=20=20=20=20=20=20system/BASE=5FSOFT/VARNISH/4.1/conf/includes/?= =?UTF-8?q?directors.vcl=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?system/BASE=5FSOFT/VARNISH/4.1/conf/includes/error-404.vcl=20?= =?UTF-8?q?=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSO?= =?UTF-8?q?FT/VARNISH/4.1/conf/includes/error.vcl=20=09supprim=C3=A9=C2=A0?= =?UTF-8?q?:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/VARNISH/4.1/conf/in?= =?UTF-8?q?cludes/probes.vcl=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20?= =?UTF-8?q?=20=20system/BASE=5FSOFT/VARNISH/4.1/conf/includes/wp-protectio?= =?UTF-8?q?n.vcl=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/B?= =?UTF-8?q?ASE=5FSOFT/VARNISH/4.1/conf/production.vcl=20=09supprim=C3=A9?= =?UTF-8?q?=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/VARNISH/4.1/v?= =?UTF-8?q?arnish=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/?= =?UTF-8?q?BASE=5FSOFT/VARNISH/5.0/README.md=20=09supprim=C3=A9=C2=A0:=20?= =?UTF-8?q?=20=20=20=20=20=20=20system/BASE=5FSOFT/VARNISH/README.md=20=09?= =?UTF-8?q?supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/BASE=5FSOFT/?= =?UTF-8?q?changes.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20sys?= =?UTF-8?q?tem/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20?= =?UTF-8?q?system/scripts/README.md=20=09supprim=C3=A9=C2=A0:=20=20=20=20?= =?UTF-8?q?=20=20=20=20system/scripts/install=5Fpackages.py=20=09supprim?= =?UTF-8?q?=C3=A9=C2=A0:=20=20=20=20=20=20=20=20system/scripts/install=5Fp?= =?UTF-8?q?ackages.pyc=20=09supprim=C3=A9=C2=A0:=20=20=20=20=20=20=20=20sy?= =?UTF-8?q?stem/scripts/lamp-debian9/README.md=20=09supprim=C3=A9=C2=A0:?= =?UTF-8?q?=20=20=20=20=20=20=20=20system/scripts/lamp-debian9/debian9.ini?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +- .../api/v1/__pycache__/api.cpython-35.pyc | Bin 4914 -> 6688 bytes .../main/core/__pycache__/core.cpython-35.pyc | Bin 7595 -> 8890 bytes .../libs/__pycache__/hcrypt.cpython-35.pyc | Bin 545 -> 545 bytes .../__pycache__/mod_access.cpython-35.pyc | Bin 3581 -> 3529 bytes .../__pycache__/mod_analyst.cpython-35.pyc | Bin 4599 -> 4618 bytes .../__pycache__/mod_database.cpython-35.pyc | Bin 9198 -> 10024 bytes .../__pycache__/mod_proxmox.cpython-35.pyc | Bin 11838 -> 11981 bytes code/scripts/main/core/modules/mod_access.py | 3 +- code/scripts/main/startup.py | 9 +- code/web/backend/.htaccess | 4 - code/web/backend/.scrutinizer.yml | 5 - code/web/backend/.travis.yml | 30 - code/web/backend/CHANGELOG.md | 72 -- code/web/backend/README.md | 353 ------- .../_one-click-installation/Vagrantfile | 22 - .../_one-click-installation/bootstrap.sh | 83 -- code/web/backend/_pictures/huge-logo.png | Bin 59181 -> 0 bytes .../_pictures/support-via-a2hosting.png | Bin 7536 -> 0 bytes .../backend/_pictures/support-via-paypal.png | Bin 12211 -> 0 bytes .../_installation/01-create-database.sql | 1 - .../_installation/02-create-table-users.sql | 28 - .../_installation/03-create-table-notes.sql | 6 - .../application/config/config.development.php | 129 --- code/web/backend/application/config/texts.php | 73 -- .../controller/DashboardController.php | 26 - .../controller/ErrorController.php | 25 - .../controller/IndexController.php | 21 - .../controller/LoginController.php | 313 ------ .../application/controller/NoteController.php | 77 -- .../controller/ProfileController.php | 39 - .../backend/application/core/Application.php | 100 -- code/web/backend/application/core/Auth.php | 28 - code/web/backend/application/core/Config.php | 23 - .../backend/application/core/Controller.php | 31 - .../application/core/DatabaseFactory.php | 46 - .../backend/application/core/Environment.php | 18 - code/web/backend/application/core/Mail.php | 115 --- .../web/backend/application/core/Redirect.php | 27 - code/web/backend/application/core/Request.php | 53 - code/web/backend/application/core/Session.php | 75 -- code/web/backend/application/core/Text.php | 27 - code/web/backend/application/core/View.php | 164 --- .../backend/application/model/AvatarModel.php | 254 ----- .../application/model/CaptchaModel.php | 46 - .../backend/application/model/LoginModel.php | 270 ----- .../backend/application/model/NoteModel.php | 120 --- .../application/model/PasswordResetModel.php | 251 ----- .../application/model/RegistrationModel.php | 278 ------ .../backend/application/model/UserModel.php | 331 ------- .../application/model/UserRoleModel.php | 65 -- .../application/view/_templates/feedback.php | 19 - .../application/view/_templates/footer.php | 7 - .../application/view/_templates/header.php | 66 -- .../application/view/dashboard/index.php | 15 - .../backend/application/view/error/index.php | 6 - .../backend/application/view/index/index.php | 18 - .../application/view/login/changePassword.php | 27 - .../application/view/login/changeUserRole.php | 31 - .../application/view/login/editAvatar.php | 28 - .../application/view/login/editUserEmail.php | 17 - .../application/view/login/editUsername.php | 18 - .../backend/application/view/login/index.php | 34 - .../application/view/login/register.php | 37 - .../view/login/requestPasswordReset.php | 18 - .../application/view/login/showProfile.php | 21 - .../backend/application/view/login/verify.php | 12 - .../backend/application/view/note/edit.php | 22 - .../backend/application/view/note/index.php | 43 - .../application/view/profile/index.php | 44 - .../application/view/profile/showProfile.php | 41 - code/web/backend/composer.json | 17 - code/web/backend/public/.htaccess | 23 - code/web/backend/public/avatars/.htaccess | 7 - code/web/backend/public/avatars/default.jpg | Bin 2636 -> 0 bytes code/web/backend/public/css/style.css | 268 ----- code/web/backend/public/index.php | 17 - code/web/backend/tests/core/ConfigTest.php | 41 - .../backend/tests/core/EnvironmentTest.php | 23 - code/web/backend/tests/core/RequestTest.php | 29 - code/web/backend/tests/core/TextTest.php | 28 - code/web/backend/tests/phpunit.xml | 17 - code/web/backend/travis-ci-apache | 7 - code/web/frontend/README.md | 0 doc/Command Process.dia | Bin 8461 -> 0 bytes system/BASE_SOFT/APACHE/2.2/README.md | 0 system/BASE_SOFT/APACHE/2.4/.htpasswd | 0 system/BASE_SOFT/APACHE/2.4/README.md | 0 system/BASE_SOFT/APACHE/2.4/apache2.conf | 46 - .../APACHE/2.4/conf-available/README.md | 0 .../APACHE/2.4/conf-available/charset.conf | 8 - .../2.4/conf-available/javascript-common.conf | 5 - .../conf-available/localized-error-pages.conf | 81 -- .../other-vhosts-access-log.conf | 4 - .../APACHE/2.4/conf-available/security.conf | 72 -- .../2.4/conf-available/serve-cgi-bin.conf | 20 - .../APACHE/2.4/conf-enabled/README.md | 0 .../APACHE/2.4/conf-enabled/charset.conf | 1 - .../conf-enabled/localized-error-pages.conf | 1 - .../conf-enabled/other-vhosts-access-log.conf | 1 - .../APACHE/2.4/conf-enabled/security.conf | 1 - .../2.4/conf-enabled/serve-cgi-bin.conf | 1 - system/BASE_SOFT/APACHE/2.4/conf.d/README.md | 0 .../APACHE/2.4/conf.d/awhsecure.conf | 13 - .../BASE_SOFT/APACHE/2.4/conf.d/badbot.conf | 222 ----- .../BASE_SOFT/APACHE/2.4/conf.d/security.conf | 15 - system/BASE_SOFT/APACHE/2.4/envvars | 47 - system/BASE_SOFT/APACHE/2.4/magic | 935 ------------------ .../APACHE/2.4/mods-available/README.md | 0 .../2.4/mods-available/access_compat.load | 2 - .../APACHE/2.4/mods-available/actions.conf | 11 - .../APACHE/2.4/mods-available/actions.load | 1 - .../APACHE/2.4/mods-available/alias.conf | 24 - .../APACHE/2.4/mods-available/alias.load | 1 - .../2.4/mods-available/allowmethods.load | 1 - .../APACHE/2.4/mods-available/asis.load | 2 - .../APACHE/2.4/mods-available/auth_basic.load | 2 - .../2.4/mods-available/auth_digest.load | 2 - .../APACHE/2.4/mods-available/auth_form.load | 2 - .../APACHE/2.4/mods-available/authn_anon.load | 1 - .../APACHE/2.4/mods-available/authn_core.load | 1 - .../APACHE/2.4/mods-available/authn_dbd.load | 2 - .../APACHE/2.4/mods-available/authn_dbm.load | 1 - .../APACHE/2.4/mods-available/authn_file.load | 1 - .../2.4/mods-available/authn_socache.load | 1 - .../2.4/mods-available/authnz_fcgi.load | 1 - .../2.4/mods-available/authnz_ldap.load | 2 - .../APACHE/2.4/mods-available/authz_core.load | 1 - .../APACHE/2.4/mods-available/authz_dbd.load | 2 - .../APACHE/2.4/mods-available/authz_dbm.load | 2 - .../2.4/mods-available/authz_groupfile.load | 2 - .../APACHE/2.4/mods-available/authz_host.load | 2 - .../2.4/mods-available/authz_owner.load | 1 - .../APACHE/2.4/mods-available/authz_user.load | 2 - .../APACHE/2.4/mods-available/autoindex.conf | 96 -- .../APACHE/2.4/mods-available/autoindex.load | 1 - .../APACHE/2.4/mods-available/buffer.load | 1 - .../APACHE/2.4/mods-available/cache.load | 1 - .../APACHE/2.4/mods-available/cache_disk.conf | 27 - .../APACHE/2.4/mods-available/cache_disk.load | 2 - .../2.4/mods-available/cache_socache.load | 2 - .../APACHE/2.4/mods-available/cgi.load | 1 - .../APACHE/2.4/mods-available/cgid.conf | 4 - .../APACHE/2.4/mods-available/cgid.load | 1 - .../2.4/mods-available/charset_lite.load | 1 - .../APACHE/2.4/mods-available/data.load | 1 - .../APACHE/2.4/mods-available/dav.load | 1 - .../APACHE/2.4/mods-available/dav_fs.conf | 3 - .../APACHE/2.4/mods-available/dav_fs.load | 2 - .../APACHE/2.4/mods-available/dav_lock.load | 1 - .../APACHE/2.4/mods-available/dbd.load | 1 - .../APACHE/2.4/mods-available/deflate.conf | 14 - .../APACHE/2.4/mods-available/deflate.load | 2 - .../APACHE/2.4/mods-available/dialup.load | 1 - .../APACHE/2.4/mods-available/dir.conf | 5 - .../APACHE/2.4/mods-available/dir.load | 1 - .../APACHE/2.4/mods-available/dump_io.load | 1 - .../APACHE/2.4/mods-available/echo.load | 1 - .../APACHE/2.4/mods-available/env.load | 1 - .../APACHE/2.4/mods-available/expires.load | 1 - .../APACHE/2.4/mods-available/ext_filter.load | 1 - .../APACHE/2.4/mods-available/fastcgi.conf | 10 - .../APACHE/2.4/mods-available/fastcgi.load | 1 - .../APACHE/2.4/mods-available/file_cache.load | 2 - .../APACHE/2.4/mods-available/filter.load | 1 - .../APACHE/2.4/mods-available/headers.load | 1 - .../APACHE/2.4/mods-available/heartbeat.load | 3 - .../2.4/mods-available/heartmonitor.load | 3 - .../APACHE/2.4/mods-available/ident.load | 1 - .../APACHE/2.4/mods-available/include.load | 2 - .../APACHE/2.4/mods-available/info.conf | 15 - .../APACHE/2.4/mods-available/info.load | 1 - .../mods-available/lbmethod_bybusyness.load | 2 - .../mods-available/lbmethod_byrequests.load | 2 - .../mods-available/lbmethod_bytraffic.load | 2 - .../mods-available/lbmethod_heartbeat.load | 2 - .../APACHE/2.4/mods-available/ldap.conf | 6 - .../APACHE/2.4/mods-available/ldap.load | 1 - .../APACHE/2.4/mods-available/log_debug.load | 1 - .../2.4/mods-available/log_forensic.load | 1 - .../APACHE/2.4/mods-available/lua.load | 1 - .../APACHE/2.4/mods-available/macro.load | 1 - .../APACHE/2.4/mods-available/mime.conf | 249 ----- .../APACHE/2.4/mods-available/mime.load | 1 - .../APACHE/2.4/mods-available/mime_magic.conf | 5 - .../APACHE/2.4/mods-available/mime_magic.load | 1 - .../APACHE/2.4/mods-available/mpm_event.conf | 18 - .../APACHE/2.4/mods-available/mpm_event.load | 2 - .../2.4/mods-available/mpm_prefork.conf | 16 - .../2.4/mods-available/mpm_prefork.load | 2 - .../APACHE/2.4/mods-available/mpm_worker.conf | 22 - .../APACHE/2.4/mods-available/mpm_worker.load | 2 - .../2.4/mods-available/negotiation.conf | 20 - .../2.4/mods-available/negotiation.load | 1 - .../APACHE/2.4/mods-available/proxy.conf | 27 - .../APACHE/2.4/mods-available/proxy.load | 1 - .../APACHE/2.4/mods-available/proxy_ajp.load | 2 - .../2.4/mods-available/proxy_balancer.conf | 15 - .../2.4/mods-available/proxy_balancer.load | 2 - .../2.4/mods-available/proxy_connect.load | 2 - .../2.4/mods-available/proxy_express.load | 2 - .../APACHE/2.4/mods-available/proxy_fcgi.load | 2 - .../2.4/mods-available/proxy_fdpass.load | 2 - .../APACHE/2.4/mods-available/proxy_ftp.conf | 8 - .../APACHE/2.4/mods-available/proxy_ftp.load | 2 - .../APACHE/2.4/mods-available/proxy_html.conf | 75 -- .../APACHE/2.4/mods-available/proxy_html.load | 2 - .../APACHE/2.4/mods-available/proxy_http.load | 2 - .../APACHE/2.4/mods-available/proxy_scgi.load | 2 - .../2.4/mods-available/proxy_wstunnel.load | 2 - .../APACHE/2.4/mods-available/ratelimit.load | 2 - .../APACHE/2.4/mods-available/reflector.load | 1 - .../APACHE/2.4/mods-available/remoteip.conf | 10 - .../APACHE/2.4/mods-available/remoteip.load | 1 - .../APACHE/2.4/mods-available/reqtimeout.conf | 27 - .../APACHE/2.4/mods-available/reqtimeout.load | 1 - .../APACHE/2.4/mods-available/request.load | 1 - .../APACHE/2.4/mods-available/rewrite.load | 1 - .../APACHE/2.4/mods-available/rpaf.conf | 10 - .../APACHE/2.4/mods-available/rpaf.load | 1 - .../APACHE/2.4/mods-available/sed.load | 1 - .../APACHE/2.4/mods-available/session.load | 1 - .../2.4/mods-available/session_cookie.load | 2 - .../2.4/mods-available/session_crypto.load | 2 - .../2.4/mods-available/session_dbd.load | 2 - .../APACHE/2.4/mods-available/setenvif.conf | 32 - .../APACHE/2.4/mods-available/setenvif.load | 1 - .../2.4/mods-available/slotmem_plain.load | 1 - .../2.4/mods-available/slotmem_shm.load | 1 - .../2.4/mods-available/socache_dbm.load | 1 - .../2.4/mods-available/socache_memcache.load | 1 - .../2.4/mods-available/socache_shmcb.load | 1 - .../APACHE/2.4/mods-available/speling.load | 1 - .../APACHE/2.4/mods-available/ssl.conf | 85 -- .../APACHE/2.4/mods-available/ssl.load | 2 - .../APACHE/2.4/mods-available/status.conf | 14 - .../APACHE/2.4/mods-available/status.load | 1 - .../APACHE/2.4/mods-available/substitute.load | 1 - .../APACHE/2.4/mods-available/suexec.load | 1 - .../APACHE/2.4/mods-available/unique_id.load | 1 - .../APACHE/2.4/mods-available/userdir.conf | 17 - .../APACHE/2.4/mods-available/userdir.load | 1 - .../APACHE/2.4/mods-available/usertrack.load | 1 - .../2.4/mods-available/vhost_alias.load | 1 - .../APACHE/2.4/mods-available/worker.conf | 14 - .../APACHE/2.4/mods-available/xml2enc.load | 1 - .../APACHE/2.4/mods-enabled/README.md | 0 .../2.4/mods-enabled/access_compat.load | 1 - .../APACHE/2.4/mods-enabled/actions.load | 1 - .../APACHE/2.4/mods-enabled/alias.conf | 1 - .../APACHE/2.4/mods-enabled/alias.load | 1 - .../APACHE/2.4/mods-enabled/auth_basic.load | 1 - .../APACHE/2.4/mods-enabled/authn_core.load | 1 - .../APACHE/2.4/mods-enabled/authn_file.load | 1 - .../APACHE/2.4/mods-enabled/authz_core.load | 1 - .../APACHE/2.4/mods-enabled/authz_host.load | 1 - .../APACHE/2.4/mods-enabled/authz_user.load | 1 - .../APACHE/2.4/mods-enabled/autoindex.conf | 1 - .../APACHE/2.4/mods-enabled/autoindex.load | 1 - .../APACHE/2.4/mods-enabled/deflate.conf | 1 - .../APACHE/2.4/mods-enabled/deflate.load | 1 - .../APACHE/2.4/mods-enabled/dir.conf | 1 - .../APACHE/2.4/mods-enabled/dir.load | 1 - .../APACHE/2.4/mods-enabled/env.load | 1 - .../APACHE/2.4/mods-enabled/expires.load | 1 - .../APACHE/2.4/mods-enabled/fastcgi.conf | 1 - .../APACHE/2.4/mods-enabled/fastcgi.load | 1 - .../APACHE/2.4/mods-enabled/filter.load | 1 - .../APACHE/2.4/mods-enabled/headers.load | 1 - .../APACHE/2.4/mods-enabled/mime.conf | 1 - .../APACHE/2.4/mods-enabled/mime.load | 1 - .../APACHE/2.4/mods-enabled/mpm_event.conf | 1 - .../APACHE/2.4/mods-enabled/mpm_event.load | 1 - .../APACHE/2.4/mods-enabled/negotiation.conf | 1 - .../APACHE/2.4/mods-enabled/negotiation.load | 1 - .../APACHE/2.4/mods-enabled/remoteip.conf | 1 - .../APACHE/2.4/mods-enabled/remoteip.load | 1 - .../APACHE/2.4/mods-enabled/rewrite.load | 1 - .../APACHE/2.4/mods-enabled/rpaf.conf | 1 - .../APACHE/2.4/mods-enabled/rpaf.load | 1 - .../APACHE/2.4/mods-enabled/setenvif.conf | 1 - .../APACHE/2.4/mods-enabled/setenvif.load | 1 - .../APACHE/2.4/mods-enabled/status.conf | 1 - .../APACHE/2.4/mods-enabled/status.load | 1 - .../APACHE/2.4/mods-enabled/worker.conf | 1 - system/BASE_SOFT/APACHE/2.4/ports.conf | 1 - .../2.4/sites-available/000-default.conf | 37 - .../sites-available/010-mywebsite.com.conf | 32 - .../APACHE/2.4/sites-available/README.md | 0 .../APACHE/2.4/sites-enabled/000-default.conf | 1 - .../APACHE/2.4/sites-enabled/README.md | 0 system/BASE_SOFT/APACHE/README.md | 0 system/BASE_SOFT/ES/README.md | 0 system/BASE_SOFT/FPM/README.md | 0 system/BASE_SOFT/FPM/conf.d/05-opcache.ini | 1 - system/BASE_SOFT/FPM/conf.d/10-pdo.ini | 1 - system/BASE_SOFT/FPM/conf.d/20-curl.ini | 1 - system/BASE_SOFT/FPM/conf.d/20-gd.ini | 1 - system/BASE_SOFT/FPM/conf.d/20-intl.ini | 1 - system/BASE_SOFT/FPM/conf.d/20-json.ini | 1 - system/BASE_SOFT/FPM/conf.d/20-mcrypt.ini | 1 - system/BASE_SOFT/FPM/conf.d/20-mysql.ini | 1 - system/BASE_SOFT/FPM/conf.d/20-mysqli.ini | 1 - system/BASE_SOFT/FPM/conf.d/20-pdo_mysql.ini | 1 - system/BASE_SOFT/FPM/conf.d/README.md | 0 system/BASE_SOFT/FPM/php-fpm.conf | 18 - system/BASE_SOFT/FPM/php.ini | 17 - system/BASE_SOFT/FPM/pool.d/README.md | 0 system/BASE_SOFT/FPM/pool.d/www.conf | 27 - system/BASE_SOFT/HAPROXY/1.7.5/README.md | 0 system/BASE_SOFT/HAPROXY/1.7.5/haproxy.cfg | 96 -- system/BASE_SOFT/HAPROXY/README.md | 0 system/BASE_SOFT/KEEPALIVED/README.md | 0 system/BASE_SOFT/KEEPALIVED/keepalived.conf | 45 - system/BASE_SOFT/LETSENCRYPT/README.md | 0 system/BASE_SOFT/LETSENCRYPT/cron/README.md | 0 .../BASE_SOFT/LETSENCRYPT/cron/certbot_renew | 1 - .../BASE_SOFT/LETSENCRYPT/scripts/README.md | 0 .../LETSENCRYPT/scripts/newdomain.sh | 5 - system/BASE_SOFT/LETSENCRYPT/scripts/renew.sh | 7 - system/BASE_SOFT/MEMCACHE/README.md | 0 system/BASE_SOFT/MONGODB/README.md | 0 system/BASE_SOFT/MYSQL/README.md | 0 system/BASE_SOFT/PSQL/README.md | 0 system/BASE_SOFT/README.md | 0 system/BASE_SOFT/REDIS/README.md | 0 system/BASE_SOFT/SYSTEM/FIREWALL/README.md | 0 system/BASE_SOFT/SYSTEM/FIREWALL/firewall.sh | 52 - system/BASE_SOFT/SYSTEM/NETWORK/README.md | 0 system/BASE_SOFT/SYSTEM/README.md | 0 system/BASE_SOFT/SYSTEM/SSH/README.md | 0 system/BASE_SOFT/SYSTEM/SSH/sshd_config | 93 -- system/BASE_SOFT/SYSTEM/SUDO/README.md | 0 system/BASE_SOFT/SYSTEM/USERS/README.md | 0 system/BASE_SOFT/VARNISH/4.1/README.md | 0 system/BASE_SOFT/VARNISH/4.1/conf/README.md | 0 .../VARNISH/4.1/conf/VMODS/README.md | 0 .../VARNISH/4.1/conf/VMODS/libvmod_shield.so | Bin 24520 -> 0 bytes .../4.1/conf/VMODS/libvmod_vsthrottle.so | Bin 38648 -> 0 bytes .../VARNISH/4.1/conf/includes/README.md | 0 .../VARNISH/4.1/conf/includes/acls.vcl | 6 - .../VARNISH/4.1/conf/includes/backends.vcl | 7 - .../VARNISH/4.1/conf/includes/directors.vcl | 6 - .../VARNISH/4.1/conf/includes/error-404.vcl | 37 - .../VARNISH/4.1/conf/includes/error.vcl | 138 --- .../VARNISH/4.1/conf/includes/probes.vcl | 8 - .../4.1/conf/includes/wp-protection.vcl | 16 - .../BASE_SOFT/VARNISH/4.1/conf/production.vcl | 311 ------ system/BASE_SOFT/VARNISH/4.1/varnish | 15 - system/BASE_SOFT/VARNISH/5.0/README.md | 0 system/BASE_SOFT/VARNISH/README.md | 0 system/BASE_SOFT/changes.md | 15 - system/README.md | 0 system/scripts/README.md | 0 system/scripts/install_packages.py | 69 -- system/scripts/install_packages.pyc | Bin 2919 -> 0 bytes system/scripts/lamp-debian9/README.md | 0 system/scripts/lamp-debian9/debian9.ini | 15 - 358 files changed, 4 insertions(+), 8269 deletions(-) delete mode 100644 code/web/backend/.htaccess delete mode 100644 code/web/backend/.scrutinizer.yml delete mode 100644 code/web/backend/.travis.yml delete mode 100644 code/web/backend/CHANGELOG.md delete mode 100644 code/web/backend/README.md delete mode 100644 code/web/backend/_one-click-installation/Vagrantfile delete mode 100644 code/web/backend/_one-click-installation/bootstrap.sh delete mode 100644 code/web/backend/_pictures/huge-logo.png delete mode 100644 code/web/backend/_pictures/support-via-a2hosting.png delete mode 100644 code/web/backend/_pictures/support-via-paypal.png delete mode 100644 code/web/backend/application/_installation/01-create-database.sql delete mode 100644 code/web/backend/application/_installation/02-create-table-users.sql delete mode 100644 code/web/backend/application/_installation/03-create-table-notes.sql delete mode 100644 code/web/backend/application/config/config.development.php delete mode 100644 code/web/backend/application/config/texts.php delete mode 100644 code/web/backend/application/controller/DashboardController.php delete mode 100644 code/web/backend/application/controller/ErrorController.php delete mode 100644 code/web/backend/application/controller/IndexController.php delete mode 100644 code/web/backend/application/controller/LoginController.php delete mode 100644 code/web/backend/application/controller/NoteController.php delete mode 100644 code/web/backend/application/controller/ProfileController.php delete mode 100644 code/web/backend/application/core/Application.php delete mode 100644 code/web/backend/application/core/Auth.php delete mode 100644 code/web/backend/application/core/Config.php delete mode 100644 code/web/backend/application/core/Controller.php delete mode 100644 code/web/backend/application/core/DatabaseFactory.php delete mode 100644 code/web/backend/application/core/Environment.php delete mode 100644 code/web/backend/application/core/Mail.php delete mode 100644 code/web/backend/application/core/Redirect.php delete mode 100644 code/web/backend/application/core/Request.php delete mode 100644 code/web/backend/application/core/Session.php delete mode 100644 code/web/backend/application/core/Text.php delete mode 100644 code/web/backend/application/core/View.php delete mode 100644 code/web/backend/application/model/AvatarModel.php delete mode 100644 code/web/backend/application/model/CaptchaModel.php delete mode 100644 code/web/backend/application/model/LoginModel.php delete mode 100644 code/web/backend/application/model/NoteModel.php delete mode 100644 code/web/backend/application/model/PasswordResetModel.php delete mode 100644 code/web/backend/application/model/RegistrationModel.php delete mode 100644 code/web/backend/application/model/UserModel.php delete mode 100644 code/web/backend/application/model/UserRoleModel.php delete mode 100644 code/web/backend/application/view/_templates/feedback.php delete mode 100644 code/web/backend/application/view/_templates/footer.php delete mode 100644 code/web/backend/application/view/_templates/header.php delete mode 100644 code/web/backend/application/view/dashboard/index.php delete mode 100644 code/web/backend/application/view/error/index.php delete mode 100644 code/web/backend/application/view/index/index.php delete mode 100644 code/web/backend/application/view/login/changePassword.php delete mode 100644 code/web/backend/application/view/login/changeUserRole.php delete mode 100644 code/web/backend/application/view/login/editAvatar.php delete mode 100644 code/web/backend/application/view/login/editUserEmail.php delete mode 100644 code/web/backend/application/view/login/editUsername.php delete mode 100644 code/web/backend/application/view/login/index.php delete mode 100644 code/web/backend/application/view/login/register.php delete mode 100644 code/web/backend/application/view/login/requestPasswordReset.php delete mode 100644 code/web/backend/application/view/login/showProfile.php delete mode 100644 code/web/backend/application/view/login/verify.php delete mode 100644 code/web/backend/application/view/note/edit.php delete mode 100644 code/web/backend/application/view/note/index.php delete mode 100644 code/web/backend/application/view/profile/index.php delete mode 100644 code/web/backend/application/view/profile/showProfile.php delete mode 100644 code/web/backend/composer.json delete mode 100644 code/web/backend/public/.htaccess delete mode 100644 code/web/backend/public/avatars/.htaccess delete mode 100644 code/web/backend/public/avatars/default.jpg delete mode 100644 code/web/backend/public/css/style.css delete mode 100644 code/web/backend/public/index.php delete mode 100644 code/web/backend/tests/core/ConfigTest.php delete mode 100644 code/web/backend/tests/core/EnvironmentTest.php delete mode 100644 code/web/backend/tests/core/RequestTest.php delete mode 100644 code/web/backend/tests/core/TextTest.php delete mode 100644 code/web/backend/tests/phpunit.xml delete mode 100644 code/web/backend/travis-ci-apache delete mode 100644 code/web/frontend/README.md delete mode 100644 doc/Command Process.dia delete mode 100644 system/BASE_SOFT/APACHE/2.2/README.md delete mode 100644 system/BASE_SOFT/APACHE/2.4/.htpasswd delete mode 100644 system/BASE_SOFT/APACHE/2.4/README.md delete mode 100644 system/BASE_SOFT/APACHE/2.4/apache2.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/conf-available/README.md delete mode 100644 system/BASE_SOFT/APACHE/2.4/conf-available/charset.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/conf-available/javascript-common.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/conf-available/localized-error-pages.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/conf-available/other-vhosts-access-log.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/conf-available/security.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/conf-available/serve-cgi-bin.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/conf-enabled/README.md delete mode 120000 system/BASE_SOFT/APACHE/2.4/conf-enabled/charset.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/conf-enabled/localized-error-pages.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/conf-enabled/other-vhosts-access-log.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/conf-enabled/security.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/conf-enabled/serve-cgi-bin.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/conf.d/README.md delete mode 100644 system/BASE_SOFT/APACHE/2.4/conf.d/awhsecure.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/conf.d/badbot.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/conf.d/security.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/envvars delete mode 100644 system/BASE_SOFT/APACHE/2.4/magic delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/README.md delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/access_compat.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/actions.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/actions.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/alias.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/alias.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/allowmethods.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/asis.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/auth_basic.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/auth_digest.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/auth_form.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authn_anon.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authn_core.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authn_dbd.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authn_dbm.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authn_file.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authn_socache.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authnz_fcgi.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authnz_ldap.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authz_core.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authz_dbd.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authz_dbm.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authz_groupfile.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authz_host.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authz_owner.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/authz_user.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/autoindex.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/autoindex.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/buffer.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/cache.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/cache_disk.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/cache_disk.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/cache_socache.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/cgi.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/cgid.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/cgid.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/charset_lite.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/data.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/dav.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/dav_fs.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/dav_fs.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/dav_lock.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/dbd.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/deflate.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/deflate.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/dialup.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/dir.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/dir.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/dump_io.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/echo.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/env.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/expires.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/ext_filter.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/fastcgi.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/fastcgi.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/file_cache.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/filter.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/headers.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/heartbeat.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/heartmonitor.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/ident.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/include.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/info.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/info.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/lbmethod_bybusyness.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/lbmethod_byrequests.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/lbmethod_bytraffic.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/lbmethod_heartbeat.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/ldap.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/ldap.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/log_debug.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/log_forensic.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/lua.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/macro.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/mime.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/mime.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/mime_magic.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/mime_magic.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/mpm_event.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/mpm_event.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/mpm_prefork.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/mpm_prefork.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/mpm_worker.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/mpm_worker.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/negotiation.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/negotiation.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_ajp.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_balancer.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_balancer.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_connect.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_express.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_fcgi.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_fdpass.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_ftp.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_ftp.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_html.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_html.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_http.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_scgi.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/proxy_wstunnel.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/ratelimit.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/reflector.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/remoteip.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/remoteip.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/reqtimeout.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/reqtimeout.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/request.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/rewrite.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/rpaf.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/rpaf.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/sed.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/session.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/session_cookie.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/session_crypto.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/session_dbd.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/setenvif.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/setenvif.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/slotmem_plain.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/slotmem_shm.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/socache_dbm.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/socache_memcache.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/socache_shmcb.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/speling.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/ssl.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/ssl.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/status.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/status.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/substitute.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/suexec.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/unique_id.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/userdir.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/userdir.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/usertrack.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/vhost_alias.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/worker.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-available/xml2enc.load delete mode 100644 system/BASE_SOFT/APACHE/2.4/mods-enabled/README.md delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/access_compat.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/actions.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/alias.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/alias.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/auth_basic.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/authn_core.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/authn_file.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/authz_core.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/authz_host.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/authz_user.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/autoindex.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/autoindex.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/deflate.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/deflate.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/dir.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/dir.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/env.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/expires.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/fastcgi.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/fastcgi.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/filter.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/headers.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/mime.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/mime.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/mpm_event.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/mpm_event.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/negotiation.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/negotiation.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/remoteip.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/remoteip.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/rewrite.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/rpaf.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/rpaf.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/setenvif.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/setenvif.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/status.conf delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/status.load delete mode 120000 system/BASE_SOFT/APACHE/2.4/mods-enabled/worker.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/ports.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/sites-available/000-default.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/sites-available/010-mywebsite.com.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/sites-available/README.md delete mode 120000 system/BASE_SOFT/APACHE/2.4/sites-enabled/000-default.conf delete mode 100644 system/BASE_SOFT/APACHE/2.4/sites-enabled/README.md delete mode 100644 system/BASE_SOFT/APACHE/README.md delete mode 100644 system/BASE_SOFT/ES/README.md delete mode 100644 system/BASE_SOFT/FPM/README.md delete mode 120000 system/BASE_SOFT/FPM/conf.d/05-opcache.ini delete mode 120000 system/BASE_SOFT/FPM/conf.d/10-pdo.ini delete mode 120000 system/BASE_SOFT/FPM/conf.d/20-curl.ini delete mode 120000 system/BASE_SOFT/FPM/conf.d/20-gd.ini delete mode 120000 system/BASE_SOFT/FPM/conf.d/20-intl.ini delete mode 120000 system/BASE_SOFT/FPM/conf.d/20-json.ini delete mode 120000 system/BASE_SOFT/FPM/conf.d/20-mcrypt.ini delete mode 120000 system/BASE_SOFT/FPM/conf.d/20-mysql.ini delete mode 120000 system/BASE_SOFT/FPM/conf.d/20-mysqli.ini delete mode 120000 system/BASE_SOFT/FPM/conf.d/20-pdo_mysql.ini delete mode 100644 system/BASE_SOFT/FPM/conf.d/README.md delete mode 100644 system/BASE_SOFT/FPM/php-fpm.conf delete mode 100644 system/BASE_SOFT/FPM/php.ini delete mode 100644 system/BASE_SOFT/FPM/pool.d/README.md delete mode 100644 system/BASE_SOFT/FPM/pool.d/www.conf delete mode 100644 system/BASE_SOFT/HAPROXY/1.7.5/README.md delete mode 100644 system/BASE_SOFT/HAPROXY/1.7.5/haproxy.cfg delete mode 100644 system/BASE_SOFT/HAPROXY/README.md delete mode 100644 system/BASE_SOFT/KEEPALIVED/README.md delete mode 100644 system/BASE_SOFT/KEEPALIVED/keepalived.conf delete mode 100644 system/BASE_SOFT/LETSENCRYPT/README.md delete mode 100644 system/BASE_SOFT/LETSENCRYPT/cron/README.md delete mode 100644 system/BASE_SOFT/LETSENCRYPT/cron/certbot_renew delete mode 100644 system/BASE_SOFT/LETSENCRYPT/scripts/README.md delete mode 100644 system/BASE_SOFT/LETSENCRYPT/scripts/newdomain.sh delete mode 100644 system/BASE_SOFT/LETSENCRYPT/scripts/renew.sh delete mode 100644 system/BASE_SOFT/MEMCACHE/README.md delete mode 100644 system/BASE_SOFT/MONGODB/README.md delete mode 100644 system/BASE_SOFT/MYSQL/README.md delete mode 100644 system/BASE_SOFT/PSQL/README.md delete mode 100644 system/BASE_SOFT/README.md delete mode 100644 system/BASE_SOFT/REDIS/README.md delete mode 100644 system/BASE_SOFT/SYSTEM/FIREWALL/README.md delete mode 100644 system/BASE_SOFT/SYSTEM/FIREWALL/firewall.sh delete mode 100644 system/BASE_SOFT/SYSTEM/NETWORK/README.md delete mode 100644 system/BASE_SOFT/SYSTEM/README.md delete mode 100644 system/BASE_SOFT/SYSTEM/SSH/README.md delete mode 100644 system/BASE_SOFT/SYSTEM/SSH/sshd_config delete mode 100644 system/BASE_SOFT/SYSTEM/SUDO/README.md delete mode 100644 system/BASE_SOFT/SYSTEM/USERS/README.md delete mode 100644 system/BASE_SOFT/VARNISH/4.1/README.md delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/README.md delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/VMODS/README.md delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/VMODS/libvmod_shield.so delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/VMODS/libvmod_vsthrottle.so delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/includes/README.md delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/includes/acls.vcl delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/includes/backends.vcl delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/includes/directors.vcl delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/includes/error-404.vcl delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/includes/error.vcl delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/includes/probes.vcl delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/includes/wp-protection.vcl delete mode 100644 system/BASE_SOFT/VARNISH/4.1/conf/production.vcl delete mode 100644 system/BASE_SOFT/VARNISH/4.1/varnish delete mode 100644 system/BASE_SOFT/VARNISH/5.0/README.md delete mode 100644 system/BASE_SOFT/VARNISH/README.md delete mode 100644 system/BASE_SOFT/changes.md delete mode 100644 system/README.md delete mode 100644 system/scripts/README.md delete mode 100755 system/scripts/install_packages.py delete mode 100644 system/scripts/install_packages.pyc delete mode 100644 system/scripts/lamp-debian9/README.md delete mode 100644 system/scripts/lamp-debian9/debian9.ini diff --git a/README.md b/README.md index ca62fa1..3e54c9b 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,7 @@ * Status: Dev * Object : Massive LXC CT deploy system for proxmox hypervisor. - -## Quick start (testings) +## Quick start ### Requirement: * A proxmox server diff --git a/code/scripts/main/api/v1/__pycache__/api.cpython-35.pyc b/code/scripts/main/api/v1/__pycache__/api.cpython-35.pyc index 18113a79b0a4cae5202b1e7ce17463b8d9aa21b5..2ae54dccc24c071476021f17588b8e4aec18c43a 100644 GIT binary patch literal 6688 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 literal 4914 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 diff --git a/code/scripts/main/core/__pycache__/core.cpython-35.pyc b/code/scripts/main/core/__pycache__/core.cpython-35.pyc index d2b943cd294315c6e46811ab5c5ac676ad854291..adbbb06ae4f71381daae39cf2d68b9d5a03a736b 100644 GIT binary patch literal 8890 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 PV!IFktB{%cH{JaYq?Wh; literal 7595 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 W!?gxqOUQ2nGp%a%so8(g*?$Ak@`A?z diff --git a/code/scripts/main/core/libs/__pycache__/hcrypt.cpython-35.pyc b/code/scripts/main/core/libs/__pycache__/hcrypt.cpython-35.pyc index a2ad868c38e468e63e7984d81a0149f0333cab1b..5579b147383e770a41f8dfe1de019aa2674a7f16 100644 GIT binary patch delta 16 XcmZ3;vXF&coR^nt`neAq*`=5OCaMIs delta 16 XcmZ3;vXF&coR^pDo#x4n>{3hsBx(df diff --git a/code/scripts/main/core/modules/__pycache__/mod_access.cpython-35.pyc b/code/scripts/main/core/modules/__pycache__/mod_access.cpython-35.pyc index ab6652976fe1982a75e3d4be178243a4ff1a3002..82923a140e37337ef05e087c5965daabd25a27e4 100644 GIT binary patch delta 288 zcmew>eNviJoR^o2Y0ig8fsLFIoRep=^D^$4oX;s&Um3zs!^BWz%aFp%kix={!pcws zWUw(vW->9IGd7)pSu*%_Ldz^YR?KrD!!@H{sLmJ(Km zY%YeP?F@{ytPG4*YG7kH8B(|yQn(pXcoAC@<|P+Z7L*jR0);0Z;ZkR0oBW1LYO*l5CBFnv zh=Ea>k(rT=iH%Wsb1b(LBcti$1w7V_d6Vz(l(U%u<%=vPNAemlicaq0HDWZGyqDJj E0O$ugz5oCK delta 430 zcmYL^KTAU~6va=H_wxE)`|5v7TTmC3DuRk=sY_9C6rrHCi)d59Do;tHQhC)u9Go2T z0bE_hPvM}0V<*>s2+>3bL++2u<(!k;*Zf!B&xB#{aQVJle)g+=+5<3TYTZ=pL!bI% zH;N)=5DeK{0^vaP;f^BPanRmEOd%@}9KwT0Aa-y>(Qy$i{0|jFlOP6~4w`^+At-L? zZ=~>T_vhJ(HsC0Z;{fsvq{Bh3rf_4!1BfI<3L=C^qv;{$Fuyrs_N|>=0hntH*BsS| zpc=cV6#6%>+;ep}SL{ugZ6q=1QQHk#*e&I-#f(9hAMCdp%S&>^PDU*<7PHW2!FaCs zZB8N4^%_xKw$GGwt%tRg)Q`dRv?tS6{2RoM8|_-c=nk#0maLyf7Y(WQtoAb~4djdx sG*5Dj5l%VjdnqK>2wBl5sZ}ENQ|gizZCFW9hVvw=x5GuUtnb6}4>dMg=Kufz diff --git a/code/scripts/main/core/modules/__pycache__/mod_analyst.cpython-35.pyc b/code/scripts/main/core/modules/__pycache__/mod_analyst.cpython-35.pyc index be218d8bec8cfdce349de020e3eae1e72f8847a6..c15385fe6880dc08ed5c8582908c0b7252368ee6 100644 GIT binary patch delta 669 zcma)%%WG3X6voe)`%HTCGLaA{hNcFIQdA6~6;T(#g+c@$lrBO@I#=5?CfB)h)3m*5 z7ukro5N4s^UIld_*$MsuF5S+;rTc>5))`&t%Ef%l`JMUBH|OW_)6Q0Tn zJqmU&I-J(;$ zSp79ETJ9mhJK?i6TL=VG38}tl_Bjvg;-sNzvDtZAuh@wA|phIp4A3~3L2U@CDEmrWoR7rzv{1KAK znX<87sp1zPkSZjUkp%`;q^|cDz{bYHfUjUdT^^lt-uJvZ=k?;RMscBBHoi{2?KD3Y z*ED>`*0l!hNf|(2hPC~t(o}*>0wRIaSAfVs6qrdcl_8U%uL4nFhA>qiDL|G>2$)xi z_Ma@$bRY$Ahz3r+E^O?(c5_u2|E8bv{F6*@PDwKvP^^_%Q@?JJ3OG{@MlNO=5Q~NS zg4V`Ng?@##^-JtnuV96J(l^!jxc%~ooh{Bc+j-T3ZIO)7KLd#g8H%&WRq-AYfXA)I zI@hAq_j~>USJIe96M1iM#BnrH)8zR|hbxD49CIzF8x9lJHZCmbVKfvp)o6PY2#6=#(o-Cnp#A|LD!?aKz%QFb2W^5e!}&TP%j#X zNmK^_cCWO>j!KJ{@8`{KQ3SmR{DWZE@&bQIqr^=D_t`k1>__PsJM6@+-H`M9@8tIQ zK@LDus!3J(99n4LHO0glR`DX%WkX((Y<6NUDd#0en*TQ6V*OUW5Gev3f!hM601Dh? sUn)aciFPNjH_(R-nXBKft7<7#8+O-KHCrf01tJV6#xJL diff --git a/code/scripts/main/core/modules/__pycache__/mod_database.cpython-35.pyc b/code/scripts/main/core/modules/__pycache__/mod_database.cpython-35.pyc index a7a396479faf2820a544f1739d0904b495e01a80..9117709f16d076ef3aa6153b54d5e99f0ccc157f 100644 GIT binary patch delta 2076 zcma)-TWB0r7{||<%WiJ#Cf(i4Zf-l-O~9=cVv-satg&qp)0m5?nxtOhBr{DW*-X+i zyD8b+(1=BSka9ru!COJ_Nhv6T4@Ct*5Ph)-4q^+Uk7A$1H^1*pcC%|+mF)i6bI$jD zbH3mCpULk-AB@##p-|1YzulPWPF}8gBa%`GA&2050>187ARC)xixM_SOiE0Nm@w@3_LuO4}$bG zV5a-zB;Fb8jHobQ^4KL9Y)tbT$=+QsLjY|6jV^(~z--lksiufYCcckUf$1&4r1(C9 zyxN02vyN;jWjRGk3fWQieI$dALSvq?zG9mNrNgyyULe25-;Jre|AB7NaP>LMa`gNf z^lh29K^G`T=ZCTfpwR<<8C6)1J%Y0%DE%nZH{Z2bIB^liC5GMQ4F8I?M=I?18iZ~P z07IQ$*Hy3vUMdA$h8)3eH(AYR_{xFRAP2w~b1JO%uTB&D7h5mcZK341LVbysX=Sbd z$%|PltLxT3dHGk>=Ov!!lX|r=oOq|4R2oRN6y5fI;{qMzA?+~zkl&}B3!H{X_Bj7Y zyOWOdw-ZVJr`AL-^FQK8__6qSahbAc>^RiiX1|x2rljLtU#Y3M#fGdH3yOaESqLE*1Iu$wv z9S7zDT z_y#IPc|+TUT2Vq6XO>@T>uANTdWyTsa-N#CSL_^{!;*e~{Fk=->36&}xo{JVH2t1` zl04r#3eo$!^EamWFnX~HZcNlG?hd0FvW(XIcXSrsayi49w|?L+>WgVyhu56IDJncx zs<3|$qaxY&b}9Ks-qU_1B(~Bvy6P;fo;=RqYtT}e+Wkhb%E3X2%Hp8rcwZ_R#Kbd- z%NvvkUrUAPPkbje^yDxmJ&H1cGKum8$`r~B%2Oy$qdbH19LhY3iL!`dqrkr?!j@68 byuUimd(w@;NZlRq7v>Y`0eX_Zo}T_2;8wak delta 1053 zcmZ{jOK1~O6o%&}nMsp$YNcr&P10#HN!qDFrPgY}g|#+)+NynPwT33vktA(qCIM@^ zC>Df*i*mXs7K9>*il8n8-MSN9NLMn5YfS5=LnO;`VVYlP1g}e6MeUfV;AKIL$D_l4Vf0 zQTDjzCYqx+$H|x zpCz4;tZOFAP^c?#XYq`4@VTyu48ZX*>a=!BKPXSyJ?!)MGxo| z0X9FE&aA;o{p-UWXmJW*MHq)4#Wx(fa+<=t!5{`MLP=;Q>#!vh58xM}bE=loimGHQ zOOIg^o~K*oyk<(Lpdk2QvSACPSJEWE9YcQnMU7oa}bKOlPwsJ%>H!~ZzCdkKqu!0t2ooz zM-@9omFwAQsTG~D9>dct3bX0=bXOF~Bg0}_91$^S-h?3={39#>3rZjKMn&?(P%K9u zlRikq;=;d%VCan@OhX|i(9E@1oIHh>vF@=X+V&#OAchd<5hI8(!~|jzaRG4&aRre= iTt&_eNQ>O0Es@E(sY7CiwOgng zTS%2Efsl$A6>)g-{;sOVx7F5Bl5;JQ%cHIPmknG8~n{Rh# ze)FII`m3`)oRfT3t91OQKc`2=K9d#=b_2W0nc`-Ohbb1Oc;TAi+%})K_Ok`XRybP` z*;O4&8(2|biD@Ok@KY37No1!poSj|~*vVM1>@{BDFf1J?|0p%naL7;g5NMH^Ejrr6;d(}Z^H(2kuDGJCx)rnp$q$V$fQV+{BhH#}?p z8J}{HM_^eR33f5YR0+eXem<2~Ep*sQAquVC{{C)S#wiS9hzY8T)>|nIQ_!}y(P{)< z>2|f4@g}pGtdh!&Lwn0a*o*%f$8YXC3<|ID&=HTKo?Si;Z?)`lDrUCA*n*Lz@vMO* zGV^fP?(h4SaZH~Vb~8oP>S`gXgcPqw=2oV(GQ3u?Y4zF>#8dS;V9@dr-~LY24KLdy zcx(>XS|_JZ9Xl~0$K@kaQzxdtY~6Z#4THLaiqSB{Xl0|&Pho(<#ynO{RCXr0l&X-a zL+O(UN-m$wU(B7yo8$-z6P#Snhp?kAeM4VwTf_g0ne%C8aIeE{_%}#5TW>Z(k~%su z#X=J)HB2YLeL) zk{mGX`0YPIn{*DH*$|rJAEAj2gGbP2gj_y5n^v0P!2_ohy0OMg^wdPw$jssT+@QI} zZC7Gv)iG*?>ol{{*UhTpB28xHhEwkQRQpubNaAdae*pJ`vwT04dfEf{N^oj$1u{6a z`UR1#;5$PPi(5K*2VCFM=|aZ1&0Xt(3B?CzLt$QkQfL}R+g{KL(iK#A(6(=n9FNPd zrt=qMC7Dm|m9LBx>C9v{mrK92n39*(EdE*AD<8hNyqG4kaw?NYwh`!W-&Qw#wU?@} zQqb&9Yt`sxfT$t5h{krtG^eKU373}YINbKix!D@ENARdU%G;o=V{*bqDEw_Qqk&l3fB z*DnADdhawKO+@LH|88^_BE1v!SCAgwRE7trFAY6cQ@M2E$(}rCIw z+OT4a{S_B!9@fI^FxZ=gGyUV0iT$g80&_evFut*u9Bj&X-HBDTj5UF3EOU+ebb%1J z@%O+RpV_^QD%(k6H-$YE_EOkS;UI-)D9}$B^(cj76plmdpbu`vT^&7^h{bR5;kV1u XY3a2@EpbasHQ}b1QSFA`;}d@a6Wj+~ delta 2567 zcmcgtOKcle6n)RJXFTJvG;Y%>WK3|?I52i9 z;U;O-01~Tyu2fbL8-5ZCN>iy~0}=}a60KMu(OPtYDzT|b*;cUN-to7VQvwU*@$sAS zjD60z=iYZ?_N$|^*KU^&bbLSa{`eR2Nwbr)bzR5ndXIe&9j3(W9?@r7+c|N zMP%zHmN2tbflbe74GfP}k*$gBaFVmbD*}5t+PJA&PIG(KHou%oFD=G(eM#TEC`|EY zE^v=2$Rj3!*Wy~@Ev68D(t3vp{t`chKDT0aGOZ4-S*P$s66=|U=PtP7P*r5+W~&yq zX377X8UM`#d!%12dW10s7lqv>y%mnh1H26`%075ob@%t+H+nlkFF_wdRM1_t?k5-^ za1b;R48nc6nU8_ZHYI!T!X&;^*TCUW`8Z^3!%~8?RWqAT9)YC8ckpw@krB^yGfiZg z#59>{Hl`^|vllG0uoV+quVINAkEX32t zF~$1aLOiA8m4Zd~M?JdajFddO4qrR{n3fx^Hu%6+ZzRT2Ow3hGjPUrx2xW=E2MdW2 z*qV?}z6FzC3m59{J=Ujh>idsu=~Epk-7+*{S%;8MF#%mTp3utuf)`xP{&PiBM9-t1 zyyv=_>*X=`bg_>&-2QwYS4<5L{NTQA9>QOPAEg%`ZRlZjr?XNAoK=0#R*So}f_c_D zKbMX#Ea`6<++$KAnM%(k=dqso_}@~49N?k)TaNBsZ;9@N&ks`2yZNTi&Hp92ebvZG z73B0?C^#z@C>8vz$EyW)Up55zb-2~=3Oo$BV60K(8?e9eIE+LBDo#h2F=hmI0>=y@ z&1bmN80L+an!-akG4U2pVG>yj!&{_K;fPn+s+Fx-^Pv(kRNhPmLctlh(sZb(S2VgV zGYYZhQJSwen+H9ma&!_`JApzq*}HAodJ8>7{TH*&>v1g7sl|e5JrLoy;c}o8jqEz_b4w+Gw^;ExtRj5T>782nHgr(debPE%+XZ-trA5bg!%Lyfc-RLx8E zl9*2|=8F-tYVnita&k4{2xpre;XZDr0zfP>JyPMc#8%A4%*UP5S~6Q=Yf|29t6}y9 zH2ZaUsr5CL*y}!oeY&5P4FuzGM|vjT3$<;e=lQmYhLZQCeIQo_D!_Bq3Lsa@olbjO zR+yVlCzg`ALWtNJ>E%?h4sv^hcW(B!3wfy{9sgPCWg}O?&Q#TE-Rsbj!CrDSDm z-dIkTCF{WUh3z5p%HpNRQ;AGjync>G_#yZ+`XJZwzjwu`l1{kaGRV*7d8+VW$7Hbw z@XcR`taK=yN{ /dev/null - -before_script: - - sudo apt-get install apache2 - - sudo a2enmod rewrite - # configure apache virtual hosts, create vhost via travis-ci-apache file template - - sudo cp -f travis-ci-apache /etc/apache2/sites-available/default - - sudo sed -e "s?%TRAVIS_BUILD_DIR%?$(pwd)?g" --in-place /etc/apache2/sites-available/default - - sudo service apache2 restart - # composer - - composer self-update - - composer install --prefer-source --no-interaction --dev - # go to tests folder - - cd tests - -# run unit tests, create result file -script: phpunit --configuration phpunit.xml --coverage-text --coverage-clover=coverage.clover - -# gets tools from Scrutinizer, uploads unit tests results to Scrutinizer (?) -after_script: - - wget https://scrutinizer-ci.com/ocular.phar - - php ocular.phar code-coverage:upload --format=php-clover coverage.clover \ No newline at end of file diff --git a/code/web/backend/CHANGELOG.md b/code/web/backend/CHANGELOG.md deleted file mode 100644 index 656016f..0000000 --- a/code/web/backend/CHANGELOG.md +++ /dev/null @@ -1,72 +0,0 @@ -# CHANGE LOG - -For the newest (und unstable) version always check the develop branch. - -## 3.1 - -Code Quality at Scrutinizer 9.7/10, at Code Climate 3.9/4 - -**February 2015** - -- [panique] several code quality improvements (and line reductions :) ) all over the project -- [PR](https://github.com/panique/huge/pull/620) [owenr88] view rending now possible with multiple view files -- [panique] lots of code refactorings and simplifications all over the project -- [PR](https://github.com/panique/huge/pull/615) [Dominic28] Avatar can now be deleted by the user -- [panique] First Unit tests :) -- [panique] several code quality improvements all over the project -- [panique] avatarModel code improvements -- [panique] renamed AccountType stuff to UserRole, minor changes - -## 3.0 - -Code Quality at Scrutinizer 9.3/10, at Code Climate 3.9/4 - -**February 2015** - -- [panique] removed duplicate code in AccountTypeModel -- [PR](https://github.com/panique/huge/pull/587) [upperwood] Facebook stuff completely removed from SQL -- [panique] tiny text changes - -**January 2015** - -- [panique] added static Text class (gets the messages etc) -- [panique] added static Environment class (get the environment) -- [panique] added static Config class (gets config easily and according to environment) -- [panique] new styling of the entire project: login/index has new look now -- [panique] massive refactoring of all model classes: lots of methods have been organized into other model classes -- [panique] massive refactoring of all model classes: all methods are static now -- [panique] EXPERIMENTAL: added static database call / DatabaseFactory, rebuild NoteModel with static methods -- [panique] massive refactoring of mail sending, (chose between PHPMailer, SwiftMailer, native / SMTP or no SMTP) - -**December 2014** - -- [panique] lots of refactorings -- [panique] refactored LoginModel'S login() method / LoginController's login() method -- [panique] removed COOKIE_DOMAIN (cookie is now valid on the domain/IP it has been created on) -- [panique] Abstracting super-globals like $_POST['x'] into Request::post('x') -- [panique] entirely removed all the Facebook stuff [will be replaced by new proper Oauth2 solution soon] -- [panique] lots of code refactorings and cleaning, deletions of duplicate code -- [panique] moving nearly all hardcoded values to config -- [panique] new View handling: you'll have to pass vars to the view renderer now -- [panique] completely removed Facebook login process from controller (incomplete) [will be replaced by new solution] -- [panique] less config, URL/IP is auto-detected now -- [panique] added loadConfig() to load a specific config according to environment setting (fallback: development) -- [panique] added getEnvironment() to fetch (potential) environment setting -- [panique] replaced native super-globals access by wrapper access (Session:get instead of $_SESSION) -- [panique] complete frontend rebuilding (incomplete yet) -- [panique] massive cleaning of all controllers -- [panique] added Session::add() to allow stacking of elements (useful for collecting feedback, errors etc) -- [panique] complete rebuild of model handling -- [panique] View can now render(), renderWithoutHeaderFooter() and renderJSON -- [panique] using Composer's PSR-4 autoloader (in a very basic way currently) -- [panique] DB construction needs now port by default -- [panique] removed (semi-optional) hashing cost factor (as it's redundant usually) -- [panique] email max limit increased to 254/255 (official number) -- [panique] simpler and improved core -- [panique] improved architecture, controllers are now named like "IndexController" -- [panique] moved index.php to /public folder, new .htaccess, new installation guideline -- [panique] MVC naming fixes -- [nerdalertdk] betters paths, automatic paths -- [panique] removed legacy PHP stuff: 5.5.x is now the minimum -- [PR](https://github.com/panique/php-login/pull/503) [Malkleth] allow users to request password reset by inputting email as well as user names -- [PR](https://github.com/panique/php-login/pull/516) [pein0119] cookie runtime calculation fix diff --git a/code/web/backend/README.md b/code/web/backend/README.md deleted file mode 100644 index bb50a7f..0000000 --- a/code/web/backend/README.md +++ /dev/null @@ -1,353 +0,0 @@ -[![HUGE, formerly "php-login" logo](_pictures/huge-logo.png)](http://www.php-login.net) - -# HUGE - -[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/panique/huge/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/panique/huge/?branch=master) -[![Code Climate](https://codeclimate.com/github/panique/huge/badges/gpa.svg)](https://codeclimate.com/github/panique/huge) -[![Travis CI](https://travis-ci.org/panique/huge.svg?branch=master)](https://travis-ci.org/panique/huge) -[![Dependency Status](https://www.versioneye.com/user/projects/54ca11fbde7924f81a000010/badge.svg?style=flat)](https://www.versioneye.com/user/projects/54ca11fbde7924f81a000010) - -Just a simple user authentication solution inside a super-simple framework skeleton that works out-of-the-box -(and comes with an auto-installer), using the future-proof official bcrypt password hashing/salting implementation of -PHP 5.5+, plus some nice features that will speed up the time from idea to first usable prototype application -dramatically. Nothing more. This project has its focus on hardcore simplicity. Everything is as simple as possible, -made for smaller projects, typical agency work and quick pitch drafts. If you want to build massive corporate -applications with all the features modern frameworks have, then have a look at [Laravel](http://laravel.com), -[Symfony](http://symfony.com) or [Yii](http://www.yiiframework.com), but if you just want to quickly create something -that just works, then this script might be interesting for you. - -HUGE's simple-as-possible architecture was inspired by several conference talks, slides and articles about huge -applications that - surprisingly and intentionally - go back to the basics of programming, using procedural programming, -static classes, extremely simple constructs, not-totally-DRY code etc. while keeping the code extremely readable -([StackOverflow](http://www.dev-metal.com/architecture-stackoverflow/), Wikipedia, SoundCloud). - -Buzzwords: [KISS](http://en.wikipedia.org/wiki/KISS_principle), [YASNI](http://en.wikipedia.org/wiki/You_aren%27t_gonna_need_it). - -#### Quick-Index - -+ [Features](#features) -+ [Live-Demo](#live-demo) -+ [Support](#support) -+ [Follow the project](#follow) -+ [License](#license) -+ [Requirements](#requirements) -+ [Auto-Installation](#auto-installation) - - [Auto-Installation in Vagrant](#auto-installation-vagrant) - - [Auto-Installation in Ubuntu 14.04 LTS server](#auto-installation-ubuntu) -+ [Installation (Ubuntu 14.04 LTS)](#installation) - - [Quick Installation](#quick-installation) - - [Detailed Installation](#detailed-installation) -+ [Documentation](#documentation) -+ [Why is there no support forum anymore ?](#why-no-support-forum) -+ [Zero tolerance for idiots, trolls and vandals](#zero-tolerance) -+ [Contribute](#contribute) -+ [Report a bug](#bug-report) - -### The History of HUGE - -This script was formerly named "php-login" and by far the most popular version of the 4 simple PHP user auth -scripts of [The PHP Login Project](http://www.php-login.net) (a collection of simple login scripts, made to prevent -people from using totally outdated and insecure MD5 password hashing, which was still very popular in the PHP world -back in 2012). - -Why the name "HUGE" ? It's a nice combination to -[TINY](https://github.com/panique/tiny), -[MINI](https://github.com/panique/mini) and -[MINI2](https://github.com/panique/mini2), my other projects :) - -### Features -* built with the official PHP password hashing functions, fitting the most modern password hashing/salting web standards -* users can register, login, logout (with username, email, password) -* [planned: OAuth2 implementation for proper future-proof 3rd party auth] -* password-forget / reset -* remember-me (login via cookie) -* account verification via mail -* captcha -* failed-login-throttling -* user profiles -* account upgrade / downgrade -* supports local avatars and remote Gravatars -* supports native mail and SMTP sending (via PHPMailer and other tools) -* uses PDO for database access for sure, has nice DatabaseFactory (in case your project goes big) -* uses URL rewriting ("beautiful URLs") -* proper split of application and public files (requests only go into /public) -* uses Composer to load external dependencies (PHPMailer, Captcha-Generator, etc.) -* fits PSR-0/1/2/4 coding guidelines -* masses of comments -* is actively developed, maintained and bug-fixed - -### Live-Demo - -See a [live demo here](http://demo-huge.php-login.net) and [the server's phpinfo() here](http://demo-huge.php-login.net/info.php). - -### Support the project - -There a lot of work behind this project. I might save you hundreds, maybe thousands of hours of work (calculate that -in developer costs). So when you are earning money by using HUGE, be fair and give something back to open-source. -HUGE is totally free to private and commercial use. - -TODO new banners - -[![Donate with PayPal banner](_pictures/support-via-paypal.png)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=P5YLUK4MW3LDG) -[![Donate by server affiliate sale](_pictures/support-via-a2hosting.png)](https://affiliates.a2hosting.com/idevaffiliate.php?id=4471&url=579) - -You can also rent your next $5 server at [Virpus](http://my.virpus.com/aff.php?aff=1836) or [DigitalOcean](https://www.digitalocean.com/?refcode=40d978532a20) -or donate via [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=P5YLUK4MW3LDG). - -Also feel free to contribute to this project. - -### Follow the project - -Here on **[Twitter](https://twitter.com/simplephplogin)** or **[Facebook](https://www.facebook.com/pages/PHP-Login-Script/461306677235868)**. -I'm also blogging at **[Dev Metal](http://www.dev-metal.com)**. - -### License - -Licensed under [MIT](http://www.opensource.org/licenses/mit-license.php). -Totally free for private or commercial projects. - -### Requirements - -Make sure you know the basics of object-oriented programming and MVC, are able to use the command line and have -used Composer before. This script is not for beginners. - -* **PHP 5.5+** -* **MySQL 5** database (better use versions 5.5+ as very old versions have a [PDO injection bug](http://stackoverflow.com/q/134099/1114320) -* installed PHP extensions: pdo, gd, openssl (the install guideline shows how to do) -* installed tools on your server: git, curl, composer (the install guideline shows how to do) -* for professional mail sending: an SMTP account (I use [SMTP2GO](http://www.smtp2go.com/?s=devmetal)) -* activated mod_rewrite on your server (the install guideline shows how to do) - -### Auto-Installations - -Yo, fully automatic. Why ? Because I always hated it to spend days trying to find out how to install a thing. -This will save you masses of time and nerves. Donate a coffee if you like it. - -#### Auto-Installation (in Vagrant) - -If you are using Vagrant for your development, then simply - -1. Add the official Ubuntu 14.04 LTS box to your Vagrant: `vagrant box add ubuntu/trusty64` -2. Move *Vagrantfile* and *bootstrap.sh* (from *_one-click-installation* folder) to a folder where you want to initialize your project. -3. Do `vagrant up` in that folder. - -5 minutes later you'll have a fully installed HUGE inside Ubuntu 14.04 LTS. The full code will be auto-synced with -the current folder. MySQL root password and the PHPMyAdmin root password are set to *12345678*. By default -192.168.33.111 is the IP of your new box. - -#### Auto-Installation in a naked Ubuntu 14.04 LTS server - -Extremely simple installation in a fresh and naked typical Ubuntu 14.04 LTS server: - -Download the installer script -```bash -wget https://raw.githubusercontent.com/panique/huge/master/_one-click-installation/bootstrap.sh -``` - -Make it executable -```bash -chmod +x bootstrap.sh -``` - -Run it! Give it some minutes to perform all the tasks. And yes, you can thank me later :) -```bash -sudo ./bootstrap.sh -``` -### Installation - -This script is very fresh, so the install guidelines are not perfect yet. - -#### Quick guide: - -0. Make sure you have Apache, PHP, MySQL installed. [Tutorial](http://www.dev-metal.com/installsetup-basic-lamp-stack-linux-apache-mysql-php-ubuntu-14-04-lts/). -1. Clone the repo to a folder on your server -2. Activate mod_rewrite, route all traffic to application's /public folder. [Tutorial](http://www.dev-metal.com/enable-mod_rewrite-ubuntu-14-04-lts/). -3. Edit application/config: Set your database credentials -4. Execute SQL statements from application/_installation to setup database tables -5. [Install Composer](http://www.dev-metal.com/install-update-composer-windows-7-ubuntu-debian-centos/), - run `Composer install` on application's root folder to install dependencies -6. Make avatar folder (application/public/avatars) writable -7. For proper email usage: Set SMTP credentials in config file, set EMAIL_USE_SMTP to true - -"Email does not work" ? See the troubleshooting below. TODO - -#### Detailed guide (Ubuntu 14.04 LTS): - -This is just a quick guideline for easy setup of a development environment! - -Make sure you have Apache, PHP 5.5+ and MySQL installed. [Tutorial here](http://www.dev-metal.com/installsetup-basic-lamp-stack-linux-apache-mysql-php-ubuntu-14-04-lts/). -Nginx will work for sure too, but no install guidelines are available yet. - -Edit vhost to make clean URLs possible and route all traffic to /public folder of your project: -```bash -sudo nano /etc/apache2/sites-available/000-default.conf -``` - -and make the file look like -``` - - DocumentRoot "/var/www/html/public" - - AllowOverride All - Require all granted - - -``` - -Enable mod_rewrite and restart apache. -```bash -sudo a2enmod rewrite -service apache2 restart -``` - -Install curl (needed to use git), openssl (needed to clone from GitHub, as github is https only), -PHP GD, the graphic lib (we create captchas and avatars), and git. -```bash -sudo apt-get -y install curl -sudo apt-get -y install php5-curl -sudo apt-get -y install openssl -sudo apt-get -y install php5-gd -sudo apt-get -y install git -``` - -git clone HUGE -```bash -sudo git clone https://github.com/panique/huge "/var/www/html" -``` - -Install Composer -```bash -curl -s https://getcomposer.org/installer | php -mv composer.phar /usr/local/bin/composer -``` - -Go to project folder, load Composer packages (--dev is optional, you know the deal) -```bash -cd /var/www/html -composer install --dev -``` - -Execute the SQL statements. Via phpmyadmin or via the command line for example. 12345678 is the example password. -Note that this is written without a space. -```bash -sudo mysql -h "localhost" -u "root" "-p12345678" < "/var/www/html/application/_installation/01-create-database.sql" -sudo mysql -h "localhost" -u "root" "-p12345678" < "/var/www/html/application/_installation/02-create-table-users.sql" -sudo mysql -h "localhost" -u "root" "-p12345678" < "/var/www/html/application/_installation/03-create-table-notes.sql" -``` - -Make avatar folder writable -```bash -sudo chmod 0777 -R "/var/www/html/public/avatars" -``` - -Remove Apache's default demo file -```bash -sudo rm "/var/www/html/index.html" -``` - -Edit the application's config in application/config.development.php and put in your database credentials. - -Last part (not needed for a first test): Set your SMTP credentials in the same file and set EMAIL_USE_SMTP to true, so -you can send proper emails. It's highly recommended to use SMTP for mail sending! Native sending via PHP's mail() will -not work in nearly every case (spam blocking). I use [SMTP2GO](http://www.smtp2go.com/?s=devmetal). - -Then check your server's IP / domain. Everything should work fine. - -#### Testing with demo user - -By default HUGE has a demo-user: username is `demo`, password is `12345678`. The user is already activated. - -### What the hell are .travis.yml, .scrutinizer.yml etc. ? - -There are several files in the root folder of the project that might be irritating: - - - *.htaccess* (optionally) routes all traffic to /public/index.php! If you installed this project correctly, then this - file is not necessary, but as lots of people have problems setting up the vhost correctly, .htaccess it still there - to increase security, even on partly-broken-installations. - - *.scrutinizer.yml* (can be deleted): Configs for the external code quality analyzer Scrutinizer, just used here on - GitHub, you don't need this for your project. - - *.travis.yml* (can be deleted): Same like above. Travis is an external service that creates installations of this - repo after each code change to make sure everything runs fine. Also runs the unit tests. You don't need this inside - your project. - - *composer.json* (important): You should know what this does. ;) This file says what external dependencies are used. - - *travis-ci-apache* (can be deleted): Config file for Travis, see above, so Travis knows how to setup the Apache. - -*README* and *CHANGELOG* are self-explaining. - -#### Documentation - -A real documentation is in the making. Until then, please have a look at the code and use your IDE's code completion -features to get an idea how things work, it's quite obvious when you look at the controller files, the model files and -how data is shown in the view files. A big sorry that there's no documentation yet, but time is rare :) - - TODO: Full documentation - TODO: Basic examples on how to do things - -### Why is there no support forum (anymore) ? - -There were two (!) support forums for v1 and v2 of this project (HUGE is v3), and both were vandalized by people who -didn't even read the readme and / or the install guidelines. Most asked question was "script does not work plz help" -without giving any useful information (like code or server setup or even the version used). While I'm writing these -lines somebody just asked via Twitter "how to install without Composer". You know what I mean :) ... Beside, 140 -characters on Twitter are not a clever way to ask for / describe a complex development situation. 99% of the questions -were not necessary if the people would had read the guidelines, do a minimal research on their own or would stop making -things so unnecessarily complicated. And even when writing detailed answers most of them still messed it up, resulting -in rants and complaints (for free support for a free software!). It was just frustrating to deal with this every day, -especially when people take it for totally granted that *it's the duty* of open-source developers to give detailed, -free and personal support for every "plz help"-request. - -So I decided to completely stop any free support. For serious questions about real problems inside the script please -use the GitHub issues feature. - -### Zero tolerance for idiots, trolls and vandals! - -Harsh words, but as basically every public internet project gets harassed, vandalized and trolled these days by very -strange people it's necessary: Some simple rules. - -1. Respect that this is just a simple script written by unpaid volunteers in their free-time. - This is NOT business-software you've bought for $10.000. - There's no reason to complain (!) about free open-source software. The attitude against free software - is really frustrating these days, people take everything for granted without realizing the work behind it, and the - fact they they get serious software totally for free, saving thousands of dollars. If you don't like it, then don't - use it. If you want a feature, try to take part in the process, maybe even build it by yourself and add it to the - project! Be nice and respectful. Constructive criticism is for sure always welcome! - -2. Don't bash, don't hate, don't spam, don't vandalize. Don't ask for personal free support, don't ask if somebody - could do your work for you. Before you ask something, make sure you've read the README, followed every tutorial, - double-checked the code and tried to solve the problem by yourself. - -Trolls and very annoying people will get a permanent ban / block. GitHub has a very powerful anti-abuse team. - -### Contribute - -Please commit only in *develop* branch. The *master* branch will always contain the stable version. - -### Found a bug (Responsible Disclosure) ? - -Due to the possible consequences when publishing a bug on a public open-source project I'd kindly ask you to send really -big bugs to my email address, not posting this here. If the bug is not interesting for attackers: Feel free to create -an normal GitHub issue. - -### Current and further development - -See active issues and requested features here: -https://github.com/panique/huge/issues?state=open - -### Useful links - -- [How to use PDO](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers) -- [A short guideline on how to use the PHP 5.5 password hashing functions and its PHP 5.3 & 5.4 implementations](http://www.dev-metal.com/use-php-5-5-password-hashing-functions/) -- [How to setup latest version of PHP 5.5 on Ubuntu 12.04 LTS](http://www.dev-metal.com/how-to-setup-latest-version-of-php-5-5-on-ubuntu-12-04-lts/) -- [How to setup latest version of PHP 5.5 on Debian Wheezy 7.0/7.1 (and how to fix the GPG key error)](http://www.dev-metal.com/setup-latest-version-php-5-5-debian-wheezy-7-07-1-fix-gpg-key-error/) -- [Notes on password & hashing salting in upcoming PHP versions (PHP 5.5.x & 5.6 etc.)](https://github.com/panique/huge/wiki/Notes-on-password-&-hashing-salting-in-upcoming-PHP-versions-%28PHP-5.5.x-&-5.6-etc.%29) -- [Some basic "benchmarks" of all PHP hash/salt algorithms](https://github.com/panique/huge/wiki/Which-hashing-&-salting-algorithm-should-be-used-%3F) -- [How to prevent PHP sessions being shared between different apache vhosts / different applications](http://www.dev-metal.com/prevent-php-sessions-shared-different-apache-vhosts-different-applications/) - -### Side-facts - -1. Weird! When I renamed php-login to HUGE (to get rid off the too generic project name and to make it fitting nicely - to MINI, TINY and MINI2, my other projects) I had a research if the word "huge" is already used in the php world for - sure. Nothing came up. Then, weeks later, I stumbled upon this: https://github.com/ffremont/HugeRest - I nice little framework in PHP, but it has only 1 star on Github, so it's obviously not so widely used. Looks very - professional, too. Hmm.... The guy behind published the entire readme etc. in pure french (!), so it's hard to use - for non-french-speaking people. However, I'm not related to him in any way, this is pure coincidence. diff --git a/code/web/backend/_one-click-installation/Vagrantfile b/code/web/backend/_one-click-installation/Vagrantfile deleted file mode 100644 index 0477872..0000000 --- a/code/web/backend/_one-click-installation/Vagrantfile +++ /dev/null @@ -1,22 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! -VAGRANTFILE_API_VERSION = "2" - -Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| - - # Every Vagrant virtual environment requires a box to build off of. - config.vm.box = "ubuntu/trusty64" - - # Create a private network, which allows host-only access to the machine using a specific IP. - config.vm.network "private_network", ip: "192.168.33.111" - - # Share an additional folder to the guest VM. The first argument is the path on the host to the actual folder. - # The second argument is the path on the guest to mount the folder. - config.vm.synced_folder "./", "/var/www/html" - - # Define the bootstrap file: A (shell) script that runs after first setup of your box (= provisioning) - config.vm.provision :shell, path: "bootstrap.sh" - -end diff --git a/code/web/backend/_one-click-installation/bootstrap.sh b/code/web/backend/_one-click-installation/bootstrap.sh deleted file mode 100644 index f9b7533..0000000 --- a/code/web/backend/_one-click-installation/bootstrap.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env bash - -# Use single quotes instead of double quotes to make it work with special-character passwords -PASSWORD='12345678' -PROJECTFOLDER='myproject' - -# create project folder -sudo mkdir "/var/www/html/${PROJECTFOLDER}" - -sudo apt-get update -sudo apt-get -y upgrade - -sudo apt-get install -y apache2 -sudo apt-get install -y php5 - -sudo debconf-set-selections <<< "mysql-server mysql-server/root_password password $PASSWORD" -sudo debconf-set-selections <<< "mysql-server mysql-server/root_password_again password $PASSWORD" -sudo apt-get -y install mysql-server -sudo apt-get install php5-mysql - -sudo debconf-set-selections <<< "phpmyadmin phpmyadmin/dbconfig-install boolean true" -sudo debconf-set-selections <<< "phpmyadmin phpmyadmin/app-password-confirm password $PASSWORD" -sudo debconf-set-selections <<< "phpmyadmin phpmyadmin/mysql/admin-pass password $PASSWORD" -sudo debconf-set-selections <<< "phpmyadmin phpmyadmin/mysql/app-pass password $PASSWORD" -sudo debconf-set-selections <<< "phpmyadmin phpmyadmin/reconfigure-webserver multiselect apache2" -sudo apt-get -y install phpmyadmin - -# setup hosts file -VHOST=$(cat < - DocumentRoot "/var/www/html/${PROJECTFOLDER}/public" - - AllowOverride All - Require all granted - - -EOF -) -echo "${VHOST}" > /etc/apache2/sites-available/000-default.conf - -# enable mod_rewrite -sudo a2enmod rewrite - -# restart apache -service apache2 restart - -# install curl (needed to use git afaik) -sudo apt-get -y install curl -sudo apt-get -y install php5-curl - -# install openssl (needed to clone from GitHub, as github is https only) -sudo apt-get -y install openssl - -# install PHP GD, the graphic lib (we create captchas and avatars) -sudo apt-get -y install php5-gd - -# install git -sudo apt-get -y install git - -# git clone HUGE -sudo git clone https://github.com/panique/huge "/var/www/html/${PROJECTFOLDER}" - -# install Composer -curl -s https://getcomposer.org/installer | php -mv composer.phar /usr/local/bin/composer - -# go to project folder, load Composer packages -cd "/var/www/html/${PROJECTFOLDER}" -composer install --dev - -# run SQL statements from install folder -sudo mysql -h "localhost" -u "root" "-p${PASSWORD}" < "/var/www/html/${PROJECTFOLDER}/application/_installation/01-create-database.sql" -sudo mysql -h "localhost" -u "root" "-p${PASSWORD}" < "/var/www/html/${PROJECTFOLDER}/application/_installation/02-create-table-users.sql" -sudo mysql -h "localhost" -u "root" "-p${PASSWORD}" < "/var/www/html/${PROJECTFOLDER}/application/_installation/03-create-table-notes.sql" - -# writing rights to avatar folder -sudo chmod 0777 -R "/var/www/html/${PROJECTFOLDER}/public/avatars" - -# remove Apache's default demo file -sudo rm "/var/www/html/index.html" - -# final feedback -echo "Voila!" diff --git a/code/web/backend/_pictures/huge-logo.png b/code/web/backend/_pictures/huge-logo.png deleted file mode 100644 index 2cebaad8783af3feb17368a72338de6543ae554a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59181 zcmbTe1yq$?yEZCFH%RBAL%O?Lq@<-;bazUpNJ>jLA|TS;0s=}SDcy~PQfH#?`<=b_ z*#CdVI1UH0)>HGD^N#Df?t2=gsw{_&LX7h0(Ia#Pd1>`Wk6_0iJ%Z^*f(73^=WV(M z{}8#!=(xRbv~cq@aWQ`+0d+JrhbY*aSemPwn?Svt2hD{aJ$meHt)b(l^IS>L%+a3J zi62%i8e2M@OZ2M05RlbwT$jf0(yQ-FnoLy((Kkb@WU&mSuA zG#99apt`i|KhFZ6M5wIX+?)j2*gQQwSv|Q}9bGKhI0OU)*w{JQI5}Cs87!{e4sIr1 zEDo;J|K35`+||s*+R4q@(E;*sM-x*=cQ+9#Fw(!TVDI$&`G0Qg;QG%*fhlA2GI3(# zU}a~sw|{uAKWDqTshj`5!}wp%cGd89GG|jacXf1kF$3#iLH+N=VDA3!4|+Hej7Ct! z#TqP%iJi2gnY+EYgPVf12o*TO3blp`^6>F-3YhYkvv8R5v9oYIC(hD{=Lutc0HdgFE<|tAGd%EA1?=o47a4DjD#d77q`9pL8PQ04BFNXP)AQ! z#)lR9`@+)ZF4i9AP+1p8d&r+D7PS6f9?#FqE+AlLVZvf6z+uY5&c)5cV#)(GVd3NC zfST|NaC4anm{a|8J@o(Y)Ukme&4X?TVHbgu9t@I<2Hq1ejqqY|xaHi}PQtXBj&1XN6(R=KFSI&gid~a(+ zb_p_I{-|pl)W;gX;QRK-)wC+hT_1PWCE?u%MR#=?nd->=?~E5K!|@aRZHr=Cx^dR; zrCn%rld>s7yV6~kPKA$%PJZPykeM*x;;^IjfWHfV(hG2Ze*3s@Oc-uL7;cXE@I5=) z5XQqN6CIDgCw>Zf`1GH{%tC)Y{m;WGWPk3({_o-0uK#xRKZpN)l*vDb|9KSQ|2X`A z7|Fj^|8w}?NBw^c^nV}8{~YN5VI=vi*-oYY4 z&B*9}x4f#pw)V=eeg20YA@U0o_Tf$6{y)RgRjRG8Z$J4=^7idpso?4HvSq@)oa?eD$)Vp$*Br;|ot1*=`L&v>Fp({oFGrl*%rN z_93($u!?Dp6gl7S2TOdH?zgk#?b@AIBwx7JNK>gX;Hs&qsh9n{xP<-BrI8FwjR=S< zbU$pvALd}VVR(Ccpx;+i$h~#SChIMka>UyAu>vzQGpYmzN=iyGF^Zs@|9ZVs_*P0c zr(~9YOv}#}4HF$56O&qbNP|g%-(sGQUP_dr@5q?Fu@Q=B&%tTgI%A7Dguzey zf@uY^5L)Bc|97T;5KAG1jI4-fW>@Q2SXem8?p~sHEKs10`8c!W#_Sg}p@q?`9LO$D zzL`P+la;w4^!3jQ{W0~vNlsZ(XO^SB}UhldRV9U<@l`=eP5~VqM?Z=qBTb zpV_o14HXF+aw0uM^yXmsJ34%JvpRqOsyU zw{{;`^~zMo$7jdJObVQLFFaAeT_wDTSl&cD+;;Tqp%a!v_iW{ue`e5syQ@o>B&i|y z{NlW8Wep20Ev*O(3k2uAsVUv(eoXQ^uW>K6VsWeNw{%=wZ`anMjZ<0vhK2AGCz#mI zhdEt-uuUg#2VcxG+?dV|xWBIXT#gwZ5f(<;>g|~SsWdf)P3lzX+Uhteikn(<sbQwkg(Q*+z0v4xd`)^q@WEIz#(a|lxW(j!;`NEwULwk)0F$tED z7J^>LFwQ>Ag6`ZP?%~9#-rscMI$-sgIMb+vs>(ONMkE7Iy6?eF#d;JmkY z8;&w)d1#|Zz03^?y&6a;sHOdEkAxQD&7RmSxQR56DYuM~8Ei{jfe-H7h}OR%`Vh7s z2FsFPTgXjMPmjCA@S&-?ylBHt-$ltz|AP{fvi#@>MPPjBCA+Sf%*W0Z}yGdX(m%5-#n z@07TFZYQ;0k(od_XRodXs?8!Qw9XDTv6X^Nz~uVhDkA;Y6(fr6dDYd*H_eGwqZ9A+ zgnihw>%haa)>B+fLqnTk{k5j87Eg|~gT12+`{5DA$N7@SFzNFLT^;a5eWo1anSz=| zI%ysD^G_ld8=~a=JE|%jD8MVA7Dq}#zuVRDkM7aOd|oMIjFzW4zrIc0NOmG!eH`mi z>wy#+{Q3(De3gyKpD?)a5W_C~TDSD~nhw4>2KWuF!H2<LXI6sg*&C6LJOuqD6|rmh>Ks!>MnLTMm>E^Im>%Vbk_w)|`Ir&iTLh^ksfai-!Jm~s zj;`xTC8pRPJ-mrqU56?TGBDjgKJmwLiD8}xA?V^B&6pF0W8Lp+cdTj|r}att`L&K% z>}_u&Ir_04?(965N2<_k>N0k_z`#K1!^zRcMMHoKUYi8J6PeJOkq&RE`;n3&;XYhiBK=(KXsuw*0ZD_f?%YRis= zixS!u?`ZKEnw^gBHzh=^Uiw7FG-&EW1ZRSLs8;kCG~?@+;lTkVSHXjF?W$jQmmN7N zDfnmz-l1V8_ypbMN)SuJP2Tl^1nQiCJMZVuVa z3zKy2JktGWu%o?*3>zdYXF?DmOu*bHAR~4+sG{{j&-ulOgPoP%d9rqMgwHxH$6Vkj z*ZPIgucJgAD$Fq0geBrA>5P~0Z?Oo(xcQ66ta$D9jyzhvWs9`9?@gnV@E)rKo8V)& zE@heE6CpLYySvB4#Ps!r;V9IOv6J9l(iWS`_S315$TB|XH#V}*L+O>b^V3(h_!__C z*Z<4a$nQkPN7+ZuW$yVWZ+)>?CRH^XEe~b$ba$wgsnreBH2lrsuOBNJRC+?}3w-uS zrBfW>5^qn>s-6{j1%-z!5sgX?HA#~RS7jh2BuvZ9%*@JiZ_*d-u$;E28P-`~)n;Gr z_$&z#TBkI3HjR~iKdQ3RW>}@l_-0&o$JC8)VYzFii@GG1JKM(1cYy~ldGO2kvFz&E zS=#`z%F(0C5yF`1rUS*0nwsgsL1!o%6O+$s6g?*==N0`wfJ(QpxL8(3=KTD8_TWO5 z0fLW8W2(@(b#~pRjWWLyfQsyO15@>5&t1rXwS3CQdEM01&s0HeFlG^f8W)93zz2GH zxH$3II$5zuW1s|mLbi<(3r)Wu3wE~^8E(Zwe)-Z%->?cZ=6L)W+oJ0?5#fdqU;sB_ zDJJ;yHNiTq&TF5yasosJ1ZH>KeA<=>4V3&P9PI3V;<*gKC+Y-Aw?Rt#=|7j(?GBbP zCSf7LS^VUJQCSXmYzu=`+t*(Sdc-8@UW%*9hD!=^913ekhtLB;e?r@7&W~|9hJ?CA z-p@XKfcfpfI8Em2UW;n>lX7m(;r(ZB zh>9H==2x8H+V#b$QU__r-<=}D^yNFnc^zFKM&#@PXq<1j?#3QmG@y;E$&2{L_xBFic=0hkyUR~BySC1Kw z1~jQ9#zU5y?D*r{+=mA-Is!~31A4S43&e2&q%U(d^)E7N7=2ZQ1Bi?~DvDyZ&+dxv zVUr3|^8A5EvSJ@K^Iy*PvUh!bz2)ezUWbm{d%bIScdmA_m0FHid75u{j$VY^QAb$6 zJTMS9_YkpVQBX*zKx1jZyp{p0&%caZdWOpr%37h%I$`x?eM+a`*DBwEkA$NF*1So9Ws2r zPO>7GknP#^ElOB06D=}TQY2LI`6$V;Z)TpipaKInT?t*km1!?k0xK_GB~PY98fk|y zJF&`?r53OGK36-t>id0ZG%=k%bknt$2w>pgVJt-1dG6EI zY9Nd?X}0!a@?>l+gh1HCvXRTgp-`4dGc{SWT*IYdUX+95s*m9LP>M*c->;Yivc*Ly z1}qeMYHIDgQNgV2Xo8kkq7gbbKWw+5iZXf*K|Rnc;-h;#<#dQ3hoCaHV_F)gkDP@8 zevB3#io&v;iwg>X3^ybocOxCmclinFw|ZfJYiCM+{ciOg<=a6QS6BDuwEB9Fkgm*3 z+^h^zmKO}q@z0i*musEpj!xKs7$7eVn=@ll*SvU`l$6BsvR=Mub$Gb@{=DN(&f0o# zdAW00ylRY_jO>ZFfdTDp`Ak&f!Xc*Uch}uXg#=X{4ULNs3gOF9DU$xr#W*O!;6maoL3h_+4XM|6TKXk`J|{4LX+j}e0^ucjVOMGYGZ#? z+}~7i?Ide-vx%5FaQkkb7eBCZ3M}eoonA~q<(re>!BZ{fkpX!!5)y&M@3-Qti>DicT{dI>(-l)QWX3)z2(R!kIV<>fIW=2IhqfkA)$3nMM zpgW5T#;Eh@@fS{LSD@p1x2pC`pd`_40Y%%@atP+YhD-Z(0QSw6jjgSa)3P`~xqg1a zd`Lj_Xe#eoOEs)=w6bDgWu3O-UV!{K7W=4^nVS0U?ThX6vSPHaV?hcngUo2J;kt%O zW^8z#r7%ZFKjVAXe|A=*U8yf3$mw^o8m~m>XlFNGL?e2=Kk*y+m9M4cbN4!}^4rhh zE6CSVGltPouYGO88!uPQ;m(%sZ*4B*uedg=^H~qe|x0+#+ zc>^XHJStb~uh(}oe6xKIcYKcw`sUsBsqv#X+Af!#J$u%2x#Zi#^8nka2flpi{vrKt zB;3+AUFkFW>4> z76Ac0PE>eA1P?L#)3}aGjy}pDF@_5v`O4nB*JWf(Z)%z$*^$Z{E$fL0xR21r z!FgLRa&!E>S7$Gs>q*axo+rOEc*@7s)$h)dwN-K)wBBp*M!1`r!ZuHAUC#}8d45g{^b$+UnoVP%IS$XLmQR^h6FSEx_Z#&T z`k%%*w*S7qKT6IM<$?=UVn&lMY>$U*U(fOCV?;E`yfpWKBg>SL?;1|6!)P#pd2y-%y-7t-J(Vn(?8Gr^YiqxL{Sxl^NrHtImdQGk?n>a{e^cMjpP8z^ zPw<|VIGmndR`P4rAV!#erCPZGdEC$jPH4Y0+zK+4Yt?IXxKLO%XKQ~3!*SnwdYP=& zi@Q3X0+VIG%iGHz+AnH2>F9WAX|3;CHr1Bb*OU4(zr23?1T2fNz|JVa zG%oV>f!w1MdZ9O%~m*OI4KT|J1=r{!~N&zB5#P1lo0)2)wn}bUP=}}S!iu2Wp zqf5DL*AH6dw79|Oh4NJRySQp6Ovw;MlN#@S){I1{YQUSTH;qTSoE#B*7Cwk#lG`^K zLWo4K-Hrgy7UP^I$sx?Cc`sY8u7Fl^`#8iW`qKLJS)GXMqn(FsvGKJFKIy7Jr~ zVwW=#H27h`dAZ+Gvv6>q(r)S+*eDh&6R@Ps`}GNO2;@(sJ!ZY{QvgW~?{#RGI2J6W z5!IVG{GUE>T(JV?A*Ux%r)=Jr`;v)I-kzPg+(r?%ObARmO+(quiwQ)}hM!;fY8D2&pkO*CpHPuZAXt0)HA zI>mb;oBf?nr<{I!7}NUxHSFlVwI^?nS}*-?S01}sLLO}{$&yHRwqH~jTeDN+8UiMr zLqSF+BFt%5Gk3c}Fwj@j?+om7v{Uz`O3aMUWvFCt|SYE z7O6*tY!hY~JB&p*&7PWTPEGangahGejGvQpT;++tov9iPZZ5rBGhvx@a3>vpl&M)k zA5OJKK3B%@g>KLICv*9U*~PM{LUVJx-#43qVu5mmG_om;SNt`zuh zk&)9C6gYHsqwFgxEWg!uV>k8;z1MYp&?YvEpHNW5S@nKd^NE^%pQ@ddJ$L^rsY^#s zum07w8AiljMZ?nW-d>_&(ah3To;uT+%bB0(eUiU=c}%t50aYI4DO(@KF+MJH#ryY? z#5H}UoU=8b)PMVo1O@U7>e<%mBqqLyuP!g&n=_YVC;a)#kB2Auo9Oiiy^8(4y~U1u zae1s@YNv>!9ZhaTI7BF7142#Y@Wm=a?;7 z4Vlw>NqD?bQ5xV$^qpCFX{e`bSv4`g=p7cOdtzO@lRh15SXeeNVxU#$_MLlaZa!}u zC1pzE3trb+NvyBMtu_uH>aGlDkzyIXO}?fe(5%BG6O`z#yDiz{OAIA}+gW?Kytid#}FkJ}guCm-J1G(mK0 zuqL5m?5{={#7>9=7ji{Vs0hDOoeWeTMBX1p)rIOT6S8~x`DO)$>N_>xM1|=2nsU~@ zWQ6o<{SisOtX)Wwg~wX!auN~|)#z2YG?7|vnu^^ahZzQS?qkB~vzEa;Fj%!`j!&bsQf(#F6@tI<@GALWFSQ0ys>Hskt_U8Vhs5j#kX3W1%~mo4cR z=+N$=e~Vm@?}k&&e3Qk?7{V0H!J+1ix-^VY*4q%rgXr2XihBa9XHjj;ng03nXB}@p zGoS0d>pvo@i&OU~&2M z!k3>+dWyfyLF;@R@~WhR-B?&yfMld=VX+h!a9YqE?AI=#-M`}W^YZfSJ4z2IboRU= zj}Bp|_?;JVIJ49KLS0?5+&*etwKTtRS*q-6KPZGMXLb|krHE?)@j_m_JRMtw{GgJ% zQmjf{J^YP>npzpBh{zl(qquBEhojx_+~|fgY8EZ+YEo@s0SczIC ztRggoqUH=l-h=Na8h%L*{*EYzX5QXSvv#qo8%#5!-(W_%Zb|>tt~aW!I$d2%O~;FD zr6BM)`DRB3HU6K@T0i};LW^2}HECC(LXL`A4GpBXu$tVcwLXm==QMLcb(wgrwN6XB z30X@rDJ^jpPvsXiCCaRR(-J}zB*tsNtQb#x(=FaHlY@godv#O!K?66I34aoG2S|NV zH6mAs`UbAYU{*k(RmYo|bGyP(yE!8>i7HmniVq$hCFmtp0!^PZ{446U36C~N6?Cxp ze9GLs&za-ICPtAiRZT!4s;m#bE>?G|w$JU(?=n4QItWz?XUk0^qnj?VnV$Ix`HxT@ z9rd??-BlWFYzb|G-1XfVArHFN2jN4k8-Fp=`Ky7nSqq9M&+u@fzHJFPdhXHVIK|hI6 zqkL+VYhn3=Kw8W1UlAoqoYA=1CO!qgCA{x%FI93x4^F)D-I~*PtjlLx3-eF&B6zEe zJRRLMe!3@H)ak~N3*Ge*Tnh@#6}UHlZ{&YB%bYp{*wnAyCn``23zrZ8p${#*Qq?W0 zLE-v%d)PPaj%T?{iUHTd-5rF>A!E*DZ4HL?)4*>HCOzQY8Eum1=qJ^u!;ig6>84&|`&SNwLDOcCClePZq>)#M0 z8pR@iQ`7!}IMK7)qxvHGI<>4FluUYKYI+!lJmk`s91HnR?lzO`S3knhH>b*5bri+o1^Ivv%YpB=54a z!diPQH6|B4OnBd+!*;KoEOUv77?ez~V1+S!S#fJ`@okV~O_eVym1o9xwnE$j6`cgLq@<+$J17q566EV0=P$ZZ*_O-uOeNkj;i{s#NOyhx`n9>a zd1+~BXUBRQVLhL${HKpdtqdrSM@K(pW^O%dzfNJ+&Bt&=+Vp6V%EMYmLctA{yuLUh zh?ZteMV+D)+9A{rTUeRz`fEkeXrUr-0t|5r3;I4-mX(t1g!{X@!S!hw8NrF-(Gn;c z+S*lyHJhNW`uzEGdC1$rTy|44Gjs$n%AUSx0_r_S1@+}ewBic!;oEzALIHO-?={PD zo;sUSr zSHhQueiOSVrRs5LkgAmshgw>el#~EbK#E)3Nt|Pp#FSEEv!06}nidE7pqis$d1FWd zKSMo)8%&t`W21!dC8y}O{DDroZ9Y7QsG+EZ2+#S)s3<5`vH%A@khpwp za^X1_7H(eNyG_0h30DbpxE`-I!<=u3VG?b`Sm;;RkYvRjrFBR6L>akn74PfxDmc^k zJMNQ0pFmI*J2~2}vcKlS(V%v0X~DgE?0j~XbMM#p8qW{);e{xL2f7#3j)miFyEa^! z79H9QkK6?DP~hD)#66aA+GVvG-fJ-F9SI5xzk$}%)GpbzNZg1x zxqce2-;Y>u#cp*Fhw~uXVmvf}FpGL+_Z#(E)R2k#UG-p!Nq0U|QYsWEjEA2z!`_(+ zbSQuSK3F!LO|`RIjLIa}Y~97%*_k5=PVrrKc6LtSm%^xWgpd`0lO(4|_#B|KzyO-& zmm4VAJuPzNe0+W{FGE(JHheCE+<>+g4J|E6262kvuU}<-=-Mv;Oji$2P%IjC0s;k_ z%h=D@Q1&DQdS_(h_&4KhUL%TyIvSz7s*LYtSr21P{~ETCoHrB-75Dyr;NcJhU#jtb zZf-6kgE&uBen@@Ok>tH9LoVg(=;%ChEL>+g9v(bBN?u-Gdisdp^oiX_-Hr);3i^_; zG(AL630bHdB?FT>vwKmlAZe}*;Ug{`*MAn0Oj2K;G^xL{^Us#CD z4~#49yUbkwx8!l!|ICJ#cbt*x<~K!P)@N=*u-N3+Jw?4_j<=cJLvhe~_k z2Ip@MVf=lOaF`DQ>gwu$3=}BpO+Cqo*&ng7y|epav94vP)FdTgle&NdI3wi4d25A_7~k`JtbeSlkdNJNxlr%h7nd2?qzqJ6`)> zx9=SRV!@^$34Yt^p#`(a*6u8rRZBO$;Ue);n)|grYl#Vg&n!wWocd~&qP2CI29t>A zVWwV%|8WxS1>gAh}M^@mBUl>TI$Azk?PmoNTOQcRkKXZbbL`|j74uIn*o+&?K;9Yn)CmQcx+3?AEDLMtit%%C^9S%#n~A&<+6j-K9f z<4ba$>Hw5eZExi3*KwwWi4v6@u>f-2T*>&N#zrq=<3JQZ^>lT0A#4Tu#mA-(ggyfsc=GQ#W^J;uKiLuTXB1 zfEJYiPqYK?!hiy#et?Ol7!C-lmrwJ%5~q|x@zJ= z_rAONb$IAdrXeUQx->f*wJBp=OUVdK#xr?y`{+pSB@j&h5)Cs-!K}*G)*FBwz77m9 zFfo17s~9CJ*Q)5I@0IrTZJ9q{Wn>J3Q!AfBJ+&}5pFQwE!q`rfBliyd#LdmE!;B9F zOHTws#!BgGm|ij5;`i@&Px>k3KKphL4-bQE2wD?!zqiPZJBxvd2H?b2og69C z(=`WiL7OSrrmnfXJX%%-ONde;F)|mLVrBAM4+kO$)lof`@Y%uG!ssS=j+DB!7xP^u~`fr|I1lJ?7S!`|<=b_~w2=W6#-%5mLzQvPm5&`ZDh-X0g zR~^_Kd54bh7=`WW(}Jkdhc$iZ7j?aM50}hqajo5$EPIiam30p)cKWKSfo3(cXicf1tKV)eE-oG(yr0%|%BMts zZx_6J_3HkV?LOG_$aq#FgPMiq;Beu0)Gv#DEsDlKbhm_2{s;OIEB;|A(l4^gucn44LDtVBUlN(vM1>!2VQV%KUN=E!!9 z$*U`VP@^nejXnCa)B)K3k6C({*IE6v4|;ohhuAt6#>Zh(DXD|IAfd2#{75}Xsi|9A zTb}Ojpd18TE~HC*4aqHcX0HvjBOpp1HMwp{nlQA;(*!G3&)PjpWxbvK<{#ea2f_jQ z%Rdc6XXsrucLM_h21UX?K0bHnM)!3sEiWsyKuq{Ol&fC0J#}&QTJBfCRYX8%k0;{_FP=9PEMmXbxY`Xl1~|MUl$hA_;Um6tdLM_2`r;in^_a>{{O}WwS>z6?$tTJU9R7n_^m}`&J&SHOJ zf9bU2H3Iz=z^@(Ke_1#>IyyM8+7oP^`=m1KesbGU*INtu1}wV0z5VM~Wzb%c5)~UO z+gPW=tX%SC-zZ+*=&FfdqRH?8K!LgFXIAeB-n zo!Wi#22IZq77vyv2+pI0j59cK(&eq zQFS#(Mi7iW%t%6J<^t%QteJ&~rmz|)zM|x&m%^3BB2Set^}!<@p~Q>m(oP+cVa%h^ zV8T0?T=ol|`Wh!t`} zy(C16A>q}B0-8K(=MM_$oya*QnUZ~kv*nSoo<8J-U}Z&`#GgOi3c25nBye+kNbSNI zJ@f#uCdHk7lqjD9A%08=J2Ob3P!9mVKeECh>4uuFE;8-d)Ku6p*r39}&Mv-Ztl(kA zO`P+MK6Pl(fv)wlmwq@YEGhz?KsmJXg@&;)XStP zM@a`Fxfn8`h&bElzk$bZgmwKIA6F;*49M6+L%Zu11Lgp{&eG`U=+Y7f56EzoNXziC zd6dg~4i1%LR-_>An}$ikgaw6wW}n^rz)hVRi|1g`zKR=;LQpYs&A`-VBqh1+PL`dV zIAKf>e zjS=1iDX^n$KBPu~KnXW7cFvICV6l_}?k@v!Qd9XjIZZj!O-)T@<>V-_YxP(P#l5`+ zSTe#)8Nd)&So*Z1`&Q3=3i9&--=yS}4;$4gbQ2ep%2S2Fysn$I`{_TIn21v_#?Q|$ zzvp6WYnxDc-wS4Lm?RjuQ00;y1rShO*=TT(p)li(iw+WAk6&a;$Y#_AtySH^BYUPSZn;shn*%PT5IjxGzh(yw6;75a0kqDqpb#?XO;o*xC<%b@6q37#w?D}AK z#7!j&#>DXfsVl?|{qarR&@dJ>DUdyR@}#i#gVs~~$iova&>4(qBJo?cd`i*@VkhSo z1rfeax|@T8g()2T@MeU57K&}m@%cO_5S02q#IQPd8zJT z8cFF-!2B}vtn(5?ajbCX#)PSata983;0d27M792$zK-ON#EpF){ra^ri!|n^f?c3| zY@_LYgB{9K1EqUHZvz(QnZ0wsaDv$)gme8<*o>4#Xu(=pjCF-Dqn&AElaNHG{jPXZ zFAmqJUkNx0fVU7(LYM;#WOdav60`SNogT~EK}AKySPC)!^#SYw>g~r+iSPaZge9OQ z+zqF5MOLYzo$(+tqHRB}ntA5RtVt!{G_r4*ujqneSCc>;Z@au!}$B(JvXo! zI{S-)7N$pShjWD;POLzy@cW92nCNH{BBCIOIJ>N|Y-hXI36&|mWV>QfFr384{u0@O zAa9@#gzk63ba#wc*g87)OF-qukQ9r6Y75xL-nq|v2GD4b1F%ghtAIqCJX#PZ2Zw|< zCB`V7yppf~@C-vKMg|>lQ6?rPki+@-E*F|yA4uNFsDeD$t%Xdv;U<`%{vxQE;P>_QiZW>7xc~TP8^%KWm&cS(s?YE*y>lyf*}3UfPrOJmKuFp?I5;>w z3?~gD4Bot2!3;ohhov?#lr~x3O`rx%@k7CVjKRmkXcAsk7{6b~W7-Gp0~B9d-47ds zLqdWYgQG^1EFx1I6&D?UGyr3B638iOva!D*Ur9)|K<;4HuBRt7f8KGl1@5PH4%qLM{jf1Xq=< zjmSZiTPfsy$640VhnEc)no^p;?Bj8|r$9jG4}J)Dxh__$OkWGAc5fQJxfHxb|6=t% z#NgZG<71Y?v(Ed~8q04N=jT(?(}uU`r}9mf-?C?n0?2S+C@FSgWY>Co;U+^2tK#+* z6vc%lRKyFUn>nz~oe?tVJ_!gWb=|yr20GAR_YvtmC4rHo5fC8qp#=hsb6ZmrQD1&M z#ocj496-TSeQ=YH#zE=@S$=`$K~FMqAOhMKJ71!sc{XA&$11I~I9N~IN5Kq}ff`Ij zo=q&k@aeH+M-hcQ_Pqd;&f^7QCWIeU?!ILS@dZd>B*+(njYi5_H(AS+WZN;$!N=+u z@Q*2oV-R#p=czfLK+fOgmLD+U&pusiV!Z9{K(8-&lDg{7sXzru1+ILUt_6pdLF zI~^C>U}S&$!;LJenJ_c9oQIMS-%A-QD<}l{SUEU^`*el~B_T31va#h>$d@mYl^`#u5_bHc*tzMHfL5Szc0ZCn z1lZk}9mzL7^|Nj~YM4|zn2lV)Oo^$dS|0)n134J{+V{nmPzhK^H_bpa|Jd>I3XOn_*P z-Vf1O+x`BXuov+QGYbnDF>!Er;Cpd_cry7Mz-D{h`~ijP2}dU)A}aN{{eAB3?JXlC z!yQBoix%E0?rv{yKXBehV3ZpQ`qad4rRC(-t}Lt`_(Iyt@GI?(-*^qMJqu1ribeXY z5xAg4(=UB5_PbzUxk54WMOS^?-OqzrSOJo-dZ#As8JT>0eMuqemuC1Y zT>q!CUd^l>J7F$8Bs=$+d@sO$T?Fgz%gTTl6U5o6N!s%qiD2>ps_WZZTX)gZL>pGg zQ8qO-UH%9Vn?&Bt-)IEvE*>{X{E>YySE+W9Itw9GVo;U$7~UG9|210#6*(9ucf}!h zKk`ilkPiPSUVSjxb0=6T?_8)J$<-s$T4nc-?460XA$>+#8RbJ-i7bc{K9vV#jb*s# z2^(l!u-0Vxv|Iz!FCg2TZH|CGW}pWtC@OY)TfwU{vHMzBAZUscLCj4}slFD#S>cwV z`{9K)U=^iK0~tb|XkEs%_Hih@eNrqlH#J^ZPj_%|Fd*oeg6=jTun(oOMF{4lev^@t zn_w+Zz`!JYXy?YG6BE0SW@{JsXhg12qqC=Sk>c*>iLK~V21t3nzPs>UTT<#D^?{{@^p?c~0Lt`UIKHzj+0d9Y)T>Jju#~lkS7py>N*p!V- z+u37*ARUZ(tZN{&V|P%J)!WS`W@h?rk5V!`mNrF#h0~scg;SRB7}ZD7fD@5;nWX&u zc^(xLDPpa?04rGK#BisUMed@<-Yfh}!B`R@s(8S1u!tClkO2~XE!(ocS;9cU3Q&>Q z?av9@naV!xTKiY8L<%w6B{>#gM__uupqE8MafxGi%_=HEyQLUIA1#aD#4gviBP0NI^Bf!sUc``)?# zc|TPvC%iKskb6jj@PqaP`E@=v2xh<jS7(u!@zREYa?a z{}P1NMSr?`{`>CE-vv=L|9o@+&>}`Z>9Zx!j?JgyI!da;jh%6M_DzhBIA$QMSe$yo zq6!e)cYKcF18et4Xs&I?3mD-|4q)@>am$a}Lm*Z}Hey6P9+M{t7eoMXDnbVXJ8&E9 zkb)>;U1cfLuhO=q;*GvExhE#ULd72N_3_zG{)sgB@rz9zXrI;6)C6Yq;urfS=wgzC zV_{+nHWlxc;q3L&!KmW^yjxThV}9L5pcjrCW_*-<3+djb&ZkS6JotD3<0s6)FwBVa z&Nz+g|i8|*=JBOKLHXFgyp{68B|;h>R_RxntFP#BOFO5q89;S1}Wn> zE!H?{IVm|gOeZ>xDOnM)FiEyxR@3jG8{)XtfA%s@pE@KYBr=0vyi|5zq1sH&-MtPF zuoVr6Vt4{u#|)1 z$%2omNL=)JVR}&vB-K;}7>H0Fhnqv8V540A_{xe&n<3^#P*fZTwyId)2_ z^UPJ%7#R-BVI!T(5;EiTbgbS=(93Pd7{BLlOU@erHVs-lB>W(vE9uuwTiNri-dv{i zRD4uVx}jiG$~rubPQ`R~Hu*ND^esT6KwDjYDmk~k&A_UrUs4^nR|kWAGNB?Svn-7z zGhk2w{8z3cubC)tQGHe~2<;5bDOF|q1dxJKC$i|KP(#VK{)O$Gy zag^CglcuLaVlW<;gx4-m8a1@53)nJd0t}bcDM~G_!&3*C`;xz5{2lx%_bNKPT4Xq= zSMyM)jok+<5{{;llz9W@J@gvodw2|WZF?9otG1Y>P!v{R?ZoEUA$%H(XO@90I z>s#p{Qoblsr`+E;|DBhYXLSF228^<=uWw^xBeH5_WCRE(Aacpz0dj^kj~@+xq2K5v zLHBkH8uo0<#qdk8H;MMqK_mCcjbZ+P?RqY|@ndc*J8`MJ9RS4*y;k6*PaX`wqUQ=! zzs5B&D}S7V)n0wNZt z*!4b_G$#!qDQRKJE@;W7W?(HvRarqAERDtg@HOr*o&coXTK~{`grG-)&a2Y4wtMZb zuB{f}u$xOukvJpk5pUPussIDf{WZAB7cI8h-b~4j zbFr~u9vTTEz-dM#T3ZZ)6f%qW%LTA3E3yn`*z=D7BP>YNl6>hWlkjc7T8(yWJIB|< zYrqU674ksCK{T9b`|Pdr>}ah>p;!C945|C6BPEIn-bhMVbMwy%-#;~%Lli42%Ip&C zHz$zjeh2A{^SzlLzDI3d9}Tg1sKsH#Ga#^(P%6}J%x;`M8R6bFG!{$=tHOq2$}~!H z>NHB)eB2S?B68Hiepf#^IYd^<+hCcz$j0l-BS&j%-3Et6P`qvJd=nfD%YX-`p&^%m zR@8+vDSwnNWh~qF5L0V?0aGk5FNa?-P^5fwEFK5dw!zm6g*`LI#8CCu(7AFAco9w#T<21-cclIL zu*a3R`vCLA5t)C(QO;?;Pn2niP8o!rII?FQK8zF8HDHH%PEPPZtd8*d7 z+l%>tyR#f@qa6`CRB;^{ZW*kiuL!%ac_mJS;iJ)rm($bJ4{rUS{+gLllmA%3V5QWN z9PJ#DSF8P)vQ!%k$AG113UX3p5>mP<0@6d>=Rp8koPL^;D zROF9OyeUOTeVp(Q95xZ|piEm!jHs$WbJ zCH_THHvV$1ct*an^}EhTNU1;WE*fMDPCyu!G8`vuG-pSPK?_6te~9|ZsI1m@UFmM5 zI}~YF(~96i`Z#P%tP7=}@FW>6DZPrD5MMYoC4AuWyXCKEXMk=Z>r9 z0n9JxjMc8InpIl&?%_qNh{Se?v~bBQ+VH95fO)S9MNK9cZf*}9rLmlAem%$gwr~Xm z7h(u*2h8{P&f*q?M+OIPU@(@^dCdm{s-4~B&(%I1v735-r2^&qjgJSfJZD?m`P#6U zD3PgCk>o_A_L5>EpZ5?+V1N|dc#<{YILs&szlw%*ok-#}cn5n@Vf5*EF+M&H15TJ# z)<@aTBsL^CsnKRayu2U4*0**?&F4^a_F9ug9dKNn(A(k=F! zda<83v$#5NOSZ^HQa_wJxIT&K`+P?8Ictn!m=X?y8P6I|eo114qK-E4C*I_86+bCl zLkcy_e;`tN!Jk+AZSX!R<{dTyT?`_b_jnl2SOsrCe@+pLx7n%AF!8~vy@>%c?guhM z)HEifzNAjpo(A;>*TD!7&7J(IY{tKfx?rr46y8A+pVj(ABq}}l=WqM&>&tLERAu*U z?uw2PFL4Jm2UByAmsHSp=oXiUB4NQYE>5x0;DK;k7f?Q1v1o*8j3R8l4h{}#YS@y( zg{Wa{q$&@X@+e?cMP7iGkcR@iC`s5j6sM&xftR5?`-=wj6Sjh!e+LT5qR=~Z!>V9b z*qUq3Etm{>nPx@zdVOkga<{s%(GR3nPOusbue%L1nfNI^HB37DzzfQQQ@K3RJRzy` zUHMV`J|uIbDF%PdT&X5Fi)^_1Q`6IN=wY9NR}kKtBsvof4QQn&eXY<(%0xu{b^;}KUGYLM9Jxu+vlSveIWEW}?gjc1^ zj^?hgSE!sQM=7J#@?caQCu*gfX1WjhaDBZP@nc>J;bgL%yySc#1{|CAvv=>_HJ>#! zhdxO5=B-+cFr+X51qr?H=0|n%J-JGm(Sm%2C)&3Jd7|~~tcT@4(D;y|&;OF+!MD18 z{BMJs|03D}vQPritPPGUm641}9)mK$1!)%{MH0GJeR5wvmI9{@rjepop*cP#a>sm+ ziuCJ5+pZfH>~F9XP|6A~K9vlhtP*wQNx%00H}UD=09>U!`Dr;Yj6hcH9xc=;LPT_WMNmS7ZKx-E|hZ$`Joc^oPv z)^=ILB3!;;s{God8}-;vIUm<>^6)syYTb+pPYSu%=4FdS?_Hy7y`vv~b`0{f=hJn3 zFA&mbt-w=~0BLR9o{&^6$-ks-Vrpe_K;THAFk)jpbymmzxuxt2oey znR#9h5uMmzp-T#wKB>7iCO3oS(?lo4(3pIDgE!RUIL`r{|7O+=+pkAWJ1`SAo$vQL zZNa=N$__#RPkOI;q`H6KZs(5v`ZYrJ3s{+ZnwkY{`VCN>SR%B8e#lXDeUtS4m)A+> zvj#He$F&ZM3q3EAl7emlLr5Au^r%OLx&Vb@WMTp<8YR^BaD&~~Mf(@2`vHLDRHUI7 zRhHBps8qMv*~yV8f1xSH^ z_Snw+HwWbpqmRvWBr-4Bl1g0@@f(#MW|rbr-}}_Z zAc1^b^ITS=lQqmlAB~(L|Mc{9*C|oGvgzMsOG}IN<&rehl4Ic6)aK^q+uQ&MvSG@S z6P7rdcI_F5I%1}EmcawZ?#>-7CM;G?)2}pT2oV6Ry*BY>Wo6KLDUicg3YhN6$|60N zZ&Wr}<5D3>g%TB9{vpf(Z~ARI#s`}21M7T~$x>!)`PgXG1@D_|NEr;`+s#*(adB~I zU!0cAP!0(pB{-T~>E znG_wz`T2}~i_tkkNU@yh`TghRj;fjrG~5QCP+8~KDfe#1n0t9;dd#BoQt;hG7Z4O2 zdZ%iWmz)e7Dosx;?AUZ-ZfkIYy+OAJ@IW%%z@b1g8o_B)9UBQo)Ys$y+BE{yV?cWX z4~LXteTnMs+0ULkUxCgn9~?C(qC~PlQPIk5_2y`VCq1o{XVfIrGb?-_HzUzcK=0FrH)KukE#bf2IsvoFgH_Wk+ zaD(kGf1@bmfd*n_<*9%*>1p z9`xc?S843P^`Z>3-+`B_fiM<2OjfM}Jpn-Fm#fROZ+`$}4|6S{q)ALj(1bF8E$hXL z84R+RD(IV_DgvHMB$|^Aq5SPqC3Royz#@%JK`4}(ug;p8JBEuHc;{z4=Q^3CAQMJF zBxDl^5YYC7?5NzB(w=!})qVb0BP-O$Cy5phv)h?|s0>F*esD8Mik!#f%{qD2XZH6T zt$hW3sytirhP?NF-?zE@p#I4&+rCG3d7}qL^++*;6PdIQTR+<8D2kQ-Pz-}iaeCBD z0;%I0NO7;DnU`n}@}py3^F}E_l`^h%ply5KY8FJQ|Iq^N_3PExpp%9m<&~%0B6&;W z>_}`$PC|N{BL^3q97-8VE+g*x1-epb-tB@YuS~yuXI~F zIO>P~82|xV#X_-<)>iW74XR)p@pv4+yBMun=BrnVT%*TqH1_UA`D7cKnU$ib3q;&i zw`n3H!8bywYfY_{Pf&C5*_y#|oF*C4+~9YHj;R^HN~^$COg z0(UiI4HV;f^e0ydsRb?o;$S$TIY z`opiWv7#ZH-Hyh*-i1%yqdJL%DkwB=#LjNL>0FpGj?EWB*b0P2l5$M61XaDaHRbFW zBu40d-`Lx!7aERe1z3_Tzqy&d6<4VJNr&Ux5!Hdi!{>Nh$n-m3R_RLca;BSnk9K!? z1-d_4cK@s}R_C#lZ;4Q9<&$U|Yi*Uq#GJIp#cxBKe0CFql*bwCVQo!~+&e(S7@0qL zy1BK8)95{XnD10|qbx$XgsKmR>(jGe+*R_5ih%gC9++(m6)F$ph@u=Zra1{pA630h` z?YVZK2one0ecNqhd#-RT!zGzeX1(>TmOWr6LTIG+;vQ>jYa1KCdhr7JPN@2^LY%UV z!lAvRVok*u50ugNSXmI9@6^#w(wM zhljJJJhfqBZIhT>fVq{{f;UES3lTs9YN0ZD+p49v42|y8ZUkzDO^?<)7_nJSNmr0A=L#8EBm?YZ8Cyb}1yjOkbk zSsdQ~HVtfE6@aG!H&0=`+sT&v*Lg0d3uV97e)1>{iLg&&T<=)rx`8YQJvIMnm>sBYi_&$~ivn8?Yl5 zVrsdxo^o4@@lw{D;TM1yM-$e$vfa<8YT{p;j@b#ODnEKe7IF$s2@DJj+i%*DvgY(A~^j7zpDUd+8#ETqscG#t{(0tHaN^7x%oq zJE#sByexB1CftMP|e3+R)oOD_wkJ%McM>a}IN)i$#8?+n1JckciwTgqATYGVS~(61N_d>5L*yN9#&A)@rn*FG#c6*WKiv%N7X=2`#3-hg}E+ z`UjqNrg^4&%(9_*eYR$3tF}V86%MnFU!-vZ)JM}4pE;2o`V9u*K=uSeaBo4FvRe`( zedHDN`btBiRq&JJEfzUN#m;m65C&&pNM33r^n@wza>Vxsfy(vjqWOv-Owrw45Sh_l zFGePun6UnG#qlyisHICa>|hy(_`q)%0Od9TICq|7{(yMZ5VtTuwi?25Qrn7>uL zsbC@-9>yA`G(DTUTy~*|R|>UMAwj)dTqGX<472DOdYB|8T9`MgW=Yb)>cGghKIQ-+ zHq@JTy*2bq*~(~9=S9@7ZFh7%SAJ0b4nLd#o%q+`I;=?qH`>@p!}I{NG!94?o60>8Me4|B{Qr+#*r5wl5!`K0ZM%F7;B zKSf1QN(y{StvSq;ri>C(+?8LxQ}lzDKtb*xPSK;87DE?7HC? z?2cO|E|^OmvVvWKAn+K4sSmM5+E3LmQiN5sTv_fk7Je4nKCB#+#rzu*rj2xyg|H1% z0fGtVV=Na+L$*~@w%1mjxN|F>Wem=Y3Mu0ds!9nC z{J+D(*iQWa`KM=lnyT_J^n#VW+jrY{XZp)s*XFwecU`T&%J+EA`3nmR>uI)NV`JxW z(`U4QPq{6=UM(*T?Mc%slejBE(796jJ4%0f0_ciV&@30Z5x7b17!J317wvEvI~ zX-|_A8Z+cLa-@EVz$n(r?Z;V;JABy~@aHvEh%Am^@eOOn2zabOstB}UG!N_(NpN;Lv=tXxXFEArCw2x`24hQ zm|Xb#gIwLizcDQ@U%uS7=rpUlwO1Yceiyy{VI(k{jr-p@N|4-H&EMU5P<%c!cVX=1 zC2}Z3Ps$#mIc<&K_Wj9|CvGz9%f357ZK{~$@$xb*{UR}Lp*1$nrf5sER}nFFXzasb z#8}8&azhT*E@ow_DEkk;w`S0Xkx$(*cM7z(f8SV;FQhF*H5-&DT3IQ?qUA7uhmE*J zweO>%c@LVkudnzjqb4d%=`za`^{=q^ROjO^YgAc99z+pPWT^XRcjtXXvfhkTQMpmc z!@{CqTZsEDLG6Bp?s8yy5=){Vk%@^yL-)Hd+nSiqap9H|H~8{ueOxh^c02a>U5JBX z6nVr}tJi7K6z@Ommp+>q&=z%(?>2t3^|71o@mIeu5A{R8;fF4;qwDTPN}n(M{bfq- z98*Idc)kY!=XgVdR_H=G%6F`6zmw$*)@+u^58p88yjoT~C@SnT{i!S5N$7cl@GCyc zMkGF~i9F*zKyQB%d{$r@U)iJm-U|1YIBrBaHS7fY(G`^l{Ypu-aLlXMTR?;nON;`C?{M zP}ARLxw*M*&NO7$wRx9m+1S`vSQOl>Y*m6ceSjEfUg!Sfc*|U8_3Z^5AQ1px!NsVl z=(#!WJgWj)vrFjh7vN{}UVY^WkNuu2MTLG(8qKYke2WSSuHtgqv&PVvyjNExRJw#^ zSZRvlH?;jr6m(fROhV!BguB{0@!1+Cd{Ffhk&qPLjy`MPQTD-M9q8m2;MGikiJLT##J^$z}i7d!OT>X zE)qNPSg@MxSW@6a_Fh142x!INy(zG|%vtuB@lKfY9>&4Jf@fJ$!e+0mx#|egWso4| zLV~FDqm3hbanH10vk&g+G5dOf|NXVIB{Qj4aeVZOqSV-CYhoF%JWw&7aLpH)$Tv zqD*cdCLW$j(7AAOzJtFkV4nQ^E_;ieIAolI#k{&mxUV;ypq-bYySxGLNR^h5@B;)m zcVMUW_-8YQwpvBD4szJs2YJ`M5hHzll{59`-HvFI!xI~G@csaaVVi;V2#hoYj)3_Z z#+JPLhAH89>~tC;+5bE5#NpYql!p5p*6qv4lgPeGTA)^JY`A0hXk;*7o`|NXs0fe) zsfsNu&`QEl$n{!`9vsvzyK&PT-b@KzK>@be35C!~yi#IfqA-qd<|Z!%cZGNf${`4Z zFzmU@LLLdSvOa+vq@1_k0wACPBxB5)1$Sv26YUCpM`@_eZS3vS{_t{G!OusYGuqinqmYPb>fO9urrO zziQbBtf{iHvQX_M8==+M#2%z^4~nU~9_Ji%IZuYuS-SpWswwMqqI70lxvlQu_rvUW zrkJqBzbFE39ikF^UF6|uoRJJCwDiGSmtDZsnqk1K zs%hF{?d1{}**FM~i0Fc2bQV~Z$O)(J$AEt$-ckqDT!N7;d|bNErXMXjA3HWF;=RE2TZEbCR)ELnlzPszxO^Vbd>b-A;JJ#;zJIawMSslbKqc|U=mcMM+p(HWP zjoy9}Cwt1gu7C)Hxum3T)?MTya7EqL2AeOYnjb!TitpT54+d8ytC!$l@sP-s0xo29fQHe&8hMK3i+~`!_|d{{vd>Aus?^APmp& zAVAReN}5mh7B||j?{E$V5fKqg1BR+9C~$i29f*yh?FftA-S;!fj(diA`VPm4O2B6D zTgvTZeniVaRzOiIDeWs+n4C29+~IG!r|E+6a2}pHrt{)Z)t?U^c-e6tcE$X1Vr@qh zb+>7kUM?+(Jt*d>Mq$RIU$aotuUM;BXa=Kylb_sw`0&Y-XLUxP4eZ3E4NYActe=Rj zcB0St!^@627WUl&{$-naA#DT)ZF?j^^Ph?aI9kBRLjRlm`BUlFho+{B#>YLUCnw=y zVKi_VAk(i~Fh2G1{Ra=$@m(73-4QhE$Da#A0#zD#MF84?JxA8B=QRp4@`owtc?a9y zLL{ND@=HkM%t49h10t|B1Z{=>huNogvo(ytOm4%fwFqhlh~az_YyvYB1m?J&9@^GN z%s#W6E;MLafIs}xD50#WDqa$9&Zky`+ z+}^g>_MPol+dlISh)Rr1zu2ms4CF);`z?Gz8Q$WOP#jt{j}C}VsmhP>i7gYRah5%`1Pz4iYQOtYvx|=7LhsW0 z+uUuQiD1zGNgvOnpkl1BXHdh`0@uD0{`p;4>|;Y*W!)}mL%0zZ!|T2O8{V$r=j&td z#|p+{!{z{gs2l0D9*zl-__S2S#BvYlC@D{1ow@f)EbZq@I+pK+0Ayi(@;-Pfmh@Kh zRZUx?mCf_#e%oJGxgR;X{i0us&M*x)0g6y+afym89gdXXvqzR~U>Q{+VYV5hab5W# zt7X|<*|@Lv@ZnA3mu7TRohLcjerk$&V&j^hBg%39aSb{NE&%5j!Wau}(WP`!P zEF$7HSp^;>+njtNgcC|DU_S*WrYLH0F|qo3&6n1P>JjjQCH{^+Fum_u_uwxOQ3so! z2mbxrT4zUAin?Qw1WR3)2%iq_LrbqrZuB@x%O8>f)KoScNuV_`7V$y<5Edw2&Mg+R3Sa{XW`SMYtgEa01a{Xor>Z;-) zIna*n^cQQ&hIwv(k(pCvU4opIl$6BOt?%&RQrzu=^W?q0<=hg=tBXAq*?E1R0)GSc z`{aqOi_OuaW2hO-N^$z1tiAyrO9{{ZHX=1Lp}ZUZo6~SO+gVl{tE<*HHax*AUKf9V zH5c@NHPquFIsQr{(f7=6I9-5dyitcaDHh4Hi{kFBcymuvuc9sFD8$gh>-*ndkYp_a z<^#}G4-3)=J=gclP^;>lOiG!9IXEF90hS(^-hL%>3M}6S`LO?KRek2aSIZk?H1lAy zY%crt^ZPlkA};ag4iQjDx!FQWZe~Seg4nGYV-K4d&g=0gFC=q}vI2WN^?v(UFaWXe z-0>-R&3cj;1*)x$b}{dQ?00exMr|M;+raD>_;12mRaMoEtf9UhWs*^P|!beLB@)+*M3D0$PFG0_uj`hKdO$Ft-^Mx3z8 zLbb!e!D&8T#EE;rQ4iDL-pOjNWjzJ&(>Ojzk+K|@bfd(;W%vQpA`zP|9=nQ}S>D9! z>sdq^W>)Cx?quC+t~Rkw{wGRKgewp^!0w6^k%u;i$acOsgVX%_#S0gh2m-dANyU=Q zXzVz_L?JY}chek{u+0}+jsw)V>rMlbM{cHxWp~e+IANOAdvCa$Z?<-NwHqnDIdwxd zkSlO2V+enf1Wm$odwOk+Z=Cz9JzZx$S3VXA_ZtObrwkp+>vTCqhBBF#IIZ zPJWbAH-qx#3__!-*qhIrQP?js0#C?y%m?uh{2Wimg`Shsu4SU6$Jtix)gpPblaf?j zZJ;tOH%<}`1!EiX1Q9*`9H7P;H_6E@tMu1zkb{AifKI{-gt_l=GfLIXRlIw2@E(R@ zhrG)E!+Sj^&<~D|x*e|R7}~jocC(>zA(VMwOc|m%#Dv>`JgitzR>tI~udfe#0!vi! z4$5CKz8_>2H=QRv-&_H$X#^h5( z#YkVbS%xscI5PX-H&JnM3N9z7r%b6@uf%TB(%w@nDJ|Wj5R~;W+t4MfaEYbNzkbv7 z=^KUuQ~oEaj~`FLJGFgB&Z*DqzM&gpKil}S7?{O>n-hnJhtVXriQ~TR14m`umzDP7 z1;1q%u21B`!os7n3!M7(S?S6{Syz#@&lzJJB$i!qFNN&IilfdYo#tCW2UC16Tj|8C zg5tfB2(RVnw;WMd%=DC$&!9K~PX_KRGy53M&KU{i^(GuEV{HxlzVFcivvR^49(_~O zX8$vf`cQb6(4_CMvB9yV6>(y~wuGA?@aGVD4tQ(W{`{qKg&pbQ#r@Sd#xFa&;;EaA zXr%-Eas|7qBLO!9^3rftk*F0ooU(WCXoMY%%*+^+8XV`o!qa13G6^_&LW-prX%5to zZ%Yu;IG1~V!|}Y8r*-jlug&MlQ-of1uuBXkY;tO9ajTvrux1De2yBjj4BgI4e5SJq zT?8&2WITX#K(`;5rom5$72=kd*yP+?U`tTtP{d&-Xq@M z?i1OwShwRP`YX1Hh3$i&y8hdVr2us9kcRt(kt0*iOaW##NMhVTlqhM77 z>fEf}u%O^e(fD1Z?3|o92j)h}MQReOAT3L7Z_wU7pfMOD#lT6k>%VMkjlK)HBuFnOBQ z167!zM#pc332S@+(64|d^fWL_>A1XS!l7a%b;(vlLz{+(W{(z`BYKJ<&QCS%ng1RzL%?(tLvmie|vFHm(zIgbsNEV+{6sE`f?@LRQbG@=3+SM7F^$+3cMHkgaWZ5PU zks(Y8c6Mby%LbX>@Tgce*-r_H#lmkC78e~&Dd}?voIx^GNfIJg!6Py}oYCMneyfnx zx@XU~hl%@}-%Gp#;iS^?Wm@l-+HoNOpMy!X9wyr;lQuX9F(hr|DdPny6?mqYv5jrqMd zY-}SxpZVCrd~o!t15b|=9C>idhn9-U-Hf?c-g>L(^Lv!1P}o6GvQoK0ffRRlB}_`h ztWp(4OOs{fOBtS5nVFezOdrB?7@xK&wzvjrP`VNz-I@Bak&y%hFCTWpmI(9A<)7wD z4ko6Mr@w3q1#LrT8SQK1Qj)Qo+1(e74YX*zn?!PGX3k-^{ld~27HWk zJpQNaZ}lvr^IuF&O?|XW#o#wIq?GS8YHx2RqCaip_u4hHPJe+*5vpuu_P@^~1vBIL z*sCo1Wx;hjBFKw`xdv3Prh0nH4{*NOHVeD&RP`t_+J@VHx9za~zJ8Ujvc@B}NBCk2 z>v>jTp!sLv(;IPw>i>@UL%w`B#@O(Nl_eA%PmYOMmIj5}9S$540>p`xd~kVNPU( z%`o+C!-|uJal3COs8+?s%prtB7caZ^+4Z}=9f41)_86S|$yr%yI1S)MtEi}emsa{& z#Z{wMokEo)r1dANlO7AQq)MMAtBjS^?;=%1y2-3?+u6ES;N(i(DIUt-)xeA3p#PWL>EzxrHzzG1Pz5&&AVWSr=f#fbtl3J3+!_N}t(JGY z^w!^ddzVYvndv4EgMxxUq68k3XO*ebN*5tBOdlv&A z>;lr6-K=qBBWc#WaWCaos_o=nH1s_{E5X#oU`K=T%%aHd`oU1I4Rm&Oy%uq{fN!X{ z5yE_fus6`7!@lSUG-h9|lE{2B*p+i#smJP>VE}=aALjhe^-Dm~t5-9T4S7{K=ieb^ zeQ|jMBGZ0ETxs=+o87qHwOlY)@+FQtF6->AM|2A$Oa3V}qP7B7N`bOr}7M96`9&KQeLwD9~ z(UQs6^&@t~nlz5)K}KWCF_sK$p4xXxsNjWM?_}14CxzZ{7y5d85lZOa-%{4icjlU} zK>P{jNlG}ld9tB4-@m9?($djYGzc_>?g}jOF2h-X6`(wM<5^`?Bac;h5w}nqs9IWj z|Llr<2KzIQ&c%L4^Jd@jFLz7>hT6M!aS}D4=5gZ~Nl&`a!pJTSBiC zUpHoZr|rMx+~D}^46>h~1tTOpP=Ev`0HT7D1j1E62sXsPrI1n9&NZ~jf=mP!k$R&% zPlU)-Gh2wO4UKB=*?o^V3cfZ=!o^-(QLyAz)EX3kX?=DH*Ri8lTUrNr-=ixHZ;?+Z z%&CF})V!J+x;5;3!LUW1Hp-P+%u$EU>^xnObu}12WrjD9U2n`+>g2Ui#6olw(gceNTBa|h{P@@ri3$3qml>mAN= z*r=`X%Xe1X*DceUaH>j_^u4cPPg5*tqfa3d2d32N>1hB2aH#}Twu@{NU{fX|Awj$d zuF5>)VzjqU0>Pytl9HD8@cw-!MmZMk6+zL-g%SJjigOV(gER=c&(;(Ebx@{G7Zzgr zESNm?Qt?K>3ylpp14QQ=PXznMIK+W<(h20#)F6dg&u6Hi_bKykW|hZ{7B@b3Kv3V_ zC`HyqeV<>Q-ikO{$7;N=7Jw(4&$4Tf8zF21hyw~3!0CmG+~9G0u>R+2O<5XJNeZ)7 zc0et-2a>m265Vqkk$!e2O!WsAR$qf>J`Vv7p}05y>i7;5kLhDb23$3E4WhjJ^w5ir zYrmcTa?lq$`sAhc>l3J68^(Tl@tC_!kZv8C)WlS1By4S zfMARVkcbjo)YH=%g&J3t;4TFM07&N}SWfFQ`U~K$K7G0}cXcsW3)?|W4LUkHF&5XE z;Cik6ahLGdj~-iwJi2)CtxmAd=ZJf9H(B3PP>g~oAw=Sv$%-qc=Zt#>`GBR74|LhU zy;xJPM5|DoB(}|7aXdV{<$EV}(^=p~+;Yhej76*Yw`(|s0j-2#^Q)f)oQE7N%1qX9 zA;>_&rGBt_{0=A685HU4gzY~w$TeuQS9!X$RN5Z6&HjnKeoJ-QHiDeQt^N}9Grabb zRUp^~LsmvwS}RgjV}s|;qpM>uJS>?3+z7o;JL{{+Ahy;^ezaE$KUR}QK0K?QW~Ri~0>=`iyV9s07~g9istkaC5Es)m64^0JLtmK%08kvQA@e8D6h)nULV z4$F&1R_!hO;31Itq`hc08luS*h`5&tbCUT6;4vMWe74fk(%UcMJO(Ew479a*0ZQ4) zt;a>MlA*VuSp*(r&&5#-_Z!fRkBuohRs)ApS{f}xt|-U+*uX%w(it3yfL^5cx}G8` z$RVk1>P#*2TLZn@_X8`p=oUaoNDr)J0HYxR;%gXRlD4GjK%9PQ;lpzb3h(anLp1Y% zgiUC{W9KXvoisNnqF?rv{Z+n62>Nroe%n&>a;6t!xCdS8)9Z@Y# z)Yw1P(HSzmTsEzzZoYolyAcTNq3R20HsRd^AeEW;j3Mjw-1jsN(Y$a_P5pZ01hHE1 zaM06^_~&?l@MPvs7jBezLoCJH-_ z-4X~Oi%zvKe2zaJEDI4*jpeJ!pBbNX~&N>-qQ8J4;>h zIGC7&PH68x7}2V{8|)uGk&l8LlY#cF!U0kGd%v{!LI!g2*V{nQi03_f(hRHb^yZs^XJbWQ}5+8 zSmXP%g|$pkD>$kb@WomImv25_<{1#z8O0&vHaec!38-~+rGg#y3L>=JL8k+@)BOz7 zq>vDAxR*SSE{u%7F9BHxYTR-H;cz@ly;m45>6GIJFrNzR*@m&ZfFJTA{4vr<` zD)^2|$sZ;r$GZRbulw|0s%zBab#iug10p#r6dkgX244@CZO=8+_wfNZ4P5G{PyDC| z^>1R9JZ&qiBEw^6W0e8mrS+MzuWj|y%-9oCxPPCxX#o(Gzrn|6;VU`;`>Kh@bxCRb zP4Q0CK7Zc-%ADU_|F=MpeFfTZX@oNb<>~YkE=yc4a8Cbqe$dUqPU~Z0Lbni&;#FGMzxe*5&E?HiWHQ*s|#BC|-{c#{cHODQSx zYK^y1N)ftf$X)_eG1!vJWL7S4d69!^OUBx4YNzo)6C`eB7RS2_S;Iq9#;{H)>gkaO zmr~K_!M`9S#if%Fxpiv=W*%Lpvwn*@;-Y`F(P3sT zub}3&^ZcYEBl7?^74d>~uD{ZZLA~30ZS#fwv-{U4*bC*}?RO8rXZuGq@Y0WJq;@Xg zG0Kp3>e=dxU~Zc~{a0f{re{=mVzq-N&*n4()Q$6e@5M?y`JM_l5zL)ph9SxX|rom!m2i;%M7sysG;%HFqg= z8{(_KJn1EKcq{vsM72;u9z4yDOiaG|9yu6VrO*N+3kA9v{D%lYjy)ZLec^*>o=+!r z51Iku@O5;6?>{#!jdh*#AuR<31vz z2Bj<43v?|Hvdrq^HWbvVOZ;mKgp9b&0x0r}9aNmm+F`Gy_}3>qCjs{lv@|w+u}{4K zQ?qC(vBQ-D?E%n4qsX|A=PWRT$i6Hkh=16HjsX!#qgY)#Yd5b!mw7ya44{$#xdJyu zq3TSd_W^*Hy?pn$>Vr*axA^TWVI(_cqFYB^0P;X~M1whDGjGAo;y1v)e&_2>=$bmjd;XF4C2$LtLm7ucoS63IYpY zcIQ8T`ZTzxi-g(@2Uwd+H{NsBTRFi_MCmKxtUx3J4R9io5gsg(e+<_X5x)vHZoq^U zLO>M)2EXAq+mqF?DcBlQAf{mOTwf#DhIIuZPKt0S=;+|Gfj?s$*x(~R9-hRnW&oks zlRMPKwVVUy5i6ylrIpM71e+|@+p;`M%TQlGYIL5Zi&Jkc)6>=U^LFQ^&NzbaN3Bu^ zrOH@XiY^K1354DHr@*tiSmrHquqwb^ z&O*6{*rIM=%3uohsP#CxB*4ZV=I3^}P4PG6dz)P(icJhVH!u7pOcdEKv(zo_Dt9kR5AO;P25~J50Co>gA@O!`jR)*27L;K=HuRt zxTPu?Yi$;{OPk{5flwu*S8c#^c6BLLg-6Kv)!X-4sCVOK5N)rleq_YiFzBD|ilZ!C zFF;iaJczAXsWj^Esg3ky(Ir6$1K?#NBrxPQvjOVru}{anW%??9ei$4m)KM}ayhMmc z`y4>-0I_kBimN7x_69kO&q5c5+h@+FYeU+NP*6~SJ34{L4F~ukC3qTC?Omf-ORKAq z`z@1#wUf-6{n`eYTAg3|n-(aqg(0$Uab_Y}Z9dtCEXOQ$Q9H)P#P|T=1GW}~NMd&O z5;m}BiWV|5GT_Vs)Ngvnee!6#A)XraQFM=6%_}IjVBr96EfzW!H?+?1$Vhro7b^gt zV3yheW&W>9Qy#rWs@Vey1)cYNaAXjtMnE9Az0kN=vS@&O2l=864TlWwEPy5(VCX4) z3!fXy=QYZb^7nCZ`4rjcq!8zC#b?AgXcHNLq=blM2c9!8zuK`kiir7^M&<{bp#m6f zLQ|k8!4i!4T5G`cM6OEhgD2Cpng0zIIN?8$)aci6gzuF#H(w1Gso&-2XJUqHM5B7+ zP1il)nbemrOSy!xx>yZODtsn9I8S>yU{dx`-L0nv1PBykYcYGWiu)4~Ocrc4gFuCnKnnX5i zf1;51`3>!7Wihkz{gT+@lJar{00N91-{vn9UwcrW8@&>By_JkhFC_sVQJ-W~Ue_fn zivvLSKgkh-DTp4By~aTzN=7+om*KoHdpVGV4=sMvOe5E#0&8dNWn z_Hj}0nyZfj&KmTJP>hG(44=Taux0hvQewWohYb_NZ0^w7ArlQ|&!*0$k3K)sKT>du z*9V&H4YJb3egL95q11Ah?F9^;?q5JY1aZQNm&M#pFTTsAef%V7G?Xg|3SMWs=^*VOWUCg;(trF&ef)4H-a_dhbOtiR6w;m!h85AKvOz^#t`UxKQL zkea#yhHyZ)puqzcSno-)94sIy*>on5aNxnW#T>h^|2-i#tr_r@3NFKGu9v{m=Y?qB zE8%=p6Tv})fCz7zf&9j8-NbjR8tC##qZ74XxAcv&?pkZktwaucf;&;7vf=*g<;~He zi{Fj!LKw%B80FCk=r#wVi}Rg$e}vCENI_@y580_emiR)kBxS`WQJJ zk(+Tx`wzW>F8IHs|H0uQ;aawc4bA5k(PH7*|31c3v%rFW*XigeFhBlpo^0kRjNnq2 z$CmeY<_$9ApPER+2XRKxo^jynNqv3Vi;1U)W;1wja8L^gOaKrL4(2_2{pc9ta^RC| zKhXBm-x*KK6cY47-Wn`TKm4x-4iZvD_74A%+L*y?YrzvAAa6W~(liDt@I-=t_y{e4 z#qr;^1Z(3p6wAMqPLG|Ocm-4qAONYQ&rmG?BNH)b`_<5~=67}os!8%7VY23u-3sH$ zxc^SoLED{^*@zCq$B$pVQ09LjTdLo|WU%DHQ{>NhYvDDT8Ycq-j9bxfdoXFI8d^MK z_5=Qo>4B1}Y!?6-_;oYIJss54V({j#tL6o+OY5@|T>vJgm>llV%rzcX9hOe2`P=FCh@m4 zcDHF{=SM0zUbDFJ)xdg9m)~({@8Oz+!)~5UX@A{6u*J^zYt_SLZZIq1?i>x-9-kLq!-=@x6gNU6I&_F@fC*ITf?ZjsI zM6<=dG|$jdyV_jw`^qoNOv!4ZGZ4tpRYB9UHt8xtfgArH$R0bM8h8MEOJdLsAw zFP}&)VJ+P4GhbCc;9)n;V)INYT{pLRr=t5Ta|+M!>znXKk1~0W)Mwg#jfPjzUq3cB zj$dI&hADUdv0y72{&BA=GD#i;uZ~t|@tUX&6qd|r{YytnffSZd0NVa``;E(K_n9fpGh@< zpw0c|UcpjV2+iYZIvj@n?eAlt@h9A?@kpxSfN)P<6!_>!M*!Vx0o4O8ZTqNgG2uY% z)%xC)S|aX@WeAT@qq54lq=-meQ&UqxLC9TD^uu%wI(V>fa&dFtk^!Yx7PFX`4`A1+ zEUf^^)rF&q$4dBeHqohns&(^_Uh=cwqc~XGQ@S_lg#L0mHw053?jrn5_=i=p=}*Kg zu?ORK`R49~>O42t><~)ca2#@%;;&x=pe@1PR6FC5-G_DE7b=Jb3&V{;aHA*ApP|jBID2a%IN1^kD&cisA z3rSQrZ$1PjHZ9E^bTi>YRagowkiEucb)5aUPN)7&^Zj93^1s#L{BF4ug}0&CnxUM7 z)SRfjXrdd{JUF4_hKcv`O?*g_`|e5r1p440FDT%E{46g+^z8QP8(g7plrKSn(8hQP~E7NCY-0P=sNP)R8y=IjtKbz&M`qi$)=&;Ds{Y7Ms#} zDhftU@WHWUz_~~UP2j;c11mr|3Ud6!#KiEdMZP%BNrj;W7mY=MFdeg+h>R>E1}Xw0 zZ>^Ihd{tc_SQ)FO!Rq_K0KxWc;(+L|$83c0e|p3*yZd8a@Dxf!eV?1ljq{Cj&C7wp zGY1kBnTAsD!n^oXos896!$G8$IEu&xh%4SV4%$OS2tG*nfckwJM5tR5BeEpOAOGuT*5M1%UE z#ZpjE(AFm04_PG+1Y_EsD=rCq{m|v>`}cU!h5nK^^iF66?M7kkY-?{9r2|2mu`z83 zN=Ri%Nzk)zpQ3Vn;k2k)xw#2ow{%zcggma}gQ$DJz+hwA6${2_kns_qMV)AE(AETg zyQlhTlM@|Ls1>7R2{!h7IL-s#=ShdZ|Giq25(nV209^>@>bNj{${2Jm)tbBu(RMeheieoU zA2Z%mc8Z!6z(j&?yuijtLQT!lMn=fA_*cpXzb%Ew1(8j43FJz)gTTjpMhJV3Cgg^X z1IT0d*p7jq0KQ4^JDg-&8P%o}uX(rXbS~(3J{Ca0`AUnyoG0aXlGt!nS>3)Zv`4~{ z3#yeLTnZu%(<1u?m4>Hbtt8dC;(4lF(3gx7kUh;8#e6BOkEJE$#22XrG)h@UtCe)duT`qNP(i0?nYr%p>5m~ z7-$0gI}EI1G7kykS_r?SJ^=Y{Fnq!IXmdi|BZ)H$TaC&~Kn<-zk;Ex2%-Pb_^{(o& z32{&sBkwY=Gg8I?75Pa18YOv#I$2BN@detoxrhi#mh+rYk+6!%S_?C; zHG`(N{?1SXc^Gy$fDnA(#=Fx3otWphF#twDV#91td^am76z2Pnlr|4(dP>UZo}iwqliVxH4OY!Hdl1y+1V36I@pZPGwB!l=-IJ`Q zf%u47fE2D;RzA1IEukJQ-w0>or?7@{iUoa@(i@UN1^>gaCI=1kt)7HOr5f2n@sG7t zz!L^q`}@RLI0OW5S-iK6J!b>~Q^hBw0RWzi#gMdES}hB7oDwhE)?QC z{f*>I%DIwh;Dm4-c3W5rvzI*QT-rxOpKiy&GoPE|_>%Vf*y1&6bcA<13 z*)@9zzPG6)@8*zsKNSlmvy$6XQR(nCoK}4=F2tI0s6pKt!FG#9V9zT5a z=u=#NndanW?qDCxw$J!qW2xO4^T@jjid&B(GYsEk(afaAjy2lin1MF7Zqv5P>gx1| z?btb}NX{sC>sjjwv~B3s3%5Nm zy}4eEtXR8auySSbO*e$(3XkHhuy`AqUD40gfrBaq0J-_*_ ziIGM%1|}xhv~O@eg{PZrtVVldwK}q_MSw1`%T#Y^v0^Mk+hj51pSPA&;K9wbb1V0*dqs5`0#^=c6{Odn2Suy5~G(OIm2_MaAd z16>*z*D+P4G*e-v7BwR^5=0F}E84l29hM$wN6zh~zeh8fzAjyw;L%4fTP^^>{<5Pm z?}lsk^Tg#*BvXW-WTIY;&B8T*`p`Me=6ORs4UO3^hHSfva9_YkpRD9&!PCgQTFE%dj&(!fE{n}Unu5$+2qG_j5E7<*A!CL_TcIBgC&j&74%h1OUVnO835`26_O{$fB z@A<;maww)Bb;|J)3D7Lf)27HvoIGA{$1e`pFN+c13l;vh53Lww4BIPAadXBA?FDSuke|&?He3NU; zSpFY6T+IMMe<2N*^6<=#Bp1`=N6=?rGYJ|ucfPV^JZ8K%2ttr{#A5l=^6HXT#I-B@ zsvO_9(A?(x-7_b)Owk<)u;BH>Vt=DKJ%?dSu#KyPSy#~A9+vhNTx-3IPSzoQ49-ti z1d~rw%@@^~*|>{lFTkIziNg(#hKakh5!v5s6+Q(2cC%&(d-*o`x!{@acv>Yb(F5f- zRUH15)w@NGCqG0qw5b17zC-emEO7e0s9gT<6Lcxf%aV?6+IrG7m@EB+SK#GUrjHpt z8@?gNt_QgNad2^!S;-1U4Pulg?o>Tc^8P4+wHyflp|l6)+#GSIk8@DJQ|k&B?&)+l ztlW;sF`MT1Oh0z2XYGI!PvOKPsAX=Qk~UKeh7VanWZ7c`-6YEzET}iik<=<XESQlWLg^-*AokXz5)I%(Q{eJG?C@6R?WjL%4LD z*trRhCot(}-7&DWjXmk2jg|CH%ytO;8So(q^2v6o-lSLb!>gDI{}L~mmCr+|zpZ_e zk+vKTHV@eQR51#PkL9cp_s4E)+>*N7P7pFkf`sE{E5<+sv zw@Yq`iSNwfW8in)dj;SN`O*e8a)O#<{Tl!q_c1k6uvFQ;AEc|Hf#)-TOr>PNZ}3QT z*viF)WTQ(QKfgRIk;$%!cPlF6(YmGbeeVIqEsfk`is`wc| zquAOSporr#@BD;jL(!=6Z6kQ~RquP|AWYLFe^1|*AIljV(}wm8&3Iz~w)b@aevDZrN{tXNovh5Hobmry)16!F}u$V^^$1G?rYYos&KQ@@o=? z$AdEI0wQfB8NQkZjj+aKI_4SfsDnE5`NKPsLmly9w=Tx@8>xs^ICgWMLrAL}CM$S` zhuPb@k^q5+P*+-vs8WjIXQ0J&1W_Hh{p)WlU2)KErm&!Trrp-1Fa5A3-c+r zo{{!0T|Mh6Fg^1M3w8W$)koAcs6qpqKZ{|FNAx0tGyBPIo@!`msK)rt^U_l3R}r3S zd=eHH`GzN|w7fgm0GT|t6+v&X1ws+oY#S9p<%cMyrJ6I)2J@eP7NW}>i_5Md3jyrl zZGE|@9#4?Q>A&z6nMU#22j`(k8wd z)qHB;MECXrI^BE`+oZbDO`fRiH_ELa{~m5ARJ6STAHI^^UUnUT51{j}CG-oEFKuZo zd!o+Sj|UUAU@xWDU6r_V-7|NKXz40at&6e&Op$RHx$D&aU!SUM>iu`B%OfjM> zrvXKj0fz-RSeO^MqrbHmGz4tg3wr-E-(ezUz+V_zK1)GX6Pc6==&{_rkWrW3_d*K~ z{UFvIT_9JOKuI5t)`K+D;}`#&{mV{fKQChgLr7^ALGi1&oaK3;Rj;qegxY%Su=^<# zBJ3X2#>2{-{oFt)Rs5t>386V9O;V+E zHl5oh(euj5B)QPWmsRqP3GY;1`64XQUDQW45)2GZx3!jG7d1o)Ca8~&_wVyCrI51G zt>uf@;|S%i=w{1VXH;i;3grZ!L)qDg%@ww47=BvN;P+-j4cxo#T<-4LFn3dE6?`yc zfpMCa_xh+)$4T-3tXcKZr#K{$SAgincsF-#rBFr6)BWb3@~oW4Utod&QveU#d;Z`# z*<|fv&bb|6$UX(xIk<4EOX;UXr0g z2cMLN`iPsfImoG%(0eXnnDZl>E5|SG1kO>c7i^Y?XDG`Yz%I)z_vX!x?FO9oQzwf? zb|qe)wYP$iN{o-%4!(X(iB&u%+XPFwaC@LV7%#(LYl$UJFEGAtPWPsh^Tf#roSyRB zoU?Q~OygCUggIX}Igm9JAsD&XXz~2%@kX4=CWm3!!&E$#L1iAY_>s3tPU)i!d(AM| zRxRvpNJy3nJ1I8(dh&{_JA&U9v-e*7ebia)J^DR9M*PgfZ9ZXb_|2PpO0*O-=TKao z8hm^So6ucGW~o|?0jl%XXsYxzNQ2+~u>ZSPr0sv7Y@r5J@gBs8&61s&-uidtHD*qS zAzx8ebBAXX1u=^(k@9)~O(>D*taC%v0lZqDJ>)QkmCdpwSvj0=<~dK9I&mYapfCu9 z*BRD@ct^}9H1DVQXnjvg#u5FSlRT+9ppqB#DFog``5g>{vGos=dmG0b^Wsd} zx7s84@D=FKU(80VZaT+v^6+TBoMK%EJ!PyhyExs(&x~DoL}}}r)1RYe9F~Ci&(#Hw zl%`T?Gvfo$x%(?!<1}jK>M?MFak__ z6HNCLdsiH|D>J!A=g5f;S91zNl2M+6qw=M;h|j0raBI@=o6mxI6POyXG4JdY;-7x5 zu>`R`m<|KLk#^XCJFMfv=m-+FFUyM$^ZXxo$$o&^RVr~7`P-NxNZ0*`-t82txRpU> z+8j|-ceVy*2<%@@VI!=kH-)bt+(i6Cs&n3PQ_44yxPSOEH=Hij=Lb`a!x=GbLoxG| zaN=x8UTH`fp}ZR4CgvbUNC{Oi@|wg)wS{lqxG{X!k3|sp99u+YXL#0vbxYCm*2SD* zvEG|E%2cw{xxZ@MDNgV#|2FOk$g>x%s+O$v?HgvNEC0LyM?wil;q0jd8Z?%@qyX^WzK|$}`EQB|GNL#~4dPjK|LR?TOnhy?d+`fT7sJBpP z-xs}6_Oth4H3}JLFVZAW??qw={04Du%gd&6mddzwN?_LF{H`Qnk%cb|^Lz=oSn;`FO5-;K2}_YAZMR z64!_k)p5il2H8Kjst*-0^sh@iDxCRuo*>lneT?TF?(~0?B@K&Es-@lBj%|cYseX7C z>>~pF-TV$&ss8$s%!njD&dN0&hBi&>^t-FCf?n>_jVN;GRr6nti(E+`9D_EZLb>^nnh@RSfP!F6>(Q*O|-n}X#h zh*myK;p}$)gHEHwekB~dSV=FxC?qJ9Nzmk`O!xh8pSv^~Gjg@5N@|}N+S_O| zXCuPHWBHSB3DzWYk}*6i{gv0Ff-eJeJ%#8n!dHs>98|=Vkt)maK+!M*kWPBF-?EZs0f=@NSelGbA%* z`LQT;kTTcb-x`e4&gMUGlWJE#6?9-{ir88Yy+GN&NcR_A+_45O8a<@P1Wh zJeB73F(SJuigCX`560W#^1e~qpyCmB4HIyjp^C2>F0crm17ZMfPtxdYZhZA9r$|g` z^^mbF?sYVNXkZeyTclSJa^U}%H6;#)tI&^PL-oxH^rA`f0N#^F^tC0*JHieyb)v**)|uwKczZP{wR~mMLq!a zSah^9OL$|et}L?Ay(Q0-rGTa;bTxr3~;6^W1s^)WKZT}Sm&-& zAUsXsR~188^!Phn01J)=-e2(L&)49_60Aq}si+!!YG`?tUs4kCp^QX&ACK{uQPD$U zUUv#NED6_rRaYVS0Ta5tRc?sB9$Tm~SW$}}6mIyn?aoV01K3-5si%VgGeRoCi8yi|&Vm!dTPd^Vxi zn?h3*5ec!FO3aJ*eF2?2!`bxRD#F9H)%5nXsPZYpljGgL3F`KwuuG*(tGEl^iOYFy zp&&R}9Ei*6Qh0D821Ws0LPXL|2O*;l1WuFs>{$1kdB&KJ?zg^BFftO4LcxV2WQaUp z9>_D3QG}Ol-rVT6jdnK}ChsCighrSLX<-GIKnBC}Ud(BwYFmKdl~q z##>?y#s{i)PNhniVq{{ST|#x7yO8|VpkHk6D1G*F8MC63N+G>!2%BUx7@l8cVB$&p zNYcjQQ*!xg$c8lEta(n&3H#B?u9j|rLMdQGc{Hz%-*u95DxyuLr-_$E+Idja349jE z4d;J5hixVA^-1T^7KP$GPlzDLAKj;q+R1l82Y~FbtPT@@w+w|F|TV;Sa7UDQ$a7(y~Rq zE0pWs{XsA>cMnT&fD?un<-6|CA+L?gxV=U53%`7xtM(hEewb((=j9scV_qNED}HPIRyscZ84YW1X2b{q^1$-VW`3rVl1mU9{Rgsjg-;(Kb*aFA@;GKGn!Wf1k8 zd*;=DNtN+asB3K8{R&C;4rB9|Es702kzHGf%6*nqlNFk1Q7n5W`94bcsc1i?m^uE! zY+8$}dv8h88-I>11$==GMACn!yc4kE&lqO1_DsKGGO6gbvfqCN6@IBi6B8>dX3du1 zHPfug$zxl^WS!%r>+2^Hjt2k3%zIg?#P&3%Zi<0g7-qop;%YMa-|c^e@9B%&Ii1G0 zoBfA!SAa40^!s;KiW4N?y(b#=z&2Ty*eyd! z3|KsL*$v^C*Gv4fJ)XTOg5nrH{5dW2b#^HGmhM#BA{*X3z*cA9Yv=An4k?e4F(s?J zrP9{%wU2;N48r$Zd$w1c!Rfk!rB@IxPJ6%=H7QfOOE&Cc#Z+)4@F8R>=vsC*rP7|iORtH8q^+9Q%kSg zp6|T|!DRC}2lD9({N06xlhv{&llCcspMz`p_*-6&qH4kqyoh@BQVMlIIXT7C#bWiN zdlpu9BObajOm{JG5e2A$p}Z_}f8S}s4SwiYoAre~Bwk?}v1Iuxzhbic$6mjDesgKB zkXxL2C5B_-y7h_#p_XPr)%astT#fS3P&8fTIWiJeMLo^Lcnyrf-$bNYXi@s7ynKA; zjJiXrVH235Eh@nwB8kxtvs6U=w)MN4SUr5l9W_KT2AinE})}WYu7zG ztMEF!vjc8)D}Ls&HE{a+_xD$zfI>sXa^dg?qpBoFyGvl#vWkkP*L*X(jjO@2fj{nH zbX#UiZWt!d|ps(2@N74Ko&WOWKPVu#8Kf;sp28A+9sEcZF~RRG3B>8#zBs1KqYV2ngx2MuTdT>u zNnzIi1^2Os(A_=N1R7S1RP598|PFCvvQJoDvo%h#$9bQ@$bqRI;_rh zD16xScC#j$I+srKq*3YKSu{^}dbp zEfl{#T8p4)S$du+Ffe>JeWo*!A)$1$<2WZLJvUcl8{Q>l*gPPm3d^nSd4T(PH}U7p zbzYbFqCsv~|8l{TaA=P)$c81ihKQD?pk`O)j9T9m9jkgQMcXYX5ZL>j_G!v#Em#GTKJWkG0=X@$bi zxcxUju1{<)eq9Tx#0TFB2y{sQ1YX0XO9dqz&HB46qhzb#Wf#gn6K zGObW}2ewg%)K~KJ^`)hum7Z^|Gkufl)QPq)mb4p;yu9@HM%%Ls`Wt+8GHSWYX8luY zFHcuc&37BLwK?~7>XAHurGded%2eBYu?FNV`Mn=eG3SOH6z&d5w7Uv-KP>YY5d@B> zbB@t@4ttR!ESW!732SnXXxL4V#-AbqP<>BDyWW?bY7SKMsvew|rQhV#-qM#b_@3{Q zG---zkd80k9NBx4`2Svx+fF%>s~8Ui`1m4(C99bmiS+^&7=(S`;01?HncBTj*Rn!z zfD|I$uj9w=*a@;ioa68^gZui^fdr*2V- znrK^63bM|l#*x@R;$uZ;hLNhb4@4Lh3 z(u)_QHn%5yTI-n|L+!|2#B>9<)o?R8$J~dxVmgo{a}=0yfQ?srg`lCL*F-A9Nw=UU z-k0RJzf=(*jGxZy*g_Fv`uxARo$^emjUiKN(iv_famAVBXG%I{5f%)1Q$K(H930Rs z`b4&{R)+7Uo<@+*H>o|PcX^YFxQwC|W=BXFLLGcQ%Jj2-7sxOuUU!d<^l*lo$nh>q z)bt~lbn@BW-gsvRRZ1>N1#Rcn=+TIc`(Y2f(_2QF0*I3TL8xBeKTzkn9MU^$iio|O)=37ShK^rBty2&wBP{NTu;aP@5s()299V`K4x+<@~(b`pCZY1Q!Z zHUH>H)X;YR`9W)?so1SuH^yWit8Q1Mqpj^GuykOWxN#$kAF`R_9wXq!h9J&ZM|F60 zWhL3FMNFfHZ+T!^S@y=BktF6V*}H@(MW21P#tQ9SpMY`0jX;bA zQK5)C!}y96Qj;|^oESmd`}_OwniX=6Nbjhj6X%i0ckg}rcrWhMI*RMtte|D~yd19) z69a?Jap70~{5j2QB{iv*JZQc}lE9UUVhi&IfBP>11Y(ooz~)t;6fS7B9Li@xHgu@6 z;gRmNcmF!$Jc6(k7uq{JD-7`}zSHf^etCO5MDgCIKBJ9w%JNC06OZHHa-uUH$b`pO zw_0^dIgZ7~>m@|`=|U=_#@+h{E9=(Re}BKCptLd)5@y<#PrrVc60kg9cz4@Zw>AUP zEh zq5$nx(-bM5*7QtbgZ!SFtn)i_T}ngQLPeU=Brq&ZaJmJ5-rG~h0OZ`a((v(xxM)Xz zV^XZmCm@HUakLZa1NT}T!ZBZ(NfkceQlDK!msj@}Wt@H}>ln4FQW%?tw|6r&VuIyD z_2~v&a+U~fwb>jwk|)2q7~X>!$`4K=s+{Lv8DG~*pY6l#lda zwctP8$qz(Rz6NQYoSa)QL9Xj#{Ro$2&8n>A@H>puXn#a`fF>6LHGAHr2Z3OzCS!F> zWgo-1I0}sft?#X$^e7~_shu3mnRxD%uAAoRs!G9Lb7>c(-C8PEPI>KM@pCQAyqQl~3+rLN(evm7(bL^`DX*n9LG~BWWj4`TYk5 zD2~^sdDVLu>00O%-vP(lk_TXQ)a2)ng+*i%2%8f3`krTp#Y)tmGm!xw6xLlY_djYs z1%NWxOTL54=t*w`p;L0xolegk*umHeVKm$pl%PFKaLrf+2+Pku8XeSl@12@f&gbuQ zGx=#PExX2&VyPDp9(#tVQ>x{7%Ub`yebg?zFI)3sDvPj%Y)P56spslN5w(9TsisDzrLG&Aw0qEFQ9m1MZR zT5e^doGO@KbH0gUI?fW>_v_8N&$r|f7*3VkD)IKLz{xvPp#VYQ`p1iDpUHsS|11@XQ`>jo@-*cZlX{PAsw^m7Cr0p{P^K2Kq=#+vmujAhfnsb&2ZvOlo=pdvcV*-P^XN2Y+fvF>K+){);wbKQmoeH|GP7A4#US={I_F34 z@&UDAecW^gWBmvA+5kJ=P#8|Uty4Psg6mg_qgr*N3%(XsEH3s)pAtlUlfFVbp(Qk# z?e|d?Ii%iRJl0BH3B%hwuzXUUglu12wji$T`;0&g0w|nLRcX*S%L;@_%6Q!&y;`{o zatny@Nxb?tNLX1IK0nX;5dZhUs;HP4zOBj3e@g8!S`HM3k@KPwu^GgC3iHnx+aK+HwMCALs-dJ4_~vJeAQz3t;wUb0%CzEWXo7_YAhzAFvc_CW(sF6QxoHnW_?A~ zSokaS@u8l8n^``^O8!9K*J||*nbRt+zVBE{FU zY%Ojs4oL(yE7SCskFRZ-yKX!i;H(W7-asw&2zaBk&qS1z@uoSnV%0OG3iV#(>f2~; zM9K^Aip8Dhp@DTH3wIdjnu`x@5i7FtdcF$pIKA{Z zyojBjD)O1JnmH#x7V1b&`)d7{wV+O6V;ZB8cBeJ{M{W)daOOy{^X1R>3zWMAwJTBX zW5&D)My8*sloC?C+~F%yNmojm00RUn3ngk|W%Z?5YOE{!_h~+Y>}#=R(Da2$O)8_h z9f>bvFO}A$M?3GIty<2ocZO1@`IbOq`UO@?BLmuq9~ha5vn!MW7p!hnH%2{4^mh7UkiAff_%zjr*bv5XF zY}ke0gypF4cIMwz|32Qaw5do75lrJ1C9I*KeyDX5xp5au=NNB@ee=nb%vLirB$=Cj zSKA8y%Qn^?gg>y`cGo5?7V7=9_?#S~ly=GrcjIJN@rIp}{?DThOUmmb)b0L#^JU=k%r%{qPP+F7*rjl!j9~pAT98=|p ziDYx2+QPoR{wHsy`5Y&pvO$~>cZW4`l=gorY?mOK%|ubRSP~p0T6#e)Wi=#IsQL#m z6)dA+%I#p{l8k9qMWfFWFbw6B2`6HpFHlE!Zq)d>G@}KbK_}Yr_@>8YraNm}gcHOS z4=TQ^9H8k&E{bEb&FzQ(7NFw|_12`eh+ct*0KQK07-QVZ6~5zZU*a&Qjr*uGE+Rb( z3EyU>OcG993}Sa9K{g;XpBolTmuPeU%tL9 zGqng_)#;W&`13T}o|g6ZC*PZWJi`kLKJ@rOBot*f6j7LBrB}!y3Ns~lx~n+n{HVtW zYss^G_AkEK?CP)o{rO5RvOci)@43&XDH9Xtcehdq6gi0E6v#wHIU`l7@pRdghw(ig z8WhI3H1sqyd^!A!^#_0b@c8iXM@kKY!W}oux7liz=&BjCMD`R)c&zNo2AE1@oLC=z z{w)4%cWaM0wa|;gVEp`dgtTKx--@;C5#zCI)039prp^NaRV#^Rf_T>VCeensTqpaZ z6zi`r!x#6oK2l3FvoQuNEG`aj7Na*;Q=-NnDXqQei_H5Y7{J}I^OVdx@sT)ZA&()xpt-%BITl;WzQZHM9maP2*Ez@x$YmIqxC0cC3T)7JR7EnUMjYRIN93bJ z_;^?U^xJ0Zsk`5>)~`Y3oVSGkj6|&QvnG?Ahkcj;^Sa?JVv)($SIwPHEEnMRV^KtBh z9x`P=fTzs0qC-5jB}Lm5YkOzcL3S~*jDeppSV3+~ky9idCD!0JjEAz2>mYiEhx7^T zwSt^Pvlek^F2Z;hRUnYX%%)sD;fQS?H$M6b%!Gz|kTv`9F;Ig->I+rm?!5vNmvPQ6p{I$Kx8`+F+ zh*X5_iFCka9`?! zHayfx-{55E7|uD7%t8C@+(@!0!$&CUK1V?WQo~f|)o)8Ks{A%X{?dH^D{ij4E#n*I zJ?y4Xy#7~4xK%v(90`%vvY!k_;%D}|hrj^f#OTLuKxNaNngL@vPoWDU&y9ug*T(vK z{a{uK&U>{y1io&MZ6aw*+Lujkd`8vZrCbCO&CU^!#=Rd^b@AS4-I{<$b#~MC{EN#j!@<TY{ zY;8LHc6DgoNVYwjm!?^Ij0JfnDjMWEUGjhQvbcu#dU)1sGMrz*yCPK*cy1z3a(?{z z;Z8ytJ9>85(88+}x2yN;p9KLwJ9|X1vJ`Yn%{%bkzH_G_C#Qy(-+LMrLj+Y~sz9Q} zy3g{Rbz57TZ=Ixt;;Iv2&3XR)+1v)&-%oSV1!O?IFNcia2BbL3f(UYPiHLBK83W|H zO2Qj9uY=`&C?{ZxCgo?WG=@Il54XT2;(g%=KO9us)5H&se?w_H%H-3Dec{xj6f^lZ z_-@@QkrtkYKzRMKytvsw(;Q`50av@5y5W3lUG5}6GX$P$@PS7EowACjG4ID~clM&} zqM|7z{M0hpv4?P9d8U>~hAnXDcBQ_heo=_QlRemtEivzW+Joe-@`yVNs~R*en83x~ za-!0$2+LHncW&EGR#`LTjXXZ0scNDx?6=>x^Z3k?8Ov1lK&xG?0x8BjZf1>XjgyJk zW5yq9U}Gkq3N-L~#T!JFGu9AoHr+Pl`(h|J3=h-w;VO#f1cu=+icsBXN>)%)M7SCU zZ(iMe@w(Ddg*^#zaiA24Sfh|*@QtHg1YOsx&d8w|g$Uj~IMoK$rZEt*z@9{{)$6#R zasS>#s-6j)s3RKrhaP1NjBH{}z;;r?Y^;ldq5I+Mr!%})wHT3JZh%^H9zz`X(+teeq<^yGI4j%Y%$t2(711GsaAphKzWwH zz?fQm6uv6^c61-SrawG#TBxHntE*FO9g>|D&`U9Yi+~DC{L+v%w-7kXqNOO3F%FJExWIKF>r-&x%}pWlW{6x+ zU|{ffRjs&Sm5o-kNWCH5nR>l?3ujhbaZWuG2RlMNEKq^SuBOAfUojagnFWu;*boj` zZeccc5vMAgwXj`+YD)2riX*Ww_9nK>v4!jsL@FV<%hM8IW*Bkx~ZupOl#aE?Zrp#B2}y*vq4 zvT)<#>G83#P0!s2z~o_zm{|BXR*GuQ`dR7^8|8mM_9zBnk#GB?7LSm8-A6CpQBYEf#KUvY zkl&5EVe%`A7zHVh01{cc)sbIn{S$=jIr>o_j41AEDHC}xoR{9cS&ROvJd&!bXvXqx z`BCmuJq1lCcV-o=oM0p8vhTr}14JtOSE7*|vH7K;oQfGpDvC)7+eBnryi>;Ime{q8b<(X`t@var@@@##A=ia(R4;`Pb--^ZvzRelF8vVuHN$_>%0N6=4S z85h1*am(6w3)^2mf$OZSJcop&;(*z2@h~b6OuRyO9M}}>QC|&rVT~n0oQE7Z(Pgh6 z5IQJ|(4tZ@Z|uPVe7i<(#L~5`i zA|%Ai?%cl3UiQY!FM8sd$uax?8|H1Gz2JTi97i^k8r~IwX5EZFHS*p`$@;F4)y942?cx;mi+DR7xi~~^}xE_e425|PoN|%W@<<6Q> zAtDl5M`lpVq41^PX4vrsa0};xnN}|MSF$s*Hf6z10B#_p&KOMQr|CG) ziJ8!Yv=^LMc-6x+@AZr$t_nqcoPXLEmm5!igm!dgB zO{QrFyHvpQ0L_}TC+E`Z6wW<}=>FMzka$1l`hGrU!?;EeSV*B=1R5#&jNb936<}2H zJ?inSIa+(J{*td%!iauil7b*0_!|)JBFNpqq1fnkp!h7_ydX5{jjgMA3nzXzm8}yn z^BTRo*5||XR_@`NX0%wTHjon z_EzzMHLD^}lUp~;OCd4;rUUfeR#UZLA`!O-6>kRV3c-Gyl@AB)0|bSWKycJ z$ZhGf>Clt#ccbk-A@!!X-Y2tQr8AZ>K*S-w#=vb6WIFP zaH5+^q=&AbjG9%M=a5EbtL`e5t&wPAk+@I+t~%kGP%yv}U`d(jgA=AIcY*S) zjqy9g*a2UJzQvcU4U_45il_14=Z=nZ zI_$&rDk|imm*r631o?=%}Dm?73!+1vZLgyL^#J&u4J8Spc_^%GwIY;|=t zir)%C4JMDtfODFiaJUq{JObyMnE(XLAksh5_QtFV?6k1|h#G7VXtmZJsb$5X*x?Q_ zO6+VbqDVkI<+ZsUC`Rzu&CMkC+5hZ=WmQ$GW!fS~R;ZL}1tfIw4M*RRhl zuTA&y?#H0YoB;Fxro-}d6mhQx^~33EsN{*4G&RSfp-T{?)FaN4mxs1coO|DQ&%0q1 zg9$D7Qy|FY;3(a;rad)Sy`{XsAv#0Qn2gas?9zD%{;=8`*b`|sgxq5{Ogvj*i|pjE2{tO*-k9_jLDvI0iuKqpeD zFpyeWTFS?Zqi%|r?VGFVJ;3oi1Y$fLa77?t2l51`42PsBu*y6=Q?(W;M>PMHib;y$ zk(K9>O2=emp|8@uC9#*C@$jHxCQ{mxEstmU`w`%&kjExX&-I!{K`TcYea@;(SDyg^ z4RH|=$mt#3y%kNL$&58+2uQCcRRL$>*m|}C;lh3VVcc*uRe%LBH-tC1l3c;~duoYPk~VNY>N*66^u1Cb3V%c~o!~69isDpz3RK7tLpJdV(!mn# z1|G4ukUsAwLsx0?MKBmKG{oJ8gC_|d{yhm-xOpG~b!N-&cplr@t+azo~s!s>(Q zow;GG&*+n^I7A+y<0+2~f}v=Hc%Qn4p>8-0+P2(&s=5F!siU+MmEKtNgV#mOpwqmP zhv>89#1#|}Kk4iKerXPq|32%4lZ@5aoFPm!Ek%K&y&*X;d1EknBw z%$fG6>KryR2SofOiv?^D0E+c-J}myL9%HTWQt?f>w#yP?~ys(r;N0x2Yn=-*ul6J;RMH^hA%Z9fZ<2Un)iWs}~(F>Zq zS>d!1!Dbp!;$v(m4}5co9rvkUiBFz-<=z%>(-H=zCnmO89u$yEnNdNk7*f^kgJiiRH!uv8*Q zPD|@}8Ee%^#p4Bw01)1S?J^ya(Ig8OvuAZ%ikYc{b}ZJanyMVW20 z)VI$OuZpjmCmLmnI5xH6;=Pxz06EwX@aO1BveYe+4}$f((PLRBCW$B2qP!XFE_Sth zL_=YxrBcP;g;AnMreE?ar{vj-Cs==pb*5n?3g0gWgE6WorKxF&=`DzY7_L3{MhLtW zgsqOzE73k#5Tc*B{W5+^EoEm66h#vgz+vJ1ZW6X?`;6LcE9Hq?GDE2s*~`1h8Queq8|x;HYo#rbFkmI#3|tulju;_0{}2iJDWuZu#Q*;H^qK_R!Pvn$zk zAey}rejs~|_b~$%4b5q9=5f{p!j%4J68jq`;dhD`i#PLCq1YiCz@`P#?0gZi?s)9R z7=87+YG*0yf@|aixHV=vnfv%pmn{8I=YI2`U$T62lgj$JMi!a$>*g?^DFWZl%I`L2 z1ow~yv=wb^FeI(8(l9o_Mu6sLF=3UE^W(>R)zG-<3%gKu?tdLk>|+x2?lAEH;I{?1 zX&(KYph@{?X-&XJRrf3QTq`1jz3f?q+NMB)BC6@65u=O`F4UtU~ffCeKTp1NKr&?%PNCms1tGAYY# zUjRsA)KgX<1YYArZ6c53C#Xj^ty_D@1&z7jE#@T*$N9)537vRtMTN5bv-h8ZQ@K!y zVhK5DDLEgWy?0tCmcy=+`SS*}D1f5aehG{htLCaIxccp)0p+8AafXRxzcEWgRdu5R zQWfe^1)5ZBQ`&iR-KD#4DW5+X zM2?l#dHbPhz7(juV11j@Ve(Jy)K`2cMBQ3phP1my`rp^FO6pRA?HtZw2aGCi;a&56 zXhc;Tf-{(w8+&+o8V333co*CAio!^JNW*Gt+xIv9$!lG=L~;!Ms37XJII-TRZ0mSUOusL z&UmHjKJLOqzfYK+b}-QXyV|=Y(g0fJ&M8zgEh&b{?Zz~8=fPsJ_wuj-jA|R?RfC+F znn+HME`zw`?S0~-;wtTfRVTqRsamy6%BCIaZLt(152Rn0?Dov9e}%j!vsnSAk1@Cr zK1EqEBH4@&HeHf~t?uB{QsdmN>|dpw2E!{Dee4|?;DuoG67 zT34e1+ikA)GcS>mD>5ym=rH5LC(`I9ih1VVIsryT^C%bxETu;BG4{A9~?u3>TTwP|_Q1^?@I?lZZs;EmGSnnpUeC%46A+b+jb@XPuo0*xZ^7X{^_HD|n8d7IG(~=DPrciP8q;jzeD?9YV z{-N!(lg-*&`WbXaob^pz4Nfcqjgf=X^&8>!1vKoLe{PtQ4akqb4%-qXumwR&B&!7aoBDQ7 ze|ZktT@(3WJ_U=;O44kKoucC6X}~kUYkYHWzY(HjC=3vzDs-zj0mfl z77vrY{SJiwU-!yCTg)aI`ai+?_NI7DGZG*Q_OeKs(JyNWe!*dpuW#&ZJrT{L+Ng&V}RiYxOQXhrT}4XVl$7gjh~ zTH>d(kHiTRth0VJa{FN@MQe-|c{9je=uja`vRU_e;pFq3*g}bm4)7-Q^yEhmuVAiw zC`;h@*_B7eM4cL>2GlPK+-sDd)o#Zg7;q(PXpFP=Tb&uQYPvEDq~A`uo}15(_VO=~ zZ_G?g#yOSlINr}|f1F|X8;XK|K@M2`dIN7dJhuOV^Iz4E1$+C>@7WK=jjuAp$`kq6 z@Wz<4L+a>hGUbO?Q4F(&8HEz|wvKr@&$p=wRpBNEnKy$F*|nL=b;4m0v6qo8`Kz1O znL77TIcajN_)Ow|F3qv)MpTx%uiCZNDL($wvr?smYvu&p6ui}{G>Y%7L;jq@75)=Y z%y<^@ z9!`Bsj}=PFk@+-jpI229$+E&5U{$$FP?VBNlXpTbH?Xi3ds^?Vj(uS;_Pt+O>=&6; z)o`~*J0tl}$Lou!$H(v#`Bmspw+c14a1DS&93GDULWjK=jHjKzHhuT#r2sqoPTQ-y zvQcnTQWcopLA^2H*XjzrIn^0C%|CnK=KRBeiF zNhSQ(^Y62)rAgUzI=N^=TUV|dez@&4yC;eAh?btSCTFTv+P0cZkR|9jKr zme4}_$l2BPx7`hO1?VqazUGiFq!Ul`F*OJ@rI5>o66hxjOZ%MT#+63NR2ycC>0W9W z{saqaph{MoEr>B(qbR;^eG1pKjomyfzBlcQ|7J{pA(Fgga?lt8b5~KtGKW&!@v7!K(i&?K*>^I@fR%i~$2kKv`vJQj7tqa*^gL#SI9C zNMOkXSc(ROASj|BRjvpKDAfh8jsgKB7@7joCW(P1NRuXQ5JYz=iCoq~)!Y{^Op41=%_qE{nA31+z z9HL6Amo;SaS}#2N!N@eW|Jr;@?QtIYRteomKASD=D5G0+E)74#ap)BojK4&cO8~36m598FXxW->7-_dIm635b7 za|=5NN?3x3kxQ6kHr}@OL~N|QDMcd-Zi(Qe@MoT`@v`xf6*^a>JDDx!QM}tOm2WE< zqvxsXgsTsKS*G~XMuNikq}z$*n7eiKl-ncipf(3{pm8E=a0c6%dv2-1m`6rn%8en- z@qql8e~A|C7O^Z|d|GK*WJS`{0KP?yRInZz%I_a&Z}Oz1S~8O`+ud*0)uE0Gd9_7Q z*TNRc;tLJc_gM=Fb1DaJOYrMj+uAOpZt1xYdxZJ?&*iqseNhGMdA^Wi)sJ?Ac=ghy zuMT}r9!XVcl|zESmnwYK>OI2rUePeS?>)9hus;i1(HnJi3u;055GU;EPN1JF=2gHV zOj9~D$rqt$(PZPIJCGo8VdpV#kjQADizF>PLkBmGFJo0fU`8%9v{dP|>kfkNf-+ep0^Sdv3G@8-{mTb#*gjyag9-&UJxXL`toOItR8yxd z#TY+$U2D{hg?@Dfcut@bAxIhl03H%3^7rw%lC74>F?yu3i>rzDGp1yBMSy@3K1Qc$xW7Q%XKH3f?)MB$3NIK{WloW4 zTR&YvJj)NoVL;vU1|+MD;dNU;9W$J}Wj}i(TzX$VRBv3vohq4iVe(JaU7c>=A!1-FT@gE*P0`)+Xz$vFr0 zcL*AjfNc*jmRi8GC8eYcQ^&Ol-Q8@>RWR?@sw!-=G<*A15R>N=7INY1int|R9q_QJ z)^@;qG(z?qwIt18Frodx9XA651K_6y&h=^m5DmV`S3c94qmX z9Js}Dg~g!5*b72UCj6Ia6zvPWJ{>Yg2JHPxy-I)X*p}!JCvV-AIwLv)RD9!m2;2~? zHi|_(D7_enYH(vY5}T@62YGgINNhgpoTq0N1u0a`QV8bY&z8Og$)N#8l-JF3CW5Cuurt9TDpg36f+|T7sxJ6;y*aN;EEOmk%7a-;DfF1^@ZJ0M;mjM;9 zSN@W$X>1V02@7GNN0PS& zV*{KtTMLU=jN))i(6^Fsk!B@;UIC{KTM*_6^BMt2!6a;#WoVSW;*9@5W47n!t`19xNN<3srX?Vh}o`AVD?0t6?#oZ#Df zO=4k8y-CAV?ps@(gQC{m(*u87UMYL8hkxXOF4K~K2eh+AS0yldSWJk1jU(K$yc}@( zDbaz+TLczC8pY!eA8X;6I*bC!u+u(Q5}VPh^eUF+J_s<@+@_BFSn!Y4-_yN3(w2=J z@(HIKYU>YP1Fkw9dmD`w&JQnMesLvl^GW~CeL2GdB&~B~9pczPz9XWq7Z`hqFsK@X zcgrN455SU~u2e+;uVQtPqq57zPDHZoG%}dx!c9y~M_zy7Ow4HJMI03zPzWr6ao*m_ z$_L9rUQX_sGP~#e;`G_Z`no!QY?GdqGuA4Zq;>Jd*JRf$EQ0A2<-XUlKG~sJtmpk6!Pk zpnd=Vp^lfBAn0I3=2-P=;OeEXav3KW%0=SgY6^RoDPd{~Wot^grRVM$0#~b(7SMmTzk7W~rNm|NkBFslpm9WXmV=izh_fl(iZ^ P!N>xOBE4fBxcRnds8!r5hF2Mqf{uhcTrlZs+5XNsa2F3v1-?< zqERJQB=M!s`#kUa{qY{(A7Abx_qERPyUz2xuIs+f`-!2xCM^vs4HXp?trk?xn2L%T zOR2kDI!n3dHwsQuid!gkOO%O^D=Ns*A4YZ0#m5Q8t>x|L1~Y~^x`g=k!{n)`&U(O2 zEm4+wx)5g{Z!yO|G-AQtz7%dMDtV<~Uq@$87>e5o<_1S7@cwFP=jDdGDDYZH>51$4 zs>0mi&`^JvNvOW5bEu~?*o9X~ky}0(LJ{B%LpgE>dwU^}kYEMgzvMzF^*`MJUhcn0 zP@W3B{{m&HXUMJU;}7GO5|a{j7MB2W%YemzQXnu8D8elv4wM7{#Q_pvQ6LZkl7RrF zx&Qw0QndNIxI&E8H2&5_X({l!qfovO03awRNGwQF%*Wpi00e`<0C5R`goG%CLKGQ- zKsg4BB9MIlNKk_zo&DjyD7X)T`;SCNC!YY60xt#Wzoy{rtEcyG!3gBvhN74Z5bWp+ z0E&qNyuJU->n~~~${6+^82^UR+UishgS=ML^&dyVgKlbQ}q7L zEAfBwLR9@>jwm00Qy(9%e6c=|Db(NBEmUWhplyQ}C=KY)B z<^N+h00j`>Pk{WdfcdA35`}-N{|1pTmyRRBk@kc+STBJ=( zOo(Li_TE}sTN^qL;Tk8CQ0jg_+|hRDJ3Toi5lCbr(W3xxe0)qG9iN<@=mv1F;T9ke zh_<#)XJ@CDKc~%8;i;9boSYmyapjn_>mIBA`SWN0QW3{^Ve;vb*`wPwPi_-V@u5}V zxHo1G3UrIx9;o}V?;UI|Z4Vz2aj3Tv3JMB7K0X#G8AL8*VPWxps&HOy(84MJsa_Fco6o#R;&@d&%vMVSm1i}fl3y5)$ZzCl!WJoA2W_u!Z?v(=#&%H~%J zvbD91kB@)atnZX^JE;U2QlfBj`g?9}o^VXY;|~hE-3=ddnnZ9Di6_PgiI7a2#m!+g z2mYbyP6FY0bNd^abksPO6!J>qQJokY8=JZhGd%A$22-n~s8n8FJ~}!oEiFwZlZAwY z#KpxM8yoR>Jc&diQh=V4Pftmd8|9+Z{`!+nPfzyu_fN@0N}GI2YHDgCpHdt}B9n=& zt*vAVABmWd@RWE$+S}VB5lM%KheQ&2XlQt5VJxD^%)!CI-QE3Q|4_$U+%a0=ZC&BQ z!Z(+P8t4{9G#YJgZr;??($d^oT~%#hV7R|`m{x0lL^wG)I*BfFI3oN$IyxjClC}@O z_4fA3%7EQ+ZX@E%{Ik@e-YHw4?~IR+?eF6wF|v64zOvH2+1c5E3J7H*zJK50ZAC?9 zo1LtzY;A2V<#0JYJ%vvRq*GBbr)a6&GYy{kS#Two$tL*Aq?b$VWNeh(S z2`$w9O{fc*wsS3I$M@qBPX~k1uBSrHaLZQ! zGqn9U;Oq26MbcJZP2*LSMTJA7365()7I6OX^(uQ~yMSMBX7N=91`vu0= z$&5v9NGK!IrW~IdYYep5Fb+iXpW+&vi6&L!#lMU39$wnV(BjZW5061wm1k^$xOg>Q zT&jl}>x8pem6@cJ42Y3C)Iw+W`2m{HObAsefAkYV8SFB(xcGy*g){keU7bK-XTE*5 zlAqHR_7jbM)>MtKyX6Rm_A~I|=k+tqS(9i5hUC}zxT++zYjD$HV{aY1g3^h}dMTMP z$g>o?#I4D?hF>1B#^*ee`=$VI8Q|j$k5S%s^Ek!<1(1=Oi%Ui@s}Ad1&reU`JGBfH z-Dj^PLperw*N5i)RjULE`)BsI4!d_RHh`q5=e$9BeAqHhG)k2go+~cnyty_U{yX}0 z+ac4B1UEqY`jd;2yaJ4LlT#pW3RzGD%P68SZ}b$ub>!1Ws+BjpU zpKu?5PgCiy@ingbYTu>KUR;w1#BAYlC~7OVzMj#SZPLP1R4t&amn5T9=HP7-PSFWqHHGXhn`@ zyEC?DzKFDEqv*BrfO{hl!R{wE-U2fClb(^|y%YIH*v}l%L-}U+(U+(9YnS4;pqElL z_Ny-^Ljx+2Dg(4(oG1NQKekE02PZc=L% zY6mR%hT|#k<(UuO%e-4SWRun4_2rpW;Xy9B%EwLqH-eLiXJx^1?}~xc0_V$6^CgC9 zli9DQGvEQ`5CeNT!ctQ^VWK-3QJ|iFAQ+O37jO;|xCB?7I=iDY8DQrs$8Q%jA{sjs z_};s}gA4NYwl^&YM|0P=Jd~SAq^`}iVD3?|G~FOM)Ju#e-cWgp_O9YQy!yLH)}Vni zUDP!{4Q8EnxuXzj6i7|RK&a>9&B~24NaD{s+VaYg^kyi(>S{VW4dvlqPc^|C`yD^6 zOiD%aYIbLA9!wCwJZ}1cem6KUV1scbjTI{DZnNaEl$WA!}uEIz%INGZ;f5 z&RpQ-N0zvO-Y%g@?lRlaNEWjU412&6p>SE+pV%7*hA-CFI@CQwKe8+Rep}88!_O2~ zzp=6VN^ixkS|B5}c#kvZz4uT)*wdnIBxoRup3C}ZS@LdSIONw1EF=WE5C$}Y4wTPQ zRp26HMC87{-3%P4;er|wYp#NXd{cNG`w;4`eRt7xY6M$}RJ&?#UhnfGW>Ozh(a;g~ z=-U=rk zJsoh>v#R%EHs$s7X-3PhYF)zK&s4b}KWbsm3}ws;y#crjVgf{JVAxO3_;zpt{6@wv zH-ep@d1p{PbhgGNcCF^snpVy)cWSpxhf=vSPD{T`-`6ww%n%Lkh%<|))ZuB{U|2UmK{Qd3Lg0+y9P#B9Hc zd2}z8J8*(C85I49u}JgmQ;wG8ZfYuM+NSgs`e&1N@|83t8=`lVKd+p{9tbIH#)ZPg z++sAnuK992inn-m=}HN$5IJPxs+x_}%o^r8;0i?&my+kbLsnrf^o05-+?$UNyWXN3^m6QU&~VGtEN$w;PP?Aoe!xn0^^xyyxLXb_uH?WJ>bM$=bd^%nj|)UG#Y zI$vS6wGMb=*Nyh2p5I6p^vNdyj%x zEiaAGk-VkCmbbRhSKWt#f8duRq_KE({8~#SE6n7!IaPsFy{kOSGdy`@5F5VGk^eiT z$EIUgF5wnE@KWcNd$!poi^x)!R8&BA<*npM0PFtwif{9&t}FCH_*}?0ZIxMNKc~P) z%-0L#Mne>$3C-%UR>5(LFRq1r%Q~Mf)bH@I86UF?s4bg{;*5MMJ)+2tE1aU}+DONWzn*N&v$FFgF%w|*=lKhr0r6aklT*Yw!@ zIKEXF@his7eDLdg?^)PvVC#-^+R~ez302D3u+N!@j|l&kbp8r6)#R1HpI^^77%VjU zVPR}0n)Z5=buSs|C&p6fQcuinhjU6T0hTGxXuN##L2%>EOh)JfIm$ukC?#DmmJ>d) zclIKk?s-ub*&Qy$U_hq8&+)e&S|<=9HIVY8Qz`8__!X+LINH#9&XoS)#_`F?DPHM9 zsY>TUDna&*r?+~Ekpk@o;Tdo!aCd1Sxr#-B@c9OPs|t3Ts}B_xkya>FvLfQCmUihq z5z%Sk#yZbF2k7O`;%_V*s@)Bc`H(yR!sg?(_0;YS5qi$LPv;x=lN4Xl=2Q;zSarnJ z5j(t5r40tjJ+YB=tdJp)`}29!tz9H^awX?Wa_@>NT4;G1i7XmC<#4&axAO#DQFY93 zxUL3iPZ}p4H28G6BBx?;I|F-5XYXp95(^O_8?VUSV++q&{(wS>SxS=-UR^NDu{N*$ zXEu^B#}7qW4ODqq<}VT0FL>8Lw|UcuLBVy`(VnL=m`@?oYN(8slOnswQ1QWImp$98 z#H3-Aja@K*?oiNxU+KNTz{2jqsKKGvNc+MK$kS=!QI?W0uq8hDpp(6Ca{UA9vZV6V z-HnYL!Ib2|hu6!H6Z<6hXmcaLx?$2`iG2G@dQ}s zO|yq17cQWfv89Rn!6$=aylFADvPyC-c2X#1sgDw}m_w^~U4N|TJRtMZJ|ArOdN}D; z(+}Y^$53j$k|raD0L0qVWPN>otyFD;%!pE1-COxnhj2C}QzK3-ChVjHTdU$#xKjHk zn&^D^3kN{4rGiUrWBMgaaf`WSJsr=6*#7H1Ba>5 z929io5gi&1)iRoAsN0)~W78Cwavc0FxZGsch-2}qSjCG~AfvT!xT}Z~y@+kzsXJEKW?kH$hp>lu!vby!r9&9g7*WRvO z{D-8{bBn{bhV|zD@BieCMMd~;1%z5#t(H0Q(pD^JcX9af&v-RYb? z6tJ?6hg9q(hQ(8DC>mbh}P)j=XdR?v5q4KPu zTpqjc9rTMM_OwM6>l});nq!~s=#J$r(KX&-9E|R*@C%H1YM>gUJ)^G_)AN=E($F!a zF2Yu@bI_AA8FHOg9Q9=n;@Rt^ZAAnf6LbrOulX08&h;*}up#Tvht`Bi z1}n|8s_0hdJ3CPG$@Nzo@EbES4upt+<@Z-L8twG5dcs=gNDf2+a}W^c)%iIHy`g7Y z{RD=Q8joadEpS@P$=Gcu>dRs8+%@53e@emCjiQ7-u zJGYzqThP$~cW;#F4=Iq>am&)inoH{Fi0HhQ0uT57_?1E|11X7}L9;AJ-mfwISMvotGY|gjE_(>z0oD zxvh$+%5^_MaE`mZmD zy2sPS6yPsz4alNDIL?T53$r9id*2K47`e-&QDSscEvhzNTrkb!p(Pb6A zc`^wj(mz+dg`M`Lbr!D0wM+froavW`EIff0i(SQH%jdg-UZ?x^-Qu0@`mpd}y1QQ| zre$Abx#UhrHzLe~-4PRCl9%5Jm1`^EXLuXGsoJRN0MF>bGo~LK;U|#`_J}LXdr%n4^^Pi6&?`oh?(V&~ zCovZ{JGl$2m_#Z*2f(_zqH2n0Q|LIkIzKz6+2*JXI4Xzw0eNEf{ zpDJO_!Yql+0_{mJ|I*`s6`>^VZ$gVjhSJ2JJf%bZ9uDD?y zof541)EH^NxU86YGQ}R~15I^(36(47PRD4;8CwT7-g$sbWshRhp!G@p+e&>r42jIpB44<#^Sib(F+CFT|LT)|d3Qyp#PU;#!kjw|s ztD{w(yq3X5V#-;8Xp4LAQ|s%XX7SV3!L*l|%y4+fooJW7WfK~++)9z$t8&KL!tRM2 zG@df zdEkQM4%hYC+xd5SY_^wBZRd`LmQ}~nl*iC_`nwyz1#HTnbanMK>|&-I$63%UToQ8K3bTc?|UUtZ{>G0sdQR-EYVT* zD_m2^lJuJifJhEsqI1?OD=>SYM^8P!@frFW+o~YyviX$Ku}9ms5oJMUzzstU!;(CR z482@QGbIVod4p~-)28vLD%!TKb52_*v;R?8hr^l@qvNJSdN9f<)cRF)WAp>7tjQvw z7j>W)X8!e6UfotuIjyAm`k;w7)Y#mXY-VA6L5kHH9VM%zw#eb37ab^8|E8$iq)AJE znceUPaWArz1O}E&8z%($0goF$2go$6rVbB0)Ua@s<`1Z;+F99#s)|;EwPvpOn3*dF zu6GtV#Z|I}Mz=_*v1a;a3fFgbade>r*x$^6MG9IYb zE_{K&=r9|rKZL9^K(xXH_7rmn{iTv*=Fn;Cq`BYC#>zEzau-4G6;*|0UN7Nzgn!5M zQb}3l-dgZ^+CES^LsJuPnn#;8lbIAyAD$8OMW$(&Qbk%ldrQ zaI04<+xRo}88nIPc3y5)Gt%kjqEH=1S5kEgE2$imYA{G>C}A>Pd#(2z1|+=n*~-ag zuH*KU#!*xPPNzJ{#O#6r`$(swo{pGKR8%fACycHvB`+e?cJqx1}z=^Bg_)B z$-n}M4!3g*2lH2bb{YVtv|y4v^b<{)e%jRVuO(M-@Fr^49+lWyUMXm@{33sfS`W5X zA9)iW?_0qzCtI-WimkKS% zG7|msOmEIMNa@k5C-mLE9@B!hD&H?+mct89Y#6S=$B#2LYB6o`pB|@0dQdXyxW<>SBrT*22-u5+G-9YHg`zX=>r^+;1t2fPiEL*3fa&QB)8#ceH0S z{X@g%W$*OFjesC5=H+B+ZfofVFtfA? zB@J^QTXO*mYB5oOu$SPI0DDU}Q-GJfor9~Omk9M=xq?sEf125;0e?x{Y(=R5F-k{K z1t96@VhP}7<7PGI;N%1Vfoz;Syg(o)3xJD*lZ&0>=?i4#+l# z5>%6t`B&G|oe1@NH#a9ic6LusPc~0(Hb)n0c1{5Sfj=_1xLBVkSY5px+)TY#9bDi1 zM}m~4tGNr<$qnr20Qe)()XdS{O@#W%(tjY>J1HvumtY6ie;xJYGIlRhCw5LY4t9I{ zKe+x2!?k?s}@vwUHALb|D{ht;6A$+n%P}v3i6ckfC zDMxd6drJp5IVln9rzdO{U<*N@z?1hlcsT{QCHbYfIXT~Qa`Eu<@pE!>N^$Z?^YQ*i z#{b02%OL~geaj~)$uGgh$tle(z$Gm$CCMuwEe+)10&@QsubhLco2i4j<$v^opY;CA zEAfBi6_j+bG<9=y(QtIM`%ea_ymxeSbbasW1dvn*0vNQx4i=7{u8e=e^AB1nOBb+* zrG<=(qdnlSe+9w+gMKMKpcD^~M?!+@AKU^`G6GWE5VPp|1DYm)AW>qe=h$k^`CD3t9UFOo+`%WsWk3gygoct9D<61hID!N+}O@JQ_A$> z&I#4WN&WDzYbV#h_k{)UJzT9!+NA0FpNsf9S-$P7Xu-oY+L^Wut37L{#}_xq!N1VM zMmf@FtP|TQAd}X$OV8gWkFV~dh$oQ5PaK@xFj_#NZPRr#2O(V>^4?Xy_s`xH&M|(T zz|qLSjfA(2t|2f7U)|h2^M%3Ycf2yY&adx35AEFCKioe&{+QU@J-IOTKX1Ws}4yWuk>>kHjfd-Ao^8{#4%%6clXG$Ny6FFyT?};A-~r4&ip$!5_&hWR8ts? zaa@SVzf|sAO3zkiW@h`$QSI2iPve?R)pFs`ZdCj4 zf#s8ljq~OGE7sI$*0dSs)EU;)8J4t}i|gClhljwNUha&Ufc)NynPZmp8P@b!wzQf3 zi`&DqD+HQA6u~(5)X9~t!<^B5PSaexnDNeEE58=^*wSYWtCn|9uL!g=y}qsYPH+93 z+A^tFF{@q*@7YZ3T4PI_4(wRFet5vv%ig`b70sPp-#w9q&f!Z#?jLUBDn^&KjuC`o zkcFbqRI~6^QZO|#3@aC`L%+JGe)mo4+}_@P8dx45ANhB^yP zsOe3gZ4`Owk|c{~26!&jOeI_in0_Hahs+&C$NPz-N<2!=gOQ zOh2!pHPL@q^l(!o;TA)gn>$VrV>WHn!_A@>x7bRiXjrstSAWU8!vCNR60{^@rn7|Y zaAD-zb}{={ci}mClk@1QGm_CLIq>pSa(N#TQh&0s58=cHJ5s_Izj=dvPdBLcVHpwi ze195*p>5u$kc$nNqd>A%xFFY|-_IZhne187RNoBxg#B4_%(s!B*=}~Z^ zL>(ZU^5)=cNHBy+zVROV+>_CnzSaAM^_$QR{yY+}yEs!QxnufRn1J<6yZfB6a%3NW z0e5{9*pw4>igEkQ0j$OX0-cN#_o0y%Q;4ks!}A< zmHyDqI!Ck_!OpYFuDk#v(=YN?5(E*d(}Uu=&1TU|>R*Xc34V*Kqv<*ZhUfM3dgp>Eom+v%y1B@+C zHZMv-4m<+M}VOEjt(J;mXH~E)sMF62yltxCcPl=kD5;kafnl zUpYc(cSDfeTlKOW7$?$3`?xjjZ=@96m(}X@?01<3D`JR*)Cm|yD?B#N#Ks`1)+!Y{ zsiMKP_Wf;AkYVXI6H2Hnu9EjC4Prw|f;rY8NBj%HM#@J!lWaB<=8PyF>VlSjk}d4F z=yb1qX;G!!7p{%ivtj zx>$KFU^b2t=gFj@F4NQ~MOdLx()U_t-2bM<;~~_z$X-g*)KBGy98on*{}~!o`A(37=4MZ2_v6z!1Y*VOHt| z?nRTo09glLdF+^ZvnGpTG_e-9ZCWS58X65n-?3Axcx-M?e>ngJVae-8)Sw8GRPv9I z$&i@CR)r*3`Zhi4;oA>pPkI3YE@c36N8;(bhjMV8Y6o^(a6;{=+p5|Ev{Q{DAalEB*H8tVG zQ+pc4U+6M?!2k*=PT?*Z=&mXHV&IVpQfjriA2y0AoqFh)%Q$n$S`ao`FF&SB8zKNe zl%CezEaB)F&eH~?)fM|{Aa$rCUM6E&lR9F-wH1ql$xTJgPqeI&oj`{U*AZ49vN*d7 zC&oOgP>z=+|5-o}>cb5n?s6%r9PFK>3Oad)B`pp~o_`6|#63)irepqib0mJ#-Br9r zXDR$_<+mB3Pw{5J9p)RTH)Kz}RF+dxkeC>{Y2!)|2ltp5n(p;fQD5Lh0Jo~{YMd=G z4Z&{mWy-UMa4#k%4eY;;W=^1GgEfj;i;ALan^REWJs{uG-!#x3l28FWnN+$r_h@yP3XrnRA-SJ=T=y3S&pt@+-m{?zl(>&`VQ!so!s`A; z4jZcMadq?u89Zze>QIAVpSL-jtqQzOsx{TM+GY>}fEsNY^xU;Z>M;=J92%Hr6Ssh^ z2=E$@f|9CwJ?@Qs4@JGW8YXeQE}hq3$<%K?{i*;8Ef?1>tAGCkkJd|WC*_N`F5LL) zN7k-lKK4|X<68l*klmoz24!L**K52VI@U4rv->>CdV%Qb%`VRjSGoy)i>Lc<%iVBQ zy(W_k^8&t@zdU-XU1KYvBic$NjCB7tIUai7N^ z8G#Gi^Xdf56hn;@alf&5b$-i4u~1*YXd(an&a#M8yCk+msd#2@oT(1hEFhwr!Hm+w zk=3YK$62;AKl$9fL{B@gZG4ftX#&PJRc8SKx|$Gv2;RlL!^$8>^=GUf^T1gp;=MO~ z-tL2hu~JQrPwl?wr>iVZdn55in=rV(+zXir9oz@wV?R=>nPN`H9M6^M*LY=|{!RT# zhBO5>EBV#V=jSe<#e#-EZ$@#c`I4i91>(7vr}L{nyyIXw#4sgww)JcHC4fy;m>H&XBlqjc9|O& zwB#!WHkQcWtiMz@mR5U>O?@tRlj`n3y0e~9j9BwgA6iK4{Vuu`vdNQL6%pBip-^dl zH3i+8@fjLwgrG2*bKS$Qi8o4}SX0HD?+^0+`&d3FKd`|RK?tpD+I+WHN9^fBh2Cgp z8uS^>bchd$QYVTZ3?d&~^WaJxGg}$rd=n>U@BECLOwT9?WL@*oO^^U_S(q-}>3L#S zN+TpZ&y!51*59pc*7HW~VRF8Aek9+nBErsfX#<+&L`i)~xrXrarih9b?w*|`GA2x=? zig$&gGI&QRvqdV_7)nB#KVMc1iJLVD7Bh{hd>DXH!}?FMzAV4^;KsNU*5)&`SC@-A zSWU8AaPAX+Fd5_RopfczL?o^1h^HOudLUS)s}S~kv!$|p%RvIK1ZL-B83`gxr!eXI zyzDlu!Jz*a9m_eM5c?Ze4ny`3+IKC7GhZ+#toJL>53vXn2^zy~d%gv}l&T1zBVT;E zfP}-9ic`GP#_$97J+|T>m>k8*0u2oPrm{cwJ&Bi_Xp(nQI*WuRHtN%DkK(hb2pX6s zl*$bEQ|rKz+Gaa=*|x7dicO2FCH@6Us;=^7=6#t*!GaAUEp%cskg7%iIQNT{XQO&P zbNE+~R_I~qb7KVP8Ysbw@y%Wx0FF%;PyK<%&W@nKXeg9pHDg;g1%_gE3W+lJhs5W_ z2U|kX`xF5by-nY<6R;A;C0Z~|O#T2Rl}w-Up3x~-Qp{y_n)XzGe&rVK?rWQTsU<6A zZreguEh~AuDbUsUj$>uZV~Y|K8ikV*g)w6%Uj502MKuxK)vaR~ga*Bp`LTWZ0U$E@ zfmL*(^s5!;Gdbxo3gJ-hI@rES%9%hWZ<$~X>@T`%;Zns7uUp``kp;5XQx;V)(f}n8)2O{49Z-XBQjN5c5r+6;i7om&PjT~LNW2$_9S<{)k%WshT;AgYSPGNV`wpGjAT zxTx2$?`>GocB@Z`mhHzSn+a@k93l?Bi<6=|gZMNs!Id(R(Gsa^x0*_eNCi;uigIFRTTwAN<5LPPt8NGGXrTGy9n1zHt|IVh{_=bRr)_Xq3>c(rXC zi%35+c6p{dkX}k#BVS5(Iu2;IST(BZwtr&0k^saBbtd~0BA~Jl0AvN>{1`uv(ZZT~ z$!e^Kh@;H!<5Bla>4_aM!9IDY>nhz>lgVzM8Pl;za1k~+M~UHicG~z*S}Mux$Z)4r z=1F?V&B@eDnfBm%!Y!geT|kyIRowpCeiKASg1i1O7CW5h%fsO;)+rFfDEKB{b{HP$q#~{301#IeXaad4uuQ}9pFAIWGm{SXn z$KthPm#c&`pTHkj1oboseo3Ffh_G&^gR^6qEh1ePQuBHtBqo~FIGtt!;C z)wF8Z6)7`>d@Vu$;y32%I##El0v0Smm7#k%BuztYwijcbyyIs#4 zwpA{anvvz^twdQ+SuPaOx(Dgns`M49jR7&5GfUS?iG`yhvoEoM(J6ekX#S85f)6xM z*pvi!1@$v0O8mG3q|l)Oe9z%D1@t%5 zpa(McgYxI;A{c`ww2zv8JTmn&Nzv&Cl%Gg6>ZQ_I&6t7iYYpnkf3Hy8$3=N5kPi+J z-AGyf1l94X5rAkiWaZ5BNnGwzH&QI}bt_H8%prIzi6hCbe-f-_-+!_ef#MR-AL<(E z$HgOcT=zda%^r`&RDBGjc<|5~6DQ zNhvC==!Cs_vjRUWne!#sG2qlZvVQ!g_0J+$9D9yZLDtPK=*byeQCb(QauPARW(gWQ zpkHy_t5Vd%wFou3HVNlvP$3z0Y@tK6CC)^pvtu2Q5<^(h>ItGb{K(b)FqG=&UB~8| zJzWtof13dl_n7yGJ>#a55}4%!#_jAO`eWjlBnqS^q@H7A6)#yZ8%Y6`Jag~A&c-pi zT75NQns8_}wAc5*XHoRDRh%f-glUkGbVz;% zxxLM}9e*7rU=UM&l!Zr~MNxmO8B0Ex*!l@_PgxnT+ zK^cz~Z}F?H!+Ye+(#e)I6gNb!faHrD!F(U^4%5PUOOoG~WQF6yZEBapj>iXjxYmM$ z{a5&whWALgmy$h=U83W^{5)qtI@G~=iz(iY_i zhT_v1_PZBCIMXPKN2(TkQm!UD;6g*#hv)qA1rG03lgRj3$aCYJ_;7T)UJGhwzv57k ztiNaIda4?TF`4LR`H#>8ivF|egN3&^7vv&hIsuhPzQ|%PUf3LN2XP<<+(SGf!{|cP z$3EP>>@u;@w*J621qLE4k74ce1MYZ^ii9e(8W?}MPAl&BDs*wko?D16fIXtJpplzW zwdSr`-cdkeW?maGgks`FH#_zCVbAXroU#0sJk_r^}PvsWs$!p3>vgzuynE^g**#ES1F{3oY_b+ z_0`Czm?U?J6;xEgF5|_*ah@}nR?KQnPsA9*KXEHi9o0?D>J~0$k|4G6QZuqy4QMQx zZQABuU?TESjgOE_N7B?at~adNRj zO5ir`_4vO^>mjXnk?wI;mJThYn+GH!{$$uqg8FGTt$Rfd?h4A^W|^}`9U3m^Ab;$( zlGNt6-vU9uNnsYxka8q5ecqmVS3DSIv>qJ+**IgdC$ay+Nl(n>s1RWrjy+a8572Jg z`m%BU=@;Fb0u5OOfjeo;n4TJ`%q~PJEK#r{6{t&p0b{A3#W1N|pGu(UkLUk2Uo!p3 z-6^z9Scr1q!h>^PYFtq84s7YXeAlPbgxvPxv8otvpW- z>F4H$NuJHx3_Tehz;)zIfZN&UtbB_NYm z3DVAd%I^5<7&3A4q3e-q@6r7+!Da+>?uSw&5DLg9?OqMLqDa(rpXF26^UMq>ZrV)1 z7-LYa9`eDB!wbY65(Sb>E{2AhTR=bS`1W7R4(NK|*L(`S)Sz;}cm2#nP+}@txZUF? zVgVancXt+?;J-_E_|kQS{B-Q#AyO{U39V}JCfEyMl7(r4xzFGXI5U}-7IDkxv( zH_UW!68tvxQ+um~3y85kRCMJzbs0yAZ{NU&$f^*kJz6bcXk(1c;Yy2&oerc&CpuiN zuYeev5+2ceU^@Bkn=Yq-w)snZ7_)kll})=}re>45s$fbe9iE4?nyv%o>k+PVvqlm5 zrh-^q0r${DJbz`3ev%)#N82pyzvdlt4h+@c2LLqRdlBd77liP|nEhpbX~Pnc{^ikK zPwck;ZGW{c1%H5BgN_{_-QyX773wvdlh%(*2kjoX$M~Zg#nWk{*tVm z{h;L6h@Fb&WGQ~TQ9vG3WKOd3)&M72T)`A6kRqbqP=`B#Y(#%{ZZ*hc;i%Djy#2*V zC2>|`VeQQ9yj=m1yG(W7zNJ)t;({Fs?x8*z=Nrvj6CNNF(=Clq^?m}~n7vM%U`Tn8 z#_e}%T<@qYY}VyxE9DED4Y@U36kNYb@#+Drzzj}9_6x3m#J;PT0Bd0p5a_sTxo-n> z-Q`ih^amxl6@VL(1Emy&B$mli*DIeFns4uT=oZe=cT~^xEXF3#;W6(wOxLcDu93bo z@!i?e!7Gs47}lakz4f`uJje*{AIWhUjM;e`c+3&nUtlk&9;gRA&D zFlN=w;f4|_2?bMl880PggIS?zeR1@FHYb2iGZCgy*{A_axR&3@oZ4)?>BE~(IhrX& zQY3pRsNg7HQe=0Pc=H>Qd<;)3xw7GtbFLSf-ywAWih~yc!|F9(*lwita;LeltBjDK z0WC@v0mg_D#}l&H^5Gyx#zs6IB@q^rW^7glTFFlNaTq4tL(lyLR@ zCY~b#>!%Gjiq>yoyVPxt2{D+I+_C)hugiwwkMzb#xx9K587c z>t%6+d`{!TDk&KMw4qYBii>Y}-i-A9LQ+r&JmvVK|7W12AIaNU(~v~ctdHvXIn6OB z3h6On+9_GaVQ&~xvgp6iyIeVd=A?N}Ys)#UTkCZII&(o%pT|)Xf>H?nf4nQ$7udhT z_7B}lO7Po1d@VL@M&I%9zJBU%d5iDPYeiW3E@SE2@8nz2U8;Ti+zafC2bZXWwFV8FwGNfnzMBoNU*B|Fe=XNNuNZ0n!B0P8aCtO95a{#uuQxgboqD#8 zZt9kg5>hIZi|LhwFWMe&U(DsS?bV)b5o9!0+*W3%iq!|4UQjsl+7b^=IzE=24<2~+ z$xay%l+EW2Q!w_+xoN~x+ph02wA)fM*ay8jE)SrLnTcYec>aZ!f+YHgDab;X zX+(338)l(vru-T4jg5J59&*te=kIaagBbq#@x}A;@7ObcR=?UvHixOLBA$G>h!ixP zxT{ux{CZS>w>taoZ0P~5dHNlTk3Wxa{)Y9Tr)kgkXVXjB)js@f4}NQ!O98DHLJwxaS?Puu)9LI*wCe;@U$K`e@r~PkvtH$291wJk&{$4f|ekj#WfL_FQ z=r1^*oF97q7@8%Mu}N6GCUn1OVAeVy30(Ruj|h%cVrKH(K%J!#qaRhJjV@2DTC0Aq zDkre=lJTK%YqKUb>kIt1!uhM@FeJE(8@>aT$HdvH8GC5wSFa-9_cSno4>d!kWkIF` za81Vjt!AQ5@JtIup%L;tfcc^3XZH6pIfVhFNpnld{Zc`<{Poi7G%ma%Ez(|&rU9A9 z{RBwN8bPGdYpjGX*UsuOj4xky#?Kda;3<83tmt^0EOW>KExFIM1a_W{EuFXI_+1W? z!dsQpcMjXD1x0H19%thF!=t6kPHUDy|o&s`Jv zuWRyN7xq?ZryMrB{(iIOs3QLi9Q_A4GC0~Qd{ou`mF|me1v_ZkhGhErsm@Tm=60-3 zED{(KBp+l^_`IN)Ue!oa#I%bl{6ocViGis~PW}P7GGz)Tcx>|=jyE*9&0xEB9K`U1 zn39-|Zv7cmXC+p{i)U%I028x`yDymMoP8bIeH=|ne*^ur5MRON6?3rR{1fGlIiRqQ zr_U{&ea6`KW6go&GG*XxeHBIfUU$snUC`(X4F6HOq~r0ZZF`RGAkp5Fz9Wu>IUYf$^)l>5?ucU)G@m#^{~$^9TXv4cdrz{N=G;E2dev%&^1gHARht)kU5U>ovdExjjAGchy#;DE%C;? z={1A)VqZNr`6don<3{>l7b}+991jS zp0P)K|Gd?4kLz*^fOU1*1nB-nT-a!?EC8XTpr8QWMx@vqT?);%dX2Hi&wh2^ZELJp zEXQwTyLB&YKO2|wIo&^Odp|XNMj)gF?-{-y2C;sAH$mxZ_c#!tPL|xYxYDd$Nowr8 z*~=>_nPAWo*d^n0${TL#cY}+%@=L>G|zXH?SGStRCYyg=8qRPnTV>P zq#?-v!{(e;^|XL%xO%z5iP#|OVeU0mBQ~5%7`j2P$XdkTbaqkrf<9cfqw(hJL|Nm~ zZ3_L}UG>=KoBmn~d~D3B#jm!zPB#Zj!m7}1{f)}kskV5?YJ5IzZVQa9()9-Ks2=edm1TX3t9lG64C0X~CivXC&I0rC zB$u8P_xZTEd87JHWwu?nC0A-FzNiNg*=9l+eq2ZeV154aGa(vWMzPAmIV!9+D6Pe% z%}j)h06lSpPhMSCmkb-5yhn_AvM)-Dl4D&P^)<;>Ukg$BMxSLSM}yTo4QA!)--v#K zeC?9734o8AMTa0=d3cGp!i7>6PGgMcT_-n3LfsQwhmAd_4p4#qS8udm2V91A6`-1^ zJy>fyQY?BOJ8KK`-0a2kNn}^W9?BQWJlsT7`QL1d`3|0cm~HfT-*5MqWIphPSwH%0 zjmyd&h{=dJ5B7?bG*qcQby@#Z?zWDBy+|&ewARS$BR?EQTC}|bthM9HUh4!A3p0}+fAh(%1>bSSZp#AAAnPL9R58D|sw*U%$ir>V| zp;Ua!EKz$iQnHjdNPDv?t<8%T2Enanykcx?{FKW}(;Q8}8%N_%19J8;cCXW;qsa6e zo`%TPW%!(2MtH<)ey8+LC$_r{o;AC7j?C_N=(7vc9>O#MPE!O0U6&4&i*a+YJN{D@ z^R0B}7{$|M$xAw9y0`Tg-H%S*JF;b84XPGBc78s8W1C|@3Q~8|Q*G8qgX2jPw$CiD zBCz96=hkzAkNy_xik@UYTFy>?YJT;J9qg@Bb67vx__-GaR4LC9#yw=JZiPz~V{Dm2 z2Jgw=|6+KIrfJ-%i#JpE6jli0A7n-Nzjem%ps{OSol#gJyHbyeGCzBcF;w6qFQ58i zIrSKZmu$@ocm0anD-)=cZXZQEY%jMei;NaJL%sA|QpWaqNAoiilHl^y@a?I<;nwuE*ohUyTmQ55n_Dgm$Ayw;&fC?%3 zETR}-(R3L(n- z`ei(zcqJiij~%9gupNcowE{Np&piCkN<7nOcVBq!uqPI@diwpcXbBj6Q!Jx@CXYV61O zlwCe4b=WL)w_Pgjc|D4>zO*y!IEbS=KDI35&2M}-+uhik%=@kX_1jI%YuA{p+n(RH zljS7F&ij{#OSP8Q+6gLs-+cTAt%tn|pC*|>vm)BBJ?AGLuUez(`^2utBiJ9t=UzX~ z9Flv^Yd&I&V7Z@9u8g93kjotTUyf=UUAMPq9lUAppl>+bqR(l1=-9C}7Ld*IJ8P}- zyByv0d4m3Bp?p8V@j%&sVTtk)YhN=b;1pK86vWsUaJ@Ks)~(ttF1TrDpOQ0Xyk~4A z<_Wy3eO|TT%)PEAkGw4$;Yqtl^l|9q?a(u`->>uY(TT94Jji_~xyJ00MIW*UTbLQ- z8`pwC&@o*I4H3UUs=oDrkR8xr5@#0E6X(5S4fYE@aUt9Ltu4!pMgC>293*(R1%7mz zu1mvie^el5%G;**kn9u?%MS(hXaU#zJCVVb-R(1ea}rC-I{y&)iI!`eJ2j4lW8x?ImU8Py3#WGmhdMH4Z94tJUB|$!lT7WFLF(%W;RS5vc%IP9p>#2ZoO!W z+6aW9sGHfD9ik%NT>Fl93X#C`{`iYToix@~a_BgN&StRWOc)3m7%#Hhoklx6FZ^H> z>`wpP)^wGflsZhDbQzNoi0Wwm1C_yX#tv?WgP6~{U$I^T{8HFXG4k?o(Rl=)T>zvX zO)})Cs*7%^xY}(tq!$qb1nXdv`zEJ?n-%C}Gn>8d+K_jZf~S7;x|oPEB7*nbEb^Gs z9uSCu~` zl}G59jo@*^#7PBQPp^E@C$o^NCdLG+f0?KeJ{|N4C#MzIfWZ~q)~rH|Dk)dvYuM7T z?t520>_N}zv%OY%9ktm-K>CYB0(G=xfaC|N;z^g$BhNR$i}HWrXIm~1oP2UGn)_Z% zgZ3dHoTd%OdX2i3?%E3;#B&3ec#<3hEL@h;`<6@~ zBBm&b%r|*$h|9V%r-Qz{HD7M?9P^I#1*=o24*MexwoC3|)`xnWg(lst?1xvl`xU>K zudE+j!g*x<2`WhnaXn$ZQJ;D72Bp;<_H+kv)>=N^wTVtrjP0jZ$v_3@`5l1SDZ#Qo ztUg&aKOpbJ<^~D=A0O=db3kyeO7v;DFO)R&v;d~EdZg(@_?)O8FwoaY_U9PAoV1cu JrG!cF{{k~A)4~7% diff --git a/code/web/backend/application/_installation/01-create-database.sql b/code/web/backend/application/_installation/01-create-database.sql deleted file mode 100644 index e0ffe92..0000000 --- a/code/web/backend/application/_installation/01-create-database.sql +++ /dev/null @@ -1 +0,0 @@ -CREATE DATABASE IF NOT EXISTS `huge`; diff --git a/code/web/backend/application/_installation/02-create-table-users.sql b/code/web/backend/application/_installation/02-create-table-users.sql deleted file mode 100644 index b39f832..0000000 --- a/code/web/backend/application/_installation/02-create-table-users.sql +++ /dev/null @@ -1,28 +0,0 @@ -CREATE TABLE IF NOT EXISTS `huge`.`users` ( - `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'auto incrementing user_id of each user, unique index', - `user_name` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'user''s name, unique', - `user_password_hash` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'user''s password in salted and hashed format', - `user_email` varchar(64) COLLATE utf8_unicode_ci NOT NULL COMMENT 'user''s email, unique', - `user_active` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'user''s activation status', - `user_account_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT 'user''s account type (basic, premium, etc)', - `user_has_avatar` tinyint(1) NOT NULL DEFAULT '0' COMMENT '1 if user has a local avatar, 0 if not', - `user_remember_me_token` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'user''s remember-me cookie token', - `user_creation_timestamp` bigint(20) DEFAULT NULL COMMENT 'timestamp of the creation of user''s account', - `user_last_login_timestamp` bigint(20) DEFAULT NULL COMMENT 'timestamp of user''s last login', - `user_failed_logins` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'user''s failed login attempts', - `user_last_failed_login` int(10) DEFAULT NULL COMMENT 'unix timestamp of last failed login attempt', - `user_activation_hash` varchar(40) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'user''s email verification hash string', - `user_password_reset_hash` char(40) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 'user''s password reset code', - `user_password_reset_timestamp` bigint(20) DEFAULT NULL COMMENT 'timestamp of the password reset request', - `user_provider_type` text COLLATE utf8_unicode_ci, - PRIMARY KEY (`user_id`), - UNIQUE KEY `user_name` (`user_name`), - UNIQUE KEY `user_email` (`user_email`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='user data'; - -INSERT INTO `huge`.`users` (`user_id`, `user_name`, `user_password_hash`, `user_email`, `user_active`, `user_account_type`, -`user_has_avatar`, `user_remember_me_token`, `user_creation_timestamp`, `user_last_login_timestamp`, -`user_failed_logins`, `user_last_failed_login`, `user_activation_hash`, `user_password_reset_hash`, -`user_password_reset_timestamp`, `user_provider_type`) VALUES -(1, 'demo', '$2y$10$OvprunjvKOOhM1h9bzMPs.vuwGIsOqZbw88rzSyGCTJTcE61g5WXi', 'demo@demo.com', 1, 1, 0, NULL, 1422205178, -1422209189, 0, NULL, NULL, NULL, NULL, 'DEFAULT'); diff --git a/code/web/backend/application/_installation/03-create-table-notes.sql b/code/web/backend/application/_installation/03-create-table-notes.sql deleted file mode 100644 index 38d0368..0000000 --- a/code/web/backend/application/_installation/03-create-table-notes.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE TABLE IF NOT EXISTS `huge`.`notes` ( - `note_id` int(11) unsigned NOT NULL AUTO_INCREMENT, - `note_text` text NOT NULL, - `user_id` int(11) unsigned NOT NULL, - PRIMARY KEY (`note_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='user notes'; diff --git a/code/web/backend/application/config/config.development.php b/code/web/backend/application/config/config.development.php deleted file mode 100644 index 1ac7c5b..0000000 --- a/code/web/backend/application/config/config.development.php +++ /dev/null @@ -1,129 +0,0 @@ - 'http://' . $_SERVER['HTTP_HOST'] . str_replace('public', '', dirname($_SERVER['SCRIPT_NAME'])), - /** - * Configuration for: Folders - * Usually there's no reason to change this. - */ - 'PATH_CONTROLLER' => realpath(dirname(__FILE__).'/../../') . '/application/controller/', - 'PATH_VIEW' => realpath(dirname(__FILE__).'/../../') . '/application/view/', - /** - * Configuration for: Avatar paths - * Internal path to save avatars. Make sure this folder is writable. The slash at the end is VERY important! - */ - 'PATH_AVATARS' => realpath(dirname(__FILE__).'/../../') . '/public/avatars/', - 'PATH_AVATARS_PUBLIC' => 'avatars/', - /** - * Configuration for: Default controller and action - */ - 'DEFAULT_CONTROLLER' => 'index', - 'DEFAULT_ACTION' => 'index', - /** - * Configuration for: Database - * DB_TYPE The used database type. Note that other types than "mysql" might break the db construction currently. - * DB_HOST The mysql hostname, usually localhost or 127.0.0.1 - * DB_NAME The database name - * DB_USER The username - * DB_PASS The password - * DB_PORT The mysql port, 3306 by default (?), find out via phpinfo() and look for mysqli.default_port. - * DB_CHARSET The charset, necessary for security reasons. Check Database.php class for more info. - */ - 'DB_TYPE' => 'mysql', - 'DB_HOST' => '127.0.0.1', - 'DB_NAME' => 'huge', - 'DB_USER' => 'root', - 'DB_PASS' => '12345678', - 'DB_PORT' => '3306', - 'DB_CHARSET' => 'utf8', - /** - * Configuration for: Additional login providers: Facebook - * CURRENTLY REMOVED (as Facebook has removed support for the used API version). - * Another, better and up-to-date implementation might come soon. - */ - 'FACEBOOK_LOGIN' => false, - /** - * Configuration for: Captcha size - * The currently used Captcha generator (https://github.com/Gregwar/Captcha) also runs without giving a size, - * so feel free to use ->build(); inside CaptchaModel. - */ - 'CAPTCHA_WIDTH' => 359, - 'CAPTCHA_HEIGHT' => 100, - /** - * Configuration for: Cookies - * 1209600 seconds = 2 weeks - * COOKIE_PATH is the path the cookie is valid on, usually "/" to make it valid on the whole domain. - * @see http://stackoverflow.com/q/9618217/1114320 - * @see php.net/manual/en/function.setcookie.php - */ - 'COOKIE_RUNTIME' => 1209600, - 'COOKIE_PATH' => '/', - /** - * Configuration for: Avatars/Gravatar support - * Set to true if you want to use "Gravatar(s)", a service that automatically gets avatar pictures via using email - * addresses of users by requesting images from the gravatar.com API. Set to false to use own locally saved avatars. - * AVATAR_SIZE set the pixel size of avatars/gravatars (will be 44x44 by default). Avatars are always squares. - * AVATAR_DEFAULT_IMAGE is the default image in public/avatars/ - */ - 'USE_GRAVATAR' => false, - 'GRAVATAR_DEFAULT_IMAGESET' => 'mm', - 'GRAVATAR_RATING' => 'pg', - 'AVATAR_SIZE' => 44, - 'AVATAR_JPEG_QUALITY' => 85, - 'AVATAR_DEFAULT_IMAGE' => 'default.jpg', - /** - * Configuration for: Email server credentials - * - * Here you can define how you want to send emails. - * If you have successfully set up a mail server on your linux server and you know - * what you do, then you can skip this section. Otherwise please set EMAIL_USE_SMTP to true - * and fill in your SMTP provider account data. - * - * EMAIL_USED_MAILER: Check Mail class for alternatives - * EMAIL_USE_SMTP: Use SMTP or not - * EMAIL_SMTP_AUTH: leave this true unless your SMTP service does not need authentication - */ - 'EMAIL_USED_MAILER' => 'phpmailer', - 'EMAIL_USE_SMTP' => false, - 'EMAIL_SMTP_HOST' => 'yourhost', - 'EMAIL_SMTP_AUTH' => true, - 'EMAIL_SMTP_USERNAME' => 'yourusername', - 'EMAIL_SMTP_PASSWORD' => 'yourpassword', - 'EMAIL_SMTP_PORT' => 465, - 'EMAIL_SMTP_ENCRYPTION' => 'ssl', - /** - * Configuration for: Email content data - */ - 'EMAIL_PASSWORD_RESET_URL' => 'login/verifypasswordreset', - 'EMAIL_PASSWORD_RESET_FROM_EMAIL' => 'no-reply@example.com', - 'EMAIL_PASSWORD_RESET_FROM_NAME' => 'My Project', - 'EMAIL_PASSWORD_RESET_SUBJECT' => 'Password reset for PROJECT XY', - 'EMAIL_PASSWORD_RESET_CONTENT' => 'Please click on this link to reset your password: ', - 'EMAIL_VERIFICATION_URL' => 'login/verify', - 'EMAIL_VERIFICATION_FROM_EMAIL' => 'no-reply@example.com', - 'EMAIL_VERIFICATION_FROM_NAME' => 'My Project', - 'EMAIL_VERIFICATION_SUBJECT' => 'Account activation for PROJECT XY', - 'EMAIL_VERIFICATION_CONTENT' => 'Please click on this link to activate your account: ', -); diff --git a/code/web/backend/application/config/texts.php b/code/web/backend/application/config/texts.php deleted file mode 100644 index 6fd1c7c..0000000 --- a/code/web/backend/application/config/texts.php +++ /dev/null @@ -1,73 +0,0 @@ - "Unknown error occurred!", - "FEEDBACK_PASSWORD_WRONG_3_TIMES" => "You have typed in a wrong password 3 or more times already. Please wait 30 seconds to try again.", - "FEEDBACK_ACCOUNT_NOT_ACTIVATED_YET" => "Your account is not activated yet. Please click on the confirm link in the mail.", - "FEEDBACK_PASSWORD_WRONG" => "Password was wrong.", - "FEEDBACK_USER_DOES_NOT_EXIST" => "This user does not exist.", - "FEEDBACK_LOGIN_FAILED" => "Login failed.", - "FEEDBACK_USERNAME_FIELD_EMPTY" => "Username field was empty.", - "FEEDBACK_PASSWORD_FIELD_EMPTY" => "Password field was empty.", - "FEEDBACK_USERNAME_OR_PASSWORD_FIELD_EMPTY" => "Username or password field was empty.", - "FEEDBACK_USERNAME_EMAIL_FIELD_EMPTY" => "Username / email field was empty.", - "FEEDBACK_EMAIL_FIELD_EMPTY" => "Email field was empty.", - "FEEDBACK_EMAIL_AND_PASSWORD_FIELDS_EMPTY" => "Email and password fields were empty.", - "FEEDBACK_USERNAME_SAME_AS_OLD_ONE" => "Sorry, that username is the same as your current one. Please choose another one.", - "FEEDBACK_USERNAME_ALREADY_TAKEN" => "Sorry, that username is already taken. Please choose another one.", - "FEEDBACK_USER_EMAIL_ALREADY_TAKEN" => "Sorry, that email is already in use. Please choose another one.", - "FEEDBACK_USERNAME_CHANGE_SUCCESSFUL" => "Your username has been changed successfully.", - "FEEDBACK_USERNAME_AND_PASSWORD_FIELD_EMPTY" => "Username and password fields were empty.", - "FEEDBACK_USERNAME_DOES_NOT_FIT_PATTERN" => "Username does not fit the name pattern: only a-Z and numbers are allowed, 2 to 64 characters.", - "FEEDBACK_EMAIL_DOES_NOT_FIT_PATTERN" => "Sorry, your chosen email does not fit into the email naming pattern.", - "FEEDBACK_EMAIL_SAME_AS_OLD_ONE" => "Sorry, that email address is the same as your current one. Please choose another one.", - "FEEDBACK_EMAIL_CHANGE_SUCCESSFUL" => "Your email address has been changed successfully.", - "FEEDBACK_CAPTCHA_WRONG" => "The entered captcha security characters were wrong.", - "FEEDBACK_PASSWORD_REPEAT_WRONG" => "Password and password repeat are not the same.", - "FEEDBACK_PASSWORD_TOO_SHORT" => "Password has a minimum length of 6 characters.", - "FEEDBACK_USERNAME_TOO_SHORT_OR_TOO_LONG" => "Username cannot be shorter than 2 or longer than 64 characters.", - "FEEDBACK_ACCOUNT_SUCCESSFULLY_CREATED" => "Your account has been created successfully and we have sent you an email. Please click the VERIFICATION LINK within that mail.", - "FEEDBACK_VERIFICATION_MAIL_SENDING_FAILED" => "Sorry, we could not send you an verification mail. Your account has NOT been created.", - "FEEDBACK_ACCOUNT_CREATION_FAILED" => "Sorry, your registration failed. Please go back and try again.", - "FEEDBACK_VERIFICATION_MAIL_SENDING_ERROR" => "Verification mail could not be sent due to: ", - "FEEDBACK_VERIFICATION_MAIL_SENDING_SUCCESSFUL" => "A verification mail has been sent successfully.", - "FEEDBACK_ACCOUNT_ACTIVATION_SUCCESSFUL" => "Activation was successful! You can now log in.", - "FEEDBACK_ACCOUNT_ACTIVATION_FAILED" => "Sorry, no such id/verification code combination here...", - "FEEDBACK_AVATAR_UPLOAD_SUCCESSFUL" => "Avatar upload was successful.", - "FEEDBACK_AVATAR_UPLOAD_WRONG_TYPE" => "Only JPEG and PNG files are supported.", - "FEEDBACK_AVATAR_UPLOAD_TOO_SMALL" => "Avatar source file's width/height is too small. Needs to be 100x100 pixel minimum.", - "FEEDBACK_AVATAR_UPLOAD_TOO_BIG" => "Avatar source file is too big. 5 Megabyte is the maximum.", - "FEEDBACK_AVATAR_FOLDER_DOES_NOT_EXIST_OR_NOT_WRITABLE" => "Avatar folder does not exist or is not writable. Please change this via chmod 775 or 777.", - "FEEDBACK_AVATAR_IMAGE_UPLOAD_FAILED" => "Something went wrong with the image upload.", - "FEEDBACK_AVATAR_IMAGE_DELETE_SUCCESSFUL" => "You successfully deleted your avatar.", - "FEEDBACK_AVATAR_IMAGE_DELETE_NO_FILE" => "You don't have a custom avatar.", - "FEEDBACK_AVATAR_IMAGE_DELETE_FAILED" => "Something went wrong while deleting your avatar.", - "FEEDBACK_PASSWORD_RESET_TOKEN_FAIL" => "Could not write token to database.", - "FEEDBACK_PASSWORD_RESET_TOKEN_MISSING" => "No password reset token.", - "FEEDBACK_PASSWORD_RESET_MAIL_SENDING_ERROR" => "Password reset mail could not be sent due to: ", - "FEEDBACK_PASSWORD_RESET_MAIL_SENDING_SUCCESSFUL" => "A password reset mail has been sent successfully.", - "FEEDBACK_PASSWORD_RESET_LINK_EXPIRED" => "Your reset link has expired. Please use the reset link within one hour.", - "FEEDBACK_PASSWORD_RESET_COMBINATION_DOES_NOT_EXIST" => "Username/Verification code combination does not exist.", - "FEEDBACK_PASSWORD_RESET_LINK_VALID" => "Password reset validation link is valid. Please change the password now.", - "FEEDBACK_PASSWORD_CHANGE_SUCCESSFUL" => "Password successfully changed.", - "FEEDBACK_PASSWORD_CHANGE_FAILED" => "Sorry, your password changing failed.", - "FEEDBACK_ACCOUNT_TYPE_CHANGE_SUCCESSFUL" => "Account type change successful", - "FEEDBACK_ACCOUNT_TYPE_CHANGE_FAILED" => "Account type change failed", - "FEEDBACK_NOTE_CREATION_FAILED" => "Note creation failed.", - "FEEDBACK_NOTE_EDITING_FAILED" => "Note editing failed.", - "FEEDBACK_NOTE_DELETION_FAILED" => "Note deletion failed.", - "FEEDBACK_COOKIE_INVALID" => "Your remember-me-cookie is invalid.", - "FEEDBACK_COOKIE_LOGIN_SUCCESSFUL" => "You were successfully logged in via the remember-me-cookie.", - "FEEDBACK_FACEBOOK_LOGIN_NOT_REGISTERED" => "Sorry, you don't have an account here. Please register first.", - "FEEDBACK_FACEBOOK_EMAIL_NEEDED" => "Sorry, but you need to allow us to see your email address to register.", - "FEEDBACK_FACEBOOK_UID_ALREADY_EXISTS" => "Sorry, but you have already registered here (your Facebook ID exists in our database).", - "FEEDBACK_FACEBOOK_EMAIL_ALREADY_EXISTS" => "Sorry, but you have already registered here (your Facebook email exists in our database).", - "FEEDBACK_FACEBOOK_USERNAME_ALREADY_EXISTS" => "Sorry, but you have already registered here (your Facebook username exists in our database).", - "FEEDBACK_FACEBOOK_REGISTER_SUCCESSFUL" => "You have been successfully registered with Facebook.", - "FEEDBACK_FACEBOOK_OFFLINE" => "We could not reach the Facebook servers. Maybe Facebook is offline (that really happens sometimes).", -); \ No newline at end of file diff --git a/code/web/backend/application/controller/DashboardController.php b/code/web/backend/application/controller/DashboardController.php deleted file mode 100644 index ef82923..0000000 --- a/code/web/backend/application/controller/DashboardController.php +++ /dev/null @@ -1,26 +0,0 @@ -View->render('dashboard/index'); - } -} diff --git a/code/web/backend/application/controller/ErrorController.php b/code/web/backend/application/controller/ErrorController.php deleted file mode 100644 index 843a4b9..0000000 --- a/code/web/backend/application/controller/ErrorController.php +++ /dev/null @@ -1,25 +0,0 @@ -View->render('error/index'); - } -} diff --git a/code/web/backend/application/controller/IndexController.php b/code/web/backend/application/controller/IndexController.php deleted file mode 100644 index 8dff4eb..0000000 --- a/code/web/backend/application/controller/IndexController.php +++ /dev/null @@ -1,21 +0,0 @@ -View->render('index/index'); - } -} diff --git a/code/web/backend/application/controller/LoginController.php b/code/web/backend/application/controller/LoginController.php deleted file mode 100644 index 65aa7af..0000000 --- a/code/web/backend/application/controller/LoginController.php +++ /dev/null @@ -1,313 +0,0 @@ -View->render('login/index'); - } - } - - /** - * The login action, when you do login/login - */ - public function login() - { - // perform the login method, put result (true or false) into $login_successful - $login_successful = LoginModel::login( - Request::post('user_name'), Request::post('user_password'), Request::post('set_remember_me_cookie') - ); - - // check login status: if true, then redirect user login/showProfile, if false, then to login form again - if ($login_successful) { - Redirect::to('login/showProfile'); - } else { - Redirect::to('login/index'); - } - } - - /** - * The logout action - * Perform logout, redirect user to main-page - */ - public function logout() - { - LoginModel::logout(); - Redirect::home(); - } - - /** - * Login with cookie - */ - public function loginWithCookie() - { - // run the loginWithCookie() method in the login-model, put the result in $login_successful (true or false) - $login_successful = LoginModel::loginWithCookie(Request::cookie('remember_me')); - - // if login successful, redirect to dashboard/index ... - if ($login_successful) { - Redirect::to('dashboard/index'); - } else { - // if not, delete cookie (outdated? attack?) and route user to login form to prevent infinite login loops - LoginModel::deleteCookie(); - Redirect::to('login/index'); - } - } - - /** - * Show user's PRIVATE profile - * Auth::checkAuthentication() makes sure that only logged in users can use this action and see this page - */ - public function showProfile() - { - Auth::checkAuthentication(); - $this->View->render('login/showProfile', array( - 'user_name' => Session::get('user_name'), - 'user_email' => Session::get('user_email'), - 'user_gravatar_image_url' => Session::get('user_gravatar_image_url'), - 'user_avatar_file' => Session::get('user_avatar_file'), - 'user_account_type' => Session::get('user_account_type') - )); - } - - /** - * Show edit-my-username page - * Auth::checkAuthentication() makes sure that only logged in users can use this action and see this page - */ - public function editUsername() - { - Auth::checkAuthentication(); - $this->View->render('login/editUsername'); - } - - /** - * Edit user name (perform the real action after form has been submitted) - * Auth::checkAuthentication() makes sure that only logged in users can use this action - */ - public function editUsername_action() - { - Auth::checkAuthentication(); - UserModel::editUserName(Request::post('user_name')); - Redirect::to('login/index'); - } - - /** - * Show edit-my-user-email page - * Auth::checkAuthentication() makes sure that only logged in users can use this action and see this page - */ - public function editUserEmail() - { - Auth::checkAuthentication(); - $this->View->render('login/editUserEmail'); - } - - /** - * Edit user email (perform the real action after form has been submitted) - * Auth::checkAuthentication() makes sure that only logged in users can use this action and see this page - */ - // make this POST - public function editUserEmail_action() - { - Auth::checkAuthentication(); - UserModel::editUserEmail(Request::post('user_email')); - Redirect::to('login/editUserEmail'); - } - - /** - * Edit avatar - * Auth::checkAuthentication() makes sure that only logged in users can use this action and see this page - */ - public function editAvatar() - { - Auth::checkAuthentication(); - $this->View->render('login/editAvatar', array( - 'avatar_file_path' => AvatarModel::getPublicUserAvatarFilePathByUserId(Session::get('user_id')) - )); - } - - /** - * Perform the upload of the avatar - * Auth::checkAuthentication() makes sure that only logged in users can use this action and see this page - * POST-request - */ - public function uploadAvatar_action() - { - Auth::checkAuthentication(); - AvatarModel::createAvatar(); - Redirect::to('login/editAvatar'); - } - - /** - * Delete the current user's avatar - * Auth::checkAuthentication() makes sure that only logged in users can use this action and see this page - */ - public function deleteAvatar_action() - { - Auth::checkAuthentication(); - AvatarModel::deleteAvatar(Session::get("user_id")); - Redirect::to('login/editAvatar'); - } - - /** - * Show the change-account-type page - * Auth::checkAuthentication() makes sure that only logged in users can use this action and see this page - */ - public function changeUserRole() - { - Auth::checkAuthentication(); - $this->View->render('login/changeUserRole'); - } - - /** - * Perform the account-type changing - * Auth::checkAuthentication() makes sure that only logged in users can use this action - * POST-request - */ - public function changeUserRole_action() - { - Auth::checkAuthentication(); - - if (Request::post('user_account_upgrade')) { - // "2" is quick & dirty account type 2, something like "premium user" maybe. you got the idea :) - UserRoleModel::changeUserRole(2); - } - - if (Request::post('user_account_downgrade')) { - // "1" is quick & dirty account type 1, something like "basic user" maybe. - UserRoleModel::changeUserRole(1); - } - - Redirect::to('login/changeUserRole'); - } - - /** - * Register page - * Show the register form, but redirect to main-page if user is already logged-in - */ - public function register() - { - if (LoginModel::isUserLoggedIn()) { - Redirect::home(); - } else { - $this->View->render('login/register'); - } - } - - /** - * Register page action - * POST-request after form submit - */ - public function register_action() - { - $registration_successful = RegistrationModel::registerNewUser(); - - if ($registration_successful) { - Redirect::to('login/index'); - } else { - Redirect::to('login/register'); - } - } - - /** - * Verify user after activation mail link opened - * @param int $user_id user's id - * @param string $user_activation_verification_code user's verification token - */ - public function verify($user_id, $user_activation_verification_code) - { - if (isset($user_id) && isset($user_activation_verification_code)) { - RegistrationModel::verifyNewUser($user_id, $user_activation_verification_code); - $this->View->render('login/verify'); - } else { - Redirect::to('login/index'); - } - } - - /** - * Show the request-password-reset page - */ - public function requestPasswordReset() - { - $this->View->render('login/requestPasswordReset'); - } - - /** - * The request-password-reset action - * POST-request after form submit - */ - public function requestPasswordReset_action() - { - PasswordResetModel::requestPasswordReset(Request::post('user_name_or_email')); - Redirect::to('login/index'); - } - - /** - * Verify the verification token of that user (to show the user the password editing view or not) - * @param string $user_name username - * @param string $verification_code password reset verification token - */ - public function verifyPasswordReset($user_name, $verification_code) - { - // check if this the provided verification code fits the user's verification code - if (PasswordResetModel::verifyPasswordReset($user_name, $verification_code)) { - // pass URL-provided variable to view to display them - $this->View->render('login/changePassword', array( - 'user_name' => $user_name, - 'user_password_reset_hash' => $verification_code - )); - } else { - Redirect::to('login/index'); - } - } - - /** - * Set the new password - * Please note that this happens while the user is not logged in. The user identifies via the data provided by the - * password reset link from the email, automatically filled into the
fields. See verifyPasswordReset() - * for more. Then (regardless of result) route user to index page (user will get success/error via feedback message) - * POST request ! - * TODO this is an _action - */ - public function setNewPassword() - { - PasswordResetModel::setNewPassword( - Request::post('user_name'), Request::post('user_password_reset_hash'), - Request::post('user_password_new'), Request::post('user_password_repeat') - ); - Redirect::to('login/index'); - } - - /** - * Generate a captcha, write the characters into $_SESSION['captcha'] and returns a real image which will be used - * like this: - * IMPORTANT: As this action is called via AFTER the real application has finished executing (!), the - * SESSION["captcha"] has no content when the application is loaded. The SESSION["captcha"] gets filled at the - * moment the end-user requests the - * Maybe refactor this sometime. - */ - public function showCaptcha() - { - CaptchaModel::generateAndShowCaptcha(); - } -} diff --git a/code/web/backend/application/controller/NoteController.php b/code/web/backend/application/controller/NoteController.php deleted file mode 100644 index f44ee7e..0000000 --- a/code/web/backend/application/controller/NoteController.php +++ /dev/null @@ -1,77 +0,0 @@ -__construct - Auth::checkAuthentication(); - } - - /** - * This method controls what happens when you move to /note/index in your app. - * Gets all notes (of the user). - */ - public function index() - { - $this->View->render('note/index', array( - 'notes' => NoteModel::getAllNotes() - )); - } - - /** - * This method controls what happens when you move to /dashboard/create in your app. - * Creates a new note. This is usually the target of form submit actions. - * POST request. - */ - public function create() - { - NoteModel::createNote(Request::post('note_text')); - Redirect::to('note'); - } - - /** - * This method controls what happens when you move to /note/edit(/XX) in your app. - * Shows the current content of the note and an editing form. - * @param $note_id int id of the note - */ - public function edit($note_id) - { - $this->View->render('note/edit', array( - 'note' => NoteModel::getNote($note_id) - )); - } - - /** - * This method controls what happens when you move to /note/editSave in your app. - * Edits a note (performs the editing after form submit). - * POST request. - */ - public function editSave() - { - NoteModel::updateNote(Request::post('note_id'), Request::post('note_text')); - Redirect::to('note'); - } - - /** - * This method controls what happens when you move to /note/delete(/XX) in your app. - * Deletes a note. In a real application a deletion via GET/URL is not recommended, but for demo purposes it's - * totally okay. - * @param int $note_id id of the note - */ - public function delete($note_id) - { - NoteModel::deleteNote($note_id); - Redirect::to('note'); - } -} diff --git a/code/web/backend/application/controller/ProfileController.php b/code/web/backend/application/controller/ProfileController.php deleted file mode 100644 index 3cff93e..0000000 --- a/code/web/backend/application/controller/ProfileController.php +++ /dev/null @@ -1,39 +0,0 @@ -View->render('profile/index', array( - 'users' => UserModel::getPublicProfilesOfAllUsers()) - ); - } - - /** - * This method controls what happens when you move to /overview/showProfile in your app. - * Shows the (public) details of the selected user. - * @param $user_id int id the the user - */ - public function showProfile($user_id) - { - if (isset($user_id)) { - $this->View->render('profile/showProfile', array( - 'user' => UserModel::getPublicProfileOfUser($user_id)) - ); - } else { - Redirect::home(); - } - } -} diff --git a/code/web/backend/application/core/Application.php b/code/web/backend/application/core/Application.php deleted file mode 100644 index 7f87e15..0000000 --- a/code/web/backend/application/core/Application.php +++ /dev/null @@ -1,100 +0,0 @@ -splitUrl(); - - // creates controller and action names (from URL input) - $this->createControllerAndActionNames(); - - // does such a controller exist ? - if (file_exists(Config::get('PATH_CONTROLLER') . $this->controller_name . '.php')) { - - // load this file and create this controller - // example: if controller would be "car", then this line would translate into: $this->car = new car(); - require Config::get('PATH_CONTROLLER') . $this->controller_name . '.php'; - $this->controller = new $this->controller_name(); - - // check for method: does such a method exist in the controller ? - if (method_exists($this->controller, $this->action_name)) { - if (!empty($this->parameters)) { - // call the method and pass arguments to it - call_user_func_array(array($this->controller, $this->action_name), $this->parameters); - } else { - // if no parameters are given, just call the method without parameters, like $this->index->index(); - $this->controller->{$this->action_name}(); - } - } else { - header('location: ' . Config::get('URL') . 'error'); - } - } else { - header('location: ' . Config::get('URL') . 'error'); - } - } - - /** - * Get and split the URL - */ - private function splitUrl() - { - if (Request::get('url')) { - - // split URL - $url = trim(Request::get('url'), '/'); - $url = filter_var($url, FILTER_SANITIZE_URL); - $url = explode('/', $url); - - // put URL parts into according properties - $this->controller_name = isset($url[0]) ? $url[0] : null; - $this->action_name = isset($url[1]) ? $url[1] : null; - - // remove controller name and action name from the split URL - unset($url[0], $url[1]); - - // rebase array keys and store the URL parameters - $this->parameters = array_values($url); - } - } - - /** - * Checks if controller and action names are given. If not, default values are put into the properties. - * Also renames controller to usable name. - */ - private function createControllerAndActionNames() - { - // check for controller: no controller given ? then make controller = default controller (from config) - if (!$this->controller_name) { - $this->controller_name = Config::get('DEFAULT_CONTROLLER'); - } - - // check for action: no action given ? then make action = default action (from config) - if (!$this->action_name OR (strlen($this->action_name) == 0)) { - $this->action_name = Config::get('DEFAULT_ACTION'); - } - - // rename controller name to real controller class/file name ("index" to "IndexController") - $this->controller_name = ucwords($this->controller_name) . 'Controller'; - } -} diff --git a/code/web/backend/application/core/Auth.php b/code/web/backend/application/core/Auth.php deleted file mode 100644 index e193379..0000000 --- a/code/web/backend/application/core/Auth.php +++ /dev/null @@ -1,28 +0,0 @@ -View->render(); - $this->View = new View(); - } -} diff --git a/code/web/backend/application/core/DatabaseFactory.php b/code/web/backend/application/core/DatabaseFactory.php deleted file mode 100644 index e868d24..0000000 --- a/code/web/backend/application/core/DatabaseFactory.php +++ /dev/null @@ -1,46 +0,0 @@ -getConnection(); - * - * That's my personal favourite when creating a database connection. - * It's a slightly modified version of Jon Raphaelson's excellent answer on StackOverflow: - * http://stackoverflow.com/questions/130878/global-or-singleton-for-database-connection - * - * Full quote from the answer: - * - * "Then, in 6 months when your app is super famous and getting dugg and slashdotted and you decide you need more than - * a single connection, all you have to do is implement some pooling in the getConnection() method. Or if you decide - * that you want a wrapper that implements SQL logging, you can pass a PDO subclass. Or if you decide you want a new - * connection on every invocation, you can do do that. It's flexible, instead of rigid." - * - * Thanks! Big up, mate! - */ -class DatabaseFactory -{ - private static $factory; - private $database; - - public static function getFactory() - { - if (!self::$factory) { - self::$factory = new DatabaseFactory(); - } - return self::$factory; - } - - public function getConnection() { - if (!$this->database) { - $options = array(PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ, PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING); - $this->database = new PDO( - Config::get('DB_TYPE') . ':host=' . Config::get('DB_HOST') . ';dbname=' . - Config::get('DB_NAME') . ';port=' . Config::get('DB_PORT') . ';charset=' . Config::get('DB_CHARSET'), - Config::get('DB_USER'), Config::get('DB_PASS'), $options - ); - } - return $this->database; - } -} \ No newline at end of file diff --git a/code/web/backend/application/core/Environment.php b/code/web/backend/application/core/Environment.php deleted file mode 100644 index 49da44a..0000000 --- a/code/web/backend/application/core/Environment.php +++ /dev/null @@ -1,18 +0,0 @@ -IsSMTP(); - // 0 = off, 1 = commands, 2 = commands and data, perfect to see SMTP errors - $mail->SMTPDebug = 0; - // enable SMTP authentication - $mail->SMTPAuth = Config::get('EMAIL_SMTP_AUTH'); - // encryption - if (Config::get('EMAIL_SMTP_ENCRYPTION')) { - $mail->SMTPSecure = Config::get('EMAIL_SMTP_ENCRYPTION'); - } - // set SMTP provider's credentials - $mail->Host = Config::get('EMAIL_SMTP_HOST'); - $mail->Username = Config::get('EMAIL_SMTP_USERNAME'); - $mail->Password = Config::get('EMAIL_SMTP_PASSWORD'); - $mail->Port = Config::get('EMAIL_SMTP_PORT'); - } else { - $mail->IsMail(); - } - - // fill mail with data - $mail->From = $from_email; - $mail->FromName = $from_name; - $mail->AddAddress($user_email); - $mail->Subject = $subject; - $mail->Body = $body; - - // try to send mail - $mail->Send(); - - if ($mail) { - return true; - } else { - // if not successful, copy errors into Mail's error property - $this->error = $mail->ErrorInfo; - return false; - } - } - - public function sendMail($user_email, $from_email, $from_name, $subject, $body) - { - if (Config::get('EMAIL_USED_MAILER') == "phpmailer") { - // returns true if successful, false if not - return $this->sendMailWithPHPMailer( - $user_email, $from_email, $from_name, $subject, $body - ); - } - - if (Config::get('EMAIL_USED_MAILER') == "swiftmailer") { - return $this->sendMailWithSwiftMailer(); - } - - if (Config::get('EMAIL_USED_MAILER') == "native") { - return $this->sendMailWithNativeMailFunction(); - } - } - - public function getError() - { - return $this->error; - } -} diff --git a/code/web/backend/application/core/Redirect.php b/code/web/backend/application/core/Redirect.php deleted file mode 100644 index 3375638..0000000 --- a/code/web/backend/application/core/Redirect.php +++ /dev/null @@ -1,27 +0,0 @@ -view->render('help/index'); to show (in this example) the view index.php in the folder help. - * Usually the Class and the method are the same like the view, but sometimes you need to show different views. - * @param string $filename Path of the to-be-rendered view, usually folder/file(.php) - * @param array $data Data to be used in the view - */ - public function render($filename, $data = null) - { - if ($data) { - foreach ($data as $key => $value) { - $this->{$key} = $value; - } - } - - require Config::get('PATH_VIEW') . '_templates/header.php'; - require Config::get('PATH_VIEW') . $filename . '.php'; - require Config::get('PATH_VIEW') . '_templates/footer.php'; - } - - /** - * Similar to render, but accepts an array of separate views to render between the header and footer. Use like - * the following: $this->view->renderMulti(array('help/index', 'help/banner')); - * @param array $filenames Array of the paths of the to-be-rendered view, usually folder/file(.php) for each - * @param array $data Data to be used in the view - * @return bool - */ - public function renderMulti($filenames, $data = null) - { - if (!is_array($filenames)) { - self::render($filenames, $data); - return false; - } - - if ($data) { - foreach ($data as $key => $value) { - $this->{$key} = $value; - } - } - - require Config::get('PATH_VIEW') . '_templates/header.php'; - - foreach($filenames as $filename) { - require Config::get('PATH_VIEW') . $filename . '.php'; - } - - require Config::get('PATH_VIEW') . '_templates/footer.php'; - } - - /** - * Same like render(), but does not include header and footer - * @param string $filename Path of the to-be-rendered view, usually folder/file(.php) - * @param mixed $data Data to be used in the view - */ - public function renderWithoutHeaderAndFooter($filename, $data = null) - { - if ($data) { - foreach ($data as $key => $value) { - $this->{$key} = $value; - } - } - - require Config::get('PATH_VIEW') . $filename . '.php'; - } - - /** - * Renders pure JSON to the browser, useful for API construction - * @param $data - */ - public function renderJSON($data) - { - echo json_encode($data); - } - - /** - * renders the feedback messages into the view - */ - public function renderFeedbackMessages() - { - // echo out the feedback messages (errors and success messages etc.), - // they are in $_SESSION["feedback_positive"] and $_SESSION["feedback_negative"] - require Config::get('PATH_VIEW') . '_templates/feedback.php'; - - // delete these messages (as they are not needed anymore and we want to avoid to show them twice - Session::set('feedback_positive', null); - Session::set('feedback_negative', null); - } - - /** - * Checks if the passed string is the currently active controller. - * Useful for handling the navigation's active/non-active link. - * - * @param string $filename - * @param string $navigation_controller - * - * @return bool Shows if the controller is used or not - */ - public static function checkForActiveController($filename, $navigation_controller) - { - $split_filename = explode("/", $filename); - $active_controller = $split_filename[0]; - - if ($active_controller == $navigation_controller) { - return true; - } - - return false; - } - - /** - * Checks if the passed string is the currently active controller-action (=method). - * Useful for handling the navigation's active/non-active link. - * - * @param string $filename - * @param string $navigation_action - * - * @return bool Shows if the action/method is used or not - */ - public static function checkForActiveAction($filename, $navigation_action) - { - $split_filename = explode("/", $filename); - $active_action = $split_filename[1]; - - if ($active_action == $navigation_action) { - return true; - } - - return false; - } - - /** - * Checks if the passed string is the currently active controller and controller-action. - * Useful for handling the navigation's active/non-active link. - * - * @param string $filename - * @param string $navigation_controller_and_action - * - * @return bool - */ - public static function checkForActiveControllerAndAction($filename, $navigation_controller_and_action) - { - $split_filename = explode("/", $filename); - $active_controller = $split_filename[0]; - $active_action = $split_filename[1]; - - $split_filename = explode("/", $navigation_controller_and_action); - $navigation_controller = $split_filename[0]; - $navigation_action = $split_filename[1]; - - if ($active_controller == $navigation_controller AND $active_action == $navigation_action) { - return true; - } - - return false; - } -} diff --git a/code/web/backend/application/model/AvatarModel.php b/code/web/backend/application/model/AvatarModel.php deleted file mode 100644 index 0041d2c..0000000 --- a/code/web/backend/application/model/AvatarModel.php +++ /dev/null @@ -1,254 +0,0 @@ -getConnection(); - - $query = $database->prepare("SELECT user_has_avatar FROM users WHERE user_id = :user_id LIMIT 1"); - $query->execute(array(':user_id' => $user_id)); - - if ($query->fetch()->user_has_avatar) { - return Config::get('URL') . Config::get('PATH_AVATARS_PUBLIC') . $user_id . '.jpg'; - } - - return Config::get('URL') . Config::get('PATH_AVATARS_PUBLIC') . Config::get('AVATAR_DEFAULT_IMAGE'); - } - - /** - * Create an avatar picture (and checks all necessary things too) - * TODO decouple - * TODO total rebuild - */ - public static function createAvatar() - { - // check avatar folder writing rights, check if upload fits all rules - if (AvatarModel::isAvatarFolderWritable() AND AvatarModel::validateImageFile()) { - - // create a jpg file in the avatar folder, write marker to database - $target_file_path = Config::get('PATH_AVATARS') . Session::get('user_id'); - AvatarModel::resizeAvatarImage($_FILES['avatar_file']['tmp_name'], $target_file_path, Config::get('AVATAR_SIZE'), Config::get('AVATAR_SIZE'), Config::get('AVATAR_JPEG_QUALITY')); - AvatarModel::writeAvatarToDatabase(Session::get('user_id')); - Session::set('user_avatar_file', AvatarModel::getPublicUserAvatarFilePathByUserId(Session::get('user_id'))); - Session::add('feedback_positive', Text::get('FEEDBACK_AVATAR_UPLOAD_SUCCESSFUL')); - } - } - - /** - * Checks if the avatar folder exists and is writable - * - * @return bool success status - */ - public static function isAvatarFolderWritable() - { - if (is_dir(Config::get('PATH_AVATARS')) AND is_writable(Config::get('PATH_AVATARS'))) { - return true; - } - - Session::add('feedback_negative', Text::get('FEEDBACK_AVATAR_FOLDER_DOES_NOT_EXIST_OR_NOT_WRITABLE')); - return false; - } - - /** - * Validates the image - * TODO totally decouple - * - * @return bool - */ - public static function validateImageFile() - { - if (!isset($_FILES['avatar_file'])) { - Session::add('feedback_negative', Text::get('FEEDBACK_AVATAR_IMAGE_UPLOAD_FAILED')); - return false; - } - - if ($_FILES['avatar_file']['size'] > 5000000) { - // if input file too big (>5MB) - Session::add('feedback_negative', Text::get('FEEDBACK_AVATAR_UPLOAD_TOO_BIG')); - return false; - } - - // get the image width, height and mime type - $image_proportions = getimagesize($_FILES['avatar_file']['tmp_name']); - - // if input file too small - if ($image_proportions[0] < Config::get('AVATAR_SIZE') OR $image_proportions[1] < Config::get('AVATAR_SIZE')) { - Session::add('feedback_negative', Text::get('FEEDBACK_AVATAR_UPLOAD_TOO_SMALL')); - return false; - } - - if (!($image_proportions['mime'] == 'image/jpeg')) { - Session::add('feedback_negative', Text::get('FEEDBACK_AVATAR_UPLOAD_WRONG_TYPE')); - return false; - } - - return true; - } - - /** - * Writes marker to database, saying user has an avatar now - * - * @param $user_id - */ - public static function writeAvatarToDatabase($user_id) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $query = $database->prepare("UPDATE users SET user_has_avatar = TRUE WHERE user_id = :user_id LIMIT 1"); - $query->execute(array(':user_id' => $user_id)); - } - - /** - * Resize avatar image (while keeping aspect ratio and cropping it off sexy) - * - * TROUBLESHOOTING: You don't see the new image ? Press F5 or CTRL-F5 to refresh browser cache. - * - * @param string $source_image The location to the original raw image. - * @param string $destination The location to save the new image. - * @param int $final_width The desired width of the new image - * @param int $final_height The desired height of the new image. - * @param int $quality The quality of the JPG to produce 1 - 100 - * - * TODO currently we just allow .jpg - * - * @return bool success state - */ - public static function resizeAvatarImage($source_image, $destination, $final_width = 44, $final_height = 44, $quality = 85) - { - list($width, $height) = getimagesize($source_image); - - if (!$width || !$height) { - return false; - } - - //saving the image into memory (for manipulation with GD Library) - $myImage = imagecreatefromjpeg($source_image); - - // calculating the part of the image to use for thumbnail - if ($width > $height) { - $y = 0; - $x = ($width - $height) / 2; - $smallestSide = $height; - } else { - $x = 0; - $y = ($height - $width) / 2; - $smallestSide = $width; - } - - // copying the part into thumbnail, maybe edit this for square avatars - $thumb = imagecreatetruecolor($final_width, $final_height); - imagecopyresampled($thumb, $myImage, 0, 0, $x, $y, $final_width, $final_height, $smallestSide, $smallestSide); - - // add '.jpg' to file path, save it as a .jpg file with our $destination_filename parameter - $destination .= '.jpg'; - imagejpeg($thumb, $destination, $quality); - - // delete "working copy" - imagedestroy($thumb); - - if (file_exists($destination)) { - return true; - } - // default return - return false; - } - - /** - * Delete a user's avatar - * - * @param int $userId - * @return bool success - */ - public static function deleteAvatar($userId) - { - if (!ctype_digit($userId)) { - Session::add("feedback_negative", Text::get("FEEDBACK_AVATAR_IMAGE_DELETE_FAILED")); - return false; - } - - // try to delete image, but still go on regardless of file deletion result - self::deleteAvatarImageFile($userId); - - $database = DatabaseFactory::getFactory()->getConnection(); - - $sth = $database->prepare("UPDATE users SET user_has_avatar = 0 WHERE user_id = :user_id LIMIT 1"); - $sth->bindValue(":user_id", (int)$userId, PDO::PARAM_INT); - $sth->execute(); - - if ($sth->rowCount() == 1) { - Session::set('user_avatar_file', self::getPublicUserAvatarFilePathByUserId($userId)); - Session::add("feedback_positive", Text::get("FEEDBACK_AVATAR_IMAGE_DELETE_SUCCESSFUL")); - return true; - } else { - Session::add("feedback_negative", Text::get("FEEDBACK_AVATAR_IMAGE_DELETE_FAILED")); - return false; - } - } - - /** - * Removes the avatar image file from the filesystem - * - * @param $userId - * @return bool - */ - public static function deleteAvatarImageFile($userId) - { - // Check if file exists - if (!file_exists(Config::get('PATH_AVATARS') . $userId . ".jpg")) { - Session::add("feedback_negative", Text::get("FEEDBACK_AVATAR_IMAGE_DELETE_NO_FILE")); - return false; - } - - // Delete avatar file - if (!unlink(Config::get('PATH_AVATARS') . $userId . ".jpg")) { - Session::add("feedback_negative", Text::get("FEEDBACK_AVATAR_IMAGE_DELETE_FAILED")); - return false; - } - - return true; - } -} diff --git a/code/web/backend/application/model/CaptchaModel.php b/code/web/backend/application/model/CaptchaModel.php deleted file mode 100644 index 34047f5..0000000 --- a/code/web/backend/application/model/CaptchaModel.php +++ /dev/null @@ -1,46 +0,0 @@ -build( - Config::get('CAPTCHA_WIDTH'), - Config::get('CAPTCHA_HEIGHT') - ); - - // write the captcha character into session - Session::set('captcha', $captcha->getPhrase()); - - // render an image showing the characters (=the captcha) - header('Content-type: image/jpeg'); - $captcha->output(); - } - - /** - * Checks if the entered captcha is the same like the one from the rendered image which has been saved in session - * @param $captcha string The captcha characters - * @return bool success of captcha check - */ - public static function checkCaptcha($captcha) - { - if ($captcha == Session::get('captcha')) { - return true; - } - - return false; - } -} diff --git a/code/web/backend/application/model/LoginModel.php b/code/web/backend/application/model/LoginModel.php deleted file mode 100644 index 814a362..0000000 --- a/code/web/backend/application/model/LoginModel.php +++ /dev/null @@ -1,270 +0,0 @@ -user_last_failed_login > 0) { - self::resetFailedLoginCounterOfUser($result->user_name); - } - - // save timestamp of this login in the database line of that user - self::saveTimestampOfLoginOfUser($result->user_name); - - // if user has checked the "remember me" checkbox, then write token into database and into cookie - if ($set_remember_me_cookie) { - self::setRememberMeInDatabaseAndCookie($result->user_id); - } - - // successfully logged in, so we write all necessary data into the session and set "user_logged_in" to true - self::setSuccessfulLoginIntoSession( - $result->user_id, $result->user_name, $result->user_email, $result->user_account_type - ); - - // return true to make clear the login was successful - // maybe do this in dependence of setSuccessfulLoginIntoSession ? - return true; - } - - /** - * Validates the inputs of the users, checks if password is correct etc. - * If successful, user is returned - * - * @param $user_name - * @param $user_password - * - * @return bool|mixed - */ - private static function validateAndGetUser($user_name, $user_password) - { - // get all data of that user (to later check if password and password_hash fit) - $result = UserModel::getUserDataByUsername($user_name); - - // Check if that user exists. We don't give back a cause in the feedback to avoid giving an attacker details. - if (!$result) { - Session::add('feedback_negative', Text::get('FEEDBACK_LOGIN_FAILED')); - return false; - } - - // block login attempt if somebody has already failed 3 times and the last login attempt is less than 30sec ago - if (($result->user_failed_logins >= 3) AND ($result->user_last_failed_login > (time() - 30))) { - Session::add('feedback_negative', Text::get('FEEDBACK_PASSWORD_WRONG_3_TIMES')); - return false; - } - - // if hash of provided password does NOT match the hash in the database: +1 failed-login counter - if (!password_verify($user_password, $result->user_password_hash)) { - self::incrementFailedLoginCounterOfUser($result->user_name); - // we say "password wrong" here, but less details like "login failed" would be better (= less information) - Session::add('feedback_negative', Text::get('FEEDBACK_PASSWORD_WRONG')); - return false; - } - - // if user is not active (= has not verified account by verification mail) - if ($result->user_active != 1) { - Session::add('feedback_negative', Text::get('FEEDBACK_ACCOUNT_NOT_ACTIVATED_YET')); - return false; - } - - return $result; - } - - /** - * performs the login via cookie (for DEFAULT user account, FACEBOOK-accounts are handled differently) - * TODO add throttling here ? - * - * @param $cookie string The cookie "remember_me" - * - * @return bool success state - */ - public static function loginWithCookie($cookie) - { - if (!$cookie) { - Session::add('feedback_negative', Text::get('FEEDBACK_COOKIE_INVALID')); - return false; - } - - // check cookie's contents, check if cookie contents belong together or token is empty - list ($user_id, $token, $hash) = explode(':', $cookie); - if ($hash !== hash('sha256', $user_id . ':' . $token) OR empty($token)) { - Session::add('feedback_negative', Text::get('FEEDBACK_COOKIE_INVALID')); - return false; - } - - // get data of user that has this id and this token - $result = UserModel::getUserDataByUserIdAndToken($user_id, $token); - if ($result) { - // successfully logged in, so we write all necessary data into the session and set "user_logged_in" to true - self::setSuccessfulLoginIntoSession($result->user_id, $result->user_name, $result->user_email, $result->user_account_type); - // save timestamp of this login in the database line of that user - self::saveTimestampOfLoginOfUser($result->user_name); - - Session::add('feedback_positive', Text::get('FEEDBACK_COOKIE_LOGIN_SUCCESSFUL')); - return true; - } else { - Session::add('feedback_negative', Text::get('FEEDBACK_COOKIE_INVALID')); - return false; - } - } - - /** - * Log out process: delete cookie, delete session - */ - public static function logout() - { - self::deleteCookie(); - Session::destroy(); - } - - /** - * The real login process: The user's data is written into the session. - * Cheesy name, maybe rename. Also maybe refactoring this, using an array. - * - * @param $user_id - * @param $user_name - * @param $user_email - * @param $user_account_type - */ - public static function setSuccessfulLoginIntoSession($user_id, $user_name, $user_email, $user_account_type) - { - Session::init(); - Session::set('user_id', $user_id); - Session::set('user_name', $user_name); - Session::set('user_email', $user_email); - Session::set('user_account_type', $user_account_type); - Session::set('user_provider_type', 'DEFAULT'); - - // get and set avatars - Session::set('user_avatar_file', AvatarModel::getPublicUserAvatarFilePathByUserId($user_id)); - Session::set('user_gravatar_image_url', AvatarModel::getGravatarLinkByEmail($user_email)); - - // finally, set user as logged-in - Session::set('user_logged_in', true); - } - - /** - * Increments the failed-login counter of a user - * - * @param $user_name - */ - public static function incrementFailedLoginCounterOfUser($user_name) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "UPDATE users - SET user_failed_logins = user_failed_logins+1, user_last_failed_login = :user_last_failed_login - WHERE user_name = :user_name OR user_email = :user_name - LIMIT 1"; - $sth = $database->prepare($sql); - $sth->execute(array(':user_name' => $user_name, ':user_last_failed_login' => time() )); - } - - /** - * Resets the failed-login counter of a user back to 0 - * - * @param $user_name - */ - public static function resetFailedLoginCounterOfUser($user_name) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "UPDATE users - SET user_failed_logins = 0, user_last_failed_login = NULL - WHERE user_name = :user_name AND user_failed_logins != 0 - LIMIT 1"; - $sth = $database->prepare($sql); - $sth->execute(array(':user_name' => $user_name)); - } - - /** - * Write timestamp of this login into database (we only write a "real" login via login form into the database, - * not the session-login on every page request - * - * @param $user_name - */ - public static function saveTimestampOfLoginOfUser($user_name) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "UPDATE users SET user_last_login_timestamp = :user_last_login_timestamp - WHERE user_name = :user_name LIMIT 1"; - $sth = $database->prepare($sql); - $sth->execute(array(':user_name' => $user_name, ':user_last_login_timestamp' => time())); - } - - /** - * Write remember-me token into database and into cookie - * Maybe splitting this into database and cookie part ? - * - * @param $user_id - */ - public static function setRememberMeInDatabaseAndCookie($user_id) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - // generate 64 char random string - $random_token_string = hash('sha256', mt_rand()); - - // write that token into database - $sql = "UPDATE users SET user_remember_me_token = :user_remember_me_token WHERE user_id = :user_id LIMIT 1"; - $sth = $database->prepare($sql); - $sth->execute(array(':user_remember_me_token' => $random_token_string, ':user_id' => $user_id)); - - // generate cookie string that consists of user id, random string and combined hash of both - $cookie_string_first_part = $user_id . ':' . $random_token_string; - $cookie_string_hash = hash('sha256', $cookie_string_first_part); - $cookie_string = $cookie_string_first_part . ':' . $cookie_string_hash; - - // set cookie - setcookie('remember_me', $cookie_string, time() + Config::get('COOKIE_RUNTIME'), Config::get('COOKIE_PATH')); - } - - /** - * Deletes the cookie - * It's necessary to split deleteCookie() and logout() as cookies are deleted without logging out too! - * Sets the remember-me-cookie to ten years ago (3600sec * 24 hours * 365 days * 10). - * that's obviously the best practice to kill a cookie @see http://stackoverflow.com/a/686166/1114320 - */ - public static function deleteCookie() - { - setcookie('remember_me', false, time() - (3600 * 24 * 3650), Config::get('COOKIE_PATH')); - } - - /** - * Returns the current state of the user's login - * - * @return bool user's login status - */ - public static function isUserLoggedIn() - { - return Session::userIsLoggedIn(); - } -} diff --git a/code/web/backend/application/model/NoteModel.php b/code/web/backend/application/model/NoteModel.php deleted file mode 100644 index 468694d..0000000 --- a/code/web/backend/application/model/NoteModel.php +++ /dev/null @@ -1,120 +0,0 @@ -getConnection(); - - $sql = "SELECT user_id, note_id, note_text FROM notes WHERE user_id = :user_id"; - $query = $database->prepare($sql); - $query->execute(array(':user_id' => Session::get('user_id'))); - - // fetchAll() is the PDO method that gets all result rows - return $query->fetchAll(); - } - - /** - * Get a single note - * @param int $note_id id of the specific note - * @return object a single object (the result) - */ - public static function getNote($note_id) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "SELECT user_id, note_id, note_text FROM notes WHERE user_id = :user_id AND note_id = :note_id LIMIT 1"; - $query = $database->prepare($sql); - $query->execute(array(':user_id' => Session::get('user_id'), ':note_id' => $note_id)); - - // fetch() is the PDO method that gets a single result - return $query->fetch(); - } - - /** - * Set a note (create a new one) - * @param string $note_text note text that will be created - * @return bool feedback (was the note created properly ?) - */ - public static function createNote($note_text) - { - if (!$note_text || strlen($note_text) == 0) { - Session::add('feedback_negative', Text::get('FEEDBACK_NOTE_CREATION_FAILED')); - return false; - } - - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "INSERT INTO notes (note_text, user_id) VALUES (:note_text, :user_id)"; - $query = $database->prepare($sql); - $query->execute(array(':note_text' => $note_text, ':user_id' => Session::get('user_id'))); - - if ($query->rowCount() == 1) { - return true; - } - - // default return - Session::add('feedback_negative', Text::get('FEEDBACK_NOTE_CREATION_FAILED')); - return false; - } - - /** - * Update an existing note - * @param int $note_id id of the specific note - * @param string $note_text new text of the specific note - * @return bool feedback (was the update successful ?) - */ - public static function updateNote($note_id, $note_text) - { - if (!$note_id || !$note_text) { - return false; - } - - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "UPDATE notes SET note_text = :note_text WHERE note_id = :note_id AND user_id = :user_id LIMIT 1"; - $query = $database->prepare($sql); - $query->execute(array(':note_id' => $note_id, ':note_text' => $note_text, ':user_id' => Session::get('user_id'))); - - if ($query->rowCount() == 1) { - return true; - } - - Session::add('feedback_negative', Text::get('FEEDBACK_NOTE_EDITING_FAILED')); - return false; - } - - /** - * Delete a specific note - * @param int $note_id id of the note - * @return bool feedback (was the note deleted properly ?) - */ - public static function deleteNote($note_id) - { - if (!$note_id) { - return false; - } - - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "DELETE FROM notes WHERE note_id = :note_id AND user_id = :user_id LIMIT 1"; - $query = $database->prepare($sql); - $query->execute(array(':note_id' => $note_id, ':user_id' => Session::get('user_id'))); - - if ($query->rowCount() == 1) { - return true; - } - - // default return - Session::add('feedback_negative', Text::get('FEEDBACK_NOTE_DELETION_FAILED')); - return false; - } -} diff --git a/code/web/backend/application/model/PasswordResetModel.php b/code/web/backend/application/model/PasswordResetModel.php deleted file mode 100644 index 10e0648..0000000 --- a/code/web/backend/application/model/PasswordResetModel.php +++ /dev/null @@ -1,251 +0,0 @@ -user_name, $user_password_reset_hash, $temporary_timestamp); - if (!$token_set) { - return false; - } - - // ... and send a mail to the user, containing a link with username and token hash string - $mail_sent = PasswordResetModel::sendPasswordResetMail($result->user_name, $user_password_reset_hash, $result->user_email); - if ($mail_sent) { - return true; - } - - // default return - return false; - } - - /** - * Set password reset token in database (for DEFAULT user accounts) - * - * @param string $user_name username - * @param string $user_password_reset_hash password reset hash - * @param int $temporary_timestamp timestamp - * - * @return bool success status - */ - public static function setPasswordResetDatabaseToken($user_name, $user_password_reset_hash, $temporary_timestamp) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "UPDATE users - SET user_password_reset_hash = :user_password_reset_hash, user_password_reset_timestamp = :user_password_reset_timestamp - WHERE user_name = :user_name AND user_provider_type = :provider_type LIMIT 1"; - $query = $database->prepare($sql); - $query->execute(array( - ':user_password_reset_hash' => $user_password_reset_hash, ':user_name' => $user_name, - ':user_password_reset_timestamp' => $temporary_timestamp, ':provider_type' => 'DEFAULT' - )); - - // check if exactly one row was successfully changed - if ($query->rowCount() == 1) { - return true; - } - - // fallback - Session::add('feedback_negative', Text::get('FEEDBACK_PASSWORD_RESET_TOKEN_FAIL')); - return false; - } - - /** - * Send the password reset mail - * - * @param string $user_name username - * @param string $user_password_reset_hash password reset hash - * @param string $user_email user email - * - * @return bool success status - */ - public static function sendPasswordResetMail($user_name, $user_password_reset_hash, $user_email) - { - // create email body - $body = Config::get('EMAIL_PASSWORD_RESET_CONTENT') . ' ' . Config::get('URL') . - Config::get('EMAIL_PASSWORD_RESET_URL') . '/' . urlencode($user_name) . '/' . urlencode($user_password_reset_hash); - - // create instance of Mail class, try sending and check - $mail = new Mail; - $mail_sent = $mail->sendMail($user_email, Config::get('EMAIL_PASSWORD_RESET_FROM_EMAIL'), - Config::get('EMAIL_PASSWORD_RESET_FROM_NAME'), Config::get('EMAIL_PASSWORD_RESET_SUBJECT'), $body - ); - - if ($mail_sent) { - Session::add('feedback_positive', Text::get('FEEDBACK_PASSWORD_RESET_MAIL_SENDING_SUCCESSFUL')); - return true; - } - - Session::add('feedback_negative', Text::get('FEEDBACK_PASSWORD_RESET_MAIL_SENDING_ERROR') . $mail->getError() ); - return false; - } - - /** - * Verifies the password reset request via the verification hash token (that's only valid for one hour) - * @param string $user_name Username - * @param string $verification_code Hash token - * @return bool Success status - */ - public static function verifyPasswordReset($user_name, $verification_code) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - // check if user-provided username + verification code combination exists - $sql = "SELECT user_id, user_password_reset_timestamp - FROM users - WHERE user_name = :user_name - AND user_password_reset_hash = :user_password_reset_hash - AND user_provider_type = :user_provider_type - LIMIT 1"; - $query = $database->prepare($sql); - $query->execute(array( - ':user_password_reset_hash' => $verification_code, ':user_name' => $user_name, - ':user_provider_type' => 'DEFAULT' - )); - - // if this user with exactly this verification hash code does NOT exist - if ($query->rowCount() != 1) { - Session::add('feedback_negative', Text::get('FEEDBACK_PASSWORD_RESET_COMBINATION_DOES_NOT_EXIST')); - return false; - } - - // get result row (as an object) - $result_user_row = $query->fetch(); - - // 3600 seconds are 1 hour - $timestamp_one_hour_ago = time() - 3600; - - // if password reset request was sent within the last hour (this timeout is for security reasons) - if ($result_user_row->user_password_reset_timestamp > $timestamp_one_hour_ago) { - // verification was successful - Session::add('feedback_positive', Text::get('FEEDBACK_PASSWORD_RESET_LINK_VALID')); - return true; - } else { - Session::add('feedback_negative', Text::get('FEEDBACK_PASSWORD_RESET_LINK_EXPIRED')); - return false; - } - } - - /** - * Writes the new password to the database - * - * @param string $user_name username - * @param string $user_password_hash - * @param string $user_password_reset_hash - * - * @return bool - */ - public static function saveNewUserPassword($user_name, $user_password_hash, $user_password_reset_hash) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "UPDATE users SET user_password_hash = :user_password_hash, user_password_reset_hash = NULL, - user_password_reset_timestamp = NULL - WHERE user_name = :user_name AND user_password_reset_hash = :user_password_reset_hash - AND user_provider_type = :user_provider_type LIMIT 1"; - $query = $database->prepare($sql); - $query->execute(array( - ':user_password_hash' => $user_password_hash, ':user_name' => $user_name, - ':user_password_reset_hash' => $user_password_reset_hash, ':user_provider_type' => 'DEFAULT' - )); - - // if one result exists, return true, else false. Could be written even shorter btw. - return ($query->rowCount() == 1 ? true : false); - } - - /** - * Set the new password (for DEFAULT user, FACEBOOK-users don't have a password) - * Please note: At this point the user has already pre-verified via verifyPasswordReset() (within one hour), - * so we don't need to check again for the 60min-limit here. In this method we authenticate - * via username & password-reset-hash from (hidden) form fields. - * - * @param string $user_name - * @param string $user_password_reset_hash - * @param string $user_password_new - * @param string $user_password_repeat - * - * @return bool success state of the password reset - */ - public static function setNewPassword($user_name, $user_password_reset_hash, $user_password_new, $user_password_repeat) - { - // validate the password - if (!self::validateNewPassword($user_name, $user_password_reset_hash, $user_password_new, $user_password_repeat)) { - return false; - } - - // crypt the password (with the PHP 5.5+'s password_hash() function, result is a 60 character hash string) - $user_password_hash = password_hash($user_password_new, PASSWORD_DEFAULT); - - // write the password to database (as hashed and salted string), reset user_password_reset_hash - if (PasswordResetModel::saveNewUserPassword($user_name, $user_password_hash, $user_password_reset_hash)) { - Session::add('feedback_positive', Text::get('FEEDBACK_PASSWORD_CHANGE_SUCCESSFUL')); - return true; - } else { - Session::add('feedback_negative', Text::get('FEEDBACK_PASSWORD_CHANGE_FAILED')); - return false; - } - } - - /** - * Validate the password submission - * - * @param $user_name - * @param $user_password_reset_hash - * @param $user_password_new - * @param $user_password_repeat - * - * @return bool - */ - public static function validateNewPassword($user_name, $user_password_reset_hash, $user_password_new, $user_password_repeat) - { - if (empty($user_name)) { - Session::add('feedback_negative', Text::get('FEEDBACK_USERNAME_FIELD_EMPTY')); - return false; - } else if (empty($user_password_reset_hash)) { - Session::add('feedback_negative', Text::get('FEEDBACK_PASSWORD_RESET_TOKEN_MISSING')); - return false; - } else if (empty($user_password_new) || empty($user_password_repeat)) { - Session::add('feedback_negative', Text::get('FEEDBACK_PASSWORD_FIELD_EMPTY')); - return false; - } else if ($user_password_new !== $user_password_repeat) { - Session::add('feedback_negative', Text::get('FEEDBACK_PASSWORD_REPEAT_WRONG')); - return false; - } else if (strlen($user_password_new) < 6) { - Session::add('feedback_negative', Text::get('FEEDBACK_PASSWORD_TOO_SHORT')); - return false; - } - - return true; - } -} diff --git a/code/web/backend/application/model/RegistrationModel.php b/code/web/backend/application/model/RegistrationModel.php deleted file mode 100644 index b03a7ca..0000000 --- a/code/web/backend/application/model/RegistrationModel.php +++ /dev/null @@ -1,278 +0,0 @@ -getConnection(); - - // write new users data into database - $sql = "INSERT INTO users (user_name, user_password_hash, user_email, user_creation_timestamp, user_activation_hash, user_provider_type) - VALUES (:user_name, :user_password_hash, :user_email, :user_creation_timestamp, :user_activation_hash, :user_provider_type)"; - $query = $database->prepare($sql); - $query->execute(array(':user_name' => $user_name, - ':user_password_hash' => $user_password_hash, - ':user_email' => $user_email, - ':user_creation_timestamp' => $user_creation_timestamp, - ':user_activation_hash' => $user_activation_hash, - ':user_provider_type' => 'DEFAULT')); - $count = $query->rowCount(); - if ($count == 1) { - return true; - } - - return false; - } - - /** - * Deletes the user from users table. Currently used to rollback a registration when verification mail sending - * was not successful. - * - * @param $user_id - */ - public static function rollbackRegistrationByUserId($user_id) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $query = $database->prepare("DELETE FROM users WHERE user_id = :user_id"); - $query->execute(array(':user_id' => $user_id)); - } - - /** - * Sends the verification email (to confirm the account). - * The construction of the mail $body looks weird at first, but it's really just a simple string. - * - * @param int $user_id user's id - * @param string $user_email user's email - * @param string $user_activation_hash user's mail verification hash string - * - * @return boolean gives back true if mail has been sent, gives back false if no mail could been sent - */ - public static function sendVerificationEmail($user_id, $user_email, $user_activation_hash) - { - $body = Config::get('EMAIL_VERIFICATION_CONTENT') . Config::get('URL') . Config::get('EMAIL_VERIFICATION_URL') - . '/' . urlencode($user_id) . '/' . urlencode($user_activation_hash); - - $mail = new Mail; - $mail_sent = $mail->sendMail($user_email, Config::get('EMAIL_VERIFICATION_FROM_EMAIL'), - Config::get('EMAIL_VERIFICATION_FROM_NAME'), Config::get('EMAIL_VERIFICATION_SUBJECT'), $body - ); - - if ($mail_sent) { - Session::add('feedback_positive', Text::get('FEEDBACK_VERIFICATION_MAIL_SENDING_SUCCESSFUL')); - return true; - } else { - Session::add('feedback_negative', Text::get('FEEDBACK_VERIFICATION_MAIL_SENDING_ERROR') . $mail->getError() ); - return false; - } - } - - /** - * checks the email/verification code combination and set the user's activation status to true in the database - * - * @param int $user_id user id - * @param string $user_activation_verification_code verification token - * - * @return bool success status - */ - public static function verifyNewUser($user_id, $user_activation_verification_code) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "UPDATE users SET user_active = 1, user_activation_hash = NULL - WHERE user_id = :user_id AND user_activation_hash = :user_activation_hash LIMIT 1"; - $query = $database->prepare($sql); - $query->execute(array(':user_id' => $user_id, ':user_activation_hash' => $user_activation_verification_code)); - - if ($query->rowCount() == 1) { - Session::add('feedback_positive', Text::get('FEEDBACK_ACCOUNT_ACTIVATION_SUCCESSFUL')); - return true; - } - - Session::add('feedback_negative', Text::get('FEEDBACK_ACCOUNT_ACTIVATION_FAILED')); - return false; - } -} diff --git a/code/web/backend/application/model/UserModel.php b/code/web/backend/application/model/UserModel.php deleted file mode 100644 index 3261db8..0000000 --- a/code/web/backend/application/model/UserModel.php +++ /dev/null @@ -1,331 +0,0 @@ -getConnection(); - - $sql = "SELECT user_id, user_name, user_email, user_active, user_has_avatar FROM users"; - $query = $database->prepare($sql); - $query->execute(); - - $all_users_profiles = array(); - - foreach ($query->fetchAll() as $user) { - $all_users_profiles[$user->user_id] = new stdClass(); - $all_users_profiles[$user->user_id]->user_id = $user->user_id; - $all_users_profiles[$user->user_id]->user_name = $user->user_name; - $all_users_profiles[$user->user_id]->user_email = $user->user_email; - $all_users_profiles[$user->user_id]->user_active = $user->user_active; - $all_users_profiles[$user->user_id]->user_avatar_link = (Config::get('USE_GRAVATAR') ? AvatarModel::getGravatarLinkByEmail($user->user_email) : AvatarModel::getPublicAvatarFilePathOfUser($user->user_has_avatar, $user->user_id)); - } - - return $all_users_profiles; - } - - /** - * Gets a user's profile data, according to the given $user_id - * @param int $user_id The user's id - * @return mixed The selected user's profile - */ - public static function getPublicProfileOfUser($user_id) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "SELECT user_id, user_name, user_email, user_active, user_has_avatar - FROM users WHERE user_id = :user_id LIMIT 1"; - $query = $database->prepare($sql); - $query->execute(array(':user_id' => $user_id)); - - $user = $query->fetch(); - - if ($query->rowCount() == 1) { - if (Config::get('USE_GRAVATAR')) { - $user->user_avatar_link = AvatarModel::getGravatarLinkByEmail($user->user_email); - } else { - $user->user_avatar_link = AvatarModel::getPublicAvatarFilePathOfUser($user->user_has_avatar, $user->user_id); - } - } else { - Session::add('feedback_negative', Text::get('FEEDBACK_USER_DOES_NOT_EXIST')); - } - - return $user; - } - - /** - * @param $user_name_or_email - * - * @return mixed - */ - public static function getUserDataByUserNameOrEmail($user_name_or_email) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $query = $database->prepare("SELECT user_id, user_name, user_email FROM users - WHERE (user_name = :user_name_or_email OR user_email = :user_name_or_email) - AND user_provider_type = :provider_type LIMIT 1"); - $query->execute(array(':user_name_or_email' => $user_name_or_email, ':provider_type' => 'DEFAULT')); - - return $query->fetch(); - } - - /** - * Checks if a username is already taken - * - * @param $user_name string username - * - * @return bool - */ - public static function doesUsernameAlreadyExist($user_name) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $query = $database->prepare("SELECT user_id FROM users WHERE user_name = :user_name LIMIT 1"); - $query->execute(array(':user_name' => $user_name)); - if ($query->rowCount() == 0) { - return false; - } - return true; - } - - /** - * Checks if a email is already used - * - * @param $user_email string email - * - * @return bool - */ - public static function doesEmailAlreadyExist($user_email) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $query = $database->prepare("SELECT user_id FROM users WHERE user_email = :user_email LIMIT 1"); - $query->execute(array(':user_email' => $user_email)); - if ($query->rowCount() == 0) { - return false; - } - return true; - } - - /** - * Writes new username to database - * - * @param $user_id int user id - * @param $new_user_name string new username - * - * @return bool - */ - public static function saveNewUserName($user_id, $new_user_name) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $query = $database->prepare("UPDATE users SET user_name = :user_name WHERE user_id = :user_id LIMIT 1"); - $query->execute(array(':user_name' => $new_user_name, ':user_id' => $user_id)); - if ($query->rowCount() == 1) { - return true; - } - return false; - } - - /** - * Writes new email address to database - * - * @param $user_id int user id - * @param $new_user_email string new email address - * - * @return bool - */ - public static function saveNewEmailAddress($user_id, $new_user_email) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $query = $database->prepare("UPDATE users SET user_email = :user_email WHERE user_id = :user_id LIMIT 1"); - $query->execute(array(':user_email' => $new_user_email, ':user_id' => $user_id)); - $count = $query->rowCount(); - if ($count == 1) { - return true; - } - return false; - } - - /** - * Edit the user's name, provided in the editing form - * - * @param $new_user_name string The new username - * - * @return bool success status - */ - public static function editUserName($new_user_name) - { - // new username same as old one ? - if ($new_user_name == Session::get('user_name')) { - Session::add('feedback_negative', Text::get('FEEDBACK_USERNAME_SAME_AS_OLD_ONE')); - return false; - } - - // username cannot be empty and must be azAZ09 and 2-64 characters - if (!preg_match("/^[a-zA-Z0-9]{2,64}$/", $new_user_name)) { - Session::add('feedback_negative', Text::get('FEEDBACK_USERNAME_DOES_NOT_FIT_PATTERN')); - return false; - } - - // clean the input, strip usernames longer than 64 chars (maybe fix this ?) - $new_user_name = substr(strip_tags($new_user_name), 0, 64); - - // check if new username already exists - if (UserModel::doesUsernameAlreadyExist($new_user_name)) { - Session::add('feedback_negative', Text::get('FEEDBACK_USERNAME_ALREADY_TAKEN')); - return false; - } - - $status_of_action = UserModel::saveNewUserName(Session::get('user_id'), $new_user_name); - if ($status_of_action) { - Session::set('user_name', $new_user_name); - Session::add('feedback_positive', Text::get('FEEDBACK_USERNAME_CHANGE_SUCCESSFUL')); - return true; - } else { - Session::add('feedback_negative', Text::get('FEEDBACK_UNKNOWN_ERROR')); - return false; - } - } - - /** - * Edit the user's email - * - * @param $new_user_email - * - * @return bool success status - */ - public static function editUserEmail($new_user_email) - { - // email provided ? - if (empty($new_user_email)) { - Session::add('feedback_negative', Text::get('FEEDBACK_EMAIL_FIELD_EMPTY')); - return false; - } - - // check if new email is same like the old one - if ($new_user_email == Session::get('user_email')) { - Session::add('feedback_negative', Text::get('FEEDBACK_EMAIL_SAME_AS_OLD_ONE')); - return false; - } - - // user's email must be in valid email format, also checks the length - // @see http://stackoverflow.com/questions/21631366/php-filter-validate-email-max-length - // @see http://stackoverflow.com/questions/386294/what-is-the-maximum-length-of-a-valid-email-address - if (!filter_var($new_user_email, FILTER_VALIDATE_EMAIL)) { - Session::add('feedback_negative', Text::get('FEEDBACK_EMAIL_DOES_NOT_FIT_PATTERN')); - return false; - } - - // strip tags, just to be sure - $new_user_email = substr(strip_tags($new_user_email), 0, 254); - - // check if user's email already exists - if (UserModel::doesEmailAlreadyExist($new_user_email)) { - Session::add('feedback_negative', Text::get('FEEDBACK_USER_EMAIL_ALREADY_TAKEN')); - return false; - } - - // write to database, if successful ... - // ... then write new email to session, Gravatar too (as this relies to the user's email address) - if (UserModel::saveNewEmailAddress(Session::get('user_id'), $new_user_email)) { - Session::set('user_email', $new_user_email); - Session::set('user_gravatar_image_url', AvatarModel::getGravatarLinkByEmail($new_user_email)); - Session::add('feedback_positive', Text::get('FEEDBACK_EMAIL_CHANGE_SUCCESSFUL')); - return true; - } - - Session::add('feedback_negative', Text::get('FEEDBACK_UNKNOWN_ERROR')); - return false; - } - - /** - * Gets the user's id - * - * @param $user_name - * - * @return mixed - */ - public static function getUserIdByUsername($user_name) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "SELECT user_id FROM users WHERE user_name = :user_name AND user_provider_type = :provider_type LIMIT 1"; - $query = $database->prepare($sql); - - // DEFAULT is the marker for "normal" accounts (that have a password etc.) - // There are other types of accounts that don't have passwords etc. (FACEBOOK) - $query->execute(array(':user_name' => $user_name, ':provider_type' => 'DEFAULT')); - - // return one row (we only have one result or nothing) - return $query->fetch()->user_id; - } - - /** - * Gets the user's data - * - * @param $user_name string User's name - * - * @return mixed Returns false if user does not exist, returns object with user's data when user exists - */ - public static function getUserDataByUsername($user_name) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - $sql = "SELECT user_id, user_name, user_email, user_password_hash, user_active, user_account_type, - user_failed_logins, user_last_failed_login - FROM users - WHERE (user_name = :user_name OR user_email = :user_name) - AND user_provider_type = :provider_type - LIMIT 1"; - $query = $database->prepare($sql); - - // DEFAULT is the marker for "normal" accounts (that have a password etc.) - // There are other types of accounts that don't have passwords etc. (FACEBOOK) - $query->execute(array(':user_name' => $user_name, ':provider_type' => 'DEFAULT')); - - // return one row (we only have one result or nothing) - return $query->fetch(); - } - - /** - * Gets the user's data by user's id and a token (used by login-via-cookie process) - * - * @param $user_id - * @param $token - * - * @return mixed Returns false if user does not exist, returns object with user's data when user exists - */ - public static function getUserDataByUserIdAndToken($user_id, $token) - { - $database = DatabaseFactory::getFactory()->getConnection(); - - // get real token from database (and all other data) - $query = $database->prepare("SELECT user_id, user_name, user_email, user_password_hash, user_active, - user_account_type, user_has_avatar, user_failed_logins, user_last_failed_login - FROM users - WHERE user_id = :user_id - AND user_remember_me_token = :user_remember_me_token - AND user_remember_me_token IS NOT NULL - AND user_provider_type = :provider_type LIMIT 1"); - $query->execute(array(':user_id' => $user_id, ':user_remember_me_token' => $token, ':provider_type' => 'DEFAULT')); - - // return one row (we only have one result or nothing) - return $query->fetch(); - } -} diff --git a/code/web/backend/application/model/UserRoleModel.php b/code/web/backend/application/model/UserRoleModel.php deleted file mode 100644 index f45f088..0000000 --- a/code/web/backend/application/model/UserRoleModel.php +++ /dev/null @@ -1,65 +0,0 @@ -getConnection(); - - $query = $database->prepare("UPDATE users SET user_account_type = :new_type WHERE user_id = :user_id LIMIT 1"); - $query->execute(array( - ':new_type' => $type, - ':user_id' => Session::get('user_id') - )); - - if ($query->rowCount() == 1) { - // set account type in session - Session::set('user_account_type', $type); - return true; - } - - return false; - } -} \ No newline at end of file diff --git a/code/web/backend/application/view/_templates/feedback.php b/code/web/backend/application/view/_templates/feedback.php deleted file mode 100644 index 0ab3d62..0000000 --- a/code/web/backend/application/view/_templates/feedback.php +++ /dev/null @@ -1,19 +0,0 @@ -'.$feedback.''; - } -} - -// echo out negative messages -if (isset($feedback_negative)) { - foreach ($feedback_negative as $feedback) { - echo ''; - } -} diff --git a/code/web/backend/application/view/_templates/footer.php b/code/web/backend/application/view/_templates/footer.php deleted file mode 100644 index 6829782..0000000 --- a/code/web/backend/application/view/_templates/footer.php +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/code/web/backend/application/view/_templates/header.php b/code/web/backend/application/view/_templates/header.php deleted file mode 100644 index 9859a71..0000000 --- a/code/web/backend/application/view/_templates/header.php +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - - -
- - - - - - - - - \ No newline at end of file diff --git a/code/web/backend/application/view/dashboard/index.php b/code/web/backend/application/view/dashboard/index.php deleted file mode 100644 index 7a74d9b..0000000 --- a/code/web/backend/application/view/dashboard/index.php +++ /dev/null @@ -1,15 +0,0 @@ -
-

DashboardController/index

-
- - - renderFeedbackMessages(); ?> - -

What happens here ?

-

- This is an area that's only visible for logged in users. Try to log out, an go to /dashboard/ again. You'll - be redirected to /index/ as you are not logged in. You can protect a whole section in your app within the - according controller by placing Auth::handleLogin(); into the constructor. -

-

-
diff --git a/code/web/backend/application/view/error/index.php b/code/web/backend/application/view/error/index.php deleted file mode 100644 index 4fea684..0000000 --- a/code/web/backend/application/view/error/index.php +++ /dev/null @@ -1,6 +0,0 @@ -
-

Page not found

-
-

This page does not exist.

-
-
diff --git a/code/web/backend/application/view/index/index.php b/code/web/backend/application/view/index/index.php deleted file mode 100644 index 3061171..0000000 --- a/code/web/backend/application/view/index/index.php +++ /dev/null @@ -1,18 +0,0 @@ -
-

IndexController/index

-
- - - renderFeedbackMessages(); ?> - -

What happens here ?

-

- This is the homepage. As no real URL-route (like /login/register) is provided, the app uses the default - controller and the default action, defined in application/config/config.php, by default it's - IndexController and index()-method. So, the app will load application/controller/IndexController.php and - run index() from that file. Easy. That index()-method (= the action) has just one line of code inside - ($this->view->render('index/index');) that loads application/view/index/index.php, which is basically - this text you are reading right now. -

-
-
diff --git a/code/web/backend/application/view/login/changePassword.php b/code/web/backend/application/view/login/changePassword.php deleted file mode 100644 index 12115c5..0000000 --- a/code/web/backend/application/view/login/changePassword.php +++ /dev/null @@ -1,27 +0,0 @@ -
-

LoginController/changePassword

- - - renderFeedbackMessages(); ?> - -
-

Set new password

- -

FYI: ... Idenfitication process works via password-reset-token (hidden input field)

- - - - - - - - - - - - - Back to Login Page -
-
diff --git a/code/web/backend/application/view/login/changeUserRole.php b/code/web/backend/application/view/login/changeUserRole.php deleted file mode 100644 index 2a0951c..0000000 --- a/code/web/backend/application/view/login/changeUserRole.php +++ /dev/null @@ -1,31 +0,0 @@ -
-

LoginController/changeUserRole

- - - renderFeedbackMessages(); ?> - -
-

Change account type

-

- This page is a basic implementation of the upgrade-process. - User can click on that button to upgrade their accounts from - "basic account" to "premium account". This script simple offers - a click-able button that will upgrade/downgrade the account instantly. - In a real world application you would implement something like a - pay-process. -

-

- Please note: This whole process has been renamed from AccountType (v3.0) to UserRole (v3.1). -

- -

Currently your account type is:

- -
- - - - - -
-
-
diff --git a/code/web/backend/application/view/login/editAvatar.php b/code/web/backend/application/view/login/editAvatar.php deleted file mode 100644 index f62f4e2..0000000 --- a/code/web/backend/application/view/login/editAvatar.php +++ /dev/null @@ -1,28 +0,0 @@ -
-

Edit your avatar

- - - renderFeedbackMessages(); ?> - -
-

Upload an Avatar

- - - -
- - - - - -
-
- -
-

Delete your avatar

-

Click this link to delete your (local) avatar: Delete your avatar -

-
diff --git a/code/web/backend/application/view/login/editUserEmail.php b/code/web/backend/application/view/login/editUserEmail.php deleted file mode 100644 index 7d1097f..0000000 --- a/code/web/backend/application/view/login/editUserEmail.php +++ /dev/null @@ -1,17 +0,0 @@ -
-

LoginController/editUserEmail

- - - renderFeedbackMessages(); ?> - -
-

Change your email address

- -
- - -
-
-
diff --git a/code/web/backend/application/view/login/editUsername.php b/code/web/backend/application/view/login/editUsername.php deleted file mode 100644 index fedd113..0000000 --- a/code/web/backend/application/view/login/editUsername.php +++ /dev/null @@ -1,18 +0,0 @@ -
-

LoginController/editUsername

- - - renderFeedbackMessages(); ?> - -
-

Change your username

- -
- - - -
-
-
diff --git a/code/web/backend/application/view/login/index.php b/code/web/backend/application/view/login/index.php deleted file mode 100644 index d430350..0000000 --- a/code/web/backend/application/view/login/index.php +++ /dev/null @@ -1,34 +0,0 @@ -
- - - renderFeedbackMessages(); ?> - - -
diff --git a/code/web/backend/application/view/login/register.php b/code/web/backend/application/view/login/register.php deleted file mode 100644 index a9169c1..0000000 --- a/code/web/backend/application/view/login/register.php +++ /dev/null @@ -1,37 +0,0 @@ -
- - - renderFeedbackMessages(); ?> - - - -
-
-

- Please note: This captcha will be generated when the img tag requests the captcha-generation - (= a real image) from YOURURL/login/showcaptcha. As this is a client-side triggered request, a - $_SESSION["captcha"] dump will not show the captcha characters. The captcha generation - happens AFTER the request that generates THIS page has been finished. -

-
diff --git a/code/web/backend/application/view/login/requestPasswordReset.php b/code/web/backend/application/view/login/requestPasswordReset.php deleted file mode 100644 index ce41a08..0000000 --- a/code/web/backend/application/view/login/requestPasswordReset.php +++ /dev/null @@ -1,18 +0,0 @@ -
-

Request a password reset

-
- - - renderFeedbackMessages(); ?> - - -
- - -
- -
-
diff --git a/code/web/backend/application/view/login/showProfile.php b/code/web/backend/application/view/login/showProfile.php deleted file mode 100644 index eeadc66..0000000 --- a/code/web/backend/application/view/login/showProfile.php +++ /dev/null @@ -1,21 +0,0 @@ -
-

LoginController/showProfile

- -
-

Your profile

- - - renderFeedbackMessages(); ?> - -
Your username: user_name; ?>
-
Your email: user_email; ?>
-
Your avatar image: - - Your gravatar pic (on gravatar.com): - - Your avatar pic (saved locally): - -
-
Your account type is: user_account_type; ?>
-
-
diff --git a/code/web/backend/application/view/login/verify.php b/code/web/backend/application/view/login/verify.php deleted file mode 100644 index 6a880c4..0000000 --- a/code/web/backend/application/view/login/verify.php +++ /dev/null @@ -1,12 +0,0 @@ -
- -

Verification

-
- - - renderFeedbackMessages(); ?> - - Go back to home page -
- -
diff --git a/code/web/backend/application/view/note/edit.php b/code/web/backend/application/view/note/edit.php deleted file mode 100644 index 6e29473..0000000 --- a/code/web/backend/application/view/note/edit.php +++ /dev/null @@ -1,22 +0,0 @@ -
-

NoteController/edit/:note_id

- -
-

Edit a note

- - - renderFeedbackMessages(); ?> - - note) { ?> -
- - - - - -
- -

This note does not exist.

- -
-
diff --git a/code/web/backend/application/view/note/index.php b/code/web/backend/application/view/note/index.php deleted file mode 100644 index 13379b6..0000000 --- a/code/web/backend/application/view/note/index.php +++ /dev/null @@ -1,43 +0,0 @@ -
-

NoteController/index

-
- - - renderFeedbackMessages(); ?> - -

What happens here ?

-

- This is just a simple CRUD implementation. Creating, reading, updating and deleting things. -

-

-

- - -
-

- - notes) { ?> - - - - - - - - - - - notes as $key => $value) { ?> - - - - - - - -
IdNoteEDITDELETE
note_text); ?>EditDelete
- -
No notes yet. Create some !
- -
-
diff --git a/code/web/backend/application/view/profile/index.php b/code/web/backend/application/view/profile/index.php deleted file mode 100644 index 14e1477..0000000 --- a/code/web/backend/application/view/profile/index.php +++ /dev/null @@ -1,44 +0,0 @@ -
-

ProfileController/index

-
- - - renderFeedbackMessages(); ?> - -

What happens here ?

-
- This controller/action/view shows a list of all users in the system. You could use the underlying code to - build things that use profile information of one or multiple/all users. -
-
- - - - - - - - - - - - users as $user) { ?> - - - - - - - - - -
IdAvatarUsernameUser's emailActivated ?Link to user's profile
user_id; ?> - user_avatar_link)) { ?> - - - user_name; ?>user_email; ?>user_active == 0 ? 'No' : 'Yes'); ?> - Profile -
-
-
-
diff --git a/code/web/backend/application/view/profile/showProfile.php b/code/web/backend/application/view/profile/showProfile.php deleted file mode 100644 index dc2bdba..0000000 --- a/code/web/backend/application/view/profile/showProfile.php +++ /dev/null @@ -1,41 +0,0 @@ -
-

ProfileController/showProfile/:id

-
- - - renderFeedbackMessages(); ?> - -

What happens here ?

-
This controller/action/view shows all public information about a certain user.
- - user) { ?> -
- - - - - - - - - - - - - - - - - - - -
IdAvatarUsernameUser's emailActivated ?
user->user_id; ?> - user->user_avatar_link)) { ?> - - - user->user_name; ?>user->user_email; ?>user->user_active == 0 ? 'No' : 'Yes'); ?>
-
- - -
-
diff --git a/code/web/backend/composer.json b/code/web/backend/composer.json deleted file mode 100644 index 6c8992b..0000000 --- a/code/web/backend/composer.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "panique/huge", - "type": "project", - "description": "A full-feature user authentication / login system embedded into a simple but powerful MVC framework structure", - "keywords": ["login", "auth", "user", "authentication", "mvc", "membership"], - "homepage": "https://github.com/panique/huge", - "license": "MIT", - "require-dev": { - "php": ">=5.5.0", - "phpmailer/phpmailer": "~5.2", - "gregwar/captcha": "~1.0.12", - "phpunit/phpunit": "~4.5" - }, - "autoload": { - "psr-4": { "": ["application/core/", "application/model/"] } - } -} diff --git a/code/web/backend/public/.htaccess b/code/web/backend/public/.htaccess deleted file mode 100644 index fa61be3..0000000 --- a/code/web/backend/public/.htaccess +++ /dev/null @@ -1,23 +0,0 @@ -# Necessary to prevent problems when using a controller named "index" and having a root index.php -# more here: http://httpd.apache.org/docs/2.2/content-negotiation.html -Options -MultiViews - -# Activates URL rewriting (like myproject.com/controller/action/1/2/3) -RewriteEngine On - -# Prevent people from looking directly into folders -Options -Indexes - -# If the following conditions are true, then rewrite the URL: -# If the requested filename is not a directory, -RewriteCond %{REQUEST_FILENAME} !-d -# and if the requested filename is not a regular file that exists, -RewriteCond %{REQUEST_FILENAME} !-f -# and if the requested filename is not a symbolic link, -RewriteCond %{REQUEST_FILENAME} !-l -# then rewrite the URL in the following way: -# Take the whole request filename and provide it as the value of a -# "url" query parameter to index.php. Append any query string from -# the original URL as further query parameters (QSA), and stop -# processing this .htaccess file (L). -RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] diff --git a/code/web/backend/public/avatars/.htaccess b/code/web/backend/public/avatars/.htaccess deleted file mode 100644 index daf4191..0000000 --- a/code/web/backend/public/avatars/.htaccess +++ /dev/null @@ -1,7 +0,0 @@ -# TODO is this really safe ? -# this disallows direct access to the folder listing -# and disallows access to any executables files (that users may upload) -# the script allows only .jpg/.png uploads, but we never know... -Options -Indexes -Options -ExecCGI -AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi diff --git a/code/web/backend/public/avatars/default.jpg b/code/web/backend/public/avatars/default.jpg deleted file mode 100644 index 45f18c7fd1ca0bdd31432c398f880b5f06dbb202..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2636 zcmbVM2~-nT7oIFEil9Ld1(z`dMTKlgFwuxWKoDb7TtF>qNG1>=nUDksM2ohHsF-39 zMNpfHEm}YjDoX4(}Cjh_pkry`R|!I^WJ^;`|f@3eRqtl z#=F2|UxiQr009AW0dwG^8G8U6D~1;t51;@n;^qT@@h)awgj_CRkVs+~k;{j}AR-SI zkrZ4Bi9#fkfJL4P36~cM$-yuvTqtJZpJ}V`ppehR2fMS$Y>5vPA@om>LMszitl}j^ z^5}fL=VEY?f}s#eM39^dDnwCY8AHLukB~Ev@vxhO2S-BWkxabTa8@vc%>jL2DFnI` z-CTKO3I(Lmh?M#6G#bSPq>?FA5*c}Du9W!)rUg$pn22ZV_7gSMg)oF@3H)kSl`cLhovBr zAemW^R2U2K{iLu69N98M`1xAAKg&0Y<$t~wpU+}RNHL`0i~Z!H-@6d?3=coZ7MXky zJ|sreE=6Q*dfamsqhUVSC>)JKA*;yyVd38nj5+{k4sZYt z289FAI1~nlGU@>s01z$|>SOlssGMWakc94Isfz?$Gp zXIh(4yre}F-OMlJ)hnsCHr`>5J_OvStRwNpHeehEg=ELz08ijGQ5}FO>!0y$Y2=w_ z%-JiBkN!~CCLGgW|vrhmrX0$$;>X?GqwTYn+_!XbVinqxDW;OwFYP=quM z5KTza0nRj+Nx$84IPONf*|t8-6a6Uvy4(18=HVN~2VZ5YnyQUJRMPh1ERXo!@=#bpPOQ^NyaC1if)gs3`Ikf#h~p@X>W^@Z=+Be5X=QkZbq*TDwHo zAa89l`e(fJ*knxvV2|=T#7dt&=SzZ$#aDZ99zML2o1Kl$OUdybk9M9pd*izWU7q>% z&(0m`N}G{dsM?Zrr>z9HqpcERgdg(2(0 z1=?C&=8Nj@3_ez2ZCLD4$5JCe&-Us_cBT*gJ+m3>k(KzixPN8NE9FINhXrxdD$`r8 zOkb7c(o}hA3KXWmsZ{G?T1=%c9OJY}4K0)I)oxn; zO(=f}4=!|aMR`q0cy;55;Jp5pD8C?4lvq`?=EZt_$rUI4`ZZ%NuwJF)`qkhocgE04 z3@mkHgW))+-^n|^gQF=Hwmq%sj-9(o6{i&he}iJIMf{_s%byRqw8dtOQv{}@bR5dsMdevUXBzyseHH5O z{~$1At2Ux4g*>-lqQNkYh^S($mGGMQ@ZHxrzdRjy$8tL74Gv~0sVD7!x5!Y@CJja( zr5|ex-MTQNDy7+tglTB7wN%%3OUhkTc9f{7qCb>RjtEvXALE+zo=Bp5dk&=rocI6! z%)J<{t~ow?(6O%|gJZ2!E7}baPNjOwtmzvS;idTJYp{_CeRo*=c8J*u)3w{UMMlUq1z6ZLt){X>ML{_Oi%^l}f=fYyR}6_U=B z)#q}S_=iw(f5c`X2Qb_ljvkH6IrZ{A5BfOs%a}E#FQTi6r*}L3-XA intent */ - margin: 0; - padding: 0; -} -/* TODO */ -.navigation { -} -.navigation.right { - float: right; -} -.navigation li { - float: left; - margin-right: 5px; -} -.navigation .navigation-submenu { - display: none; -} -.navigation li a { - display: block; - text-decoration: none; - padding: 10px 15px; - border: 2px solid #454545; - background: #454545; - color: #fff; - float:none; - font-size: 10px; - text-transform: uppercase; - font-weight: bold; -} -.navigation li:hover .navigation-submenu { - display: block; - position: absolute; - float: left; -} -.navigation li:hover li, -.navigation li:hover a { - float: none; -} -.navigation li a:hover, -.navigation li:hover li a:hover { - background: #fff; - color: #454545; -} - -.navigation > li.active a { - background: #fff; - color: #454545; -} -.navigation > li.active li a { - background: #454545; - color: #fff; -} - -/* overview */ -.overview-table img { - width: 40px; - height: 40px; -} - -/* feedback boxes */ -.feedback { - padding: 30px; - margin-bottom: 10px; -} -.feedback.success { - color: #558f2d; - background-color: #ddf2c0; -} -.feedback.error { - color: #ff7272; - background-color: #ffe5e5; -} -.feedback.info { - color: #00529B; - background-color: #BDE5F8; -} - -.header_right_box { - float: right; -} - -/* login screen */ -.login-page-box { - display: table; - width: 100%; -} -.login-page-box .table-wrapper { - display: table-row; -} - -.login-box { - display: table-cell; - margin: 0; - color: #777; - background-color: #f4f3f1; - padding: 20px 50px 45px 50px; - width: 49%; - box-sizing: border-box; - font-weight: 400; - text-transform: uppercase; -} -.login-box h2 { - color: #252525; -} -.login-box input[type="text"], -.login-box input[type="password"] { - font-family: Arial, sans-serif; - color: #252525; - background-color: #ffffff; - padding: 15px 20px; - margin-bottom: 10px; - display: block; - width: 100%; - box-sizing: border-box; /* modern way to say width:100% without padding */ - /*text-transform: uppercase;*/ -} -.login-box input[type="submit"] { - color: #777; - background-color: transparent; - border: 2px solid #777; - padding: 15px 20px; - margin-bottom: 10px; - display: block; - width: 100%; - box-sizing: border-box; /* modern way to say width:100% without padding */ - text-transform: uppercase; -} -.login-box input[type="submit"]:hover { - color: #fff; - border-color: #252525; - background-color: #252525; -} -.login-box .remember-me-label { - display: block; - margin-bottom: 10px; -} -.login-box .link-forgot-my-password { - display: block; - text-align: right; -} -.login-box .link-forgot-my-password a { - color: #777; - text-decoration: none; -} -.login-box .link-forgot-my-password a:hover { - text-decoration: underline; -} -.login-box ::-webkit-input-placeholder { color: #777; opacity: 0.5; } -.login-box ::-moz-placeholder { color: #777; opacity: 0.5; } -.login-box :-ms-input-placeholder { color: #777; opacity: 0.5; } -.login-box input:-moz-placeholder { color: #777; opacity: 0.5; } - -.register-box { - display: table-cell; - color: #fff; - background-color: #252525; - padding: 20px 50px 45px 50px; - width: 49%; - box-sizing: border-box; - font-weight: 400; - margin: 0; - text-transform: uppercase; -} -.register-box h2 { - color: #fff; -} -.register-box a { - width: 100%; - display: block; - box-sizing: border-box; /* modern way to say width:100% without padding */ - background-color: transparent; - border: 2px solid #fff; - padding: 15px 20px; - margin-bottom: 10px; - text-decoration: none; - text-align: center; - color: #fff; -} -.register-box a:hover { - background-color: #ffffff; - color: #252525; -} - -/* error page */ -.red-text { - color: red; -} \ No newline at end of file diff --git a/code/web/backend/public/index.php b/code/web/backend/public/index.php deleted file mode 100644 index fc3bc9b..0000000 --- a/code/web/backend/public/index.php +++ /dev/null @@ -1,17 +0,0 @@ -assertEquals('index', Config::get('DEFAULT_ACTION')); - } - - public function testGetFailingEnvironment() - { - // fake application constants - putenv('APPLICATION_ENV=foobar'); - - // call for environment should return false because config.foobar.php does not exist - $this->assertEquals(false, Config::get('DEFAULT_ACTION')); - } -} diff --git a/code/web/backend/tests/core/EnvironmentTest.php b/code/web/backend/tests/core/EnvironmentTest.php deleted file mode 100644 index a6d32cf..0000000 --- a/code/web/backend/tests/core/EnvironmentTest.php +++ /dev/null @@ -1,23 +0,0 @@ -assertEquals('development', Environment::get()); - } - - public function testGetDevelopment() - { - putenv('APPLICATION_ENV=development'); - // call for environment should return "development" - $this->assertEquals('development', Environment::get()); - } - - public function testGetProduction() - { - putenv('APPLICATION_ENV=production'); - $this->assertEquals('production', Environment::get()); - } -} diff --git a/code/web/backend/tests/core/RequestTest.php b/code/web/backend/tests/core/RequestTest.php deleted file mode 100644 index e1382b3..0000000 --- a/code/web/backend/tests/core/RequestTest.php +++ /dev/null @@ -1,29 +0,0 @@ -assertEquals(22, Request::post('test')); - $this->assertEquals(null, Request::post('not_existing_key')); - - // test trim & strip_tags: Method is used with second argument "true", triggering a cleaning of the input - $_POST["attacker_string"] = ' '; - $this->assertEquals('alert("yo!");', Request::post('attacker_string', true)); - } - - public function testGet() - { - $_GET["test"] = 33; - $this->assertEquals(33, Request::get('test')); - $this->assertEquals(null, Request::get('not_existing_key')); - } - - public function testCookie() - { - $_COOKIE["test"] = 44; - $this->assertEquals(44, Request::cookie('test')); - $this->assertEquals(null, Request::cookie('not_existing_key')); - } -} diff --git a/code/web/backend/tests/core/TextTest.php b/code/web/backend/tests/core/TextTest.php deleted file mode 100644 index 1e12d70..0000000 --- a/code/web/backend/tests/core/TextTest.php +++ /dev/null @@ -1,28 +0,0 @@ -assertEquals('Password was wrong.', Text::get('FEEDBACK_PASSWORD_WRONG')); - } - - /** - * When argument is null, should return null - */ - public function testGetWithNullKey() - { - $this->assertEquals(null, Text::get(null)); - } - - /** - * When key does not exist in text data file, should return null - */ - public function testGetWithNonExistingKey() - { - $this->assertEquals(null, Text::get('XXX')); - } -} diff --git a/code/web/backend/tests/phpunit.xml b/code/web/backend/tests/phpunit.xml deleted file mode 100644 index a4f056a..0000000 --- a/code/web/backend/tests/phpunit.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - ./core/ - - - \ No newline at end of file diff --git a/code/web/backend/travis-ci-apache b/code/web/backend/travis-ci-apache deleted file mode 100644 index 10050bf..0000000 --- a/code/web/backend/travis-ci-apache +++ /dev/null @@ -1,7 +0,0 @@ - - DocumentRoot "%TRAVIS_BUILD_DIR%/public" - - AllowOverride All - Require all granted - - diff --git a/code/web/frontend/README.md b/code/web/frontend/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/doc/Command Process.dia b/doc/Command Process.dia deleted file mode 100644 index 4c5170cdc31582345e87e4973129bbf535cee662..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8461 zcmV+oA@bfIiwFP!000021MOXHQzJ)`{yx7#!A5MXH=3S$e_5^VkU_S&W55ey_h!Ek z0tBO5fhL5;_UwoIJ@-HEk6l%@m;tF9wYoYRNhBK{@8F_S)l_9ZnfYYqU%&tTcGUWH zFu5O&@4nrkDcNZa?k>ky!@HYrcg}i0?wXzNzkBo7t6~2y?w^}U|F-3R;_lx6?c1FX z)9J^*ynXxIZ@;CZ&-eZ5c#@8WpVIrm+yCj0M*X*L(c7Kx-n3eeA8^&5_Wk!}-|bJQ zli|gu>7aGjza4zLbJ4&2*Ue=7>F#PLTQysEIUbECtzY}2Z+HH1J^R{uJA2UECr^6j z=^y(ygNwPcH2cQaXXSm+LLt-J{^VwOwTo0$y@siJf-5=eT z*+BN~FSl*gn|m`EUOj(tpR6c&%GGE0@8KorujIGk)%3&p??Atj?CGC@p8o6bet0n& zx z-^pOtoxHo9)=b~bK1^%2h5n;&_1%tsefZm>6QBL=W+(Z_(fGH^5B zN+%&DvaN{wGcnrzSxw+zG`Ky#98c~RadJI73Ic+mTin%yk&`6i*&hbOn-A0ChZ|e% z;TPk{)nKyhqmz`9?28IZC{?uLdm6gqJUM@Ar*bUSpzr_p)l#h{#9#jN9G7qTonJ-D z$NtsTQyjbS(khEQS2&Jy4-x2EV#1aI!ix;e+M!0mfR-xdMy@!d2}kpF(`+CkXS zXZLyfclSH3`{`$|&YUL7e)Q+T=-0t?c-eofd{_Sj3s)rfcVfuXFA*p7sgBIkDqJRl zrOL`ULGyQ}Fw8*6<9ky@l*2YRcejK5-{;`&(`^pyea=AV*~=pA_V%kOt8Uw9tZmzs z2G+Pa0p6r#=53b+TgL>jeT&&u83V@*pn+ow4ICOcG;r%@;C6*bC`~C^xaKSztHZ)^ z32))JaHg$o8u8y^_Eg5cDFtZXBt!d#_6_aZ8rnA|6NUDzQTxWDqmwEjfYy!5)F!)5 ztG1a+X~I(p8=0)Un=*EdLIx&zD&*tqN-33C-8p1eZ0@Ti3(Ch0yTW>oz8r}`g zgUX&4kgEw^p9wwb{_U)L+H=b2sQZsU-M7AJ{r%ma?!Q6H3T;^#O=xNvn$>#D>Z!9( zSN+MAJIIIb&gYm_5o=bNw{-&2Z)7A@!b{=STHR(e7P7!g zx0koXe-f4$=ht#lG3(}z%H_xT&ymL`S;-vVU7hzQlksoGYM!ykN1u-dcQ?-)U>Pf7 zsfjNs;cNQ;e!-AD{Fl}TcV%W8cRCKhv-S1Ax?crfWT4DFbydK-KkVO*ov~lMoiZBq znnV~#)T@1-Lij)1K3k!PP9${JB4Sgef;uUoL@7cw)!G`y0I{%o^;on7VC0fZ$+;!c za;CYq7=uBi7_6@3iNrWeqj4A&ZIWcF9d1jwf{n%~czXJ_Lt794ZBbM#6h2aM z*o!Z@XZ0u{6Rm_ij|x%=x#yDyC1i~ZtgQ{uK}W}^g1}YK)3b*vXbn}+a(CUvsvu4i z3dx(`9v>&3?%o#ElL8$o0(H_OHncU=33QuR;R5`J^OajON&wm&@aib#Q3(3V&2a!I ziN~oa5!(1)oE93?Yfi1z+6&^En>P1Z0BRG;Qew4$CIb{~Gv^R{t46bxTyW$BY!@fM z+1;n40JU%!a(L4{$nv)wE_ik=XT;w>h2o^@+@)DqpP>Rq|q%r*_^2$hg)j`+guW!2$K?8 z)wL~u&+~VgztDOftV7F6;62~6d#;K(=gY6Tgudhj*-jc?OTrQf%DHgQpK&gD#<`Hl zxj+vf|MX$Pb0awyRMtSckOY==A?#z)g(OJ2Kpm8K_D~0{w+{N}@aCWWn>nZFizZTa zq}8aesH4CsHD9(zc}k37ZLU&EoogX!h?65Yi$D{p5! z89qJe&mHpTB5=h&x5{Vgf0~Xb<4@C^Q1^5F#?g~&*pr)c#zah>u>Q*9f@Z0@hF&|; z0yo=nxXH|lyNFB_OQHMiNc+lJV_4C(mK9w;oE;qQKl;CKI!F7huKVX7orB)N(NBol z8^|3hcVLjR)?DV$)R8$PJnL2=xB*TnaI1Xi(ORCR6clI9p7>8-8b}@H?z3Pi&CF`m z&xJXK4MCzSrVjN>a@K4OoHeDuNoz_zZiAy4d>b64uni8<){wS_ZE%#uHaJZJP)2HK zoTyj>ofDbxa(wT^40$SNHJoK4@SL^z{XKJf6{5{8W2)&G3JaYJeUgSKER5DbVbKhh z!lLOD3X8*;NMS)VkazkpeY}wr7RG9zuqXpdVNv=qg+&>pu%HggJA0^uHd6=j8jz3z zCiAL{%**{OE2o1tgUj1FJe;NMTCKg~cfTBVd)?OesFxbRMhfY@o8Hfei5eOjIqbs0 zTN*hb?4hTTcIO?qr&0AiVOOJ9NFCYl2D|gc7@_@Xps$g#DMOM-b1`~Z7Xe#Ya00gS zKD3gQWj&1u^QVPtVH)UZG{41yeny1)&qOHJn{HjS-bT=r9VB}>ZU~Dmvfw#c)|f@ATM zAygM8$xnSl-NZn~D9p-wj^iH0nWMjarf5PWPn_~5h_@FAf?_YQb) z6Gl=AVQ0XDQ6G`18opl*cFb+CU=?BE6IzRqW7{ByDy)N9hcP4h6fGW2Ul$s7=A2Mp zX3mAH3_f!%VnfKzdWGz)&S5um{ZFlx>yXj)dz{&E(1J4R&Gn?UfluHbJDznN9A9|xcG@oei`9?#OZGg>0( z>|v9&z6}sZa36l+%D2@az^!ldc9(O#`SJx0xH=2TU%s&|MDyC}Fc1|GfcLo)E0oKZ zazCS4-`pgiS|>CM+x0r8?Z*nq1bX6m<^7=Z`6>sV_s&j^THTYA;}di~!Pyi%LEjU^ z_k13qs?G60=i#Xrt3mN;Iq#E~TZ9l5A?jNC$nXgDc#@}jqB-b-C6uI)nNQ(tl9!>{ zLZsBkyebB~ZU@u;GT?GGyqtn&Ut(TY83+tn{#5bVBWL!OUrjoPc4&k!4>dkL+lO}% zfUF|qdN>-D5OO{HT4z5YysrRrSFvf2T&{|5a5VgQ{=pg3e>>3KA3@Cx3Sykr^N<}( z$o;2_d-wRkPUV+WQ?$X){N>g+Vs#kIOvwwa)oaUvc zqElZOCX5LaK8NFIe5}v`6H$58bvY=fJd|UpXfv5g%bY-m={6Y5#l5pKc+RBOy{AW3 zPa>d0K!)U(o#m8WrrOfVy9Wuhm$AbfWB4x?!x!Xf7=E=G_GG>V6KSX< zMerJi)_{^ke1HGI5%B|SXkds);DI%-o+5HFo?Hzk%P$n0$zj$I#u*cv?#WObyn{n` z8XLNUG?W)8uMzPD;3`Z_dvZpA8hkM?NlPNK24Bt&eG3%0$7~9# z$zLJf?fu;Cob0=6cG~Nl^bq$pgL`+K!RHo%Z*9Q0guzgC7z`m(W;KVm8eWjl{EOW% zsje)yyy=MA9u^0ok%BQ&r`^Nuo^QCh-$mQhgl!T!WmI#tPK{Y7U59m20^Tqw{>YtC z8s43$x+yeAXpVpwOefurpDTiOs*M;UCDBo8(iE9GOp&4RrpS;-rpO3*Q&e?R7+HIT zR^s5u*@<`Eqh9N8XWcV&TpF(-VApr` z4vh`8=FFK578>v9)M(B?El2G3%9sxYXgw7AEz2zumt0EDEs>Tp&9z;B3xy`B36tbI zr%;1NseX!6!9-O_;vE>0XxLbq6Trhv)mH7y-KwZdnDRj$%W<)J$g?UBS33o#6+)+fs(`8w)ubAwuv? z0q1NYHih&7ObkIKhEDzX=!2slk5ArpdI!fxr*HNr`SuuCdnF zQq+(kN(nPMRLK$0ERk?#icsby3Bq-V&slARkKnf7JTLs8KBCEd0?yJzgbmhpwu)KC)IU$!BWCIz*2;!Aes9s4REY9VpHh$qT7pZ zFRa@uaUgi3POquO>D4lDX|xsw+UaG|2HK9YEOUB=Rf%+l#4^)_)0?~10z0Fs<5hHb zw=-|9=HQ@i*4vG*U7;jYm2eH(o`VKtC{(JHGVNU(prI3MDvK@W=H~4#f0@v}Q;&Ln znO1)+Qnici}S+0nzf$&S0(}i^{g$vpM7cOZ1v~WQiEL=c8CI0{-M|dMS z!kX5>5sn%mwHiyu9{WsSNC{I#=~QGx1nYGSWzDl5^w!+G;OyI5ov-WO&^bN zs=%ELjEOfn)>QL4%!VHm(umn`f*zR-2iBS}8&SJMvw>y<%?6;^@cdyk8x5vXb$re({8dPss=AR&e>#vTcRTD3kDO`HJG4^331C~3G*or${Ol_ zu4Ns!+t2DS*1%tHF`Hmwvg@sdoJ}wh4P5VqUFP2JlrUju(@U_qz_wj-5p&7;3-v(P z@x=gsb`S%v9Hn6;5_WxTKqKXxK~zYasgUB??b`R> zfmTS`$6_*tq=G_nGEpI+LMlFksE}IgJuW7{2HV7Q-33cPr&kH)`2)Kooz1VZGU31# z*wwd$1=z2#0K0qIYwdM@>Fgc!-oH6G`thW5+B-Sh>z$o+(Hgc&C6|$0F9V>aS^~alOyY;92KVN=>rlJvdLZ%c)MK(7o z(!|%Y2%1mFdDv*{T57ofrPUj*16N5%@%al zY{AKC`_2oY(E^1Z#x}pR0^8}KG?Jyai!5#E9N(F*!j?7+nk`*)pJg5Q*;#$7g=*qT zJ5j=k`g*NZN(gIURzl7$^OyOMYUK}v7kq6mIEm?>vY;NCDu*ztjs{5-wpE)G@X)GF zWQ=2qt=iCaC^&%VI&3D9CcXkfDj#8B(sD?3BvlA_J3++q_O6g2Y))_Rf59~&;2 zf_793cbd1>n>J#ywdk;JnZwGW999k9@Us9W+B&FntO3F`wU5YitO3R~L&`Pc!m_yV zq}w|?IcojAb9jb9ie^X=j3R-qL0D)>9l47LF57CE3qRobOD@u5LTegGTFh;)V37^o z;}8KN0(^u3?TZd|w$UXNRHZTzm2p|A+s&QE7Y_Z|aIf25WF}KWj=0L%SW(g;lF=;53YvYRrqywq2 zxf3UV%{ZVubt*A<#+#7J{bkg@9Nf2#?^;LWEBAjgMtN(0aO-|Atv|b8`QW-W8r}}4 z-?Y%3f{(L5J*k-U-N11t$uJZHDvp)P@AGw!*KSh-U zt&*OeL{vzdsgOh+BouC7`6mh2DWlATD3dbg6ccy<-hev1lWwQiZ5%H=scx?sTdKPLMjGQbkR?T zwLOd_N+J^jf{F2b#*g5>}5Y)1nDgW@afV_8<~EC6&LoTqRX*6{<2+WgC;#S~pcz(CC1Y8p>##KP{|= ztc9kthRn*hXqIi3wLMTaG-w8Hb&#{a+(jldXU0Yc+jXyfd@JH&EB<0}xf;ePBvOON z<)r!=mm}bDxvCq&xZEp@%XR;2@9=ED+d4Yl$B0}55jlt5F(TJolPgMO4cL!3Y-CLX z*v|3vu()Ulu4Nb+D*Qf-v zxJIRv6D<;++O}uZGbR#~Ry_2#gK2*mD7YG4PC>zCgco}%p3Jjlf~csbEbY3A=ksvsDzN~+1ENF@-mIX7DJnl4j`B# zK<9uaU4O^m-SNKD!JV_-&#$iBS8z$JwNgs1n6wm}v+56sU@}oDmqu%J4=Pvw`qO`Y zJ)Gv{5^_J#N~&@+{CNIhJQ@Dm9oYT|DpwK2IK1PJJD8CBPZ#&@@q?Yp+OTdo7hnEn z69(E@#yUKwxJa0GfKH^8663%f+h{~r{hgJ9bS!j0{R-(2(IKKkME9bI?x=J4{Yy#%O3YjAo;erJLpQ7Vg(alnM2*+_wEpL@TTf z1+uDv5sb7{EvwI4O66-=*C;iKs$TWma*e)l< zSg$ig>NJSEtDG2jSM5dz%VJ+$sgRjWnayZ$S;)*_%nV~@7&CjxnAv`(*ZHAy`U*QA zHy$-p#^*wLz?v8}!>HNoi<;3ICO3LgXZ4^@xyTt!J!3lIHVd9nH7jq>8hCi)!sZqi z*-~rVM_(E~bFQz(>e4X{ljKVkX3^-fapwjZs+1qV%!Ra&+M=V-rmu>S^|IyGHF=5UwwI>V+$J=PiMAhkfpOi>!&Mt~)pJGiVM zX^LJ5b10meHsdKHOnRZRav-ru4fFohg;-ufgXEmT?NA=CZuA|c(H#(&aDKax33K*@ zLzcrm62!QJ*)k>EhQC@P)?YOp9iwIf*GvUx5w%lmy$9g!5Bs-c=RM_x0-_7>sZR+g z>dP*qg=`G(1Q9tCBvjj-M(Y3Sj3t#+fCd6;*kYMD0A&4zOeK+=6Jn$>)}q&6#_Q*j zOZU<&k(M*fwOxNhh-R<>7e8nNPMjX%SPt4;w-_4TQ{o{!!+bLX(6}`tsTM>8Ny5ji zX)2V+Oo-LcZDWeIS#X+pW>l-%Hf$rawh1aa-`|+8MyZ6!QI)ytx{kXpEcXDBSW98= zx)NLkNy7N6&XrEM^1VS>16MtFmpM!QU?q3gxlFCB%J;*&zP@)|M)e7Ov21j79U3zU zGr-=b?^5FP4OUG68Pt{poX|et#Mk2Z-f>?(ntfY%G0xlN@#PrB8w~DQK`RdUr??L6S%lhOgK9<7nD$9isVbB2pLN(A@Ms zjMIU}=~#3zi2ub=Jxln2f@dEfv)(>wp?TXEZfmAyX&>k)UC}P{R}!Pb=d@a2kZ#+8 zbS7%v5M$6$y64+6Fi{USC5(A8bh%YA ztnf0O8A^6vsH?LIc4pWReYT*GSQPP%G_1~|%QC#z+kiTAVw|f@1Fu80xynW(dbyH; zHk!%bU(PyJa+TYIeBuziR1=x?>b8v92tpgJlmfNj%)H)Uayz{1k8)L!if?$8N~48O zRT3dV2eqnH1W7!#PLi);RoXh|N~N^2~D(wOm z1f89eQcj#7Mg5FenOeqJ;I3`**o*4#tW -Require all denied - - - - Options FollowSymLinks - AllowOverride None - - -HostnameLookups Off -LogLevel warn -EnableSendfile On -Include "/etc/apache2/mods-enabled/*.load" -Include "/etc/apache2/mods-enabled/*.conf" -Include "/etc/apache2/ports.conf" - -LogFormat "%{X-Forwarded-For}i %a %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %b %D %T %P %V:%p" syslog -CustomLog "|/bin/sh -c 'logger -p local7.info -t apache_access_log'" syslog -ErrorLog "|/bin/sh -c 'logger -p local7.err -t apache_error_log'" -IncludeOptional "/etc/apache2/conf.d/*.conf" -IncludeOptional "/etc/apache2/sites-enabled/*" - -## Settings debugging information in headers. -SetEnvIf Remote_Addr 127.0.0.1 DEBUG - - Header set X-Apache-Server-ID "sevppdlmp01" env=DEBUG - - diff --git a/system/BASE_SOFT/APACHE/2.4/conf-available/README.md b/system/BASE_SOFT/APACHE/2.4/conf-available/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/system/BASE_SOFT/APACHE/2.4/conf-available/charset.conf b/system/BASE_SOFT/APACHE/2.4/conf-available/charset.conf deleted file mode 100644 index 8b0f415..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf-available/charset.conf +++ /dev/null @@ -1,8 +0,0 @@ -# Read the documentation before enabling AddDefaultCharset. -# In general, it is only a good idea if you know that all your files -# have this encoding. It will override any encoding given in the files -# in meta http-equiv or xml encoding tags. - -#AddDefaultCharset UTF-8 - -# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/system/BASE_SOFT/APACHE/2.4/conf-available/javascript-common.conf b/system/BASE_SOFT/APACHE/2.4/conf-available/javascript-common.conf deleted file mode 100644 index 7e5dbd3..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf-available/javascript-common.conf +++ /dev/null @@ -1,5 +0,0 @@ -Alias /javascript /usr/share/javascript/ - - - Options FollowSymLinks MultiViews - diff --git a/system/BASE_SOFT/APACHE/2.4/conf-available/localized-error-pages.conf b/system/BASE_SOFT/APACHE/2.4/conf-available/localized-error-pages.conf deleted file mode 100644 index f188d80..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf-available/localized-error-pages.conf +++ /dev/null @@ -1,81 +0,0 @@ -# Customizable error responses come in three flavors: -# 1) plain text -# 2) local redirects -# 3) external redirects -# -# Some examples: -#ErrorDocument 500 "The server made a boo boo." -#ErrorDocument 404 /missing.html -#ErrorDocument 404 "/cgi-bin/missing_handler.pl" -#ErrorDocument 402 http://www.example.com/subscription_info.html -# - -# -# Putting this all together, we can internationalize error responses. -# -# We use Alias to redirect any /error/HTTP_.html.var response to -# our collection of by-error message multi-language collections. We use -# includes to substitute the appropriate text. -# -# You can modify the messages' appearance without changing any of the -# default HTTP_.html.var files by adding the line: -# -#Alias /error/include/ "/your/include/path/" -# -# which allows you to create your own set of files by starting with the -# /usr/share/apache2/error/include/ files and copying them to /your/include/path/, -# even on a per-VirtualHost basis. If you include the Alias in the global server -# context, is has to come _before_ the 'Alias /error/ ...' line. -# -# The default include files will display your Apache version number and your -# ServerAdmin email address regardless of the setting of ServerSignature. -# -# WARNING: The configuration below will NOT work out of the box if you have a -# SetHandler directive in a context somewhere. Adding -# the following three lines AFTER the context should -# make it work in most cases: -# -# SetHandler none -# -# -# The internationalized error documents require mod_alias, mod_include -# and mod_negotiation. To activate them, uncomment the following 37 lines. - -# -# -# -# -# Alias /error/ "/usr/share/apache2/error/" -# -# -# Options IncludesNoExec -# AddOutputFilter Includes html -# AddHandler type-map var -# Order allow,deny -# Allow from all -# LanguagePriority en cs de es fr it nl sv pt-br ro -# ForceLanguagePriority Prefer Fallback -# -# -# ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var -# ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var -# ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var -# ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var -# ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var -# ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var -# ErrorDocument 410 /error/HTTP_GONE.html.var -# ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var -# ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var -# ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var -# ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var -# ErrorDocument 415 /error/HTTP_UNSUPPORTED_MEDIA_TYPE.html.var -# ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var -# ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var -# ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var -# ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var -# ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var -# -# -# - -# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/system/BASE_SOFT/APACHE/2.4/conf-available/other-vhosts-access-log.conf b/system/BASE_SOFT/APACHE/2.4/conf-available/other-vhosts-access-log.conf deleted file mode 100644 index 5e9f5e9..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf-available/other-vhosts-access-log.conf +++ /dev/null @@ -1,4 +0,0 @@ -# Define an access log for VirtualHosts that don't define their own logfile -CustomLog ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined - -# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/system/BASE_SOFT/APACHE/2.4/conf-available/security.conf b/system/BASE_SOFT/APACHE/2.4/conf-available/security.conf deleted file mode 100644 index d008271..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf-available/security.conf +++ /dev/null @@ -1,72 +0,0 @@ -# -# Disable access to the entire file system except for the directories that -# are explicitly allowed later. -# -# This currently breaks the configurations that come with some web application -# Debian packages. -# -# -# AllowOverride None -# Order Deny,Allow -# Deny from all -# - - -# Changing the following options will not really affect the security of the -# server, but might make attacks slightly more difficult in some cases. - -# -# ServerTokens -# This directive configures what you return as the Server HTTP response -# Header. The default is 'Full' which sends information about the OS-Type -# and compiled in modules. -# Set to one of: Full | OS | Minimal | Minor | Major | Prod -# where Full conveys the most information, and Prod the least. -ServerTokens Prod - -# -# Optionally add a line containing the server version and virtual host -# name to server-generated pages (internal error documents, FTP directory -# listings, mod_status and mod_info output etc., but not CGI generated -# documents or custom error documents). -# Set to "EMail" to also include a mailto: link to the ServerAdmin. -# Set to one of: On | Off | EMail -ServerSignature Off -#ServerSignature On - -# -# Allow TRACE method -# -# Set to "extended" to also reflect the request body (only for testing and -# diagnostic purposes). -# -# Set to one of: On | Off | extended -TraceEnable Off -#TraceEnable On - -# -# Forbid access to version control directories -# -# If you use version control systems in your document root, you should -# probably deny access to their directories. For example, for subversion: -# -# -# Require all denied -# - -# -# Setting this header will prevent MSIE from interpreting files as something -# else than declared by the content type in the HTTP headers. -# Requires mod_headers to be enabled. -# -#Header set X-Content-Type-Options: "nosniff" - -# -# Setting this header will prevent other sites from embedding pages from this -# site as frames. This defends against clickjacking attacks. -# Requires mod_headers to be enabled. -# -#Header set X-Frame-Options: "sameorigin" - - -# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/system/BASE_SOFT/APACHE/2.4/conf-available/serve-cgi-bin.conf b/system/BASE_SOFT/APACHE/2.4/conf-available/serve-cgi-bin.conf deleted file mode 100644 index b02782d..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf-available/serve-cgi-bin.conf +++ /dev/null @@ -1,20 +0,0 @@ - - - Define ENABLE_USR_LIB_CGI_BIN - - - - Define ENABLE_USR_LIB_CGI_BIN - - - - ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ - - AllowOverride None - Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch - Require all granted - - - - -# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/system/BASE_SOFT/APACHE/2.4/conf-enabled/README.md b/system/BASE_SOFT/APACHE/2.4/conf-enabled/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/system/BASE_SOFT/APACHE/2.4/conf-enabled/charset.conf b/system/BASE_SOFT/APACHE/2.4/conf-enabled/charset.conf deleted file mode 120000 index 4a6ca08..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf-enabled/charset.conf +++ /dev/null @@ -1 +0,0 @@ -../conf-available/charset.conf \ No newline at end of file diff --git a/system/BASE_SOFT/APACHE/2.4/conf-enabled/localized-error-pages.conf b/system/BASE_SOFT/APACHE/2.4/conf-enabled/localized-error-pages.conf deleted file mode 120000 index 6e5ddaf..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf-enabled/localized-error-pages.conf +++ /dev/null @@ -1 +0,0 @@ -../conf-available/localized-error-pages.conf \ No newline at end of file diff --git a/system/BASE_SOFT/APACHE/2.4/conf-enabled/other-vhosts-access-log.conf b/system/BASE_SOFT/APACHE/2.4/conf-enabled/other-vhosts-access-log.conf deleted file mode 120000 index 8af91e5..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf-enabled/other-vhosts-access-log.conf +++ /dev/null @@ -1 +0,0 @@ -../conf-available/other-vhosts-access-log.conf \ No newline at end of file diff --git a/system/BASE_SOFT/APACHE/2.4/conf-enabled/security.conf b/system/BASE_SOFT/APACHE/2.4/conf-enabled/security.conf deleted file mode 120000 index 036c97f..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf-enabled/security.conf +++ /dev/null @@ -1 +0,0 @@ -../conf-available/security.conf \ No newline at end of file diff --git a/system/BASE_SOFT/APACHE/2.4/conf-enabled/serve-cgi-bin.conf b/system/BASE_SOFT/APACHE/2.4/conf-enabled/serve-cgi-bin.conf deleted file mode 120000 index d917f68..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf-enabled/serve-cgi-bin.conf +++ /dev/null @@ -1 +0,0 @@ -../conf-available/serve-cgi-bin.conf \ No newline at end of file diff --git a/system/BASE_SOFT/APACHE/2.4/conf.d/README.md b/system/BASE_SOFT/APACHE/2.4/conf.d/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/system/BASE_SOFT/APACHE/2.4/conf.d/awhsecure.conf b/system/BASE_SOFT/APACHE/2.4/conf.d/awhsecure.conf deleted file mode 100644 index 8afa809..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf.d/awhsecure.conf +++ /dev/null @@ -1,13 +0,0 @@ - - Order allow,deny - Deny from all - - - - Order allow,deny - Deny from all - - - - Options -Indexes - diff --git a/system/BASE_SOFT/APACHE/2.4/conf.d/badbot.conf b/system/BASE_SOFT/APACHE/2.4/conf.d/badbot.conf deleted file mode 100644 index 41f6d29..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf.d/badbot.conf +++ /dev/null @@ -1,222 +0,0 @@ -# Block Bad Bots & Scrapers -SetEnvIfNoCase User-Agent "Aboundex" bad_bot -SetEnvIfNoCase User-Agent "80legs" bad_bot -SetEnvIfNoCase User-Agent "360Spider" bad_bot -SetEnvIfNoCase User-Agent "^Java" bad_bot -SetEnvIfNoCase User-Agent "^Cogentbot" bad_bot -SetEnvIfNoCase User-Agent "^Alexibot" bad_bot -SetEnvIfNoCase User-Agent "^asterias" bad_bot -SetEnvIfNoCase User-Agent "^attach" bad_bot -SetEnvIfNoCase User-Agent "^BackDoorBot" bad_bot -SetEnvIfNoCase User-Agent "^BackWeb" bad_bot -SetEnvIfNoCase User-Agent "Bandit" bad_bot -SetEnvIfNoCase User-Agent "^BatchFTP" bad_bot -SetEnvIfNoCase User-Agent "^Bigfoot" bad_bot -SetEnvIfNoCase User-Agent "^Black.Hole" bad_bot -SetEnvIfNoCase User-Agent "^BlackWidow" bad_bot -SetEnvIfNoCase User-Agent "^BlowFish" bad_bot -SetEnvIfNoCase User-Agent "^BotALot" bad_bot -SetEnvIfNoCase User-Agent "Buddy" bad_bot -SetEnvIfNoCase User-Agent "^BuiltBotTough" bad_bot -SetEnvIfNoCase User-Agent "^Bullseye" bad_bot -SetEnvIfNoCase User-Agent "^BunnySlippers" bad_bot -SetEnvIfNoCase User-Agent "^Cegbfeieh" bad_bot -SetEnvIfNoCase User-Agent "^CheeseBot" bad_bot -SetEnvIfNoCase User-Agent "^CherryPicker" bad_bot -SetEnvIfNoCase User-Agent "^ChinaClaw" bad_bot -SetEnvIfNoCase User-Agent "Collector" bad_bot -SetEnvIfNoCase User-Agent "Copier" bad_bot -SetEnvIfNoCase User-Agent "^CopyRightCheck" bad_bot -SetEnvIfNoCase User-Agent "^cosmos" bad_bot -SetEnvIfNoCase User-Agent "^Crescent" bad_bot -SetEnvIfNoCase User-Agent "^Custo" bad_bot -SetEnvIfNoCase User-Agent "^AIBOT" bad_bot -SetEnvIfNoCase User-Agent "^DISCo" bad_bot -SetEnvIfNoCase User-Agent "^DIIbot" bad_bot -SetEnvIfNoCase User-Agent "^DittoSpyder" bad_bot -SetEnvIfNoCase User-Agent "^Download\ Demon" bad_bot -SetEnvIfNoCase User-Agent "^Download\ Devil" bad_bot -SetEnvIfNoCase User-Agent "^Download\ Wonder" bad_bot -SetEnvIfNoCase User-Agent "^dragonfly" bad_bot -SetEnvIfNoCase User-Agent "^Drip" bad_bot -SetEnvIfNoCase User-Agent "^eCatch" bad_bot -SetEnvIfNoCase User-Agent "^EasyDL" bad_bot -SetEnvIfNoCase User-Agent "^ebingbong" bad_bot -SetEnvIfNoCase User-Agent "^EirGrabber" bad_bot -SetEnvIfNoCase User-Agent "^EmailCollector" bad_bot -SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot -SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot -SetEnvIfNoCase User-Agent "^EroCrawler" bad_bot -SetEnvIfNoCase User-Agent "^Exabot" bad_bot -SetEnvIfNoCase User-Agent "^Express\ WebPictures" bad_bot -SetEnvIfNoCase User-Agent "Extractor" bad_bot -SetEnvIfNoCase User-Agent "^EyeNetIE" bad_bot -SetEnvIfNoCase User-Agent "^Foobot" bad_bot -SetEnvIfNoCase User-Agent "^flunky" bad_bot -SetEnvIfNoCase User-Agent "^FrontPage" bad_bot -SetEnvIfNoCase User-Agent "^Go-Ahead-Got-It" bad_bot -SetEnvIfNoCase User-Agent "^gotit" bad_bot -SetEnvIfNoCase User-Agent "^GrabNet" bad_bot -SetEnvIfNoCase User-Agent "^Grafula" bad_bot -SetEnvIfNoCase User-Agent "^Harvest" bad_bot -SetEnvIfNoCase User-Agent "^hloader" bad_bot -SetEnvIfNoCase User-Agent "^HMView" bad_bot -SetEnvIfNoCase User-Agent "^HTTrack" bad_bot -SetEnvIfNoCase User-Agent "^humanlinks" bad_bot -SetEnvIfNoCase User-Agent "^IlseBot" bad_bot -SetEnvIfNoCase User-Agent "^Image\ Stripper" bad_bot -SetEnvIfNoCase User-Agent "^Image\ Sucker" bad_bot -SetEnvIfNoCase User-Agent "Indy\ Library" bad_bot -SetEnvIfNoCase User-Agent "^InfoNaviRobot" bad_bot -SetEnvIfNoCase User-Agent "^InfoTekies" bad_bot -SetEnvIfNoCase User-Agent "^Intelliseek" bad_bot -SetEnvIfNoCase User-Agent "^InterGET" bad_bot -SetEnvIfNoCase User-Agent "^Internet\ Ninja" bad_bot -SetEnvIfNoCase User-Agent "^Iria" bad_bot -SetEnvIfNoCase User-Agent "^Jakarta" bad_bot -SetEnvIfNoCase User-Agent "^JennyBot" bad_bot -SetEnvIfNoCase User-Agent "^JetCar" bad_bot -SetEnvIfNoCase User-Agent "^JOC" bad_bot -SetEnvIfNoCase User-Agent "^JustView" bad_bot -SetEnvIfNoCase User-Agent "^Jyxobot" bad_bot -SetEnvIfNoCase User-Agent "^Kenjin.Spider" bad_bot -SetEnvIfNoCase User-Agent "^Keyword.Density" bad_bot -SetEnvIfNoCase User-Agent "^larbin" bad_bot -SetEnvIfNoCase User-Agent "^LexiBot" bad_bot -SetEnvIfNoCase User-Agent "^lftp" bad_bot -SetEnvIfNoCase User-Agent "^libWeb/clsHTTP" bad_bot -SetEnvIfNoCase User-Agent "^likse" bad_bot -SetEnvIfNoCase User-Agent "^LinkextractorPro" bad_bot -SetEnvIfNoCase User-Agent "^LinkScan/8.1a.Unix" bad_bot -SetEnvIfNoCase User-Agent "^LNSpiderguy" bad_bot -SetEnvIfNoCase User-Agent "^LinkWalker" bad_bot -SetEnvIfNoCase User-Agent "^lwp-trivial" bad_bot -SetEnvIfNoCase User-Agent "^LWP::Simple" bad_bot -SetEnvIfNoCase User-Agent "^Magnet" bad_bot -SetEnvIfNoCase User-Agent "^Mag-Net" bad_bot -SetEnvIfNoCase User-Agent "^MarkWatch" bad_bot -SetEnvIfNoCase User-Agent "^Mass\ Downloader" bad_bot -SetEnvIfNoCase User-Agent "^Mata.Hari" bad_bot -SetEnvIfNoCase User-Agent "^Memo" bad_bot -SetEnvIfNoCase User-Agent "^Microsoft.URL" bad_bot -SetEnvIfNoCase User-Agent "^Microsoft\ URL\ Control" bad_bot -SetEnvIfNoCase User-Agent "^MIDown\ tool" bad_bot -SetEnvIfNoCase User-Agent "^MIIxpc" bad_bot -SetEnvIfNoCase User-Agent "^Mirror" bad_bot -SetEnvIfNoCase User-Agent "^Missigua\ Locator" bad_bot -SetEnvIfNoCase User-Agent "^Mister\ PiX" bad_bot -SetEnvIfNoCase User-Agent "^moget" bad_bot -SetEnvIfNoCase User-Agent "^Mozilla/3.Mozilla/2.01" bad_bot -SetEnvIfNoCase User-Agent "^Mozilla.*NEWT" bad_bot -SetEnvIfNoCase User-Agent "^NAMEPROTECT" bad_bot -SetEnvIfNoCase User-Agent "^Navroad" bad_bot -SetEnvIfNoCase User-Agent "^NearSite" bad_bot -SetEnvIfNoCase User-Agent "^NetAnts" bad_bot -SetEnvIfNoCase User-Agent "^Netcraft" bad_bot -SetEnvIfNoCase User-Agent "^NetMechanic" bad_bot -SetEnvIfNoCase User-Agent "^NetSpider" bad_bot -SetEnvIfNoCase User-Agent "^Net\ Vampire" bad_bot -SetEnvIfNoCase User-Agent "^NetZIP" bad_bot -SetEnvIfNoCase User-Agent "^NextGenSearchBot" bad_bot -SetEnvIfNoCase User-Agent "^NG" bad_bot -SetEnvIfNoCase User-Agent "^NICErsPRO" bad_bot -SetEnvIfNoCase User-Agent "^niki-bot" bad_bot -SetEnvIfNoCase User-Agent "^NimbleCrawler" bad_bot -SetEnvIfNoCase User-Agent "^Ninja" bad_bot -SetEnvIfNoCase User-Agent "^NPbot" bad_bot -SetEnvIfNoCase User-Agent "^Octopus" bad_bot -SetEnvIfNoCase User-Agent "^Offline\ Explorer" bad_bot -SetEnvIfNoCase User-Agent "^Offline\ Navigator" bad_bot -SetEnvIfNoCase User-Agent "^Openfind" bad_bot -SetEnvIfNoCase User-Agent "^OutfoxBot" bad_bot -SetEnvIfNoCase User-Agent "^PageGrabber" bad_bot -SetEnvIfNoCase User-Agent "^Papa\ Foto" bad_bot -SetEnvIfNoCase User-Agent "^pavuk" bad_bot -SetEnvIfNoCase User-Agent "^pcBrowser" bad_bot -SetEnvIfNoCase User-Agent "^PHP\ version\ tracker" bad_bot -SetEnvIfNoCase User-Agent "^Pockey" bad_bot -SetEnvIfNoCase User-Agent "^ProPowerBot/2.14" bad_bot -SetEnvIfNoCase User-Agent "^ProWebWalker" bad_bot -SetEnvIfNoCase User-Agent "^psbot" bad_bot -SetEnvIfNoCase User-Agent "^Pump" bad_bot -SetEnvIfNoCase User-Agent "^QueryN.Metasearch" bad_bot -SetEnvIfNoCase User-Agent "^RealDownload" bad_bot -SetEnvIfNoCase User-Agent "Reaper" bad_bot -SetEnvIfNoCase User-Agent "Recorder" bad_bot -SetEnvIfNoCase User-Agent "^ReGet" bad_bot -SetEnvIfNoCase User-Agent "^RepoMonkey" bad_bot -SetEnvIfNoCase User-Agent "^RMA" bad_bot -SetEnvIfNoCase User-Agent "Siphon" bad_bot -SetEnvIfNoCase User-Agent "^SiteSnagger" bad_bot -SetEnvIfNoCase User-Agent "^SlySearch" bad_bot -SetEnvIfNoCase User-Agent "^SmartDownload" bad_bot -SetEnvIfNoCase User-Agent "^Snake" bad_bot -SetEnvIfNoCase User-Agent "^Snapbot" bad_bot -SetEnvIfNoCase User-Agent "^Snoopy" bad_bot -SetEnvIfNoCase User-Agent "^sogou" bad_bot -SetEnvIfNoCase User-Agent "^SpaceBison" bad_bot -SetEnvIfNoCase User-Agent "^SpankBot" bad_bot -SetEnvIfNoCase User-Agent "^spanner" bad_bot -SetEnvIfNoCase User-Agent "^Sqworm" bad_bot -SetEnvIfNoCase User-Agent "Stripper" bad_bot -SetEnvIfNoCase User-Agent "Sucker" bad_bot -SetEnvIfNoCase User-Agent "^SuperBot" bad_bot -SetEnvIfNoCase User-Agent "^SuperHTTP" bad_bot -SetEnvIfNoCase User-Agent "^Surfbot" bad_bot -SetEnvIfNoCase User-Agent "^suzuran" bad_bot -SetEnvIfNoCase User-Agent "^Szukacz/1.4" bad_bot -SetEnvIfNoCase User-Agent "^tAkeOut" bad_bot -SetEnvIfNoCase User-Agent "^Teleport" bad_bot -SetEnvIfNoCase User-Agent "^Telesoft" bad_bot -SetEnvIfNoCase User-Agent "^TurnitinBot/1.5" bad_bot -SetEnvIfNoCase User-Agent "^The.Intraformant" bad_bot -SetEnvIfNoCase User-Agent "^TheNomad" bad_bot -SetEnvIfNoCase User-Agent "^TightTwatBot" bad_bot -SetEnvIfNoCase User-Agent "^Titan" bad_bot -SetEnvIfNoCase User-Agent "^True_Robot" bad_bot -SetEnvIfNoCase User-Agent "^turingos" bad_bot -SetEnvIfNoCase User-Agent "^TurnitinBot" bad_bot -SetEnvIfNoCase User-Agent "^URLy.Warning" bad_bot -SetEnvIfNoCase User-Agent "^Vacuum" bad_bot -SetEnvIfNoCase User-Agent "^VCI" bad_bot -SetEnvIfNoCase User-Agent "^VoidEYE" bad_bot -SetEnvIfNoCase User-Agent "^Web\ Image\ Collector" bad_bot -SetEnvIfNoCase User-Agent "^Web\ Sucker" bad_bot -SetEnvIfNoCase User-Agent "^WebAuto" bad_bot -SetEnvIfNoCase User-Agent "^WebBandit" bad_bot -SetEnvIfNoCase User-Agent "^Webclipping.com" bad_bot -SetEnvIfNoCase User-Agent "^WebCopier" bad_bot -SetEnvIfNoCase User-Agent "^WebEMailExtrac.*" bad_bot -SetEnvIfNoCase User-Agent "^WebEnhancer" bad_bot -SetEnvIfNoCase User-Agent "^WebFetch" bad_bot -SetEnvIfNoCase User-Agent "^WebGo\ IS" bad_bot -SetEnvIfNoCase User-Agent "^Web.Image.Collector" bad_bot -SetEnvIfNoCase User-Agent "^WebLeacher" bad_bot -SetEnvIfNoCase User-Agent "^WebmasterWorldForumBot" bad_bot -SetEnvIfNoCase User-Agent "^WebReaper" bad_bot -SetEnvIfNoCase User-Agent "^WebSauger" bad_bot -SetEnvIfNoCase User-Agent "^Website\ eXtractor" bad_bot -SetEnvIfNoCase User-Agent "^Website\ Quester" bad_bot -SetEnvIfNoCase User-Agent "^Webster" bad_bot -SetEnvIfNoCase User-Agent "^WebStripper" bad_bot -SetEnvIfNoCase User-Agent "^WebWhacker" bad_bot -SetEnvIfNoCase User-Agent "^WebZIP" bad_bot -SetEnvIfNoCase User-Agent "Whacker" bad_bot -SetEnvIfNoCase User-Agent "^Widow" bad_bot -SetEnvIfNoCase User-Agent "^WISENutbot" bad_bot -SetEnvIfNoCase User-Agent "^WWWOFFLE" bad_bot -SetEnvIfNoCase User-Agent "^WWW-Collector-E" bad_bot -SetEnvIfNoCase User-Agent "^Xaldon" bad_bot -SetEnvIfNoCase User-Agent "^Xenu" bad_bot -SetEnvIfNoCase User-Agent "^Zeus" bad_bot -SetEnvIfNoCase User-Agent "ZmEu" bad_bot -SetEnvIfNoCase User-Agent "^Zyborg" bad_bot - - - - Require all granted - - Require not env bad_bot - - - diff --git a/system/BASE_SOFT/APACHE/2.4/conf.d/security.conf b/system/BASE_SOFT/APACHE/2.4/conf.d/security.conf deleted file mode 100644 index 4bd808c..0000000 --- a/system/BASE_SOFT/APACHE/2.4/conf.d/security.conf +++ /dev/null @@ -1,15 +0,0 @@ -## Block access to SCM directories. - - Require all denied - # Don't add here, extensions like .sql .bak .ini .log ... Instead use apache_block['dot'] - - -## Block access to backup and source files - - Require all denied - # Don't add here, scm like .git .svn .bzr ... Instead use apache_block['scm'] - - - - RequestHeader unset Proxy - diff --git a/system/BASE_SOFT/APACHE/2.4/envvars b/system/BASE_SOFT/APACHE/2.4/envvars deleted file mode 100644 index 91328ac..0000000 --- a/system/BASE_SOFT/APACHE/2.4/envvars +++ /dev/null @@ -1,47 +0,0 @@ -# envvars - default environment variables for apache2ctl - -# this won't be correct after changing uid -unset HOME - -# for supporting multiple apache2 instances -if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then - SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}" -else - SUFFIX= -fi - -# Since there is no sane way to get the parsed apache2 config in scripts, some -# settings are defined via environment variables and then used in apache2ctl, -# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc. -export APACHE_RUN_USER=www-data -export APACHE_RUN_GROUP=www-data -# temporary state file location. This might be changed to /run in Wheezy+1 -export APACHE_PID_FILE=/var/run/apache2/apache2$SUFFIX.pid -export APACHE_RUN_DIR=/var/run/apache2$SUFFIX -export APACHE_LOCK_DIR=/var/lock/apache2$SUFFIX -# Only /var/log/apache2 is handled by /etc/logrotate.d/apache2. -export APACHE_LOG_DIR=/var/log/apache2$SUFFIX - -## The locale used by some modules like mod_dav -export LANG=C -## Uncomment the following line to use the system default locale instead: -#. /etc/default/locale - -export LANG - -## The command to get the status for 'apache2ctl status'. -## Some packages providing 'www-browser' need '--dump' instead of '-dump'. -#export APACHE_LYNX='www-browser -dump' - -## If you need a higher file descriptor limit, uncomment and adjust the -## following line (default is 8192): -#APACHE_ULIMIT_MAX_FILES='ulimit -n 65536' - -## If you would like to pass arguments to the web server, add them below -## to the APACHE_ARGUMENTS environment. -#export APACHE_ARGUMENTS='' - -## Enable the debug mode for maintainer scripts. -## This will produce a verbose output on package installations of web server modules and web application -## installations which interact with Apache -#export APACHE2_MAINTSCRIPT_DEBUG=1 diff --git a/system/BASE_SOFT/APACHE/2.4/magic b/system/BASE_SOFT/APACHE/2.4/magic deleted file mode 100644 index cdf9ac5..0000000 --- a/system/BASE_SOFT/APACHE/2.4/magic +++ /dev/null @@ -1,935 +0,0 @@ -# Magic data for mod_mime_magic (originally for file(1) command) -# -# The format is 4-5 columns: -# Column #1: byte number to begin checking from, ">" indicates continuation -# Column #2: type of data to match -# Column #3: contents of data to match -# Column #4: MIME type of result -# Column #5: MIME encoding of result (optional) - -#------------------------------------------------------------------------------ -# Localstuff: file(1) magic for locally observed files -# Add any locally observed files here. - -# Real Audio (Magic .ra\0375) -0 belong 0x2e7261fd audio/x-pn-realaudio -0 string .RMF application/vnd.rn-realmedia - -#video/x-pn-realvideo -#video/vnd.rn-realvideo -#application/vnd.rn-realmedia -# sigh, there are many mimes for that but the above are the most common. - -# Taken from magic, converted to magic.mime -# mime types according to http://www.geocities.com/nevilo/mod.htm: -# audio/it .it -# audio/x-zipped-it .itz -# audio/xm fasttracker modules -# audio/x-s3m screamtracker modules -# audio/s3m screamtracker modules -# audio/x-zipped-mod mdz -# audio/mod mod -# audio/x-mod All modules (mod, s3m, 669, mtm, med, xm, it, mdz, stm, itz, xmz, s3z) - -# Taken from loader code from mikmod version 2.14 -# by Steve McIntyre (stevem@chiark.greenend.org.uk) -# added title printing on 2003-06-24 -0 string MAS_UTrack_V00 ->14 string >/0 audio/x-mod -#audio/x-tracker-module - -#0 string UN05 MikMod UNI format module sound data - -0 string Extended\ Module: audio/x-mod -#audio/x-tracker-module -##>17 string >\0 Title: "%s" - -21 string/c \!SCREAM! audio/x-mod -#audio/x-screamtracker-module -21 string BMOD2STM audio/x-mod -#audio/x-screamtracker-module -1080 string M.K. audio/x-mod -#audio/x-protracker-module -#>0 string >\0 Title: "%s" -1080 string M!K! audio/x-mod -#audio/x-protracker-module -#>0 string >\0 Title: "%s" -1080 string FLT4 audio/x-mod -#audio/x-startracker-module -#>0 string >\0 Title: "%s" -1080 string FLT8 audio/x-mod -#audio/x-startracker-module -#>0 string >\0 Title: "%s" -1080 string 4CHN audio/x-mod -#audio/x-fasttracker-module -#>0 string >\0 Title: "%s" -1080 string 6CHN audio/x-mod -#audio/x-fasttracker-module -#>0 string >\0 Title: "%s" -1080 string 8CHN audio/x-mod -#audio/x-fasttracker-module -#>0 string >\0 Title: "%s" -1080 string CD81 audio/x-mod -#audio/x-oktalyzer-tracker-module -#>0 string >\0 Title: "%s" -1080 string OKTA audio/x-mod -#audio/x-oktalyzer-tracker-module -#>0 string >\0 Title: "%s" -# Not good enough. -#1082 string CH -#>1080 string >/0 %.2s-channel Fasttracker "oktalyzer" module sound data -1080 string 16CN audio/x-mod -#audio/x-taketracker-module -#>0 string >\0 Title: "%s" -1080 string 32CN audio/x-mod -#audio/x-taketracker-module -#>0 string >\0 Title: "%s" - -# Impuse tracker module (it) -0 string IMPM audio/x-mod -#>4 string >\0 "%s" -#>40 leshort !0 compatible w/ITv%x -#>42 leshort !0 created w/ITv%x - -#------------------------------------------------------------------------------ -# end local stuff -#------------------------------------------------------------------------------ - -# xml based formats! - -# svg - -0 string \38 string \<\!DOCTYPE\040svg image/svg+xml - - -# xml -0 string \2 short 0xbabe application/java - -#------------------------------------------------------------------------------ -# audio: file(1) magic for sound formats -# -# from Jan Nicolai Langfeldt , -# - -# Sun/NeXT audio data -0 string .snd ->12 belong 1 audio/basic ->12 belong 2 audio/basic ->12 belong 3 audio/basic ->12 belong 4 audio/basic ->12 belong 5 audio/basic ->12 belong 6 audio/basic ->12 belong 7 audio/basic - ->12 belong 23 audio/x-adpcm - -# DEC systems (e.g. DECstation 5000) use a variant of the Sun/NeXT format -# that uses little-endian encoding and has a different magic number -# (0x0064732E in little-endian encoding). -0 lelong 0x0064732E ->12 lelong 1 audio/x-dec-basic ->12 lelong 2 audio/x-dec-basic ->12 lelong 3 audio/x-dec-basic ->12 lelong 4 audio/x-dec-basic ->12 lelong 5 audio/x-dec-basic ->12 lelong 6 audio/x-dec-basic ->12 lelong 7 audio/x-dec-basic -# compressed (G.721 ADPCM) ->12 lelong 23 audio/x-dec-adpcm - -# Bytes 0-3 of AIFF, AIFF-C, & 8SVX audio files are "FORM" -# AIFF audio data -8 string AIFF audio/x-aiff -# AIFF-C audio data -8 string AIFC audio/x-aiff -# IFF/8SVX audio data -8 string 8SVX audio/x-aiff - - - -# Creative Labs AUDIO stuff -# Standard MIDI data -0 string MThd audio/unknown -#>9 byte >0 (format %d) -#>11 byte >1 using %d channels -# Creative Music (CMF) data -0 string CTMF audio/unknown -# SoundBlaster instrument data -0 string SBI audio/unknown -# Creative Labs voice data -0 string Creative\ Voice\ File audio/unknown -## is this next line right? it came this way... -#>19 byte 0x1A -#>23 byte >0 - version %d -#>22 byte >0 \b.%d - -# [GRR 950115: is this also Creative Labs? Guessing that first line -# should be string instead of unknown-endian long...] -#0 long 0x4e54524b MultiTrack sound data -#0 string NTRK MultiTrack sound data -#>4 long x - version %ld - -# Microsoft WAVE format (*.wav) -# [GRR 950115: probably all of the shorts and longs should be leshort/lelong] -# Microsoft RIFF -0 string RIFF -# - WAVE format ->8 string WAVE audio/x-wav ->8 string/B AVI video/x-msvideo -# ->8 string CDRA image/x-coreldraw - -# AAC (aka MPEG-2 NBC) -0 beshort&0xfff6 0xfff0 audio/X-HX-AAC-ADTS -0 string ADIF audio/X-HX-AAC-ADIF -0 beshort&0xffe0 0x56e0 audio/MP4A-LATM -0 beshort 0x4De1 audio/MP4A-LATM - -# MPEG Layer 3 sound files -0 beshort&0xfffe =0xfffa audio/mpeg -#MP3 with ID3 tag -0 string ID3 audio/mpeg -# Ogg/Vorbis -0 string OggS application/ogg - -#------------------------------------------------------------------------------ -# c-lang: file(1) magic for C programs or various scripts -# - -# XPM icons (Greg Roelofs, newt@uchicago.edu) -# ideally should go into "images", but entries below would tag XPM as C source -0 string /*\ XPM image/x-xpmi 7bit - -# 3DS (3d Studio files) -#16 beshort 0x3d3d image/x-3ds - -# this first will upset you if you're a PL/1 shop... (are there any left?) -# in which case rm it; ascmagic will catch real C programs -# C or REXX program text -#0 string /* text/x-c -# C++ program text -#0 string // text/x-c++ - -#------------------------------------------------------------------------------ -# commands: file(1) magic for various shells and interpreters -# -#0 string :\ shell archive or commands for antique kernel text -0 string #!/bin/sh application/x-shellscript -0 string #!\ /bin/sh application/x-shellscript -0 string #!/bin/csh application/x-shellscript -0 string #!\ /bin/csh application/x-shellscript -# korn shell magic, sent by George Wu, gwu@clyde.att.com -0 string #!/bin/ksh application/x-shellscript -0 string #!\ /bin/ksh application/x-shellscript -0 string #!/bin/tcsh application/x-shellscript -0 string #!\ /bin/tcsh application/x-shellscript -0 string #!/usr/local/tcsh application/x-shellscript -0 string #!\ /usr/local/tcsh application/x-shellscript -0 string #!/usr/local/bin/tcsh application/x-shellscript -0 string #!\ /usr/local/bin/tcsh application/x-shellscript -# bash shell magic, from Peter Tobias (tobias@server.et-inf.fho-emden.de) -0 string #!/bin/bash application/x-shellscript -0 string #!\ /bin/bash application/x-shellscript -0 string #!/usr/local/bin/bash application/x-shellscript -0 string #!\ /usr/local/bin/bash application/x-shellscript - -# -# zsh/ash/ae/nawk/gawk magic from cameron@cs.unsw.oz.au (Cameron Simpson) -0 string #!/bin/zsh application/x-shellscript -0 string #!/usr/bin/zsh application/x-shellscript -0 string #!/usr/local/bin/zsh application/x-shellscript -0 string #!\ /usr/local/bin/zsh application/x-shellscript -0 string #!/usr/local/bin/ash application/x-shellscript -0 string #!\ /usr/local/bin/ash application/x-shellscript -#0 string #!/usr/local/bin/ae Neil Brown's ae -#0 string #!\ /usr/local/bin/ae Neil Brown's ae -0 string #!/bin/nawk application/x-nawk -0 string #!\ /bin/nawk application/x-nawk -0 string #!/usr/bin/nawk application/x-nawk -0 string #!\ /usr/bin/nawk application/x-nawk -0 string #!/usr/local/bin/nawk application/x-nawk -0 string #!\ /usr/local/bin/nawk application/x-nawk -0 string #!/bin/gawk application/x-gawk -0 string #!\ /bin/gawk application/x-gawk -0 string #!/usr/bin/gawk application/x-gawk -0 string #!\ /usr/bin/gawk application/x-gawk -0 string #!/usr/local/bin/gawk application/x-gawk -0 string #!\ /usr/local/bin/gawk application/x-gawk -# -0 string #!/bin/awk application/x-awk -0 string #!\ /bin/awk application/x-awk -0 string #!/usr/bin/awk application/x-awk -0 string #!\ /usr/bin/awk application/x-awk -# update to distinguish from *.vcf files by Joerg Jenderek: joerg dot jenderek at web dot de -#0 regex BEGIN[[:space:]]*[{] application/x-awk - -# For Larry Wall's perl language. The ``eval'' line recognizes an -# outrageously clever hack for USG systems. -# Keith Waclena -0 string #!/bin/perl application/x-perl -0 string #!\ /bin/perl application/x-perl -0 string eval\ "exec\ /bin/perl application/x-perl -0 string #!/usr/bin/perl application/x-perl -0 string #!\ /usr/bin/perl application/x-perl -0 string eval\ "exec\ /usr/bin/perl application/x-perl -0 string #!/usr/local/bin/perl application/x-perl -0 string #!\ /usr/local/bin/perl application/x-perl -0 string eval\ "exec\ /usr/local/bin/perl application/x-perl - -#------------------------------------------------------------------------------ -# compress: file(1) magic for pure-compression formats (no archives) -# -# compress, gzip, pack, compact, huf, squeeze, crunch, freeze, yabba, whap, etc. -# -# Formats for various forms of compressed data -# Formats for "compress" proper have been moved into "compress.c", -# because it tries to uncompress it to figure out what's inside. - -# standard unix compress -#0 string \037\235 application/x-compress - -# gzip (GNU zip, not to be confused with [Info-ZIP/PKWARE] zip archiver) -#0 string \037\213 application/x-gzip - -0 string PK\003\004 application/x-zip - -# RAR archiver (Greg Roelofs, newt@uchicago.edu) -0 string Rar! application/x-rar - -# According to gzip.h, this is the correct byte order for packed data. -0 string \037\036 application/octet-stream -# -# This magic number is byte-order-independent. -# -0 short 017437 application/octet-stream - -# XXX - why *two* entries for "compacted data", one of which is -# byte-order independent, and one of which is byte-order dependent? -# -# compacted data -0 short 0x1fff application/octet-stream -0 string \377\037 application/octet-stream -# huf output -0 short 0145405 application/octet-stream - -# Squeeze and Crunch... -# These numbers were gleaned from the Unix versions of the programs to -# handle these formats. Note that I can only uncrunch, not crunch, and -# I didn't have a crunched file handy, so the crunch number is untested. -# Keith Waclena -#0 leshort 0x76FF squeezed data (CP/M, DOS) -#0 leshort 0x76FE crunched data (CP/M, DOS) - -# Freeze -#0 string \037\237 Frozen file 2.1 -#0 string \037\236 Frozen file 1.0 (or gzip 0.5) - -# lzh? -#0 string \037\240 LZH compressed data - -257 string ustar\0 application/x-tar posix -257 string ustar\040\040\0 application/x-tar gnu - -0 short 070707 application/x-cpio -0 short 0143561 application/x-cpio swapped - -0 string = application/x-archive -0 string \! application/x-archive ->8 string debian application/x-debian-package - -#------------------------------------------------------------------------------ -# -# RPM: file(1) magic for Red Hat Packages Erik Troan (ewt@redhat.com) -# -0 beshort 0xedab ->2 beshort 0xeedb application/x-rpm - -0 lelong&0x8080ffff 0x0000081a application/x-arc lzw -0 lelong&0x8080ffff 0x0000091a application/x-arc squashed -0 lelong&0x8080ffff 0x0000021a application/x-arc uncompressed -0 lelong&0x8080ffff 0x0000031a application/x-arc packed -0 lelong&0x8080ffff 0x0000041a application/x-arc squeezed -0 lelong&0x8080ffff 0x0000061a application/x-arc crunched - -0 leshort 0xea60 application/x-arj - -# LHARC/LHA archiver (Greg Roelofs, newt@uchicago.edu) -2 string -lh0- application/x-lharc lh0 -2 string -lh1- application/x-lharc lh1 -2 string -lz4- application/x-lharc lz4 -2 string -lz5- application/x-lharc lz5 -# [never seen any but the last; -lh4- reported in comp.compression:] -2 string -lzs- application/x-lha lzs -2 string -lh\ - application/x-lha lh -2 string -lhd- application/x-lha lhd -2 string -lh2- application/x-lha lh2 -2 string -lh3- application/x-lha lh3 -2 string -lh4- application/x-lha lh4 -2 string -lh5- application/x-lha lh5 -2 string -lh6- application/x-lha lh6 -2 string -lh7- application/x-lha lh7 -# Shell archives -10 string #\ This\ is\ a\ shell\ archive application/octet-stream x-shell - -#------------------------------------------------------------------------------ -# frame: file(1) magic for FrameMaker files -# -# This stuff came on a FrameMaker demo tape, most of which is -# copyright, but this file is "published" as witness the following: -# -0 string \ -# -0 string/cB \14 byte 12 (OS/2 1.x format) -#>14 byte 64 (OS/2 2.x format) -#>14 byte 40 (Windows 3.x format) -#0 string IC icon -#0 string PI pointer -#0 string CI color icon -#0 string CP color pointer -#0 string BA bitmap array - -# CDROM Filesystems -32769 string CD001 application/x-iso9660 - -# Newer StuffIt archives (grant@netbsd.org) -0 string StuffIt application/x-stuffit -#>162 string >0 : %s - -# BinHex is the Macintosh ASCII-encoded file format (see also "apple") -# Daniel Quinlan, quinlan@yggdrasil.com -11 string must\ be\ converted\ with\ BinHex\ 4 application/mac-binhex40 -##>41 string x \b, version %.3s - - -#------------------------------------------------------------------------------ -# lisp: file(1) magic for lisp programs -# -# various lisp types, from Daniel Quinlan (quinlan@yggdrasil.com) -0 string ;; text/plain 8bit -# Emacs 18 - this is always correct, but not very magical. -0 string \012( application/x-elc -# Emacs 19 -0 string ;ELC\023\000\000\000 application/x-elc - -#------------------------------------------------------------------------------ -# mail.news: file(1) magic for mail and news -# -# There are tests to ascmagic.c to cope with mail and news. -0 string Relay-Version: message/rfc822 7bit -0 string #!\ rnews message/rfc822 7bit -0 string N#!\ rnews message/rfc822 7bit -0 string Forward\ to message/rfc822 7bit -0 string Pipe\ to message/rfc822 7bit -0 string Return-Path: message/rfc822 7bit -0 string Received: message/rfc822 -0 string Path: message/news 8bit -0 string Xref: message/news 8bit -0 string From: message/rfc822 7bit -0 string Article message/news 8bit -#------------------------------------------------------------------------------ -# msword: file(1) magic for MS Word files -# -# Contributor claims: -# Reversed-engineered MS Word magic numbers -# - -0 string \376\067\0\043 application/msword -0 string \320\317\021\340\241\261 application/msword -0 string \333\245-\0\0\0 application/msword - - - -#------------------------------------------------------------------------------ -# printer: file(1) magic for printer-formatted files -# - -# PostScript -0 string %! application/postscript -0 string \004%! application/postscript - -# Acrobat -# (due to clamen@cs.cmu.edu) -0 string %PDF- application/pdf - -#------------------------------------------------------------------------------ -# sc: file(1) magic for "sc" spreadsheet -# -38 string Spreadsheet application/x-sc - -#------------------------------------------------------------------------------ -# tex: file(1) magic for TeX files -# -# XXX - needs byte-endian stuff (big-endian and little-endian DVI?) -# -# From - -# Although we may know the offset of certain text fields in TeX DVI -# and font files, we can't use them reliably because they are not -# zero terminated. [but we do anyway, christos] -0 string \367\002 application/x-dvi -#0 string \367\203 TeX generic font data -#0 string \367\131 TeX packed font data -#0 string \367\312 TeX virtual font data -#0 string This\ is\ TeX, TeX transcript text -#0 string This\ is\ METAFONT, METAFONT transcript text - -# There is no way to detect TeX Font Metric (*.tfm) files without -# breaking them apart and reading the data. The following patterns -# match most *.tfm files generated by METAFONT or afm2tfm. -2 string \000\021 application/x-tex-tfm -2 string \000\022 application/x-tex-tfm -#>34 string >\0 (%s) - -# Texinfo and GNU Info, from Daniel Quinlan (quinlan@yggdrasil.com) -0 string \\input\ texinfo text/x-texinfo -0 string This\ is\ Info\ file text/x-info - -# correct TeX magic for Linux (and maybe more) -# from Peter Tobias (tobias@server.et-inf.fho-emden.de) -# -0 leshort 0x02f7 application/x-dvi - -# RTF - Rich Text Format -0 string {\\rtf text/rtf - -#------------------------------------------------------------------------------ -# animation: file(1) magic for animation/movie formats -# -# animation formats, originally from vax@ccwf.cc.utexas.edu (VaX#n8) -# MPEG file -# MPEG sequences -0 belong 0x000001BA ->4 byte &0x40 video/mp2p ->4 byte ^0x40 video/mpeg -0 belong 0x000001BB video/mpeg -0 belong 0x000001B0 video/mp4v-es -0 belong 0x000001B5 video/mp4v-es -0 belong 0x000001B3 video/mpv -0 belong&0xFF5FFF1F 0x47400010 video/mp2t -0 belong 0x00000001 ->4 byte&0x1F 0x07 video/h264 - -# FLI animation format -0 leshort 0xAF11 video/fli -# FLC animation format -0 leshort 0xAF12 video/flc -# -# SGI and Apple formats -# Added ISO mimes -0 string MOVI video/sgi -4 string moov video/quicktime -4 string mdat video/quicktime -4 string wide video/quicktime -4 string skip video/quicktime -4 string free video/quicktime -4 string idsc image/x-quicktime -4 string idat image/x-quicktime -4 string pckg application/x-quicktime -4 string/B jP image/jp2 -4 string ftyp ->8 string isom video/mp4 ->8 string mp41 video/mp4 ->8 string mp42 video/mp4 ->8 string/B jp2 image/jp2 ->8 string 3gp video/3gpp ->8 string avc1 video/3gpp ->8 string mmp4 video/mp4 ->8 string/B M4A audio/mp4 ->8 string/B qt video/quicktime -# The contributor claims: -# I couldn't find a real magic number for these, however, this -# -appears- to work. Note that it might catch other files, too, -# so BE CAREFUL! -# -# Note that title and author appear in the two 20-byte chunks -# at decimal offsets 2 and 22, respectively, but they are XOR'ed with -# 255 (hex FF)! DL format SUCKS BIG ROCKS. -# -# DL file version 1 , medium format (160x100, 4 images/screen) -0 byte 1 video/unknown -0 byte 2 video/unknown -# -# Databases -# -# GDBM magic numbers -# Will be maintained as part of the GDBM distribution in the future. -# -0 belong 0x13579ace application/x-gdbm -0 lelong 0x13579ace application/x-gdbm -0 string GDBM application/x-gdbm -# -0 belong 0x061561 application/x-dbm -# -# Executables -# -0 string \177ELF ->16 leshort 0 application/octet-stream ->16 leshort 1 application/x-object ->16 leshort 2 application/x-executable ->16 leshort 3 application/x-sharedlib ->16 leshort 4 application/x-coredump ->16 beshort 0 application/octet-stream ->16 beshort 1 application/x-object ->16 beshort 2 application/x-executable ->16 beshort 3 application/x-sharedlib ->16 beshort 4 application/x-coredump -# -# DOS -0 string MZ application/x-dosexec -# -# KDE -0 string [KDE\ Desktop\ Entry] application/x-kdelnk -0 string \#\ KDE\ Config\ File application/x-kdelnk -# xmcd database file for kscd -0 string \#\ xmcd text/xmcd - -#------------------------------------------------------------------------------ -# pkgadd: file(1) magic for SysV R4 PKG Datastreams -# -0 string #\ PaCkAgE\ DaTaStReAm application/x-svr4-package - -#PNG Image Format -0 string \x89PNG image/png - -# MNG Video Format, -0 string \x8aMNG video/x-mng -0 string \x8aJNG video/x-jng - -#------------------------------------------------------------------------------ -# Hierarchical Data Format, used to facilitate scientific data exchange -# specifications at http://hdf.ncsa.uiuc.edu/ -#Hierarchical Data Format (version 4) data -0 belong 0x0e031301 application/x-hdf -#Hierarchical Data Format (version 5) data -0 string \211HDF\r\n\032 application/x-hdf - -# Adobe Photoshop -0 string 8BPS image/x-photoshop - -# Felix von Leitner -0 string d8:announce application/x-bittorrent - - -# lotus 1-2-3 document -0 belong 0x00001a00 application/x-123 -0 belong 0x00000200 application/x-123 - -# MS Access database -4 string Standard\ Jet\ DB application/msaccess - -## magic for XBase files -#0 byte 0x02 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x03 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x04 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x05 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x30 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x43 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x7b -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x83 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x8b -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0x8e -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0xb3 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 byte 0xf5 -#>8 leshort >0 -#>>12 leshort 0 application/x-dbf -# -#0 leshort 0x0006 application/x-dbt - -# Debian has entries for the old PGP formats: -# pgp: file(1) magic for Pretty Good Privacy -# see http://lists.gnupg.org/pipermail/gnupg-devel/1999-September/016052.html -#text/PGP key public ring -0 beshort 0x9900 application/pgp -#text/PGP key security ring -0 beshort 0x9501 application/pgp -#text/PGP key security ring -0 beshort 0x9500 application/pgp -#text/PGP encrypted data -0 beshort 0xa600 application/pgp-encrypted -#text/PGP armored data -##public key block -2 string ---BEGIN\ PGP\ PUBLIC\ KEY\ BLOCK- application/pgp-keys -0 string -----BEGIN\040PGP\40MESSAGE- application/pgp -0 string -----BEGIN\040PGP\40SIGNATURE- application/pgp-signature -# -# GnuPG Magic: -# -# -#text/GnuPG key public ring -0 beshort 0x9901 application/pgp -#text/OpenPGP data -0 beshort 0x8501 application/pgp-encrypted - -# flash: file(1) magic for Macromedia Flash file format -# -# See -# -# http://www.macromedia.com/software/flash/open/ -# -0 string FWS ->3 byte x application/x-shockwave-flash - -# The following paramaters are created for Namazu. -# -# -# 1999/08/13 -#0 string \ - - - - - - -
- -
- - - -"}; diff --git a/system/BASE_SOFT/VARNISH/4.1/conf/includes/error.vcl b/system/BASE_SOFT/VARNISH/4.1/conf/includes/error.vcl deleted file mode 100644 index c0c2536..0000000 --- a/system/BASE_SOFT/VARNISH/4.1/conf/includes/error.vcl +++ /dev/null @@ -1,138 +0,0 @@ -# The vcl_error() procedure -set obj.http.Content-Type = "text/html; charset=utf-8"; -set obj.http.Retry-After = "5"; - -synthetic {" - - - - - "} + obj.status + " " + obj.response + {" - - - - - - - - - - - - -
- -
- - We're very sorry, but the page could not be loaded properly. - -
- -
This should be fixed very soon, and we apologize for any inconvenience.
- -
- -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Debug Information

VariableValue
General
XID"} + req.xid + {"
Time"} + now + {"
Request
HTTP host"} + req.http.Host + {"
Request type"} + req.request + {"
HTTP Protocol version"} + req.proto + {"
URL"} + req.url + {"
Cookies"} + regsuball(req.http.cookie, "; ", "
") + {"
Accept-Encoding"} + req.http.Accept-Encoding + {"
Cache-Control"} + req.http.Cache-Control + {"
HTTP header"} + req.http.header + {"
GZIP supported"} + req.can_gzip + {"
Backend"} + req.backend + {"
Server
Identity"} + server.identity + {"
IP:port"} + server.ip + {":"} + server.port + {"
Client
IP"} + client.ip + {"
-
-
-
-
-
- - - - -"}; diff --git a/system/BASE_SOFT/VARNISH/4.1/conf/includes/probes.vcl b/system/BASE_SOFT/VARNISH/4.1/conf/includes/probes.vcl deleted file mode 100644 index d4cf27a..0000000 --- a/system/BASE_SOFT/VARNISH/4.1/conf/includes/probes.vcl +++ /dev/null @@ -1,8 +0,0 @@ -probe default_probe { - .url = "/"; - .expected_response = 200; - .timeout = 15s; - .interval = 15s; - .window = 5; - .threshold = 2; -} diff --git a/system/BASE_SOFT/VARNISH/4.1/conf/includes/wp-protection.vcl b/system/BASE_SOFT/VARNISH/4.1/conf/includes/wp-protection.vcl deleted file mode 100644 index ce03c91..0000000 --- a/system/BASE_SOFT/VARNISH/4.1/conf/includes/wp-protection.vcl +++ /dev/null @@ -1,16 +0,0 @@ - - set req.http.X-Actual-IP = regsub(req.http.X-Forwarded-For, "[, ].*$", ""); - - #Prevent hammering on wp-login page and users doing excessive searches (2 per second) - if(vsthrottle.is_denied(req.http.X-Actual-IP, 10, 20s) && (req.url ~ "xmlrpc|wp-login.php|\?s\=")) { - return (synth(429, "Too Many Request - Calm down")); - # Use shield vmod to reset connection - shield.conn_reset(); - } - - #Prevent users from making excessive POST requests that aren't for admin-ajax - if(vsthrottle.is_denied(req.http.X-Actual-IP, 15, 10s) && ((!req.url ~ "\/wp-admin\/|(xmlrpc|admin-ajax)\.php") && (req.method == "POST"))){ - return (synth(429, "Too Many Requests")); - # Use shield vmod to reset connection - shield.conn_reset(); - } diff --git a/system/BASE_SOFT/VARNISH/4.1/conf/production.vcl b/system/BASE_SOFT/VARNISH/4.1/conf/production.vcl deleted file mode 100644 index cd3f8de..0000000 --- a/system/BASE_SOFT/VARNISH/4.1/conf/production.vcl +++ /dev/null @@ -1,311 +0,0 @@ -vcl 4.0; -import vsthrottle; -import shield; -import std; -import directors; - -### {{{ PROBES, BACKENDS , ACLS , DIRECTORS -## Probes -include "includes/probes.vcl"; - -## Backends -include "includes/backends.vcl"; - -## ACLs -include "includes/acls.vcl"; - -## Directors -include "includes/directors.vcl"; - -### }}} PROBES, BACKENDS , ACLS , DIRECTORS - -### {{{ RECV -sub vcl_recv { - - include "includes/wp-protection.vcl"; - - if (req.restarts == 0) { - if (req.http.X-Forwarded-For) { - set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip; - } else { - set req.http.X-Forwarded-For = client.ip; - } - } - - # Normalisation des headers, suppression du port (si on utilise plusieurs ports TCP) - set req.http.Host = regsub(req.http.Host, ":[0-9]+", ""); - - # Normalisation des arguments - # Mis en commentaire : probleme sur les cms wp, drupal etc - # http://stackoverflow.com/questions/29929164/issue-with-wordpress-and-varnish-breaking-loadscript-php - # set req.url = std.querysort(req.url); - - - # Bye Bye w00tw00t - if (req.url ~ "^/w00tw00t") { - return (synth(404, "Not Found")); - } - - # Authorisation pour les purge - if (req.method == "PURGE") { - if (!client.ip ~ purge) { - # Non autorisé ! On lui fourni l'erreur 405 avec le message qui va bien, - return (synth(405, "This IP is not allowed to send PURGE requests.")); - } - # Autorisé on purge le cache demandé - return (purge); - } - - # Ne traiter que les type normaux, tout le reste est à passer directement aux backends - if (req.method != "GET" && - req.method != "HEAD" && - req.method != "PUT" && - req.method != "POST" && - req.method != "TRACE" && - req.method != "OPTIONS" && - req.method != "PATCH" && - req.method != "DELETE") { - return (pipe); - } - - # Ne mettre en cache que les requetes de type GET ou HEAD. Ceci permet de s'assurer que les requetes POST sont transmises directement aux backends - if (req.method != "GET" && req.method != "HEAD") { - return (pass); - } - - # Support de websocket , plus d'infos => https://www.varnish-cache.org/docs/4.0/users-guide/vcl-example-websockets.html - if (req.http.Upgrade ~ "(?i)websocket") { - return (pipe); - } - - # Suppression des parametres ajouté par Google Analytics, inutile pour les backends - if (req.url ~ "(\?|&)(utm_source|utm_medium|utm_campaign|gclid|cx|ie|cof|siteurl)=") { - set req.url = regsuball(req.url, "&(utm_source|utm_medium|utm_campaign|gclid|cx|ie|cof|siteurl)=([A-z0-9_\-\.%25]+)", ""); - set req.url = regsuball(req.url, "\?(utm_source|utm_medium|utm_campaign|gclid|cx|ie|cof|siteurl)=([A-z0-9_\-\.%25]+)", "?"); - set req.url = regsub(req.url, "\?&", "?"); - set req.url = regsub(req.url, "\?$", ""); - } - - # Suppression des # envoyés pour le backend. - if (req.url ~ "\#") { - set req.url = regsub(req.url, "\#.*$", ""); - } - - # Suppression des / à la fin des Urls pour eviter le duplicate content - if (req.url ~ "\?$") { - set req.url = regsub(req.url, "\?$", ""); - } - - # Suppression de "has_js" cookie si present - set req.http.Cookie = regsuball(req.http.Cookie, "has_js=[^;]+(; )?", ""); - - # Suppression de tous les cookies basés sur Google Analytics - set req.http.Cookie = regsuball(req.http.Cookie, "__utm.=[^;]+(; )?", ""); - set req.http.Cookie = regsuball(req.http.Cookie, "_ga=[^;]+(; )?", ""); - set req.http.Cookie = regsuball(req.http.Cookie, "utmctr=[^;]+(; )?", ""); - set req.http.Cookie = regsuball(req.http.Cookie, "utmcmd.=[^;]+(; )?", ""); - set req.http.Cookie = regsuball(req.http.Cookie, "utmccn.=[^;]+(; )?", ""); - - # Remove DoubleClick offensive cookies - set req.http.Cookie = regsuball(req.http.Cookie, "__gads=[^;]+(; )?", ""); - - # Suppression des cookies de Quant Capital (ajoutés par certains plugin, all __qca) - set req.http.Cookie = regsuball(req.http.Cookie, "__qc.=[^;]+(; )?", ""); - - # Suppression des cookies AddThis - set req.http.Cookie = regsuball(req.http.Cookie, "__atuvc=[^;]+(; )?", ""); - - # Suppression du prefix ";" du cookies si present - set req.http.Cookie = regsuball(req.http.Cookie, "^;\s*", ""); - - # Cookies vides ou seulement avec des espaces ? - if (req.http.cookie ~ "^\s*$") { - unset req.http.cookie; - } - - # Normalisation Accept-Encoding header - # Cf manuel => https://www.varnish-cache.org/docs/3.0/tutorial/vary.html - if (req.http.Accept-Encoding) { - if (req.url ~ "\.(jpg|png|gif|gz|tgz|bz2|tbz|mp3|ogg)$") { - unset req.http.Accept-Encoding; - } elsif (req.http.Accept-Encoding ~ "gzip") { - set req.http.Accept-Encoding = "gzip"; - } elsif (req.http.Accept-Encoding ~ "deflate") { - set req.http.Accept-Encoding = "deflate"; - } else { - # algorithm non connu - unset req.http.Accept-Encoding; - } - } - - # On passe les gros fichiers directements aux backends pour eviter les resets de connexions | CF vcl_backend_response - if (req.url ~ "^[^?]*\.(mp[34]|rar|tar|tgz|gz|wav|zip)(\?.*)?$") { - unset req.http.Cookie; - return (hash); - } - - # Suppression des cookies sur les fichiers static - if (req.url ~ "^[^?]*\.(bmp|bz2|css|doc|eot|flv|gif|gz|ico|jpeg|jpg|js|less|pdf|png|rtf|swf|txt|woff|xml)(\?.*)?$") { - unset req.http.Cookie; - return (hash); - } - - # Envoie de Surrogate-Capability headers pour le support des ESI au niveau des backend - set req.http.Surrogate-Capability = "key=ESI/1.0"; - - if (req.http.Authorization) { - # Ne pas mettre en cache par defaut - return (pass); - } - - return (hash); -} -### }}} RECV - - ### {{{ PIPE :: PASS -sub vcl_pipe { - # On renvoie toujours le X-Forwarded-For , pas uniquement sur la première requete envoyé aux backends - set bereq.http.Connection = "Close"; - - # Support de websocket , plus d'infos => https://www.varnish-cache.org/docs/4.0/users-guide/vcl-example-websockets.html - if (req.http.upgrade) { - set bereq.http.upgrade = req.http.upgrade; - } - return (pipe); -} - -sub vcl_pass { -# return (pass); -} - -### }}} PIPE :: PASS - -### {{{ HASH :: HIT :: MISS -sub vcl_hash { - hash_data(req.url); - - if (req.http.host) { - hash_data(req.http.host); - } else { - hash_data(server.ip); - } - - if (req.http.Cookie) { - hash_data(req.http.Cookie); - } -} - -sub vcl_hit { - if (obj.ttl >= 0s) { - return (deliver); - } - - if (std.healthy(req.backend_hint)) { - if (obj.ttl + 10s > 0s) { - return (deliver); - } else { - return(fetch); - } - } else { - if (obj.ttl + obj.grace > 0s) { - return (deliver); - } else { - return (fetch); - } - } - return (fetch); -} - -sub vcl_miss { - return (fetch); -} -### }}} HASH :: HIT :: MISS - -### {{{ BACKEND RESPONSE -sub vcl_backend_response { - # Parse des requetes ESI et suppression des headers Surrogate-Control - if (beresp.http.Surrogate-Control ~ "ESI/1.0") { - unset beresp.http.Surrogate-Control; - set beresp.do_esi = true; - } - - if (bereq.url ~ "^[^?]*\.(bmp|bz2|css|doc|eot|flv|gif|gz|ico|jpeg|jpg|js|less|mp[34]|pdf|png|rar|rtf|swf|tar|tgz|txt|wav|woff|xml|zip)(\?.*)?$") { - unset beresp.http.set-cookie; - } - - if (bereq.url ~ "^[^?]*\.(mp[34]|rar|tar|tgz|gz|wav|zip|bz2|xz|7z|avi|mov|ogm|mpe?g|mk[av])(\?.*)?$") { - unset beresp.http.set-cookie; - set beresp.do_stream = true; - set beresp.do_gzip = false; - } - - # On s'assure que s'il y a des 301 ou des 302 , les port TCP sont remis en place. - if (beresp.status == 301 || beresp.status == 302) { - set beresp.http.Location = regsub(beresp.http.Location, ":[0-9]+", ""); - } - - # On affiche le contenu en cache (Périmé) si les backends sont downs - set beresp.grace = 6h; - - return (deliver); -} - -### }}} BACKEND RESPONSE - -### {{{ DELIVER -sub vcl_deliver { - if (obj.hits > 0) { - set resp.http.X-Cache = "HIT"; - } else { - set resp.http.X-Cache = "MISS"; - } - - #if (resp.http.X-marker == "pass" ) { - # remove resp.http.X-marker; - # set resp.http.X-Varnish-Cache = "PASS"; - #} - set resp.http.X-Cache-Hits = obj.hits; - - if (client.ip ~ debug) { - set resp.http.X-Served-By = server.hostname; - set resp.http.X-Varnish-Ip = server.ip; - set resp.http.X-Varnish-Port = std.port(server.ip); - } else { - # Suppression des headers: PHP version, Apache , OS ... - unset resp.http.X-Powered-By; - unset resp.http.Server; - unset resp.http.X-Varnish; - unset resp.http.Via; - unset resp.http.Link; - } - - return (deliver); -} -### }}} DELIVER - -### {{{ SYNTH -sub vcl_synth { - if (resp.status == 720) { - set resp.http.Location = resp.reason; - set resp.status = 301; - set resp.reason = "Moved Permanently"; - } elseif (resp.status == 721) { - set resp.http.Location = resp.reason; - set resp.status = 302; - set resp.reason = "Moved Temporary"; - } - - return (deliver); -} -### }}} SYNTH - -### {{{ INIT -sub vcl_init { - return (ok); -} - -sub vcl_fini { - return (ok); -} - - ### }}} INIT :: FINI \ No newline at end of file diff --git a/system/BASE_SOFT/VARNISH/4.1/varnish b/system/BASE_SOFT/VARNISH/4.1/varnish deleted file mode 100644 index 88bd46b..0000000 --- a/system/BASE_SOFT/VARNISH/4.1/varnish +++ /dev/null @@ -1,15 +0,0 @@ -START=True -NFILES=131072 -MEMLOCK=82000 - -DAEMON_OPTS="-a 127.0.0.1:81 \ - -f /etc/varnish/production.vcl \ - -T 127.0.0.1:6082 \ - -S /etc/varnish/secret \ - -s default=malloc,1g \ - -p thread_pool_min=200 \ - -p thread_pool_max=4000 \ - -p thread_pool_timeout=300 \ - -p default_grace=300 \ - -p default_ttl=604800 \ - -p ban_lurker_sleep=1" diff --git a/system/BASE_SOFT/VARNISH/5.0/README.md b/system/BASE_SOFT/VARNISH/5.0/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/system/BASE_SOFT/VARNISH/README.md b/system/BASE_SOFT/VARNISH/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/system/BASE_SOFT/changes.md b/system/BASE_SOFT/changes.md deleted file mode 100644 index ed8f79a..0000000 --- a/system/BASE_SOFT/changes.md +++ /dev/null @@ -1,15 +0,0 @@ - -# Apache 2.4 -apache2.conf --> ServerName -apache2.conf --> Header set X-Apache-Server-ID -sites-available --> 010-mywebsite.com.conf -010-mywebsite.com.conf --> ServerName -010-mywebsite.com.conf --> ServerAlias -010-mywebsite.com.conf --> DocumentRoot -010-mywebsite.com.conf --> mod_fastcgi -010-mywebsite.com.conf --> Directory -010-mywebsite.com.conf --> Header set X-Vhost-ID -.htpasswd --> ajout user random - -# HaProxy -userlist htaccess \ No newline at end of file diff --git a/system/README.md b/system/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/system/scripts/README.md b/system/scripts/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/system/scripts/install_packages.py b/system/scripts/install_packages.py deleted file mode 100755 index 811512d..0000000 --- a/system/scripts/install_packages.py +++ /dev/null @@ -1,69 +0,0 @@ -import ConfigParser -import os - -from fabric.contrib import files -from fabric.api import * -from fabric.utils import warn - -SERVER_ROLES = ['cache'] -env.user = 'root' -env.key_filename = '~/.ssh/id_rsa' - - -env.roledefs = dict.fromkeys(SERVER_ROLES, []) - -# Directory structure -PROJECT_ROOT = os.path.dirname(__file__) -CONF_ROOT = os.path.join(PROJECT_ROOT, 'lamp-debian9') - -def install_packages(*roles): - """ - Install packages for the given roles. - """ - roles = list(roles) - if roles == ['all', ]: - roles = SERVER_ROLES - if 'base' not in roles: - roles.insert(0, 'base') - config_file = os.path.join(CONF_ROOT, u'debian9.ini' % env) - print(config_file) - config = ConfigParser.SafeConfigParser() - config.read(config_file) - for role in roles: - if config.has_section(role): - # Get ppas - if config.has_option(role, 'ppas'): - for ppa in config.get(role, 'ppas').split(' '): - sudo(u'add-apt-repository %s' % ppa) - # Get sources - if config.has_option(role, 'sources'): - for section in config.get(role, 'sources').split(' '): - source = config.get(section, 'source') - key = config.get(section, 'key') - files.append(u'/etc/apt/sources.list', source, use_sudo=True) - sudo(u"wget -q %s -O - | sudo apt-key add -" % key) - sudo(u"apt-get update") - - for package in config.get(role, 'packages'): - if role == "database": - pass - sudo(u"apt-get install -y %s" % package) - - - - -def install_mysql(): - with settings(hide('warnings', 'stderr'), warn_only=True): - result = sudo('dpkg-query --show mysql-server') - if result.failed is False: - warn('MySQL is already installed') - return - mysql_password = prompt('Please enter MySQL root password:') - sudo('echo "mysql-server-5.0 mysql-server/root_password password ' \ - '%s" | debconf-set-selections' % mysql_password) - sudo('echo "mysql-server-5.0 mysql-server/root_password_again password ' \ - '%s" | debconf-set-selections' % mysql_password) - apt_get('mysql-server') - -def host_type(): - run('uname -s') \ No newline at end of file diff --git a/system/scripts/install_packages.pyc b/system/scripts/install_packages.pyc deleted file mode 100644 index d525408d1f4f77110d271a4cb9f96c364e8d06c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2919 zcmcguQEwYX5T3Q;#CDt}ahsqbgpN`q3(0YX3Wy3Jkdu}|anf@{AX0R?_}2D0=ex`8 zx~ZiERD}oLc;S!m#t-0s@W>C~2f#OTcAN5qkc#75@6OE5&VDoVU5bCMRNFuP@okT0 zpCW!g#bbWO5a6pQB079NS9GXEUZAKz<02gvNwHm#q6OOL*#bo+8ZXk}A~Yo$V9OE( zi=@lsRVY}JNtN_6jcTNqXh3vX5a9}GMWbspS|z{IP~L>1hxuY^x`WjZgiCVM8!8ZVI(_{x5#r*}oT@__y7OzOEB3UB4MkC}HA>+<9 zvUSLn;t&ua1Hd7yC=P*z*YX?Rn|s2=R@u|`(c5%UmOHHp>OTvh*s)IM<(ZrB)xqgA z!uKGkqh79a>RK484n7ZKWBn*{QoncN543UmN#@w0b_U@S9XnZqLfR5bq=^WoQZvWC z(IM6}S;jD{kgYHdMVqF+LH3E9$p%J02%3Iso0(1%6WS!3I`0^y8F3_&tfvhUKcCAf zCweLyTiW(o*x8!dZAGE6CvJwwX~skL#WA7cLYAUq{PBa(%o^t-f=y5_t8#QZh{>; zv$gT^D}m^#=iZ&en}_|tNp+- z?nB>rM)z!(#I`zHC#ftsS-7gSx=EwZ%JGbg3k|m#!;$JZ5XF8r(G8AEHb~axgq{TC zF`vkmd@WnpNP)4vs-j3Vd z?R0h?wLXgn@UF8=w;0}s?VYaIZMRG>3sV@*a^lUix0Ox>u7Ap<*5Bi!7iwx%Ra8w~ zS2tA&zbp7#E!5R5wIO3&)zzljP}RasXp2hdj#J1;wegr|7(jO@Y_METU*IvM`BJH$ z)=2>j&=)!vRCo{&J^qHt4#ZNTlQLyr3crDm(Av;;flkgpU^?Ck?ooNi@(N8oUzLSO zX1f}UZbzz>sXUAav+l70(2~+(xtGMz)VvAXAUzp0PbV5p*KC?$a^{Su<}_-e!k*~N zybhDErrpPnoX|Lal%cey&J0E!n75$bi!^$|L56hZZ{2z6uoiDa&hl-~_oJmap!%& zEQ3(2Ak1Ai3tn79n9bVJ`qUj))J_x;Fdm+M6|X_kyrD-8hB@z9Bl=ekUrNn|Y( zk{tUSkyqa%{Fa~hh@AZ)1ZEQhsW;F7tE#FNQ2vXmERQq+YdLsn0*)F@fDV|~v0SWU z7_Uj}kG0dB{pV4HB%8!9ZY8r<)&5LgL(r{fr>Wk?!f?!_8n0n=WvF8&u=oArEbMKe z+-w#e=Y+_8HIw^kC~Q1iPHY$%Nv+G2>@r-!fOrXIVu-hlP$XYpG(p(Q-&1|m0klRM zmKih9ed97MNo@pSCVLn>Ph5DOc-(V$zu0N-%NxSI!Kd