From ee8d4c0c8fff0e201b33fdea322a7f3ff1161e4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9gory=20Soutad=C3=A9?= Date: Fri, 14 May 2010 15:04:01 +0200 Subject: [PATCH] Initial commit A good base to start working --- Makefile | 26 +++ controller/KissCount.cpp | 44 +++++ controller/KissCount.h | 29 +++ init.sql | 10 ++ main.cpp | 46 +++++ main.h | 7 + model/Account.h | 28 +++ model/Database.cpp | 115 ++++++++++++ model/Database.h | 26 +++ model/Preferences.h | 13 ++ model/User.h | 17 ++ ressources/Clients-icon.png | Bin 0 -> 53053 bytes ressources/administrator-icon.png | Bin 0 -> 25567 bytes ressources/chart-icon.png | Bin 0 -> 23247 bytes ressources/options-icon.png | Bin 0 -> 22806 bytes sha1.cpp | 283 ++++++++++++++++++++++++++++++ sha1.h | 22 +++ view/AccountPanel.cpp | 21 +++ view/AccountPanel.h | 30 ++++ view/ButtonPanel.cpp | 39 ++++ view/ButtonPanel.h | 38 ++++ view/UsersDialog.cpp | 73 ++++++++ view/UsersDialog.h | 32 ++++ view/wxUI.cpp | 65 +++++++ view/wxUI.h | 39 ++++ 25 files changed, 1003 insertions(+) create mode 100644 Makefile create mode 100644 controller/KissCount.cpp create mode 100644 controller/KissCount.h create mode 100644 init.sql create mode 100644 main.cpp create mode 100644 main.h create mode 100644 model/Account.h create mode 100644 model/Database.cpp create mode 100644 model/Database.h create mode 100644 model/Preferences.h create mode 100644 model/User.h create mode 100644 ressources/Clients-icon.png create mode 100644 ressources/administrator-icon.png create mode 100644 ressources/chart-icon.png create mode 100644 ressources/options-icon.png create mode 100644 sha1.cpp create mode 100644 sha1.h create mode 100644 view/AccountPanel.cpp create mode 100644 view/AccountPanel.h create mode 100644 view/ButtonPanel.cpp create mode 100644 view/ButtonPanel.h create mode 100644 view/UsersDialog.cpp create mode 100644 view/UsersDialog.h create mode 100644 view/wxUI.cpp create mode 100644 view/wxUI.h diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..72cdba9 --- /dev/null +++ b/Makefile @@ -0,0 +1,26 @@ +CXXFLAGS=`wx-config --cxxflags` -Wall -I. -ggdb +CXXFLAGS+=-I./lib/wxsqlite3-1.9.9/include +CXXFLAGS+=-I./lib/freechart/include + +LDFLAGS=`wx-config --libs` +LDFLAGS+=-L./lib/wxsqlite3-1.9.9/lib/ -lwxcode_gtk2u_wxsqlite3-2.8 +LDFLAGS+=-L./lib/freechart/lib -lwxcode_gtk2u_freechart-2.8 + +CXX=g++ + +SOURCES=$(wildcard model/*.cpp) +SOURCES+=$(wildcard view/*.cpp) +SOURCES+=$(wildcard controller/*.cpp) +SOURCES+=main.cpp sha1.cpp +HEADERS=$(wildcard model/*.h) +HEADERS+=$(wildcard view/*.h) +HEADERS+=$(wildcard controller/*.h) +HEADERS+=main.h sha1.h + +all: kc + +clean: + rm -f *.o + +kc: $(SOURCES) $(HEADERS) + $(CXX) $(CXXFLAGS) $(SOURCES) -o $@ $(LDFLAGS) \ No newline at end of file diff --git a/controller/KissCount.cpp b/controller/KissCount.cpp new file mode 100644 index 0000000..a806522 --- /dev/null +++ b/controller/KissCount.cpp @@ -0,0 +1,44 @@ +#include "KissCount.h" + +KissCount::KissCount() +{ + _wxUI = new wxUI(this, _("KissCount"), wxPoint(50, 50), wxSize(1024, 768)); + + _wxUI->Show(true); + _wxUI->Centre(); + _wxUI->Disable(); + + try + { + _db = new Database(); + } + catch (std::string s) + { + _wxUI->Close(true); + throw s; + } + + _wxUI->ChangeUser(); + _wxUI->Enable(); +} + +KissCount::~KissCount() +{ + delete _db; + delete _wxUI; +} + +std::list KissCount::GetUsers() +{ + return _db->GetUsers(); +} + +bool KissCount::IsValidUser(wxString user, wxString password) +{ + return _db->IsValidUser(user, password) ; +} + +void KissCount::LoadUser(wxString user) +{ + +} diff --git a/controller/KissCount.h b/controller/KissCount.h new file mode 100644 index 0000000..74166eb --- /dev/null +++ b/controller/KissCount.h @@ -0,0 +1,29 @@ +#ifndef KISSCOUNT_H +#define KISSCOUNT_H + +#include +#include +#include + +#include +#include +#include +#include + +class wxUI; +class KissCount +{ + public: + KissCount(); + ~KissCount(); + + std::list GetUsers(); + bool IsValidUser(wxString user, wxString password); + void LoadUser(wxString user); + + private: + wxUI* _wxUI; + Database* _db; +}; + +#endif diff --git a/init.sql b/init.sql new file mode 100644 index 0000000..dadb70c --- /dev/null +++ b/init.sql @@ -0,0 +1,10 @@ +CREATE TABLE user (id INTEGER PRIMARY KEY, name VARCHAR(255), password VARCHAR(255)); +CREATE TABLE account(id INTEGER PRIMARY KEY, user REFERENCES user(id), name VARCHAR(255), number VARCHAR(255), shared CHAR(1), default CHAR(1)); +CREATE TABLE operation(id INTEGER PRIMARY KEY, account REFERENCES account(id), year INTEGER, month INTEGER, day INTEGER, description VARCHAR(255), category VARCHAR(255), fix_cost CHAR(1)); +CREATE TABLE preference(id INTEGER PRIMARY KEY, user REFERENCES user(id), type VARCHAR(255), name VARCHAR(255), value VARCHAR(255)); +CREATE TABLE default_preference(id INTEGER PRIMARY KEY, type VARCHAR(255), name VARCHAR(255), value VARCHAR(255)); +INSERT INTO default_preference ("type", "value") VALUES ("category", "Fixe"); +INSERT INTO default_preference ("type", "value") VALUES ("category", "Courses"); +INSERT INTO default_preference ("type", "value") VALUES ("category", "Loisirs"); +INSERT INTO default_preference ("type", "value") VALUES ("category", "Frais de fonctionnement"); +INSERT INTO default_preference ("type", "value") VALUES ("category", "Exceptionnel"); \ No newline at end of file diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..11d22b1 --- /dev/null +++ b/main.cpp @@ -0,0 +1,46 @@ +#include "main.h" + +class MyApp: public wxApp +{ + virtual bool OnInit() + { + try + { + new KissCount(); + } + catch (std::string s) + { + std::cerr << "Error " << s << "\n"; + return false; + } + + return true; + } +}; + +IMPLEMENT_APP(MyApp); + +// bool MyApp::OnInit() +// { +// Main app; + +// MyFrame *frame = new MyFrame( _("Hello World"), wxPoint(50, 50), wxSize(1024, 768) ); +// AccountPanel* f = new AccountPanel(frame); +// frame->Show(true); +// SetTopWindow(frame); + +// frame->Centre(); +// frame->Disable(); + +// try +// { +// app.Init(); +// } +// catch (std::string s) +// { +// std::cout << "Error " << s << "\n"; +// frame->Close(true); +// } +// frame->Enable(); +// return true; +// } diff --git a/main.h b/main.h new file mode 100644 index 0000000..dad0173 --- /dev/null +++ b/main.h @@ -0,0 +1,7 @@ +#ifndef MAIN_H +#define MAIN_H + +#include +#include + +#endif diff --git a/model/Account.h b/model/Account.h new file mode 100644 index 0000000..42b60f0 --- /dev/null +++ b/model/Account.h @@ -0,0 +1,28 @@ +#ifndef ACCOUNT_H +#define ACCOUNT_H + +#include +#include + + +struct operation { + unsigned int day; + unsigned int month; + unsigned int year; + unsigned int amount; + std::string description; + std::string category; + bool fix_cost; +} ; + +class Account +{ +private: + std::string _name; + std::string _number; + std::map > > _operations; + bool _shared; + bool _default; +}; + +#endif diff --git a/model/Database.cpp b/model/Database.cpp new file mode 100644 index 0000000..2a34f74 --- /dev/null +++ b/model/Database.cpp @@ -0,0 +1,115 @@ +#include "Database.h" + + +Database::Database() +{ + std::ifstream bdd_file; + + bdd_file.open(BDD_FILE); + + if (!bdd_file) + { + CreateDatabase(); + } + else + _db.Open(_(BDD_FILE)); + + bdd_file.close(); +} + +void Database::CreateDatabase() +{ + std::ifstream init_script; + std::string line; + + wxMessageBox(_("No database found, creating a new one"), _("KissCount"), wxICON_EXCLAMATION | wxOK ); + + init_script.open(INIT_SCRIPT); + + if (!init_script) + { + wxMessageBox(_(INIT_SCRIPT " not found, aborting"), _("Error"), wxICON_ERROR | wxOK ); + throw "init.sql not found, aborting"; + } + + _db.Open(_(BDD_FILE)); + + do + { + getline(init_script, line); + if (!_db.CheckSyntax(line.data())) + { + std::cout << line << " is invalid !\n" ; + continue; + } + try + { + _db.ExecuteUpdate(line.data()); + } + catch (...) + { + wxMessageBox(_("Error creating original database"), _("Error"), wxICON_ERROR | wxOK ); + throw line; + } + } while (init_script); + + init_script.close(); +} + +std::list Database::GetUsers() +{ + std::list res; + + // Check whether value exists in table + wxSQLite3ResultSet set ; + try + { + set = _db.ExecuteQuery(wxT("SELECT name FROM user")); + } + catch (wxSQLite3Exception e) + { + std::cerr << e.GetMessage().mb_str() << "\n" ; + return res; + } + + while (set.NextRow()) + { + res.push_front(set.GetAsString(0)); + } + set.Finalize(); + + return res; +} + +bool Database::IsValidUser(wxString user, wxString password) + { + bool res; + blk_SHA_CTX sha_ctx; + unsigned char sha[20]; + wxString req, wxSHA; + wxSQLite3ResultSet set; + + blk_SHA1_Init(&sha_ctx); + blk_SHA1_Update(&sha_ctx, password.c_str(), password.Length()); + blk_SHA1_Final(sha, &sha_ctx); + + for(int i=0; i<20; i++) + wxSHA += wxString::Format(wxT("%02F"), (int)sha[i]); + req = _("SELECT name FROM user WHERE name='") + user + _("' AND password='") + wxSHA + _("'"); + + // Check whether value exists in table + try + { + set = _db.ExecuteQuery(req); + } + catch (wxSQLite3Exception e) + { + std::cerr << e.GetMessage().mb_str() << "\n" ; + return false; + } + + res = set.NextRow() ; + set.Finalize(); + + return res; +} diff --git a/model/Database.h b/model/Database.h new file mode 100644 index 0000000..78252ae --- /dev/null +++ b/model/Database.h @@ -0,0 +1,26 @@ +#ifndef DATABASE_H +#define DATABASE_H + +#include +#include +#include +#include +#include + +#define BDD_FILE "kc.bdd" +#define INIT_SCRIPT "init.sql" + +class Database +{ + public: + Database(); + + std::list GetUsers(); + bool IsValidUser(wxString user, wxString password); + private: + wxSQLite3Database _db; + + void CreateDatabase(); +}; + +#endif diff --git a/model/Preferences.h b/model/Preferences.h new file mode 100644 index 0000000..ada5868 --- /dev/null +++ b/model/Preferences.h @@ -0,0 +1,13 @@ +#ifndef PREFERENCES_H +#define PREFERENCES_H + +#include +#include + +class Preferences +{ +private: + std::map _colors; +}; + +#endif diff --git a/model/User.h b/model/User.h new file mode 100644 index 0000000..9a4db61 --- /dev/null +++ b/model/User.h @@ -0,0 +1,17 @@ +#ifndef USER_H +#define USER_H + +#include + +#include "Account.h" + +class User +{ +private: + unsigned int _id; + wxString _name; + wxString _password; + std::list _accounts; +}; + +#endif diff --git a/ressources/Clients-icon.png b/ressources/Clients-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..7f813f439464491c2c10e51ece9ba77d28f32fa8 GIT binary patch literal 53053 zcmW(+by!s0*S#}zch}G@-8FQ#5|YwNhxEVzA|2A*;VT`|Dcz~k-AH$T{Jy{Lea>_9 z?6db;d+mK9v@{g4(8f_+2!#G>9?~1_r1MDx|RyUI*H~ju-;MM&l`eT|_Yccg;EZ8(YwtgNTu7&o&3} z|F<`_=>c8rpEAFz7xc?l5DApPT9|GfO=m&cx&_yfq8tYwv{B^MbB{^HjI7RNr`(7M zVHEOM;qRG$_yw=x!y+n`Su*fpesU5_pRPSR=R8vN*#Sg(6WRlO?cE4bqglQ0AiU6w zN4%pte85E;Ln|bhNenAqTRSdFluQ)hjTF%`4dqBARB;Q49becqm` zIW!Myu7w78+~ao(^A+p;ngrOmZL1*z7KahH{E!ve10*ei9KFC?&+#FR)1mqqFAFl|w|U(%P?ys0 zai0e27DQ}EdPDDL%YK*1wIfB2BOZW`gtOh*_Ei}X`jBuTKW7)|=K5ArZ-bW9s@+$=Nziryv^aj&4w z6=Z>M#hZu>{drVm=PNfGmcKRBKC=?S*E$+Dz1XHPTb7^Xu=VSlhQGP4=nR>Y!#SS*t?^>AT4ze`~Ps`JCPzgNM!e&|G@-w z_x07qBES>UuKseHXZw4-iJW|RKsXgc=!%&%YXEuay~q)%kJ2%&_^FPOz90i1-j)BgC89ffDQ&?t9p(&aBvfeG{Cu~-@2orQUSewmu+S5uR}GOLR(&S*wTwBO*CV!Gz$k{R9_-k-%C~vIwJ9rkF?oc=w9ZKr8!54ER2=%STo<2 zVQfH$945cr*0SqvSE{T@xzgB6v${SUXQg29#ReUS*Bx&z2vDE>S+e=A&fKD7B!UXV zcTz`|Kr(#%E8rackTy`9G{{eAO#S|@-KBZCz_)2+yVCnfhIRt|j%Bu>{o$c_-~lDJ*hi+NE^>i@{7C(i9WKRCPIS`Y7B4AO~5IAwJe?W{Iwz zCR+F1$4ja)7h2*RR9FPUte8L(0+rAr5cSH z-p$AHOidtejZH?YdL50+p1$?qiyu8VWL2W|`$|2u9H|rk%1nOQn|$AcH?&Fg{ZV)a zPuO+jC6NV1?q5QS;PLNq-i)yHMS44B2(==M9`hcBwVV;ytDp)9{q)f2AU35xnPSJb zC-w`KG{I7~Hi6Q-j)I87G*{ku=hR9dl3QX8lV zo1|3#i213LAlkSwG7RR+!4z{Ic8Gqlni(C0fl#{c)rdsu&C+h?H4ji%tK1WR(!gK2 zZsBt><^O~ftKs&$eN$`(G6_hb{>+A5b|x4yQ{=2K%@UGz?v)UiP_L{5PoA9f=JImO zo+nbOy%aid1PU6h5I$~OwJj;ieL^3*TAPgaJd?(~-`N0FX_5-FsT0vvUBMgqntNlMYh0_vv|mv8)7D({KJ205D~rJXHal}jOa>0My+p34v)r=fW?NM+OH`kgLn`06HGJj8| zZ1zU(%LhSm7s_Uj_tQd&BbHuX;E8{f3{k;(&hK6yxq&Rn^4ye|`-}TR7Y(qQC>_#t z`0ymhJQEU%;KcDMW^I~L0QFAX&Adr@il8ESSlm-ofHaW>sfN5rcT*|yT}YC;F=o=# zTkMGwvR~ttmZYlN*=lMUp=!!zcvoU+KC!Y^4U7cGj@7>QqQnIza+6-JMu>;Rvk>yr z_-Q@1i{RkQ3yk!RT5#YFVFE*fCA|`pLi_{^M9Ip{`_llf=V!E<_&uZL;z8yucXHIr zoJd=#cM@s{!AUTh(DO6F`|*7;rJhC8-GSkG?T#jaU*h!}7}uts&O`XQmxuzTrmi&g z#nSPMzlx+oHL4TR9ZcEKglNbaLlf4pf3!&U5#lnRo}__n7%Jk^Pq^~*p4s*=;x|(E zR8=H%|6;}AF8fPc|0hzopZS&;5ud;@s)-H3B1;#otdemnX(z&3(S$xquVfr zXsG)}9>TuuzB9>1Mi#-s!?kkp#RxT>>1E!fei$}8f86@)I=&>VHy&9ad5|1H$}oQS z*sV_lQ%1`gWAKqQGvA^)AMVy3Ix4OW{Zy%0(#;k1HP|%JvTS;5IEIZ+lgoI3Wne(Y5iw}8L5`GoWR900?ddn2Y2}V?ku;OKX*CH88 zlo)Xo$i&oBpCT2^`%X~(^4V&Ep79u+=MF(~JA50KJfja6AHld!AgzA5O?wNDE57(` zoC{rxDmWXM`HvvY3CM%s)LILv%?6p)@GrTT5~K$}IXX!xd#^S3hC<0ifgg?}8~{Bt z{ka_d18+L|-`5q?W#Cz`s!LH!|6ugpJaI-_sZ@61Fw{C{#{0P?oP-3`g*j7l{$hwA zakRb)>)r+m;gSP?L~C)D#i_mfQI5EUuOUe|VV*JU0Rl|CM3RnLnsrdVJ$KOV^!zNN z(55&aOorS z>(8tHJB`g!<0p)Aohl&zxFV)%7TYa{jngq5)$t8;KY;mO!qs<6w}xnD4NuersD{qI zd~v&GwMQYIo5-|({Fl)8bNY88rLPi5Zoxc;F^dOLoal&m1(KT@QsgHbLvoFM(etFN z*DaIxlGDVI(CxK3OZfh5i2Q6v<%C&j(DpaV{N2UoR(-Jr4-4`p=DYK3HLM^c(u4T1BpA& z$DK@c{c*nLY~z@rXgN+RMdA=SUwn;IzXTGN>33GplPf{I3n@V$p$IkaTP{Gh-<#7`fdoYnHTZGW)J1gu)+ zO43ALdC4ic0nHxDR0~Kb(AdXM8=WonUCfK)R}P3W(UQ}-36at$xYaKK6mNYideU-a zD4ey(>#UP=a+#!9A4Lz4V9L1W*4?oF>zB($cg|UOU12c7YxIG8pq8EbO`o(uo^LTK z@uSp~(^Y^xqIHad4jeW|_j&B5<1FO*UWBcEMpy-V`6FK%yfn{bCvS~6#oSC&rjn3g z?%RK7iUrR+C8dwRaCzCqS!@8M)o}J-!i0{;Wu0{#v+` z4BL&L8zpV(QtpR?`hE|b;d$tr!6~;1&61^e!5ylL^zYlA4e#}4Dw!d)aozgZ*qIVC z*#Vm0tPp>7_7aBs>LLM2mqF(%RX?eOOyPfme8yH(1~ zOHH{2WBAFu(~~?Z3d${MPiYyvBr4Z!lb%wW&qcG@^mx>U_#q z#iB#n(IfMaCtMnq|I5}3-}S`#W}x*E9&b6B z8`T10)*mOhl9Fp5+z0JHCzX9z{zdK~xX`$lnf||5D9_S6PmamVs@h;A@2N`C{9R)p z>d*xNxl=!M^=LE-AXw4vJH16OjYm(V5``mWHQB~0xg-FT^*^nguSwRoC;8Lbx!<`& zrjjo`Aw9ViA3p}ShbUQ$k|EWMvvnh)M;P|=# zaedePN|H~IFzky_U0&1e{D1X0?bG&psG>yENLrCsshX#PNp)vNTD6^)w0*0G`a&wA zxtzNCN{9xXep=JbGV_Q(d5*^k+9!qppj$%ZF`mY^cOQ`#f%7Pw+u|iVl0R5)cqFi) z-9aop){~lIvx<`R0}%wCq2yVrob_u9-OybUY`YxGvC(~dAi|@tzNo z>V;XIFE{@#SYbR-i#Uir%{c$maag*katTd<7N^rnnJOwYtGRV%`E^wHFYhVpR zVDRunwV;E<`ucOBiLq&8ZBQ6O4%u?|>!)-Xq_o$2DP^E!YXlXXy+q!le3v}puW^tf zxpHLTQy5%ovAKyr&T! zQ4>9IB=G>qbuNF;i9$L^CJ0it+iyp4Os3qm?{MR5Y%uvgXUvq=^3;ACCS1%roGnKs~ zHow;$NyZ2;vf=`FgDM<$r)U+ohu?}dGZtN_PJ+~hg;N;eQ68b zI&0a@u0FvGN-{g%hQib|OZlBD(kPpJ=(y9u^R10jKn2l4lFf30Ufbto|N7sdy_f9f zJuB2p&y#|fG3u+P)N)fHN$hSXxaiyKnH!Q$aQx*TZxXW$)mn#~)h2A3k^6#Gb5FlJ zE709~{QRo`ZnF68U|i!yoUtiAF8~I->5@O-IEja^c6i`!3KGNEPNalWTq9Y9X2Jvu zip5QC{H(j{Lc2?T<~#=X1^!)ev@n2>FY@o@G~G# zdFAE5HmN>TEsbzmdks`E7>oQO?EA_B-$x)%haS{U_reHrajkA%8Q;X@kbwZPovDBA|Fq0!EnGk^ZuoTZhxO6d_5s}dZ6 zct^q4M;&pHW75OkSS%5mKl*BdGUG zbCY)XUXtw;aZZw=oHwN>L(ywYIGC1!n$vEPF_JH++l2fd?pfN^hylBgh0)xpViG`l z$k3s)tDjuST?Q*+R;6dvVjq`*U{w3nMzP(0SUsE5EewPt0?0Y)u7Y!Y-hv^LAaJ8p z6Oj@2HN~m;?+L~0jS5AD4=Qw@N^oGz^EqmM+n6I;waTtL`X4*%CR2~=+vruEsrU+B zN?Vstu1+zKU{xlqKplCZTgdx)wC*(Ut?~QGo2EQxbQ1*2+j)Z4)9IWX*4EDE?2Qgj zYAX7ZE|oiQ4ty9jSuWYS7J#nj)qe;&UbOcC7UnjWd|YW?kTubQH1u2b2ZQS}Ke_bu zsoovjRdB3*mi^kH+pt)@mW6<~M+d0JaASTB*{u_PgFF-{S&h`%`gMyT`(U@w@dwT7 zA7>l+BZMs?7L0Lr>o?8hDv50i`#1FmW_7jFkzRc1lDg8XvHeYXC%ggA8=eZ0Qe^d- zXzKJo!2sQ*<(br!SM-N!)#+5|T5PGODlUXv?dpPRU(;flAJm-`1tA`(#h zklCZki38G=YCJIVbE$tTxr;fD)3?0N70BP-0Af8_tp*Tc04H_ zgk6Gti!>pan*J$RlO(Il1-u$)$KF6io|kP^dU?m9a{8Ccv&Sl>76%u65+^HyERx(9 zbuU2Z^oiduO^r?tgjCmgfHR_x|p&qdOWA|3`9(1^u+a z@{t_`aB)YYEyP~yo(EzfdVbhkF~z@OD@DxQy1cHHo_p;P|JfpieRWYCQfhfdn26(*8;)!Nw|j*1bG5-0(#0VY zQCb1#lp$Drg8e=g3)qy!--^SE-pG#$JH1UQ6i*(~oWIcRhoB<}6-Ri1;WrWYvTqHU zFn||^1GCIr?M`HgonL>r|BRNg3XbD~bM0C+2jSTjR}OuTp5^Z+gOI3VEX?f+c(8D* z)&MZit8Mo}WKrN*V8Dl?3~KI=E1sDGIsHNkd3D8K_g@p4Fa0%+xQ@wwz3LE*ms9AR zRP~t?rEHU_8!xceKa-$fO@2_zpBQSuFyFlp%a{|1vK<*(o!1G2|3xr~7=MzMH|uO@ z4}Dvi2IR( zItQRtFytld#ndw$%aY=ib$9)tb0Ui9Laf?z-gwl}8R~8lO(+xpq;8_|4^n{|a8^mJ zemJ50hW)#=g$u~1;?wHKVkPD;U;fbRN6N89IfgyBzC@u^9}eclQ)mX*R>77(Id`LP zhiQH2@SLUX8xzWJ5+A6Iy}q``URUD+b&{y=Hf%m_yVC+d#g(gi`Fdmkb?(NV-L}`q zZ{-QGOLDux3bq8W3oxS2CV6S9f@mTEuV2*~GPcFdlr(EWw!^%yw^|F*?(l=37Vwuw z&#!$53>2sHGKX>FhEE4%i=|G>5G8_hoxbEc_^HZbjhjrfGChm49x4Wdj=zbF)<E9FrC2mv51bhZ;W)pV!!ewc3f&^$DeQ+|I`Be={jOg zRp(WWD46}XUZr~(8qvYx<{3HelNg@L6%2yy=-?xIi*{cGcSr>HJUoraFnDj{;_v@c zZeQ(QVGul~nf8kJEZ|}cYDWE^cL7L=X%fBBD0yntNtbo)lHBwt@b>s6MUDUtN-O)6 zi5_wu7EvRL;zp9EFCTk?r&8n@9_|W1nGeE_wi2p_;6)5+9&|5Z;-4ENi)_p zg`ClkRY_-Ql`pcDX7#H{*nPa(t{ujI%AGXxQ749hZC@lyWHgMoFkB`*+X#kH*2Xk0 zi`_PnIHx-;nI@~q@6k146=eb%3@Fr`E#kvRM%=iF;HLGU9K5BcUeAA`bL>G-X-{WrSW%gEl)Bh?Z2iH^Ud7;47oK`C)yI zw7&4|#_P!22vWi&S>Avz`|KU~ZTy1TPRsAA-GHTj5UC0siZ&FJ5Dj;pFp(0JO`pT_ zZOCFXw$MA^ke2cv`9=u6atb@izd#G%6if(+JBw+&A}KKLRlt?}S~KEb@973CzCk`& zegN%Y8FZKvlknSsLONQW6-ui#CxyltnvC|0SlE2>)m@?{%%RU1tiNhDv!T%q9KH&U4 zqWXP7mHGZ+=E3CrAC^5Mc2Kv9nYOV^!wquM&>s@KORNab#)uB`rb2EIOaOZV6KEK6 z2H?`G4%&f`aWYLN2ACJ+p0ytmEbcny-8P$~cuw-0Rr+lZ9REu^s@A)&d7nVgRlF3d z0r>uHGyr#*WIm>lQRfdYX-P9)r}$L(Jx2GeYzZ4yUb%tvD`@>%u|&W} z#Qq$&?sC$khPys1wS{o{zzK89OCp18F`QF@>|diqXa@;Vkmxpc5mo4D^GnPsfk~C& z6a)s+5P&Iv{ELe-lAO&pr8}9@B(h>aVtKW3q7^Tg{@HMUgw)oFM%Ux_-r?{45&rvN zvb->VhBpHbUbXMYpxI0KjaD8F&;AOaf__WenNr(5VCk=q`Hobr8Ld? zzfXPr>{nURSsBr-nfT2ue6fSJseIa$llyZxZHV1XOpJj%v41)+!H1x{uA=>8EN2j5RE9h~M;YX2xz5b3S|ZYg%bY zJ3Y)%k{bIw@LML|lt|Uo+W;HYkLvYASveXPwhcGyoz#*JLnw2Se%PjS%VD-=D^U(k zG7>a*pK*634UWI4w975z2uW{0+jF{OlZ1~sHCYgK+(&q=g~nu_X0A$n;MY;ens{2L z`}3ZpLBoG2)~8Q6FX;og+e8q6Z0!CdYRDT}yGPGMh)}G)b?P)&Z&$+xYv$b=*=%x~ zCu3oeeJfNU{*4H>`)$U%k)h`OcfS4`UEdA0twHRY>wtt60FcWW$FGE3F0K9!8= z2ymR@p3&c2!#tiwKm8pA!3H2+$8QXtfZ+@fv)1{7RiJ!l+s0{A|N8!b`sL99&2H|? zos-Q9<<^*U6XkAhBYN&_s@Ylxv*4NdK4h4L7fq+K%TK$XO>2MPv({N34VxFZS!cy% z-tGG5qLZ{L471bs^yA}BzHRh%%6qAobH5axs=xXz_pNLIJXGF`&(eCzK

4R;$rZ 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

j$8hX1nDcyb6mP09Ap`dusnfxTaq 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 N7ABX@mmA?8{~vA_K)V0{ literal 0 HcmV?d00001 diff --git a/ressources/administrator-icon.png b/ressources/administrator-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1c323211eaf9cf0e32b7f9c06c8dc0bb014992d6 GIT binary patch literal 25567 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�HM4(V3zE~k32`>t(*MY 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 literal 0 HcmV?d00001 diff --git a/ressources/chart-icon.png b/ressources/chart-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3e7b386528e853ad9165f43ca30d800831c5a829 GIT binary patch literal 23247 zcmXt9WmpvN*Pbm{mROLMT106CLAn+cL6B}G7Libpkj~vD1Pf5QWCbY&Ndcvn5(NoC zN$Hl(C3jzb|Lb}`&CHkc%!%hd=eh5hXGR9v^oWZH008K3>)bQ}0MPj@2!KQf zIRn7ml-oBo%mT;O8>zE+I+7(rkK-;UF(ZUyUMECVLg9D%8D9=lF&_jC%Q5J&tD_#4ta$L27%NFs-$`}GG&+829-_41-BuXlNSG=A9lv|;+k zeB#ecL3+sahx(5nKYj=~K3&BcWPhk3h?*Dc7P5Z)O<$yI{=r147>qXmFz_rN0kB@p zu@0U%<^F92-SP7n;5g=5-H6vZ(G3b&VBZ&_xjuj$|C?uVT(fpxS+V<(Yaesvwl=N3 z*#4R2m25K*0URazrSvzORV}`3+Rr+P2LLWPmB05%N$Sf5W`JmV#wen6jbV#}WpU0u z^W5|GoCM8APk!n1m>-P#D(8@$f7w&4qOBIOLje|{zl8Z_F7|1lYxj2*h?o|)tHRe! zj1-J>JMXf-I$x_jf~AQe%P!1fUh5jm-(KD)2Gjs__8C2+niwO##n2Jgj|RQN^U9im z-tC#da2Md_$LVG>e1v+EMp~=3u#)HHT|-7@>h2Ay{iXmrl)ph z+kY1lK+APc+A)JtrFd z4`mtDKi(sNYwdpjRKankeeA`xn?w0jw~&0g*c*iA>n!YoB`)d%{sRT8+VR;Dd5;UT zX18;0AHRs+-&x}}wqN|Q^9LDIBjTQ9SThQ9@7K4DOPm*yZ4~Pi^%Skq@u#zXgAFc=Z8c;2${?7}Ip=e&|c$@sR%m$HXN z8x|-pMyW`N9WUwHD?|5PF4%L$QdtPA;dmL-Mu|8gD9ZTO8m=NjBJ-{=hdaCIHjY^K z{?SDa9aexP_w)Aa+-n*3%FfW2ymFTZYL;}d(_7vOfg|ZQLSm{Gfd&($IDu;?>ch`v ze*h?Puu&}8Pv!%l;Y@A$iUZW99VZ8dEQ*bM2~&0-9l4XUd8NYrHIo!7@cln=Gd)%y z0aZq}1W|7Yvo!nv-a=cIik~3)s*=Mu$$19XF6NV1cypk;Z&m4~E>i)oW(eS?Qcnqx z$X|2cTFRO791e?&->ugLZeN1oU(KMWp=@W>3&qj<&-l!!lSP5LozeW=jY7%&L0ru4 z1!3~24?Ct0-&VfVDB!hmss+ifZD5zxoe^NQmDV@g0IV%ajxw$KM5GVwL3Bz+INT0( z3yxkkj@METJNM4gv+-Fz46OEKS_Nlu9LxKdJkz>#f5MkK#Q+Ihov;Uww4|c9(`7t6 z-$LX%kfy<*mnvHCrTDk<2*RPrQtT%gNFT zP``Od!6bQTU@7!wZvkF$o4Vz=rSNE4aehOC2t4L4!iC27~w0O+7m&A>}8H zZB4V(SwSgNZ87~PxB)#xnVnl(vr;JrnAXe8cq1+1j&{TCk%p!ZF*&8g_%NULa2eWmBepuo!eh#H%G$y z`I>G#mkinTYi!Kw-B}$P_--<4Uio2L<}V7F^#THI^%D%DYe9D)9-uI7&psy>M1ess z1gz?Vqg~jb77DrU1Q{h7WqKfL^mxr)F0OC6ske8k!AH`4DhwEtTw+yiD%whU^3C38 zCB0}ZAm}oZ{f8q2BL~*KDD#yua(8N_LDqsqgerY@~%cR$DD^!4q?2bo?6KRMqq^vPpdT6?8U z`rmNCQBd(l4zP3K*|U5y8*&jyRuFbB8%J zs&RErmHVY~RJgz%p9*&jBe#=>1?(H+`l!rA!ndvPxpHP|y?JuT2e;7uL2{uAVZDA` z3gAroh8v^A6`9$_Lx$E9<;vSecAk#6a`R3@T|JNg%q7>TarKTjX;<&U%G3_lXpz6< zVeP(?=}DW8c2$!wppQik0(LP~l7d6PL5Ka`EdKZ(gU+o{KTN?+(sKRPi?Sm%`;F6K zzFvuh(5atMxw|_tL5HJRC!ZyhHJ6*lzOWY@?$~|l%Gl3=cw5k`iDE4noiAeKhpR0foE7St^T$vw}wH*Zux6y%G

HX>PvC6cE{pbmESTL%m+g=4_ zbObkZ#*1)a1VOaCW5sco9)#n+#?5kO-{tXWfgD<9eX*UoSUX)Elp{t32grxl;9jZ%VeY7(lKop5z!}?p|NMoH|=_ zDxX-B&n{v?vQ;T`;W97aWqftb`m#mBwoxtvT#5@WLvwtviS%L3gSzv!d|DsR4lPR2 zh2ozF)x#E2pB_C}Kz=6C3uCo6_bW;~kM8MjBAtF9X2EzG_@O?$612!(cNACu8&&QY zLTJ#1;GYM!%?Yb#HV)T$YpZlgN>rHh$6sNt00Ff8cTwd53yq8x1SpttJq?Vny3IiK zP#;_)PdX;SoY@~~0HU2jMhBi>SJ&-VYpo1V+VYOu`PH~5yIGs_f)4fH7cb}$%*rlR zfb&PEd7Qfuvl&pqZ7>IPYYZ$aJG7?D!6Up{Yb*P^&@_B;ZM=%2ll!(=lUG~g{lmG` zES?96ACsE$$|J6$h`lc_D)WA7+!lOCM-Mk^XLJ~C+J2ZcwX!0yX=?rTZ8MnnMvGJ1 zw`N+=Hz$=``{bL$F`W*un?BYKR`_CjTxuJ`Zq&_4Ab{@JUgS|;z25@&HLDcQCefNH zog)dcH#-4xlGr4v^WJk^_3@+s`D;^brNP0toE3QlXPo}XD8T6It3eQ7Vn~`8FUuTh zW817-7+cY_OWyey5u#L;s;-+MA8uWGy~7!H>&CN|3xkyrB^sDfJ__SYW&)~zCoj5c z?$q}A6{kWFQnK-F&7e#uhk5wgn%Lky$!F(_U!aDcVz(7dUG8gIBw&P%L+tM+ z=u(5bVq2u&>e^V`MTsxs@1J2xkLJVtKI`szAHGO#u z?B?smg<*(>4db*L$p89X5EvV}9i-rM*Ty%g$#&lgPUaA^ zF3*h>$;@#Hu7{(0PS2WNEGb_SgVQPtwpL)9y)|(9sJpk)aq=(vC5T-ukcH|7D{I%N zdYll~RVEd(cnzQ7iaBzB0X!J^2c+iY{n1HCBC|=HdsVq#_dYDx#ku@=I&8taUK5St zyLR(?!G-4iV`=Kk?XU6H3zhw@KR#IeZ5z75~5fi$R=_8JzO%W1c!dp6a*XeEj>%+Dr3AERa&L) zGI@d#M{qg2(QVK%Ag?|Q`mkrv^5#)Y*G8%;SvxKVS8M56-8cU6(Dl;khpwDEavn#b zIFpqZ-w|CH={J8Z7@(p#=(qDXE>ZE|>J|>_8=|$+OcUslU9_)KBGm~GF6LIAI2H0` z4x9}AW2^i77D>NXe2a7?RbLL!dCo*lcL9PI44|$Hiu5$!Ki`mbMN^^R)q|=Im5V9zEnjHadsN7p35MoJ z`c8vG+It9#n--X%lhuJL7g$`Ju8V>g>Jo}^o|eep7IsXJyC(wQ($X3Uptfk(O*s|k zx*J}-Ra1wpEqQ-ABlqHF>N;88Qnsyvxe!*E;|RVfg8kv~@sg7a1lU>;XX6n={qv~3 zWQ8C5L%o~@LNgT}tDMElcQ^t^4b#ZFC*O_I3^i~srjgUhck@rK2mO+bHld_n-5;hp zx&C;RMmd0wZtRSom-1mph?xPf*+Wln_<=15*SQ)V#g=I&4e{%ZX2)f0C#sx%iw!^Q$|Pc9DJ?>Y;QNpT_U6?J?g7{n*84Dd!nt zrf%Rt$#Z}yb!t{*EppSBL<;&~#W#|L~sKP&GIlb{)i%O zSG`Q<>yEvqM&y-#f09_(gA*C#!QvhxPFI|QuDr{QL$EB+lV@KHPZ)YmG92=M+8K(w z2pSYr`emX$Za`Fa%lxH)Wq2JnbwIk9>Dplbx{vXSl60E;DETvyXLj3bKk|DD>jN0{ zdG`%#JSXGf(){(1qJI6KCv1&d42Q8^-?9-oND zGU(ThmHoI-41?u}8F>MR<5PX5g{0H>rkQ!)WD4&@7+cyp34L}S2h|^J1oU}_OjVo( z^_A`Hbn|VqkVR=cepy{p=J?NN`m*;@(eZ5vovlkrb~d}{qpV72SgR|3e7yeQPZeST zI%HB&F?{wx+O>dBVXXIV{iJ2w$%C@XQoJ-&S*#EU0DE#W>ImHIoJu}BX?smExGJKIt6(5sh=H--3Xt%t)#UXh^ZWxzBibhd5bSKztk!Sb%O5!$!5mFnkrD4I1aySzoB=F;q1(Vly%V4hQsn*dQ4z zF7ZcwjcmtXZ}68%*xxRuz{Z!ilWgx!c6%0mA|WRuc0LOOqzyQx(&eX_p-p&9VJ@riS*|E5PBW-Yo+xiapr4wYmF}c(i2K*?WY@m)>tvYbg_0;0J?f!F zn6?NQ1Sd&xIH;=LCMkcm>Mt#z{h1Sxw|=M`KvrpJdXhibw>vr2#qYwmaVF6>*yRXW zqfTt4GeTU`)!ldPX1XKiiPfCBdGp_hwY5fTxua)B`8;x~EqY?59q`Bk@T4gp$-T8d z<8d^HgL;x<-LZ=SyKV9Tr( zr-Orf5r^F17(P1g>m$4u9}H;vMV=k*do*ZFJmm{LmKDaaK!K*6of0Qp!EvP>WoUKM z#S_V+3SO0~L4~MOlOOO-A<+$1xYzSf4*n>bz#aTa$dGL%Z*i#`^2G=Z^a1>r>&m?% z3&TFo+Y!D^Fs%h83nK%E&YQ%`0dz!f5Fz^JGv%-m#f@KiLJgEQ(pb>Fj10`&)BU(F z#4{RE(U0+*@CuK@(ytCMIuPCX) z{rL8HYPVq!|48f=>oQCI%@Uj!5_Omd?PXI0siJ`Kn@zhL$Q#2R6E|prY3r_ktdywBk7KQz zpGmL>2LrJe+)o7>p!H=o^L0O4tBtgfw;X=!M zr&ZGDg?vX?>_s7Gn6qtwVikDyD$~;(n8ruM?laBM{F$q&X%LJ=>nW zJ>|#GT!>7Fa`VBzm%-E5C?0*`b6J^$PF7Wn+p5J#2qs5++lRkVJst{Y08x<FZFm+qrQIVBL?SaCb;%vl{WL9JV*Az^$y|WAEj%`@zLAY5h zDvdmAxl9CNdEr^F6vd=yr8HNZ+7XptuwaD9^yR<`U@{gxX{*i1ZBOLk``YOY`j{#i zGoc(X{p79)@G|n{WoF>;TO}v$vV{1emh?oE{}_FLp(UT|L@l$w@kx$YAOroGLq77; zPNK;#`jGDPd`aBdAXTsI|s}k&59XX31puN{}QQ?)KX)41XuP)Wd&f z3cvih?ZS?nrkw%i;}mh5dz5Ea67UbefW5uk<8&u#vO)*_vOM6d|0Qnh^!I^h=(wHe z=*n5PLo@f?`L@$0-%2wgQB_Tq!GvER; z)81*1XD)JR!XYOgSK;LC&Sbb1Lpjnx{r!jYLeeyJy7a)5Ynswiw!welJY%`6KZ!W$P#rJ>?pPV@$16V+-W|*{cM*@zX@~e;)*zC;0_4qa*5wE=`Cv! z4mC1Vnf^pckT-*U$8$IE0+V7U%?fGT)jUgqvF= zsEQGX0~^)kAyOQ;`Yx%7oNG%;9I_tb*Gp|_$7?;dbNKj6SpXAdi0Q-OTDu%O?aZ$) z0m>63am~#mYEt#2bu1-dW^Gi)^`$)%sqbUok4Eg*d#z&CEV@dFGGCu$cL$Asf8de-b*?0Io-aWBkpG407ic|u`kYYSm8C)rcR{K44>zF z_7(YLlRbvjHIwfJYY{iT=v%wNjgByuEY?`VcvQmNL9@*D%Vl!3ZJ(lVAoO!asy z-sz!T#*-X7H_-(eK{^0jR>uGb7Y)mI`U3^@S zJ!uTRDx`lvb3hKfz=$=|z4m)ZG%f8mvm*eC*4D=Neo8C{XM1WGe~DvVZjFP<;0}jF z_*h_Di`31z10R()fIe00c(q zw%BRBd$&be(^&81_(+_y9#j|Yf?x)3U6~7L%E*)2%$cBPQ?r{5vK`yx`Wwb`xAgHd zNo09XTbjb&YCIB9w4X8mg*}K{@H<(Q3`;L%G<%0>1yE^*`CG1KU5JR!opj16JpcnZ z=mAxEwg2$sCUyZ;w>@-J9+?hW<=U=twLP1N7v!ba*;@=-D!na}y-&8iQs{rS=C(K< zUHUi(LVxsb1iM%4iAE*la=tc!CAwNq?I1lIepT1ZRYhnj(*Nn}zPF3~Y~)0>761Ha z^D4yuILAKtM?IEZ$+`4sLwi^QeEWUSREWzH)zZD&g#hiRu-!Q)%H zeIn{{WYZA}2pucb(LWf65L~@WPMpnHo-A1|!MX0-;I_cseVul`tI@C3XBB5ui>*0yWV%Aizg@P!`ba_{ zV1^DpiS78O4h+fvCwK5fi7#~4c-Ipj#tX@B z^Pk8NET_V~y4M5HK66UvDpY3nl&y80_n!cAu-xT@k&K=shh7Yk|sG7{0$SQaHR=ZT}gHx=cx)Tc9b(2bYTB@TgzNmCRC zblL;*fMv^NufFr#7%Mrzp#$`n9buvMr zXYrB6LjR3VeS5?5UwS^5xCLEo_`C{{zu+OXDq2%<8vShv643Lr(-M&VY*R<>4Le;q9L(iXAyB8&u~iA9wYJ8+e-w`-MP* z3Obnsp}!$4Va)d~asu$=1=h{ri@U@Lfr6Ffc7z$4(fuRh@*0B?SQx8@^TDZKYUKp< z(&XG2d^bm#Q<{&cwhZG&hwt@c7i!fmbR!wrfsMRWl_i^Hfao_Ud~w~Dx^rxjS(Q8h z$8kUy>mU7@5{@=&iK2A`{smZeAYw1+o8BmScXQ$kysD-9-j@=)WBNIICN*8K!XJ3I--n56qdr`#7)%&m8Y6#-k=hKqfiq+S z-<$C)`54()|3A@QwU9sg>4M>DjFlVg8yLq|k`c(=zc)2zJlxWu=i)HcqCY)ONnr!v zw;xdo6GhXOU%0uG(*xvw({KnA%1cn`gGRRYK~H%;4m!yY`M@mf^yz^;W+#!kp`~aw z)x!xPvh>g%#!=#Q=HK1TdaO-Lp+OylfqN3%X|R^ac9yV)1^5yDVgk|cxis~R%T^pq z7^SSoPko%e>0)4@{IUlYxH}g}A^aXq4eSD#cqq=1ijM0V;*pSH#IRjZhXW8qIl*`5 z9O}(=XwCt|P%rh99uTHC33+3;M&0y;(l8JFJkn5yW&**-o+VbWgkCzqS3Q)qg5qj? zI{+38${!GNfr)n9QhaHJFVL2hx0s&D;{xfRcOV#3fDl63@aoRqj8PZ2{r9;;qQK*5 z4#}YmekHqB{D=7;NFVq&;l}uqQ;qg+O`|B?(dg1P9T9raY(dBR4k5@-5_hs$1>>-H z>7kR&N>Wl%$S8LuRC(fDIhaSsj7^Lv2=ra~N$tfGMqX+Mc{I&2gjDo9YR5g{0}{11 zRmf;nj^~O%NwF>61{ie*PmL^zR#PpD%0999m3Q$MNVp7wGEe;pN~f@Pse>%(HELs$nYdGLah?8oICqUV1~5=NS>HT|-Rw=|ocj zEg+q8W-0&ABKZhG<4Wf?%13d1T4-0-c|0P^9VHuoTH!Yi8vlpn?$ka3J{%Z8LxDH9 zj`SYbcLtlWQVF_cP(CImFH1geL-_W7QYaz9;qRZ)gwR;yKV0v~F8+YWcrTWqYbZy5 zLW87GC@=19hMrw){Sxi^Y4h)@0WO*OFc_EfAxARSsK$rX-62pv)+|T za5`t;961PUfP2iaRfZVE7W_=3*<2r`?TqJX8I}y*T_p`g;yEAy;Wj!f1R29?xfgk( zQ%(RVVtNWx(BQ=Quc=YY=~mV-|E1Z;c|)p%5FscKbPbpsasm;Dp~M_UpF31?7rb`n zZ!7pt1BXmnY%m;h_}pk?DdpirT?bALEIr>P;&t$s>6kVSSOyWF8|S58cs(M75KD#& zx@D4Md?)GPr}HLNU>>h_3``f*pZ!9L>vsTS3*t10VinjY359(r!BJDubE`m)_tt5Z zYdo0lgMX#T+J z!SkPp-)Q1{feLW_@B#Y)n(!SD(gvRR;Le6UiRcgoug;;;4cXojqI}bVL!K2Nuzq+A z21Edu5dx>zv@0`WUlsuBpc zVtCfWAXYwxg&Wvqt1arfahk+J;?OGzJKl28^jkU*;o+LWSI%zpptab0nBk_{_vQ8h zyf`Vk?|9tsA^`kI87)XOU^uUMa;j09zbx0|i)e0(1mQKSl9C7i1M6LG7I;ckU^Iz z@8Js~7SHW>ZuIt!ALLvEj23uRFw)$LO^R$lQgZJ3)=8Are}Qi%j;WP%TjQA+rHXMs zbglwhyp!Fp1D>9qrUA1c4P`Ly+Gpl9^N4l5zkZ-f7>+&-R0s6ejK+i8P4VWhaqZG& zKha&f#$w!exPb%{*}c!RR(O06>cJogpX)GFf~LN}RDu)x`V-g*T}GyZ+j*GZVWhs+ z3_*Ziz%FF(#wduW?!h4dCK5%GK<*|0?vNf`xRiPdJiOxABPymP0ZJ>eYqs(!=tAhW zAm9c92rBexhsI%Qq&ro)AJ?FyLkTa<(o*+%rB%fH9+|-E{)TG6cB&a z=o3@VQX;XZUejwfv;?fs}RQjC~aQ2p!#$;a%5>rU_c4^BYd!R9zx3{h(GUoyUoH#PbrjdWAj+ z_+kbmslsO4P-j$vc0`=dF%BsH+7Fdh zAjxE}6FvZZPTiisMhvDvkaz3L*W}|NHr-8k(ZF)J7Pii7`=%x{O1U`Vwo*keqpSPT zrdP4Hq*)9v-Ag<==xbtm1Y=c46zjaPMH6=#Hzl4E7~lL;kIYi?Gw}j99sfZ-pau** zxgSrx<2#IGy=#L6p2GoaT^BHO!C}~2&zMO`o2T7JZ_8I|nj?5N>$OGyCY^JN-TEb! z5&gG*1jH_Z=T-YzQsGMu#GqOGHg(>A22>H2&2MA@948PPbREDPE~X@?7QT4`V=g%y zvaWdOa)Nx?!vgp3d%c(-9D=nCPG+5^)wcqfJ~(9yY{LaL-}>}-a-N`K5j?9;Hyd}O zCTL$Qz=;OPg97EGMu#RT;5+ME(0K+}&#FolbqJ)*v3J8C*AtZUHo^{@=%KZysI=0w zI~L9*IH=^CE)hDh{yFnd3*v$JZ{aoQo(1Il36QXKFX9$L0qqrn@5*V;;s;JIvjB&h zgaKV*dM2Q?EOD-cf!pcSLnqxUg8ijd_b{(nQ?E?lP?bdRWmFEBspq)L-S5jl*_v z0R96#BkkwqN0VUUc&>8U{7Nc32vgp(VlvZ}x$Ot)Ak(BXa~#ocPjO{k zI6E?mPjt<8YO5<%8isrQ0u;tM!U6Pq5p443xTK0zLyCQ+R`!<~N)KgYWK&rfq4T~} z(0fdb3M(Sk_ye*sQf%w#X~NlN+9A0Fjl8UIZ>#&>PN(F=>xmCU^>LL--u@Vkb}PW+ zr0QXdH-OSx;l{MGHh1&;O+-9-G+bxOEynUI3bu8oHxbg>OPX+`T-`0we8UEB&}7kM z9D$aJV=V|ZXPoa`f?sR*jdFtL?P2~Q!JZjX)L>s^@8=i7!0$->0|by#EuG*Ap8nAF z6G;fZ>;x5b|J&4A4?U)27#kMmSPlme0r4f%P;D1 zifV1-ynrrKGqZgjCIuab;17*Mo;n^z19)LJTy3fiY9zQ*8^W5xB?d3fCzPO9pnH{z z(FqvCm1l0k^AoZl90cEec-pMb1H%my(LXteDNMT{ERVuv?lcIRNQcU10%r9#=tiDT z#fYknFXjHrewm~Ug(6zODpG`?-hDp0abfscc1Q@po3#V+oW*}F^Kp;&32?-rRK?)@=+{e<(tLhdijjt z_Gq(47h6=I=LU~Pha{~9VK=qi;eQ~i+k@C?_bka930=!kK55?sf8YR=!;fCna*A1N z0$wDex-vNq;dZ99o6^H)7b0maPu0r)W#*ZUy$p6&v>%gh!^K>SD2NZ`jEm3lV1PdV z>UHncf3O;Agm*H}dmC1n&-H^RCwxb2%bQ615-}+75~GIuDg`hO!@jdZfyyM4 zi1Y0PYNlGQx|3sGaan|5g4L^#Tu7#kSXiJD!FF|%K(CMMPZ`e_m^Hy zjy>|}{StaggWqB3gbq+}N}eT@IOGaQu>iX6FN6}8JBN2|!Dn`itW)zt`aA)G1!(SQ zsD6-jCg_7)qdZBj3$C^Z!Y7uUV;U;~&Wqh@X?;sQEhoI`PYHb}B^YV|fPW|hTGKhGhlF>TmNexrXGwz6Bh0lx7pKl%-)gk=ZOF!TG~b8Am;ZJZ z!t}bBYwygAus{(%!H5;={)%VkFx2ukb8{OHWUmRA;B?HpD#-0&PaBr{XlbMC7I7!4 z3GC_tFSg-8VjWnvB;2+EmbE1x`dnpUhnHSgM_*WZ z!bqT$0l{BpzS^z+QjMN4PI{tco0tS^zXr(-{`TIf!w>pYl`EweN05cWvuu6-Q?u>( z|5?CFVq7iIXfUMqmBD4gp%zM+rvs!gx?49%ZVovtU_NJ|+)%QRp@E)~-g)Zj=Y4H{ zjVWBBP2vu|s^VBSal-F#+8 zahuVB1%MsA{qwHs$&_U0C*YK@-YKosr{La0<7hO;_QPrNzivOx{+rS+0d zPUY;M<6-;cHp=YVdbcfva=ojsqdjG4Q4+_Q00n&goL~UH=BBOWpANFB0?B`5pB z4YGXa7F$`aSp}}CF#0+?NIU!_n))V%CwZwrW6}vxRQW9*>vO~Xgb$^7-h%~s2^w88cA6$$F1O#Ex*z z(wWd~04T~F-zZ1hhOJ7unpMkiLFazY$9|_c`)p|`T=m^ zpB76_(Znv1>-~jIslAX zl+VK_u;>%u!prE7J1bq!>475diK93=AT$T0vD%1in_1nsNs25JqZ31IP^$;ITor3z zhu%DuQyz?@`9QmY^=R>{h@sTIANZQ%`AZ*pb#@-LB7HJA(#N=b^r`;qr>8aNDL2ET zZ@c>#&HGfgyD*yraI73V6&=2DlTrtV3Y!j<;4oFsV$LEIHaza6q>1gX#>HUX%C~bQFXZCUd&pOsV-kzJJ_z`3eAap&mQ&j)-V*OO%Zf3FnKR zWoHJW_7XVp=F9|X0JoXLp-z7=vG1*5t}I|>r)z<#W-<=pgBx*39m|YNV%7NJgpJXd zPp@Q83{!qTm3IOu^AEY=GKH?tF4s&NpNh$$>ms-UH)MEV--$Fu!7GrU?h%?avzBgp zAW%`rjgwJj8H5js%YrMv`U&s) zK9!T-WnlWr{FpLkikdg-1>~t{-$yIZ_+6cMkVbXyrqj7>W+Ksr)>Y;}J}0A!)0`QkiFTB%HVr&!SPnb<6BbGqtbmJhyxGaCGH;AODy3E%lqAwP|lvGCIqDDLv2 z;mC)dcNorhmmwHDu}dpl4y9@xQP&Woc%i(Cz|9RaQ|huya^KO?V4N|nD>HkQ^S3yf z1nwA{;08_ijxuBMN^2be9wJ;IPQ3Z%fNUUF#m-$Q^m$y&Pmb_o_nL(EFq>WP>(vdM zDhbOwR!=giX4YO;ymUbJ@HBj%j+>6eQv)8HdtvtuJ#(@eq0$LIb3Marg60hpvhj+e zoE#T8zbEZg56+R^n>8<%=bLv)0r0GV-S>Xbu7#DZXK$oFWLJ~ed-HaZR<3oKB%2m} z73Bod%C}~3>~2QhsGUTv??^A&{F-*6j3|)-RCDs5Q&jMOt)cv1vMS#h|5kk_z?jN}bApMn z;Wz7zVl!aB`+1v}e5!}BSCO{8U%f$fwKXM1Fw(&bSE}z$f?=@*U6MI^nw0JEq=64( z1r3vgk|KZV9cKXW9@77b0L&JoPzqak>Y3?MBr_+rmc7Cl9J90y{&wd zCFZL8lBe$ye*(B4hVtU^-ma^UrSu zRds6M)6KNw`lb1A8ONZgvzOL5xp-0TwAeDEq@C^{#OKR_RzV$4fLRq|Ac1Y<4KAfd zg8y-E$nWexG;#jtmUlS`FG*aXsrnmwl?$DS=N_N3=T0J#o5Q_s6*Q_Rf&n7j^E1K2 z4ZipO`P8dY^Hx^w$LC@x4%Y(&th$%DF6jRNgHLFNPve>4(5FFjqUvg?SI#U`GViOX z{v;2pmT8_`%pDU?Dt;*Qc7gh+!BR-0+4S?E10_c7F$6@S4FsW!NZK{n2@3h}UDY&6lm?D0f76UpoaV<1N|(T6ZJ#JtfpYOe`mJIByGlv;rrVw=}_`_ zlLXSSJvDuXA!~ihC-jpI8Vn8~s`a(tmb8aK2Bz25;$)0M7<7?f@8qd*!{YLtaEk-= zrug@|#lch$SEXSWZ14F#PH{P!c{^nh3WXm;pssRoXOln*UVT%<4zU>i@hOpK`{ZWw z$llKotRO6;5Ucngc8PX6iLVMk($(<+GN8~&MWYPRA=RDSy-EPDsalQRxKqPhiyNtoE1E;08^7r~>A>eQzoEM~R!bX^gx0-6ULNPAdm@F8JK8~1Fs{Tv& ze*yFv3+CBGX99pcz6L8hJI1B}UkC&-0s$cCsbe?%1suHhVYoPG_}E{4bZVxae=G%M zwJH`M_wber0y)VH!2SR`KOPR$C}Wl^KzXcL>?2hmker@S`NQ(Y>itofNdcwQ_J3sF z0t^8P%X^{TANTHgm+}XCes^s^fhjn$j241hv^MS`C+GxVqZ=E`oS=66O3hvjUETEolp7eTig;P)&6eP0% zo{u*?CJT^{_DPD|>y^`(wWW zViJpJ?_UoEmZFSqQ4rV(_Dn%>h|gmI+yRK_zbZn|-eklAgyR$-plVB$sFdD2XL=mb z+sSzg+50Q=Kr{fD_%A?rot#!8`#&!!Kfm6y^(Ak=Z0pMoLAR_{s{G@i2vQsX7&`QR zdUwwXHoY7hAjbq?zW~Y~hzZET6wu_=J)mNY0;tlmR{p?o#^yvR=znD1lmH--$Gdc1AzPON+qwp7ZV_v1gZd`Fc8oIfbyK` z0ffx%(>&o2z4|@hev>#Gn4+PrVl{UYfmtTYZ15QcI z@i*&O|x>?cbxBV6H`p+g^`H~6$&F^=~~PQO4*fD8uiHEB(O$m58){#ib_$X?I1 z7niPyOa0~af;#_Dy-DbQ()!Yrg?oSb9`dT*U*YxVOaTx7c>rKpk3MnY#804zQd9t7 z^30GSYw5Ly@KU05Ev)OlAu3<3O0OJPar^0C_@@yKm&tPwMS2 z(tH3D#nh!GQvQ&7l)Z9_9yCy9f$6{Ux|9Jx*m)=S=JHSvj2taWp6)EIq`MW+5-N&)~(s41`v+;0g4KmhgZVg3Mq z1D2sv(D=N`LsE?Un>zR(4EUl`Q>w!(EFRznS}o9$`jHQwtgT@j`0T&^P*$=&OY$X zA_e^Dq@)1Agqi}(7w`z%kL?f07zA_=#N;8xd5|RG`M8R&Op8PP74?*&_s9EL(tn{` zRaw$lf0*KXN{{V-ker059=cufc!6j7nMlb2fC(QORD}wA%Yy471ampT`In0T0o6^L z0zsi4n33Y!358RB;W(x8>+)sM`|HZX$EoN)E*pjMdSzj!pEUd@1pA<2Llo`TNb}V_ zUf`L2CQ=>%fcyc%IKSOO9|V-M1vw~qca#DI4Dx09@M1Foh2rbVF;#x~I4<>fvX*!6 zuPsAYo}~Otc<=7*li*B04;0+%0^WZ|Y`g!PCr_5l?#EIV0Kg>7AAq+xjalI3VGlYX z2^?qXMewy-Yj+V0QoU<0ZBG zv6Kw}FbRzhz(a#+KmZ+wJp^6eLOnF4GQ?DTWqMrYcdyA*`8D@aaOYphy#($bQ9m{(3n{90+8SmFgSpfi(XWV7P!u$bY!-Fyi$V-fSH*KicVL*`d zK}J#ktQB8%-cFDX0q_mO+5upkm&DcjGa8cT+G(Bq2&4maaUPLixkamviqg;j5mS6)!j0~g&0YGIZc{sX>Ly;2l z5(l!zJy*fXkI!Z8aMYRyD(9bUyQ8svqKod6BmI!_)5N-OoIF`_kH1RF5&)RElZF}~ zVq_rFC%|u1;aC(NLJA-VyDpOMYb34WtMX-`{7&|Gj=!k#qViD*xE()+vjrlkD%7*qU^AwMCuALjwY8qn~cEta+L>uqgIpaP^K0Dws(2pE_E z@{B=tjM)G-75H&6A66tQAjIgpNH9pD{E>ML%MZO?+E3N{OV{Gnc=)qWP3;ZPe<`oL zI7q$%mEUe|sT&YSFbG7M13D7`&~^M;!3l`-;Pe7KKqE7NkXYBp?e(LMORfBJ8)EhT zGUZn&zjEAOrvErENG1bb)u+Og-)?fL8xU8NAYdOTf__ZcfEzTFlS~4^JWx0c3oa=Y zKaf@;<=3@Md3{71jC+3tINi{C=jrBBiMid4*X%5 z^!~D$kd+V;emX{aAgzeXuRLea_Dp(zyjDL*lphb*=_tP(%tM4pJnA4HC*pMB*D6r? znN%bIFi{Q>+IOU(`Wg^ml9Skg977NQg0Kj}FmQ-aa^)py(qn`aCslqqe=(F_d5xs} zs!w%0*@7XwfgYcihnRy#`R$>;$11?vuak-e048A|0PeA@?Ann5sb>$c01OCzra-Vy z(WeOO(i8Oh&Sf!`UsG4nlplNaQJT;$h4L$Ve}I7U2N(nj^08`aDq8uOR5SoEaU%wo z0RGm1eP@!w^Ry6OK!7#?#a*=MT)| z*9GcmlwTLiuTXv#-n-yyCr*@YgrBKYJOD7ka|hUQPF7g%?dRzzRM_(c;Jk|ALhn2- zSALio`UYY%fsh_kl~$I@Z!$b7-=`RQ8*l{5i+9NBswKPed0r0!7dy6}Dt}qV_Q#bD z0RUY1RAPRdQ_y&=va9?AC?977sv*O`Lrnk#iJ3r5#aE@3RQaXeUYAe1W`{k&`aYL`6L)>d{?decaU0stm>Q4#wF6-tXgEaJrvXv_e4SW!6xP!lz% z0)n`1KyCg4D84d}>Nus-FO1^ry!f(-g+29x?Jom>H0-Af?2&_fyfS!&mi6dk$B&oQ zVjfvYhXVj6?($-c4ftOo_U>462=X-d7^Er1fsq0?e;5$R5|zPSoqknV`a09SC-Nt0f33S&?x(( z&GK$m!v=)&Sn)MZLZyEImn-iB2z6kIWCVsvuREtqE0*#{*z~&IKGg2l^xn#zU)pCP zf83Ms`tX9Eew&!RfB$1APV9mXDjgO8n7GbCM%xy6H>?Tvv83KTp!iZ?5x!QqUP=#( z3(zuyluEBlH=+Ehv_v+)q4Mi&e4HlNFH?FZ0ma6>zbmrYAk-~86REvV6CQcAgE;$i z(xCx>i)<3uH?EsdY zlvA_vu5NW6*(~tt=lj^4a4G+z9hCCR(kTFd$uAv~UMd4k9T1@NUYV#4X}GU} zjqg9&fhoT%ody87{1S~4gaH8)RZx-aM1(j%fX`tuaT03sq*Z)XdR*nlipyFVs_-ap zSkEuS+5;$icDa|=t?Cn?`}|t*J{LXG)>a?=hv-<+=>UMqFQw=~Cb=->1rYX?imw9; z|6)Hq0t~qKn+rZBQeIioD884LQ2C?s>z3o<`Q$bF_U*REMD-<+P6+^9TsH6|NWOv4^#SBGl@CE?35xOv7=VGB$0T+jp!gBjMfLjHJgRdh z-g}f+27&;HD0*oj;71YqD}X{6-S^wmMxW85M~)rqaAW&%q*DU`6YLw{XGS}=<(JM#0rL%vHJ&mJK$Zx;^EFB||>ysFQplC4yj7&ZD zalt@NBOz(_KK=@iqQ~c3+}jKGy>wpL!>eQXnY2PK_vlxT9_hGNhiq zG+(947#uQm4uoyMTOWe~L`^aZ^z=GMAZ8A#b2^C`PAn+3ICO@Jl*&ZMd4=+8l~*w~ zubbwpaOef;KEO{Iz<;%^twWFN$CXYC0RQ^0|Ej)(c>05TIP-sN>Z{U2G(p$kL$cO=`aM6K- zO7T@<)a!#ttySe~X}`wX@8zd$m)F_X)r(t@mp<-E%XuBTcYlg1{_Bx9ZT3j;HjXkU z29jceMnM1|M7iTAb2_CJuhISDmHGF7e-pH|JqVXBJt$NZrksXgK%(+1_5+SXB(cZ- zb;qhmJ@1qzc*ng?=j6lnsOY_Fm``q--0MS^F3;o!40xvB_rL!Zq!U@;Rll%D99AAc zIFJ~FMpht^7yuMX9(HW1%vmZe&y#cabLgik(^$yTr6Xba@<-v^xsL=YHBj8JkB@|% zR{@1|p;0V;R2m=;pv`#`Imbk z8K?oX!j)OBFOAa5K*GzwznrEGsf4nEfzZ%!J#628 zJ)A#35Wfv}1tyb$G{b*_!e9m=)e&fust#3tO)sv>8<_ATIpac^06@4u0N;D}?#H`a zef64db#*JcOqg&4{FgjSkrjn2+-2$44ngG&E6Wr}RP|%9Xa_ZeP=Q2VlUKgZ27awPptf!5aXaOu(&feayF5cP&z zQTgI90gaO{kfw76%E}MnY(WNs00-{c^fS%8(#jyF zYhz|6KuA06HjsDU9Y!{67z(?052R*7clnL6Gl$snSVA3v=zQcNBPNl65hg*{901id zdChrB?=RGh8+WqH^y$aD&6~%1deuve0U&FUdv07e{+WPKTp;1)VC4+Erah#6>~{%m z`R^i1_sa6#5UJ8??_uH9>_p+hfrnKtcg z*IBd9){Gf*(LKwRLPvoMMgMV=dHqR1C@GMHfyO0J_vR{PzbO6AOTP=?gF(9t09g6C z()UKcUi8<~O=ssZ5Xg)`27$2N93Th)Iy1v$BmkGG^Fi=)0EGttl`q9UCTGuDuw_eE zvTa)zvVD73vVVU~WPt`|0ue886AgNN?;u36RrY&WS?+P}s;k;-CQP`@eqAO_x@`6A zsq{}DhdlFG$lnDr#jsWQBxT-7@)*u6lO7SnazjO3=mj2F2zjN;SOBeufPsx;< zDLPa7e(sM=j_C_N5UALIiUG&~5T?x7fryn=<0|C<^#exJyp|YcfL!CE(0s`5) z*P?)sqkxcuefumpf8OG6N0cZ>5@JsJQKg$Q12650D@bm{2tt)TUo&xHzGmb|LKQx$ z8h#u#1Xc)9dCYZAG?T}svgzeffV`qk6=+~zKwdfyQ+}rGY?$<<`#a%oPrK(Y*l!A= z|4c!dA~OJBiq4dN0R0Vgf9#ln0cQd#7N7zE)lXJL0DW(n)8yBQE*?QwXCXz!E@GJ- zR&j=`un09~&QU=9EPdWA1m&u@~RxDENO zTb=E;ZB7CM3I-BXh_kOO+eFDN+Jjp?dN>hxRJqxY3GLB^ZH5wMNkpY**#;7_Z_)-8 z6Ogy~yw3blDL!@*$|eA&{!GbPug_kHqv*%dPO*G40B{Dt0D#eb*5j)Hpbz-I02u&u z3Ln<{V+F{)6{PY1}5dGKtLFm2R#c20|54u zO#lu6Ov#zDv)-R6J{w)(EP#Q-Srr4|0Kn~kPXC$ma}%I9_$EMi5Qhg<3_vwJ7#2Yo zM*npZ6|q=IZ@($Ks49Fi(J_O#y>gN|O?(n2K%fiSQGoz6Mi zV4z?-1658yJ_5kafG{T@1_0RvP&onlz77E7;GwwAKdrYN3JU^JfKvs6WD=(Mg>({{ zI0Q{c0|4~BI`#|bh6Cjh0Sp9u2#^o!T>!Nc@Pzaeoq$YS7QhvhI|3O9FlCpA0kH#+ zI{{@AK#mxchX`e*OgsFiE2q%IexbvBQXN&rPbS40CM=gBLDg^|4&qS-{>WwkV*%I~ zz<+oc@S-XZ2!j9*1j4;N?)7Em*98GZ0RUEM*9 z0Dv6zCj$ZAdQpL@P++WxT_G3>+!caK&wGAZVNJq-vj_n$Rp@WIL>qQg$yy=f)?2Eu z;HZ$`%OP#jg#lkg$6osbFQNnjx`{lhi9xc>9(N*;O#kCf0?KM0fvJ?se1py)St?|l zI^!sASevm@>l9gK0_Y|M$s+<`&O+6->d8P{r0Kw>(||GMRe^|ZDzFL!;!Xp`WfXJz zZ?QqAGfP^9j8l(XU$LhK%lE3A7M$egm9Lx*%tcxODC`%tAV}0=AoBQs+=W0?(S8MA z00c@0I-O0jRLCTC7He@3U0ASc_)s-Ep*s!?Sw=1hB8y@ueYoCYflgrPJOC+<3<9i$^*~?l~Gz2OM{o>#WegVh$&#`u1x|WaitWX)0rh}g-lW} zu0QVeQE7q{;{zcT@nWX6(`M<}a?ke>rIluq_002ovPDHLkV1k5=qMiT% literal 0 HcmV?d00001 diff --git a/ressources/options-icon.png b/ressources/options-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..18c6f757714644beb395304bbef44cf03364f362 GIT binary patch literal 22806 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 +#include +#include "sha1.h" + +#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) + +/* + * Force usage of rol or ror by selecting the one with the smaller constant. + * It _can_ generate slightly smaller code (a constant of 1 is special), but + * perhaps more importantly it's possibly faster on any uarch that does a + * rotate with a loop. + */ + +#define SHA_ASM(op, x, n) ({ unsigned int __res; __asm__(op " %1,%0":"=r" (__res):"i" (n), "0" (x)); __res; }) +#define SHA_ROL(x,n) SHA_ASM("rol", x, n) +#define SHA_ROR(x,n) SHA_ASM("ror", x, n) + +#else + +#define SHA_ROT(X,l,r) (((X) << (l)) | ((X) >> (r))) +#define SHA_ROL(X,n) SHA_ROT(X,n,32-(n)) +#define SHA_ROR(X,n) SHA_ROT(X,32-(n),n) + +#endif + +/* + * If you have 32 registers or more, the compiler can (and should) + * try to change the array[] accesses into registers. However, on + * machines with less than ~25 registers, that won't really work, + * and at least gcc will make an unholy mess of it. + * + * So to avoid that mess which just slows things down, we force + * the stores to memory to actually happen (we might be better off + * with a 'W(t)=(val);asm("":"+m" (W(t))' there instead, as + * suggested by Artur Skawina - that will also make gcc unable to + * try to do the silly "optimize away loads" part because it won't + * see what the value will be). + * + * Ben Herrenschmidt reports that on PPC, the C version comes close + * to the optimized asm with this (ie on PPC you don't want that + * 'volatile', since there are lots of registers). + * + * On ARM we get the best code generation by forcing a full memory barrier + * between each SHA_ROUND, otherwise gcc happily get wild with spilling and + * the stack frame size simply explode and performance goes down the drain. + */ + +#if defined(__i386__) || defined(__x86_64__) + #define setW(x, val) (*(volatile unsigned int *)&W(x) = (val)) +#elif defined(__GNUC__) && defined(__arm__) + #define setW(x, val) do { W(x) = (val); __asm__("":::"memory"); } while (0) +#else + #define setW(x, val) (W(x) = (val)) +#endif + +/* + * Performance might be improved if the CPU architecture is OK with + * unaligned 32-bit loads and a fast ntohl() is available. + * Otherwise fall back to byte loads and shifts which is portable, + * and is faster on architectures with memory alignment issues. + */ + +#if defined(__i386__) || defined(__x86_64__) || \ + defined(__ppc__) || defined(__ppc64__) || \ + defined(__powerpc__) || defined(__powerpc64__) || \ + defined(__s390__) || defined(__s390x__) + +#define get_be32(p) ntohl(*(unsigned int *)(p)) +#define put_be32(p, v) do { *(unsigned int *)(p) = htonl(v); } while (0) + +#else + +#define get_be32(p) ( \ + (*((unsigned char *)(p) + 0) << 24) | \ + (*((unsigned char *)(p) + 1) << 16) | \ + (*((unsigned char *)(p) + 2) << 8) | \ + (*((unsigned char *)(p) + 3) << 0) ) +#define put_be32(p, v) do { \ + unsigned int __v = (v); \ + *((unsigned char *)(p) + 0) = __v >> 24; \ + *((unsigned char *)(p) + 1) = __v >> 16; \ + *((unsigned char *)(p) + 2) = __v >> 8; \ + *((unsigned char *)(p) + 3) = __v >> 0; } while (0) + +#endif + +/* This "rolls" over the 512-bit array */ +#define W(x) (array[(x)&15]) + +/* + * Where do we get the source from? The first 16 iterations get it from + * the input data, the next mix it from the 512-bit array. + */ +#define SHA_SRC(t) get_be32(data + t) +#define SHA_MIX(t) SHA_ROL(W(t+13) ^ W(t+8) ^ W(t+2) ^ W(t), 1) + +#define SHA_ROUND(t, input, fn, constant, A, B, C, D, E) do { \ + unsigned int TEMP = input(t); setW(t, TEMP); \ + E += TEMP + SHA_ROL(A,5) + (fn) + (constant); \ + B = SHA_ROR(B, 2); } while (0) + +#define T_0_15(t, A, B, C, D, E) SHA_ROUND(t, SHA_SRC, (((C^D)&B)^D) , 0x5a827999, A, B, C, D, E ) +#define T_16_19(t, A, B, C, D, E) SHA_ROUND(t, SHA_MIX, (((C^D)&B)^D) , 0x5a827999, A, B, C, D, E ) +#define T_20_39(t, A, B, C, D, E) SHA_ROUND(t, SHA_MIX, (B^C^D) , 0x6ed9eba1, A, B, C, D, E ) +#define T_40_59(t, A, B, C, D, E) SHA_ROUND(t, SHA_MIX, ((B&C)+(D&(B^C))) , 0x8f1bbcdc, A, B, C, D, E ) +#define T_60_79(t, A, B, C, D, E) SHA_ROUND(t, SHA_MIX, (B^C^D) , 0xca62c1d6, A, B, C, D, E ) + +static void blk_SHA1_Block(blk_SHA_CTX *ctx, const unsigned int *data) +{ + unsigned int A,B,C,D,E; + unsigned int array[16]; + + A = ctx->H[0]; + B = ctx->H[1]; + C = ctx->H[2]; + D = ctx->H[3]; + E = ctx->H[4]; + + /* Round 1 - iterations 0-16 take their input from 'data' */ + T_0_15( 0, A, B, C, D, E); + T_0_15( 1, E, A, B, C, D); + T_0_15( 2, D, E, A, B, C); + T_0_15( 3, C, D, E, A, B); + T_0_15( 4, B, C, D, E, A); + T_0_15( 5, A, B, C, D, E); + T_0_15( 6, E, A, B, C, D); + T_0_15( 7, D, E, A, B, C); + T_0_15( 8, C, D, E, A, B); + T_0_15( 9, B, C, D, E, A); + T_0_15(10, A, B, C, D, E); + T_0_15(11, E, A, B, C, D); + T_0_15(12, D, E, A, B, C); + T_0_15(13, C, D, E, A, B); + T_0_15(14, B, C, D, E, A); + T_0_15(15, A, B, C, D, E); + + /* Round 1 - tail. Input from 512-bit mixing array */ + T_16_19(16, E, A, B, C, D); + T_16_19(17, D, E, A, B, C); + T_16_19(18, C, D, E, A, B); + T_16_19(19, B, C, D, E, A); + + /* Round 2 */ + T_20_39(20, A, B, C, D, E); + T_20_39(21, E, A, B, C, D); + T_20_39(22, D, E, A, B, C); + T_20_39(23, C, D, E, A, B); + T_20_39(24, B, C, D, E, A); + T_20_39(25, A, B, C, D, E); + T_20_39(26, E, A, B, C, D); + T_20_39(27, D, E, A, B, C); + T_20_39(28, C, D, E, A, B); + T_20_39(29, B, C, D, E, A); + T_20_39(30, A, B, C, D, E); + T_20_39(31, E, A, B, C, D); + T_20_39(32, D, E, A, B, C); + T_20_39(33, C, D, E, A, B); + T_20_39(34, B, C, D, E, A); + T_20_39(35, A, B, C, D, E); + T_20_39(36, E, A, B, C, D); + T_20_39(37, D, E, A, B, C); + T_20_39(38, C, D, E, A, B); + T_20_39(39, B, C, D, E, A); + + /* Round 3 */ + T_40_59(40, A, B, C, D, E); + T_40_59(41, E, A, B, C, D); + T_40_59(42, D, E, A, B, C); + T_40_59(43, C, D, E, A, B); + T_40_59(44, B, C, D, E, A); + T_40_59(45, A, B, C, D, E); + T_40_59(46, E, A, B, C, D); + T_40_59(47, D, E, A, B, C); + T_40_59(48, C, D, E, A, B); + T_40_59(49, B, C, D, E, A); + T_40_59(50, A, B, C, D, E); + T_40_59(51, E, A, B, C, D); + T_40_59(52, D, E, A, B, C); + T_40_59(53, C, D, E, A, B); + T_40_59(54, B, C, D, E, A); + T_40_59(55, A, B, C, D, E); + T_40_59(56, E, A, B, C, D); + T_40_59(57, D, E, A, B, C); + T_40_59(58, C, D, E, A, B); + T_40_59(59, B, C, D, E, A); + + /* Round 4 */ + T_60_79(60, A, B, C, D, E); + T_60_79(61, E, A, B, C, D); + T_60_79(62, D, E, A, B, C); + T_60_79(63, C, D, E, A, B); + T_60_79(64, B, C, D, E, A); + T_60_79(65, A, B, C, D, E); + T_60_79(66, E, A, B, C, D); + T_60_79(67, D, E, A, B, C); + T_60_79(68, C, D, E, A, B); + T_60_79(69, B, C, D, E, A); + T_60_79(70, A, B, C, D, E); + T_60_79(71, E, A, B, C, D); + T_60_79(72, D, E, A, B, C); + T_60_79(73, C, D, E, A, B); + T_60_79(74, B, C, D, E, A); + T_60_79(75, A, B, C, D, E); + T_60_79(76, E, A, B, C, D); + T_60_79(77, D, E, A, B, C); + T_60_79(78, C, D, E, A, B); + T_60_79(79, B, C, D, E, A); + + ctx->H[0] += A; + ctx->H[1] += B; + ctx->H[2] += C; + ctx->H[3] += D; + ctx->H[4] += E; +} + +void blk_SHA1_Init(blk_SHA_CTX *ctx) +{ + ctx->size = 0; + + /* Initialize H with the magic constants (see FIPS180 for constants) */ + ctx->H[0] = 0x67452301; + ctx->H[1] = 0xefcdab89; + ctx->H[2] = 0x98badcfe; + ctx->H[3] = 0x10325476; + ctx->H[4] = 0xc3d2e1f0; +} + +void blk_SHA1_Update(blk_SHA_CTX *ctx, const void *data, unsigned long len) +{ + int lenW = ctx->size & 63; + + ctx->size += len; + + /* Read the data into W and process blocks as they get full */ + if (lenW) { + unsigned long left = 64 - lenW; + if (len < left) + left = len; + memcpy(lenW + (char *)ctx->W, data, left); + lenW = (lenW + left) & 63; + len -= left; + data = ((const char *)data + left); + if (lenW) + return; + blk_SHA1_Block(ctx, ctx->W); + } + while (len >= 64) { + blk_SHA1_Block(ctx, (const unsigned int*) data); + data = ((const char *)data + 64); + len -= 64; + } + if (len) + memcpy(ctx->W, data, len); +} + +void blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx) +{ + static const unsigned char pad[64] = { 0x80 }; + unsigned int padlen[2]; + int i; + + /* Pad with a binary 1 (ie 0x80), then zeroes, then length */ + padlen[0] = htonl(ctx->size >> 29); + padlen[1] = htonl(ctx->size << 3); + + i = ctx->size & 63; + blk_SHA1_Update(ctx, pad, 1+ (63 & (55 - i))); + blk_SHA1_Update(ctx, padlen, 8); + + /* Output hash */ + for (i = 0; i < 5; i++) + put_be32(hashout + i*4, ctx->H[i]); +} diff --git a/sha1.h b/sha1.h new file mode 100644 index 0000000..b864df6 --- /dev/null +++ b/sha1.h @@ -0,0 +1,22 @@ +/* + * SHA1 routine optimized to do word accesses rather than byte accesses, + * and to avoid unnecessary copies into the context array. + * + * This was initially based on the Mozilla SHA1 implementation, although + * none of the original Mozilla code remains. + */ + +typedef struct { + unsigned long long size; + unsigned int H[5]; + unsigned int W[16]; +} blk_SHA_CTX; + +void blk_SHA1_Init(blk_SHA_CTX *ctx); +void blk_SHA1_Update(blk_SHA_CTX *ctx, const void *dataIn, unsigned long len); +void blk_SHA1_Final(unsigned char hashout[20], blk_SHA_CTX *ctx); + +#define git_SHA_CTX blk_SHA_CTX +#define git_SHA1_Init blk_SHA1_Init +#define git_SHA1_Update blk_SHA1_Update +#define git_SHA1_Final blk_SHA1_Final diff --git a/view/AccountPanel.cpp b/view/AccountPanel.cpp new file mode 100644 index 0000000..89c73f0 --- /dev/null +++ b/view/AccountPanel.cpp @@ -0,0 +1,21 @@ +#include "AccountPanel.h" + + +AccountPanel::AccountPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*parent)), _kiss(kiss), _wxUI(parent), _tree(this, -1), _grid(this, -1) +{ + wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); + wxChartPanel* chart ; + SetSizer(hbox); + + _pie = new PiePlot(); + _grid.CreateGrid(10, 7); + + chart = new wxChartPanel(this); + chart->SetChart(new Chart(_pie, _("Cost repartition"))); + hbox->Add(&_tree, 0); + hbox->Add(&_grid, 0); + hbox->Add(chart, 0); + + Fit(); + SetMinSize(GetSize()); +} diff --git a/view/AccountPanel.h b/view/AccountPanel.h new file mode 100644 index 0000000..aa5e2f0 --- /dev/null +++ b/view/AccountPanel.h @@ -0,0 +1,30 @@ +#ifndef ACCOUNTPANEL_H +#define ACCOUNTPANEL_H + +#include +#include +#include +#include +#include + +#include +#include "wxUI.h" + +class wxUI; +class KissCount; + +class AccountPanel: public wxPanel +{ +public: + + AccountPanel(KissCount* kiss, wxUI *parent); + +private: + KissCount* _kiss; + wxUI* _wxUI; + wxTreeCtrl _tree; + wxGrid _grid; + PiePlot* _pie; +}; + +#endif diff --git a/view/ButtonPanel.cpp b/view/ButtonPanel.cpp new file mode 100644 index 0000000..8337bf2 --- /dev/null +++ b/view/ButtonPanel.cpp @@ -0,0 +1,39 @@ +#include "ButtonPanel.h" + +enum {ID_BUTTON_ACCOUNT=1, ID_BUTTON_STATS, ID_BUTTON_PREFS, ID_BUTTON_CHANGE_USER}; + +BEGIN_EVENT_TABLE(ButtonPanel, wxPanel) +EVT_BUTTON(ID_BUTTON_CHANGE_USER, ButtonPanel::OnChangeUser) +END_EVENT_TABLE() + +ButtonPanel::ButtonPanel(KissCount* kiss, wxUI *parent) : wxPanel(&(*parent)), _kiss(kiss), _wxUI(parent) +{ + wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); + _account = new wxBitmapButton(this, ID_BUTTON_ACCOUNT, wxBitmap(_(ACCOUNT_ICON))); + _stats = new wxBitmapButton(this, ID_BUTTON_STATS, wxBitmap(_(STATS_ICON))); + _prefs = new wxBitmapButton(this, ID_BUTTON_PREFS, wxBitmap(_(PREFS_ICON))); + _changeUser = new wxBitmapButton(this, ID_BUTTON_CHANGE_USER, wxBitmap(_(CHANGE_USER_ICON))); + + SetSizer(hbox); + + hbox->Add(_account); + hbox->Add(_stats); + hbox->Add(_prefs); + hbox->Add(_changeUser); + + Fit(); + SetMinSize(GetSize()); +} + +ButtonPanel::~ButtonPanel() +{ + delete _account; + delete _stats; + delete _prefs; + delete _changeUser; +} + +void ButtonPanel::OnChangeUser(wxCommandEvent& event) +{ + _wxUI->ChangeUser(); +} diff --git a/view/ButtonPanel.h b/view/ButtonPanel.h new file mode 100644 index 0000000..822c39e --- /dev/null +++ b/view/ButtonPanel.h @@ -0,0 +1,38 @@ +#ifndef BUTTONPANEL_H +#define BUTTONPANEL_H + +#include +#include + +#include +#include "wxUI.h" + +#define ACCOUNT_ICON "ressources/administrator-icon.png" +#define STATS_ICON "ressources/chart-icon.png" +#define PREFS_ICON "ressources/options-icon.png" +#define CHANGE_USER_ICON "ressources/Clients-icon.png" + +class KissCount; +class wxUI; + +class ButtonPanel: public wxPanel +{ +public: + + ButtonPanel(KissCount* kiss, wxUI *parent); + ~ButtonPanel(); + + void OnChangeUser(wxCommandEvent& event); + +private: + KissCount* _kiss; + wxUI* _wxUI; + wxBitmapButton* _account; + wxBitmapButton* _stats; + wxBitmapButton* _prefs; + wxBitmapButton* _changeUser; + + DECLARE_EVENT_TABLE(); +}; + +#endif diff --git a/view/UsersDialog.cpp b/view/UsersDialog.cpp new file mode 100644 index 0000000..78895ba --- /dev/null +++ b/view/UsersDialog.cpp @@ -0,0 +1,73 @@ +#include "UsersDialog.h" + +enum {ID_BUTTON_OK=1, ID_BUTTON_CANCEL}; + +BEGIN_EVENT_TABLE(UsersDialog, wxDialog) +EVT_BUTTON(ID_BUTTON_OK, UsersDialog::OnOK) +EVT_BUTTON(ID_BUTTON_CANCEL, UsersDialog::OnCancel) +END_EVENT_TABLE() + +UsersDialog::UsersDialog(KissCount* kiss, wxUI *parent) : wxDialog(&(*parent), -1, _("Users")), _kiss(kiss), _wxUI(parent) +{ + wxBoxSizer *vbox = new wxBoxSizer(wxVERTICAL); + wxBoxSizer *hbox = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer *vbox1 = new wxBoxSizer(wxVERTICAL); + wxBoxSizer *hbox1 = new wxBoxSizer(wxHORIZONTAL); + + _users = new wxChoice(this, wxID_ANY); + _password = new wxTextCtrl(this, wxID_ANY); + + _password->SetWindowStyle(wxTE_PASSWORD); + + wxButton* ok = new wxButton(this, ID_BUTTON_OK, _("OK")); + wxButton* cancel = new wxButton(this, ID_BUTTON_CANCEL, _("Cancel")); + + std::list users_list = _kiss->GetUsers(); + + for(std::list::iterator i = users_list.begin(); i != users_list.end(); i++) + { + _users->Append(*i); + } + + vbox1->Add(_users); + vbox1->Add(-1, 10); + vbox1->Add(_password); + hbox->Add(vbox1, 0, wxEXPAND, 10); + + hbox1->Add(ok); + hbox1->Add(-1, 10); + hbox1->Add(cancel); + + vbox->Add(hbox, 0, wxALIGN_RIGHT | wxRIGHT | wxTOP, 10); + vbox->Add(-1, 40); + vbox->Add(hbox1, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, 10); + + Center(); + SetSizer(vbox); + + Layout(); +} + +void UsersDialog::OnOK(wxCommandEvent& event) +{ + // No users in database + if (!_users->GetStringSelection().Length()) + { + Close(); + } + + if (!_kiss->IsValidUser(_users->GetStringSelection(), _password->GetLineText(0))) + { + wxMessageBox(_("Invalid password"), _("Error"), wxICON_ERROR | wxOK ); + } + else + { + _kiss->LoadUser(_users->GetStringSelection()); + Close(); + } +} + +void UsersDialog::OnCancel(wxCommandEvent& event) +{ + Close(); +} diff --git a/view/UsersDialog.h b/view/UsersDialog.h new file mode 100644 index 0000000..97bab8e --- /dev/null +++ b/view/UsersDialog.h @@ -0,0 +1,32 @@ +#ifndef USERSDIALOG_H +#define USERSDIALOG_H + +#include + +#include +#include +#include +#include +#include "wxUI.h" + +class wxUI; +class KissCount; + +class UsersDialog : public wxDialog +{ +public: + UsersDialog(KissCount* kiss, wxUI *parent); + + void OnOK(wxCommandEvent& event); + void OnCancel(wxCommandEvent& event); + +private: + KissCount* _kiss; + wxUI* _wxUI; + wxChoice* _users; + wxTextCtrl* _password; + +DECLARE_EVENT_TABLE() + +}; +#endif diff --git a/view/wxUI.cpp b/view/wxUI.cpp new file mode 100644 index 0000000..cf005b9 --- /dev/null +++ b/view/wxUI.cpp @@ -0,0 +1,65 @@ +#include "wxUI.h" + +BEGIN_EVENT_TABLE(wxUI, wxFrame) + EVT_MENU(ID_Quit, wxUI::OnQuit) + EVT_MENU(ID_About, wxUI::OnAbout) +END_EVENT_TABLE() + +wxUI::wxUI(KissCount* kiss, const wxString& title, const wxPoint& pos, const wxSize& size) + : wxFrame(NULL, -1, title, pos, size), _kiss(kiss) +{ + _hbox = new wxBoxSizer(wxVERTICAL); + ButtonPanel* buttons = new ButtonPanel(_kiss, this); + wxMenu *menuFile = new wxMenu; + + menuFile->Append( ID_About, _("&About...") ); + menuFile->AppendSeparator(); + menuFile->Append( ID_Quit, _("E&xit") ); + + wxMenuBar *menuBar = new wxMenuBar; + menuBar->Append( menuFile, _("&File") ); + + SetMenuBar( menuBar ); + + CreateStatusBar(); + SetStatusText( _("Welcome to wxWidgets!") ); + + SetSizer(_hbox); + + _hbox->Add(buttons); +} + +wxUI::~wxUI() +{ + if (_accountPanel) delete _accountPanel; +} + +void wxUI::OnQuit(wxCommandEvent& WXUNUSED(event)) +{ + Close(true); +} + +void wxUI::OnAbout(wxCommandEvent& WXUNUSED(event)) +{ + wxMessageBox( _("This is a wxWidgets Hello world sample"), + _("About Hello World"), + wxOK | wxICON_INFORMATION, this ); +} + +void wxUI::ChangeUser() +{ + UsersDialog u(_kiss, this); + u.ShowModal(); +} + +void wxUI::LoadUser() +{ + if (_accountPanel) + { + _hbox->Detach(_accountPanel); + delete _accountPanel; + } + _accountPanel = new AccountPanel(_kiss, this); + _hbox->Add(_accountPanel); + Layout(); +} diff --git a/view/wxUI.h b/view/wxUI.h new file mode 100644 index 0000000..853d0cd --- /dev/null +++ b/view/wxUI.h @@ -0,0 +1,39 @@ +#ifndef WXUI_H +#define WXUI_H + +#include +#include "AccountPanel.h" +#include "ButtonPanel.h" +#include "UsersDialog.h" +#include + +class KissCount; +class AccountPanel; + +class wxUI: public wxFrame +{ +public: + + wxUI(KissCount* kiss, const wxString& title, const wxPoint& pos, const wxSize& size); + ~wxUI(); + + void OnQuit(wxCommandEvent& event); + void OnAbout(wxCommandEvent& event); + + void ChangeUser(); + void LoadUser(); + DECLARE_EVENT_TABLE(); + +private: + wxBoxSizer *_hbox; + AccountPanel *_accountPanel; + KissCount *_kiss; +}; + +enum +{ + ID_Quit = 1, + ID_About, +}; + +#endif