Compare commits

..

1466 Commits

Author SHA1 Message Date
f6f341c372 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 11:22:50 +00:00
3d159a89eb Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 11:22:46 +00:00
OdooSky Tower
a6a54b1f3f Cleanup: remove orphan addon source base_accounting_kit (no tags reference it) 2026-05-02 13:20:26 +02:00
763268a1e9 Tower: unpublish bi_print_journal_entries — remove source from 19.0 branch 2026-05-02 11:16:15 +00:00
e2efba2971 Tower: unpublish om_recurring_payments — remove source from 19.0 branch 2026-05-02 11:16:09 +00:00
7428a903a8 Tower: unpublish om_fiscal_year — remove source from 19.0 branch 2026-05-02 11:16:03 +00:00
4a71eef134 Tower: unpublish om_account_budget — remove source from 19.0 branch 2026-05-02 11:15:57 +00:00
e9b6ac9bbb Tower: unpublish om_account_asset — remove source from 19.0 branch 2026-05-02 11:15:52 +00:00
9304592ad6 Tower: unpublish om_account_accountant — remove source from 19.0 branch 2026-05-02 11:15:46 +00:00
26ae0e14df Tower: unpublish laundry_management — remove source from 19.0 branch 2026-05-02 11:15:37 +00:00
22162f9d47 Tower: unpublish accounting_pdf_reports — remove source from 19.0 branch 2026-05-02 11:15:27 +00:00
7e07a27a97 Tower: unpublish om_account_followup — remove source from 19.0 branch 2026-05-02 11:15:05 +00:00
0da904b92b Tower: unpublish om_account_daily_reports — remove source from 19.0 branch 2026-05-02 11:13:50 +00:00
9b4ce3b586 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) (force-overwrite) 2026-05-02 07:39:48 +00:00
49420992f5 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) (force-overwrite) 2026-05-02 07:39:42 +00:00
85d8f421c6 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) (force-overwrite) 2026-05-02 07:39:36 +00:00
966b74e9a3 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) (force-overwrite) 2026-05-02 07:39:28 +00:00
e9d0895fc9 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) (force-overwrite) 2026-05-02 07:39:09 +00:00
1ccd4e2f78 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) (force-overwrite) 2026-05-02 07:38:53 +00:00
e93e98f302 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) (force-overwrite) 2026-05-02 07:38:42 +00:00
9e8b644dc6 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) (force-overwrite) 2026-05-02 07:38:23 +00:00
8f624fee10 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) (force-overwrite) 2026-05-02 07:27:30 +00:00
efe8ee068a Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) (force-overwrite) 2026-05-02 07:27:24 +00:00
7ae04247ce Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) (force-overwrite) 2026-05-02 07:27:15 +00:00
d05b1f4bab Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) (force-overwrite) 2026-05-02 07:27:01 +00:00
96eeaa2d51 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) (force-overwrite) 2026-05-02 07:26:41 +00:00
69ae27892d Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) (force-overwrite) 2026-05-02 07:26:16 +00:00
c9a8cb1792 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) (force-overwrite) 2026-05-02 07:26:07 +00:00
120bff231c Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) (force-overwrite) 2026-05-02 07:25:53 +00:00
7f6aeebbe1 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:39 +00:00
3f66de30c4 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:37 +00:00
389ad788e3 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:36 +00:00
cc13e048b2 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:34 +00:00
085380a411 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:32 +00:00
1f3176a7b7 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:31 +00:00
88f26e9397 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:29 +00:00
2549ce8bb7 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:29 +00:00
1e585a419d Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:27 +00:00
9d3ef18528 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:26 +00:00
df40adb5db Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:25 +00:00
9fc91ed47a Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:24 +00:00
ef1ef68222 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:22 +00:00
aaeb29171b Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:20 +00:00
1a80cd8aa8 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:19 +00:00
a02c02b8e5 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:18 +00:00
720966186a Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:16 +00:00
d8924a234a Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:14 +00:00
a5d21a8853 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:13 +00:00
cca846b84e Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:12 +00:00
b88dcbfaa8 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:10 +00:00
8c7bde04d7 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:09 +00:00
52fcc8afa5 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:08 +00:00
e71b7a33c4 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:07 +00:00
529d640d2c Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:06 +00:00
db06b274c8 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:04 +00:00
d51e343b0e Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:02:01 +00:00
724e09d35b Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:59 +00:00
f46eca6af8 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:59 +00:00
cc3d0f3a6f Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:57 +00:00
693cd33119 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:56 +00:00
98c4ac4167 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:55 +00:00
8392ae58d9 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:53 +00:00
a25f5df019 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:51 +00:00
d7983aab11 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:50 +00:00
54ff49035e Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:49 +00:00
a2172f4581 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:47 +00:00
85147b59a1 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:45 +00:00
c5e332bf92 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:43 +00:00
fda43a256b Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:40 +00:00
2b34b6680a Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:37 +00:00
8af5977dc1 Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:35 +00:00
298759fdcd Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:33 +00:00
33b4abdfca Tower: upload om_account_followup 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 07:01:30 +00:00
cee7dfbc8c Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:01:27 +00:00
4651545305 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:01:24 +00:00
05e9d292ab Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:01:22 +00:00
d3d43cecb8 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:01:19 +00:00
227e71b14f Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:01:16 +00:00
d10ef5216c Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:01:14 +00:00
f1ed7c92f7 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:01:12 +00:00
1cc27af9ac Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:01:10 +00:00
a4b715534d Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:01:08 +00:00
16548c9204 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:01:05 +00:00
7acc979f33 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:01:02 +00:00
f4a7d664f2 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:59 +00:00
b596416791 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:56 +00:00
310de14ee8 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:54 +00:00
f626c90b77 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:52 +00:00
23cede2cec Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:49 +00:00
cc0e6493ae Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:47 +00:00
23cc52e9dc Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:46 +00:00
0f353f1df9 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:44 +00:00
317cdd1618 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:42 +00:00
c25e179e67 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:39 +00:00
59cdd6db51 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:37 +00:00
998ab2b18a Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:35 +00:00
6c6e2a6d06 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:32 +00:00
cba963b090 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:30 +00:00
273ca36a82 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:29 +00:00
cbcb69f040 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:27 +00:00
01b304ad67 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:24 +00:00
a3235eb5e7 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:22 +00:00
24f3e5b775 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:19 +00:00
361c3708dc Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:16 +00:00
923f087b7a Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:14 +00:00
590c130efa Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:12 +00:00
23249091b1 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:10 +00:00
a255dc7aae Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:07 +00:00
66a9f804ff Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 07:00:03 +00:00
c07af0a20f Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:59:59 +00:00
6b42a1a341 Tower: upload om_account_asset 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:59:57 +00:00
580d950eab Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:54 +00:00
08f8103f4f Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:51 +00:00
2c856313a5 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:48 +00:00
ce5240738c Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:47 +00:00
69804d0600 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:44 +00:00
5e7f44f96e Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:41 +00:00
1325283047 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:39 +00:00
097e327943 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:37 +00:00
1e2d165c13 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:34 +00:00
4b8cb108fa Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:32 +00:00
b458358351 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:30 +00:00
6d4b091bd0 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:28 +00:00
a473e89adb Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:26 +00:00
9035144daa Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:24 +00:00
8c11e98400 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:21 +00:00
4c6a032214 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:19 +00:00
89c01cde3a Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:17 +00:00
335ae7cc37 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:15 +00:00
aeb0dfa32b Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:13 +00:00
ab0fcc907d Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:12 +00:00
488373ef1d Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:09 +00:00
ed88e8b964 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:06 +00:00
c2fd100b77 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:03 +00:00
6c358ca955 Tower: upload om_fiscal_year 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:59:00 +00:00
2f387e8a65 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:56 +00:00
efaeade746 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:54 +00:00
599e09df61 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:52 +00:00
52c65aa9b5 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:49 +00:00
41c4ff034a Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:47 +00:00
ced6377266 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:44 +00:00
fb04b47190 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:41 +00:00
cd6812f3b8 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:39 +00:00
84183488f8 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:36 +00:00
2c552e1c97 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:34 +00:00
b4810b9f98 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:31 +00:00
5dbfced933 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:28 +00:00
afc1b45d6a Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:26 +00:00
5ff0a2841e Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:24 +00:00
59199e3702 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:20 +00:00
93e36e7e29 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:17 +00:00
4618b061c8 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:14 +00:00
626ede148f Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:09 +00:00
cad549b100 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:05 +00:00
953b69ca28 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:58:02 +00:00
ed9fdb17f3 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:58 +00:00
9ba4a97fe3 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:53 +00:00
c97dd79db1 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:49 +00:00
f2c47e8c13 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:43 +00:00
0c09645e6d Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:39 +00:00
48aee47770 Tower: upload om_account_budget 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:36 +00:00
cb3d25ce0f Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:31 +00:00
b6660d899a Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:27 +00:00
b22ccc147f Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:25 +00:00
5e1b2881db Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:21 +00:00
59397bbbaf Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:17 +00:00
43650a81e8 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:13 +00:00
e9114765c0 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:10 +00:00
f8e7bcad5d Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:06 +00:00
d919f48451 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:57:01 +00:00
81ce31a57a Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:58 +00:00
f95eca7b2e Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:54 +00:00
d353bd94ab Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:52 +00:00
f6d3119fdc Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:47 +00:00
7903652796 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:44 +00:00
c0d4958555 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:39 +00:00
4f21f98520 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:36 +00:00
dfcda13313 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:31 +00:00
6b0de8a446 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:30 +00:00
148c3a12d9 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:28 +00:00
357c73e7d1 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:26 +00:00
0553a3faf7 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:23 +00:00
12c3d9dcc0 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:20 +00:00
23b40d5922 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:19 +00:00
3f63f8d209 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:15 +00:00
6fd4de2cc8 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:11 +00:00
794edc73a0 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:08 +00:00
bf822b8178 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:05 +00:00
875db440fc Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:56:04 +00:00
76be4825f1 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:55:59 +00:00
77ff5a54f2 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:55:58 +00:00
a33c2380a2 Tower: upload om_account_daily_reports 19.0.1.0.1 (was 1.0.1, via marketplace) 2026-05-02 06:55:55 +00:00
c9d191cd7c Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:51 +00:00
e5882ef4fc Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:49 +00:00
0afa863d76 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:45 +00:00
b6fe704976 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:41 +00:00
afe3108bac Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:38 +00:00
940cd44458 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:34 +00:00
4982f777ca Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:32 +00:00
f2794c7b4b Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:28 +00:00
0b1545593b Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:24 +00:00
0a026f7122 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:21 +00:00
d3b616b5e9 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:19 +00:00
67d9c5a66d Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:15 +00:00
27973de8db Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:13 +00:00
d21fc69654 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:10 +00:00
8ef99a0351 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:09 +00:00
15dba9eeac Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:06 +00:00
5b5bc26980 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:04 +00:00
8f72d4c181 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:55:00 +00:00
689a600475 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:58 +00:00
125229bf32 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:56 +00:00
311491585e Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:54 +00:00
89215de3cc Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:51 +00:00
3ed3987ff2 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:49 +00:00
bc62e0679e Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:48 +00:00
4540f89d56 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:45 +00:00
76a9794601 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:43 +00:00
2f74414402 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:41 +00:00
b7c000ec2b Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:39 +00:00
9bbea37ffa Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:37 +00:00
bd51b90454 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:35 +00:00
410f68fd85 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:32 +00:00
6264906b96 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:28 +00:00
de1c0a7a97 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:26 +00:00
5a4b57e071 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:23 +00:00
fa7ec32530 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:20 +00:00
79c0e0c7df Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:18 +00:00
551c5ff078 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:14 +00:00
cee6b58491 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:12 +00:00
71749fa98b Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:09 +00:00
0bf6239825 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:07 +00:00
b69300873e Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:04 +00:00
013f1ebf8a Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:54:02 +00:00
2392132751 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:58 +00:00
3885674952 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:57 +00:00
3933decc5d Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:56 +00:00
98e3afdfa6 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:53 +00:00
25e374d814 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:49 +00:00
9a9a0d093e Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:44 +00:00
d8c641942e Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:40 +00:00
a72d7b7497 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:35 +00:00
699905af74 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:30 +00:00
1dbf28c898 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:25 +00:00
135cd35e8e Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:23 +00:00
e7a07af65a Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:19 +00:00
8f92c36a90 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:16 +00:00
1139606ba9 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:12 +00:00
5e7dc1dace Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:08 +00:00
30500a1a79 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:05 +00:00
49e35bb590 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:53:01 +00:00
1de375ee02 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:58 +00:00
a35e329b22 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:53 +00:00
7323f4e828 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:51 +00:00
e2cb07e990 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:49 +00:00
98d315cef4 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:48 +00:00
78b95aff58 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:46 +00:00
bf5b83a46d Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:42 +00:00
452a529dca Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:40 +00:00
7e3704ba35 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:38 +00:00
6ad452e5af Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:34 +00:00
6911b4e06e Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:30 +00:00
ff240d6e5f Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:27 +00:00
12125792f2 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:24 +00:00
bb945c2bbe Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:20 +00:00
be8bec6163 Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:18 +00:00
2d85f731af Tower: upload accounting_pdf_reports 19.0.1.0.2 (was 1.0.2, via marketplace) 2026-05-02 06:52:15 +00:00
bfce835bee Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:52:11 +00:00
a4a0184e3a Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:52:09 +00:00
ba9d23abcc Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:52:05 +00:00
4c811eb71b Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:52:01 +00:00
3183ea091c Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:58 +00:00
cb5a39181f Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:55 +00:00
b80e594535 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:52 +00:00
487da7eb79 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:48 +00:00
55b006145a Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:46 +00:00
272e50202c Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:44 +00:00
c7e08801e3 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:43 +00:00
98c68049eb Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:41 +00:00
4837ebb77b Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:39 +00:00
2c6b22b221 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:37 +00:00
040d040536 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:35 +00:00
1c7b7877a3 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:33 +00:00
25a626bdc8 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:30 +00:00
08af20cc8d Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:27 +00:00
f2d3140e01 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:24 +00:00
da0f9cbcf2 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:22 +00:00
eaa58f6116 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:18 +00:00
74792b00dd Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:16 +00:00
e8d03372a9 Tower: upload om_recurring_payments 19.0.1.0.0 (was 1.0.0, via marketplace) 2026-05-02 06:51:11 +00:00
b05e4dc5c2 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:51:07 +00:00
ed17b07946 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:51:03 +00:00
be48603ea5 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:51:00 +00:00
065927abb9 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:55 +00:00
46e8c1e977 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:51 +00:00
dca8863bbd Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:49 +00:00
55bdcfbdc6 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:46 +00:00
10975b612e Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:42 +00:00
2bea9c692e Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:38 +00:00
29052e9644 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:34 +00:00
3f30b37505 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:31 +00:00
5d363428a2 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:28 +00:00
9a14ce45c9 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:26 +00:00
49198d27cc Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:22 +00:00
2002bd8dc2 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:18 +00:00
7522e64961 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:15 +00:00
7c8e4574e7 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:12 +00:00
c42184c3b2 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:10 +00:00
b7f1e8f324 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:07 +00:00
966efb56c0 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:50:02 +00:00
91a3aac647 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:58 +00:00
ec80e5f007 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:53 +00:00
87df9231e4 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:48 +00:00
1bd64417b8 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:44 +00:00
0a800bf1aa Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:41 +00:00
f0027eee3f Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:40 +00:00
0bca86c256 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:37 +00:00
1e473a1677 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:34 +00:00
1725eafcd9 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:31 +00:00
1ad797d9f0 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:29 +00:00
53be87e93c Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:26 +00:00
1ead3282cf Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:24 +00:00
2c142ccb76 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:23 +00:00
eda163a405 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:19 +00:00
adce085798 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:18 +00:00
495fe47dfa Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:16 +00:00
037d1438e1 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:13 +00:00
54e693e3f1 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:11 +00:00
9d84acdc94 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:07 +00:00
8132d571ac Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:04 +00:00
28567ff9e2 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:49:01 +00:00
ad566ac852 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:48:58 +00:00
e1d95717d6 Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:48:56 +00:00
824265c91a Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:48:54 +00:00
5c5d93f18f Tower: upload om_account_accountant 19.0.1.0.3 (was 1.0.3, via marketplace) 2026-05-02 06:48:51 +00:00
1ed351afcb Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:27 +00:00
37d902bbf1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:27 +00:00
4620f1f15d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:26 +00:00
0919e928a2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:25 +00:00
6ccd6f551d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:24 +00:00
d9dbe67b8c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:23 +00:00
00ecdb1eee Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:23 +00:00
a32918ffab Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:22 +00:00
599cc43b87 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:21 +00:00
3e951f4586 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:20 +00:00
179eb40651 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:20 +00:00
1ea0f65bad Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:19 +00:00
37a5973caa Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:18 +00:00
3bfd304755 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:17 +00:00
422687b588 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:17 +00:00
e8760f7d0d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:16 +00:00
d7f5f98734 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:15 +00:00
e224f85ce5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:15 +00:00
9793d30a0b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:14 +00:00
7ee8c79c11 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:13 +00:00
c5b1f87197 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:12 +00:00
6d4b838700 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:12 +00:00
32ebb495b2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:11 +00:00
1b0b3816fd Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:10 +00:00
461a147883 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:09 +00:00
96a99e98a6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:09 +00:00
3f1e67983a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:08 +00:00
480a145045 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:07 +00:00
4d6d6e3a0b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:06 +00:00
561595705c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:05 +00:00
6fe848fe50 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:03 +00:00
340836e114 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:02 +00:00
8550a2c003 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:01 +00:00
b9cb1e1d6c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:16:00 +00:00
058d098354 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:59 +00:00
05e11743bc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:58 +00:00
7bd3c34d30 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:57 +00:00
365e38e9bd Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:56 +00:00
da1339981b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:55 +00:00
21e3832c7a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:54 +00:00
cdf57466e0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:53 +00:00
1dd7159ebf Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:52 +00:00
a7aac0a6fc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:51 +00:00
46ddc4e83d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:50 +00:00
f598856a85 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:49 +00:00
e4fab2bcd0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:48 +00:00
2b9c28b17d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:47 +00:00
aa240a5294 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:46 +00:00
3a3f69f769 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:44 +00:00
e1550843f2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:43 +00:00
6e9bd26cc2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:43 +00:00
0274e8118a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:41 +00:00
fbee040fbe Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:40 +00:00
cc39e82b47 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:39 +00:00
cc173aa77f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:38 +00:00
49fd715c87 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:37 +00:00
be38f82271 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:36 +00:00
3d6d13e7f6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:35 +00:00
057fe4b3d5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:34 +00:00
e4b13e539e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:33 +00:00
995b9e65ac Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:32 +00:00
bc01210496 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:31 +00:00
cab4aebd03 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:29 +00:00
7ecc317e64 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:28 +00:00
30d46fbca0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:27 +00:00
9b2180deef Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:26 +00:00
9ad33e290f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:25 +00:00
787efca2b6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:24 +00:00
16ced6a395 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:23 +00:00
773c3cdd6e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:21 +00:00
4629806e3e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:20 +00:00
2129a6d505 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:19 +00:00
bf6096bf45 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:18 +00:00
e8bf47a6a9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:17 +00:00
7eb70e2623 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:16 +00:00
89253bd00a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:15 +00:00
b55ae4fe9d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:14 +00:00
bb68ff0cc5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:13 +00:00
66add92264 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:12 +00:00
2588c66508 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:10 +00:00
5b4a3aab11 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:09 +00:00
88118d9448 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:08 +00:00
d389ec4902 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:07 +00:00
81bc19c9ca Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:06 +00:00
5859333ac1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:04 +00:00
403db72dc7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:03 +00:00
1e058fdb9a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:02 +00:00
8c015d75be Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:15:00 +00:00
1ffc9fe53f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:59 +00:00
ea982c7dc5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:58 +00:00
d6922f99a3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:58 +00:00
a04bf4be8b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:57 +00:00
af2de3d58f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:55 +00:00
485d66cb19 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:55 +00:00
18e3ab1723 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:54 +00:00
9abef0c065 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:53 +00:00
8aff2d5df6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:51 +00:00
926071995c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:51 +00:00
69fc239de1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:49 +00:00
08bfaa13cf Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:48 +00:00
43d06b9ead Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:47 +00:00
100f596f31 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:46 +00:00
6b1e846f86 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:45 +00:00
2a3bd8b770 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:43 +00:00
cad4fdef9e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:43 +00:00
f25a7de844 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:41 +00:00
da3727481e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:40 +00:00
44c80d21ea Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:39 +00:00
0f815cd793 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:38 +00:00
962f5792a3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:37 +00:00
9527852970 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:36 +00:00
b5aef11d8e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:35 +00:00
90e3b774fe Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:33 +00:00
d12ac3d874 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:32 +00:00
f5593b775d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:31 +00:00
64268fad89 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:30 +00:00
9e9b83e383 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:29 +00:00
b0959026a5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:28 +00:00
c94d4b2692 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:26 +00:00
feb7eac8d0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:25 +00:00
deb912fe74 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:24 +00:00
f48188cdc2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:23 +00:00
ef2a582cbb Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:22 +00:00
efa56c6aee Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:21 +00:00
3b45b08cd1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:19 +00:00
8ad2d11c45 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:18 +00:00
35b29fa27c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:17 +00:00
8f09fa4305 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:16 +00:00
b5b245876c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:14 +00:00
b16b052934 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:13 +00:00
b069c94742 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:12 +00:00
03e8bb9e34 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:10 +00:00
bf629028b6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:09 +00:00
3395d3b27d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:08 +00:00
e14357c691 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:07 +00:00
5b071517d5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:06 +00:00
83906f95f7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:04 +00:00
164d5e4e27 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:03 +00:00
1575a75869 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:02 +00:00
963b0d0dfa Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:14:00 +00:00
f65e31fabc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:58 +00:00
d0bc1094b5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:57 +00:00
e927eea9d2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:56 +00:00
db23098f86 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:55 +00:00
0acea56f70 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:54 +00:00
3b1e6031ed Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:53 +00:00
e600110516 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:52 +00:00
52330d8399 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:50 +00:00
b0cc42047c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:49 +00:00
e94654c113 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:48 +00:00
5ed65f685d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:47 +00:00
a997f2fa4b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:46 +00:00
7ff298551b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:45 +00:00
83dc76f9da Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:44 +00:00
603a8f1c72 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:42 +00:00
2618f5bc15 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:41 +00:00
53ed74871d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:40 +00:00
1c2bbaf08e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:39 +00:00
e1001bc697 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:38 +00:00
5e517adbef Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:37 +00:00
823f4a4078 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:36 +00:00
40caeba39e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:35 +00:00
ee4a4afa94 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:34 +00:00
c7fc09061d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:33 +00:00
3292953c6e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:32 +00:00
0c6035f883 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:30 +00:00
d5dec2ce97 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:29 +00:00
db7810ce15 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:28 +00:00
b2657e9c92 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:27 +00:00
48483a2e25 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:26 +00:00
cc2215e75f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:25 +00:00
baf34a96a9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:23 +00:00
c412cb62b4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:22 +00:00
58abc5c6df Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:21 +00:00
0b69dbf4cc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:20 +00:00
0c44c5f90d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:19 +00:00
c1886be4a6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:18 +00:00
832c6c58e0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:16 +00:00
b918b2d54b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:15 +00:00
731f8ef60c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:14 +00:00
23c946dee2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:13 +00:00
4b70c0b1b8 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:11 +00:00
a80a309f6b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:10 +00:00
76b546e0d2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:09 +00:00
e12cbe8a1d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:08 +00:00
53f96e1c12 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:07 +00:00
c6fcc52911 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:05 +00:00
001f689a99 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:04 +00:00
dd63749c5f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:02 +00:00
d0a6a9ba6f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:01 +00:00
3d9224af3c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:13:00 +00:00
2547699573 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:59 +00:00
12d9818809 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:57 +00:00
019c26cbd2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:56 +00:00
a2abda6b07 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:55 +00:00
649d3a13dd Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:54 +00:00
96e8abf5de Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:53 +00:00
2989ad5a81 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:51 +00:00
dc5a6616a4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:50 +00:00
b1e930eafb Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:49 +00:00
c1521a6372 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:48 +00:00
269beaf624 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:47 +00:00
13e5e7cde8 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:45 +00:00
4bbcae399e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:44 +00:00
14899e48d3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:43 +00:00
0e5a2af28e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:42 +00:00
83277217f9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:40 +00:00
4d226ec086 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:39 +00:00
2d41262428 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:38 +00:00
8dfd64f53a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:37 +00:00
ea73d93e8a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:36 +00:00
1e4e023c1c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:35 +00:00
41ecea74c6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:33 +00:00
ac2ff0476b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:32 +00:00
147c1e5050 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:31 +00:00
2a6c7e3a87 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:30 +00:00
5c2ae7b2c4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:28 +00:00
0fed636461 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:28 +00:00
d1772985ab Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:26 +00:00
697315c47f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:25 +00:00
ae802507a3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:24 +00:00
cb69646f9f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:23 +00:00
91a454851c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:22 +00:00
7eb66dd5a4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:20 +00:00
67db32090b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:19 +00:00
45091483a3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:18 +00:00
b4f0e672b3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:17 +00:00
0603a3d6af Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:16 +00:00
0e403e40f7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:15 +00:00
8e857c5d16 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:12:14 +00:00
27f1d35c41 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:35 +00:00
25ab8eb3a5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:34 +00:00
5e11c33d38 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:33 +00:00
8c450b3275 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:32 +00:00
fc8f57dc1e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:31 +00:00
3eba6d66aa Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:30 +00:00
848aae224c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:29 +00:00
5133ee78c9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:27 +00:00
083852cb99 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:26 +00:00
53a7b6a318 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:25 +00:00
ae3a204c7e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:24 +00:00
431b209881 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:23 +00:00
2e2bbff9b0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:22 +00:00
c666b76c2a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:21 +00:00
92f51cc251 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:20 +00:00
a91d88866f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:19 +00:00
f55d2cb472 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:18 +00:00
720276e095 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:17 +00:00
5e3ad11d2a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:15 +00:00
219f706143 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:14 +00:00
9ca4e55cc9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:13 +00:00
254fb1d885 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:12 +00:00
c78fc717af Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:11 +00:00
2512b32b28 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:10 +00:00
b11ad8e295 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:09 +00:00
e9d4d08962 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:08 +00:00
3f9f298838 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:07 +00:00
fe351faefe Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:05 +00:00
e3aa3d8990 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:04 +00:00
5253193596 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:03 +00:00
3001e7c0b2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:01 +00:00
ec436f6e9c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:09:00 +00:00
7872aa608b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:59 +00:00
da801c6eaf Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:57 +00:00
2ebda56c3f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:56 +00:00
a4b2164f7c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:55 +00:00
58bf5a2def Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:54 +00:00
7c33f0b44f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:53 +00:00
bdde4082d7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:52 +00:00
1b90a3e867 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:50 +00:00
d524c5e1d4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:49 +00:00
f01f577792 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:48 +00:00
27ce1c54a5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:47 +00:00
128525d282 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:46 +00:00
32003002ac Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:45 +00:00
94e116c52d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:44 +00:00
c1ba536d03 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:42 +00:00
9b7541ccc3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:41 +00:00
5f3f5baf37 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:40 +00:00
8d12539329 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:39 +00:00
f5719810a4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:38 +00:00
db0cb50deb Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:37 +00:00
2b65de6758 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:36 +00:00
030be683b1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:34 +00:00
14d5ad7f29 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:33 +00:00
531ad91474 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:32 +00:00
d4a490c757 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:31 +00:00
9f15d65490 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:30 +00:00
a2a74e8744 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:29 +00:00
c21e46ddeb Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:27 +00:00
da07d2e445 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:26 +00:00
6dc553fde9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:25 +00:00
f99799a954 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:24 +00:00
9e23e1317c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:23 +00:00
32d774fcd5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:22 +00:00
e207f08083 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:20 +00:00
47a23fed67 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:19 +00:00
c1a763bddc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:18 +00:00
7d30801033 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:17 +00:00
84e8400cb4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:16 +00:00
3e481ba6ab Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:15 +00:00
e33e0077a1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:13 +00:00
75ba8a98cb Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:12 +00:00
0366582790 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:11 +00:00
f689083840 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:10 +00:00
48703f32da Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:09 +00:00
2de2a5d904 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:08 +00:00
a785bff7bc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:07 +00:00
545a23229d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:05 +00:00
1a354517a3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:04 +00:00
d99608dfe0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:03 +00:00
7fd8ff1230 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:02 +00:00
e4f3261e8a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:08:01 +00:00
f76ece3c19 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:07:59 +00:00
61be87a6a0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:07:58 +00:00
32ef4a1135 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:07:57 +00:00
105f6a4b1d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:07:56 +00:00
76487f4782 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:07:55 +00:00
d854dde695 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:07:54 +00:00
0d2ab5ef0f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:07:53 +00:00
eef53a3aaf Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:07:01 +00:00
5cd06f5379 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:59 +00:00
ba653ff7da Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:58 +00:00
8910346aa4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:58 +00:00
d004eb3298 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:57 +00:00
953d506294 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:55 +00:00
2d1a474823 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:54 +00:00
4aaf162b07 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:53 +00:00
55919440aa Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:52 +00:00
def3919e36 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:51 +00:00
23729f436a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:50 +00:00
a498382b27 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:49 +00:00
ef2464809f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:48 +00:00
c5bc923362 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:47 +00:00
b921e79306 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:46 +00:00
7d31a8c951 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:45 +00:00
cbd4217d7d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:44 +00:00
a9a25dbf23 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:43 +00:00
e9d49c9a58 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:42 +00:00
0682aecf37 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:41 +00:00
2637250db2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:40 +00:00
d33628aebd Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:39 +00:00
a80add2939 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:37 +00:00
41de310ee1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:37 +00:00
a6bebfd99c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:35 +00:00
76e4d29876 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:34 +00:00
8ade4a6e05 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:33 +00:00
a6f421a104 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:32 +00:00
8aa7c35368 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:31 +00:00
6c8caf18a8 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:30 +00:00
66986764f8 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:29 +00:00
fa4f2d6714 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:27 +00:00
8f445713f2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:26 +00:00
40fb8f2fa6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:25 +00:00
33d3610337 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:24 +00:00
569ed5fa45 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:22 +00:00
ffb2695771 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:21 +00:00
0b2dad4a11 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:20 +00:00
f2c0f1dbf1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:19 +00:00
1f4d827be0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:18 +00:00
77237f7463 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:17 +00:00
275e79a729 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:17 +00:00
589c24b30c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:15 +00:00
9f7dc4f18b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:14 +00:00
7243cebeb7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:13 +00:00
968080a32f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:12 +00:00
711ae46103 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:11 +00:00
a2bbff1742 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:10 +00:00
2cfc0fbb9e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:09 +00:00
0f5db71fcc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:08 +00:00
ab3cdca6ac Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:07 +00:00
b6b317cf39 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:06 +00:00
a572280a1b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:05 +00:00
0bba7d8660 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:04 +00:00
b83c259bc9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:03 +00:00
275005173e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:02 +00:00
e894d52fb3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:06:00 +00:00
d93f8decd8 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:59 +00:00
d3b0c242da Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:58 +00:00
b198163958 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:57 +00:00
a947ad7169 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:56 +00:00
fb945d1f13 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:55 +00:00
b70d7ffd84 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:54 +00:00
799550985c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:53 +00:00
0507e609d0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:52 +00:00
6e6c57734f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:51 +00:00
3a8001bbf5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:50 +00:00
c5531c9622 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:48 +00:00
5fc1508fbb Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:47 +00:00
5b2176f740 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:47 +00:00
8e0f4bedc1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:45 +00:00
d0a6262774 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:44 +00:00
50c3b59309 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:43 +00:00
382b052b20 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:42 +00:00
a942abb5d8 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:41 +00:00
8d8980a351 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:40 +00:00
9147825a27 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:39 +00:00
a5bfe360bc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:38 +00:00
9b0de5b906 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:36 +00:00
0a961e60f2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:36 +00:00
b56eef73af Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:35 +00:00
c01bf9817e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:34 +00:00
aad8160ddb Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:33 +00:00
01ad9545ef Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:31 +00:00
891226fb3a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:30 +00:00
51df143937 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:29 +00:00
4bd584cc1c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:28 +00:00
2983906b42 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:27 +00:00
9b503f6da4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:26 +00:00
3be92de4da Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:24 +00:00
f2b145fbe3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:23 +00:00
b441195cbf Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:22 +00:00
c680ca48b9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:21 +00:00
3f3f72f1b2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:20 +00:00
d24265e1f7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:19 +00:00
a1debc4b51 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:18 +00:00
3f87848fb0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:16 +00:00
6a5d7bd5c9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:15 +00:00
3e5e94610b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:14 +00:00
8fef2569a6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:13 +00:00
b67e36219b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:12 +00:00
8b9bc53b4b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:11 +00:00
7f0c5bb6d6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:09 +00:00
a624a78e89 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:08 +00:00
2d007bddd6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:07 +00:00
3b0fd1a653 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:06 +00:00
6dfec1ece8 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:05 +00:00
f2f9f1356e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:04 +00:00
8013a8466b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:02 +00:00
1ea2132ae1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:05:01 +00:00
f625656478 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:59 +00:00
97c12ce152 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:58 +00:00
8f4d684054 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:57 +00:00
7345062f82 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:56 +00:00
745334a16a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:55 +00:00
b2ede24091 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:54 +00:00
1c8f09b64c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:53 +00:00
c1c520274f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:52 +00:00
d000fead4c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:51 +00:00
0de0a6d5aa Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:50 +00:00
0e872ab117 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:49 +00:00
528f191d56 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:48 +00:00
ce4ee639d3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:47 +00:00
f810014cb2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:04:46 +00:00
9d51ac3252 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:49 +00:00
a2028e5a97 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:48 +00:00
e9cadbe823 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:47 +00:00
3f799e5d6f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:46 +00:00
8722d4b1b2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:45 +00:00
e653e447c6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:44 +00:00
88c2a9003a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:43 +00:00
739c87dd5e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:42 +00:00
046eb43f56 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:41 +00:00
8c17569d52 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:40 +00:00
0f995e80a9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:39 +00:00
09696b9c10 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:38 +00:00
b6362d895d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:37 +00:00
fc6d7d9b29 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:36 +00:00
4bc1d5939e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:34 +00:00
fb1ec4b879 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:34 +00:00
d3a3fa3c77 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:33 +00:00
72e36fbf76 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:32 +00:00
558ed2306c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:31 +00:00
0e8fbce3ea Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:30 +00:00
b0cecf4b66 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:29 +00:00
314f12f0d4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:27 +00:00
df0d005724 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:26 +00:00
a487adf187 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:25 +00:00
5e40d1c63a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:24 +00:00
304c5172e6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:23 +00:00
23b7b1e80b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:22 +00:00
5bbab6fab5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:21 +00:00
1585c66a2d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:20 +00:00
f57d262d62 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:19 +00:00
69c4b974ef Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:18 +00:00
214433437e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:17 +00:00
de13dc5909 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:16 +00:00
ad34c1d6eb Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:15 +00:00
ac1f5c0c8f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:14 +00:00
475273a71b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:12 +00:00
2f525cb95e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:11 +00:00
9874bd4e21 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:10 +00:00
0212b26047 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:09 +00:00
20da29605b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:08 +00:00
034eab9244 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:07 +00:00
60fc5bcdda Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:06 +00:00
6a80f28c52 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:05 +00:00
13bb0df929 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:04 +00:00
04b4210da2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:03 +00:00
7d03e32f51 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:02 +00:00
4fdbdaedc9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:03:01 +00:00
1cc392bfb2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:59 +00:00
c856fed428 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:58 +00:00
c4a447738e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:57 +00:00
d3b296b587 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:56 +00:00
c678877b59 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:55 +00:00
104f73b7d2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:54 +00:00
135ae7fcfe Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:53 +00:00
9d502807fb Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:52 +00:00
c3581e1b69 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:51 +00:00
3ce9111fa7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:50 +00:00
516e985bd0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:49 +00:00
46c0d054a6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:48 +00:00
392984c5e8 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:47 +00:00
2bc536263e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:46 +00:00
957fb6f312 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:45 +00:00
4dbea36b0f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:44 +00:00
3c67472a8c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:43 +00:00
f6e22cc063 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:42 +00:00
9b4f874307 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:41 +00:00
a054dc878a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:40 +00:00
48e48ecf03 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:39 +00:00
471c451c21 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:38 +00:00
a88793a6ad Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:37 +00:00
3e50cea188 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:36 +00:00
4da0dfbd51 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:35 +00:00
da5eab2f1f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:34 +00:00
78e1187722 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:32 +00:00
bfda8e2e56 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:31 +00:00
5014234817 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:30 +00:00
a185c34d65 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:29 +00:00
8fc4975a9e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:28 +00:00
7414a836e7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:27 +00:00
122f31f4b6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:26 +00:00
b59d8cee90 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:25 +00:00
1db27642af Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:24 +00:00
6f5be6eae9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:23 +00:00
2a7103cdd3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:22 +00:00
af722d6184 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:20 +00:00
2bf0695e9d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:19 +00:00
faf1b4fff1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:18 +00:00
bd59526535 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:17 +00:00
f404e0ef31 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:16 +00:00
a11b547cdc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:02:15 +00:00
1507d10fe5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:26 +00:00
84cc63a038 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:25 +00:00
cbb5244320 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:25 +00:00
809e33bd93 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:24 +00:00
b8f6c82010 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:23 +00:00
4be3583e7b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:22 +00:00
de10442135 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:21 +00:00
44ec4115ea Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:21 +00:00
eb27193b6e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:20 +00:00
cead209507 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:19 +00:00
f2122a7706 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:19 +00:00
88f970547f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:18 +00:00
fc7bfaa089 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:17 +00:00
234aee88e2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:17 +00:00
33a761413c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:16 +00:00
db76be28e3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:15 +00:00
62a64bcadc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:15 +00:00
3d69d5b814 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:14 +00:00
850d9bb6c5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:13 +00:00
89f02eeda5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:12 +00:00
cba2ad4052 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:12 +00:00
f566b64a4e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:11 +00:00
9e5070e4c7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:10 +00:00
d95c52e27a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:10 +00:00
051e01b1d5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:09 +00:00
4261ec5ed0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:08 +00:00
98bc5f8027 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:08 +00:00
ccdc19f576 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:07 +00:00
84e6416ca1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:06 +00:00
368561c08a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:06 +00:00
3de397f595 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:05 +00:00
700d367666 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:04 +00:00
a384996942 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:04 +00:00
81f0c9411c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:03 +00:00
cbdea4a66a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:02 +00:00
752c1ebe59 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:01 +00:00
f77ab77c0b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:00 +00:00
71d223259b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:01:00 +00:00
a69b413c5b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:59 +00:00
daafc7c705 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:58 +00:00
52b130631c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:57 +00:00
01594ba32b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:57 +00:00
9015195fb9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:56 +00:00
6d07bc4c06 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:55 +00:00
acf12b508b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:55 +00:00
b7a2c4ea2f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:54 +00:00
4399a06c37 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:54 +00:00
5ee5d4f5cd Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:53 +00:00
256c5679c7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:52 +00:00
45bfc361f7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:52 +00:00
0ecbc9213c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:51 +00:00
63dc434824 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:50 +00:00
3e1a94eaed Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:50 +00:00
68ce996d7b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:49 +00:00
89d5846a15 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:48 +00:00
7f76c2d7e7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:47 +00:00
1326d21dfa Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:47 +00:00
b37e8a0f7a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:46 +00:00
8f629981ce Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:45 +00:00
beace16323 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:45 +00:00
e19464e2a8 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:44 +00:00
008ca2b8a7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:43 +00:00
6e56dc2437 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:43 +00:00
a09d856ddb Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:42 +00:00
9a69aa7709 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:41 +00:00
0254cac7fc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:40 +00:00
bc629b414c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:40 +00:00
8f69ab2665 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:39 +00:00
01514c86c9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:39 +00:00
ca1f963db1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:38 +00:00
5fd44a1ae0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:37 +00:00
284e2939f5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:37 +00:00
70d43d34ca Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:36 +00:00
8425e51ca4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:35 +00:00
4994547440 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:34 +00:00
2fbf03f179 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:34 +00:00
2e1a1fbe03 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:33 +00:00
dd5c59c645 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:32 +00:00
3e88c5783b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:32 +00:00
0a63809482 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:31 +00:00
743b002387 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:30 +00:00
79fe584847 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:30 +00:00
63d6a65f65 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:29 +00:00
d20f9916f3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:29 +00:00
285397f44b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:28 +00:00
5d7a1983f9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:27 +00:00
8cb7ce7d65 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:26 +00:00
2b78518c30 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:26 +00:00
b6be57e58f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:25 +00:00
e225ff2780 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:24 +00:00
b98f7b4769 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:24 +00:00
795d6e7d9d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:23 +00:00
100198bd1f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:22 +00:00
23a254a556 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:21 +00:00
12edb222fe Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:21 +00:00
e8ba8fa737 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:20 +00:00
b4322a0037 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:19 +00:00
4ad5be42ac Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:19 +00:00
36edebf085 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:18 +00:00
fed7367831 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:17 +00:00
f2733d5329 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:16 +00:00
bb090554de Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:15 +00:00
42a7238060 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:14 +00:00
f9df23afbd Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:13 +00:00
81e9e5a672 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:12 +00:00
c7d69b60ae Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:11 +00:00
a2f9f9b7c5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:10 +00:00
32431d413c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:09 +00:00
cfa3b92440 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:09 +00:00
d84b02bbd3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:08 +00:00
55c7f73cf0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:07 +00:00
0ca0df7b4d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:06 +00:00
57d989b675 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:05 +00:00
de9e8736a2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:04 +00:00
c404a4666b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:02 +00:00
25707d453f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:01 +00:00
39099edaf2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 15:00:00 +00:00
284678d009 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:59 +00:00
30c49600c4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:59 +00:00
a3dbb7e17b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:58 +00:00
6008b2dc05 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:57 +00:00
829ad64e09 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:56 +00:00
25043fe102 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:56 +00:00
88686ff2c3 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:55 +00:00
12abc05f7d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:54 +00:00
aefa4babca Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:54 +00:00
c62fd5ecfa Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:53 +00:00
7eb7f7ea8e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:52 +00:00
d9fe73f32b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:52 +00:00
e7824591a7 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:51 +00:00
b05fc21d36 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:51 +00:00
d93328bf86 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:50 +00:00
f4ccfb22ac Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:49 +00:00
0113a319f4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:48 +00:00
0ee6d65498 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:48 +00:00
86de2d1eb9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:47 +00:00
db3ab398e9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:47 +00:00
cc3bcd9819 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:46 +00:00
7230f7788f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:45 +00:00
bb433c6f46 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:44 +00:00
b3883d85d5 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:44 +00:00
65e8752498 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:43 +00:00
6327aefce2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:42 +00:00
be499f838f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:41 +00:00
5a4e74189a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:41 +00:00
071b72038c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:40 +00:00
43e08cbef1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:39 +00:00
3acbb098bc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:39 +00:00
01ea86d870 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:38 +00:00
022900429a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:37 +00:00
f468d2f4fd Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:37 +00:00
7e8d4e2128 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:36 +00:00
c5bd3349f8 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:35 +00:00
1185f5ea8b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:35 +00:00
eeb9acdef1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:34 +00:00
71924556d6 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:33 +00:00
437bf1914f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:33 +00:00
2247a2b2aa Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:32 +00:00
142ef0ddd2 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:31 +00:00
a6ef031a85 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:31 +00:00
1201b65d40 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:30 +00:00
0e58a32f10 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:30 +00:00
1ac96b414e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:29 +00:00
1f2b9fbed1 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:28 +00:00
d491d1fc0b Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:28 +00:00
2475691c4e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:27 +00:00
87d4426b3d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:26 +00:00
0ecc6a5a18 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:26 +00:00
844bc6c148 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:25 +00:00
66dfe1c5e4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:24 +00:00
150ecdf120 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:23 +00:00
aad3d4bd50 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:23 +00:00
6cc75e639c Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:22 +00:00
a628c83a90 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:20 +00:00
40dfe0fccc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:19 +00:00
215e5b1677 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:18 +00:00
cd5eda9df9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:17 +00:00
cad8f0a19d Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:16 +00:00
8563621d65 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:15 +00:00
86fce55c97 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:14 +00:00
86d61ed1a0 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:12 +00:00
fbacd499dc Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:11 +00:00
ccb8b3d268 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:10 +00:00
1773ce4444 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:10 +00:00
c2517abff9 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:09 +00:00
e87775affa Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:08 +00:00
cc5c04d5da Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:07 +00:00
a18cbbf49a Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:07 +00:00
ee3e8edfa8 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:06 +00:00
79b3210bda Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:05 +00:00
9580b1f29e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:04 +00:00
04a7bbbda8 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:04 +00:00
c6857b850e Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:03 +00:00
48a025302f Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:02 +00:00
38246e90ee Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:01 +00:00
7e1e94d165 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:59:00 +00:00
aa83112e71 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:58:59 +00:00
044fec0d50 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:58:58 +00:00
e32318b2ad Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:58:58 +00:00
e742c77d12 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:58:57 +00:00
20ed701fec Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:58:56 +00:00
e1e2481bbb Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:58:55 +00:00
015696e7c4 Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:58:54 +00:00
d318a5a9ec Tower: upload laundry_management 19.0.19.0.4 (via marketplace) 2026-05-01 14:58:54 +00:00
d802d63444 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:27:00 +00:00
7decda722d Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:59 +00:00
4a8b911529 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:58 +00:00
435650436c Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:57 +00:00
7eb8ce5eba Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:57 +00:00
45ab562a84 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:56 +00:00
1cd28a15b5 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:55 +00:00
be15835a67 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:54 +00:00
0043ea605b Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:53 +00:00
a9d9132707 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:53 +00:00
968f881838 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:52 +00:00
6e5863b6f0 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:50 +00:00
f096aad827 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:50 +00:00
75afd665b8 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:49 +00:00
2f8a31ca87 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:48 +00:00
02c94565a6 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:45 +00:00
2eaabfca59 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:44 +00:00
c300658c45 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:43 +00:00
ffd3540da7 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:41 +00:00
af57c49e0c Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:40 +00:00
3cb908e43a Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:39 +00:00
b9763d1cab Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:38 +00:00
3081b1727e Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:36 +00:00
795a79e2de Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:36 +00:00
622d469902 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:35 +00:00
0d3d9fd659 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:34 +00:00
0624e3329d Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:34 +00:00
d37effb75e Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:33 +00:00
5d6cbe8712 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:32 +00:00
7da2508ad5 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:32 +00:00
e84b5fc21c Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:31 +00:00
302b4e2086 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:30 +00:00
8979652c30 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:29 +00:00
cd5e49cad6 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:28 +00:00
aceab86bd0 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:28 +00:00
ac0562565d Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:27 +00:00
dea9410bff Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:26 +00:00
321300cb96 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:25 +00:00
fe85d4a831 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:25 +00:00
d96900edcd Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:24 +00:00
506f0f11c4 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:23 +00:00
ae32f463b7 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:22 +00:00
4df8ed7aca Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:22 +00:00
4319b86036 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:21 +00:00
af9f7335fe Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:19 +00:00
6dd9422d13 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:16 +00:00
c161cf6911 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:16 +00:00
55a84c282b Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:15 +00:00
5ef1cc0aed Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:14 +00:00
c774c5b9ed Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:13 +00:00
03914adbd3 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:13 +00:00
f944dc402e Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:12 +00:00
41a2fb8e87 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:11 +00:00
d98c59977c Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:10 +00:00
5635da77ea Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:09 +00:00
f566e6ebc0 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:09 +00:00
7ac4617819 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:08 +00:00
e5a427556a Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:07 +00:00
eadaacc266 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:06 +00:00
94c1637d10 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:05 +00:00
3f9d72c4fe Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:05 +00:00
00bdf183bb Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:04 +00:00
0b5452b9ef Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:03 +00:00
603e4a5a7a Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:02 +00:00
2682634640 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:02 +00:00
5bac29e608 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:01 +00:00
0b34ccfe0b Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:26:00 +00:00
4d9163364b Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:59 +00:00
64aa4f4cd8 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:59 +00:00
10755bf441 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:58 +00:00
95cb5d6eb5 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:57 +00:00
bd05b6f737 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:57 +00:00
90bfd7cd31 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:56 +00:00
6aebd3a480 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:54 +00:00
fa5a12e8b7 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:52 +00:00
a4f1c765d0 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:52 +00:00
6809c236c3 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:51 +00:00
53dd954217 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:50 +00:00
525f4160a7 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:49 +00:00
f9f462b129 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:49 +00:00
1f55211ecd Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:48 +00:00
db8ff1ab76 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:47 +00:00
98fb9f325e Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:47 +00:00
0811265bc1 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:46 +00:00
4357f1842a Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:45 +00:00
3a54c60b51 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:45 +00:00
c79cf90797 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:44 +00:00
11573d49d4 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:43 +00:00
15fc7bb78b Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:42 +00:00
e92df10e2b Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:41 +00:00
b49af826f3 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:41 +00:00
a95c2da928 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:40 +00:00
c04db924cc Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:39 +00:00
c2ff38fd10 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:38 +00:00
3b51b7e059 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:38 +00:00
473f603fee Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:37 +00:00
03136df83e Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:36 +00:00
7c3e66de7c Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:36 +00:00
50b4c9349a Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:35 +00:00
dab6e99136 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:34 +00:00
2a74c6981c Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:34 +00:00
bbf0e0ede6 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:33 +00:00
107b28dd6b Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:32 +00:00
45d4562015 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:32 +00:00
0305486fc0 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:31 +00:00
92ce1ad080 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:30 +00:00
465f081a01 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:29 +00:00
a7bfa330d5 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:29 +00:00
c4116b0001 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:28 +00:00
d724678c31 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:26 +00:00
7b6bc7c32c Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:26 +00:00
14006bf8b6 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:25 +00:00
16ffcf64c9 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:24 +00:00
16c7dfa4c7 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:23 +00:00
a5bc3df00b Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:22 +00:00
c3697aa775 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:21 +00:00
0545a5e27f Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:20 +00:00
d4140f6046 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:20 +00:00
4e83a19734 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:19 +00:00
90d255d5b7 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:18 +00:00
fde08f1a51 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:17 +00:00
367c39cd19 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:16 +00:00
1fe1b890f7 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:16 +00:00
039f0b9679 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:14 +00:00
b59bf760fc Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:13 +00:00
254a5edeb1 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:12 +00:00
e1cd635b2b Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:11 +00:00
fd488f3611 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:11 +00:00
936141a47c Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:10 +00:00
00ad28e7e5 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:09 +00:00
133d01f1bc Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:08 +00:00
2bc961a7f6 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:08 +00:00
2763df5b85 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:07 +00:00
c70fc08d8a Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:06 +00:00
fb315401ed Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:04 +00:00
7426af0136 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:03 +00:00
7d4ce79754 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:02 +00:00
76c842ad49 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:01 +00:00
c5b643b175 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:00 +00:00
7be3e6fc46 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:25:00 +00:00
3768d57ef1 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:24:59 +00:00
79a1fc6302 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:24:58 +00:00
cfae5c1e6e Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:24:57 +00:00
ee86816a05 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:24:57 +00:00
3e5625c49a Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:24:56 +00:00
aad046ad01 Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:24:56 +00:00
8b0ce6857d Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace) 2026-05-01 14:24:55 +00:00
0a00df7d8f Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:27 +00:00
0b04773828 Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:26 +00:00
0bfcfc8e5e Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:26 +00:00
6569b22484 Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:25 +00:00
6c99447b98 Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:25 +00:00
6c2975aa2c Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:24 +00:00
8a323969dd Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:23 +00:00
6adfee8522 Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:22 +00:00
94e5c2bc26 Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:21 +00:00
a730c30313 Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:21 +00:00
0f9842a4e4 Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:19 +00:00
d48cd0eb4f Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:19 +00:00
d051b7eb77 Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:18 +00:00
229fb1c9d1 Tower: upload om_account_budget 1.0.1 (via marketplace) 2026-05-01 14:21:17 +00:00
88db33f912 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:16 +00:00
ebe40db835 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:16 +00:00
982454b2f5 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:15 +00:00
9335bc4eda Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:14 +00:00
b7b2b72379 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:14 +00:00
68401a1cf2 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:13 +00:00
01e8d981aa Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:12 +00:00
c6b769d7eb Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:11 +00:00
b0b87268fa Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:11 +00:00
434512a7c0 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:10 +00:00
8fe8aa6bbf Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:09 +00:00
65e232de2b Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:08 +00:00
071bfcf31d Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:08 +00:00
568f9daaf1 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:07 +00:00
127b7cb233 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:06 +00:00
4142021d85 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:05 +00:00
12d115d1fc Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:05 +00:00
7766e1a3a5 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:04 +00:00
76fa65609b Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:03 +00:00
87315fbf30 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:02 +00:00
ed7fe289fc Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:02 +00:00
6540dbff99 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:01 +00:00
60c245b407 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:21:00 +00:00
8ffa385b1f Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:20:59 +00:00
fd0a5a358a Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:20:59 +00:00
08dd515517 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:20:58 +00:00
7cef065bde Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:20:57 +00:00
7ade9aae03 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:20:57 +00:00
532efc8a07 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:20:56 +00:00
10719628e3 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:20:55 +00:00
b8b2528b12 Tower: upload om_account_daily_reports 1.0.1 (via marketplace) 2026-05-01 14:20:55 +00:00
aa4221b2fe Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:54 +00:00
261c16061f Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:53 +00:00
184c88df09 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:53 +00:00
4072474ee3 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:52 +00:00
65145b21fa Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:51 +00:00
6f4831e613 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:50 +00:00
dc4bf9e012 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:49 +00:00
ef5398f5fb Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:49 +00:00
791818fd64 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:48 +00:00
3b08defcc3 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:48 +00:00
d3cf19c3f4 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:47 +00:00
70f019ae37 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:46 +00:00
630fb5358a Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:45 +00:00
b5722ae417 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:45 +00:00
8cd7052a63 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:44 +00:00
dbe0ea924c Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:43 +00:00
7953e4b50f Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:42 +00:00
4315e14697 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:41 +00:00
6e032ba798 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:41 +00:00
c577f33a97 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:40 +00:00
b0327f442e Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:39 +00:00
fbd39e10d6 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:39 +00:00
b18d61edc4 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:38 +00:00
f20f658a5f Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:37 +00:00
88f06ae627 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:37 +00:00
5f076d37de Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:36 +00:00
054ec9151d Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:35 +00:00
7cbd9ab842 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:35 +00:00
79943927dd Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:34 +00:00
6c9c36663e Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:33 +00:00
6b30fe12d0 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:33 +00:00
9ef85d0aa9 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:32 +00:00
7c3def72d6 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:31 +00:00
481c83dce4 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:30 +00:00
7210ca1ffd Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:30 +00:00
d832e40e73 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:29 +00:00
e3db68618d Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:28 +00:00
a031cefe86 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:28 +00:00
e57e734c40 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:27 +00:00
17b7a9432c Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:26 +00:00
2dadde64d2 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:25 +00:00
2d4e7b3ee2 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:25 +00:00
617e1ddd42 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:24 +00:00
926206c4a7 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:23 +00:00
8b6041cd3d Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:22 +00:00
593267811f Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:21 +00:00
9728383428 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:21 +00:00
194babdf41 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:20 +00:00
6f78e2e524 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:19 +00:00
b04f780820 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:18 +00:00
fd396fe299 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:18 +00:00
0670fe453d Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:17 +00:00
fbfa62ad9a Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:16 +00:00
f4d652059c Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:16 +00:00
72f3aa1ab6 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:15 +00:00
13f6bc6f40 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:14 +00:00
8408279160 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:13 +00:00
ef666a5685 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:13 +00:00
0958b0a64c Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:12 +00:00
d238e31685 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:11 +00:00
1e5abc888e Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:10 +00:00
96a6b7bb1f Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:10 +00:00
d4f016e8a0 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:09 +00:00
99f0c26c35 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:08 +00:00
06d20d0ff0 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:08 +00:00
faac65cddb Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:07 +00:00
cbc4503466 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:06 +00:00
cf972bf291 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:05 +00:00
ebaf474567 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:05 +00:00
bb7f341d77 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:03 +00:00
94189882f7 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:02 +00:00
50a789be28 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:02 +00:00
782012f925 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:01 +00:00
b5fe6ea753 Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:20:00 +00:00
f212637b6a Tower: upload accounting_pdf_reports 1.0.2 (via marketplace) 2026-05-01 14:19:59 +00:00
0957153883 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:58 +00:00
4ddb63b195 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:58 +00:00
8d07a37483 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:57 +00:00
6eed23c19a Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:56 +00:00
fd961a3017 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:55 +00:00
9535a8ad6e Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:55 +00:00
fd0e041e2b Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:54 +00:00
5732bcb409 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:53 +00:00
2c0871abd1 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:53 +00:00
37ffda207c Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:52 +00:00
369070c0fd Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:51 +00:00
822fbaad04 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:51 +00:00
f504f7cc7a Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:50 +00:00
bdaef9f2e7 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:50 +00:00
5ec6423f44 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:49 +00:00
d7e283d902 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:48 +00:00
57ced67409 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:48 +00:00
13723c9273 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:47 +00:00
3be0ea0f7b Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:46 +00:00
ca13d7d3f4 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:46 +00:00
be4975f356 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:45 +00:00
cb006a7a44 Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:44 +00:00
a9dc3dcffa Tower: upload om_recurring_payments 1.0.0 (via marketplace) 2026-05-01 14:19:44 +00:00
885bb255ae Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:43 +00:00
fb7d82d2f8 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:42 +00:00
b35236833f Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:42 +00:00
188e732c27 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:41 +00:00
85a037b7b0 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:40 +00:00
6b4864d8f4 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:40 +00:00
c345f88fb7 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:39 +00:00
dd601d2041 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:38 +00:00
d528c4e8b0 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:37 +00:00
37e7e78579 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:37 +00:00
50ffe3acbf Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:36 +00:00
fe054eb766 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:36 +00:00
d726ee0742 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:35 +00:00
63a2854905 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:34 +00:00
94c47c1d64 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:33 +00:00
99decef40e Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:33 +00:00
2144d6510b Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:32 +00:00
3bc963d086 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:31 +00:00
b0208802cb Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:30 +00:00
7c70894890 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:30 +00:00
b34d911271 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:29 +00:00
afadba60cd Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:28 +00:00
dc9bae18b5 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:28 +00:00
a9da9289b1 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:27 +00:00
9ffa32624c Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:26 +00:00
0028b496e1 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:26 +00:00
11d2704508 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:25 +00:00
f2f9e89a95 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:24 +00:00
cbf21b7ab8 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:23 +00:00
73c3e87596 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:23 +00:00
4597627bbf Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:22 +00:00
2a7f8d8700 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:21 +00:00
976dbf28ec Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:20 +00:00
5be3f70d33 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:20 +00:00
32afc8987c Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:19 +00:00
36eccf478e Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:18 +00:00
afe157d626 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:17 +00:00
c1946aed03 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:17 +00:00
c4243349e5 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:16 +00:00
50f5ca329f Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:16 +00:00
94acef514f Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:15 +00:00
d64353f256 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:14 +00:00
2c6e58c58b Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:13 +00:00
222c0cadf0 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:13 +00:00
35e695d9c3 Tower: upload om_account_accountant 1.0.3 (via marketplace) 2026-05-01 14:19:12 +00:00
b2efe86375 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:35 +00:00
9d9b59c5d3 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:34 +00:00
e8ffe910ee Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:34 +00:00
727fc0e844 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:33 +00:00
f7982d1a0e Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:32 +00:00
ee132a00a2 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:31 +00:00
1861912af3 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:31 +00:00
b86139b373 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:30 +00:00
b8c54e3f8e Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:29 +00:00
1b57e46bb1 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:28 +00:00
dd948951db Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:27 +00:00
3bd6e77fa2 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:27 +00:00
193600db34 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:26 +00:00
3d2024ab9f Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:25 +00:00
2c163771d4 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:24 +00:00
26f24c3022 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:23 +00:00
f61e5f7e77 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:23 +00:00
3391a4c864 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:21 +00:00
48ad67fc95 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:21 +00:00
cb0fcf1b06 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:20 +00:00
2e42407d45 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:19 +00:00
695188ae0f Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:18 +00:00
9df8e641fd Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:18 +00:00
20806189b9 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:17 +00:00
e85bcbd0a1 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:16 +00:00
a9ab2991d7 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:15 +00:00
9dca096734 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:14 +00:00
657f3e4fb4 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:13 +00:00
80bbd23379 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:12 +00:00
50ce4f41a2 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:11 +00:00
d57b15f9dd Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:11 +00:00
db8cd58f31 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:10 +00:00
f0745cda51 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:09 +00:00
6752ab966e Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:09 +00:00
8ddc02a7c8 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:08 +00:00
db033c9d8b Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:07 +00:00
d97e5cecb2 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:06 +00:00
46ab5fa005 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:06 +00:00
147f237c6f Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:05 +00:00
a488d64cb3 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:04 +00:00
6b5ccf1604 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:03 +00:00
516e1a3bb4 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:03 +00:00
4c42f51869 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:02 +00:00
9d8cbe6868 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:01 +00:00
23dace1045 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:58:00 +00:00
c2cb157124 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:59 +00:00
070f8187f1 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:58 +00:00
b4f4024174 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:58 +00:00
91e6814c2f Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:57 +00:00
ef39e07904 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:56 +00:00
71d4b51e09 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:55 +00:00
1a83db992c Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:55 +00:00
76ce02f7fa Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:54 +00:00
4de59a7674 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:53 +00:00
dc0417b263 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:52 +00:00
5684de0fbc Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:51 +00:00
3fae6c3b2d Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:51 +00:00
9a89e53ec4 Tower: upload bi_print_journal_entries 19.0.0.0 (via marketplace) 2026-05-01 13:57:50 +00:00
605 changed files with 4809 additions and 134620 deletions

View File

@@ -1,60 +0,0 @@
============
Cetmix Tower
============
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:e6c57b8f0bfeb65328c359735e0e2b0fcdb4852bc9bff24afaa5ae2cbab95658
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-cetmix%2Fcetmix--tower-lightgray.png?logo=github
:target: https://github.com/cetmix/cetmix-tower/tree/18.0/cetmix_tower
:alt: cetmix/cetmix-tower
|badge1| |badge2| |badge3|
This is a technical module that allows to get `Cetmix
Tower <https://cetmix.com/tower>`__ modules from the `Odoo App
Store <https://apps.odoo.com>`__.
It's designed to install all the `Cetmix
Tower <https://cetmix.com/tower>`__ modules at once.
**Table of contents**
.. contents::
:local:
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/cetmix/cetmix-tower/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/cetmix/cetmix-tower/issues/new?body=module:%20cetmix_tower%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
-------
* Cetmix
Maintainers
-----------
This module is part of the `cetmix/cetmix-tower <https://github.com/cetmix/cetmix-tower/tree/18.0/cetmix_tower>`_ project on GitHub.
You are welcome to contribute.

View File

@@ -1,22 +0,0 @@
# Copyright Cetmix OU
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Cetmix Tower",
"summary": "Odoo SAAS Server Application Management",
"version": "18.0.1.0.0",
"development_status": "Beta",
"category": "Productivity",
"website": "https://tower.cetmix.com",
"live_test_url": "https://tower.cetmix.com/download",
"images": ["static/description/banner.png"],
"author": "Cetmix",
"license": "AGPL-3",
"application": True,
"installable": True,
"depends": [
"cetmix_tower_server",
"cetmix_tower_server_queue",
"cetmix_tower_git",
"cetmix_tower_webhook",
],
}

View File

@@ -1,13 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

View File

@@ -1,3 +0,0 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@@ -1,3 +0,0 @@
This is a technical module that allows to get [Cetmix Tower](https://cetmix.com/tower) modules from the [Odoo App Store](https://apps.odoo.com).
It's designed to install all the [Cetmix Tower](https://cetmix.com/tower) modules at once.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 96 KiB

View File

@@ -1,435 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 756 322.5" style="enable-background:new 0 0 756 322.5;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#FFFFFF;stroke:#FFFFFF;stroke-width:0.75;stroke-miterlimit:10;}
</style>
<g>
<g>
<g>
<path class="st0" d="M447.2,121.7c-2,1.6-4.7,2.9-8.3,3.9c-3.6,1-6.8,1.6-9.6,1.6c-10.9,0-19.5-2.8-25.8-8.3s-9.4-13.3-9.4-23.5
V53.7h-11.8V35.6H394V14.7l23.5-4.2v25.1h16l0.2,18l-16.2,0.1v37.4c0,4.6,1.1,8.4,3.3,11.3c2.2,3,5.4,4.5,9.7,4.5
c1.6,0,3.2-0.2,4.8-0.5c1.6-0.4,3.2-1,4.9-1.8L447.2,121.7z"/>
</g>
<g>
<path class="st0" d="M536.3,49.4c3.8-4.3,8.8-7.6,15-10.1c6.3-2.5,11.8-3.7,16.8-3.7c12,0,20.6,3.5,25.6,10.5
c5.1,7.1,7.6,15.6,7.6,25.8v55.2h-23.9v-54c0-5.6-1.3-9.9-4-12.8s-6.6-4.5-11.6-4.5c-3.4,0-7,0.9-10.7,2.7s-7.2,3.9-10.3,6.2
c0.1,1.2,0.2,2.4,0.4,3.7c0.1,1.2,0.2,2.4,0.2,3.7v55.2h-23.9V73.1c0-5.6-1.3-9.9-4-12.8s-6.5-4.5-11.4-4.5
c-3.1,0-6.1,0.6-9.2,1.9c-3.1,1.3-6.1,2.9-8.9,4.8v64.7h-23.7V39l23.3-3v7c3-2,5-3,9.4-4.5c5.7-1.9,10.7-3,15.2-3
c7,0,12.7,1.2,17.3,3.7C530.1,41.8,533.7,45.2,536.3,49.4z"/>
</g>
<g>
<path class="st0" d="M634.8,0c3.8,0,7,1.3,9.6,3.8c2.6,2.6,3.9,5.7,3.9,9.5s-1.3,6.9-3.9,9.5c-2.6,2.6-5.8,3.8-9.6,3.8
c-3.7,0-6.8-1.3-9.3-3.8c-2.6-2.6-3.8-5.7-3.8-9.5s1.3-6.9,3.8-9.5C628.1,1.3,631.2,0,634.8,0z M646.9,36l-0.2,91.1H623L622.9,36
H646.9z"/>
</g>
<g>
<path class="st0" d="M659.4,127.2l34.1-45.3l-32.8-45.8h25.8l21,29.9l21.9-29.9H756l-34.5,45.8l31.6,45.3H727l-20.5-28.4
l-20.9,28.4H659.4z"/>
</g>
<g>
<path class="st0" d="M198.4,81.5c0-26.6,19.5-45.5,46.7-45.5c18,0,29,7.8,34.8,15.6l-15.1,14c-4.2-6.1-10.5-9.4-18.6-9.4
c-14,0-23.9,10.1-23.9,25.2s9.9,25.4,23.9,25.4c8.1,0,14.4-3.6,18.6-9.4l15.1,13.8c-5.9,8.1-16.7,15.8-34.8,15.8
C217.9,127.2,198.4,108.3,198.4,81.5z"/>
</g>
<g>
<path class="st0" d="M289.4,81.5c0-25.2,18.8-45.5,45.6-45.5c26.3,0,44.1,19.4,44.1,47.8v5.1h-65.5c1.5,10.9,10.4,20.1,25.3,20.1
c7.5,0,17.8-3.2,23.5-8.7l10.3,14.7c-8.8,7.9-22.6,12-36.2,12C309.6,127.2,289.4,109.4,289.4,81.5z M334.8,54.2
c-14.4,0-20.6,10.6-21.7,19.2h43.4C356,65.2,350.2,54.2,334.8,54.2z"/>
</g>
</g>
<g>
<g>
<path class="st0" d="M92.3,91.5c0.6,0.3,0.7,1,0.2,1.5c-3.1,2.8-6.6,5.2-10.3,7.1c-6.6,3.2-13.7,4.8-20.9,4.7
c-7.2-0.3-14.2-2.2-20.3-5.7s-11.2-8.5-14.9-14.3s-5.8-12.5-6.4-19.3c-0.4-6.8,0.8-13.6,3.5-19.7c1.4-3,3.1-5.9,5.2-8.5
s4.5-4.9,7.1-7c5.2-4,11.3-6.7,17.7-7.8C46.9,24,41,27.1,36.4,31.4c-2.4,2.1-4.5,4.5-6.2,7.1c-1.8,2.6-3.1,5.5-4.3,8.4
c-2.1,5.8-2.7,12-1.9,18.1c0.9,6.1,3.3,11.7,6.8,16.6c3.6,4.8,8.3,8.7,13.6,11.2s11.1,3.6,16.9,3.4c5.8-0.3,11.3-2,16.2-4.9
c1.9-1.2,3.7-2.5,5.4-4c0.3-0.2,0.7-0.3,1-0.1L92.3,91.5z"/>
</g>
<g>
<path class="st0" d="M110.3,107.7c0.4,0.4,0.3,1.1-0.1,1.5c-0.2,0.2-0.4,0.4-0.6,0.6c-2.6,2.3-5.4,4.5-8.3,6.4s-6,3.6-9.2,5
s-6.5,2.6-9.8,3.5c-13.3,3.7-27.7,2.9-40.4-1.9s-23.8-13.5-31.3-24.7C3.2,86.8-0.4,73.5,0,60.3c0.5-13.1,5.2-26,13.1-36.1
C21.2,14,32.3,6.5,44.5,3C56.8-0.6,70-0.2,81.8,4c5.9,2.1,11.4,5.1,16.3,8.9c5,3.7,9.3,8.3,12.7,13.2c-3.8-4.8-8.3-9.1-13.3-12.4
S87,7.7,81.1,6c-11.5-3.4-24-2.9-35.3,1S24.9,18.4,18.3,28c-6.7,9.6-10.2,21.1-9.9,32.4c0.2,11.3,4.1,22.5,10.8,31.5
c6.7,8.9,16.2,15.5,26.7,18.8s21.9,3.1,32-0.3c8.2-2.7,15.4-7.5,21.2-13.5c0.4-0.4,1.1-0.5,1.5-0.1c0.6,0.6,1.3,1.3,1.8,2
C102.6,98.6,108.3,105.4,110.3,107.7z"/>
</g>
<g>
<path class="st0" d="M149.8,41l-35.6,43.5l2,4.1l4.1,8.6c0.7,1.5,0.4,3.3-0.8,4.5l-2.9,2.7c-0.2,0.2-0.4,0.2-0.7,0.2
c-0.1,0-0.2-0.1-0.3-0.2c0,0-0.1,0-0.1-0.1l-7.9-9.4c-0.8-0.9-1.6-1.8-2.5-2.6c-0.7-0.6-1.3-1.2-2.1-1.8c-1.4-1.1-3-2.2-4.6-3
c-0.2-0.2-0.5-0.3-0.8-0.4l-9.1-4.8l-1.7-0.9c-0.4-0.2-0.5-0.6-0.3-1l2-3.4c0.9-1.5,2.6-2.2,4.2-1.8l13.7,3.1l13.9-18L91.8,47.8
c-0.4-0.2-0.5-0.7-0.3-1l4.5-5.6c1.8-2.3,4.8-3.4,7.7-3l30.2,5.1l7.5-9.6c1.7-2.2,3.9-3.9,6.4-5l3.5-1.5c0.5-0.2,1-0.2,1.4-0.1
c0.3,0.1,0.5,0.2,0.7,0.3l0,0c0.5,0.4,0.9,1.2,0.7,2l-0.6,3.7C152.9,36,151.7,38.7,149.8,41z"/>
</g>
<g>
<g>
<path class="st0" d="M155.2,85.4l-4.5,5.6c-0.2,0.2-0.5,0.3-0.7,0.2c-0.1,0-0.3-0.1-0.4-0.2l-17.2-23.3l13.3-16.1l10.5,25.7
C157.5,79.9,157,83,155.2,85.4z"/>
</g>
</g>
</g>
</g>
<g>
<path class="st0" d="M397.4,241.7c-15.1,0-27.3-12.3-27.3-27.3s12.3-27.3,27.3-27.3c15.1,0,27.3,12.3,27.3,27.3l0,0
C424.7,229.5,412.4,241.7,397.4,241.7z M397.4,230.4c8.9,0,16-7.2,16-16c0-8.8-7.2-16-16-16c-8.9,0-16,7.2-16,16
C381.4,223.2,388.5,230.4,397.4,230.4z M340.2,241.7c-15.1,0-27.3-12.3-27.3-27.3s12.3-27.3,27.3-27.3c15.1,0,27.3,12.3,27.3,27.3
l0,0C367.5,229.5,355.3,241.7,340.2,241.7z M340.2,230.4c8.9,0,16-7.2,16-16c0-8.8-7.2-16-16-16c-8.9,0-16,7.2-16,16
C324.2,223.2,331.3,230.4,340.2,230.4z M310.3,214.1c0,15.3-12.3,27.7-27.3,27.7s-27.3-12.4-27.3-27.7s11.1-27,27.3-27
c6,0,11.5,1.2,16,4.6v-15.8c0-3,2.7-5.5,5.7-5.5s5.7,2.5,5.7,5.5V214.1z M282.9,230.4c8.9,0,16-7.2,16-16c0-8.8-7.2-16-16-16
c-8.9,0-16,7.2-16,16C266.9,223.2,274.1,230.4,282.9,230.4z"/>
</g>
<g>
<path class="st0" d="M225.7,241.7c-15.1,0-27.3-12.3-27.3-27.3s12.3-27.3,27.3-27.3s27.3,12.3,27.3,27.3l0,0
C253.1,229.5,240.9,241.7,225.7,241.7z M225.7,230.4c8.9,0,16-7.2,16-16c0-8.8-7.2-16-16-16c-8.9,0-16,7.2-16,16
C209.7,223.2,216.9,230.4,225.7,230.4z"/>
</g>
<g>
<g>
<path class="st0" d="M547.4,229.9c0.1,0,0.2,0,0.4,0c0.1,0,0.2,0.1,0.1,0.1v0.1c0,3.8,0,7.6,0,11.4c0,0.1,0,0.1,0,0.1
c-0.9,0-1.8,0-2.7,0c0-0.1,0-0.2,0-0.2c0-3.7,0-7.4,0-11.1c0-0.3-0.1-0.2,0.2-0.2c0.1,0,0.2,0,0.4,0
C546.4,229.9,546.9,229.9,547.4,229.9z"/>
</g>
<g>
<path class="st0" d="M520.6,200.7c-0.1,0.2-0.1,0.5-0.1,0.8c0,0.1-0.1,0.2-0.2,0.2c-0.4-0.1-0.9-0.1-1.3-0.2
c-1.5-0.2-3.2-0.4-4.7-0.6c-1.4-0.2-2.7-0.4-4.1-0.5c-0.4-0.1-0.8-0.1-1.2-0.2c-0.1-0.1-0.1-0.1-0.1-0.2c0.2-1.2,0.3-2.4,0.4-3.6
c0-0.1,0.1-0.2,0.2-0.2c1.1,0.1,2.1,0.2,3.2,0.4c1.2,0.2,2.6,0.4,3.7,0.5c1.4,0.2,2.7,0.4,4.1,0.5c0.4,0.1,0.4,0.1,0.3,0.4
c-0.1,0.3-0.1,0.6-0.1,1c-0.1,0-0.1,0.1-0.1,0.1c-0.1,0.4-0.1,0.9-0.2,1.4C520.6,200.7,520.6,200.7,520.6,200.7z"/>
</g>
<g>
<path class="st0" d="M572.9,206.4c0.1-0.2,0.1-0.6,0.1-0.8c0-0.1,0.1-0.1,0.2-0.1c1,0.1,2,0.2,3,0.4c1.1,0.1,2.1,0.2,3.2,0.4
c1.2,0.1,2.3,0.3,3.5,0.5c0.5,0.1,1.1,0.1,1.5,0.2c0.1,0,0.2,0.1,0.2,0.2c0.1,0.6-0.1,1.2-0.2,1.8c-0.1,0.6-0.2,1.2-0.2,1.7
c0,0.1-0.1,0.2-0.2,0.1c-1.4-0.2-2.8-0.4-4.2-0.6c-1.4-0.2-2.7-0.4-4-0.5c-1.1-0.1-2.1-0.2-3.1-0.4c-0.1,0-0.1-0.1-0.1-0.2
c0.1-0.4,0.1-0.7,0.1-1.1c0.1,0,0.1-0.1,0.1-0.1c0.1-0.4,0.1-0.9,0.2-1.3C573,206.6,573,206.5,572.9,206.4z"/>
</g>
<g>
<path class="st0" d="M571.1,213.7c0.1-0.2,0.2-0.4,0.3-0.7c0.1-0.1,0.1-0.1,0.2-0.1c2.2,1,4.4,2,6.6,3c1.2,0.6,2.4,1.1,3.7,1.7
c0.2,0.1,0.2,0.1,0.1,0.3c-0.5,1-0.9,2-1.4,3c-0.1,0.1-0.1,0.1-0.2,0.1c-2.3-1.1-4.6-2.1-7-3.2c-1.1-0.5-2.2-1-3.3-1.5
c-0.2-0.1-0.2-0.1-0.1-0.3c0.2-0.3,0.2-0.6,0.4-0.9c0.2-0.3,0.3-0.6,0.4-0.9C571,214.1,571.1,213.9,571.1,213.7z"/>
</g>
<g>
<path class="st0" d="M522.6,193.4c-0.1,0.2-0.2,0.5-0.4,0.7c-0.1,0.1-0.1,0.1-0.2,0.1c-1.2-0.6-2.6-1.1-3.8-1.7
c-1.5-0.7-3.2-1.4-4.8-2.2c-0.6-0.2-1.1-0.5-1.7-0.8c-0.1-0.1-0.1-0.1-0.1-0.2c0.5-1,1-2.1,1.4-3c0.1-0.1,0.1-0.1,0.2-0.1
c1,0.5,2.1,0.9,3,1.4c2.4,1.1,4.8,2.2,7.2,3.3c0.1,0.1,0.2,0.1,0.1,0.3c-0.1,0.2-0.2,0.5-0.4,0.8c-0.1,0.2-0.2,0.4-0.2,0.6
C522.8,192.7,522.6,193,522.6,193.4z"/>
</g>
<g>
<path class="st0" d="M567.2,220.1c0.1-0.2,0.2-0.3,0.4-0.5c0.1-0.1,0.1-0.1,0.2,0c2.1,1.9,4.3,3.7,6.5,5.6
c0.7,0.6,1.4,1.2,2.1,1.8c0.1,0.1,0.1,0.2,0.1,0.3c-0.7,0.8-1.4,1.5-2,2.4c-0.1,0.1-0.1,0.1-0.2,0c-1.9-1.7-3.9-3.3-5.8-5
c-0.9-0.8-1.8-1.6-2.8-2.4c-0.1-0.1-0.1-0.1,0-0.2c0.2-0.2,0.4-0.4,0.6-0.7"/>
</g>
<g>
<path class="st0" d="M526.4,186.9c-0.2,0.2-0.4,0.4-0.5,0.6c-0.1,0.1-0.1,0.1-0.2,0c-1.2-1-2.4-2-3.5-3c-1.4-1.2-2.7-2.4-4.1-3.6
c-0.3-0.2-0.6-0.5-1-0.8c-0.1-0.1-0.1-0.1-0.1-0.2c0.7-0.8,1.4-1.5,2-2.3c0.1-0.1,0.2-0.1,0.2-0.1c1.4,1.2,2.7,2.4,4.1,3.6
c1.5,1.2,3,2.6,4.5,3.9c0.1,0.1,0.1,0.1,0.1,0.2c-0.2,0.2-0.3,0.4-0.4,0.5c-0.1,0-0.1,0-0.1,0.1
C527.1,186.1,526.8,186.5,526.4,186.9C526.4,186.8,526.4,186.9,526.4,186.9z"/>
</g>
<g>
<path class="st0" d="M531.8,181.9c-0.1,0.1-0.2,0.2-0.4,0.2c-0.1,0.1-0.2,0.1-0.3-0.1c-0.7-1.1-1.4-2.1-2-3.2
c-1.4-2.1-2.7-4.2-4-6.3c-0.1-0.1-0.1-0.2,0.1-0.2c0.8-0.5,1.6-1,2.4-1.5c0.1-0.1,0.2-0.1,0.2,0.1c1,1.5,2,3.1,3,4.7
c1,1.6,2.1,3.2,3,4.8c0.2,0.2,0.2,0.2-0.1,0.4c-0.1,0.1-0.2,0.1-0.3,0.2c-0.1,0-0.1,0.1-0.2,0.1c-0.4,0.2-0.8,0.5-1.1,0.7
C532,181.8,531.9,181.8,531.8,181.9z"/>
</g>
<g>
<path class="st0" d="M561.7,225.3c0.2-0.1,0.4-0.2,0.5-0.4c0.1-0.1,0.2-0.1,0.2,0.1c0.8,1.2,1.5,2.4,2.3,3.6
c1.1,1.7,2.2,3.4,3.3,5.1c0.2,0.2,0.4,0.5,0.5,0.8c0.1,0.1,0.1,0.2-0.1,0.2c-0.8,0.5-1.6,1.1-2.4,1.5c-0.1,0.1-0.2,0.1-0.2-0.1
c-1.7-2.7-3.4-5.3-5.1-8c-0.4-0.5-0.7-1.1-1-1.5c-0.1-0.1-0.1-0.1,0.1-0.2c0.2-0.1,0.4-0.2,0.6-0.4"/>
</g>
<g>
<path class="st0" d="M554.9,228.6c0.2-0.1,0.4-0.1,0.5-0.1c0.1-0.1,0.2-0.1,0.2,0.1c0.4,1.4,0.8,2.9,1.2,4.3
c0.6,2.1,1.2,4.3,1.9,6.5c0.1,0.2,0.1,0.2-0.2,0.3c-0.8,0.2-1.6,0.5-2.4,0.7c-0.2,0.1-0.2,0-0.3-0.2c-0.4-1.2-0.7-2.4-1.1-3.6
c-0.7-2.4-1.4-4.8-2.1-7.1c-0.1-0.2-0.1-0.2,0.2-0.2c0.2-0.1,0.3-0.1,0.4-0.1C553.9,228.9,554.4,228.8,554.9,228.6z"/>
</g>
<g>
<path class="st0" d="M538.7,178.5c-0.2,0.1-0.4,0.1-0.5,0.1c-0.1,0.1-0.2,0-0.2-0.1c-0.2-0.8-0.5-1.6-0.7-2.4
c-0.8-2.6-1.5-5.2-2.3-7.9c-0.1-0.2-0.1-0.3-0.1-0.5c-0.1-0.1-0.1-0.2,0.1-0.2c0.7-0.2,1.5-0.4,2.2-0.7c0.5-0.1,0.4-0.1,0.6,0.3
c0.6,2,1.2,4,1.7,6c0.4,1.5,0.9,3,1.4,4.5c0.1,0.1,0,0.2-0.1,0.2c-0.2,0.1-0.3,0.1-0.4,0.1c-0.1-0.1-0.1,0-0.1,0
c-0.4,0.1-0.7,0.2-1.1,0.4C538.9,178.5,538.8,178.5,538.7,178.5z"/>
</g>
<g>
<path class="st0" d="M546.1,177.3c-0.5,0-0.5,0-0.5-0.5c0-3.6,0-7.3,0-11c0-0.2,0.1-0.2,0.2-0.2c0.8,0,1.5,0,2.4,0
c0.1,0,0.2,0.1,0.2,0.2c0,3.7,0,7.6,0,11.3c0,0.1-0.1,0.2-0.2,0.2c-0.1,0-0.3,0-0.4,0C547.2,177.2,546.7,177.2,546.1,177.3z"/>
</g>
<g>
<path class="st0" d="M540.1,229.1c0.4,0.1,0.4,0.1,0.2,0.4c-1,3.6-2.1,7.1-3,10.7c-0.1,0.2-0.1,0.2-0.2,0.1
c-0.7-0.2-1.4-0.4-2.1-0.6c-0.2-0.1-0.2-0.1-0.1-0.2c0.5-1.8,1.1-3.6,1.5-5.4c0.5-1.8,1.1-3.6,1.5-5.5c0.1-0.2,0.1-0.2,0.2-0.1
c0.1,0.1,0.2,0.1,0.4,0.1C539,228.8,539.6,228.9,540.1,229.1z"/>
</g>
<g>
<path class="st0" d="M553.6,178.2c-0.4-0.1-0.4-0.1-0.3-0.5c0.8-2.9,1.7-5.9,2.5-8.9c0.2-0.6,0.4-1.2,0.5-1.8
c0.1-0.1,0.1-0.2,0.2-0.1c0.7,0.2,1.4,0.4,2.2,0.6c0.2,0.1,0.1,0.1,0.1,0.2c-0.4,1.6-0.9,3.2-1.4,4.9c-0.6,2-1.1,4-1.7,6
c-0.1,0.2-0.1,0.2-0.3,0.2c-0.1-0.1-0.1-0.1-0.2-0.1c-0.3-0.1-0.7-0.2-1-0.3C554,178.2,553.8,178.2,553.6,178.2z"/>
</g>
<g>
<path class="st0" d="M560.3,181.2c-0.3-0.2-0.2-0.2-0.1-0.5c1.7-2.6,3.3-5.2,4.9-7.8c0.4-0.5,0.7-1.1,1-1.6
c0.1-0.1,0.1-0.1,0.2-0.1c0.6,0.4,1.1,0.7,1.7,1.1c0.1,0.1,0.1,0.1,0.1,0.2c-1,1.5-2,3-2.9,4.6c-1.1,1.6-2.1,3.2-3.1,4.9
c-0.1,0.2-0.2,0.2-0.4,0.1"/>
</g>
<g>
<path class="st0" d="M533.1,226.1c0.2,0.2,0.2,0.2,0.1,0.5c-1.2,1.9-2.4,3.7-3.6,5.6c-0.8,1.2-1.6,2.5-2.4,3.7
c-0.1,0.1-0.2,0.2-0.3,0.1c-0.5-0.4-1.1-0.7-1.6-1.1c-0.1-0.1-0.1-0.1-0.1-0.2c1.4-2.1,2.7-4.3,4.1-6.4c0.7-1,1.2-2,1.9-3
c0.1-0.2,0.1-0.2,0.4-0.1c0,0,0.1,0,0.1,0.1C532.3,225.5,532.7,225.8,533.1,226.1z"/>
</g>
<g>
<path class="st0" d="M527.4,221.4c0.1,0.1,0.1,0.2-0.1,0.3c-2.7,2.4-5.4,4.7-8.2,7c-0.1,0.1-0.2,0.2-0.4,0.4
c-0.1,0.1-0.1,0.1-0.2,0c-0.4-0.5-0.8-0.9-1.2-1.4c-0.1-0.1-0.1-0.1,0.1-0.2c0.7-0.6,1.4-1.2,2.1-1.8c1.4-1.2,2.7-2.4,4.1-3.6
c0.8-0.7,1.6-1.4,2.4-2.1c0.2-0.1,0.2-0.1,0.3,0.1C526.7,220.6,527.1,221,527.4,221.4z"/>
</g>
<g>
<path class="st0" d="M566.2,185.8c-0.1-0.1-0.1-0.2,0.1-0.4c2.1-1.8,4.2-3.7,6.4-5.5c0.7-0.6,1.4-1.2,2.1-1.8
c0.1-0.1,0.2-0.1,0.2,0c0.4,0.4,0.7,0.9,1.1,1.3c0.1,0.1,0.1,0.2-0.1,0.2c-2.1,1.8-4.2,3.6-6.2,5.4c-0.7,0.7-1.5,1.2-2.2,1.9
c-0.1,0.1-0.2,0.1-0.4,0C566.9,186.6,566.6,186.2,566.2,185.8z"/>
</g>
<g>
<path class="st0" d="M570.3,191.9c-0.1-0.1,0.1-0.1,0.1-0.2c0.9-0.4,1.8-0.8,2.7-1.2c1.2-0.5,2.3-1.1,3.5-1.6
c1.4-0.6,2.7-1.2,4-1.9c0.1-0.1,0.2-0.1,0.3,0.1c0.2,0.4,0.4,0.9,0.6,1.3c0.1,0.1,0.1,0.2-0.1,0.2c-1.8,0.8-3.6,1.7-5.5,2.5
c-1.6,0.7-3.2,1.5-4.9,2.2c-0.1,0.1-0.2,0.1-0.2-0.1C570.8,192.9,570.6,192.4,570.3,191.9z"/>
</g>
<g>
<path class="st0" d="M523.2,215.2c0.1,0.1-0.1,0.1-0.1,0.2c-1,0.4-1.9,0.9-2.9,1.4c-1.2,0.6-2.4,1.1-3.6,1.7
c-1.3,0.6-2.6,1.2-3.9,1.8c-0.1,0.1-0.1,0.1-0.2-0.1c-0.2-0.5-0.4-1-0.7-1.4c-0.1-0.1-0.1-0.2,0.1-0.2c2.7-1.2,5.4-2.4,8-3.7
c0.7-0.4,1.5-0.7,2.3-1.1c0.1-0.1,0.2-0.1,0.2,0C522.7,214.2,523,214.8,523.2,215.2z"/>
</g>
<g>
<path class="st0" d="M531.8,181.9c0.1-0.1,0.1-0.1,0.2-0.2c0.4-0.2,0.7-0.5,1.1-0.7c0.1-0.1,0.1-0.1,0.2-0.1
c0.4,0.7,0.8,1.4,1.2,2c1,1.7,2,3.3,3,4.9c0.5,0.9,1.1,1.7,1.5,2.6c0.1,0.1,0.1,0.2-0.1,0.2c-0.4,0.2-0.9,0.5-1.2,0.8
c-0.1,0.1-0.1,0.1-0.2-0.1c-1-1.6-1.9-3.2-2.9-4.8c-0.7-1.1-1.4-2.2-2.1-3.4c-0.2-0.4-0.5-0.8-0.7-1.2
C532,182,531.9,182,531.8,181.9z"/>
</g>
<g>
<path class="st0" d="M514.2,209c-1.6,0.2-3.2,0.4-4.8,0.7c-0.1,0-0.2,0-0.2-0.1c-0.1-0.4-0.1-0.9-0.2-1.3c0-0.1,0.1-0.2,0.1-0.2
c1.3-0.2,2.6-0.4,3.9-0.5c1.5-0.2,3-0.4,4.5-0.6c1-0.1,2-0.2,3-0.4c0.1,0.6,0.2,1.1,0.2,1.6"/>
</g>
<g>
<path class="st0" d="M572.8,199c1.4-0.2,2.9-0.4,4.4-0.6c1.3-0.2,2.7-0.4,4-0.5c1-0.1,2-0.2,3-0.4c0.2-0.1,0.2,0,0.2,0.2
c0.1,0.4,0.1,0.8,0.2,1.2c0,0.1,0,0.2-0.1,0.2c-1,0.1-1.9,0.2-2.9,0.4c-1.6,0.2-3.2,0.4-4.9,0.7c-1.2,0.2-2.4,0.3-3.6,0.5
c-0.1,0-0.1,0-0.1,0C572.9,200.1,572.8,199.5,572.8,199z"/>
</g>
<g>
<path class="st0" d="M546.1,177.3c0.5-0.1,1.1-0.1,1.6,0c0,3.7,0,7.4,0,11.1c0,0.2,0,0.2-0.2,0.2c-0.4,0-0.7,0-1.1,0
c-0.2,0-0.2-0.1-0.2-0.2c0-3.6,0-7.2,0-10.8C546.1,177.5,546.1,177.3,546.1,177.3z"/>
</g>
<g>
<path class="st0" d="M547.4,229.9c-0.5,0-1.1,0-1.6,0c0-3.7,0-7.4,0-11.1c0-0.2,0.1-0.2,0.2-0.2c0.4,0,0.8,0,1.2,0
c0.1,0,0.2,0.1,0.2,0.2c0,0.8,0,1.6,0,2.4C547.4,224.1,547.4,227,547.4,229.9z"/>
</g>
<g>
<path class="st0" d="M553.6,178.2c0.2,0,0.4,0.1,0.6,0.1c0.4,0.1,0.7,0.2,1,0.3c-0.1,0.2-0.2,0.5-0.2,0.8c-0.5,1.6-1,3.3-1.4,4.9
c-0.5,1.7-1,3.3-1.5,5c-0.1,0.1-0.1,0.2-0.2,0.1c-0.4-0.1-0.8-0.2-1.2-0.4c-0.1-0.1-0.1-0.1-0.1-0.2c0.4-1.2,0.7-2.4,1.1-3.7
c0.5-1.7,1-3.4,1.5-5.1C553.1,179.5,553.4,178.8,553.6,178.2z"/>
</g>
<g>
<path class="st0" d="M526.4,186.9c0-0.1,0-0.1,0.1-0.1c0.3-0.4,0.6-0.7,1-1.1c0.1-0.1,0.1-0.1,0.1-0.1c0.4,0.3,0.7,0.6,1,0.9
c0.5,0.5,1.1,1,1.5,1.4c1,0.9,2,1.8,3,2.7c0.6,0.6,1.2,1.1,1.8,1.7c0.2,0.2,0.5,0.5,0.8,0.7c0.1,0.1,0.1,0.1,0,0.2
c-0.3,0.3-0.6,0.7-0.8,1c-0.1,0.1-0.1,0.1-0.2,0.1c-0.3-0.3-0.6-0.6-1-0.8c-1.2-1.1-2.4-2.1-3.6-3.2c-1-0.9-1.9-1.7-2.9-2.6
C527.1,187.5,526.8,187.2,526.4,186.9z"/>
</g>
<g>
<path class="st0" d="M540.1,229.1c-0.5-0.1-1.1-0.2-1.5-0.4c0.4-1.1,0.7-2.3,1-3.4c0.4-1.4,0.8-2.7,1.2-4.1
c0.3-1.1,0.6-2.1,0.9-3.2c0.1-0.2,0.1-0.2,0.2-0.2c0.4,0.1,0.8,0.2,1.2,0.4c0.1,0.1,0.2,0.1,0.1,0.2c-0.5,1.7-1,3.4-1.5,5.1
c-0.5,1.7-1,3.5-1.5,5.2C540.1,228.8,540.1,228.9,540.1,229.1z"/>
</g>
<g>
<path class="st0" d="M522.6,193.4c0.1-0.3,0.2-0.6,0.4-0.9c0.1-0.2,0.1-0.4,0.2-0.6c0.7,0.3,1.3,0.6,2,0.9c1.5,0.7,3,1.4,4.5,2.1
c0.9,0.4,1.7,0.8,2.6,1.2c0.3,0.2,0.7,0.3,1,0.4c0.1,0.1,0.1,0.1,0.1,0.2c-0.2,0.4-0.4,0.8-0.5,1.2c-0.1,0.1-0.1,0.2-0.2,0.1
c-0.7-0.4-1.4-0.7-2.1-1c-1.9-0.9-3.9-1.8-5.8-2.7C524,194.1,523.3,193.7,522.6,193.4z"/>
</g>
<g>
<path class="st0" d="M571.1,213.7c-0.1,0.2-0.1,0.4-0.2,0.6c-0.1,0.3-0.2,0.6-0.4,0.9c-0.7-0.3-1.4-0.6-2.1-1
c-1.6-0.7-3.2-1.5-4.8-2.2c-0.8-0.4-1.6-0.7-2.4-1.1c-0.2-0.1-0.6-0.2-0.8-0.4c-0.1-0.1-0.1-0.1-0.1-0.2c0.2-0.4,0.4-0.8,0.6-1.2
c0.1-0.1,0.1-0.1,0.2-0.1c1.4,0.7,2.7,1.2,4.2,1.9C567.2,211.8,569.2,212.7,571.1,213.7C571.1,213.7,571.1,213.7,571.1,213.7z"/>
</g>
<g>
<path class="st0" d="M538.7,178.5c0.1-0.1,0.2-0.1,0.2-0.1c0.4-0.1,0.7-0.2,1.1-0.4c0.1,0,0.1-0.1,0.1,0c0.5,1.6,1,3.2,1.4,4.8
c0.4,1.2,0.7,2.4,1.1,3.6c0.2,0.7,0.4,1.5,0.7,2.2c0.1,0.1,0,0.2-0.1,0.2c-0.4,0.1-0.8,0.2-1.2,0.4c-0.2,0.1-0.2,0-0.2-0.2
c-0.3-1-0.6-2-0.9-3c-0.4-1.2-0.7-2.5-1.1-3.7C539.5,181.1,539.1,179.8,538.7,178.5z"/>
</g>
<g>
<path class="st0" d="M520.6,200.7c-0.1,0-0.1-0.1-0.1-0.1c0.1-0.4,0.1-0.9,0.2-1.4c0-0.1,0.1-0.1,0.1-0.1c0.9,0.1,1.7,0.2,2.6,0.4
c1,0.1,2.1,0.2,3,0.4c1,0.2,2,0.2,3,0.4c0.7,0.1,1.4,0.2,2.2,0.2c0.2,0,0.2,0.1,0.2,0.2c-0.1,0.4-0.1,0.8-0.2,1.2
c0,0.1-0.1,0.1-0.2,0.1c-0.9-0.1-1.8-0.2-2.7-0.4c-1-0.1-1.9-0.2-2.9-0.4c-0.9-0.1-1.8-0.2-2.7-0.4
C522.4,200.9,521.6,200.8,520.6,200.7C520.8,200.8,520.8,200.8,520.6,200.7z"/>
</g>
<g>
<path class="st0" d="M533.1,226.1c-0.4-0.3-0.9-0.6-1.4-0.9c0.3-0.4,0.5-0.8,0.8-1.2c0.7-1.1,1.4-2.1,2.1-3.2
c1.1-1.7,2.1-3.3,3.2-5c0.1-0.1,0.1-0.1,0.2-0.1c0.4,0.2,0.7,0.5,1.1,0.7c0.1,0.1,0.1,0.1,0.1,0.2c-0.5,0.7-0.9,1.4-1.4,2.2
c-1.5,2.4-3,4.7-4.5,7.1C533.2,226,533.2,226.1,533.1,226.1z"/>
</g>
<g>
<path class="st0" d="M560.4,181.1c0.5,0.2,0.9,0.6,1.4,0.9c-0.5,0.7-0.9,1.4-1.4,2.2c-1.5,2.4-3,4.8-4.6,7.2
c-0.1,0.1-0.1,0.1-0.2,0.1c-0.4-0.2-0.7-0.4-1.1-0.7c-0.1-0.1-0.2-0.1-0.1-0.2c0.8-1.2,1.5-2.4,2.3-3.6c1.2-1.9,2.4-3.8,3.6-5.7
C560.4,181.1,560.4,181.1,560.4,181.1z"/>
</g>
<g>
<path class="st0" d="M527.4,221.4c-0.4-0.4-0.7-0.8-1.1-1.2c1-0.9,2-1.7,3-2.6c1-0.9,2-1.7,3-2.6c0.8-0.7,1.7-1.4,2.5-2.1
c0.1-0.1,0.2-0.1,0.2,0.1c0.2,0.3,0.5,0.7,0.8,1c0.1,0.1,0.1,0.2,0,0.2c-0.6,0.5-1.2,1.1-1.8,1.6c-0.6,0.5-1.2,1.1-1.9,1.6
c-0.9,0.8-1.8,1.5-2.7,2.4C528.7,220.3,528,220.8,527.4,221.4z"/>
</g>
<g>
<path class="st0" d="M572.8,199c0.1,0.5,0.1,1.1,0.2,1.5c-0.4,0.1-0.7,0.1-1.1,0.2c-0.7,0.1-1.5,0.2-2.2,0.3
c-0.8,0.1-1.7,0.2-2.5,0.4c-0.8,0.1-1.7,0.2-2.5,0.4c-0.7,0.1-1.4,0.2-2.2,0.3c-0.2,0.1-0.4,0.1-0.7,0.1c-0.1,0.1-0.2-0.1-0.2-0.1
c-0.1-0.3-0.1-0.6-0.1-0.9c0-0.2-0.1-0.4,0-0.5c0.1-0.1,0.3-0.1,0.4-0.1c1.4-0.2,2.8-0.4,4.2-0.6c1.4-0.2,2.7-0.4,4-0.6
C571.2,199.2,571.9,199.2,572.8,199z"/>
</g>
<g>
<path class="st0" d="M554.9,228.8c-0.5,0.2-1,0.4-1.5,0.5c-0.2-1-0.6-2.2-0.9-3.2c-0.4-1.4-0.8-2.9-1.2-4.3
c-0.3-1.1-0.6-2.3-0.9-3.4c-0.1-0.1-0.1-0.2,0.1-0.2c0.4-0.1,0.8-0.2,1.2-0.4c0.1-0.1,0.2,0,0.2,0.1c0.4,1.5,0.8,3,1.2,4.5
c0.6,2,1.1,4,1.7,6.1C554.9,228.6,554.9,228.8,554.9,228.8z"/>
</g>
<g>
<path class="st0" d="M520.8,208.1c-0.1-0.5-0.1-1.1-0.2-1.5c1.2-0.2,2.4-0.4,3.6-0.5c1.1-0.1,2.2-0.3,3.3-0.5
c1.2-0.2,2.4-0.3,3.7-0.5c0.1,0,0.3-0.1,0.4-0.1c0.1,0,0.2,0,0.2,0.1c0.1,0.4,0.1,0.9,0.2,1.2c0,0.1-0.1,0.2-0.1,0.2
c-0.4,0.1-0.9,0.1-1.2,0.2c-0.7,0.1-1.4,0.2-2.2,0.3c-0.7,0.1-1.5,0.2-2.2,0.3c-0.7,0.1-1.4,0.2-2.1,0.3"/>
</g>
<g>
<path class="st0" d="M566.3,221.4c-1.4-1.2-2.9-2.5-4.3-3.7c-1.1-1-2.2-1.9-3.4-2.9c-0.2-0.2-0.5-0.5-0.8-0.7
c-0.1-0.1-0.1-0.1,0-0.2c0.2-0.3,0.5-0.6,0.8-0.9c0.1-0.1,0.2-0.1,0.3,0c0.4,0.4,0.9,0.8,1.4,1.2c0.9,0.7,1.7,1.5,2.6,2.3
c0.7,0.6,1.4,1.2,2,1.7c0.8,0.8,1.5,1.4,2.3,2.1c0,0.1-0.1,0.2-0.2,0.2"/>
</g>
<g>
<path class="st0" d="M572.9,206.4c0.1,0.1,0.1,0.1,0.1,0.2c-0.1,0.4-0.1,0.9-0.2,1.3c0,0.1,0,0.1-0.1,0.1
c-0.4-0.1-0.9-0.1-1.4-0.2c-0.8-0.1-1.7-0.2-2.6-0.4c-0.7-0.1-1.4-0.2-2.2-0.3c-0.7-0.1-1.4-0.2-2.2-0.3c-0.7-0.1-1.2-0.2-1.9-0.2
c-0.2-0.1-0.6-0.1-0.8-0.1c-0.1,0-0.1-0.1-0.1-0.2c0.1-0.4,0.1-0.9,0.2-1.3c0-0.1,0.1-0.1,0.2-0.1c0.4,0.1,0.7,0.1,1.1,0.1
c0.8,0.1,1.6,0.2,2.4,0.4c0.7,0.1,1.5,0.2,2.3,0.3c0.8,0.1,1.7,0.2,2.5,0.4c0.8,0.1,1.6,0.2,2.4,0.4
C572.7,206.4,572.8,206.4,572.9,206.4z"/>
</g>
<g>
<path class="st0" d="M566.2,185.8c0.4,0.4,0.7,0.8,1.1,1.2c-0.4,0.3-0.7,0.6-1.1,0.9c-0.9,0.8-1.8,1.5-2.8,2.4
c-0.8,0.7-1.7,1.4-2.4,2.1c-0.7,0.6-1.4,1.2-2.1,1.8c-0.1,0.1-0.2,0.1-0.4-0.1c-0.2-0.3-0.5-0.6-0.8-0.9c-0.1-0.1-0.1-0.2,0-0.2
c0.5-0.4,1-0.9,1.5-1.3c0.6-0.5,1.2-1.1,1.8-1.5c0.9-0.8,1.9-1.6,2.8-2.4C564.7,187.1,565.5,186.4,566.2,185.8z"/>
</g>
<g>
<path class="st0" d="M561.7,225.3c-0.1,0.2-0.4,0.2-0.6,0.4c-0.2,0.1-0.4,0.2-0.6,0.4c-0.1,0.1-0.1,0.1-0.2,0.1
c-0.2-0.5-0.6-1-0.9-1.5c-1.1-1.7-2.1-3.5-3.2-5.2c-0.6-0.9-1.1-1.8-1.7-2.7c-0.1-0.1-0.1-0.2,0.1-0.2c0.4-0.2,0.7-0.4,1.1-0.7
c0.1-0.1,0.2-0.1,0.2,0.1c1.5,2.4,3,4.9,4.5,7.4C560.8,223.9,561.2,224.6,561.7,225.3z"/>
</g>
<g>
<path class="st0" d="M523.2,215.2c-0.2-0.5-0.5-1-0.7-1.4c0.7-0.4,1.4-0.7,2.2-1c2-0.9,4-1.8,6-2.7c0.6-0.3,1.2-0.6,1.9-0.9
c0.1-0.1,0.2-0.1,0.2,0.1c0.2,0.4,0.4,0.8,0.5,1.2c0.1,0.1,0.1,0.1-0.1,0.2c-2.1,0.9-4,1.9-6.1,2.8c-1.1,0.5-2.3,1.1-3.4,1.5
C523.6,215.1,523.4,215.2,523.2,215.2z"/>
</g>
<g>
<path class="st0" d="M570.3,191.9c0.2,0.5,0.5,1,0.7,1.4c-0.4,0.2-0.7,0.4-1.1,0.5c-1,0.5-2,0.9-3,1.4c-1.5,0.7-3,1.4-4.6,2.1
c-0.5,0.2-1,0.4-1.5,0.7c-0.1,0.1-0.2,0.1-0.2-0.1c-0.2-0.4-0.4-0.8-0.6-1.2c-0.1-0.1,0-0.1,0.1-0.2c1.6-0.7,3.2-1.5,4.9-2.2
c1.2-0.5,2.3-1.1,3.5-1.6c0.6-0.2,1.1-0.5,1.7-0.7C570.3,192,570.3,192,570.3,191.9z"/>
</g>
</g>
<g>
<g>
<g>
<path class="st0" d="M599.3,214.7c0-8.1,2.2-14.5,6.5-19c4.3-4.6,9.9-6.8,16.8-6.8c4.5,0,8.6,1.1,12.2,3.2c3.6,2.1,6.4,5.2,8.3,9
c1.9,3.9,2.9,8.2,2.9,13.1c0,4.9-1,9.3-3,13.3c-2,3.9-4.8,6.8-8.5,8.9c-3.6,2-7.6,3-11.8,3c-4.6,0-8.7-1.1-12.3-3.3
c-3.6-2.2-6.4-5.2-8.2-9.1C600.2,223,599.3,219,599.3,214.7z M605.9,214.8c0,5.9,1.6,10.5,4.8,13.9c3.2,3.4,7.1,5.1,11.9,5.1
c4.9,0,8.9-1.7,12-5.1c3.2-3.4,4.7-8.3,4.7-14.5c0-4-0.7-7.4-2-10.4s-3.3-5.2-5.9-6.9c-2.6-1.6-5.5-2.4-8.7-2.4
c-4.6,0-8.5,1.5-11.8,4.7C607.6,202.2,605.9,207.4,605.9,214.8z"/>
</g>
<g>
<path class="st0" d="M622.7,241.4c-4.9,0-9.4-1.2-13.4-3.6s-7-5.8-9-10c-2-4-3-8.3-3-13.1c0-8.6,2.4-15.5,7.1-20.4
c4.7-4.9,10.9-7.5,18.3-7.5c4.9,0,9.3,1.2,13.3,3.5c3.9,2.3,7,5.6,9.1,9.8c2,4.2,3.1,8.9,3.1,14s-1.1,9.9-3.2,14.2
c-2.3,4.3-5.3,7.6-9.3,9.8C631.6,240.3,627.3,241.4,622.7,241.4z M622.7,191c-6.4,0-11.4,2-15.4,6.2c-4,4.1-6,10.1-6,17.6
c0,4.1,0.8,7.8,2.6,11.2c1.7,3.5,4.2,6.3,7.4,8.3c3.3,2,7.1,3,11.2,3c3.9,0,7.6-1,10.8-2.8c3.3-1.8,5.8-4.5,7.7-8
c1.8-3.6,2.7-7.8,2.7-12.3c0-4.6-0.9-8.6-2.6-12.2c-1.7-3.5-4.3-6.2-7.4-8.1C630.5,191.9,626.9,191,622.7,191z M622.6,235.8
c-5.4,0-9.9-1.9-13.5-5.7c-3.5-3.7-5.3-8.9-5.3-15.3c0-7.9,1.9-13.7,5.7-17.3c3.6-3.5,8.1-5.3,13.2-5.3c3.6,0,6.9,1,9.8,2.7
c2.9,1.9,5.2,4.5,6.7,7.8c1.5,3.2,2.2,6.9,2.2,11.3c0,6.8-1.8,12.2-5.2,16C632.6,233.8,628,235.8,622.6,235.8z M622.7,196.4
c-4.1,0-7.4,1.4-10.4,4.1c-2.9,2.8-4.3,7.6-4.3,14.3c0,5.3,1.4,9.5,4.2,12.4c2.7,3,6.1,4.4,10.4,4.4s7.7-1.4,10.5-4.5
c2.7-3,4.2-7.4,4.2-13.1c0-3.7-0.6-6.8-1.8-9.5c-1.2-2.6-2.9-4.5-5.1-6C628.1,197.1,625.5,196.4,622.7,196.4z"/>
</g>
</g>
<g>
<g>
<path class="st0" d="M693.7,221.3l6.4,1.6c-1.4,5.3-3.8,9.3-7.3,12.1s-7.8,4.2-12.9,4.2c-5.2,0-9.5-1.1-12.8-3.2
c-3.3-2.1-5.8-5.2-7.5-9.3c-1.7-4-2.6-8.4-2.6-13.1c0-5.1,1-9.5,2.9-13.3c2-3.8,4.7-6.7,8.3-8.6s7.5-2.9,11.8-2.9
c4.9,0,9,1.2,12.3,3.7c3.3,2.5,5.7,6,7,10.5l-6.4,1.5c-1.1-3.6-2.8-6.1-4.9-7.7c-2.1-1.6-4.9-2.4-8.1-2.4c-3.7,0-6.9,0.9-9.4,2.7
c-2.5,1.8-4.3,4.2-5.3,7.3c-1,3-1.5,6.1-1.5,9.3c0,4.2,0.6,7.8,1.8,10.9c1.2,3.1,3.1,5.4,5.7,7c2.6,1.5,5.3,2.3,8.3,2.3
c3.6,0,6.7-1.1,9.2-3.2C691,228.5,692.8,225.4,693.7,221.3z"/>
</g>
<g>
<path class="st0" d="M679.9,241.3c-5.7,0-10.4-1.2-13.9-3.6c-3.6-2.4-6.4-5.8-8.3-10.2c-1.8-4.2-2.7-8.9-2.7-13.9
c0-5.5,1.1-10.2,3.2-14.2c2.1-4.2,5.2-7.3,9.1-9.5c3.8-2.1,8.2-3.2,12.9-3.2c5.3,0,9.9,1.4,13.6,4.2c3.7,2.8,6.3,6.7,7.7,11.5
l0.6,2.1l-10.4,2.4l-0.6-1.8c-1-3.1-2.4-5.4-4.2-6.7c-1.8-1.4-4.1-2-6.8-2c-3.3,0-6.1,0.8-8.2,2.3c-2.1,1.5-3.7,3.6-4.5,6.2
c-1,2.9-1.4,5.8-1.4,8.7c0,3.9,0.5,7.3,1.7,10.1c1,2.6,2.6,4.6,4.8,6c2.3,1.4,4.6,2,7.2,2c3.1,0,5.7-0.9,7.9-2.7
c2.1-1.8,3.6-4.6,4.4-8.2l0.5-2.1l10.5,2.6l-0.5,2c-1.5,5.7-4.2,10.2-8,13.3C690.2,239.8,685.4,241.3,679.9,241.3z M680,190.9
c-4,0-7.6,0.9-10.8,2.7c-3.2,1.8-5.7,4.3-7.4,7.7c-1.8,3.4-2.7,7.6-2.7,12.3c0,4.5,0.8,8.5,2.4,12.3c1.5,3.6,3.8,6.4,6.7,8.3
s6.8,2.9,11.7,2.9c4.7,0,8.5-1.2,11.6-3.7c2.7-2.1,4.7-5.2,6-9l-2.3-0.6c-1.1,3.5-2.9,6.3-5.2,8.4c-2.9,2.4-6.4,3.6-10.5,3.6
c-3.3,0-6.5-0.9-9.3-2.6c-3-1.8-5.2-4.5-6.5-8c-1.2-3.3-1.9-7.3-1.9-11.7c0-3.4,0.5-6.7,1.7-10c1.1-3.5,3.2-6.2,6.1-8.3
c2.9-2,6.4-3.1,10.6-3.1c3.7,0,6.8,1,9.3,2.9c2.1,1.6,3.8,3.9,5,7l2.3-0.5c-1.2-3-3-5.5-5.5-7.3C688.1,192,684.4,190.9,680,190.9
z"/>
</g>
</g>
<g>
<g>
<path class="st0" d="M707.2,238.5l18.7-48.8h7l19.9,48.8h-7.4l-5.7-14.8h-20.4l-5.4,14.8H707.2z M721.3,218.4h16.5l-5.1-13.5
c-1.5-4.1-2.7-7.5-3.5-10.1c-0.6,3.2-1.5,6.2-2.6,9.3L721.3,218.4z"/>
</g>
<g>
<path class="st0" d="M729.4,187.6h5l21.7,53h-11.9l-5.7-14.8h-17.5l-5.4,14.8h-11.2l20.2-53h4 M746.9,236.4h2.9l-18.2-44.6h-1
l0.7,2.4c0.8,2.9,2,6.3,3.4,10l6.2,16.3h-22.6l6.4-17.1c1.1-3.2,2-6.1,2.5-9l0.5-2.7h-0.4l-17.1,44.6h2.3l5.4-14.8h23.3
L746.9,236.4z M724.4,216.3h10.5l-4-10.7c-0.4-1.2-0.8-2.3-1.2-3.5c-0.3,0.9-0.6,1.7-0.9,2.6L724.4,216.3z"/>
</g>
</g>
</g>
<g>
<path class="st1" d="M327.3,257c1.3-0.2,3-0.4,5.3-0.4c2.7,0,4.7,0.7,6,1.8c1.2,1,1.8,2.6,1.8,4.5c0,1.9-0.6,3.5-1.7,4.5
c-1.4,1.5-3.8,2.3-6.5,2.3c-0.8,0-1.5-0.1-2.2-0.2v8.5h-2.7V257z M330,267.3c0.6,0.2,1.4,0.2,2.3,0.2c3.3,0,5.4-1.6,5.4-4.5
c0-2.8-2-4.2-5-4.2c-1.2,0-2.1,0.1-2.6,0.2L330,267.3L330,267.3z"/>
<path class="st1" d="M352,278l-0.2-1.9h-0.1c-0.8,1.2-2.5,2.3-4.6,2.3c-3.1,0-4.6-2.2-4.6-4.4c0-3.7,3.3-5.7,9.2-5.7V268
c0-1.2-0.4-3.5-3.5-3.5c-1.4,0-2.9,0.4-4,1.1l-0.7-1.8c1.2-0.8,3.1-1.4,5-1.4c4.6,0,5.8,3.2,5.8,6.2v5.7c0,1.3,0.1,2.6,0.2,3.6H352
L352,278z M351.6,270.2c-3-0.1-6.5,0.5-6.5,3.5c0,1.8,1.2,2.7,2.6,2.7c2,0,3.3-1.2,3.7-2.6c0.1-0.3,0.2-0.6,0.2-0.9V270.2z"/>
<path class="st1" d="M359.2,267.6c0-1.8-0.1-3.3-0.1-4.8h2.4l0.1,3h0.1c0.7-2,2.4-3.3,4.2-3.3c0.3,0,0.5,0.1,0.8,0.1v2.6
c-0.3-0.1-0.6-0.1-1-0.1c-2,0-3.3,1.5-3.7,3.6c-0.1,0.4-0.1,0.8-0.1,1.3v8.1h-2.7V267.6z"/>
<path class="st1" d="M374.1,258.4v4.4h4v2.1h-4v8.2c0,1.9,0.5,3,2.1,3c0.7,0,1.2-0.1,1.6-0.2l0.1,2.1c-0.5,0.2-1.4,0.4-2.4,0.4
c-1.3,0-2.3-0.4-3-1.2c-0.8-0.8-1.1-2.2-1.1-4v-8.3H369v-2.1h2.4v-3.6L374.1,258.4z"/>
<path class="st1" d="M381.6,266.9c0-1.5-0.1-2.9-0.1-4.1h2.4l0.2,2.5h0.1c0.8-1.4,2.5-2.9,5.1-2.9c2.1,0,5.4,1.2,5.4,6.5v9.1h-2.8
v-8.8c0-2.4-0.9-4.5-3.5-4.5c-1.8,0-3.3,1.3-3.7,2.9c-0.1,0.4-0.2,0.8-0.2,1.3v9.2h-2.8L381.6,266.9L381.6,266.9z"/>
<path class="st1" d="M401.1,270.9c0.1,3.7,2.4,5.3,5.2,5.3c2,0,3.2-0.4,4.2-0.8l0.5,2c-1,0.4-2.7,1-5.1,1c-4.7,0-7.5-3.1-7.5-7.7
c0-4.6,2.7-8.2,7.1-8.2c5,0,6.3,4.4,6.3,7.2c0,0.6-0.1,1-0.1,1.3L401.1,270.9L401.1,270.9L401.1,270.9z M409.2,268.9
c0.1-1.8-0.7-4.5-3.9-4.5c-2.8,0-4,2.6-4.3,4.5H409.2z"/>
<path class="st1" d="M415.8,267.6c0-1.8-0.1-3.3-0.1-4.8h2.4l0.1,3h0.1c0.7-2,2.4-3.3,4.2-3.3c0.3,0,0.5,0.1,0.8,0.1v2.6
c-0.3-0.1-0.6-0.1-1-0.1c-2,0-3.3,1.5-3.7,3.6c-0.1,0.4-0.1,0.8-0.1,1.3v8.1h-2.7V267.6z"/>
</g>
<g>
<path class="st1" d="M614.7,277.4c-1,0.5-3,1-5.6,1c-6,0-10.5-3.8-10.5-10.8c0-6.7,4.5-11.2,11.1-11.2c2.7,0,4.3,0.6,5.1,1
l-0.7,2.3c-1-0.5-2.5-0.9-4.3-0.9c-5,0-8.3,3.2-8.3,8.7c0,5.2,3,8.6,8.2,8.6c1.7,0,3.4-0.4,4.5-0.9L614.7,277.4z"/>
<path class="st1" d="M631.9,270.3c0,5.7-3.9,8.1-7.6,8.1c-4.1,0-7.3-3-7.3-7.9c0-5.1,3.3-8.1,7.6-8.1
C629,262.4,631.9,265.6,631.9,270.3z M619.9,270.5c0,3.3,1.9,5.9,4.6,5.9c2.7,0,4.6-2.5,4.6-6c0-2.6-1.3-5.9-4.6-5.9
C621.2,264.5,619.9,267.6,619.9,270.5z"/>
<path class="st1" d="M635.9,266.9c0-1.5-0.1-2.9-0.1-4.1h2.4l0.2,2.5h0.1c0.8-1.4,2.5-2.9,5.1-2.9c2.1,0,5.4,1.2,5.4,6.5v9.1h-2.8
v-8.8c0-2.4-0.9-4.5-3.5-4.5c-1.8,0-3.3,1.3-3.7,2.9c-0.1,0.4-0.2,0.8-0.2,1.3v9.2h-2.8V266.9z"/>
<path class="st1" d="M657.1,258.4v4.4h4v2.1h-4v8.2c0,1.9,0.5,3,2.1,3c0.7,0,1.2-0.1,1.6-0.2l0.1,2.1c-0.5,0.2-1.4,0.4-2.4,0.4
c-1.3,0-2.3-0.4-3-1.2c-0.8-0.8-1.1-2.2-1.1-4v-8.3H652v-2.1h2.4v-3.6L657.1,258.4z"/>
<path class="st1" d="M664.6,267.6c0-1.8-0.1-3.3-0.1-4.8h2.4l0.1,3h0.1c0.7-2,2.4-3.3,4.2-3.3c0.3,0,0.5,0.1,0.8,0.1v2.6
c-0.3-0.1-0.6-0.1-1-0.1c-2,0-3.3,1.5-3.7,3.6c-0.1,0.4-0.1,0.8-0.1,1.3v8.1h-2.7V267.6z"/>
<path class="st1" d="M678.5,258.5c0.1,1-0.7,1.7-1.8,1.7c-1,0-1.7-0.8-1.7-1.7s0.7-1.7,1.7-1.7
C677.9,256.8,678.5,257.5,678.5,258.5z M675.4,278v-15.2h2.8V278H675.4z"/>
<path class="st1" d="M683.2,278c0.1-1,0.1-2.6,0.1-3.9v-18.4h2.7v9.6h0.1c1-1.7,2.7-2.8,5.2-2.8c3.8,0,6.5,3.2,6.4,7.8
c0,5.5-3.5,8.2-6.8,8.2c-2.2,0-4-0.8-5.1-2.9h-0.1l-0.1,2.5H683.2z M686,271.9c0,0.4,0.1,0.7,0.1,1c0.5,1.9,2.1,3.3,4.2,3.3
c2.9,0,4.6-2.4,4.6-5.9c0-3-1.6-5.7-4.5-5.7c-1.9,0-3.6,1.3-4.2,3.4c-0.1,0.3-0.2,0.7-0.2,1.1L686,271.9L686,271.9z"/>
<path class="st1" d="M714.4,273.9c0,1.5,0.1,3,0.1,4.2h-2.4l-0.2-2.5h-0.1c-0.7,1.2-2.3,2.9-5.1,2.9c-2.4,0-5.2-1.3-5.2-6.7v-8.9
h2.8v8.5c0,2.9,0.9,4.9,3.4,4.9c1.8,0,3.2-1.3,3.6-2.5c0.2-0.4,0.2-0.9,0.2-1.4v-9.3h2.8L714.4,273.9L714.4,273.9z"/>
<path class="st1" d="M722.8,258.4v4.4h4v2.1h-4v8.2c0,1.9,0.5,3,2.1,3c0.7,0,1.2-0.1,1.6-0.2l0.1,2.1c-0.5,0.2-1.4,0.4-2.4,0.4
c-1.3,0-2.3-0.4-3-1.2c-0.8-0.8-1.1-2.2-1.1-4v-8.3h-2.4v-2.1h2.4v-3.6L722.8,258.4z"/>
<path class="st1" d="M744,270.3c0,5.7-3.9,8.1-7.6,8.1c-4.1,0-7.3-3-7.3-7.9c0-5.1,3.3-8.1,7.6-8.1C741,262.4,744,265.6,744,270.3z
M731.9,270.5c0,3.3,1.9,5.9,4.6,5.9c2.7,0,4.6-2.5,4.6-6c0-2.6-1.3-5.9-4.6-5.9C733.3,264.5,731.9,267.6,731.9,270.5z"/>
<path class="st1" d="M747.9,267.6c0-1.8-0.1-3.3-0.1-4.8h2.4l0.1,3h0.1c0.7-2,2.4-3.3,4.2-3.3c0.3,0,0.5,0.1,0.8,0.1v2.6
c-0.3-0.1-0.6-0.1-1-0.1c-2,0-3.3,1.5-3.7,3.6c-0.1,0.4-0.1,0.8-0.1,1.3v8.1h-2.7V267.6L747.9,267.6z"/>
<path class="st1" d="M646.9,312.6c1.2,0.8,3,1.4,4.9,1.4c2.8,0,4.5-1.5,4.5-3.6c0-2-1.1-3.1-4-4.2c-3.5-1.2-5.6-3-5.6-6
c0-3.3,2.7-5.8,6.9-5.8c2.2,0,3.7,0.5,4.7,1l-0.8,2.3c-0.7-0.4-2.1-1-4-1c-2.9,0-4,1.7-4,3.2c0,2,1.3,3,4.2,4.1
c3.6,1.4,5.4,3.1,5.4,6.2c0,3.3-2.4,6.1-7.4,6.1c-2,0-4.3-0.6-5.4-1.4L646.9,312.6z"/>
<path class="st1" d="M663.2,305.6c0-2-0.1-3.5-0.1-5h2.5l0.1,2.6h0.1c1.1-1.8,2.9-3,5.4-3c3.7,0,6.5,3.1,6.5,7.7
c0,5.5-3.3,8.2-7,8.2c-2,0-3.8-0.9-4.7-2.4h-0.1v8.3h-2.7V305.6z M665.9,309.7c0,0.4,0.1,0.8,0.1,1.1c0.5,1.9,2.2,3.3,4.2,3.3
c2.9,0,4.6-2.4,4.6-5.9c0-3-1.6-5.7-4.5-5.7c-1.9,0-3.6,1.4-4.2,3.5c-0.1,0.4-0.2,0.8-0.2,1.1L665.9,309.7L665.9,309.7z"/>
<path class="st1" d="M695.4,308.1c0,5.7-3.9,8.1-7.6,8.1c-4.1,0-7.3-3-7.3-7.9c0-5.1,3.3-8.1,7.6-8.1
C692.4,300.3,695.4,303.4,695.4,308.1z M683.2,308.3c0,3.3,1.9,5.9,4.6,5.9c2.7,0,4.6-2.5,4.6-6c0-2.6-1.3-5.9-4.6-5.9
C684.7,302.4,683.2,305.4,683.2,308.3z"/>
<path class="st1" d="M699.3,304.8c0-1.5-0.1-2.9-0.1-4.1h2.4l0.2,2.5h0.1c0.8-1.4,2.5-2.9,5.1-2.9c2.1,0,5.4,1.2,5.4,6.5v9.1h-2.8
v-8.8c0-2.4-0.9-4.5-3.5-4.5c-1.8,0-3.3,1.3-3.7,2.9c-0.1,0.4-0.2,0.8-0.2,1.3v9.2h-2.8L699.3,304.8L699.3,304.8z"/>
<path class="st1" d="M716.9,313.1c0.8,0.5,2.3,1.1,3.6,1.1c2,0,3-1,3-2.3c0-1.3-0.8-2-2.9-2.8c-2.7-1-4-2.5-4-4.3
c0-2.4,2-4.5,5.2-4.5c1.5,0,2.9,0.4,3.7,1l-0.7,2c-0.6-0.4-1.7-0.9-3.1-0.9c-1.7,0-2.6,1-2.6,2.1c0,1.2,0.9,1.8,2.9,2.6
c2.7,1,4,2.3,4,4.6c0,2.7-2.1,4.6-5.7,4.6c-1.7,0-3.2-0.4-4.3-1L716.9,313.1z"/>
<path class="st1" d="M744,308.1c0,5.7-3.9,8.1-7.6,8.1c-4.1,0-7.3-3-7.3-7.9c0-5.1,3.3-8.1,7.6-8.1C741,300.3,744,303.4,744,308.1z
M731.9,308.3c0,3.3,1.9,5.9,4.6,5.9c2.7,0,4.6-2.5,4.6-6c0-2.6-1.3-5.9-4.6-5.9C733.3,302.4,731.9,305.4,731.9,308.3z"/>
<path class="st1" d="M747.9,305.4c0-1.8-0.1-3.3-0.1-4.8h2.4l0.1,3h0.1c0.7-2,2.4-3.3,4.2-3.3c0.3,0,0.5,0.1,0.8,0.1v2.6
c-0.3-0.1-0.6-0.1-1-0.1c-2,0-3.3,1.5-3.7,3.6c-0.1,0.4-0.1,0.8-0.1,1.3v8.2h-2.7V305.4L747.9,305.4z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 285 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 342 KiB

View File

@@ -1,62 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:#039BE5;}
.st1{opacity:0.1;fill:#FFFFFF;enable-background:new ;}
.st2{opacity:5.000000e-02;enable-background:new ;}
.st3{fill:#303C42;}
.st4{opacity:0.1;enable-background:new ;}
.st5{opacity:0.2;enable-background:new ;}
.st6{fill:#69B342;}
.st7{fill:#C6CDD1;}
.st8{fill:url(#SVGID_1_);}
.st9{fill:url(#SVGID_2_);}
.st10{fill:url(#SVGID_3_);}
</style>
<circle class="st0" cx="11.1" cy="11.1" r="9.2"/>
<path class="st1" d="M11.1,2c-3.8,0-7,2.3-8.4,5.5h16.8C18.1,4.2,14.9,2,11.1,2z"/>
<path class="st2" d="M2.7,14.8c1.4,3.2,4.6,5.5,8.4,5.5s7-2.3,8.4-5.5H2.7z"/>
<path class="st1" d="M7.5,11.1C7.5,6.1,8.6,2,11.1,2C6.1,2,2,6.1,2,11.1s4.1,9.2,9.2,9.2C8.6,20.3,7.5,16.2,7.5,11.1z"/>
<path class="st2" d="M11.1,2c2.5,0,3.7,4.1,3.7,9.2s-1.1,9.2-3.7,9.2c5.1,0,9.2-4.1,9.2-9.2S16.2,2,11.1,2z"/>
<path class="st3" d="M6.5,16.2h14.7V18H6.5V16.2z"/>
<path class="st4" d="M6.5,16.2h14.7V18H6.5V16.2z"/>
<path class="st3" d="M21.2,16.6H6.5c-0.5,0-0.9-0.4-0.9-0.9V13c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9v2.7
C22.1,16.2,21.7,16.6,21.2,16.6z"/>
<path class="st1" d="M21.2,12.1H6.5c-0.5,0-0.9,0.4-0.9,0.9v0.2c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9V13
C22.1,12.5,21.7,12.1,21.2,12.1z"/>
<path class="st5" d="M21.2,16.4H6.5c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.5,0.4,0.9,0.9,0.9h14.7c0.5,0,0.9-0.4,0.9-0.9v-0.2
C22.1,16,21.7,16.4,21.2,16.4z"/>
<path class="st3" d="M21.2,22.1H6.5c-0.5,0-0.9-0.4-0.9-0.9v-2.7c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9v2.7
C22.1,21.7,21.7,22.1,21.2,22.1z"/>
<circle class="st6" cx="19.8" cy="19.8" r="0.5"/>
<circle class="st6" cx="18" cy="19.8" r="0.5"/>
<circle class="st6" cx="16.2" cy="19.8" r="0.5"/>
<circle class="st7" cx="7.9" cy="19.8" r="0.9"/>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="7.336" y1="6.7378" x2="8.3616" y2="5.7121" gradientTransform="matrix(1 0 0 -1 0 26)">
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
</linearGradient>
<circle class="st8" cx="7.9" cy="19.8" r="0.9"/>
<circle class="st6" cx="19.8" cy="14.3" r="0.5"/>
<circle class="st6" cx="18" cy="14.3" r="0.5"/>
<circle class="st6" cx="16.2" cy="14.3" r="0.5"/>
<path class="st1" d="M21.2,17.6H6.5c-0.5,0-0.9,0.4-0.9,0.9v0.2c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9v-0.2
C22.1,18,21.7,17.6,21.2,17.6z"/>
<path class="st5" d="M21.2,21.9H6.5c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.5,0.4,0.9,0.9,0.9h14.7c0.5,0,0.9-0.4,0.9-0.9V21
C22.1,21.5,21.7,21.9,21.2,21.9z"/>
<circle class="st7" cx="7.9" cy="14.3" r="0.9"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="7.336" y1="12.2373" x2="8.3616" y2="11.2116" gradientTransform="matrix(1 0 0 -1 0 26)">
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
</linearGradient>
<circle class="st9" cx="7.9" cy="14.3" r="0.9"/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="2.2175" y1="17.461" x2="23.5011" y2="7.5369" gradientTransform="matrix(1 0 0 -1 0 26)">
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
</linearGradient>
<path class="st10" d="M22.1,15.7V13c0-0.5-0.4-0.9-0.9-0.9h-1c0-0.3,0-0.6,0-0.9c0-5.1-4.1-9.2-9.2-9.2S2,6.1,2,11.1
c0,3,1.4,5.6,3.7,7.3l0,0v2.7c0,0.5,0.4,0.9,0.9,0.9h14.7c0.5,0,0.9-0.4,0.9-0.9v-2.7c0-0.5-0.4-0.9-0.9-0.9v-0.9
C21.7,16.6,22.1,16.2,22.1,15.7z"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Слой_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 200 200" style="enable-background:new 0 0 200 200;" xml:space="preserve">
<style type="text/css">
.st0{fill:#29A1DC;}
.st1{fill:#FFFFFF;}
</style>
<circle class="st0" cx="100.5" cy="99.8" r="92.2"/>
<path class="st1" d="M113.4,127.1c0.6,0.3,0.7,1,0.2,1.5c-3.1,2.8-6.6,5.2-10.3,7.1c-6.6,3.2-13.8,4.8-21,4.7
c-7.2-0.3-14.3-2.2-20.4-5.7s-11.3-8.5-15.1-14.4c-3.7-5.9-5.8-12.6-6.4-19.4c-0.4-6.8,0.8-13.7,3.5-19.8c1.5-3,3.1-5.9,5.2-8.5
c2.1-2.6,4.5-5,7.1-7c5.2-4,11.4-6.7,17.8-7.8c-6.3,1.5-12.2,4.6-16.9,8.9c-2.4,2.1-4.5,4.5-6.2,7.1c-1.8,2.6-3.1,5.5-4.3,8.4
c-2.1,5.9-2.7,12.2-1.9,18.3c0.9,6.1,3.3,11.8,6.8,16.7c3.6,4.8,8.4,8.7,13.7,11.3c5.3,2.5,11.3,3.7,17,3.4c5.8-0.3,11.4-2,16.3-4.9
c1.9-1.2,3.8-2.5,5.4-4c0.3-0.3,0.7-0.3,1-0.1L113.4,127.1z"/>
<path class="st1" d="M131.5,143.1c0.4,0.4,0.3,1.1-0.1,1.4c-0.2,0.2-0.4,0.4-0.6,0.6c-2.6,2.3-5.4,4.4-8.3,6.3c-2.9,1.9-6,3.5-9.2,5
c-3.2,1.4-6.4,2.6-9.8,3.5c-13.3,3.6-27.7,2.9-40.4-1.9c-12.8-4.8-23.8-13.5-31.2-24.7c-7.4-11.1-11-24.4-10.6-37.6
c0.4-13.1,5.2-25.9,13.2-36.1c7.9-10.2,19-17.7,31.3-21.2c12.2-3.5,25.4-3.2,37.2,1c5.9,2.1,11.4,5.1,16.3,8.8s9.2,8.2,12.7,13.3
c-3.8-4.8-8.3-9-13.4-12.4c-5-3.4-10.6-6-16.4-7.7c-11.6-3.4-24.1-2.9-35.2,1c-11.2,3.9-20.9,11.4-27.5,21
c-6.6,9.5-10.1,21-9.8,32.4c0.3,11.4,4.2,22.6,10.9,31.5c6.7,8.9,16.3,15.5,26.7,18.7c10.5,3.3,21.8,3.1,32-0.3
c8.1-2.7,15.4-7.4,21.2-13.6c0.4-0.4,1.1-0.5,1.5-0.1c0.6,0.6,1.3,1.3,1.8,1.9C123.8,134,129.5,140.8,131.5,143.1z"/>
<path class="st1" d="M171.3,74.2l-35.9,43.7l2,4.1l4.1,8.6c0.7,1.5,0.4,3.3-0.8,4.5l-2.9,2.7c-0.2,0.2-0.4,0.2-0.7,0.2
c-0.1,0-0.2-0.1-0.3-0.2c0,0-0.1,0-0.1-0.1l-7.9-9.4c-0.8-0.9-1.6-1.8-2.5-2.6c-0.7-0.6-1.3-1.2-2.1-1.8c-1.4-1.1-2.9-2.2-4.6-3
c-0.3-0.2-0.5-0.3-0.8-0.4l-9.3-4.8l-1.7-0.9c-0.3-0.2-0.5-0.6-0.3-1l2-3.4c0.9-1.5,2.6-2.2,4.2-1.8l13.8,3.1l14-18.1L112.9,81
c-0.4-0.2-0.5-0.7-0.3-1l4.5-5.6c1.8-2.3,4.8-3.4,7.7-3l30.3,5.1l7.5-9.6c1.7-2.2,3.9-3.9,6.4-5l3.5-1.5c0.5-0.2,1-0.2,1.4-0.1
c0.3,0.1,0.5,0.2,0.7,0.3l0,0c0.5,0.5,0.9,1.2,0.7,2l-0.6,3.7C174.4,69.2,173.1,71.9,171.3,74.2z"/>
<g>
<path class="st1" d="M175.6,119.1l-4.5,5.6c-0.2,0.2-0.5,0.3-0.7,0.2c-0.1,0-0.3-0.1-0.4-0.3l-17.3-23.3l13.5-16.1l10.6,25.8
C177.9,113.7,177.5,116.8,175.6,119.1z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:#D9DBDC;}
.st1{opacity:0.1;fill:#010101;enable-background:new ;}
.st2{opacity:0.2;fill:#FFFFFF;enable-background:new ;}
.st3{fill:#818181;}
.st4{fill:url(#SVGID_1_);}
.st5{fill:url(#SVGID_2_);}
.st6{fill:#333333;}
.st7{opacity:5.000000e-02;fill:#FFFFFF;enable-background:new ;}
.st8{fill:url(#SVGID_3_);}
.st9{fill:url(#SVGID_4_);}
.st10{fill:#00425A;}
.st11{fill:#27A0DA;}
</style>
<path class="st0" d="M1.1,14.7v1.8c0,1,0.8,1.8,1.8,1.8h6.4c0,0.7-0.2,1.9-0.6,2.5c-0.2,0.2-0.5,0.3-0.7,0.3s-0.5,0.2-0.5,0.5
S7.6,22,7.9,22h8.2c0.3,0,0.5-0.2,0.5-0.5s-0.2-0.5-0.5-0.5c-0.3,0-0.5-0.1-0.7-0.3c-0.5-0.5-0.6-1.7-0.6-2.5h6.4
c1,0,1.8-0.8,1.8-1.8v-1.8H1.1z"/>
<path class="st1" d="M21.1,18.2H2.9c-1,0-1.8-0.8-1.8-1.8v0.2c0,1,0.8,1.8,1.8,1.8h18.2c1,0,1.8-0.8,1.8-1.8v-0.3
C22.9,17.3,22.1,18.2,21.1,18.2z"/>
<path class="st2" d="M7.9,21.3h8.2c0.2,0,0.4,0.2,0.5,0.4v-0.1c0-0.3-0.2-0.5-0.5-0.5H7.9c-0.3-0.1-0.5,0.1-0.5,0.4v0.1
C7.6,21.4,7.7,21.3,7.9,21.3z"/>
<path class="st3" d="M12,17.7c-0.4,0-0.6-0.4-0.6-0.7c0-0.4,0.3-0.6,0.6-0.6s0.6,0.4,0.6,0.7C12.6,17.3,12.4,17.6,12,17.7z"/>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="11.3652" y1="-732.7223" x2="12.6001" y2="-733.298" gradientTransform="matrix(1 0 0 -1 0 -716)">
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
</linearGradient>
<path class="st4" d="M12,17.7c-0.4,0-0.6-0.4-0.6-0.7c0-0.4,0.3-0.6,0.6-0.6s0.6,0.4,0.6,0.7C12.6,17.3,12.4,17.6,12,17.7z"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="10.8905" y1="-733.225" x2="14.6633" y2="-736.9988" gradientTransform="matrix(1 0 0 -1 0 -716)">
<stop offset="0" style="stop-color:#010101;stop-opacity:0.1"/>
<stop offset="1" style="stop-color:#010101;stop-opacity:0"/>
</linearGradient>
<path class="st5" d="M15.4,20.8c-0.5-0.5-0.6-1.7-0.6-2.5H9.3l2.7,2.7h4.1C15.8,21.1,15.5,21,15.4,20.8z"/>
<path class="st6" d="M22.9,3.8c0-1-0.8-1.8-1.8-1.8H2.9c-1,0-1.8,0.8-1.8,1.8v11.8h21.8V3.8z"/>
<path class="st7" d="M2.9,2.3h18.2c1,0,1.8,0.8,1.8,1.8V3.8c0-1-0.8-1.8-1.8-1.8H2.9c-1,0-1.8,0.8-1.8,1.8v0.3
C1.1,3,1.9,2.3,2.9,2.3z"/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="0.2378" y1="-721.2634" x2="23.3135" y2="-732.0244" gradientTransform="matrix(1 0 0 -1 0 -716)">
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
</linearGradient>
<path class="st8" d="M21.1,2H2.9c-1,0-1.8,0.8-1.8,1.8v12.7c0,1,0.8,1.8,1.8,1.8h6.4c0,0.7-0.2,1.9-0.6,2.5
c-0.2,0.2-0.5,0.3-0.7,0.3s-0.5,0.2-0.5,0.5S7.6,22,7.9,22h8.2c0.3,0,0.5-0.2,0.5-0.5s-0.2-0.5-0.5-0.5c-0.3,0-0.5-0.1-0.7-0.3
c-0.5-0.5-0.6-1.7-0.6-2.5h6.4c1,0,1.8-0.8,1.8-1.8V3.8C22.9,2.8,22.1,2,21.1,2z"/>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="1.7228" y1="746.1478" x2="22.4117" y2="755.7944" gradientTransform="matrix(1 0 0 1 0 -742)">
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
</linearGradient>
<path class="st9" d="M22,3.7c0-0.5-0.4-0.8-0.7-0.8H2.7C2.4,2.9,2,3.3,2,3.7v11h20V3.7z"/>
<path class="st10" d="M6.7,13.8c-0.3,0-0.5-0.1-0.6-0.3c-0.4-0.4-0.4-1,0-1.4l3.1-3.1L6.1,5.9c-0.4-0.4-0.4-1,0-1.4
c0.4-0.4,1-0.4,1.4,0l3.8,3.8c0.4,0.4,0.4,1,0,1.4l-3.8,3.8C7.3,13.7,7,13.8,6.7,13.8z M17.3,13.8h-4.7c-0.5,0-0.9-0.5-0.9-0.9
s0.5-0.9,0.9-0.9h4.7c0.5,0,0.9,0.5,0.9,0.9S17.7,13.8,17.3,13.8z"/>
<g>
<path class="st11" d="M6.7,13.3c-0.3,0-0.5-0.1-0.6-0.3c-0.4-0.4-0.4-1,0-1.4l3.1-3.1L6.1,5.4c-0.4-0.4-0.4-1,0-1.4
c0.4-0.4,1-0.4,1.4,0l3.8,3.8c0.4,0.4,0.4,1,0,1.4l-3.8,3.8C7.3,13.2,7,13.3,6.7,13.3z"/>
</g>
<g>
<path class="st11" d="M17.3,13.3h-4.7c-0.5,0-0.9-0.5-0.9-0.9c0-0.5,0.5-0.9,0.9-0.9h4.7c0.5,0,0.9,0.5,0.9,0.9
S17.7,13.3,17.3,13.3z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:#303C42;}
.st1{opacity:0.1;enable-background:new ;}
.st2{opacity:0.2;enable-background:new ;}
.st3{opacity:0.1;fill:#FFFFFF;enable-background:new ;}
.st4{fill:#428EB3;}
.st5{fill:#C6CDD1;}
.st6{fill:url(#SVGID_1_);}
.st7{fill:url(#SVGID_2_);}
.st8{fill:#29A1DC;}
.st9{opacity:0.2;fill:#FFFFFF;enable-background:new ;}
.st10{fill:url(#SVGID_3_);}
</style>
<path class="st0" d="M2,7.5h18.2v2.7H2V7.5z"/>
<path class="st1" d="M2,7.5h18.2v2.7H2V7.5z"/>
<path class="st0" d="M1.1,3.8v3.6C1.1,8,1.5,8.4,2,8.4h18.2c0.5,0,0.9-0.4,0.9-0.9V3.8c0-0.5-0.4-0.9-0.9-0.9H2
C1.5,2.9,1.1,3.3,1.1,3.8z"/>
<path class="st2" d="M20.2,8.1H2c-0.5,0-0.9-0.4-0.9-0.9v0.2C1.1,8,1.5,8.4,2,8.4h18.2c0.5,0,0.9-0.4,0.9-0.9V7.2
C21.1,7.7,20.7,8.1,20.2,8.1z"/>
<path class="st3" d="M20.2,2.9H2c-0.5,0-0.9,0.4-0.9,0.9v0.2c0-0.5,0.4-0.9,0.9-0.9h18.2c0.5,0,0.9,0.4,0.9,0.9V3.8
C21.1,3.3,20.7,2.9,20.2,2.9z"/>
<circle class="st4" cx="17.9" cy="5.6" r="0.5"/>
<circle class="st4" cx="16.1" cy="5.6" r="0.5"/>
<circle class="st4" cx="14.3" cy="5.6" r="0.5"/>
<circle class="st5" cx="4.7" cy="5.6" r="0.9"/>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="4.1628" y1="20.9292" x2="5.1788" y2="19.9133" gradientTransform="matrix(1 0 0 -1 0 26)">
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
</linearGradient>
<circle class="st6" cx="4.7" cy="5.6" r="0.9"/>
<path class="st0" d="M1.1,10.2v3.6c0,0.5,0.4,0.9,0.9,0.9h18.2c0.5,0,0.9-0.4,0.9-0.9v-3.6c0-0.5-0.4-0.9-0.9-0.9H2
C1.5,9.3,1.1,9.7,1.1,10.2z"/>
<path class="st2" d="M20.2,14.5H2c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.5,0.4,0.9,0.9,0.9h18.2c0.5,0,0.9-0.4,0.9-0.9v-0.2
C21.1,14.1,20.7,14.5,20.2,14.5z"/>
<path class="st3" d="M20.2,9.3H2c-0.5,0-0.9,0.4-0.9,0.9v0.2c0-0.5,0.4-0.9,0.9-0.9h18.2c0.5,0,0.9,0.4,0.9,0.9v-0.2
C21.1,9.7,20.7,9.3,20.2,9.3z"/>
<circle class="st4" cx="17.9" cy="12" r="0.5"/>
<circle class="st4" cx="16.1" cy="12" r="0.5"/>
<circle class="st4" cx="14.3" cy="12" r="0.5"/>
<circle class="st5" cx="4.7" cy="12" r="0.9"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="4.1628" y1="14.5738" x2="5.1788" y2="13.5578" gradientTransform="matrix(1 0 0 -1 0 26)">
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
</linearGradient>
<circle class="st7" cx="4.7" cy="12" r="0.9"/>
<path class="st8" d="M22.4,13.8h-4.4l-0.9-0.9h-3.8c-0.3,0-0.5,0.2-0.5,0.5v7.3c0,0.3,0.2,0.5,0.5,0.5h9.1c0.3,0,0.5-0.2,0.5-0.5
v-6.4C22.9,14,22.7,13.8,22.4,13.8z"/>
<path class="st9" d="M22.4,13.8h-4.4l-0.9-0.9h-3.8c-0.3,0-0.5,0.2-0.5,0.5v0.2c0-0.3,0.2-0.5,0.5-0.5h3.8l0.9,0.9h4.4
c0.3,0,0.5,0.2,0.5,0.5v-0.2C22.9,14,22.7,13.8,22.4,13.8z"/>
<path class="st1" d="M22.4,20.9h-9.1c-0.3,0-0.5-0.2-0.5-0.5v0.2c0,0.3,0.2,0.5,0.5,0.5h9.1c0.3,0,0.5-0.2,0.5-0.5v-0.2
C22.9,20.6,22.7,20.9,22.4,20.9z"/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="0.7043" y1="21.5139" x2="25.1518" y2="10.1132" gradientTransform="matrix(1 0 0 -1 0 26)">
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
</linearGradient>
<path class="st10" d="M22.4,13.8h-1.4v-3.6c0-0.5-0.4-0.9-0.9-0.9V8.4c0.5,0,0.9-0.4,0.9-0.9V3.8c0-0.5-0.4-0.9-0.9-0.9H2
c-0.5,0-0.9,0.4-0.9,0.9v3.6C1.1,8,1.5,8.4,2,8.4v0.9c-0.5,0-0.9,0.4-0.9,0.9v3.6c0,0.5,0.4,0.9,0.9,0.9h10.9v5.9
c0,0.3,0.2,0.5,0.5,0.5h9.1c0.3,0,0.5-0.2,0.5-0.5v-6.4C22.9,14,22.7,13.8,22.4,13.8z"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

View File

@@ -1,380 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;}
.st1{fill:#173E51;}
.st2{fill:#51BCF0;}
.st3{fill:#29A1DC;}
.st4{fill:#1381B7;}
.st5{fill:#D1D6D8;}
.st6{fill:#C0C2C3;}
.st7{fill:url(#SVGID_24_);}
.st8{fill:#CECECE;}
.st9{fill:#727272;}
.st10{fill:url(#SVGID_25_);}
.st11{fill:url(#SVGID_26_);}
.st12{fill:url(#SVGID_27_);}
.st13{fill:url(#SVGID_28_);}
.st14{fill:url(#SVGID_29_);}
.st15{fill:url(#SVGID_30_);}
.st16{fill:url(#SVGID_31_);}
.st17{fill:url(#SVGID_32_);}
.st18{fill:url(#SVGID_33_);}
.st19{fill:url(#SVGID_34_);}
.st20{fill:url(#SVGID_35_);}
.st21{fill:url(#SVGID_36_);}
.st22{fill:url(#SVGID_37_);}
.st23{fill:url(#SVGID_38_);}
.st24{fill:url(#SVGID_39_);}
.st25{fill:url(#SVGID_40_);}
.st26{fill:url(#SVGID_41_);}
.st27{fill:url(#SVGID_42_);}
.st28{fill:url(#SVGID_43_);}
.st29{fill:url(#SVGID_44_);}
.st30{fill:url(#SVGID_45_);}
.st31{fill:url(#SVGID_46_);}
</style>
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_1_" viewBox="0 -99 103.5 99" style="overflow:visible;">
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
</g>
</g>
</pattern>
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_10_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
<path class="st2" d="M0-40.5h37.5V0H0V-40.5z"/>
</g>
</g>
</pattern>
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_11_" viewBox="0 -99 103.5 99" style="overflow:visible;">
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
</g>
</g>
</pattern>
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_12_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
<path class="st2" d="M0-40.5h37.5V0H0V-40.5z"/>
</g>
</g>
</pattern>
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_13_" viewBox="0 -99 103.5 99" style="overflow:visible;">
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
</g>
</g>
</pattern>
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_14_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
<path class="st2" d="M0-40.5h37.5V0H0V-40.5z"/>
</g>
</g>
</pattern>
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_15_" viewBox="0 -99 103.5 99" style="overflow:visible;">
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
</g>
</g>
</pattern>
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_16_" viewBox="0 -99 103.5 99" style="overflow:visible;">
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
</g>
</g>
</pattern>
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_17_" viewBox="0 -99 103.5 99" style="overflow:visible;">
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
</g>
</g>
</pattern>
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_18_" viewBox="0 -99 103.5 99" style="overflow:visible;">
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
</g>
</g>
</pattern>
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_19_" viewBox="0 -99 103.5 99" style="overflow:visible;">
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
</g>
</g>
</pattern>
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_2_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
<path class="st3" d="M0-40.5h37.5V0H0V-40.5z"/>
</g>
</g>
</pattern>
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_20_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
<path class="st3" d="M0-40.5h37.5V0H0V-40.5z"/>
</g>
</g>
</pattern>
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_21_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
<path class="st4" d="M0-40.5h37.5V0H0V-40.5z"/>
</g>
</g>
</pattern>
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_22_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
<path class="st5" d="M0-40.5h37.5V0H0V-40.5z"/>
</g>
</g>
</pattern>
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_23_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
<path class="st2" d="M0-40.5h37.5V0H0V-40.5z"/>
</g>
</g>
</pattern>
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_3_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
<path class="st4" d="M0-40.5h37.5V0H0V-40.5z"/>
</g>
</g>
</pattern>
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_4_" viewBox="0 -99 103.5 99" style="overflow:visible;">
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
</g>
</g>
</pattern>
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_5_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
<path class="st5" d="M0-40.5h37.5V0H0V-40.5z"/>
</g>
</g>
</pattern>
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_6_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
<path class="st6" d="M0-40.5h37.5V0H0V-40.5z"/>
</g>
</g>
</pattern>
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_7_" viewBox="0 -99 103.5 99" style="overflow:visible;">
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
</g>
</g>
</pattern>
<pattern y="24" width="37.5" height="40.5" patternUnits="userSpaceOnUse" id="SVGID_8_" viewBox="0 -40.5 37.5 40.5" style="overflow:visible;">
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<g>
<rect y="-40.5" class="st0" width="37.5" height="40.5"/>
<path class="st0" d="M0-40.5h37.5V0H0V-40.5z"/>
<path class="st2" d="M0-40.5h37.5V0H0V-40.5z"/>
</g>
</g>
</pattern>
<pattern y="24" width="103.5" height="99" patternUnits="userSpaceOnUse" id="SVGID_9_" viewBox="0 -99 103.5 99" style="overflow:visible;">
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<g>
<rect y="-99" class="st0" width="103.5" height="99"/>
<path class="st0" d="M0-99h103.5V0H0V-99z"/>
<path class="st1" d="M0-99h103.5V0H0V-99z"/>
</g>
</g>
</pattern>
<pattern id="SVGID_24_" xlink:href="#SVGID_1_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
</pattern>
<path class="st7" d="M15.9,4.3h-1.6V4c0-0.4-0.3-0.7-0.8-0.7h-1.6c-0.1,0-0.2,0-0.2-0.1c0-0.1,0-0.3-0.1-0.4
c-0.2-0.5-0.7-0.9-1.3-0.9C9.9,1.8,9.4,2,9,2.3c-0.3,0.3-0.5,0.6-0.5,1c0,0,0,0,0,0c0,0-0.1,0-0.1,0H6.8C6.4,3.3,6,3.6,6,4v0.3H4.5
C3.7,4.3,3,4.9,3,5.8v14.6c0,0.8,0.7,1.5,1.5,1.5h11.4c0.8,0,1.5-0.7,1.5-1.5V5.8C17.4,4.9,16.7,4.3,15.9,4.3z M6.7,4
c0,0,0.1-0.1,0.2-0.1h1.6c0.2,0,0.4-0.1,0.6-0.2c0.1-0.1,0.2-0.3,0.2-0.5l0,0c0-0.2,0.1-0.3,0.3-0.5c0.3-0.2,0.6-0.3,0.9-0.3
c0.3,0.1,0.7,0.3,0.8,0.6c0,0.1,0,0.1,0,0.2c0,0.2,0.1,0.3,0.2,0.4c0.2,0.2,0.3,0.3,0.6,0.3h1.6c0.1,0,0.2,0.1,0.2,0.1v1.2
c0,0-0.1,0.1-0.2,0.1H6.8c-0.1,0-0.1,0-0.2-0.1C6.7,5.2,6.7,4,6.7,4z M16.8,20.4c0,0.5-0.4,0.9-0.9,0.9H4.5c0,0-0.1,0-0.1,0
s0,0-0.1,0s-0.1,0-0.1,0c0,0-0.1,0-0.1,0S4,21.2,4,21.1c0,0-0.1-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1c0,0,0-0.1-0.1-0.1
c0,0-0.1-0.1-0.1-0.1c-0.1-0.1-0.1-0.3-0.1-0.4V5.8c0-0.5,0.4-0.9,0.9-0.9h1.6v0.3c0,0.4,0.3,0.7,0.8,0.7h6.7c0.4,0,0.8-0.3,0.8-0.7
V4.9h1.6c0.2,0,0.3,0,0.4,0.1l0,0c0.1,0,0.1,0.1,0.2,0.1c0,0,0,0,0.1,0.1c0.1,0.1,0.1,0.1,0.1,0.2c0,0,0,0.1,0.1,0.1
c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1s0,0,0,0.1s0,0.1,0,0.1L16.8,20.4L16.8,20.4z"/>
<path class="st8" d="M16.8,5.7C16.8,5.7,16.8,5.7,16.8,5.7c0-0.1,0-0.1,0-0.2c0,0,0-0.1,0-0.1c0,0,0-0.1-0.1-0.1
c0-0.1-0.1-0.1-0.1-0.2C16.5,5.1,16.4,5,16.3,5l0,0c-0.1-0.1-0.3-0.1-0.4-0.1h-1.6v0.3c0,0.4-0.3,0.7-0.8,0.7H6.8
c-0.4,0-0.8-0.3-0.8-0.7V4.9H4.5C4,4.9,3.6,5.3,3.6,5.8v14.6c0,0.2,0,0.3,0.1,0.4c0,0,0,0.1,0.1,0.1c0,0.1,0,0.1,0.1,0.1
c0,0,0.1,0.1,0.1,0.1c0,0,0.1,0.1,0.1,0.1c0,0,0.1,0,0.1,0.1c0.1,0,0.1,0,0.1,0.1c0,0,0.1,0,0.1,0s0,0,0.1,0s0.1,0,0.1,0h11.4
c0.5,0,0.9-0.4,0.9-0.9L16.8,5.7C16.8,5.7,16.8,5.7,16.8,5.7z M4.6,6.9c0-0.2,0.1-0.3,0.3-0.3h10.7c0.2,0,0.3,0.1,0.3,0.3v13.3
c0,0.2-0.1,0.3-0.3,0.3H4.8c-0.2,0-0.3-0.1-0.3-0.3L4.6,6.9L4.6,6.9z"/>
<path class="st9" d="M16.8,5.8v14.6c0,0.5-0.4,0.9-0.9,0.9H4.5c-0.3,0-0.7-0.2-0.8-0.5c0.1,0.1,0.3,0.1,0.4,0.1h11.4
c0.5,0,0.9-0.4,0.9-0.9V5.4c0-0.2,0-0.3-0.1-0.4C16.6,5.1,16.8,5.4,16.8,5.8z"/>
<pattern id="SVGID_25_" xlink:href="#SVGID_2_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
</pattern>
<path class="st10" d="M13.7,4v1.2c0,0-0.1,0.1-0.2,0.1H6.8c-0.1,0-0.1,0-0.2-0.1V4c0,0,0.1-0.1,0.2-0.1h1.6c0.2,0,0.4-0.1,0.6-0.2
c0.1-0.1,0.2-0.3,0.2-0.5l0,0c0-0.2,0.1-0.3,0.3-0.5c0.3-0.2,0.6-0.3,0.9-0.3c0.3,0.1,0.7,0.3,0.8,0.6c0,0.1,0,0.1,0,0.2
c0,0.2,0.1,0.3,0.2,0.4c0.2,0.2,0.3,0.3,0.6,0.3L13.7,4C13.7,3.9,13.7,4,13.7,4z"/>
<pattern id="SVGID_26_" xlink:href="#SVGID_3_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
</pattern>
<path class="st11" d="M13.7,4v1.2c0,0-0.1,0.1-0.2,0.1H6.8c-0.1,0-0.1,0-0.2-0.1V4.8H13c0.1,0,0.2,0,0.2-0.1V3.9h0.4
C13.7,3.9,13.7,4,13.7,4z"/>
<pattern id="SVGID_27_" xlink:href="#SVGID_4_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
</pattern>
<path class="st12" d="M15.5,6.6H4.8c-0.2,0-0.3,0.1-0.3,0.3v13.3c0,0.2,0.1,0.3,0.3,0.3h10.7c0.2,0,0.3-0.1,0.3-0.3V6.9
C15.9,6.7,15.7,6.6,15.5,6.6L15.5,6.6z M15.2,19.9H5.2V7.2h10.1V19.9z"/>
<pattern id="SVGID_28_" xlink:href="#SVGID_5_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
</pattern>
<path class="st13" d="M5.2,7.2v12.7h10.1V7.2H5.2z M8.6,18.8c0,0.2-0.1,0.3-0.3,0.3H6.8c-0.2,0-0.3-0.1-0.3-0.3v-1.5
c0-0.2,0.1-0.3,0.3-0.3h1.5c0.2,0,0.3,0.1,0.3,0.3V18.8z M8.6,15.8c0,0.2-0.1,0.3-0.3,0.3H6.8c-0.2,0-0.3-0.1-0.3-0.3v-1.5
c0-0.2,0.1-0.3,0.3-0.3h1.5c0.2,0,0.3,0.1,0.3,0.3V15.8z M8.6,12.8c0,0.2-0.1,0.3-0.3,0.3H6.8c-0.2,0-0.3-0.1-0.3-0.3v-1.5
c0-0.2,0.1-0.3,0.3-0.3h1.5c0.2,0,0.3,0.1,0.3,0.3V12.8z M8.6,9.8c0,0.2-0.1,0.3-0.3,0.3H6.8c-0.2,0-0.3-0.1-0.3-0.3V8.2
c0-0.2,0.1-0.3,0.3-0.3h1.5c0.2,0,0.3,0.1,0.3,0.3V9.8z M13.6,18.4H9.5c-0.2,0-0.3-0.1-0.3-0.3c0-0.2,0.1-0.3,0.3-0.3h4.1
c0.2,0,0.3,0.1,0.3,0.3C13.9,18.2,13.7,18.4,13.6,18.4z M13.6,15.4H9.5c-0.2,0-0.3-0.1-0.3-0.3s0.1-0.3,0.3-0.3h4.1
c0.2,0,0.3,0.1,0.3,0.3S13.7,15.4,13.6,15.4z M13.6,12.3H9.5c-0.2,0-0.3-0.1-0.3-0.3s0.1-0.3,0.3-0.3h4.1c0.2,0,0.3,0.1,0.3,0.3
S13.7,12.3,13.6,12.3z M13.6,9.3H9.5C9.3,9.3,9.2,9.2,9.2,9c0-0.2,0.1-0.3,0.3-0.3h4.1c0.2,0,0.3,0.1,0.3,0.3
C13.9,9.2,13.7,9.3,13.6,9.3z"/>
<pattern id="SVGID_29_" xlink:href="#SVGID_6_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
</pattern>
<path class="st14" d="M15.2,7.2v12.7H5.2v-0.6h9.5V7.2H15.2z"/>
<pattern id="SVGID_30_" xlink:href="#SVGID_7_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
</pattern>
<path class="st15" d="M8.3,8H6.8C6.7,8,6.5,8.1,6.5,8.3v1.5c0,0.2,0.1,0.3,0.3,0.3h1.5c0.2,0,0.3-0.1,0.3-0.3V8.3
C8.6,8.1,8.5,8,8.3,8z M8,9.5H7.1V8.6H8V9.5z"/>
<pattern id="SVGID_31_" xlink:href="#SVGID_8_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
</pattern>
<path class="st16" d="M7.1,8.6H8v0.9H7.1V8.6z"/>
<pattern id="SVGID_32_" xlink:href="#SVGID_9_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
</pattern>
<path class="st17" d="M8.3,11H6.8c-0.2,0-0.3,0.1-0.3,0.3v1.5c0,0.2,0.1,0.3,0.3,0.3h1.5c0.2,0,0.3-0.1,0.3-0.3v-1.5
C8.6,11.1,8.5,11,8.3,11z M8,12.5H7.1v-0.9H8V12.5z"/>
<pattern id="SVGID_33_" xlink:href="#SVGID_10_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
</pattern>
<path class="st18" d="M7.1,11.6H8v0.9H7.1V11.6z"/>
<pattern id="SVGID_34_" xlink:href="#SVGID_11_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
</pattern>
<path class="st19" d="M8.3,14H6.8c-0.2,0-0.3,0.1-0.3,0.3v1.5c0,0.2,0.1,0.3,0.3,0.3h1.5c0.2,0,0.3-0.1,0.3-0.3v-1.5
C8.6,14.2,8.5,14,8.3,14z M8,15.5H7.1v-0.9H8V15.5z"/>
<pattern id="SVGID_35_" xlink:href="#SVGID_12_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
</pattern>
<path class="st20" d="M7.1,14.6H8v0.9H7.1V14.6z"/>
<pattern id="SVGID_36_" xlink:href="#SVGID_13_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
</pattern>
<path class="st21" d="M8.3,17H6.8c-0.2,0-0.3,0.1-0.3,0.3l0,0v1.5c0,0.2,0.1,0.3,0.3,0.3h1.5c0.2,0,0.3-0.1,0.3-0.3v-1.5
C8.6,17.2,8.5,17,8.3,17z M8,18.6H7.1v-0.9H8V18.6z"/>
<pattern id="SVGID_37_" xlink:href="#SVGID_14_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
</pattern>
<path class="st22" d="M7.1,17.7H8v0.9H7.1V17.7z"/>
<pattern id="SVGID_38_" xlink:href="#SVGID_15_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
</pattern>
<path class="st23" d="M13.9,9c0,0.2-0.1,0.3-0.3,0.3H9.5C9.3,9.3,9.2,9.2,9.2,9c0-0.2,0.1-0.3,0.3-0.3h4.1C13.7,8.7,13.9,8.9,13.9,9
z"/>
<pattern id="SVGID_39_" xlink:href="#SVGID_16_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
</pattern>
<path class="st24" d="M13.9,12.1c0,0.2-0.1,0.3-0.3,0.3H9.5c-0.2,0-0.3-0.1-0.3-0.3s0.1-0.3,0.3-0.3h4.1
C13.7,11.7,13.9,11.9,13.9,12.1z"/>
<pattern id="SVGID_40_" xlink:href="#SVGID_17_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
</pattern>
<path class="st25" d="M13.9,15.1c0,0.2-0.1,0.3-0.3,0.3H9.5c-0.2,0-0.3-0.1-0.3-0.3s0.1-0.3,0.3-0.3h4.1
C13.7,14.8,13.9,14.9,13.9,15.1z"/>
<pattern id="SVGID_41_" xlink:href="#SVGID_18_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
</pattern>
<path class="st26" d="M13.9,18.1c0,0.2-0.1,0.3-0.3,0.3H9.5c-0.2,0-0.3-0.1-0.3-0.3c0-0.2,0.1-0.3,0.3-0.3h4.1
C13.7,17.8,13.9,17.9,13.9,18.1z"/>
<pattern id="SVGID_42_" xlink:href="#SVGID_19_" patternTransform="matrix(1 0 0 1 -636.654 15918.918)">
</pattern>
<path class="st27" d="M21,19.3C21,19.3,20.9,19.3,21,19.3l0-9.4l0,0v0c0,0,0-0.1,0-0.1l0,0l-1-2.3c-0.1-0.1-0.2-0.2-0.3-0.2
s-0.2,0.1-0.3,0.2l-0.9,2.3l0,0c0,0,0,0,0,0.1s0,0,0,0.1l0,0l0,10.7c0,0.7,0.6,1.3,1.3,1.3l0,0h0.1c0.3,0,0.6-0.1,0.9-0.4
c0.2-0.2,0.4-0.5,0.4-0.9V19.3C20.9,19.3,20.9,19.3,21,19.3z M19.6,8.4l0.5,1.3h-1L19.6,8.4z M20.3,10.2l0,8.8H19l0-8.8
C19,10.3,20.3,10.2,20.3,10.2z M20.2,21.1c-0.1,0.1-0.3,0.2-0.4,0.2h-0.1c-0.2,0-0.3-0.1-0.4-0.2S19,20.8,19,20.7v-1h1.3v1
C20.4,20.8,20.3,21,20.2,21.1z"/>
<pattern id="SVGID_43_" xlink:href="#SVGID_20_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
</pattern>
<path class="st28" d="M20.4,19H19l0-8.8h1.3L20.4,19z"/>
<pattern id="SVGID_44_" xlink:href="#SVGID_21_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
</pattern>
<path class="st29" d="M20.4,19H19v-0.4h1.1l0-8.4h0.3L20.4,19z"/>
<pattern id="SVGID_45_" xlink:href="#SVGID_22_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
</pattern>
<path class="st30" d="M20.2,9.7h-1l0.5-1.3L20.2,9.7z"/>
<pattern id="SVGID_46_" xlink:href="#SVGID_23_" patternTransform="matrix(1 0 0 1 -585.044 15869.5332)">
</pattern>
<path class="st31" d="M20.4,20.6c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.2-0.4,0.2h-0.1c-0.2,0-0.3-0.1-0.4-0.2
c-0.1-0.1-0.2-0.3-0.2-0.4v-1h1.3V20.6z"/>
</svg>

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 355 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 351 KiB

View File

@@ -1,55 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:#29A1DC;}
.st1{clip-path:url(#SVGID_2_);fill:#7DBCE7;}
.st2{fill:#010101;}
.st3{fill:#F5CCB3;}
.st4{fill:#FFFFFF;}
.st5{fill:#AF5C51;}
.st6{fill:#C4E5D9;}
</style>
<path class="st0" d="M18.6,19.8c0,1.3-2.9,2.3-6.5,2.3s-6.5-1-6.5-2.3c0-1.3,2.9-2.3,6.5-2.3S18.6,18.5,18.6,19.8z"/>
<g>
<defs>
<path id="SVGID_1_" d="M9.3,23.8c0.1,0.7,0.5,1.1,0.8,1.3h3.7c0.5-0.3,0.9-0.9,0.9-2v-2.8c0,0,0.1-0.7,0.7-0.9c0,0,0.4-0.3,0-0.4
c0,0-1.8-0.1-1.8,1.3v2.1c0,0,0.1,0.8-0.3,1.1V21c0,0,0-0.8,0.5-1.2c0,0,0.3-0.5-0.3-0.4c0,0-1.2,0.2-1.3,1.6l0,2.7h-0.3l0-2.7
c-0.1-1.4-1.3-1.6-1.3-1.6c-0.6-0.1-0.3,0.4-0.3,0.4c0.4,0.3,0.5,1.2,0.5,1.2v2.7c-0.4-0.3-0.3-1.1-0.3-1.1v-2.1
c0-1.4-1.8-1.3-1.8-1.3c-0.4,0.1,0,0.4,0,0.4c0.6,0.2,0.7,0.9,0.7,0.9v2L9.3,23.8L9.3,23.8z"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<path class="st1" d="M18.6,19.8c0,1.3-2.9,2.3-6.5,2.3s-6.5-1-6.5-2.3c0-1.3,2.9-2.3,6.5-2.3S18.6,18.5,18.6,19.8z"/>
</g>
<path class="st0" d="M4.7,13.1l-0.2,0.6c0,0,0,0.2,0.2,0.3c0.2,0,0.2-0.2,0.2-0.3L4.7,13.1L4.7,13.1z"/>
<path class="st2" d="M23.5,10.4L23.5,10.4c-1.9-0.5-3.8-0.5-5-0.4c0.2-0.7,0.3-1.5,0.3-2.4c0-1.3-0.5-2.3-1.3-3.1
C17.6,4,17.8,3,17.3,1.8c0,0-0.9-0.3-2.9,1.1c-0.8-0.2-1.6-0.3-2.5-0.3c-0.9,0-1.8,0.1-2.7,0.4c-2.1-1.4-3-1.1-3-1.1
C5.7,3.3,6,4.4,6.1,4.6C5.4,5.4,5,6.4,5,7.6c0,0.9,0.1,1.7,0.4,2.4c-1.2,0-3.1,0-4.9,0.3l0,0.1C2.3,10,4.2,10,5.4,10
c0.1,0.1,0.1,0.3,0.2,0.4c-1.2,0-3.2,0.2-5.1,0.7l0,0.1c1.9-0.5,3.9-0.7,5.1-0.7c0.7,1.3,2.1,2.1,4.5,2.4c-0.4,0.2-0.7,0.6-0.8,1.3
c-0.5,0.2-2,0.8-2.9-0.8c0,0-0.5-0.9-1.5-1c0,0-0.9,0-0.1,0.6c0,0,0.6,0.3,1.1,1.4c0,0,0.6,1.9,3.3,1.3v1.9c0,0-0.1,0.7-0.7,0.9
c0,0-0.4,0.3,0,0.4c0,0,1.8,0.1,1.8-1.3v-2.1c0,0-0.1-0.8,0.3-1.1V18c0,0,0,0.8-0.5,1.2c0,0-0.3,0.5,0.3,0.4c0,0,1.2-0.2,1.3-1.6
l0-3.5h0.3l0,3.5c0.1,1.4,1.3,1.6,1.3,1.6c0.6,0.1,0.3-0.4,0.3-0.4c-0.4-0.3-0.5-1.2-0.5-1.2v-3.5c0.4,0.3,0.3,1.1,0.3,1.1v2.1
c0,1.4,1.8,1.3,1.8,1.3c0.4-0.1,0-0.4,0-0.4c-0.6-0.2-0.7-0.9-0.7-0.9v-2.8c0-1.1-0.5-1.7-0.9-2c2.6-0.3,3.9-1.1,4.4-2.4
c1.1,0,3.2,0.2,5.2,0.7l0-0.1c-2-0.6-4-0.7-5.2-0.7c0.1-0.1,0.1-0.3,0.1-0.4C19.7,10,21.6,10,23.5,10.4L23.5,10.4z"/>
<path class="st3" d="M16.2,7.5c0.6,0.5,0.9,1.1,0.9,1.8c0,3.1-2.3,3.2-5.2,3.2S6.8,12,6.8,9.3c0-0.7,0.3-1.3,0.9-1.8
c0.9-0.8,2.5-0.4,4.3-0.4S15.3,6.6,16.2,7.5L16.2,7.5z"/>
<path class="st4" d="M10.2,9.4c0,0.9-0.5,1.5-1.1,1.5s-1.1-0.7-1.1-1.5c0-0.9,0.5-1.5,1.1-1.5C9.7,7.9,10.2,8.6,10.2,9.4z"/>
<path class="st5" d="M9.9,9.5c0,0.6-0.3,1-0.7,1c-0.4,0-0.7-0.5-0.7-1c0-0.6,0.3-1,0.7-1C9.6,8.4,9.9,8.9,9.9,9.5z"/>
<path class="st4" d="M16,9.4c0,0.9-0.5,1.5-1.1,1.5c-0.6,0-1.1-0.7-1.1-1.5c0-0.9,0.5-1.5,1.1-1.5C15.5,7.9,16,8.6,16,9.4z"/>
<path class="st5" d="M15.6,9.5c0,0.6-0.3,1-0.7,1c-0.4,0-0.7-0.5-0.7-1c0-0.6,0.3-1,0.7-1C15.3,8.4,15.6,8.9,15.6,9.5z M12.2,10.8
c0,0.1-0.1,0.3-0.3,0.3c-0.1,0-0.3-0.1-0.3-0.3c0-0.2,0.1-0.3,0.3-0.3C12.1,10.5,12.2,10.7,12.2,10.8z M11.3,11.5c0,0,0-0.1,0.1-0.1
c0,0,0.1,0,0.1,0.1c0.1,0.2,0.3,0.3,0.5,0.3c0.2,0,0.4-0.1,0.5-0.3c0,0,0.1-0.1,0.1-0.1c0,0,0.1,0.1,0.1,0.1
c-0.1,0.3-0.3,0.4-0.6,0.4C11.7,11.9,11.4,11.8,11.3,11.5L11.3,11.5z"/>
<path class="st6" d="M5.4,12.7c0,0.1-0.1,0.1-0.2,0.1c-0.1,0-0.2-0.1-0.2-0.1s0.1-0.1,0.2-0.1C5.3,12.6,5.4,12.6,5.4,12.7z M5.9,13
c0,0.1-0.1,0.1-0.2,0.1c-0.1,0-0.2-0.1-0.2-0.1s0.1-0.1,0.2-0.1C5.8,12.9,5.9,12.9,5.9,13z M6.2,13.4c0,0.1-0.1,0.1-0.2,0.1
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C6.1,13.3,6.2,13.3,6.2,13.4z M6.5,13.8c0,0.1-0.1,0.1-0.2,0.1
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C6.4,13.7,6.5,13.7,6.5,13.8z M6.8,14.2c0,0.1-0.1,0.1-0.2,0.1
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C6.7,14.1,6.8,14.1,6.8,14.2z M7.2,14.6c0,0.1-0.1,0.1-0.2,0.1
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C7.2,14.4,7.2,14.5,7.2,14.6z M7.8,14.8c0,0.1-0.1,0.1-0.2,0.1
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C7.8,14.7,7.8,14.7,7.8,14.8z M8.5,14.8c0,0.1-0.1,0.1-0.2,0.1
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C8.4,14.7,8.5,14.7,8.5,14.8z M9.1,14.7c0,0.1-0.1,0.1-0.2,0.1
c-0.1,0-0.2-0.1-0.2-0.1c0-0.1,0.1-0.1,0.2-0.1C9,14.6,9.1,14.6,9.1,14.7z"/>
</svg>

Before

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 318 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 460 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -1,690 +0,0 @@
<section class="oe_container custom_style description-odoo-font">
<div id="wrap" class="oe_structure oe_empty">
<section class="s_text_block o_colored_level pb120 pt168 oe_img_bg o_bg_img_center" data-snippet="s_text_block" data-name="Text" style="background-image: url('tower_website.svg'); position: relative;">
<div class="container">
<div class="row">
<div class="col-lg-6">
<h2 style="color: #0D3045; font-weight: 500; font-size: 48px" data-bs-original-title="" title="" aria-describedby="tooltip483440">
<strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong> What is Cetmix Tower?
<br/>
</h2>
<p style="font-size: 18px; font-weight:300">
<b>Cetmix Tower</b> is an <b>open-source</b> DevOps framework built on Odoo. <br/><br/>
It empowers you to deploy, manage, and automate applications <b>directly from Odoo</b> whether it's Odoo itself, WordPress, ERPNext or Magento.<br/><br/>
Unlike traditional hosting platforms, Cetmix Tower is <b>not tied to any specific technology</b>. You can use it with Docker, Kubernetes, a bare operating system or whatever your infrastructure requires.<br/><br/>
Fully <b>self-hosted</b> and deeply integrated with the Odoo ecosystem, it gives you complete control over your servers and applications. <br/><br/>
<b>Cetmix Tower</b> is distributed under the <b>AGPL-3 license</b>, ensuring transparency and freedom.
</p>
</div>
<div class="col-lg-6">
<img src="cetmix_tower_server_kanban.png" alt="" class="img img-fluid o_we_custom_image" data-original-id="1256" data-original-src="cetmix_tower_server_kanban.png" data-mimetype="image/png" style="width: 100% !important;" loading="eager"/>
</div>
</div>
</div>
</section>
<section class="s_text_image pb32 o_colored_level o_cc o_cc1" data-snippet="s_image_text" style="color: #343A40;" data-name="Custom Image - Text (2)" data-bs-original-title="" title="" aria-describedby="tooltip882751">
<div class="container">
<div class="row">
<div class="col-lg-6 table-responsive">
<h2 style="color: #0D3045; font-weight: 500; font-size: 48px"> <strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong>Key Differences</h2>
<!-- Bootstrap 5 CSS -->
<table class="table table-striped align-middle border">
<thead>
<tr class="align-middle">
<th class="text-center"> </th>
<th class="text-center"><b>Cetmix Tower</b></th>
<th class="text-center">Odoo.sh</th>
<th class="text-center">Other Odoo Hosting</th>
<th class="text-center">Generic DevOps Tools</th>
</tr>
</thead>
<tbody>
<tr>
<td class="text-start">Can Deploy Odoo Enterprise</td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
</tr>
<tr>
<td class="text-start">Can Deploy Odoo Community</td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
</tr>
<tr>
<td class="text-start">Can Deploy Other Software besides Odoo</td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
</tr>
<tr>
<td class="text-start">Runs on Your Own Server</td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
<td class="text-center">Some*</td>
</tr>
<tr>
<td class="text-start">Native Odoo App</td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
</tr>
<tr>
<td class="text-start">Export/Import &amp; Share Configurations</td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
<td class="text-center">Some*</td>
</tr>
<tr>
<td class="text-start">Is Open Source</td>
<td class="text-center"><i class="fa fa-check text-success"></i></td>
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
<td class="text-center"><i class="fa fa-close text-danger"></i></td>
<td class="text-center">Some*</td>
</tr>
</tbody>
</table>
<p class="small text-muted">* depends on the tool</p>
</div>
<div class="col-lg-6">
<h2 style="color: #0D3045; font-weight: 500; font-size: 48px"> <strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong>Why Cetmix Tower?</h2>
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
<li><strong>Easy to use for non-technical users:</strong> Deploy a server or run a multi-step scenario with a single click in the UI.</li>
<li><strong>Power and flexibility for technical users:</strong> Leverage powerful features to build complex workflows and automate server and application management tasks.</li>
<li><strong>Not limited to a single technology:</strong> Run any software manageable via shell commands or API, whether you're using Docker, Kubernetes, or direct OS commands.</li>
<li><strong>Odoo Integration:</strong> Take advantage of the Odoo ecosystem for server management tasks. Integrate with Sales, Accounting, Subscriptions, Helpdesk, or any other Odoo module.</li>
<li><strong>Not limited to Odoo:</strong> While optimized for Odoo, Cetmix Tower can manage virtually any software.</li>
<li><strong>Extensibility:</strong> Develop your own Odoo modules based on Cetmix Tower to implement custom features.</li>
<li><strong>Self-Hosting:</strong> Deploy Cetmix Tower on your own infrastructure for complete control over your server and application management.</li>
<li><strong>Open Source:</strong> Cetmix Tower is distributed under the AGPL-3 license, ensuring transparency and freedom.</li>
</ul>
</div>
</div>
<div class="container pt64">
<h2 class="pb32" style="color: #0D3045; font-weight: 500; font-size: 48px"><strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong> Core Features</h2>
<div class="container">
<div class="pt32" style="margin-left: 40px; background-color:#0D3045; border-radius: 40px; padding: 24px;">
<p class="card-text text-800" style="font-size: 18px; font-weight:300; color: #d7dcdf !important; text-align: left;"><strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong>Note</p>
<p class="card-text text-800 pb32" style="font-size: 18px; font-weight:300; color: #d7dcdf !important; text-align: left;">Cetmix Tower is designed with usability and simplicity in mind, though some features might require a foundational understanding of server management principles</p>
<h4 style="font-size: 24px; color: #ffffff; font-weight: 200;">
For documentation please check <strong style="font-size: 32px; font-weight: 800; color: #29A1DC;"> | </strong> <a href="https://tower.cetmix.com" style="color: #29A1DC;"> tower.cetmix.com</a>
</h4>
</div>
</div>
</div>
<div class="container pt64">
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="self-host.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Server Management</h3>
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
<li>Variable-based flexible configuration</li>
<li>Create Servers using pre-defined Server Templates</li>
</ul>
<section
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
data-vcss="001"
data-columns="2"
data-snippet="s_images_wall"
data-name="Images Wall"
style="overflow: hidden"
>
<div class="container">
<div class="row s_nb_column_fixed">
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="server_1.png"
alt=""
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
data-original-id="1218"
data-original-src="server_1.png"
data-mimetype="image/png"
data-resize-width="1920"
loading="eager"
title="Server Management"
aria-describedby="tooltip65859"
/>
<img
src="server_template_form.png"
alt=""
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
data-original-id="1242"
data-original-src="server_template_form.png"
data-mimetype="image/png"
data-resize-width="1920"
data-bs-original-title=""
title="Server Management"
aria-describedby="tooltip990969"
loading="eager"
/>
</div>
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="server_form_configuration.png"
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
loading="eager"
data-original-id="1225"
data-original-src="server_form_configuration.png"
data-mimetype="image/png"
title="Server Management"
aria-describedby="tooltip997009"
/>
</div>
</div>
</div>
</section>
</div>
<div class="container pt64">
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="connectivity.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Connectivity</h3>
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
<li>Password and key-based authentication for outgoing SSH connections</li>
<li>Built-in support of the Python requests library for outgoing API calls</li>
</ul>
</div>
<div class="container pt64">
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="development.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Commands</h3>
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
<li>Execute SSH Commands on remote servers</li>
<li>Run Python Commands on the Tower Odoo server</li>
<li>Run Flight Plan from command</li>
<li>Render commands using Variables</li>
<li>Secrets/Keys for private data storage</li>
</ul>
<section
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
data-vcss="001"
data-columns="2"
data-snippet="s_images_wall"
data-name="Images Wall"
style="overflow: hidden"
>
<div class="container">
<div class="row s_nb_column_fixed">
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="commands_1.png"
alt=""
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
data-original-id="1218"
data-original-src="commands_1.png"
data-mimetype="image/png"
data-resize-width="1920"
loading="eager"
title="Commands"
aria-describedby="tooltip65859"
/>
</div>
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="commands_2.png"
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
loading="eager"
data-original-id="1225"
data-original-src="commands_2.png"
data-mimetype="image/png"
title="Commands"
aria-describedby="tooltip997009"
/>
</div>
</div>
</div>
</section>
</div>
<div class="container pt64">
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="flight-plan.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Flight Plans</h3>
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
<li>Execute multiple Commands in a row</li>
<li>Condition-based flow:</li>
<ul>
<li>Based on conditions using Python syntax</li>
<li>Based on the previous command exit code</li>
</ul>
</ul>
<section
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
data-vcss="001"
data-columns="2"
data-snippet="s_images_wall"
data-name="Images Wall"
style="overflow: hidden"
>
<div class="container">
<div class="row s_nb_column_fixed">
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="flight_plan_1.png"
alt=""
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
data-original-id="1218"
data-original-src="flight_plan_1.png"
data-mimetype="image/png"
data-resize-width="1920"
loading="eager"
title="Flight Plans"
aria-describedby="tooltip65859"
/>
<img
src="flight_plan_3.png"
alt=""
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
data-original-id="1242"
data-original-src="flight_plan_3.png"
data-mimetype="image/png"
data-resize-width="1920"
title="Flight Plans"
aria-describedby="tooltip990969"
loading="eager"
/>
</div>
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="flight_plan_2.png"
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
loading="eager"
data-original-id="1225"
data-original-src="flight_plan_2.png"
data-mimetype="image/png"
title="Flight Plans"
aria-describedby="tooltip997009"
/>
</div>
</div>
</div>
</section>
</div>
<div class="container pt64">
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="files.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Files</h3>
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
<li>Download Files from a remote server using SFTP</li>
<li>Upload Files to a remote server using SFTP</li>
<li>Support for <code>text</code> and <code>binary</code> file formats</li>
<li>Manage Files using pre-defined File Templates</li>
</ul>
<section
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
data-vcss="001"
data-columns="2"
data-snippet="s_images_wall"
data-name="Images Wall"
style="overflow: hidden"
>
<div class="container">
<div class="row s_nb_column_fixed">
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="files_1.png"
alt=""
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
data-original-id="1218"
data-original-src="files_1.png"
data-mimetype="image/png"
data-resize-width="1920"
loading="eager"
title="Files"
aria-describedby="tooltip65859"
/>
<img
src="files_3.png"
alt=""
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
data-original-id="1242"
data-original-src="files_3.png"
data-mimetype="image/png"
data-resize-width="1920"
title="Files"
aria-describedby="tooltip990969"
loading="eager"
/>
</div>
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="files_2.png"
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
loading="eager"
data-original-id="1225"
data-original-src="files_2.png"
data-mimetype="image/png"
title="Files"
aria-describedby="tooltip997009"
/>
</div>
</div>
</div>
</section>
</div>
<div class="container pt64">
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="server-logs.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Server Logs</h3>
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
<li>Fetch Logs from a remote server using Commands</li>
<li>Fetch Logs from a remote server using Files</li>
</ul>
<section
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
data-vcss="001"
data-columns="2"
data-snippet="s_images_wall"
data-name="Images Wall"
style="overflow: hidden"
>
<div class="container">
<div class="row s_nb_column_fixed">
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="logs_1.png"
alt=""
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
data-original-id="1218"
data-original-src="logs_1.png"
data-mimetype="image/png"
data-resize-width="1920"
loading="eager"
title="Server Logs"
aria-describedby="tooltip65859"
/>
</div>
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="logs_2.png"
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
loading="eager"
data-original-id="1225"
data-original-src="logs_2.png"
data-mimetype="image/png"
title="Server Logs"
aria-describedby="tooltip997009"
/>
</div>
</div>
</div>
</section>
</div>
<div class="container pt64 pb64">
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="tools.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Import/Export Data in YAML Format</h3>
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
<li>Share and manage data easily using YAML format</li>
</ul>
<section
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
data-vcss="001"
data-columns="2"
data-snippet="s_images_wall"
data-name="Images Wall"
style="overflow: hidden"
>
<div class="container">
<div class="row s_nb_column_fixed">
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="yaml_1.png"
alt=""
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
data-original-id="1218"
data-original-src="yaml_1.png"
data-mimetype="image/png"
data-resize-width="1920"
loading="eager"
title="Import/Export Data in YAML Format"
aria-describedby="tooltip65859"
/>
<img
src="yaml_4.png"
alt=""
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
data-original-id="1218"
data-original-src="yaml_4.png"
data-mimetype="image/png"
data-resize-width="1920"
loading="eager"
title="Import/Export Data in YAML Format"
aria-describedby="tooltip65859"
/>
</div>
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="yaml_3.png"
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
loading="eager"
data-original-src="yaml_3.png"
data-mimetype="image/png"
title="Import/Export Data in YAML Format"
/>
<img
src="yaml_5.png"
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
loading="eager"
data-original-src="yaml_5.png"
data-mimetype="image/png"
title="Import/Export Data in YAML Format"
/>
<img
src="yaml_2.png"
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
loading="eager"
data-original-src="yaml_2.png"
data-mimetype="image/png"
title="Import/Export Data in YAML Format"
/>
</div>
</div>
</div>
</section>
</div>
<div class="container pt64 pb64">
<h3 style="color: #0D3045; font-weight: 500; font-size: 48px"><img src="git.svg" style="height: 48px; margin-right: 10px; vertical-align: text-top;"/>Manage Git Projects</h3>
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">
<li>
Manage Git projects directly from Odoo
</li>
<li>
User-friendly interface for controlling git repositories linked to your servers
</li>
</ul>
<section
class="s_image_gallery pt24 pb24 o_colored_level o_spc-small o_masonry o_cc o_cc1"
data-vcss="001"
data-columns="2"
data-snippet="s_images_wall"
data-name="Images Wall"
style="overflow: hidden"
>
<div class="container">
<div class="row s_nb_column_fixed">
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="git_1.png"
alt=""
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
data-original-id="1218"
data-original-src="git_1.png"
data-mimetype="image/png"
data-resize-width="1920"
loading="eager"
title="Git Projects"
aria-describedby="tooltip65859"
/>
</div>
<div class="o_masonry_col o_snippet_not_selectable col-lg-6">
<img
src="git_2.png"
class="img-fluid d-block rounded shadow mb16 o_visible img o_we_custom_image"
loading="eager"
data-original-src="git_2.png"
data-mimetype="image/png"
title="Git Projects"
/>
</div>
</div>
</div>
</section>
</div>
</div>
</section>
<section class="s_text_image o_colored_level pt64 pb64 o_cc o_cc5 " data-snippet="s_image_text" style="background-color: #0D3045 !important; background-image: none; position: relative; border-top-right-radius: 40px; border-top-left-radius: 40px;" data-name="Custom Image - Text" data-bs-original-title="" title="" aria-describedby="tooltip522920" data-oe-shape-data="{&quot;shape&quot;:&quot;web_editor/Origins/16&quot;,&quot;colors&quot;:{&quot;c3&quot;:&quot;#0D2945&quot;},&quot;flip&quot;:[]}">
<div class="container" style="padding: 30px;">
<div class="col-lg-6" style="text-align: right; margin-left: auto;">
<img src="cetmix.svg" alt="" class="img img-fluid o_we_custom_image" data-original-id="1256" data-original-src="cetmix.svg" data-mimetype="image/svg+xml" data-bs-original-title="" title="" aria-describedby="tooltip359107" style="width: 50% !important;" loading="eager"/>
</div>
<h3 class="pt64" style="color: #ffffff; font-weight: 500; font-size: 48px"><strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong> Warning</h3>
<p class="card-text text-800" style="font-size: 18px; font-weight:300; color: #ffffff !important; text-align: left;">
The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement.
In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.
</p>
</div>
</section>
<section class="s_title o_colored_level o_cc o_cc1" style="position: relative; background-color: #0D3045 !important">
<div style="background-color: #3d4856 !important; border-top-right-radius: 40px; border-top-left-radius: 40px; padding: 20px;">
&nbsp;
</div>
</section>
<section class="s_features o_colored_level pb64 o_cc o_cc1" data-snippet="s_features" data-name="Features" style="position: relative; background-color: #3d4856 !important" data-oe-shape-data="">
<div class="container mx-3">
<h2 style="font-size: 48px; font-weight:500; color: #d7dcdf;">License</h2>
<p class="card-text text-800" style="font-size: 18px; font-weight:300; color: #d7dcdf !important; text-align: left;">Cetmix Tower is distributed under the AGPL-3 license. In case you want to use this software in projects that are not compatible with AGPL-3 license, you should contact us directly.</p>
</div>
</section>
<section class="s_title o_colored_level o_cc o_cc1" style="position: relative; background-color: #3d4856">
<div style="background-color: #d7dcdf !important; border-top-right-radius: 40px; border-top-left-radius: 40px; padding: 20px;">
&nbsp;
</div>
</section>
<section class="s_text_block o_colored_level pt32 pb64 o_cc o_cc1" data-snippet="s_text_block" data-name="Text" style="position: relative; background-color: #d7dcdf !important; color: #3d4856;">
<div class="container mx-3">
<h2 style="font-size: 48px; font-weight:500; color: #3d4856;">Copyright</h2>
<p class="card-text text-800" style="font-size: 18px; font-weight:300; color: #3d4856 !important; text-align: left;">Cetmix Tower is a trademark of Cetmix. All rights reserved.</p>
</div>
</section>
<section class="s_title o_colored_level o_cc o_cc1" style="position: relative; background-color: #d7dcdf">
<div style="background-color: #3d4856 !important; border-top-right-radius: 40px; border-top-left-radius: 40px; padding: 20px;">
&nbsp;
</div>
</section>
<section class="s_text_block o_colored_level pt32 pb64 o_cc o_cc1" data-snippet="s_text_block" data-name="Text" style="position: relative; background-color: #3d4856 !important; color: #3d4856;">
<div class="container mx-3">
<h2 style="font-size: 48px; font-weight:500; color: #d7dcdf;">Support</h2>
<ul class="card-text text-800" style="font-size: 18px; font-weight:300; color: #d7dcdf !important; text-align: left;">
<li>This project is open source. All issues and feature requests should be reported in the GitHub repository</li>
<li>Your contribution is welcome. Please refer to the CONTRIBUTING.md file for more details.</li>
<li>Dedicated support is available on request. Contact us for details at cetmix.com</li>
</ul>
</div>
</section>
<section class="s_title o_colored_level o_cc o_cc1" style="position: relative; background-color: #3d4856">
<div style="background-color: #f4f4f4 !important; border-top-right-radius: 40px; border-top-left-radius: 40px; padding: 20px;">
&nbsp;
</div>
</section>
<section id="cetmix" class="s_text_image o_colored_level pt64 pb64 o_cc o_cc5" data-snippet="s_image_text" style="background-color: #f4f4f4 !important; background-image: none; position: relative;" data-name="Custom Image - Text" data-bs-original-title="" title="" aria-describedby="tooltip522920">
<div class="container">
<div class="row align-items-center">
<div class="pt16 pb16 o_colored_level col-lg-4" style="position: relative;">
<img src="cx_logo.svg" alt="" class="img img-fluid mx-auto o_we_custom_image" style="position: relative;" data-original-id="1229" data-original-src="pdf.svg" data-mimetype="image/svg+xml" data-resize-width="undefined" loading="eager"/>
</div>
<div class="pb16 o_colored_level col-lg-8" >
<h1 style="text-align: left; color:#0D3045; font-size: 48px; font-weight:500;">
Cetmix is not just another IT company
</h1>
<h5 class="pt32" style="text-align: left; color:#3d4856; font-size: 22px; font-weight:300">
We know how the business works. Our experts have management
experience in heavy machinery, energy sector, logistics,
accounting, public services and many other industries _
<br/>
<br/>
We are the people of business
</h5>
</div>
</div>
</div>
</section>
<section class="s_title o_colored_level o_cc o_cc1" style="position: relative; background-color: #f4f4f4">
<div style="background-color: #29A1DC !important; border-top-right-radius: 40px; border-top-left-radius: 40px; padding: 20px;">
&nbsp;
</div>
</section>
<section class="s_call_to_action pt48 pb64 o_colored_level o_cc o_cc5" data-snippet="s_call_to_action" data-name="Call to Action" style="background-color: #29A1DC; color: #ffffff;">
<div class="container" style="margin-left: 100px">
<div class="row o_header_white_border_left">
<div class="col-lg-6 pb16 o_colored_level">
<h3 style="text-align: left; color:#ffffff; font-size: 48px; font-weight:500;">Solutions for your business</h3>
<h5 class="pt16" style="text-align: left; color:#3d4856; font-size: 22px; font-weight:300">Choose an existing one or we can develop a custom one for you</h5>
</div>
<div class="col pt32 o_colored_level">
<p style="text-align: center;" data-bs-original-title="" title="" aria-describedby="tooltip742456">
<a class="mb-2 btn btn-lg shadow" href="https://apps.odoo.com/apps/modules/browse?author=Cetmix" data-bs-original-title="" title="" style="color: #ffffff; border-color: #ffffff; border-radius:20px; font-size: 22px; font-weight:300">Check our Apps</a>
</p>
</div>
</div>
</div>
</section>
<section class="s_text_block o_colored_level o_cc o_cc5" data-snippet="s_text_block" data-name="Text" style="position: relative; background-color: #29A1DC; color: #ffffff; ">
<div class="s_allow_columns container-fluid">
<div class="row d-flex mx-3 pb64">
<div class="o_colored_level col-lg-4" >
<h2 style="text-align: center;">
<span style="color: #ffffff; font-size: 36px; font-weight:500;">>11 <br/> years</span>
</h2>
<h5 style="text-align: center; color:#3d4856; font-size: 22px; font-weight:300">of Odoo experience
</h5>
</div>
<div class="o_colored_level col-lg-4" >
<h2 style="text-align: center;">
<span style="color: #ffffff; font-size: 36px; font-weight:500;">> 30 000 <br/> downloads</span>
</h2>
<h5 style="text-align: center; color:#3d4856; font-size: 22px; font-weight:300">of our apps from Odoo App Store
</h5>
</div>
<div class="o_colored_level col-lg-3" >
<h2 style="text-align: center;">
<span style="color: #ffffff; font-size: 36px; font-weight:500;">>400 <br/> clients</span>
</h2>
<h5 style="text-align: center; color:#3d4856; font-size: 22px; font-weight:300">
are happy with our services
</h5>
</div>
</div>
</div>
</section>
<section class="s_title o_colored_level o_cc o_cc1" style="position: relative; background-color: #0D3045">
<div style="background-color: #29A1DC !important; border-bottom-right-radius: 40px; border-bottom-left-radius: 40px; padding: 20px;">
&nbsp;
</div>
</section>
<section class="s_text_block pt64 pb48 o_colored_level" data-snippet="s_text_block" data-name="Text" style="background-color: #0D3045 !important; border-bottom-right-radius: 40px; border-bottom-left-radius: 40px;" data-bs-original-title="" title="" aria-describedby="tooltip180671">
<div class="s_allow_columns container mx-5" data-bs-original-title="" title="" aria-describedby="tooltip154809">
<h2 style="text-align: left; color:#ffffff; font-size: 48px; font-weight:500;">
Need support, customization<br/>or interested in collaboration ?
</h2>
<h5 class="pb32" style="font-size: 24px; left; color: #ffffff;">
<strong style="font-weight: 800; color: #29A1DC; vertical-align: text-bottom;">| </strong>cetmix.com
<br/>
</h5>
<p style="color: #ffffff;">
<span class="fa fa-linkedin-square fa-3x pt16 mr-3" data-bs-original-title="" title="" aria-describedby="tooltip359279" style="color: #29A1DC !important;"></span>
https://www.linkedin.com/company/cetmix/
</p>
<p style="color: #ffffff;">
<span class="fa fa-github-square fa-3x pt16 mr-3" data-bs-original-title="" title="" aria-describedby="tooltip359279" style="color: #29A1DC !important;"></span>
https://github.com/cetmix/
</p>
<p style="color: #ffffff;">
<span class="fa fa-facebook-square fa-3x pt16 mr-3" data-bs-original-title="" title="" aria-describedby="tooltip359279" style="color: #29A1DC !important;"></span>
https://www.facebook.com//cetmixteam
</p>
<p style="color: #ffffff;">
<span class="fa fa-twitter-square fa-3x pt16 mr-3" data-bs-original-title="" title="" aria-describedby="tooltip359279" style="color: #29A1DC !important;"></span>
https://twitter.com/cetmix_team
</p>
</div>
</div>
</section>
</div>
</section>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 291 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 716 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" id="Server"><path fill="#303c42" d="M2 7h20v3H2z" class="color303c42 svgShape"></path><path d="M2 7h20v3H2z" opacity=".1" fill="#000000" class="color000000 svgShape"></path><path fill="#303c42" d="M2 14h20v3H2z" class="color303c42 svgShape"></path><path d="M2 14h20v3H2z" opacity=".1" fill="#000000" class="color000000 svgShape"></path><path fill="#303c42" d="M1 3v4a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1z" class="color303c42 svgShape"></path><path d="M22 7.75H2a1 1 0 0 1-1-1V7a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1v-.25a1 1 0 0 1-1 1z" opacity=".2" fill="#000000" class="color000000 svgShape"></path><path fill="#ffffff" d="M22 2H2a1 1 0 0 0-1 1v.25a1 1 0 0 1 1-1h20a1 1 0 0 1 1 1V3a1 1 0 0 0-1-1z" opacity=".1" class="colorffffff svgShape"></path><circle cx="19.5" cy="5" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="17.5" cy="5" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="15.5" cy="5" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="5" cy="5" r="1" fill="#29a1dc" class="colorc6cdd1 svgShape"></circle><linearGradient id="a" x1="4.368" x2="5.487" y1="4.368" y2="5.487" gradientUnits="userSpaceOnUse"><stop offset="0" stop-opacity=".1"></stop><stop offset="1" stop-opacity="0"></stop></linearGradient><circle cx="5" cy="5" r="1" fill="url(#a)"></circle><path fill="#303c42" d="M1 10v4a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1z" class="color303c42 svgShape"></path><path d="M22 14.75H2a1 1 0 0 1-1-1V14a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1v-.25a1 1 0 0 1-1 1z" opacity=".2" fill="#000000" class="color000000 svgShape"></path><path fill="#ffffff" d="M22 9H2a1 1 0 0 0-1 1v.25a1 1 0 0 1 1-1h20a1 1 0 0 1 1 1V10a1 1 0 0 0-1-1z" opacity=".1" class="colorffffff svgShape"></path><circle cx="19.5" cy="12" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="17.5" cy="12" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="15.5" cy="12" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="5" cy="12" r="1" fill="#29a1dc" class="colorc6cdd1 svgShape"></circle><linearGradient id="b" x1="4.368" x2="5.487" y1="11.368" y2="12.487" gradientUnits="userSpaceOnUse"><stop offset="0" stop-opacity=".1"></stop><stop offset="1" stop-opacity="0"></stop></linearGradient><circle cx="5" cy="12" r="1" fill="url(#b)"></circle><path fill="#303c42" d="M1 17v4a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1z" class="color303c42 svgShape"></path><path d="M22 21.75H2a1 1 0 0 1-1-1V21a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1v-.25a1 1 0 0 1-1 1z" opacity=".2" fill="#000000" class="color000000 svgShape"></path><path fill="#ffffff" d="M22 16H2a1 1 0 0 0-1 1v.25a1 1 0 0 1 1-1h20a1 1 0 0 1 1 1V17a1 1 0 0 0-1-1z" opacity=".1" class="colorffffff svgShape"></path><circle cx="19.5" cy="19" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="17.5" cy="19" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="15.5" cy="19" r=".5" fill="#428eb3" class="color69b342 svgShape"></circle><circle cx="5" cy="19" r="1" fill="#29a1dc" class="colorc6cdd1 svgShape"></circle><linearGradient id="c" x1="4.368" x2="5.487" y1="18.368" y2="19.487" gradientUnits="userSpaceOnUse"><stop offset="0" stop-opacity=".1"></stop><stop offset="1" stop-opacity="0"></stop></linearGradient><circle cx="5" cy="19" r="1" fill="url(#c)"></circle><linearGradient id="d" x1="-.568" x2="24.568" y1="6.14" y2="17.86" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#ffffff" stop-opacity=".2" class="stopColorffffff svgShape"></stop><stop offset="1" stop-color="#ffffff" stop-opacity="0" class="stopColorffffff svgShape"></stop></linearGradient><path fill="url(#d)" d="M23 7V3a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1v1a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1v1a1 1 0 0 0-1 1v4a1 1 0 0 0 1 1h20a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1v-1a1 1 0 0 0 1-1v-4a1 1 0 0 0-1-1V8a1 1 0 0 0 1-1z"></path></svg>

Before

Width:  |  Height:  |  Size: 3.9 KiB

View File

@@ -1,93 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.1.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:#303C42;}
.st1{opacity:0.1;enable-background:new ;}
.st2{opacity:0.1;fill:#FFFFFF;enable-background:new ;}
.st3{opacity:0.2;enable-background:new ;}
.st4{fill:#428EB3;}
.st5{fill:#C6CDD1;}
.st6{fill:url(#SVGID_1_);}
.st7{fill:url(#SVGID_2_);}
.st8{fill:#D8DBDC;}
.st9{fill:#333333;}
.st10{fill:#4D4D4D;}
.st11{fill:url(#SVGID_3_);}
.st12{opacity:0.2;fill:#FFFFFF;enable-background:new ;}
.st13{fill:#29A1DC;}
.st14{fill:url(#SVGID_4_);}
.st15{fill:url(#SVGID_5_);}
.st16{fill:url(#SVGID_6_);}
</style>
<path class="st0" d="M2.8,6h14.7v1.8H2.8V6z"/>
<path class="st1" d="M2.8,6h14.7v1.8H2.8V6z"/>
<path class="st0" d="M17.5,6.5H2.8C2.3,6.5,1.8,6,1.8,5.5V2.8c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9v2.8
C18.4,6,18,6.5,17.5,6.5z"/>
<path class="st2" d="M17.5,1.9H2.8c-0.5,0-0.9,0.4-0.9,0.9V3c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9V2.8
C18.4,2.3,18,1.9,17.5,1.9z"/>
<path class="st3" d="M17.5,6.2H2.8c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.5,0.4,0.9,0.9,0.9h14.7c0.5,0,0.9-0.4,0.9-0.9V5.3
C18.4,5.8,18,6.2,17.5,6.2z"/>
<path class="st0" d="M17.5,12H2.8c-0.5,0-0.9-0.4-0.9-0.9V8.3c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9v2.8
C18.4,11.6,18,12,17.5,12z"/>
<circle class="st4" cx="16.1" cy="9.7" r="0.5"/>
<circle class="st4" cx="14.3" cy="9.7" r="0.5"/>
<circle class="st4" cx="12.4" cy="9.7" r="0.5"/>
<circle class="st5" cx="4.1" cy="9.7" r="0.9"/>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="3.5643" y1="16.9049" x2="4.5946" y2="15.8746" gradientTransform="matrix(1 0 0 -1 0 26)">
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
</linearGradient>
<circle class="st6" cx="4.1" cy="9.7" r="0.9"/>
<circle class="st4" cx="16.1" cy="4.2" r="0.5"/>
<circle class="st4" cx="14.3" cy="4.2" r="0.5"/>
<circle class="st4" cx="12.4" cy="4.2" r="0.5"/>
<path class="st2" d="M17.5,7.4H2.8c-0.5,0-0.9,0.4-0.9,0.9v0.2c0-0.5,0.4-0.9,0.9-0.9h14.7c0.5,0,0.9,0.4,0.9,0.9V8.3
C18.4,7.8,18,7.4,17.5,7.4z"/>
<path class="st3" d="M17.5,11.7H2.8c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.5,0.4,0.9,0.9,0.9h14.7c0.5,0,0.9-0.4,0.9-0.9v-0.2
C18.4,11.3,18,11.7,17.5,11.7z"/>
<circle class="st5" cx="4.1" cy="4.2" r="0.9"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="3.5643" y1="22.4291" x2="4.5946" y2="21.3988" gradientTransform="matrix(1 0 0 -1 0 26)">
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
</linearGradient>
<circle class="st7" cx="4.1" cy="4.2" r="0.9"/>
<path class="st8" d="M17,19.3c0-0.3-0.2-0.5-0.5-0.5c-0.3,0-0.5,0.2-0.5,0.5h-1.8c0-0.3-0.2-0.5-0.5-0.5s-0.5,0.2-0.5,0.5
c0,1-0.5,1.8-0.9,1.8v0.5H18v-0.5C17.5,21.2,17,20.3,17,19.3z"/>
<path class="st9" d="M22.1,10.6c0-0.8-0.6-1.4-1.4-1.4h-11c-0.8,0-1.4,0.6-1.4,1.4V18h13.8V10.6z"/>
<path class="st8" d="M8.3,18v0.5c0,0.8,0.6,1.4,1.4,1.4h11c0.8,0,1.4-0.6,1.4-1.4V18H8.3z"/>
<path class="st1" d="M20.7,19.6h-11c-0.8,0-1.4-0.6-1.4-1.4v0.2c0,0.8,0.6,1.4,1.4,1.4h11c0.8,0,1.4-0.6,1.4-1.4v-0.2
C22.1,19,21.5,19.6,20.7,19.6z"/>
<path class="st2" d="M9.7,9.4h11c0.8,0,1.4,0.6,1.4,1.4v-0.2c0-0.8-0.6-1.4-1.4-1.4h-11c-0.8,0-1.4,0.6-1.4,1.4v0.2
C8.3,10.1,8.9,9.4,9.7,9.4z"/>
<path class="st10" d="M21.2,10.6c0-0.3-0.2-0.5-0.5-0.5h-11c-0.3,0-0.5,0.2-0.5,0.5V17h12V10.6z"/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="9.0616" y1="15.1862" x2="21.4007" y2="9.4328" gradientTransform="matrix(1 0 0 -1 0 26)">
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
</linearGradient>
<path class="st11" d="M21.2,10.6c0-0.3-0.2-0.5-0.5-0.5h-11c-0.3,0-0.5,0.2-0.5,0.5V17h12V10.6z"/>
<path class="st8" d="M18,22.1h-5.5c-0.3,0-0.5-0.2-0.5-0.5c0-0.3,0.2-0.5,0.5-0.5H18c0.3,0,0.5,0.2,0.5,0.5
C18.4,21.9,18.2,22.1,18,22.1z"/>
<path class="st12" d="M12.4,21.4H18c0.2,0,0.4,0.1,0.4,0.3c0,0,0-0.1,0-0.1c0-0.3-0.2-0.5-0.5-0.5h-5.5c-0.3,0-0.5,0.2-0.5,0.5
c0,0,0,0.1,0,0.1C12,21.6,12.2,21.4,12.4,21.4z"/>
<circle class="st13" cx="15.2" cy="18.9" r="0.5"/>
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="14.7771" y1="7.3105" x2="15.6119" y2="6.9216" gradientTransform="matrix(1 0 0 -1 0 26)">
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
</linearGradient>
<circle class="st14" cx="15.2" cy="18.9" r="0.5"/>
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="14.4175" y1="6.9761" x2="16.8002" y2="4.5933" gradientTransform="matrix(1 0 0 -1 0 26)">
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
</linearGradient>
<path class="st15" d="M17.1,19.8h-3.8l1.4,1.4H18C17.6,21.2,17.2,20.6,17.1,19.8z"/>
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="0.5921" y1="20.7473" x2="23.4202" y2="10.102" gradientTransform="matrix(1 0 0 -1 0 26)">
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
</linearGradient>
<path class="st16" d="M20.7,9.2h-2.3V8.3c0-0.5-0.4-0.9-0.9-0.9V6.5c0.5,0,0.9-0.4,0.9-0.9V2.8c0-0.5-0.4-0.9-0.9-0.9H2.8
c-0.5,0-0.9,0.4-0.9,0.9v2.8c0,0.5,0.4,0.9,0.9,0.9v0.9c-0.5,0-0.9,0.4-0.9,0.9v2.8c0,0.5,0.4,0.9,0.9,0.9h5.5v6.4
c0,0.8,0.6,1.4,1.4,1.4h3.6c-0.1,0.8-0.5,1.4-0.9,1.4c-0.3,0-0.5,0.2-0.5,0.5c0,0.3,0.2,0.5,0.5,0.5H18c0.3,0,0.5-0.2,0.5-0.5
c0-0.3-0.2-0.5-0.5-0.5c-0.4,0-0.8-0.6-0.9-1.4h3.6c0.8,0,1.4-0.6,1.4-1.4v-7.8C22.1,9.8,21.5,9.2,20.7,9.2z"/>
</svg>

Before

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 272 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

View File

@@ -1,159 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Server" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">
<style type="text/css">
.st0{fill:#303C42;}
.st1{opacity:0.1;enable-background:new ;}
.st2{opacity:0.2;enable-background:new ;}
.st3{opacity:0.1;fill:#FFFFFF;enable-background:new ;}
.st4{fill:#428EB3;}
.st5{fill:#C6CDD1;}
.st6{fill:url(#SVGID_1_);}
.st7{fill:url(#SVGID_2_);}
.st8{fill:none;}
.st9{fill:url(#SVGID_3_);}
.st10{fill:#29A1DC;}
.st11{fill:#EFF2F4;}
.st12{fill:#ACB5BA;}
.st13{fill:#CEDAE0;}
.st14{fill:#E6EBEE;}
.st15{fill:#3F5C6B;}
.st16{fill:#22353F;}
.st17{fill:#2B424E;}
.st18{fill:#324F5E;}
</style>
<path class="st0" d="M2,7.5h18.2v2.7H2V7.5z"/>
<path class="st1" d="M2,7.5h18.2v2.7H2V7.5z"/>
<path class="st0" d="M1.1,3.8v3.6c0,0.6,0.4,1,0.9,1h18.2c0.5,0,0.9-0.4,0.9-0.9V3.8c0-0.5-0.4-0.9-0.9-0.9H2
C1.5,2.9,1.1,3.3,1.1,3.8z"/>
<path class="st2" d="M20.2,8.1H2c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.6,0.4,1,0.9,1h18.2c0.5,0,0.9-0.4,0.9-0.9V7.2
C21.1,7.7,20.7,8.1,20.2,8.1z"/>
<path class="st3" d="M20.2,2.9H2c-0.5,0-0.9,0.4-0.9,0.9V4c0-0.5,0.4-0.9,0.9-0.9h18.2c0.5,0,0.9,0.4,0.9,0.9V3.8
C21.1,3.3,20.7,2.9,20.2,2.9z"/>
<circle class="st4" cx="17.9" cy="5.6" r="0.5"/>
<circle class="st4" cx="16.1" cy="5.6" r="0.5"/>
<circle class="st4" cx="14.3" cy="5.6" r="0.5"/>
<circle class="st5" cx="4.7" cy="5.6" r="0.9"/>
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="4.1668" y1="-1953.0668" x2="5.1828" y2="-1954.0828" gradientTransform="matrix(1 0 0 -1 0 -1948)">
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
</linearGradient>
<circle class="st6" cx="4.7" cy="5.6" r="0.9"/>
<path class="st0" d="M1.1,10.2v3.6c0,0.5,0.4,0.9,0.9,0.9h18.2c0.5,0,0.9-0.4,0.9-0.9v-3.6c0-0.5-0.4-0.9-0.9-0.9H2
C1.5,9.3,1.1,9.7,1.1,10.2z"/>
<path class="st2" d="M20.2,14.5H2c-0.5,0-0.9-0.4-0.9-0.9v0.2c0,0.5,0.4,0.9,0.9,0.9h18.2c0.5,0,0.9-0.4,0.9-0.9v-0.2
C21.1,14.1,20.7,14.5,20.2,14.5z"/>
<path class="st3" d="M20.2,9.3H2c-0.5,0-0.9,0.4-0.9,0.9v0.2c0-0.5,0.4-0.9,0.9-0.9h18.2c0.5,0,0.9,0.4,0.9,0.9v-0.2
C21.1,9.7,20.7,9.3,20.2,9.3z"/>
<circle class="st4" cx="17.9" cy="12" r="0.5"/>
<circle class="st4" cx="16.1" cy="12" r="0.5"/>
<circle class="st4" cx="14.3" cy="12" r="0.5"/>
<circle class="st5" cx="4.7" cy="12" r="0.9"/>
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="4.1445" y1="-1959.4445" x2="5.1605" y2="-1960.4604" gradientTransform="matrix(1 0 0 -1 0 -1948)">
<stop offset="0" style="stop-color:#000000;stop-opacity:0.1"/>
<stop offset="1" style="stop-color:#000000;stop-opacity:0"/>
</linearGradient>
<circle class="st7" cx="4.7" cy="12" r="0.9"/>
<path class="st8" d="M19.1,13c0,0.4,0.3,0.7,0.7,0.8l0,0c0.4,0,0.8-0.3,0.8-0.8c0-0.4-0.3-0.7-0.7-0.8c0,0,0,0-0.1,0
C19.5,12.3,19.1,12.6,19.1,13L19.1,13z"/>
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="0.6335" y1="1978.4908" x2="25.081" y2="1989.8916" gradientTransform="matrix(1 0 0 1 0 -1974)">
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0.2"/>
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
</linearGradient>
<path class="st9" d="M22.4,13.8H21v-3.6c0-0.5-0.4-0.9-0.9-0.9V8.4C20.6,8.4,21,8,21,7.5V3.8c0-0.5-0.4-0.9-0.9-0.9H2
C1.5,2.9,1,3.3,1,3.8v3.6c0,0.6,0.4,1,0.9,1v0.9C1.5,9.3,1,9.7,1,10.2v3.6c0,0.5,0.4,0.9,0.9,0.9h10.9v5.9c0,0.3,0.2,0.5,0.5,0.5
h9.1c0.3,0,0.5-0.2,0.5-0.5v-6.4C22.9,14,22.7,13.8,22.4,13.8z"/>
<path class="st10" d="M22.4,16.2c0,2.7-2.2,4.8-4.8,4.8c-2.7,0-4.8-2.1-4.8-4.8c0-2.7,2.2-4.8,4.8-4.8
C20.2,11.3,22.4,13.5,22.4,16.2z"/>
<path class="st11" d="M22,12.7l-0.5-0.1c0,0-0.1,0-0.1-0.1c0-0.2-0.1-0.3-0.2-0.5c0,0,0-0.1,0-0.1l0.2-0.4c0,0,0-0.1,0-0.1l-0.3-0.3
c0,0-0.1,0-0.1,0l-0.4,0.2c0,0-0.1,0-0.1,0c-0.1-0.1-0.3-0.1-0.4-0.2c0,0-0.1,0-0.1-0.1L20,10.6c0,0-0.1-0.1-0.1-0.1h-0.4
c0,0-0.1,0-0.1,0.1l-0.1,0.5c0,0,0,0.1-0.1,0.1c0,0-0.1,0-0.1,0c-0.1,0-0.2,0.1-0.2,0.1c0,0-0.1,0-0.1,0.1c0,0,0,0,0,0c0,0,0,0,0,0
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l-0.4-0.2c0,0-0.1,0-0.1,0l-0.2,0.2h0l-0.1,0.1h0c0,0,0,0,0,0.1c0,0,0,0.1,0,0.1l0.2,0.4
c0,0,0,0,0,0c0,0,0,0.1,0,0.1c-0.1,0.1-0.1,0.3-0.2,0.5c0,0,0,0.1-0.1,0.1l-0.5,0.1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0.1v0.4
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0.5,0.1c0,0,0.1,0,0.1,0.1c0,0.2,0.1,0.3,0.2,0.5c0,0,0,0.1,0,0.1l-0.2,0.4
c0,0,0,0.1,0,0.1c0,0,0,0,0,0.1h0l0.3,0.3c0,0,0.1,0,0.1,0l0.4-0.2c0,0,0,0,0,0c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0.1
c0.1,0,0.2,0.1,0.2,0.1c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0.1l0.1,0.5c0,0,0.1,0.1,0.1,0.1h0.4c0.1,0,0.1,0,0.1-0.1l0.1-0.5
c0,0,0-0.1,0.1-0.1c0.2,0,0.3-0.1,0.4-0.2c0,0,0.1,0,0.1,0l0.4,0.2c0,0,0.1,0,0.1,0l0.3-0.3c0,0,0-0.1,0-0.1l-0.2-0.4
c0,0,0-0.1,0-0.1c0.1-0.1,0.1-0.3,0.2-0.5c0,0,0,0,0-0.1c0,0,0,0,0,0l0.5-0.1c0,0,0.1-0.1,0.1-0.1v-0.4C22.1,12.8,22.1,12.7,22,12.7
z M19.8,14.1c-0.1,0-0.3,0-0.4,0c-0.2,0-0.4-0.1-0.6-0.3c0,0,0,0,0,0c-0.1-0.2-0.2-0.3-0.2-0.5c0-0.1,0-0.3,0-0.4
c0-0.5,0.4-0.9,0.8-1c0.2,0,0.3-0.1,0.5,0c0,0,0,0,0,0c0.2,0,0.4,0.1,0.6,0.3c0,0,0,0,0,0c0.1,0.1,0.1,0.1,0.1,0.2l0,0
c0.1,0.1,0.1,0.3,0.1,0.4C20.9,13.4,20.4,14,19.8,14.1C19.8,14.1,19.8,14.1,19.8,14.1z"/>
<path class="st8" d="M18.9,13c0,0.4,0.3,0.7,0.7,0.8c0,0,0,0,0,0c0.4,0,0.8-0.3,0.8-0.8c0-0.4-0.3-0.7-0.7-0.8c0,0,0,0-0.1,0
C19.2,12.3,18.9,12.6,18.9,13L18.9,13z"/>
<path class="st12" d="M20.8,13c0-0.6-0.5-1.2-1.1-1.2c0.1,0.1,0.2,0.2,0.1,0.3c0,0.1-0.1,0.1-0.2,0.1c0.4,0,0.7,0.4,0.7,0.8
c0,0.4-0.3,0.8-0.8,0.8c0,0,0,0,0,0c-0.1,0-0.2,0.1-0.2,0.2c0,0.1,0.1,0.2,0.2,0.2c0,0,0,0,0.1,0C20.3,14.2,20.8,13.7,20.8,13z"/>
<path class="st13" d="M18.9,13.3c0-0.1-0.1-0.2-0.1-0.3c0-0.4,0.3-0.8,0.8-0.8c0,0,0,0,0.1,0c0.1,0,0.2-0.2,0.2-0.3
c0-0.1-0.1-0.1-0.1-0.2c0,0-0.1,0-0.1,0c-0.7,0-1.2,0.5-1.2,1.2c0,0.1,0,0.2,0,0.3C18.5,13.3,18.9,13.3,18.9,13.3z"/>
<path class="st13" d="M19.7,13.8C19.7,13.8,19.6,13.8,19.7,13.8c-0.5,0-0.8-0.3-0.8-0.8c0,0,0,0,0-0.1h-0.5c0,0,0,0,0,0.1
c0,0.7,0.5,1.2,1.2,1.2c0,0,0,0,0.1,0c0.1,0,0.2-0.1,0.2-0.2C19.9,13.9,19.8,13.8,19.7,13.8z"/>
<path class="st8" d="M20.5,13c0,0.5-0.4,0.8-0.8,0.9c0,0,0,0,0,0c-0.5,0-0.9-0.4-0.9-0.9c0-0.5,0.3-0.8,0.8-0.8c0,0,0,0,0.1,0
C20.1,12.2,20.5,12.6,20.5,13L20.5,13z"/>
<path class="st14" d="M19.2,14.8c-0.6-0.4-1-1-1-1.8c0-0.8,0.4-1.4,1-1.8v-0.1c-0.2,0-0.3,0.1-0.5,0.2c0,0-0.1,0-0.1,0l-0.4-0.2
c0,0-0.1,0-0.1,0l-0.3,0.3c0,0,0,0.1,0,0.1l0.2,0.4c0,0,0,0.1,0,0.1c-0.1,0.1-0.1,0.3-0.2,0.5c0,0,0,0.1-0.1,0.1l-0.5,0.1
c0,0-0.1,0.1-0.1,0.1v0.4c0,0.1,0,0.1,0.1,0.1l0.5,0.1c0,0,0.1,0,0.1,0.1c0,0.2,0.1,0.3,0.2,0.5c0,0,0,0.1,0,0.1l-0.2,0.4
c0,0,0,0.1,0,0.1l0.3,0.3c0,0,0.1,0,0.1,0l0.4-0.2c0,0,0.1,0,0.1,0C18.8,14.8,19,14.9,19.2,14.8L19.2,14.8L19.2,14.8z"/>
<path class="st15" d="M23,18.3l-0.3-0.1c0,0-0.1,0-0.1-0.1c0-0.1-0.1-0.2-0.1-0.3c0,0,0-0.1,0-0.1l0.2-0.3c0,0,0-0.1,0-0.1l-0.2-0.2
c0,0-0.1,0-0.1,0l-0.3,0.2c0,0-0.1,0-0.1,0c-0.1-0.1-0.2-0.1-0.3-0.1c0,0-0.1,0-0.1-0.1l-0.1-0.3c0,0,0-0.1-0.1-0.1h-0.3
c0,0-0.1,0-0.1,0.1l-0.1,0.3c0,0,0,0-0.1,0.1c0,0,0,0-0.1,0c-0.1,0-0.1,0-0.2,0.1c0,0-0.1,0-0.1,0c0,0,0,0,0,0c0,0,0,0,0,0
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l-0.3-0.2c0,0-0.1,0-0.1,0l-0.2,0.2h0l0,0h0c0,0,0,0,0,0c0,0,0,0,0,0.1l0.2,0.3c0,0,0,0,0,0
c0,0,0,0,0,0.1c-0.1,0.1-0.1,0.2-0.1,0.3c0,0,0,0-0.1,0.1l-0.3,0.1c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0v0.3c0,0,0,0,0,0
c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0,0,0,0l0.3,0.1c0,0,0.1,0,0.1,0.1c0,0.1,0.1,0.2,0.1,0.3c0,0,0,0.1,0,0.1l-0.2,0.3c0,0,0,0,0,0.1
c0,0,0,0,0,0h0l0.2,0.2c0,0,0.1,0,0.1,0l0.3-0.2c0,0,0,0,0,0c0,0,0,0,0.1,0c0,0,0.1,0,0.1,0c0.1,0,0.1,0.1,0.2,0.1c0,0,0,0,0.1,0
c0,0,0.1,0,0.1,0.1l0.1,0.3c0,0,0,0.1,0.1,0.1h0.3c0,0,0.1,0,0.1-0.1l0.1-0.3c0,0,0-0.1,0.1-0.1c0.1,0,0.2-0.1,0.3-0.1
c0,0,0.1,0,0.1,0l0.3,0.2c0,0,0.1,0,0.1,0l0.2-0.2c0,0,0-0.1,0-0.1l-0.2-0.3c0,0,0-0.1,0-0.1c0.1-0.1,0.1-0.2,0.1-0.3c0,0,0,0,0,0
c0,0,0,0,0,0l0.3-0.1c0,0,0.1,0,0.1-0.1L23,18.3C23.1,18.3,23.1,18.3,23,18.3L23,18.3z M21.4,19.3c-0.1,0-0.2,0-0.3,0
c-0.1,0-0.3-0.1-0.5-0.2c0,0,0,0,0,0c-0.1-0.1-0.2-0.3-0.2-0.4c0-0.1,0-0.2,0-0.3c0-0.4,0.3-0.7,0.6-0.8c0.1,0,0.2,0,0.4,0
c0,0,0,0,0,0c0.1,0,0.3,0.1,0.4,0.2c0,0,0,0,0,0c0,0.1,0.1,0.1,0.1,0.2l0,0c0,0.1,0.1,0.2,0.1,0.3C22.2,18.8,21.9,19.3,21.4,19.3
C21.4,19.3,21.4,19.3,21.4,19.3L21.4,19.3z"/>
<path class="st8" d="M20.7,18.5c0,0.3,0.2,0.5,0.5,0.6c0,0,0,0,0,0c0.3,0,0.6-0.3,0.6-0.6c0-0.3-0.2-0.5-0.5-0.6c0,0,0,0,0,0
C20.9,18,20.7,18.2,20.7,18.5z"/>
<path class="st16" d="M22.2,18.5c0-0.5-0.4-0.9-0.8-0.9c0.1,0,0.1,0.1,0.1,0.2c0,0-0.1,0.1-0.1,0.1c0.3,0,0.5,0.3,0.5,0.6
c0,0.3-0.3,0.6-0.6,0.6c0,0,0,0,0,0c-0.1,0-0.1,0.1-0.1,0.2c0,0.1,0.1,0.1,0.1,0.2c0,0,0,0,0,0C21.8,19.4,22.2,19,22.2,18.5
L22.2,18.5z"/>
<path class="st17" d="M21.3,17.6c-0.1,0-0.2,0-0.2,0V18c0.1,0,0.1,0,0.2,0c0.3,0,0.5,0.2,0.6,0.5c0-0.1,0.1-0.2,0.2-0.1
c0.1,0,0.1,0.1,0.1,0.1c0,0,0,0,0,0C22.1,18,21.7,17.6,21.3,17.6L21.3,17.6z"/>
<path class="st16" d="M20.7,18.7c0-0.1,0-0.1,0-0.2c0-0.3,0.3-0.6,0.6-0.6c0,0,0,0,0,0c0.1,0,0.2-0.1,0.1-0.2c0-0.1-0.1-0.1-0.1-0.1
c0,0,0,0-0.1,0c-0.5,0-0.9,0.4-0.9,0.9c0,0.1,0,0.2,0,0.2C20.4,18.7,20.7,18.7,20.7,18.7z"/>
<path class="st17" d="M21.3,19.1C21.3,19.1,21.3,19.1,21.3,19.1c-0.3,0-0.6-0.2-0.6-0.6c0,0,0,0,0-0.1h-0.3c0,0,0,0,0,0.1
c0,0.5,0.4,0.9,0.9,0.9c0,0,0,0,0,0c0.1,0,0.1-0.1,0.1-0.2C21.4,19.2,21.4,19.1,21.3,19.1L21.3,19.1z"/>
<path class="st8" d="M21.9,18.5c0,0.3-0.3,0.6-0.6,0.6c0,0,0,0,0,0c-0.4,0-0.6-0.3-0.6-0.6c0-0.3,0.3-0.6,0.6-0.6c0,0,0,0,0,0
C21.6,17.9,21.9,18.2,21.9,18.5L21.9,18.5z"/>
<path class="st18" d="M20.9,19.9c-0.4-0.3-0.7-0.8-0.7-1.3c0-0.6,0.3-1.1,0.7-1.3v-0.1c-0.1,0-0.2,0.1-0.4,0.1c0,0-0.1,0-0.1,0
l-0.3-0.2c0,0-0.1,0-0.1,0l-0.2,0.2c0,0,0,0.1,0,0.1l0.2,0.3c0,0,0,0.1,0,0.1c-0.1,0.1-0.1,0.2-0.1,0.3c0,0,0,0.1-0.1,0.1l-0.3,0.1
c0,0-0.1,0-0.1,0.1v0.3c0,0,0,0.1,0.1,0.1l0.3,0.1c0,0,0.1,0,0.1,0.1c0,0.1,0.1,0.2,0.1,0.3c0,0,0,0.1,0,0.1l-0.2,0.3
c0,0,0,0.1,0,0.1l0.2,0.2c0,0,0.1,0,0.1,0l0.3-0.2c0,0,0.1,0,0.1,0C20.7,19.8,20.8,19.9,20.9,19.9C20.9,19.9,20.9,19.9,20.9,19.9z"
/>
<path class="st15" d="M19.3,16.9l-0.9-0.1c0,0-0.1,0-0.1-0.1c0-0.1,0-0.1-0.1-0.2c0,0,0-0.1,0-0.1l0.6-0.6c0,0,0-0.1,0-0.2l-0.4-0.5
c0,0-0.1-0.1-0.2,0l-0.8,0.4c0,0-0.1,0-0.1,0c-0.1,0-0.1-0.1-0.2-0.1c0,0-0.1-0.1-0.1-0.1l0.1-0.9c0-0.1,0-0.1-0.1-0.1L16.7,14
c-0.1,0-0.1,0-0.1,0.1l-0.4,0.8c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.1,0c0,0-0.1,0-0.1,0c0,0-0.1,0-0.1-0.1l-0.1-0.3L15.3,14
c0-0.1-0.1-0.1-0.1-0.1l-0.6,0.2c-0.1,0-0.1,0.1-0.1,0.1l0.1,0.9c0,0,0,0.1-0.1,0.1c-0.1,0-0.1,0.1-0.2,0.1c0,0-0.1,0-0.1,0L13.5,15
c-0.1,0-0.1,0-0.2,0L13,15.6c0,0,0,0.1,0,0.2l0.6,0.6c0,0,0,0.1,0,0.1c0,0.1,0,0.1-0.1,0.2c0,0-0.1,0.1-0.1,0.1l-0.7,0.1
c0,0.3,0.1,0.6,0.2,1l0.5,0.1c0,0,0.1,0,0.1,0.1c0,0.1,0,0.1,0.1,0.2c0,0,0,0.1,0,0.1l-0.3,0.3c0.2,0.3,0.4,0.6,0.6,0.8l0.3-0.2
c0,0,0.1,0,0.1,0c0,0,0,0,0,0c0,0,0,0,0,0c0,0,0.1,0.1,0.2,0.1c0,0,0.1,0.1,0.1,0.1L14.6,20c0.3,0.2,0.5,0.4,0.8,0.5l0.3-0.6
c0,0,0.1-0.1,0.1-0.1h0.2c0,0,0.1,0,0.1,0.1l0.4,0.8c0,0.1,0.1,0.1,0.1,0.1l0.6-0.2c0.1,0,0.1-0.1,0.1-0.1l-0.1-0.9
c0-0.1,0-0.1,0.1-0.1c0.1,0,0.1-0.1,0.2-0.1c0,0,0.1,0,0.1,0l0.8,0.4c0.1,0,0.1,0,0.2,0l0.4-0.5c0-0.1,0-0.1,0-0.2l-0.6-0.6
c0,0,0-0.1,0-0.1c0-0.1,0.1-0.1,0.1-0.2c0,0,0-0.1,0.1-0.1l0.9-0.1c0.1,0,0.1-0.1,0.1-0.1v-0.6C19.4,17,19.4,17,19.3,16.9z
M15.2,18.3C15.2,18.3,15.2,18.2,15.2,18.3c-0.1-0.1-0.1-0.1-0.2-0.2c0,0-0.1-0.1-0.1-0.1c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.1,0-0.2
c0-0.1,0-0.2,0-0.2v0c0-0.6,0.5-1.2,1.2-1.2c0,0,0.1,0,0.1,0l0.1,0c0,0,0,0,0.1,0c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0s0.1,0,0.1,0
l0.1,0c0,0,0,0,0.1,0.1l0.1,0.1c0.1,0.1,0.1,0.1,0.1,0.2c0,0,0,0.1,0.1,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1
c0,0.1,0,0.2,0,0.2l0,0.2c0,0,0,0.1,0,0.1l-0.2,0.4c0,0,0,0.1-0.1,0.1c0,0,0,0-0.1,0.1c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.1,0.1
c-0.1,0-0.1,0.1-0.2,0.1c0,0-0.1,0-0.1,0C15.9,18.6,15.6,18.5,15.2,18.3C15.3,18.3,15.3,18.3,15.2,18.3z"/>
<path class="st18" d="M15.3,14c0-0.1-0.1-0.1-0.1-0.1l-0.6,0.2c-0.1,0-0.1,0.1-0.1,0.1l0.1,0.9c0,0,0,0.1-0.1,0.1
c-0.1,0-0.1,0.1-0.2,0.1c0,0-0.1,0-0.1,0L13.5,15c-0.1,0-0.1,0-0.2,0L13,15.6c0,0,0,0.1,0,0.2l0.6,0.6c0,0,0,0.1,0,0.1
c0,0.1,0,0.1-0.1,0.2c0,0-0.1,0.1-0.1,0.1l-0.7,0.1c0,0.3,0.1,0.6,0.2,1l0.5,0.1c0,0,0.1,0,0.1,0.1c0,0.1,0,0.1,0.1,0.2
c0,0,0,0.1,0,0.1l-0.3,0.3c0.2,0.3,0.4,0.6,0.6,0.8l0.3-0.2c0,0,0.1,0,0.1,0c0,0,0,0,0,0l0,0v0c-0.1-0.4-0.2-0.9-0.2-1.4
c0,0,0,0,0-0.1c0-0.2,0-0.4,0-0.6c0-0.3,0.1-0.6,0.2-0.9c0,0,0-0.1,0-0.1c0.2-0.7,0.6-1.4,1.1-1.8L15.3,14z"/>
<path class="st17" d="M17.2,16.1c-0.3-0.3-0.8-0.5-1.2-0.5c-0.1,0-0.2,0-0.3,0c-0.5,0.1-0.9,0.4-1.2,0.8c-0.2,0.3-0.3,0.6-0.3,0.9
c0,0.2,0,0.3,0.1,0.5c0.1,0.3,0.2,0.6,0.5,0.8c0.4,0.4,0.9,0.6,1.5,0.5c0.4,0,0.8-0.2,1-0.5c0.2-0.2,0.4-0.6,0.5-0.9v0
c0-0.1,0-0.2,0-0.3C17.7,16.9,17.5,16.4,17.2,16.1z M15.3,18.3C15.3,18.3,15.3,18.3,15.3,18.3c-0.1-0.1-0.1-0.1-0.2-0.1
c0,0-0.1-0.1-0.1-0.1c0,0-0.1-0.1-0.1-0.1c0-0.1-0.1-0.1-0.1-0.2c0-0.1,0-0.1,0-0.2c0-0.1,0-0.2,0-0.2v0c0-0.6,0.5-1.2,1.2-1.2
c0,0,0.1,0,0.1,0l0.1,0c0,0,0,0,0.1,0c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0l0.1,0c0,0,0,0,0.1,0.1l0.1,0.1
c0.1,0.1,0.1,0.1,0.1,0.2c0,0,0,0.1,0.1,0.1s0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0,0,0.1,0,0.1c0,0.1,0,0.2,0,0.2l0,0.2c0,0,0,0.1,0,0.1
l-0.2,0.4c0,0,0,0.1-0.1,0.1c0,0,0,0-0.1,0.1c0,0-0.1,0.1-0.1,0.1c0,0-0.1,0-0.1,0.1c-0.1,0-0.1,0.1-0.2,0.1c0,0-0.1,0-0.1,0
c-0.1,0-0.2,0-0.2,0C15.7,18.5,15.5,18.5,15.3,18.3z"/>
<path class="st16" d="M14.5,17.4c0.1,0,0.3-0.1,0.3-0.2c0-0.2,0.2-0.4,0.3-0.6c0.2-0.2,0.4-0.3,0.6-0.3c0.1,0,0.2-0.1,0.2-0.3
c0-0.2-0.2-0.3-0.3-0.3c-0.3,0.1-0.7,0.2-0.9,0.5c-0.2,0.2-0.4,0.6-0.5,0.9C14.2,17.2,14.3,17.4,14.5,17.4z M17.4,17.4
c-0.1,0-0.3,0.1-0.3,0.2c0,0.2-0.2,0.4-0.3,0.6c-0.2,0.2-0.4,0.3-0.6,0.3c-0.1,0-0.2,0.1-0.2,0.3c0,0.2,0.2,0.3,0.3,0.3
c0.3-0.1,0.7-0.2,0.9-0.5c0.2-0.2,0.4-0.6,0.5-0.9C17.7,17.6,17.6,17.4,17.4,17.4z"/>
</svg>

Before

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 988 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 333 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,308 +0,0 @@
================
Cetmix Tower AWS
================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:e427fa4368b78aacbc6faa6232b54496e83fbe4905ddef4cc17f3913e5ee3ee0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-cetmix%2Fcetmix--tower-lightgray.png?logo=github
:target: https://github.com/cetmix/cetmix-tower/tree/18.0/cetmix_tower_aws
:alt: cetmix/cetmix-tower
|badge1| |badge2| |badge3|
**⚠️ DISCLAIMER: TECHNICAL MODULE**
This module integrates Boto3 library, the Amazon Web Services (AWS)
Software Development Kit (SDK) for Python, into the Cetmix Tower.
**This is a technical module intended for system administrators or
DevOps professionals.** It may involve server configuration,
infrastructure management, or advanced setup outside the standard
Odoo interface. Not intended for direct use by end users.
**Table of contents**
.. contents::
:local:
Use Cases / Context
===================
Although Amazon Web Services (AWS) allows API calls without using an
SDK, we found that integrating the Amazon SDK into Cetmix Tower makes
provisioning, configuring, and maintaining AWS instances more convenient
for the end user. However, not all Cetmix Tower users require this
functionality, so to avoid overloading the system, we have included it
in a separate module.
Configuration
=============
**Prerequisites**
The module has ``boto3`` defined in its external dependencies, which
means, you should install the Python ``boto3`` package manually if you
don't have automatic package installation configured in your Odoo
environment. Run ``pip install boto3`` to install it.
**Setting up AWS Access**
1. **Create AWS Access Keys**
To use the AWS integration with Cetmix Tower, you need to create AWS
access keys:
- Follow the `official AWS
documentation <https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html>`__
(https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html)
for creating IAM access keys
- It's recommended to create a dedicated IAM user with appropriate
permissions for Cetmix Tower
- Store your access key ID and secret access key securely - you'll
need them in the next step
2. **Configure AWS Secrets in Cetmix Tower**
Create two secrets in Cetmix Tower to store your AWS credentials:
- Navigate to ``Cetmix Tower > Settings > Keys and Secrets``
- Create a new Secret with:
- Name: ``AWS Access Key``
- Reference: ``aws_access_key``
- Key Type: ``Secret``
- Enter your AWS access key ID in the Secret Value tab
- Similarly, create another Secret with:
- Name: ``AWS Secret Access Key``
- Reference: ``aws_secret_access_key``
- Key Type: ``Secret``
- Enter your AWS secret access key in the Secret Value tab
..
Note: These secrets will be accessible as
``#!cxtower.secret.aws_access_key!#`` and
``#!cxtower.secret.aws_secret_access_key!#`` in your commands.
3. **Configure AWS Region**
Create a variable to define your AWS region:
- Navigate to ``Cetmix Tower > Settings > Variables``
- Create a new Variable with:
- Name: ``AWS Region Name``
- Reference: ``aws_region_name``
- Type: ``String``
- Set your AWS region (e.g., ``us-east-1``, ``eu-west-1``) as the
value
Usage
=====
Please check the `official Boto3
Documentation <https://boto3.amazonaws.com/v1/documentation/api/latest/index.html>`__
(https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) for
the detailed information about the services and methods provided by the
Boto3 library.
**Disclaimer**: The following example demonstrates one of many
possible commands you can create and run with this module. The boto3
library provides access to the full range of AWS services and methods
- this is just a starting point to help you get familiar with the
integration.
Example of Cetmix Tower Python Command to List EC2 Instances
------------------------------------------------------------
Navigate to Command Creation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Go to ``Cetmix Tower > Commands > Commands``
- Click the ``Create`` button
Configure Command Settings
~~~~~~~~~~~~~~~~~~~~~~~~~~
- Set a descriptive ``Name`` (e.g., "List AWS EC2 Instances")
- Leave ``Reference`` blank to generate automatically (or set a custom
reference)
- Select ``Action``: "Execute Python code"
- Set ``Access Level``: Choose appropriate level (e.g., "Manager")
- Optional: Set ``Default Path`` if needed
- Optional: Add ``Tags`` (e.g., "aws", "ec2") for better organization
Add Required Variables
~~~~~~~~~~~~~~~~~~~~~~
- In the ``Variables`` tab, add the previously configured variable:
- ``aws_region_name``
Add Required Secrets
~~~~~~~~~~~~~~~~~~~~
- In the ``Secrets`` field, add the previously configured secrets:
- ``aws_access_key``
- ``aws_secret_access_key``
Write Python Code
~~~~~~~~~~~~~~~~~
- Go to the ``Code`` tab
- Enter the following Python code:
.. code:: python
# List EC2 instances using boto3
result = {"exit_code": 0, "message": None}
session = boto3.Session(
aws_access_key_id=#!cxtower.secret.aws_access_key!#,
aws_secret_access_key=#!cxtower.secret.aws_secret_access_key!#,
region_name={{ aws_region_name }}
)
ec2 = session.client('ec2')
instances = ec2.describe_instances()
instance_details = []
for reservation in instances['Reservations']:
for instance in reservation['Instances']:
instance_detail = "Instance ID: " + instance['InstanceId']
instance_detail += ", Type: " + instance.get('InstanceType', 'Unknown')
instance_detail += ", State: " + instance.get('State', {}).get('Name', 'Unknown')
instance_details.append(instance_detail)
if instance_details:
result["message"] = "Found " + str(len(instance_details)) + " EC2 instances:\n" + "\n".join(instance_details)
else:
result["message"] = "No EC2 instances found"
Save the Command
~~~~~~~~~~~~~~~~
- Click the ``Save`` button to create the command
Running the AWS EC2 Command
---------------------------
Navigate to Server
~~~~~~~~~~~~~~~~~~
- Go to ``Cetmix Tower > Servers > Servers``
- Open the server where you want to run the command
Execute Command from Server
~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Click the ``Command`` button at the top of the server form
- In the popup dialog:
- Select your AWS EC2 command from the dropdown
- Verify the variable values (if any need adjustment)
- Click ``Run`` to execute
View Command Results
~~~~~~~~~~~~~~~~~~~~
- After execution, the command log will display showing:
- The command executed
- Execution status
- Output message containing EC2 instance details if successful
Example Output
--------------
For a successful execution with EC2 instances:
.. code:: bash
Found 3 EC2 instances:
Instance ID: i-0abc123def456789, Type: t2.micro, State: running
Instance ID: i-0def456abc789123, Type: t3.medium, State: stopped
Instance ID: i-0789abc123def456, Type: m5.large, State: running
For a successful execution with no EC2 instances:
.. code:: bash
No EC2 instances found
Creating Additional AWS Commands
--------------------------------
The cetmix_tower_aws module provides access to the boto3 Python library
for AWS service integration. Here are some common services you can use:
.. code:: python
# Standard client initialization pattern
client = boto3.client(
'service_name', # Replace with: ec2, s3, rds, cloudwatch, etc.
region_name={{ aws_region_name }},
aws_access_key_id=#!cxtower.secret.aws_access_key!#,
aws_secret_access_key=#!cxtower.secret.aws_secret_access_key!#
)
# Or use resource interface for object-oriented access
resource = boto3.resource(
'service_name', # Replace with: ec2, s3, etc.
region_name={{ aws_region_name }},
aws_access_key_id=#!cxtower.secret.aws_access_key!#,
aws_secret_access_key=#!cxtower.secret.aws_secret_access_key!#
)
Popular AWS services include: EC2 (compute), S3 (storage), RDS
(databases), and CloudWatch (monitoring).
For more details, see the `AWS Boto3
Documentation <https://boto3.amazonaws.com/v1/documentation/api/latest/index.html>`__.
Changelog
=========
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/cetmix/cetmix-tower/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/cetmix/cetmix-tower/issues/new?body=module:%20cetmix_tower_aws%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
-------
* Cetmix
Maintainers
-----------
This module is part of the `cetmix/cetmix-tower <https://github.com/cetmix/cetmix-tower/tree/18.0/cetmix_tower_aws>`_ project on GitHub.
You are welcome to contribute.

View File

@@ -1,24 +0,0 @@
# Copyright 2024 Cetmix OÜ
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Cetmix Tower AWS",
"summary": """Cetmix Tower AWS EC2 API integration""",
"version": "18.0.1.0.1",
"category": "Productivity",
"license": "AGPL-3",
"author": "Cetmix",
"website": "https://tower.cetmix.com",
"live_test_url": "https://tower.cetmix.com/download",
"images": ["static/description/banner.png"],
"installable": True,
"external_dependencies": {
"python": ["boto3"],
},
"depends": [
"cetmix_tower_server",
],
"demo": [
"demo/demo_data.xml",
],
}

View File

@@ -1,74 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!-- ===============================================
Keys
================================================ -->
<record id="aws_access_key" model="cx.tower.key">
<field name="name">AWS Access Key</field>
<field name="reference">aws_access_key</field>
<field name="key_type">s</field>
<field name="secret_value">AKIAIOSFODNN7EXAMPLE</field>
</record>
<record id="aws_secret_access_key" model="cx.tower.key">
<field name="name">AWS Secret Access Key</field>
<field name="reference">aws_secret_access_key</field>
<field name="key_type">s</field>
<field name="secret_value">wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY</field>
</record>
<!-- ===============================================
Variables
================================================ -->
<record id="variable_aws_region_name" model="cx.tower.variable">
<field name="name">AWS Region Name</field>
<field name="reference">aws_region_name</field>
</record>
<!-- ===============================================
Global Variable values
================================================ -->
<record id="global_value_aws_region" model="cx.tower.variable.value">
<field name="variable_id" ref="variable_aws_region_name" />
<field name="value_char">us-east-1</field>
</record>
<!-- ===============================================
Commands
================================================ -->
<record id="command_list_ec2_instances" model="cx.tower.command">
<field name="name">List AWS EC2 Instances</field>
<field name="action">python_code</field>
<field name="code">
# List EC2 instances using boto3
result = {"exit_code": 0, "message": None}
session = boto3.Session(
aws_access_key_id=#!cxtower.secret.aws_access_key!#,
aws_secret_access_key=#!cxtower.secret.aws_secret_access_key!#,
region_name={{ aws_region_name }}
)
ec2 = session.client('ec2')
instances = ec2.describe_instances()
instance_details = []
for reservation in instances['Reservations']:
for instance in reservation['Instances']:
instance_detail = "Instance ID: " + instance['InstanceId']
instance_detail += ", Type: " + instance.get('InstanceType', 'Unknown')
instance_detail += ", State: " + instance.get('State', {}).get('Name', 'Unknown')
instance_details.append(instance_detail)
if instance_details:
result["message"] = "Found " + str(len(instance_details)) + " EC2 instances:\n" + "\n".join(instance_details)
else:
result["message"] = "No EC2 instances found"
</field>
<field name="access_level">1</field>
<field
name="tag_ids"
eval="[(6, 0, [ref('cetmix_tower_server.tag_custom')])]"
/>
<field name="note">List EC2 instances using boto3 AWS SDK</field>
</record>
</odoo>

View File

@@ -1,31 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cetmix_tower_aws
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: cetmix_tower_aws
#: model:ir.model,name:cetmix_tower_aws.model_cx_tower_command
msgid "Cetmix Tower Command"
msgstr ""
#. module: cetmix_tower_aws
#. odoo-python
#: code:addons/cetmix_tower_aws/models/cx_tower_command.py:0
msgid ""
"Python 'boto3' library for AWS services. Available methods: 'client', "
"'resource', 'Session'<br/>Supports AWS services like EC2, S3, RDS, Lambda, "
"CloudWatch, etc.<br/>Please check the <a "
"href='https://boto3.amazonaws.com/v1/documentation/api/latest/index.html' "
"target='_blank'>Boto3 Documentation</a> for the detailed information about "
"the services and methods."
msgstr ""

View File

@@ -1,39 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cetmix_tower_aws
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 2.3\n"
"Language: it\n"
#. module: cetmix_tower_aws
#: model:ir.model,name:cetmix_tower_aws.model_cx_tower_command
msgid "Cetmix Tower Command"
msgstr "Comando Cetmix Tower"
#. module: cetmix_tower_aws
#. odoo-python
#: code:addons/cetmix_tower_aws/models/cx_tower_command.py:0
#, python-format
msgid "Python 'boto3' library for AWS services. Available methods: 'client', 'resource', 'Session'<br/>Supports AWS services like EC2, S3, RDS, Lambda, CloudWatch, etc.<br/>Please check the <a href='https://boto3.amazonaws.com/v1/documentation/api/latest/index.html' target='_blank'>Boto3 Documentation</a> for the detailed information about the services and methods."
msgstr "Libreria Python 'boto3' per servizi AWS. Metodi disponibili: 'client', 'resource', 'Session'<br/>Supporta servizi AWS come EC2, S3, RDS, Lambda, CloudWatch, ecc.<br/>Consultare la <a href='https://boto3.amazonaws.com/v1/documentation/api/latest/index.html' target='_blank'>documentazione Boto3</a> per informazioni dettagliate su servizi e metodi."
#~ msgid ""
#~ "# - boto3: Python 'boto3' library for AWS services. Available methods: "
#~ "'client', 'resource', 'Session'\n"
#~ "# Supports AWS services like EC2, S3, RDS, Lambda, CloudWatch, etc."
#~ msgstr ""
#~ "# - boto3: libreria Python 'boto3' per servizi AWS. Metodi disponibili: "
#~ "'client', 'resource', 'Session'\n"
#~ "# Supporta servizi AWS come EC2, S3, RDS, Lambda, CloudWatch, ecc."

View File

@@ -1 +0,0 @@
from . import cx_tower_command

View File

@@ -1,40 +0,0 @@
# Copyright 2024 Cetmix OÜ
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, models
from odoo.tools.safe_eval import wrap_module
# Wrap boto3 safely
boto3 = wrap_module(__import__("boto3"), ["client", "resource", "Session"])
class CxTowerCommand(models.Model):
"""Extends cx.tower.command to add AWS boto3 functionality."""
_inherit = "cx.tower.command"
def _custom_python_libraries(self):
"""
Add the boto3 library to the available libraries.
"""
custom_python_libraries = super()._custom_python_libraries()
custom_python_libraries.update(
{
"cetmix_tower_aws": {
"boto3": {
"import": boto3,
"help": _(
"Python 'boto3' library for AWS services. "
"Available methods: 'client', 'resource', 'Session'<br/>"
"Supports AWS services like EC2, S3, RDS, Lambda, "
"CloudWatch, etc.<br/>"
"Please check the <a "
"href='https://boto3.amazonaws.com/v1/documentation/api/latest/index.html'"
" target='_blank'>Boto3 Documentation</a> for the detailed "
"information about the services and methods."
),
},
}
}
)
return custom_python_libraries

View File

@@ -1,3 +0,0 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@@ -1,42 +0,0 @@
**Prerequisites**
The module has `boto3` defined in its external dependencies, which means, you should install the Python `boto3` package manually if you don't have automatic package installation configured in your Odoo environment. Run `pip install boto3` to install it.
**Setting up AWS Access**
1. **Create AWS Access Keys**
To use the AWS integration with Cetmix Tower, you need to create AWS access keys:
- Follow the [official AWS documentation](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html) (https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html) for creating IAM access keys
- It's recommended to create a dedicated IAM user with appropriate permissions for Cetmix Tower
- Store your access key ID and secret access key securely - you'll need them in the next step
2. **Configure AWS Secrets in Cetmix Tower**
Create two secrets in Cetmix Tower to store your AWS credentials:
- Navigate to `Cetmix Tower > Settings > Keys and Secrets`
- Create a new Secret with:
- Name: `AWS Access Key`
- Reference: `aws_access_key`
- Key Type: `Secret`
- Enter your AWS access key ID in the Secret Value tab
- Similarly, create another Secret with:
- Name: `AWS Secret Access Key`
- Reference: `aws_secret_access_key`
- Key Type: `Secret`
- Enter your AWS secret access key in the Secret Value tab
> Note: These secrets will be accessible as `#!cxtower.secret.aws_access_key!#` and `#!cxtower.secret.aws_secret_access_key!#` in your commands.
3. **Configure AWS Region**
Create a variable to define your AWS region:
- Navigate to `Cetmix Tower > Settings > Variables`
- Create a new Variable with:
- Name: `AWS Region Name`
- Reference: `aws_region_name`
- Type: `String`
- Set your AWS region (e.g., `us-east-1`, `eu-west-1`) as the value

View File

@@ -1,5 +0,0 @@
Although Amazon Web Services (AWS) allows API calls without using an SDK, we found that
integrating the Amazon SDK into Cetmix Tower makes provisioning, configuring, and
maintaining AWS instances more convenient for the end user. However, not all Cetmix
Tower users require this functionality, so to avoid overloading the system, we have
included it in a separate module.

View File

@@ -1,6 +0,0 @@
**⚠️ DISCLAIMER: TECHNICAL MODULE**
This module integrates Boto3 library, the Amazon Web Services (AWS) Software Development Kit (SDK) for Python, into the Cetmix Tower.
> **This is a technical module intended for system administrators or DevOps professionals.** It may involve server configuration, infrastructure management, or advanced setup outside the standard Odoo interface. Not intended for direct use by end users.

View File

@@ -1,121 +0,0 @@
Please check the [official Boto3 Documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) (https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) for the detailed information about the services and methods provided by the Boto3 library.
> **Disclaimer**: The following example demonstrates one of many possible commands you can create and run with this module. The boto3 library provides access to the full range of AWS services and methods - this is just a starting point to help you get familiar with the integration.
## Example of Cetmix Tower Python Command to List EC2 Instances
### Navigate to Command Creation
- Go to `Cetmix Tower > Commands > Commands`
- Click the `Create` button
### Configure Command Settings
- Set a descriptive `Name` (e.g., "List AWS EC2 Instances")
- Leave `Reference` blank to generate automatically (or set a custom reference)
- Select `Action`: "Execute Python code"
- Set `Access Level`: Choose appropriate level (e.g., "Manager")
- Optional: Set `Default Path` if needed
- Optional: Add `Tags` (e.g., "aws", "ec2") for better organization
### Add Required Variables
- In the `Variables` tab, add the previously configured variable:
- `aws_region_name`
### Add Required Secrets
- In the `Secrets` field, add the previously configured secrets:
- `aws_access_key`
- `aws_secret_access_key`
### Write Python Code
- Go to the `Code` tab
- Enter the following Python code:
```python
# List EC2 instances using boto3
result = {"exit_code": 0, "message": None}
session = boto3.Session(
aws_access_key_id=#!cxtower.secret.aws_access_key!#,
aws_secret_access_key=#!cxtower.secret.aws_secret_access_key!#,
region_name={{ aws_region_name }}
)
ec2 = session.client('ec2')
instances = ec2.describe_instances()
instance_details = []
for reservation in instances['Reservations']:
for instance in reservation['Instances']:
instance_detail = "Instance ID: " + instance['InstanceId']
instance_detail += ", Type: " + instance.get('InstanceType', 'Unknown')
instance_detail += ", State: " + instance.get('State', {}).get('Name', 'Unknown')
instance_details.append(instance_detail)
if instance_details:
result["message"] = "Found " + str(len(instance_details)) + " EC2 instances:\n" + "\n".join(instance_details)
else:
result["message"] = "No EC2 instances found"
```
### Save the Command
- Click the `Save` button to create the command
## Running the AWS EC2 Command
### Navigate to Server
- Go to `Cetmix Tower > Servers > Servers`
- Open the server where you want to run the command
### Execute Command from Server
- Click the `Command` button at the top of the server form
- In the popup dialog:
- Select your AWS EC2 command from the dropdown
- Verify the variable values (if any need adjustment)
- Click `Run` to execute
### View Command Results
- After execution, the command log will display showing:
- The command executed
- Execution status
- Output message containing EC2 instance details if successful
## Example Output
For a successful execution with EC2 instances:
```bash
Found 3 EC2 instances:
Instance ID: i-0abc123def456789, Type: t2.micro, State: running
Instance ID: i-0def456abc789123, Type: t3.medium, State: stopped
Instance ID: i-0789abc123def456, Type: m5.large, State: running
```
For a successful execution with no EC2 instances:
```bash
No EC2 instances found
```
## Creating Additional AWS Commands
The cetmix_tower_aws module provides access to the boto3 Python library for AWS service integration. Here are some common services you can use:
```python
# Standard client initialization pattern
client = boto3.client(
'service_name', # Replace with: ec2, s3, rds, cloudwatch, etc.
region_name={{ aws_region_name }},
aws_access_key_id=#!cxtower.secret.aws_access_key!#,
aws_secret_access_key=#!cxtower.secret.aws_secret_access_key!#
)
# Or use resource interface for object-oriented access
resource = boto3.resource(
'service_name', # Replace with: ec2, s3, etc.
region_name={{ aws_region_name }},
aws_access_key_id=#!cxtower.secret.aws_access_key!#,
aws_secret_access_key=#!cxtower.secret.aws_secret_access_key!#
)
```
Popular AWS services include: EC2 (compute), S3 (storage), RDS (databases), and CloudWatch (monitoring).
For more details, see the [AWS Boto3 Documentation](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html).

Binary file not shown.

Before

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -1,684 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Cetmix Tower AWS</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="cetmix-tower-aws">
<h1 class="title">Cetmix Tower AWS</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:e427fa4368b78aacbc6faa6232b54496e83fbe4905ddef4cc17f3913e5ee3ee0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/cetmix/cetmix-tower/tree/18.0/cetmix_tower_aws"><img alt="cetmix/cetmix-tower" src="https://img.shields.io/badge/github-cetmix%2Fcetmix--tower-lightgray.png?logo=github" /></a></p>
<p><strong>⚠️ DISCLAIMER: TECHNICAL MODULE</strong></p>
<p>This module integrates Boto3 library, the Amazon Web Services (AWS)
Software Development Kit (SDK) for Python, into the Cetmix Tower.</p>
<blockquote>
<strong>This is a technical module intended for system administrators or
DevOps professionals.</strong> It may involve server configuration,
infrastructure management, or advanced setup outside the standard
Odoo interface. Not intended for direct use by end users.</blockquote>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#use-cases-context" id="toc-entry-1">Use Cases / Context</a></li>
<li><a class="reference internal" href="#configuration" id="toc-entry-2">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-3">Usage</a><ul>
<li><a class="reference internal" href="#example-of-cetmix-tower-python-command-to-list-ec2-instances" id="toc-entry-4">Example of Cetmix Tower Python Command to List EC2 Instances</a><ul>
<li><a class="reference internal" href="#navigate-to-command-creation" id="toc-entry-5">Navigate to Command Creation</a></li>
<li><a class="reference internal" href="#configure-command-settings" id="toc-entry-6">Configure Command Settings</a></li>
<li><a class="reference internal" href="#add-required-variables" id="toc-entry-7">Add Required Variables</a></li>
<li><a class="reference internal" href="#add-required-secrets" id="toc-entry-8">Add Required Secrets</a></li>
<li><a class="reference internal" href="#write-python-code" id="toc-entry-9">Write Python Code</a></li>
<li><a class="reference internal" href="#save-the-command" id="toc-entry-10">Save the Command</a></li>
</ul>
</li>
<li><a class="reference internal" href="#running-the-aws-ec2-command" id="toc-entry-11">Running the AWS EC2 Command</a><ul>
<li><a class="reference internal" href="#navigate-to-server" id="toc-entry-12">Navigate to Server</a></li>
<li><a class="reference internal" href="#execute-command-from-server" id="toc-entry-13">Execute Command from Server</a></li>
<li><a class="reference internal" href="#view-command-results" id="toc-entry-14">View Command Results</a></li>
</ul>
</li>
<li><a class="reference internal" href="#example-output" id="toc-entry-15">Example Output</a></li>
<li><a class="reference internal" href="#creating-additional-aws-commands" id="toc-entry-16">Creating Additional AWS Commands</a></li>
</ul>
</li>
<li><a class="reference internal" href="#changelog" id="toc-entry-17">Changelog</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-18">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-19">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-20">Authors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-21">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="use-cases-context">
<h1><a class="toc-backref" href="#toc-entry-1">Use Cases / Context</a></h1>
<p>Although Amazon Web Services (AWS) allows API calls without using an
SDK, we found that integrating the Amazon SDK into Cetmix Tower makes
provisioning, configuring, and maintaining AWS instances more convenient
for the end user. However, not all Cetmix Tower users require this
functionality, so to avoid overloading the system, we have included it
in a separate module.</p>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-2">Configuration</a></h1>
<p><strong>Prerequisites</strong></p>
<p>The module has <tt class="docutils literal">boto3</tt> defined in its external dependencies, which
means, you should install the Python <tt class="docutils literal">boto3</tt> package manually if you
dont have automatic package installation configured in your Odoo
environment. Run <tt class="docutils literal">pip install boto3</tt> to install it.</p>
<p><strong>Setting up AWS Access</strong></p>
<ol class="arabic">
<li><p class="first"><strong>Create AWS Access Keys</strong></p>
<p>To use the AWS integration with Cetmix Tower, you need to create AWS
access keys:</p>
<ul class="simple">
<li>Follow the <a class="reference external" href="https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html">official AWS
documentation</a>
(<a class="reference external" href="https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html">https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html</a>)
for creating IAM access keys</li>
<li>Its recommended to create a dedicated IAM user with appropriate
permissions for Cetmix Tower</li>
<li>Store your access key ID and secret access key securely - youll
need them in the next step</li>
</ul>
</li>
<li><p class="first"><strong>Configure AWS Secrets in Cetmix Tower</strong></p>
<p>Create two secrets in Cetmix Tower to store your AWS credentials:</p>
<ul class="simple">
<li>Navigate to <tt class="docutils literal">Cetmix Tower &gt; Settings &gt; Keys and Secrets</tt></li>
<li>Create a new Secret with:<ul>
<li>Name: <tt class="docutils literal">AWS Access Key</tt></li>
<li>Reference: <tt class="docutils literal">aws_access_key</tt></li>
<li>Key Type: <tt class="docutils literal">Secret</tt></li>
</ul>
</li>
<li>Enter your AWS access key ID in the Secret Value tab</li>
<li>Similarly, create another Secret with:<ul>
<li>Name: <tt class="docutils literal">AWS Secret Access Key</tt></li>
<li>Reference: <tt class="docutils literal">aws_secret_access_key</tt></li>
<li>Key Type: <tt class="docutils literal">Secret</tt></li>
</ul>
</li>
<li>Enter your AWS secret access key in the Secret Value tab</li>
</ul>
<!-- -->
<blockquote>
<p>Note: These secrets will be accessible as
<tt class="docutils literal">#!cxtower.secret.aws_access_key!#</tt> and
<tt class="docutils literal">#!cxtower.secret.aws_secret_access_key!#</tt> in your commands.</p>
</blockquote>
</li>
<li><p class="first"><strong>Configure AWS Region</strong></p>
<p>Create a variable to define your AWS region:</p>
<ul class="simple">
<li>Navigate to <tt class="docutils literal">Cetmix Tower &gt; Settings &gt; Variables</tt></li>
<li>Create a new Variable with:<ul>
<li>Name: <tt class="docutils literal">AWS Region Name</tt></li>
<li>Reference: <tt class="docutils literal">aws_region_name</tt></li>
<li>Type: <tt class="docutils literal">String</tt></li>
</ul>
</li>
<li>Set your AWS region (e.g., <tt class="docutils literal"><span class="pre">us-east-1</span></tt>, <tt class="docutils literal"><span class="pre">eu-west-1</span></tt>) as the
value</li>
</ul>
</li>
</ol>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-3">Usage</a></h1>
<p>Please check the <a class="reference external" href="https://boto3.amazonaws.com/v1/documentation/api/latest/index.html">official Boto3
Documentation</a>
(<a class="reference external" href="https://boto3.amazonaws.com/v1/documentation/api/latest/index.html">https://boto3.amazonaws.com/v1/documentation/api/latest/index.html</a>) for
the detailed information about the services and methods provided by the
Boto3 library.</p>
<blockquote>
<strong>Disclaimer</strong>: The following example demonstrates one of many
possible commands you can create and run with this module. The boto3
library provides access to the full range of AWS services and methods
- this is just a starting point to help you get familiar with the
integration.</blockquote>
<div class="section" id="example-of-cetmix-tower-python-command-to-list-ec2-instances">
<h2><a class="toc-backref" href="#toc-entry-4">Example of Cetmix Tower Python Command to List EC2 Instances</a></h2>
<div class="section" id="navigate-to-command-creation">
<h3><a class="toc-backref" href="#toc-entry-5">Navigate to Command Creation</a></h3>
<ul class="simple">
<li>Go to <tt class="docutils literal">Cetmix Tower &gt; Commands &gt; Commands</tt></li>
<li>Click the <tt class="docutils literal">Create</tt> button</li>
</ul>
</div>
<div class="section" id="configure-command-settings">
<h3><a class="toc-backref" href="#toc-entry-6">Configure Command Settings</a></h3>
<ul class="simple">
<li>Set a descriptive <tt class="docutils literal">Name</tt> (e.g., “List AWS EC2 Instances”)</li>
<li>Leave <tt class="docutils literal">Reference</tt> blank to generate automatically (or set a custom
reference)</li>
<li>Select <tt class="docutils literal">Action</tt>: “Execute Python code”</li>
<li>Set <tt class="docutils literal">Access Level</tt>: Choose appropriate level (e.g., “Manager”)</li>
<li>Optional: Set <tt class="docutils literal">Default Path</tt> if needed</li>
<li>Optional: Add <tt class="docutils literal">Tags</tt> (e.g., “aws”, “ec2”) for better organization</li>
</ul>
</div>
<div class="section" id="add-required-variables">
<h3><a class="toc-backref" href="#toc-entry-7">Add Required Variables</a></h3>
<ul class="simple">
<li>In the <tt class="docutils literal">Variables</tt> tab, add the previously configured variable:<ul>
<li><tt class="docutils literal">aws_region_name</tt></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="add-required-secrets">
<h3><a class="toc-backref" href="#toc-entry-8">Add Required Secrets</a></h3>
<ul class="simple">
<li>In the <tt class="docutils literal">Secrets</tt> field, add the previously configured secrets:<ul>
<li><tt class="docutils literal">aws_access_key</tt></li>
<li><tt class="docutils literal">aws_secret_access_key</tt></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="write-python-code">
<h3><a class="toc-backref" href="#toc-entry-9">Write Python Code</a></h3>
<ul>
<li><p class="first">Go to the <tt class="docutils literal">Code</tt> tab</p>
</li>
<li><p class="first">Enter the following Python code:</p>
<pre class="code python literal-block">
<span class="c1"># List EC2 instances using boto3</span><span class="w">
</span><span class="n">result</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;exit_code&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;message&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">}</span><span class="w">
</span><span class="n">session</span> <span class="o">=</span> <span class="n">boto3</span><span class="o">.</span><span class="n">Session</span><span class="p">(</span><span class="w">
</span> <span class="n">aws_access_key_id</span><span class="o">=</span><span class="c1">#!cxtower.secret.aws_access_key!#,</span><span class="w">
</span> <span class="n">aws_secret_access_key</span><span class="o">=</span><span class="c1">#!cxtower.secret.aws_secret_access_key!#,</span><span class="w">
</span> <span class="n">region_name</span><span class="o">=</span><span class="p">{{</span> <span class="n">aws_region_name</span> <span class="p">}}</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="n">ec2</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">client</span><span class="p">(</span><span class="s1">'ec2'</span><span class="p">)</span><span class="w">
</span><span class="n">instances</span> <span class="o">=</span> <span class="n">ec2</span><span class="o">.</span><span class="n">describe_instances</span><span class="p">()</span><span class="w">
</span><span class="n">instance_details</span> <span class="o">=</span> <span class="p">[]</span><span class="w">
</span><span class="k">for</span> <span class="n">reservation</span> <span class="ow">in</span> <span class="n">instances</span><span class="p">[</span><span class="s1">'Reservations'</span><span class="p">]:</span><span class="w">
</span> <span class="k">for</span> <span class="n">instance</span> <span class="ow">in</span> <span class="n">reservation</span><span class="p">[</span><span class="s1">'Instances'</span><span class="p">]:</span><span class="w">
</span> <span class="n">instance_detail</span> <span class="o">=</span> <span class="s2">&quot;Instance ID: &quot;</span> <span class="o">+</span> <span class="n">instance</span><span class="p">[</span><span class="s1">'InstanceId'</span><span class="p">]</span><span class="w">
</span> <span class="n">instance_detail</span> <span class="o">+=</span> <span class="s2">&quot;, Type: &quot;</span> <span class="o">+</span> <span class="n">instance</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'InstanceType'</span><span class="p">,</span> <span class="s1">'Unknown'</span><span class="p">)</span><span class="w">
</span> <span class="n">instance_detail</span> <span class="o">+=</span> <span class="s2">&quot;, State: &quot;</span> <span class="o">+</span> <span class="n">instance</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'State'</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'Name'</span><span class="p">,</span> <span class="s1">'Unknown'</span><span class="p">)</span><span class="w">
</span> <span class="n">instance_details</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">instance_detail</span><span class="p">)</span><span class="w">
</span><span class="k">if</span> <span class="n">instance_details</span><span class="p">:</span><span class="w">
</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;Found &quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">instance_details</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot; EC2 instances:</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">instance_details</span><span class="p">)</span><span class="w">
</span><span class="k">else</span><span class="p">:</span><span class="w">
</span> <span class="n">result</span><span class="p">[</span><span class="s2">&quot;message&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;No EC2 instances found&quot;</span>
</pre>
</li>
</ul>
</div>
<div class="section" id="save-the-command">
<h3><a class="toc-backref" href="#toc-entry-10">Save the Command</a></h3>
<ul class="simple">
<li>Click the <tt class="docutils literal">Save</tt> button to create the command</li>
</ul>
</div>
</div>
<div class="section" id="running-the-aws-ec2-command">
<h2><a class="toc-backref" href="#toc-entry-11">Running the AWS EC2 Command</a></h2>
<div class="section" id="navigate-to-server">
<h3><a class="toc-backref" href="#toc-entry-12">Navigate to Server</a></h3>
<ul class="simple">
<li>Go to <tt class="docutils literal">Cetmix Tower &gt; Servers &gt; Servers</tt></li>
<li>Open the server where you want to run the command</li>
</ul>
</div>
<div class="section" id="execute-command-from-server">
<h3><a class="toc-backref" href="#toc-entry-13">Execute Command from Server</a></h3>
<ul class="simple">
<li>Click the <tt class="docutils literal">Command</tt> button at the top of the server form</li>
<li>In the popup dialog:<ul>
<li>Select your AWS EC2 command from the dropdown</li>
<li>Verify the variable values (if any need adjustment)</li>
<li>Click <tt class="docutils literal">Run</tt> to execute</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="view-command-results">
<h3><a class="toc-backref" href="#toc-entry-14">View Command Results</a></h3>
<ul class="simple">
<li>After execution, the command log will display showing:<ul>
<li>The command executed</li>
<li>Execution status</li>
<li>Output message containing EC2 instance details if successful</li>
</ul>
</li>
</ul>
</div>
</div>
<div class="section" id="example-output">
<h2><a class="toc-backref" href="#toc-entry-15">Example Output</a></h2>
<p>For a successful execution with EC2 instances:</p>
<pre class="code bash literal-block">
Found<span class="w"> </span><span class="m">3</span><span class="w"> </span>EC2<span class="w"> </span>instances:<span class="w">
</span>Instance<span class="w"> </span>ID:<span class="w"> </span>i-0abc123def456789,<span class="w"> </span>Type:<span class="w"> </span>t2.micro,<span class="w"> </span>State:<span class="w"> </span>running<span class="w">
</span>Instance<span class="w"> </span>ID:<span class="w"> </span>i-0def456abc789123,<span class="w"> </span>Type:<span class="w"> </span>t3.medium,<span class="w"> </span>State:<span class="w"> </span>stopped<span class="w">
</span>Instance<span class="w"> </span>ID:<span class="w"> </span>i-0789abc123def456,<span class="w"> </span>Type:<span class="w"> </span>m5.large,<span class="w"> </span>State:<span class="w"> </span>running
</pre>
<p>For a successful execution with no EC2 instances:</p>
<pre class="code bash literal-block">
No<span class="w"> </span>EC2<span class="w"> </span>instances<span class="w"> </span>found
</pre>
</div>
<div class="section" id="creating-additional-aws-commands">
<h2><a class="toc-backref" href="#toc-entry-16">Creating Additional AWS Commands</a></h2>
<p>The cetmix_tower_aws module provides access to the boto3 Python library
for AWS service integration. Here are some common services you can use:</p>
<pre class="code python literal-block">
<span class="c1"># Standard client initialization pattern</span><span class="w">
</span><span class="n">client</span> <span class="o">=</span> <span class="n">boto3</span><span class="o">.</span><span class="n">client</span><span class="p">(</span><span class="w">
</span> <span class="s1">'service_name'</span><span class="p">,</span> <span class="c1"># Replace with: ec2, s3, rds, cloudwatch, etc.</span><span class="w">
</span> <span class="n">region_name</span><span class="o">=</span><span class="p">{{</span> <span class="n">aws_region_name</span> <span class="p">}},</span><span class="w">
</span> <span class="n">aws_access_key_id</span><span class="o">=</span><span class="c1">#!cxtower.secret.aws_access_key!#,</span><span class="w">
</span> <span class="n">aws_secret_access_key</span><span class="o">=</span><span class="c1">#!cxtower.secret.aws_secret_access_key!#</span><span class="w">
</span><span class="p">)</span><span class="w">
</span><span class="c1"># Or use resource interface for object-oriented access</span><span class="w">
</span><span class="n">resource</span> <span class="o">=</span> <span class="n">boto3</span><span class="o">.</span><span class="n">resource</span><span class="p">(</span><span class="w">
</span> <span class="s1">'service_name'</span><span class="p">,</span> <span class="c1"># Replace with: ec2, s3, etc.</span><span class="w">
</span> <span class="n">region_name</span><span class="o">=</span><span class="p">{{</span> <span class="n">aws_region_name</span> <span class="p">}},</span><span class="w">
</span> <span class="n">aws_access_key_id</span><span class="o">=</span><span class="c1">#!cxtower.secret.aws_access_key!#,</span><span class="w">
</span> <span class="n">aws_secret_access_key</span><span class="o">=</span><span class="c1">#!cxtower.secret.aws_secret_access_key!#</span><span class="w">
</span><span class="p">)</span>
</pre>
<p>Popular AWS services include: EC2 (compute), S3 (storage), RDS
(databases), and CloudWatch (monitoring).</p>
<p>For more details, see the <a class="reference external" href="https://boto3.amazonaws.com/v1/documentation/api/latest/index.html">AWS Boto3
Documentation</a>.</p>
</div>
</div>
<div class="section" id="changelog">
<h1><a class="toc-backref" href="#toc-entry-17">Changelog</a></h1>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-18">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/cetmix/cetmix-tower/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/cetmix/cetmix-tower/issues/new?body=module:%20cetmix_tower_aws%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-19">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-20">Authors</a></h2>
<ul class="simple">
<li>Cetmix</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-21">Maintainers</a></h2>
<p>This module is part of the <a class="reference external" href="https://github.com/cetmix/cetmix-tower/tree/18.0/cetmix_tower_aws">cetmix/cetmix-tower</a> project on GitHub.</p>
<p>You are welcome to contribute.</p>
</div>
</div>
</div>
</body>
</html>

View File

@@ -1 +0,0 @@
from . import test_boto3_integration

View File

@@ -1,64 +0,0 @@
# Copyright 2024 Cetmix OÜ
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo.tests import common
class TestBoto3Integration(common.TransactionCase):
"""Test boto3 integration with Cetmix Tower commands."""
def setUp(self):
super().setUp()
# Create a test command
self.command = self.env["cx.tower.command"].create(
{
"name": "Test AWS Command",
"action": "python_code",
}
)
self.eval_context = self.env[
"cx.tower.command"
]._get_python_command_eval_context()
def test_boto3_in_evaluation_context(self):
"""Test that boto3 is added to the evaluation context."""
# Get evaluation context
# Check if boto3 is in the evaluation context
self.assertIn("boto3", self.eval_context)
# Check available methods
boto3_obj = self.eval_context["boto3"]
self.assertTrue(hasattr(boto3_obj, "client"))
self.assertTrue(hasattr(boto3_obj, "resource"))
self.assertTrue(hasattr(boto3_obj, "Session"))
def test_boto3_in_evaluation_context_with_server(self):
"""Test that boto3 is added to the evaluation context
when server is provided."""
# Create a test server
test_server = self.env["cx.tower.server"].create(
{
"name": "Test AWS Server",
"reference": "test_aws_server",
"ip_v4_address": "localhost",
"ssh_username": "admin",
"ssh_password": "password",
"ssh_auth_mode": "p",
"host_key": "test_key",
}
)
# Get evaluation context with server
eval_context = self.env["cx.tower.command"]._get_python_command_eval_context(
server=test_server
)
# Check if boto3 is in the evaluation context
self.assertIn("boto3", eval_context)
# Check available methods
boto3_obj = eval_context["boto3"]
self.assertTrue(hasattr(boto3_obj, "client"))
self.assertTrue(hasattr(boto3_obj, "resource"))
self.assertTrue(hasattr(boto3_obj, "Session"))
# Verify server is correctly passed to the context
self.assertEqual(eval_context["server"], test_server)

View File

@@ -1,91 +0,0 @@
================
Cetmix Tower Git
================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:2a3dd557b4ae104188b8e2912c02b135bcfe7cc6518f8633daa149ccb94850fe
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-cetmix%2Fcetmix--tower-lightgray.png?logo=github
:target: https://github.com/cetmix/cetmix-tower/tree/18.0/cetmix_tower_git
:alt: cetmix/cetmix-tower
|badge1| |badge2| |badge3|
This module implements Git Management functionality for `Cetmix
Tower <https://cetmix.com/tower>`__.
Please refer to the `official
documentation <https://cetmix.com/tower>`__ for detailed information.
**Table of contents**
.. contents::
:local:
Configuration
=============
Please refer to the `official
documentation <https://cetmix.com/tower>`__ for detailed configuration
instructions.
Usage
=====
Please refer to the `official
documentation <https://cetmix.com/tower>`__ for detailed usage
instructions.
Changelog
=========
18.0.1.0.2 (2026-03-10)
-----------------------
- Features: Provide git project name using the ``__git_project__``
custom value when creating a project in flight plan. Improve the UI
and UX of Git Projects. (5197)
- Bugfixes: Link server to git project only once. (5214)
18.0.1.0.1 (2025-12-17)
-----------------------
- Features: Improve search views, implement the search panel for
selected views. (5139)
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/cetmix/cetmix-tower/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/cetmix/cetmix-tower/issues/new?body=module:%20cetmix_tower_git%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
-------
* Cetmix
Maintainers
-----------
This module is part of the `cetmix/cetmix-tower <https://github.com/cetmix/cetmix-tower/tree/18.0/cetmix_tower_git>`_ project on GitHub.
You are welcome to contribute.

View File

@@ -1,40 +0,0 @@
# Copyright Cetmix OU
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
"name": "Cetmix Tower Git",
"summary": "Cetmix Tower Git Management Tools",
"version": "18.0.1.0.2",
"development_status": "Beta",
"category": "Productivity",
"website": "https://tower.cetmix.com",
"author": "Cetmix",
"license": "AGPL-3",
"application": False,
"depends": ["cetmix_tower_yaml"],
"external_dependencies": {
"python": ["giturlparse==0.12.0"],
},
"data": [
"security/ir.model.access.csv",
"security/cx_tower_git_project_security.xml",
"security/cx_tower_git_source_security.xml",
"security/cx_tower_git_remote_security.xml",
"security/cx_tower_git_repo_security.xml",
"security/cx_tower_git_repo_owner_security.xml",
"security/cx_tower_git_project_rel_security.xml",
"security/cx_tower_git_project_file_template_rel_security.xml",
"views/cx_tower_git_project_views.xml",
"views/cx_tower_git_source_views.xml",
"views/cx_tower_git_remote_views.xml",
"views/cx_tower_git_repo_views.xml",
"views/cx_tower_git_repo_owner_views.xml",
"views/cx_tower_file_views.xml",
"views/cx_tower_file_template_views.xml",
"views/cx_tower_server_view.xml",
"views/cx_tower_plan_line_view.xml",
"views/menuitems.xml",
],
"demo": [
"demo/demo_data.xml",
],
}

View File

@@ -1,164 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo noupdate="1">
<!-- Git Project -->
<record id="git_project_demo" model="cx.tower.git.project">
<field name="name">Demo Git Project</field>
<field name="reference">demo_git_project</field>
<field name="note">This is a demo git project.</field>
</record>
<!-- Repositories -->
<record id="repo_demo_cetmix_tower" model="cx.tower.git.repo">
<field name="url">https://github.com/cetmix-demo/cetmix-tower-demo.git</field>
</record>
<record id="repo_demo_oca_web" model="cx.tower.git.repo">
<field name="url">https://github.com/oca-demo/web-demo.git</field>
</record>
<record id="repo_demo_odoo_enterprise" model="cx.tower.git.repo">
<field name="url">https://github.com/odoo-demo/enterprise-demo.git</field>
<field name="is_private" eval="True" />
</record>
<record id="repo_demo_gitlab_private" model="cx.tower.git.repo">
<field name="url">https://gitlab.com/cetmix-demo/cetmix-tower-demo.git</field>
<field name="is_private" eval="True" />
</record>
<record id="repo_demo_bitbucket_private" model="cx.tower.git.repo">
<field
name="url"
>https://bitbucket.com/cetmix-demo/cetmix-tower-demo-enterprise.git</field>
<field name="is_private" eval="True" />
</record>
<!-- Sources -->
<!-- Cetmix Tower -->
<record id="source_demo_cetmix_tower" model="cx.tower.git.source">
<field name="name">Cetmix Tower</field>
<field name="reference">cetmix_tower</field>
<field name="git_project_id" ref="git_project_demo" />
</record>
<!-- Remotes-->
<record id="remote_demo_cetmix_tower_14_0_dev" model="cx.tower.git.remote">
<field name="source_id" ref="source_demo_cetmix_tower" />
<field name="repo_id" ref="repo_demo_cetmix_tower" />
<field name="head_type">branch</field>
<field name="head">14.0</field>
</record>
<record id="remote_demo_cetmix_tower_pr_176" model="cx.tower.git.remote">
<field name="source_id" ref="source_demo_cetmix_tower" />
<field name="repo_id" ref="repo_demo_cetmix_tower" />
<field name="head_type">pr</field>
<field name="head">176</field>
</record>
<!-- OCA Web -->
<record id="source_demo_oca_web" model="cx.tower.git.source">
<field name="name">OCA Web</field>
<field name="reference">oca_web</field>
<field name="git_project_id" ref="git_project_demo" />
</record>
<!-- Remotes -->
<record id="remote_demo_oca_web_14_0" model="cx.tower.git.remote">
<field name="source_id" ref="source_demo_oca_web" />
<field name="repo_id" ref="repo_demo_oca_web" />
<field name="head_type">branch</field>
<field name="head">14.0</field>
</record>
<!-- Odoo Enterprise -->
<record id="source_demo_odoo_enterprise" model="cx.tower.git.source">
<field name="name">Odoo Enterprise (Private)</field>
<field name="reference">odoo_enterprise</field>
<field name="git_project_id" ref="git_project_demo" />
</record>
<!-- Remotes -->
<record id="remote_demo_odoo_enterprise" model="cx.tower.git.remote">
<field name="source_id" ref="source_demo_odoo_enterprise" />
<field name="repo_id" ref="repo_demo_odoo_enterprise" />
<field name="head_type">branch</field>
<field name="head">19.0</field>
</record>
<!-- Sample Private Gitlab -->
<record id="source_demo_gitlab_private" model="cx.tower.git.source">
<field name="name">Sample Semi Private Gitlab</field>
<field name="reference">gitlab_private</field>
<field name="git_project_id" ref="git_project_demo" />
</record>
<!-- Remotes -->
<record id="remote_demo_gitlab_private_main" model="cx.tower.git.remote">
<field name="source_id" ref="source_demo_gitlab_private" />
<field name="repo_id" ref="repo_demo_gitlab_private" />
<field name="head_type">branch</field>
<field name="head">main</field>
</record>
<record id="remote_demo_gitlab_private_mr_1234" model="cx.tower.git.remote">
<field name="source_id" ref="source_demo_gitlab_private" />
<field name="repo_id" ref="repo_demo_gitlab_private" />
<field name="head_type">pr</field>
<field name="head">1234</field>
</record>
<!-- Sample Private Bitbucket -->
<record id="source_demo_bitbucket_private" model="cx.tower.git.source">
<field name="name">Sample Private Bitbucket</field>
<field name="reference">bitbucket_private</field>
<field name="git_project_id" ref="git_project_demo" />
</record>
<!-- Remotes -->
<record id="remote_demo_bitbucket_private_main" model="cx.tower.git.remote">
<field name="source_id" ref="source_demo_bitbucket_private" />
<field name="repo_id" ref="repo_demo_bitbucket_private" />
<field name="head_type">branch</field>
<field name="head">dev</field>
</record>
<record id="remote_demo_bitbucket_private_feature" model="cx.tower.git.remote">
<field name="source_id" ref="source_demo_bitbucket_private" />
<field name="repo_id" ref="repo_demo_bitbucket_private" />
<field name="head_type">commit</field>
<field name="head">1234567890</field>
</record>
<!-- Files -->
<record id="file_demo_cetmix_tower_14_0_dev" model="cx.tower.file">
<field name="name">repos.yaml</field>
<field name="server_id" ref="cetmix_tower_server.server_demo_1" />
<field name="source">tower</field>
<field name="file_type">text</field>
<field name="server_dir">{{ instance_name }}/config</field>
</record>
<!-- Link file to git project -->
<record
id="git_project_rel_demo_cetmix_tower_14_0_dev"
model="cx.tower.git.project.rel"
>
<field name="git_project_id" ref="git_project_demo" />
<field name="server_id" ref="cetmix_tower_server.server_demo_1" />
<field name="file_id" ref="file_demo_cetmix_tower_14_0_dev" />
<field name="project_format">git_aggregator</field>
</record>
<!-- Demo variable for testing giturlparse -->
<record id="variable_demo_git_url" model="cx.tower.variable">
<field name="name">Demo Git URL</field>
<field name="reference">demo_git_url</field>
</record>
<!-- Demo command to test giturlparse -->
<record id="command_demo_git_url" model="cx.tower.command">
<field name="name">Parse Git URL</field>
<field name="action">python_code</field>
<field name="code">
if {{ demo_git_url }}:
parsed_url = giturlparse.parse({{ demo_git_url }})
repo = parsed_url.repo
owner = parsed_url.owner
host = parsed_url.host
platform = parsed_url.platform
message = "Repo: " + repo + ", Owner: " + owner + ", Host: " + host + ", Platform: " + platform
result={"exit_code": 0, "message": message}
else:
result={"exit_code": -100, "message": "Git URL is not defined!"}
</field>
<field name="access_level">1</field>
<field
name="tag_ids"
eval="[(6, 0, [ref('cetmix_tower_server.tag_custom')])]"
/>
<field name="note">Run Python Code: Check Branch</field>
</record>
</odoo>

File diff suppressed because it is too large Load Diff

View File

@@ -1,595 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cetmix_tower_git
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server \n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_project.py:0
#, python-format
msgid ""
"\n"
"# You need to set the following variables in your environment:\n"
"# %(vars)s \n"
"# and run git-aggregator with '--expand-env' parameter.\n"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_project.py:0
#, python-format
msgid ""
"# This file is generated with Cetmix Tower https://cetmix.com/tower\n"
"# It's designed to be used with git-aggregator tool developed by Acsone.\n"
"# Documentation for git-aggregator: https://github.com/acsone/git-aggregator\n"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "* Sources where all remotes are private"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "* Sources where some remotes are private"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid ""
"<b>Managers.</b> All users who have \"Manager\" group and are set as \"Managers\" in <b><u>all</u></b> related servers.\n"
" This is done to avoid unpredictable consequences when some of the servers are not updated due to access restrictions when a project is updated."
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid ""
"<b>Users.</b> All users who have \"Manager\" group and are either set in "
"\"Users\" or in \"Managers\" in <b><u>all</u></b> related servers."
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Access"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__active
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__active
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__active
msgid "Active"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Archived"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__repo_provider__bitbucket
msgid "Bitbucket"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__head_type__branch
msgid "Branch"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_remote_view_form
msgid "Branch/PR/commit number or link"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__reference
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__reference
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_source__reference
msgid ""
"Can contain English letters, digits and '_'. Leave blank to autogenerate"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_project
msgid "Cetmix Tower Git Configuration"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_remote
msgid "Cetmix Tower Git Remote"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_source
msgid "Cetmix Tower Git Source"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_server
msgid "Cetmix Tower Server"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_project_rel.py:0
#, python-format
msgid "Code generator function for '%(project_format)s' format not found."
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__head_type__commit
msgid "Commit"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__create_uid
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__create_uid
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__create_uid
msgid "Created by"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__create_date
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__create_date
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__create_date
msgid "Created on"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_file
msgid "Cx Tower File"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_remote_view_form
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Disabled"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_server__display_name
msgid "Display Name"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__enabled
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_source__enabled
msgid "Enable in configuration and exported to files"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__enabled
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__enabled
msgid "Enabled"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Export YAML"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__file_id
msgid "File"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_project_rel.py:0
#, python-format
msgid "File '%(file)s' doesn't belong to server '%(server)s'"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_file.py:0
#, python-format
msgid ""
"File '%(file)s' is related to multiple projects: %(projects)s \n"
"Please select only one project."
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.constraint,message:cetmix_tower_git.constraint_cx_tower_git_project_rel_project_server_file_format_uniq
msgid "File is already related to the same project and format"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__file_ids
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Files"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__project_format
msgid "Format"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__git_aggregator_root_dir
msgid "Git Aggregator Root Dir"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid ""
"Git Aggregator: Bitbucket does not support fetching PRs. Please use branch instead.\n"
"\n"
"Source: %(src)s\n"
"URL: %(url)s\n"
"Head: %(head)s"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid "Git Aggregator: Head number is empty in %(head)s"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__git_project_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__git_project_id
msgid "Git Configuration"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file__git_project_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__git_project_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_server__git_project_ids
msgid "Git Project"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_server__git_project_rel_ids
msgid "Git Project Rel"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__git_project_rel_ids
msgid "Git Project Server File Relations"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_project_rel
msgid "Git Project relation to other model records"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.actions.act_window,name:cetmix_tower_git.cx_tower_git_project_action
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file__git_project_ids
#: model:ir.ui.menu,name:cetmix_tower_git.menu_cx_tower_git_project
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_server_view_form
msgid "Git Projects"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__git_aggregator_root_dir
msgid ""
"Git aggregator root directory where sources will be cloned. Eg '/tmp/git-"
"aggregator' Will use '.' if not set"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid ""
"Git aggregator root directory where sources will be cloned. Leave blank to "
"use '.'"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__url
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_remote_view_form
msgid ""
"Git remote URL. Eg 'https://github.com/cetmix/cetmix-tower.git' or "
"'git@github.com:cetmix/cetmix-tower.git'"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__head
msgid ""
"Git remote head. Link to branch, PR, commit or commit hash. Leave blank to "
"auto-detect"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__repo_provider__github
msgid "GitHub"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__repo_provider__gitlab
msgid "GitLab"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__url_protocol__https
msgid "HTTPS"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__has_partially_private_remotes
msgid "Has Partially Private Remotes"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__has_private_remotes
msgid "Has Private Remotes"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__head
msgid "Head"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__head_type
msgid "Head Type"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_server__id
msgid "ID"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__has_partially_private_remotes
msgid "Indicates if the project has any partially private remotes."
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__has_private_remotes
msgid "Indicates if the project has any private remotes."
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__is_private
msgid "Is Private"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file____last_update
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project____last_update
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel____last_update
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote____last_update
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source____last_update
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_server____last_update
msgid "Last Modified on"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__write_uid
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__write_uid
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__write_uid
msgid "Last Updated by"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__write_date
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__write_date
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__write_date
msgid "Last Updated on"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__manager_ids
msgid "Managers"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__manager_ids
msgid "Managers who can modify this record"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__name
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Name"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid "Not a valid URL. URL must end with '.git'"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid "Not a valid URL. URL must start with 'https://' or 'git@'"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid ""
"Not a valid URL: %(url_msg)s\n"
"URL must contain at least two parts separated by dot."
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__repo_provider__other
msgid "Other"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Private"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__remote_count_private
msgid "Private Remotes"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__head_type__pr
msgid "Pull/Merge Request"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__reference
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__reference
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__reference
msgid "Reference"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid ""
"Reference. Can contain English letters, digits and '_'. Leave blank to "
"autogenerate"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__remote_count
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__remote_ids
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Remotes"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__repo_provider
msgid "Repository Provider"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__is_private
msgid "Repository is private"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__url_protocol__ssh
msgid "SSH"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__sequence
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__sequence
msgid "Sequence"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__server_id
msgid "Server"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__server_ids
msgid "Servers"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__server_ids
msgid ""
"Servers are added automatically based on the files linked to the project.\n"
"IMPORTANT: This field may contain duplicates because of the relation nature!"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__source_id
msgid "Source"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__source_ids
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Sources"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid ""
"The top one remote will be used as a merge target.\n"
" You can re-arrange remotes by dragging them or changing their sequence value."
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__url
msgid "URL"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__url_protocol
msgid "URL Protocol"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid "URL is required"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__user_ids
msgid "Users"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__user_ids
msgid "Users who can view this record"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__repo_provider
msgid ""
"Will be tried to be determined from the URL. Please select manually if auto-"
"detection fails."
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "YAML"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__yaml_code
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__yaml_code
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__yaml_code
msgid "Yaml Code"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid ""
"You can edit these fields at your own risk. However keep in mind that they "
"will be automatically updated each time related servers are added, removed "
"or updated."
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "You must be a member of the \"YAML/Export\" group to export data as YAML."
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "managers who can modify this record"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "users who can view this record"
msgstr ""

View File

@@ -1,635 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cetmix_tower_git
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server \n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2025-03-06 09:11+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>\n"
"Language-Team: Croatian <https://hosted.weblate.org/projects/"
"tower-server-14-0-dev/cetmix_tower_git/hr/>\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Weblate 5.10.3-dev\n"
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_project.py:0
#, python-format
msgid ""
"\n"
"# You need to set the following variables in your environment:\n"
"# %(vars)s \n"
"# and run git-aggregator with '--expand-env' parameter.\n"
msgstr ""
"\n"
"# Potrebno je postaviti sljedeće varijable u vaše okruženje:\n"
"# %(vars)s \n"
"# i pokrenuti git-aggregator sa ' --expand-env' parametrom\n"
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_project.py:0
#, python-format
msgid ""
"# This file is generated with Cetmix Tower https://cetmix.com/tower\n"
"# It's designed to be used with git-aggregator tool developed by Acsone.\n"
"# Documentation for git-aggregator: https://github.com/acsone/git-aggregator\n"
msgstr ""
"# Ova datotek aje generiran pomoću Cetmix Tower sustava: https://cetmix.com/"
"tower\n"
"# Dizajniran je za korištenje sa git-aggregator alatom razvijenim od Ascone."
"\n"
"# Dokumentacija za git-aggregator : https://github.com/acsone/git-"
"aggregator\n"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "* Sources where all remotes are private"
msgstr "* izvori sa svim udaljenim lokacijama koje su privatne"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "* Sources where some remotes are private"
msgstr "* Izvori u kojima su neke udaljene lokacije privatne"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid ""
"<b>Managers.</b> All users who have \"Manager\" group and are set as \"Managers\" in <b><u>all</u></b> related servers.\n"
" This is done to avoid unpredictable consequences when some of the servers are not updated due to access restrictions when a project is updated."
msgstr ""
"<b>Manageri.</b> Svi korisnici koji imaju \"Manager\" grupu i postavljeni su "
"kao \"Manageri\" u <b><u>svim</u></b> povezanim serverima.\n"
" "
"Ovo je napravljeno kako bi izbjegli nepredviđene posljedice kad neki od "
"servera nisu ažurirani zbog ograničenog pristupa prilikom ažuriranja "
"projekta."
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid ""
"<b>Users.</b> All users who have \"Manager\" group and are either set in "
"\"Users\" or in \"Managers\" in <b><u>all</u></b> related servers."
msgstr ""
"<b>Korisnici.</b> Svi korisnici koji imaju \"Manager\" grupu i postavljeni "
"su ili kao \"Korisnik\" ili kao \"Manager\" u <b><u>svim</u></b> povezanim "
"serverima."
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Access"
msgstr "Pristup"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__active
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__active
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__active
msgid "Active"
msgstr "Aktivno"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Archived"
msgstr "Arhivirano"
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__repo_provider__bitbucket
msgid "Bitbucket"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__head_type__branch
msgid "Branch"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_remote_view_form
msgid "Branch/PR/commit number or link"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__reference
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__reference
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_source__reference
msgid ""
"Can contain English letters, digits and '_'. Leave blank to autogenerate"
msgstr ""
"Može sadržavati slova engleske abecede, brojke i ':'. Ostavite prazno za "
"automatsko generiranje"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_project
msgid "Cetmix Tower Git Configuration"
msgstr "Cetmix Tower Git postavke"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_remote
msgid "Cetmix Tower Git Remote"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_source
msgid "Cetmix Tower Git Source"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_server
msgid "Cetmix Tower Server"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_project_rel.py:0
#, python-format
msgid "Code generator function for '%(project_format)s' format not found."
msgstr ""
"Funkcija generiranja koda za '%(project_format)s' format nije pronađena."
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__head_type__commit
msgid "Commit"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__create_uid
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__create_uid
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__create_date
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__create_date
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_file
msgid "Cx Tower File"
msgstr "Cx Tower datoteka"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_remote_view_form
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Disabled"
msgstr "Onemogućen"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_server__display_name
msgid "Display Name"
msgstr "Naziv"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__enabled
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_source__enabled
msgid "Enable in configuration and exported to files"
msgstr "Omogućen u postavkama i izvezen u datoteku"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__enabled
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__enabled
msgid "Enabled"
msgstr "Omogućen"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Export YAML"
msgstr "Izvoz YAML"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__file_id
msgid "File"
msgstr "Datoteka"
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_project_rel.py:0
#, python-format
msgid "File '%(file)s' doesn't belong to server '%(server)s'"
msgstr "Datoteka '%(file)s' ne pripada serveru '%(server)s'"
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_file.py:0
#, python-format
msgid ""
"File '%(file)s' is related to multiple projects: %(projects)s \n"
"Please select only one project."
msgstr ""
"Datoteka '%(file)s' je povezana sa višestrukim projektima: %(projects)s \n"
"Molim odaberite samo jedan projekt."
#. module: cetmix_tower_git
#: model:ir.model.constraint,message:cetmix_tower_git.constraint_cx_tower_git_project_rel_project_server_file_format_uniq
msgid "File is already related to the same project and format"
msgstr "Datoteka je već povezana sa ovim projektom i ovim formatom"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__file_ids
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Files"
msgstr "Datoteke"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__project_format
msgid "Format"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__git_aggregator_root_dir
msgid "Git Aggregator Root Dir"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid ""
"Git Aggregator: Bitbucket does not support fetching PRs. Please use branch instead.\n"
"\n"
"Source: %(src)s\n"
"URL: %(url)s\n"
"Head: %(head)s"
msgstr ""
"Git Aggregator: BitBucket ne podržava dohvaćanje PRova. Molim koristite "
"branch.\n"
"\n"
"Source: %(src)s\n"
"URL: %(url)s\n"
"Head: %(head)s"
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid "Git Aggregator: Head number is empty in %(head)s"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__git_project_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__git_project_id
msgid "Git Configuration"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file__git_project_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__git_project_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_server__git_project_ids
msgid "Git Project"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_server__git_project_rel_ids
msgid "Git Project Rel"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__git_project_rel_ids
msgid "Git Project Server File Relations"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_project_rel
msgid "Git Project relation to other model records"
msgstr "Git projekt povezan sa ostalim zapisima modela"
#. module: cetmix_tower_git
#: model:ir.actions.act_window,name:cetmix_tower_git.cx_tower_git_project_action
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file__git_project_ids
#: model:ir.ui.menu,name:cetmix_tower_git.menu_cx_tower_git_project
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_server_view_form
msgid "Git Projects"
msgstr "Git projekti"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__git_aggregator_root_dir
msgid ""
"Git aggregator root directory where sources will be cloned. Eg '/tmp/git-"
"aggregator' Will use '.' if not set"
msgstr ""
"GitAgregator izvorni direktorij u koji će izvori biti klonirani. Npr. '/tmp/"
"git-aggregator' Ako ništa nije postavljeno koristi se '.'"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid ""
"Git aggregator root directory where sources will be cloned. Leave blank to "
"use '.'"
msgstr ""
"GitAgregtor izvorni dirketorij u koji će izvori biti klonirani. Ostavite "
"prazno za korištenje '.'"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__url
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_remote_view_form
msgid ""
"Git remote URL. Eg 'https://github.com/cetmix/cetmix-tower.git' or "
"'git@github.com:cetmix/cetmix-tower.git'"
msgstr ""
"Git remote URL. Eg 'https://github.com/cetmix/cetmix-tower.git' ili "
"'git@github.com:cetmix/cetmix-tower.git'"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__head
msgid ""
"Git remote head. Link to branch, PR, commit or commit hash. Leave blank to "
"auto-detect"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__repo_provider__github
msgid "GitHub"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__repo_provider__gitlab
msgid "GitLab"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__url_protocol__https
msgid "HTTPS"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__has_partially_private_remotes
msgid "Has Partially Private Remotes"
msgstr "Ima djelomično privatne udaljene izvore"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__has_private_remotes
msgid "Has Private Remotes"
msgstr "Ima privatne udaljene izvore"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__head
msgid "Head"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__head_type
msgid "Head Type"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_server__id
msgid "ID"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__has_partially_private_remotes
msgid "Indicates if the project has any partially private remotes."
msgstr "Indicira ima li projekt djelomično privatnih udaljenih izvora."
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__has_private_remotes
msgid "Indicates if the project has any private remotes."
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__is_private
msgid "Is Private"
msgstr "Je privatno"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file____last_update
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project____last_update
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel____last_update
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote____last_update
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source____last_update
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_server____last_update
msgid "Last Modified on"
msgstr "Zadnje modificirano"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__write_uid
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__write_uid
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__write_date
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__write_date
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__manager_ids
msgid "Managers"
msgstr "Manageri"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__manager_ids
msgid "Managers who can modify this record"
msgstr "Manageri koji mogu urediti ovaj zapis"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__name
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Name"
msgstr "Naziv"
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid "Not a valid URL. URL must end with '.git'"
msgstr "Nije valjani URL. URL mora završavati sa '.git'"
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid "Not a valid URL. URL must start with 'https://' or 'git@'"
msgstr "Nije valjani URL. URL mora počinjati sa 'https://' ili 'git@'"
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid ""
"Not a valid URL: %(url_msg)s\n"
"URL must contain at least two parts separated by dot."
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__repo_provider__other
msgid "Other"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Private"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__remote_count_private
msgid "Private Remotes"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__head_type__pr
msgid "Pull/Merge Request"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__reference
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__reference
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__reference
msgid "Reference"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid ""
"Reference. Can contain English letters, digits and '_'. Leave blank to "
"autogenerate"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__remote_count
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__remote_ids
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Remotes"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__repo_provider
msgid "Repository Provider"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__is_private
msgid "Repository is private"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__url_protocol__ssh
msgid "SSH"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__sequence
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__sequence
msgid "Sequence"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__server_id
msgid "Server"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__server_ids
msgid "Servers"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__server_ids
msgid ""
"Servers are added automatically based on the files linked to the project.\n"
"IMPORTANT: This field may contain duplicates because of the relation nature!"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__source_id
msgid "Source"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__source_ids
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Sources"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid ""
"The top one remote will be used as a merge target.\n"
" You can re-arrange remotes by dragging them or changing their sequence value."
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__url
msgid "URL"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__url_protocol
msgid "URL Protocol"
msgstr ""
#. module: cetmix_tower_git
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid "URL is required"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__user_ids
msgid "Users"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__user_ids
msgid "Users who can view this record"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__repo_provider
msgid ""
"Will be tried to be determined from the URL. Please select manually if auto-"
"detection fails."
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "YAML"
msgstr ""
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__yaml_code
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__yaml_code
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__yaml_code
msgid "Yaml Code"
msgstr "YAML kod"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid ""
"You can edit these fields at your own risk. However keep in mind that they "
"will be automatically updated each time related servers are added, removed "
"or updated."
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "You must be a member of the \"YAML/Export\" group to export data as YAML."
msgstr "Morate bit član \"YAML/Izvoz\" grupe za izvoz podataka u YAML."
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "managers who can modify this record"
msgstr ""
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "users who can view this record"
msgstr ""

View File

@@ -1,740 +0,0 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * cetmix_tower_git
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2025-11-17 10:33+0100\n"
"Last-Translator: Stefano Consolaro <stefano.consolaro@mymage.it>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/tower-server-14-0-dev/cetmix_tower_git/it/>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Poedit 2.3\n"
#. module: cetmix_tower_git
#. odoo-python
#: code:addons/cetmix_tower_git/models/cx_tower_git_project.py:0
#, python-format
msgid ""
"\n"
"# You need to set the following variables in your environment:\n"
"# %(vars)s \n"
"# and run git-aggregator with '--expand-env' parameter.\n"
msgstr ""
"\n"
"# È necessario impostare le seguenti variabili d'ambiente:\n"
"# %(vars)s \n"
"# ed eseguire git-aggregator con il parametro '--expand-env'.\n"
#. module: cetmix_tower_git
#. odoo-python
#: code:addons/cetmix_tower_git/models/cx_tower_git_project.py:0
#, python-format
msgid ""
"# This file is generated with Cetmix Tower https://cetmix.com/tower\n"
"# It's designed to be used with git-aggregator tool developed by Acsone.\n"
"# Documentation for git-aggregator: https://github.com/acsone/git-aggregator\n"
msgstr ""
"# Questo file è generato con Cetmix Tower https://cetmix.com/tower\n"
"# È progettato per essere usato con il tool git-aggregator sviluppato da Acsone.\n"
"# Documentazione per git-aggregator: https://github.com/acsone/git-aggregator\n"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "* Sources where all remotes are private"
msgstr "* Origini dove tutti i remote sono privati"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "* Sources where some remotes are private"
msgstr "* Origini dove alcuni remote sono privati"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid ""
"<b>Managers.</b> All users who have \"Manager\" group and are set as \"Managers\" in <b><u>all</u></b> related servers.\n"
" This is done to avoid unpredictable consequences when some of the servers are not updated due to access restrictions when a project is updated."
msgstr ""
"<b>Responsabili.</b> Tutti gli utenti che hanno il gruppo \"Responsabile\" e sono impostati come \"Responsabili\" in <b><u>tutti</u></b> i server relativi.\n"
" Questo è fatto per evitare conseguenze imprevedibili quando qualcuno dei server non è aggiornato per limitazioni di accesso quando viene aggiornato un progetto."
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "<b>Users.</b> All users who have \"Manager\" group and are either set in \"Users\" or in \"Managers\" in <b><u>all</u></b> related servers."
msgstr "<b>Utenti.</b> Tutti gli utenti che hanno il gruppo \"Responsabile\" e sono impostati come \"Utenti\" o \"Responsabili\" in <b><u>tutti</u></b> i server relativi."
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Access"
msgstr "Accesso"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__active
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__active
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__active
msgid "Active"
msgstr "Attivo"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Archived"
msgstr "In archivio"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__auto_sync
msgid "Auto Sync"
msgstr "Sincronizzazione automatica"
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__repo_provider__bitbucket
msgid "Bitbucket"
msgstr "Bitbucket"
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__head_type__branch
msgid "Branch"
msgstr "Branch"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_remote_view_form
msgid "Branch/PR/commit number or link"
msgstr "Numero o link branch/PR/commit"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__reference
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project_rel__reference
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__reference
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_source__reference
msgid "Can contain English letters, digits and '_'. Leave blank to autogenerate"
msgstr "Può contenere lettere inglesi, cifre e '_'. Lasciare vuoto per la generazione automatica"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_file
msgid "Cetmix Tower File"
msgstr "File Cetmix Tower"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_file_template
msgid "Cetmix Tower File Template"
msgstr "Modello file Cetmix Tower"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_plan_line
msgid "Cetmix Tower Flight Plan Line"
msgstr "Riga piano di volo Cetmix Tower"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_project
msgid "Cetmix Tower Git Project"
msgstr "Progetto Git Cetmix Tower"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_project_file_template_rel
msgid "Cetmix Tower Git Project relation to File Templates"
msgstr "Relazione progetto Git Cetmix Tower al modello file"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_project_rel
msgid "Cetmix Tower Git Project relation to Files and Servers"
msgstr "Relazione progetto Git Cetmix Tower a file e server"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_remote
msgid "Cetmix Tower Git Remote"
msgstr "Remote Git Cetmix Tower"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_git_source
msgid "Cetmix Tower Git Source"
msgstr "Origine Git Cetmix Tower"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cetmix_tower
msgid "Cetmix Tower Odoo Automation"
msgstr "Automazione Odoo Cetmix Tower"
#. module: cetmix_tower_git
#: model:ir.model,name:cetmix_tower_git.model_cx_tower_server
msgid "Cetmix Tower Server"
msgstr "Server Cetmix Tower"
#. module: cetmix_tower_git
#. odoo-python
#: code:addons/cetmix_tower_git/models/cx_tower_git_project_file_template_rel.py:0
#: code:addons/cetmix_tower_git/models/cx_tower_git_project_rel.py:0
#, python-format
msgid "Code generator function for '%(project_format)s' format not found."
msgstr "Funzione generazione codice per il formato '%(project_format)s' non trovata."
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__head_type__commit
msgid "Commit"
msgstr "Commit"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_plan_line__is_make_copy
msgid "Create a copy of the Git Project instead of linking the file to the existing one."
msgstr "Crea una copia del progetto Git invece di collegare il file a uno esistente."
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__create_uid
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__create_uid
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__create_date
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__create_date
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__create_date
msgid "Created on"
msgstr "Creato il"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_remote_view_form
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Disabled"
msgstr "Disabilitato"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_file_template_rel__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__display_name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__enabled
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_source__enabled
msgid "Enable in configuration and exported to files"
msgstr "Abilitato in configurazione ed esportato nei file"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__enabled
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__enabled
msgid "Enabled"
msgstr "Abilitato"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Export YAML"
msgstr "Esporta YAML"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__file_id
msgid "File"
msgstr "File"
#. module: cetmix_tower_git
#. odoo-python
#: code:addons/cetmix_tower_git/models/cx_tower_git_project_rel.py:0
#, python-format
msgid "File '%(file)s' doesn't belong to server '%(server)s'"
msgstr "Il file '%(file)s' non appartiene al server '%(server)s'"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_file_template_rel__file_template_id
msgid "File Template"
msgstr "Modello file"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__file_template_ids
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "File Templates"
msgstr "Modelli file"
#. module: cetmix_tower_git
#: model:ir.model.constraint,message:cetmix_tower_git.constraint_cx_tower_git_project_rel_project_server_file_format_uniq
msgid "File is already related to the same project and format"
msgstr "Il file è già associato allo stesso progetto e formato"
#. module: cetmix_tower_git
#: model:ir.model.constraint,message:cetmix_tower_git.constraint_cx_tower_git_project_file_template_rel_project_server_file_format_uniq
msgid "File template is already related to the same project and format"
msgstr "Il modello di file è già associato allo stesso progetto e formato"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__file_ids
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Files"
msgstr "File"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_file_template_rel__project_format
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__project_format
msgid "Format"
msgstr "Formato"
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__url_protocol__git
msgid "GIT"
msgstr "GIT"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "General"
msgstr "Generale"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Git Aggregator"
msgstr "Git Aggregator"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__git_aggregator_root_dir
msgid "Git Aggregator Root Dir"
msgstr "Directory radice Git Aggregator"
#. module: cetmix_tower_git
#. odoo-python
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid ""
"Git Aggregator: Bitbucket does not support fetching PRs. Please use branch instead.\n"
"\n"
"Source: %(src)s\n"
"URL: %(url)s\n"
"Head: %(head)s"
msgstr ""
"Git Aggregator: Bitbucket non supporta il recupero delle PR. In alternativa usare il branch.\n"
"\n"
"Origine: %(src)s\n"
"URL: %(url)s\n"
"Head: %(head)s"
#. module: cetmix_tower_git
#. odoo-python
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid "Git Aggregator: Head number is empty in %(head)s"
msgstr "Git Aggregator: il numero dell'head è vuoto in %(head)s"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__git_project_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__git_project_id
msgid "Git Configuration"
msgstr "Configurazione Git"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file__git_project_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file_template__git_project_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_file_template_rel__git_project_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__git_project_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_plan_line__git_project_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_server__git_project_ids
msgid "Git Project"
msgstr "Progetto Git"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__git_project_file_template_rel_ids
msgid "Git Project File Template Relations"
msgstr "Relazioni modello file progetto Git"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_server__git_project_rel_ids
msgid "Git Project Rel"
msgstr "Rel progetto Git"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file__git_project_rel_ids
msgid "Git Project Relations"
msgstr "Relazioni progetto Git"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__git_project_rel_ids
msgid "Git Project Server File Relations"
msgstr "Relazioni file server progetto Git"
#. module: cetmix_tower_git
#: model:ir.actions.act_window,name:cetmix_tower_git.cx_tower_git_project_action
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file_template__git_project_ids
#: model:ir.ui.menu,name:cetmix_tower_git.menu_cx_tower_git_project
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_server_view_form
msgid "Git Projects"
msgstr "Progetti Git"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__git_aggregator_root_dir
msgid "Git aggregator root directory where sources will be cloned. Eg '/tmp/git-aggregator' Will use '.' if not set"
msgstr "La directory radice di Git Aggregator dove le origini verranno clonate. Es. '/tmp/git-aggregator'. Verrà usato '.' se non impostata"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Git aggregator root directory where sources will be cloned. Leave blank to use '.'"
msgstr "La directory radice di Git Aggregator dove le origini verranno clonate. Lasciare vuoto per usare '.'"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__url
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_remote_view_form
msgid "Git remote URL. Eg 'https://github.com/cetmix/cetmix-tower.git' or 'git@github.com:cetmix/cetmix-tower.git'"
msgstr "URL del remote Git. Es. 'https://github.com/cetmix/cetmix-tower.git' o 'git@github.com:cetmix/cetmix-tower.git'"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__head
msgid "Git remote head. Link to branch, PR, commit or commit hash. Leave blank to auto-detect"
msgstr "Head remoto Git. Collegamento al branch, alla PR, al commit o all'hash del commit. Lasciare vuoto per il rilevamento automatico"
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__repo_provider__github
msgid "GitHub"
msgstr "GitHub"
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__repo_provider__gitlab
msgid "GitLab"
msgstr "GitLab"
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__url_protocol__https
msgid "HTTPS"
msgstr "HTTPS"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__has_partially_private_remotes
msgid "Has Partially Private Remotes"
msgstr "Ha remote parzialmente privati"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__has_private_remotes
msgid "Has Private Remotes"
msgstr "Ha remote privati"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__head
msgid "Head"
msgstr "Head"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__head_type
msgid "Head Type"
msgstr "Tipo di head"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_file_template_rel__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__id
msgid "ID"
msgstr "ID"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project_rel__auto_sync
msgid "If enabled file will be synced automatically using cron"
msgstr "Se abilitato, il file verrà sincronizzato automaticamente tramite cron"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__has_partially_private_remotes
msgid "Indicates if the project has any partially private remotes."
msgstr "Indica se il progetto ha qualche remote parzialmente privato."
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__has_private_remotes
msgid "Indicates if the project has any private remotes."
msgstr "Indica se il progetto ha qualche remote privato."
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__is_private
msgid "Is Private"
msgstr "È privato"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__write_uid
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__write_uid
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__write_date
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__write_date
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_plan_line__is_make_copy
msgid "Make a Copy"
msgstr "Crea una copia"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__manager_ids
msgid "Managers"
msgstr "Responsabili"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__manager_ids
msgid "Managers who can modify this record"
msgstr "Responsabili che possono modificare questo record"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_file_template_rel__name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__name
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__name
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Name"
msgstr "Nome"
#. module: cetmix_tower_git
#. odoo-python
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid "Not a valid URL. URL must end with '.git'"
msgstr "URL non valido. L'URL deve terminare con '.git'"
#. module: cetmix_tower_git
#. odoo-python
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid "Not a valid URL. URL must start with 'https://', 'git@', or 'git://'"
msgstr "URL non valido. L'URL deve iniziare con 'https://', 'git@' o 'git://'"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__note
msgid "Note"
msgstr "Nota"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_server_view_form
msgid "Open"
msgstr "Apri"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Open File Template"
msgstr "Apri modello file"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_server_view_form
msgid "Open Git Project"
msgstr "Apri progetto Git"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Open Server"
msgstr "Apri server"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Open file template"
msgstr "Apri modello file"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Open server"
msgstr "Apri server"
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__repo_provider__other
msgid "Other"
msgstr "Altro"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Private"
msgstr "Privato"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__remote_count_private
msgid "Private Remotes"
msgstr "Remote privati"
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__head_type__pr
msgid "Pull/Merge Request"
msgstr "Pull/Merge Request"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Put your notes here..."
msgstr "Inserire qui le note..."
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__reference
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__reference
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__reference
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__reference
msgid "Reference"
msgstr "Riferimento"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Reference. Can contain English letters, digits and '_'. Leave blank to autogenerate"
msgstr "Riferimento. Può contenere lettere inglesi, cifre e '_'. Lasciare vuoto per la generazione automatica"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__remote_ids
msgid "Remote"
msgstr "Remote"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__remote_count
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid "Remotes"
msgstr "Remote"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__repo_provider
msgid "Repository Provider"
msgstr "Fornitore repository"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__is_private
msgid "Repository is private"
msgstr "Il repository è privato"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Root Directory"
msgstr "Cartella radice"
#. module: cetmix_tower_git
#: model:ir.model.fields.selection,name:cetmix_tower_git.selection__cx_tower_git_remote__url_protocol__ssh
msgid "SSH"
msgstr "SSH"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_plan_line__git_project_id
#, fuzzy
msgid "Select a git project to be linked to the file and server."
msgstr "Seleziona un progetto Git da collegare al file e al server."
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__sequence
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__sequence
msgid "Sequence"
msgstr "Sequenza"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_file__server_id
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__server_id
msgid "Server"
msgstr "Server"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__server_ids
msgid "Servers"
msgstr "Server"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__server_ids
msgid ""
"Servers are added automatically based on the files linked to the project.\n"
"IMPORTANT: This field may contain duplicates because of the relation nature!"
msgstr ""
"I server sono aggiunti automaticamente in base ai file collegati al progetto.\n"
"IMPORTANTE: questo campo può contenere duplicati a causa della natura della relazione!"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__source_id
msgid "Source"
msgstr "Origine"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__source_ids
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "Sources"
msgstr "Origini"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_source_view_form
msgid ""
"The top one remote will be used as a merge target.\n"
" You can re-arrange remotes by dragging them or changing their sequence value."
msgstr ""
"Il remote in cima verrà utilizzato come destinazione del merge.\n"
" È possibile riorganizzare i remote trascinandoli o modificando il loro valore di sequenza."
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__url
msgid "URL"
msgstr "URL"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__url_protocol
msgid "URL Protocol"
msgstr "Protocollo URL"
#. module: cetmix_tower_git
#. odoo-python
#: code:addons/cetmix_tower_git/models/cx_tower_git_remote.py:0
#, python-format
msgid "URL is required"
msgstr "È richiesto l'URL"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__user_ids
msgid "Users"
msgstr "Utenti"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_project__user_ids
msgid "Users who can view this record"
msgstr "Utenti che possono vedere questo record"
#. module: cetmix_tower_git
#: model:ir.model.fields,help:cetmix_tower_git.field_cx_tower_git_remote__repo_provider
msgid "Will be tried to be determined from the URL. Please select manually if auto-detection fails."
msgstr "Si cercherà di determinarlo dall'URL. Selezionarlo manualmente se fallisce l'auto determinazione."
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "YAML"
msgstr "YAML"
#. module: cetmix_tower_git
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project__yaml_code
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_project_rel__yaml_code
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_remote__yaml_code
#: model:ir.model.fields,field_description:cetmix_tower_git.field_cx_tower_git_source__yaml_code
msgid "Yaml Code"
msgstr "Codice YAML"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "You can edit these fields at your own risk. However keep in mind that they will be automatically updated each time related servers are added, removed or updated."
msgstr "È possibile modificare questi campi a proprio rischio. Tuttavia, tenere presente che verranno aggiornati automaticamente ogni volta che i server correlati vengono aggiunti, rimossi o aggiornati."
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "You must be a member of the \"YAML/Export\" group to export data as YAML."
msgstr "Bisogna appartenere al gruppo \"YAML/Export\" per esportare dati in YAML."
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "managers who can modify this record"
msgstr "responsabili che possono modificare questo record"
#. module: cetmix_tower_git
#: model_terms:ir.ui.view,arch_db:cetmix_tower_git.cx_tower_git_project_view_form
msgid "users who can view this record"
msgstr "utenti che possono visualizzare questo record"
#~ msgid ""
#~ "File '%(file)s' is related to multiple projects: %(projects)s \n"
#~ "Please select only one project."
#~ msgstr ""
#~ "Il file '%(file)s' è relativo a progetti multipli: %(projects)s \n"
#~ "Selezionare solo un progetto."
#~ msgid "Last Modified on"
#~ msgstr "Ultima modifica il"
#~ msgid ""
#~ "Not a valid URL: %(url_msg)s\n"
#~ "URL must contain at least two parts separated by dot."
#~ msgstr ""
#~ "URL non valdio: %(url_msg)s\n"
#~ "URL deve contenere almeno due parti separate da un punto."

View File

@@ -1,15 +0,0 @@
# cx_tower_git_project_rel must be the first one in the list
# in order to create the relation table properly
from . import cx_tower_git_project_rel
from . import cx_tower_git_project_file_template_rel
from . import cx_tower_file
from . import cx_tower_file_template
from . import cx_tower_git_project
from . import cx_tower_git_remote
from . import cx_tower_git_repo
from . import cx_tower_git_repo_owner
from . import cx_tower_git_source
from . import cx_tower_server
from . import cetmix_tower
from . import cx_tower_plan_line
from . import cx_tower_command

View File

@@ -1,35 +0,0 @@
# Copyright (C) 2024 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, models
class CetmixTower(models.AbstractModel):
_inherit = "cetmix.tower"
@api.model
def servers_by_git_ref(self, repository_url, head=None, head_type=None):
"""
Return servers linked to a given Git repository reference.
This is a thin shortcut that delegates to
:meth:`cx.tower.server.get_servers_by_git_ref`.
Parameters
----------
repository_url : str
Pre-normalized canonical Git URL
(e.g. ``https://host/owner/repo.git``).
head : str, optional
Branch name, commit SHA, or PR identifier.
head_type : {'branch', 'commit', 'pr'}, optional
Type of the ``head`` argument.
Returns
-------
recordset of cx.tower.server
Matching servers. Empty recordset if no matches.
"""
return self.env["cx.tower.server"].get_servers_by_git_ref(
repository_url, head, head_type
)

View File

@@ -1,37 +0,0 @@
# Copyright 2024 Cetmix OÜ
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from odoo import _, models
from odoo.tools.safe_eval import wrap_module
# Wrap giturlparse safely
giturlparse = wrap_module(__import__("giturlparse"), ["parse", "validate"])
class CxTowerCommand(models.Model):
"""Extends cx.tower.command to add giturlparse functionality."""
_inherit = "cx.tower.command"
def _custom_python_libraries(self):
"""
Add the giturlparse library to the available libraries.
"""
custom_python_libraries = super()._custom_python_libraries()
custom_python_libraries.update(
{
"cetmix_tower_git": {
"giturlparse": {
"import": giturlparse,
"help": _(
"Python library for Git URL parsing. "
"Available methods: 'parse', 'validate'. "
" <a "
"href='https://github.com/nephila/giturlparse/'"
" target='_blank'>Documentation on GitHub</a>."
),
},
}
}
)
return custom_python_libraries

View File

@@ -1,54 +0,0 @@
# Copyright (C) 2024 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class CxTowerFile(models.Model):
_inherit = "cx.tower.file"
git_project_id = fields.Many2one(
comodel_name="cx.tower.git.project",
compute="_compute_git_project_id",
store=True,
)
git_project_rel_ids = fields.One2many(
comodel_name="cx.tower.git.project.rel",
inverse_name="file_id",
string="Git Project Relations",
copy=False,
)
# Get server from the first related git project relation
# This is needed for YAML import
server_id = fields.Many2one(
comodel_name="cx.tower.server",
compute="_compute_git_project_id",
store=True,
readonly=False,
)
@api.depends("git_project_rel_ids.server_id", "git_project_rel_ids.git_project_id")
def _compute_git_project_id(self):
"""
Link to project using the proxy model.
"""
for record in self:
# File is related to project via proxy model.
# So there can be only one record in o2m field.
git_project_relation = (
record.git_project_rel_ids and record.git_project_rel_ids[0]
)
if git_project_relation:
record.update(
{
"git_project_id": git_project_relation.git_project_id,
"server_id": git_project_relation.server_id,
}
)
else:
# Reset only git project id as file still belongs to the server
record.update(
{
"git_project_id": False,
}
)

View File

@@ -1,32 +0,0 @@
# Copyright (C) 2024 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class CxTowerFileTemplate(models.Model):
_inherit = "cx.tower.file.template"
git_project_ids = fields.Many2many(
comodel_name="cx.tower.git.project",
relation="cx_tower_git_project_file_template_rel",
column1="file_template_id",
column2="git_project_id",
string="Git Projects",
copy=False,
)
git_project_id = fields.Many2one(
comodel_name="cx.tower.git.project",
compute="_compute_git_project_id",
)
@api.depends("git_project_ids")
def _compute_git_project_id(self):
"""
Link to project using the proxy model.
"""
for record in self:
# File is related to project via proxy model.
# So there can be only one record in o2m field.
record.git_project_id = (
record.git_project_ids and record.git_project_ids[0].id
)

View File

@@ -1,368 +0,0 @@
# Copyright (C) 2024 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import re
from odoo import _, api, fields, models
class CxTowerGitProject(models.Model):
"""
Git Project.
Implements pre-defined git configuration.
"""
_name = "cx.tower.git.project"
_description = "Cetmix Tower Git Project"
_order = "name"
_inherit = [
"cx.tower.reference.mixin",
"cx.tower.yaml.mixin",
"cx.tower.access.role.mixin",
]
def _get_post_create_fields(self):
res = super()._get_post_create_fields()
return res + [
"source_ids",
"git_project_rel_ids",
"git_project_file_template_rel_ids",
]
active = fields.Boolean(default=True)
server_ids = fields.Many2many(
comodel_name="cx.tower.server",
relation="cx_tower_git_project_server_rel",
readonly=True,
copy=False,
compute="_compute_server_ids",
store=True,
context={"active_test": False},
help="Servers are added automatically based on the files"
" linked to the project.",
)
source_ids = fields.One2many(
comodel_name="cx.tower.git.source",
inverse_name="git_project_id",
string="Sources",
auto_join=True,
copy=True,
)
git_project_rel_ids = fields.One2many(
comodel_name="cx.tower.git.project.rel",
inverse_name="git_project_id",
string="Git Project Server File Relations",
copy=False,
)
# Helper field to get all files related to git project
file_ids = fields.Many2many(
comodel_name="cx.tower.file",
relation="cx_tower_git_project_rel",
column1="git_project_id",
column2="file_id",
string="Files",
readonly=True,
depends=["git_project_rel_ids"],
copy=False,
)
git_project_file_template_rel_ids = fields.One2many(
comodel_name="cx.tower.git.project.file.template.rel",
inverse_name="git_project_id",
string="Git Project File Template Relations",
copy=False,
)
# Helper field to get all file templates related to git project
file_template_ids = fields.Many2many(
comodel_name="cx.tower.file.template",
relation="cx_tower_git_project_file_template_rel",
column1="git_project_id",
column2="file_template_id",
string="File Templates",
readonly=True,
depends=["git_project_file_template_rel_ids"],
copy=False,
)
# Helper field to get all repositories used in this project
repo_ids = fields.Many2many(
comodel_name="cx.tower.git.repo",
relation="cx_tower_git_repo_project_rel",
column1="project_id",
column2="repo_id",
string="Repositories",
readonly=True,
copy=False,
help="Repositories used in this project through its sources and remotes",
)
note = fields.Text()
# ---- Access. Add relation for mixin fields
user_ids = fields.Many2many(
relation="cx_tower_git_project_user_rel",
compute="_compute_user_ids",
readonly=False,
store=True,
precompute=True,
)
manager_ids = fields.Many2many(
relation="cx_tower_git_project_manager_rel",
compute="_compute_user_ids",
readonly=False,
store=True,
precompute=True,
)
# -- UI/UX fields
has_private_remotes = fields.Boolean(
compute="_compute_has_private_remotes",
help="Indicates if the project has any private remotes.",
)
has_partially_private_remotes = fields.Boolean(
compute="_compute_has_private_remotes",
help="Indicates if the project has any partially private remotes.",
)
# -- Git Aggregator related fields
git_aggregator_root_dir = fields.Char(
help="Git aggregator root directory where sources will be cloned."
" Eg '/tmp/git-aggregator'"
" Will use '.' if not set",
)
def _selection_project_format(self):
"""
Possible project formats.
Inherit and extend when adding new project formats.
Returns:
List of tuples: (code, name)
"""
return [
("git_aggregator", "Git Aggregator"),
]
def _default_project_format(self):
"""
Default project format.
"""
return "git_aggregator"
@api.depends("git_project_rel_ids", "git_project_rel_ids.server_id")
def _compute_server_ids(self):
"""Compute server ids for git projects.
Why? Because a git project can be linked to multiple files
on the same server.
So we need to use a set to avoid duplicates so every server
is listed only once.
"""
for project in self:
project.server_ids = (
list(set(project.git_project_rel_ids.server_id.ids))
if project.git_project_rel_ids
else False
)
@api.depends(
"git_project_rel_ids.server_id",
"git_project_rel_ids.server_id.user_ids",
"git_project_rel_ids.server_id.manager_ids",
)
def _compute_user_ids(self):
"""
Users. All users who have "Manager" group and are either set in "Users"
or in "Managers" in all related servers.
Managers. All users who have "Manager" group and are set as "Managers"
in all related servers.
This is done to avoid unpredictable consequences when some of the servers
are not updated due to access restrictions when a project is updated.
"""
for project in self:
# Do not compute if no servers are related
server_ids = project.git_project_rel_ids.server_id
if not server_ids:
continue
# Get all user and manager ids from related servers
all_user_ids = server_ids.user_ids.filtered(
lambda u: u.has_group("cetmix_tower_server.group_manager")
).ids
all_manager_ids = server_ids.manager_ids.ids
# Create a final list of user and manager ids
user_ids = []
manager_ids = []
# Check if user is present in all servers
for user_id in all_user_ids:
if all(
user_id in server.user_ids.ids or user_id in server.manager_ids.ids
for server in server_ids
):
user_ids.append(user_id)
# Check if manager is present in all servers
for manager_id in all_manager_ids:
if all(manager_id in server.manager_ids.ids for server in server_ids):
manager_ids.append(manager_id)
# Set the final lists
project.update(
{
"user_ids": [(6, 0, user_ids)],
"manager_ids": [(6, 0, manager_ids)],
}
)
@api.depends(
"source_ids", "source_ids.remote_ids", "source_ids.remote_ids.is_private"
)
def _compute_has_private_remotes(self):
for project in self:
project.has_private_remotes = any(
source.remote_count > 0
and source.remote_count_private == source.remote_count
for source in project.source_ids
)
project.has_partially_private_remotes = any(
source.remote_count_private > 0
and source.remote_count_private != source.remote_count
for source in project.source_ids
)
@api.model_create_multi
def create(self, vals_list):
res = super().create(vals_list)
# Update related files and templates on create
res._update_related_files_and_templates()
return res
def write(self, vals):
res = super().write(vals)
# Update related files and templates on update
self._update_related_files_and_templates()
return res
# ------------------------------
# Helper methods
# ------------------------------
def _update_related_files_and_templates(self):
# Update related files and templates
if self.git_project_rel_ids:
self.git_project_rel_ids._save_to_file()
if self.git_project_file_template_rel_ids:
self.git_project_file_template_rel_ids._save_to_file_template()
def _extract_variables_from_text(self, text):
"""Extract environment variables from text.
Helper method for file content generation.
Args:
text (str): Text to extract variables from
Returns:
List: List of variables
"""
# This regex will find all variables where variables are denoted
# as $VAR or ${VAR}, e.g., $FOO or ${FOO_BAR123}
variables = re.findall(r"\$\{?([A-Z0-9_]+)\}?", text)
return sorted(list(set(variables)))
def _compose_copy_name(self, server=False):
"""
Compose copy name of a git project copy.
Helper method used when creating a copy of a git project.
Args:
server (cx.tower.server): Server to get the copy name for.
Returns:
Char: Copy name
"""
self.ensure_one()
if server:
return server.name
return _("%(name)s (copy)", name=self.name)
# ------------------------------
# YAML mixin methods
# ------------------------------
def _get_fields_for_yaml(self):
res = super()._get_fields_for_yaml()
res += [
"name",
"note",
"source_ids",
"git_aggregator_root_dir",
]
return res
# -------------------------------
# Git Aggregator related methods
# -------------------------------
def _git_aggregator_prepare_record(self):
"""Prepare json structure for git aggregator.
Returns:
Dict: Json structure for git aggregator
"""
self.ensure_one()
values = {}
for source in self.source_ids:
if source.enabled and source.remote_count:
root_dir = self.git_aggregator_root_dir or "."
values.update(
{
f"/{source.reference}"
if root_dir == "/"
else f"{root_dir}/{source.reference}": source._git_aggregator_prepare_record() # noqa: E501
}
)
return values
def _git_aggregator_prepare_yaml_comment(self, yaml_code):
"""Generate commentary for yaml file.
It includes brief instructions for git aggregator
and lists environment variables that are required.
Args:
yaml_code (str): Yaml code
Returns:
Char: comment text or None
"""
comment_text = _(
"# This file is generated with Cetmix Tower https://cetmix.com/tower\n"
"# It's designed to be used with git-aggregator tool developed by Acsone.\n"
"# Documentation for git-aggregator: https://github.com/acsone/git-aggregator\n"
)
variable_list = self._extract_variables_from_text(yaml_code)
if variable_list:
comment_text += _(
"\n# You need to set the following variables in your environment:\n# %(vars)s\n" # noqa: E501
"# and run git-aggregator with '--expand-env' parameter.\n", # noqa: E501
vars=(", ".join(variable_list)),
)
return comment_text
def _generate_code_git_aggregator(self, record):
"""Generate code in git-aggregator format.
Args:
record (recordset()): Model record to generate code for.
must be a single record and have git_project_id field.
Returns:
Text: Yaml code
"""
yaml_mixin = self.env["cx.tower.yaml.mixin"]
# Do not generate code if record values are empty
record_values = record.git_project_id._git_aggregator_prepare_record()
if record_values:
yaml_code = yaml_mixin._convert_dict_to_yaml(record_values)
# Prepend comment to yaml code
comment = record.git_project_id._git_aggregator_prepare_yaml_comment(
yaml_code
)
return f"{comment}\n{yaml_code}"
return ""

View File

@@ -1,115 +0,0 @@
# Copyright (C) 2024 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class CxTowerGitProjectFileTemplateRel(models.Model):
"""
Relation between git projects and file templates.
"""
_name = "cx.tower.git.project.file.template.rel"
_table = "cx_tower_git_project_file_template_rel"
_description = "Cetmix Tower Git Project relation to File Templates"
_log_access = False
name = fields.Char(related="git_project_id.name", readonly=True)
git_project_id = fields.Many2one(
comodel_name="cx.tower.git.project",
index=True,
required=True,
ondelete="cascade",
)
file_template_id = fields.Many2one(
comodel_name="cx.tower.file.template",
required=True,
ondelete="cascade",
)
project_format = fields.Selection(
selection=lambda self: self.env[
"cx.tower.git.project"
]._selection_project_format(),
default=lambda self: self.env["cx.tower.git.project"]._default_project_format(),
required=True,
string="Format",
)
_sql_constraints = [
(
"project_server_file_template_format_uniq",
"unique(git_project_id, file_template_id, project_format)",
"File template is already related to the same project and format",
),
]
@api.model_create_multi
def create(self, vals_list):
res = super().create(vals_list)
# Export project to file
res._save_to_file_template()
return res
def write(self, vals):
res = super().write(vals)
# Export project to file
self._save_to_file_template()
return res
def action_open_file_template(self):
"""
Open file template record in current window
"""
self.ensure_one()
return {
"type": "ir.actions.act_window",
"name": self.file_template_id.name,
"res_model": "cx.tower.file.template",
"res_id": self.file_template_id.id, # pylint: disable=no-member
"view_mode": "form",
"view_type": "form",
"target": "current",
}
# ----------------------------------------------------
# Save project to linked file based on selected format
# ----------------------------------------------------
def _save_to_file_template(self):
"""Save project to linked file using format-specific function."""
# Get required function based on project format
# Following the pattern: _generate_code__<format> where format
# is one of the values in _selection_project_format
# Function gets a single record as an argument.
# Save resolved functions to dict for faster access
code_generator_functions = {}
for record in self:
code_generator_function = code_generator_functions.get(
record.project_format
)
if not code_generator_function:
code_generator_function = getattr(
record.git_project_id,
f"_generate_code_{record.project_format}",
None,
)
if not code_generator_function:
raise ValidationError(
_(
"Code generator function for '%(project_format)s'"
" format not found.",
project_format=record.project_format,
)
)
code_generator_functions[record.project_format] = (
code_generator_function
)
# Generate code for current record
code = code_generator_function(record)
if record.file_template_id.code != code:
record.file_template_id.write({"code": code})

View File

@@ -1,179 +0,0 @@
# Copyright (C) 2024 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class CxTowerGitProjectRel(models.Model):
"""
Relation between git projects and other model records.
"""
_name = "cx.tower.git.project.rel"
_inherit = [
"cx.tower.reference.mixin",
"cx.tower.yaml.mixin",
]
_table = "cx_tower_git_project_rel"
_description = "Cetmix Tower Git Project relation to Files and Servers"
_log_access = False
name = fields.Char(related="git_project_id.name", readonly=True)
git_project_id = fields.Many2one(
comodel_name="cx.tower.git.project",
index=True,
required=True,
ondelete="cascade",
)
server_id = fields.Many2one(
comodel_name="cx.tower.server",
index=True,
required=True,
ondelete="cascade",
)
file_id = fields.Many2one(
comodel_name="cx.tower.file",
domain="[('server_id', '=', server_id),"
"('source', '=', 'tower'),"
"('file_type', '=', 'text')]",
required=True,
ondelete="cascade",
)
project_format = fields.Selection(
selection=lambda self: self.env[
"cx.tower.git.project"
]._selection_project_format(),
default=lambda self: self.env["cx.tower.git.project"]._default_project_format(),
required=True,
string="Format",
)
auto_sync = fields.Boolean(related="file_id.auto_sync", readonly=False)
_sql_constraints = [
(
"project_server_file_format_uniq",
"unique(git_project_id, file_id, project_format)",
"File is already related to the same project and format",
),
]
@api.constrains("server_id", "file_id")
def _check_server_file_relation(self):
"""
Check if server and file are related.
"""
for record in self:
if (
record.file_id.server_id
and record.server_id != record.file_id.server_id
):
raise ValidationError(
_(
"File '%(file)s' doesn't belong to server '%(server)s'",
file=record.file_id.name,
server=record.server_id.name,
)
)
@api.model_create_multi
def create(self, vals_list):
res = super().create(vals_list)
# Export project to file
res._save_to_file()
return res
def write(self, vals):
res = super().write(vals)
# Export project to file
self._save_to_file()
return res
def action_open_project(self):
"""
Open project record in current window
"""
self.ensure_one()
return {
"type": "ir.actions.act_window",
"name": self.name,
"res_model": "cx.tower.git.project",
"res_id": self.git_project_id.id, # pylint: disable=no-member
"view_mode": "form",
"view_type": "form",
"target": "current",
}
def action_open_server(self):
"""
Open server record in current window
"""
self.ensure_one()
return {
"type": "ir.actions.act_window",
"name": self.server_id.name,
"res_model": "cx.tower.server",
"res_id": self.server_id.id, # pylint: disable=no-member
"view_mode": "form",
"view_type": "form",
"target": "current",
}
# ----------------------------------------------------
# Save project to linked file based on selected format
# ----------------------------------------------------
def _save_to_file(self):
"""Save project to linked file using format-specific function."""
# Get required function based on project format
# Following the pattern: _generate_code_<format> where format
# is one of the values in _selection_project_format
# Function gets a single record as an argument.
# Save resolved functions to dict for faster access
code_generator_functions = {}
for record in self:
# Disconnect file from file template if it is connected
if record.file_id.template_id:
record.file_id.action_unlink_from_template()
code_generator_function = code_generator_functions.get(
record.project_format
)
if not code_generator_function:
code_generator_function = getattr(
record.git_project_id,
f"_generate_code_{record.project_format}",
None,
)
if not code_generator_function:
raise ValidationError(
_(
"Code generator function for '%(project_format)s'"
" format not found.",
project_format=record.project_format,
)
)
code_generator_functions[record.project_format] = (
code_generator_function
)
# Generate code for current record
code = code_generator_function(record)
if record.file_id.code != code:
record.file_id.write({"code": code})
# ------------------------------
# YAML mixin methods
# ------------------------------
def _get_fields_for_yaml(self):
res = super()._get_fields_for_yaml()
res += [
"file_id",
"git_project_id",
"project_format",
"auto_sync",
]
return res

View File

@@ -1,403 +0,0 @@
# Copyright (C) 2024 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import giturlparse
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
class CxTowerGitRemote(models.Model):
"""
Git Remote.
Implements single git remote.
Eg a branch or a pull request.
"""
_name = "cx.tower.git.remote"
_inherit = [
"cx.tower.reference.mixin",
"cx.tower.yaml.mixin",
]
_description = "Cetmix Tower Git Remote"
_order = "sequence, name"
active = fields.Boolean(related="source_id.active", store=True, readonly=True)
enabled = fields.Boolean(
default=True, help="Enable in configuration and exported to files"
)
sequence = fields.Integer(default=10)
name = fields.Char(compute="_compute_name", store=True, default="remote")
source_id = fields.Many2one(
comodel_name="cx.tower.git.source",
required=True,
ondelete="cascade",
auto_join=True,
)
git_project_id = fields.Many2one(
comodel_name="cx.tower.git.project",
related="source_id.git_project_id",
store=True,
readonly=True,
)
repo_id = fields.Many2one(
comodel_name="cx.tower.git.repo",
string="Repository",
required=True,
ondelete="restrict",
help="If selected, the remote URL will be filled from the"
" repo settings based on the remote protocol",
)
repo_provider = fields.Selection(
related="repo_id.provider",
readonly=True,
)
# -- Repo related fields
url_protocol = fields.Selection(
string="Protocol",
selection=[
("ssh", "SSH"),
("https", "HTTPS"),
("git", "GIT"),
],
required=True,
default=lambda self: self._get_default_url_protocol(),
)
is_private = fields.Boolean(
string="Private",
help="Repository is private",
related="repo_id.is_private",
store=True,
readonly=True,
)
head_type = fields.Selection(
selection=[
("branch", "Branch"),
("pr", "Pull/Merge Request"),
("commit", "Commit"),
],
required=True,
)
head = fields.Char(
help="Git remote head. Link to branch, PR, commit or commit hash.",
required=True,
index=True,
)
def _get_default_url_protocol(self):
"""Default URL protocol for new remote.
Returns:
Char: Default URL protocol.
"""
return "https"
@api.depends("source_id", "sequence")
def _compute_name(self):
"""
Compute remote name.
By default all remotes are named `remote_<position>`
where position is the position of the remote in the source.
Eg first remote is `remote_1`, second is `remote_2`, etc.
"""
for remote in self:
if remote.source_id:
for index, source_remote in enumerate(remote.source_id.remote_ids):
source_remote.name = f"remote_{index + 1}"
@api.onchange("head")
def onchange_head(self):
"""
Extract head number from head url
and set it as head.
"""
for remote in self:
if remote.head and "/" in remote.head:
remote.head = self._sanitize_head(remote.head)
@api.model_create_multi
def create(self, vals_list):
# Sanitize head
for vals in vals_list:
head = vals.get("head")
if head and "/" in head:
vals["head"] = self._sanitize_head(head)
res = super().create(vals_list)
# Export project to related files and templates
res._update_related_files_and_templates()
return res
def write(self, vals):
# Sanitize head
if "head" in vals:
head = vals["head"]
if head and "/" in head:
vals["head"] = self._sanitize_head(head)
res = super().write(vals)
# Update related files and templates on update
self._update_related_files_and_templates()
return res
def unlink(self):
"""
Override to update related files and templates on unlink
"""
projects = self.git_project_id
res = super().unlink()
# Update related files and templates on unlink
if projects:
file_relations = projects.git_project_rel_ids # type: ignore
if file_relations:
file_relations._save_to_file()
template_relations = projects.git_project_file_template_rel_ids # type: ignore
if template_relations:
template_relations._save_to_file_template()
return res
def _sanitize_head(self, head):
"""Sanitize head.
Extract head number from head url
and set it as head.
Args:
head (Char): Head to sanitize
Returns:
Char: Sanitized head
"""
if head and "/" in head:
return head.split("/")[-1].strip()
return head
def _update_related_files_and_templates(self):
# Update related files on update
related_files = self.mapped("git_project_id").mapped("git_project_rel_ids")
if related_files:
related_files._save_to_file()
related_templates = self.mapped("git_project_id").mapped(
"git_project_file_template_rel_ids"
)
if related_templates:
related_templates._save_to_file_template()
# ------------------------------
# Reference mixin methods
# ------------------------------
def _get_pre_populated_model_data(self):
res = super()._get_pre_populated_model_data()
res.update({"cx.tower.git.remote": ["cx.tower.git.source", "source_id"]})
return res
# ------------------------------
# YAML mixin methods
# ------------------------------
def _get_fields_for_yaml(self):
res = super()._get_fields_for_yaml()
res += [
"name",
"enabled",
"sequence",
"repo_id",
"head",
"head_type",
]
return res
# ------------------------------
# Git Aggregator related methods
# ------------------------------
def _git_aggregator_prepare_url(self):
"""Prepare url for git aggregator
Returns:
Char: Prepared url for git aggregator
"""
self.ensure_one()
if not self.repo_id:
raise ValidationError(_("Repository is required"))
if not self.repo_id.url:
raise ValidationError(_("Repository URL is not set"))
url = self.repo_id.url
prepared_url = giturlparse.parse(url).urls.get(self.url_protocol, url)
# If repo is public or is not using HTTPS protocol return URL as is
if not self.is_private or self.url_protocol != "https":
return prepared_url
if self.repo_provider == "github":
prepared_url = self._git_aggregator_prepare_url_github(prepared_url)
elif self.repo_provider == "gitlab":
prepared_url = self._git_aggregator_prepare_url_gitlab(prepared_url)
elif self.repo_provider == "bitbucket":
prepared_url = self._git_aggregator_prepare_url_bitbucket(prepared_url)
return prepared_url
def _git_aggregator_prepare_authenticated_url(self, url, auth_token):
"""Helper to inject authentication token into HTTPS URL.
Args:
url (Char): URL to prepare
auth_token (Char): Authentication token
Returns:
Char: Prepared url for git aggregator
"""
url_without_protocol = url.replace("https://", "")
return f"https://{auth_token}@{url_without_protocol}"
def _git_aggregator_prepare_url_github(self, url):
"""
Prepare url for git aggregator for private Github repo
using https protocol.
Args:
url (Char): URL to prepare
Returns:
Char: Prepared url for git aggregator
"""
self.ensure_one()
return self._git_aggregator_prepare_authenticated_url(
url,
"$GITHUB_TOKEN:x-oauth-basic",
)
def _git_aggregator_prepare_url_gitlab(self, url):
"""
Prepare url for git aggregator for private GitLab repo
using https protocol.
Args:
url (Char): URL to prepare
Returns:
Char: Prepared url for git aggregator
"""
self.ensure_one()
return self._git_aggregator_prepare_authenticated_url(
url, "$GITLAB_TOKEN_NAME:$GITLAB_TOKEN"
)
def _git_aggregator_prepare_url_bitbucket(self, url):
"""
Prepare url for git aggregator for private Bitbucket repo
using https protocol.
Args:
url (Char): URL to prepare
Returns:
Char: Prepared url for git aggregator
"""
self.ensure_one()
return self._git_aggregator_prepare_authenticated_url(
url, "x-token-auth:$BITBUCKET_TOKEN"
)
def _git_aggregator_prepare_head(self):
"""Prepare head for git aggregator
Returns:
Char: Prepared head for git aggregator
"""
self.ensure_one()
if self.repo_provider == "github":
return self._git_aggregator_prepare_head_github()
if self.repo_provider == "gitlab":
return self._git_aggregator_prepare_head_gitlab()
if self.repo_provider == "bitbucket":
return self._git_aggregator_prepare_head_bitbucket()
return self.head
def _extract_head_number(self):
"""
Extract the last component from head
(branch name, PR number, or commit hash).
Raises:
ValidationError: If head number is empty
Returns:
Char: Extracted head number
"""
self.ensure_one()
head_number = self.head.split("/")[-1]
if not head_number:
raise ValidationError(
_("Git Aggregator: Head number is empty in %(head)s", head=self.head)
)
return head_number
def _git_aggregator_prepare_head_github(self):
"""Prepare head for git aggregator for Github.
Returns:
Char: Prepared head for git aggregator
"""
self.ensure_one()
head_number = self._extract_head_number()
# PR/MR
if self.head_type == "pr":
return f"refs/pull/{head_number}/head"
# Commit
if self.head_type in ["commit", "branch"]:
return f"{head_number}"
# Fallback to original head
return self.head
def _git_aggregator_prepare_head_gitlab(self):
"""Prepare head for git aggregator for GitLab.
Returns:
Char: Prepared head for git aggregator
"""
self.ensure_one()
head_number = self._extract_head_number()
# PR/MR
if self.head_type == "pr":
return f"merge-requests/{head_number}/head"
# Commit
# https://gitlab.com/cetmix/test/-/list/17.0-test-branch?ref_type=heads
if self.head_type in ["commit", "branch"]:
head_parts = head_number.split("?")
return f"{head_parts[0]}"
# Fallback to original head
return self.head
def _git_aggregator_prepare_head_bitbucket(self):
"""Prepare head for git aggregator for Bitbucket.
Returns:
Char: Prepared head for git aggregator
"""
self.ensure_one()
# PR/MR
if self.head_type == "pr":
raise ValidationError(
_(
"Git Aggregator: "
"Bitbucket does not support"
" fetching PRs. Please use branch instead.\n\n"
"Source: %(src)s\n"
"URL: %(url)s\n"
"Head: %(head)s",
src=self.source_id.name,
url=self.repo_id.url,
head=self.head,
)
)
head_number = self._extract_head_number()
# Commit
if self.head_type in ["commit", "branch"]:
return f"{head_number}"
# Fallback to original head
return self.head

View File

@@ -1,416 +0,0 @@
# Copyright (C) 2024 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
import giturlparse
from odoo import _, api, fields, models
from odoo.exceptions import ValidationError
from odoo.tools import ormcache
_logger = logging.getLogger(__name__)
class CxTowerGitRepo(models.Model):
"""
Git Repository.
Represents a git repository with its metadata and configuration.
"""
_name = "cx.tower.git.repo"
_inherit = [
"cx.tower.reference.mixin",
"cx.tower.yaml.mixin",
]
_description = "Cetmix Tower Git Repository"
_order = "name"
_rec_names_search = ["repo", "host", "owner_id"]
active = fields.Boolean(default=True, help="Indicates if the repository is active")
name = fields.Char(
compute="_compute_name", store=True, required=False, index="trigram"
)
reference = fields.Char(
index=True,
compute="_compute_name",
required=False,
store=True,
)
repo = fields.Char(
string="Repository Name",
readonly=True,
help="Repository name (e.g., 'cetmix-tower', 'odoo')",
)
url = fields.Char(
string="Generic URL",
help="Displayed in 'https' format, but can be entered in any format",
compute="_compute_url",
inverse="_inverse_url",
required=True,
compute_sudo=True,
)
url_ssh = fields.Char(
string="SSH URL",
help="SSH URL of the repository",
compute="_compute_url",
compute_sudo=True,
)
url_git = fields.Char(
string="GIT URL",
help="GIT URL of the repository",
compute="_compute_url",
compute_sudo=True,
)
is_private = fields.Boolean(
string="Private", default=False, help="Indicates if the repository is private"
)
provider = fields.Selection(
selection="_selection_provider",
required=True,
default="other",
help="Repository provider to determine provider-based behaviour",
)
host = fields.Char(
readonly=True,
index=True,
help="Repository host (e.g., 'github.com', 'gitlab.com')",
)
owner_id = fields.Many2one(
comodel_name="cx.tower.git.repo.owner",
readonly=True,
help="Repository owner (e.g., 'cetmix' or 'OCA')",
)
secret_id = fields.Many2one(
comodel_name="cx.tower.key",
string="Secret",
domain="[('key_type', '=', 's')]",
help="Custom secret used for this repository",
)
remote_ids = fields.One2many(
comodel_name="cx.tower.git.remote",
inverse_name="repo_id",
help="Remotes that use this repository",
)
git_project_ids = fields.Many2many(
comodel_name="cx.tower.git.project",
relation="cx_tower_git_repo_project_rel",
column1="repo_id",
column2="project_id",
compute="_compute_git_project_ids",
store=True,
help="Projects this repository is used in",
)
remote_count = fields.Integer(
compute="_compute_remote_count",
help="Number of remotes this repository is used in",
)
git_project_count = fields.Integer(
compute="_compute_git_project_count",
help="Number of projects this repository is used in",
)
_sql_constraints = [
(
"unique_repo_host_owner",
"unique(repo, host, owner_id)",
"A repository with the same name, host, and owner already exists.",
),
]
# -- Selection
def _selection_provider(self):
"""Available repository providers.
Returns:
List of tuples: available options.
"""
return [
("github", "GitHub"),
("gitlab", "GitLab"),
("bitbucket", "Bitbucket"),
("assembla", "Assembla"),
("other", "Other"),
]
# -- Computes
@api.depends("host", "owner_id", "owner_id.name", "repo")
def _compute_name(self):
"""
Compute name in format: host/owner/name.
Compute reference based on name.
"""
for repo in self:
if repo.host and repo.owner_id and repo.repo:
name = f"{repo.host}/{repo.owner_id.name}/{repo.repo}"
reference = repo._generate_or_fix_reference(name)
repo.update(
{
"name": name,
"reference": reference,
}
)
else:
repo.update(
{
"name": False,
"reference": False,
}
)
@api.depends("remote_ids", "remote_ids.git_project_id")
def _compute_git_project_ids(self):
"""Compute projects this repository is used in."""
for repo in self:
repo.git_project_ids = repo.remote_ids.git_project_id
@api.depends("remote_ids")
def _compute_remote_count(self):
"""Compute remote count field."""
for repo in self:
repo.remote_count = len(repo.remote_ids)
@api.depends("git_project_ids")
def _compute_git_project_count(self):
"""Compute project count field."""
for repo in self:
repo.git_project_count = len(repo.git_project_ids)
@api.depends("repo", "host", "owner_id")
def _compute_url(self):
"""Compute URL from repository properties."""
for repo in self:
if repo.repo and repo.host and repo.owner_id:
https_url = f"https://{repo.host}/{repo.owner_id.name}/{repo.repo}.git"
elif repo.repo and repo.host:
https_url = f"https://{repo.host}/{repo.repo}.git"
else:
https_url = ""
if https_url:
try:
parsed_urls = giturlparse.parse(https_url).urls
urls = {
"url": https_url,
"url_ssh": parsed_urls["ssh"],
"url_git": parsed_urls["git"],
}
except Exception as e: # noqa: F841 catch all errors
_logger.error(
"Failed to parse constructed URL '%s' for repo %s",
https_url,
repo.display_name,
)
urls = {
"url": "",
"url_ssh": "",
"url_git": "",
}
else:
urls = {
"url": "",
"url_ssh": "",
"url_git": "",
}
repo.update(urls)
def _inverse_url(self):
"""Parse URL to update repository properties."""
for repo in self:
if not repo.url:
continue
# Parse URL
parsed_url_dict = self._parse_url(repo.url)
# Update repository properties
repo.update(parsed_url_dict)
def action_view_remotes(self):
"""Open remotes list view."""
self.ensure_one()
action = self.env["ir.actions.actions"]._for_xml_id(
"cetmix_tower_git.action_cx_tower_git_remote"
)
action.update(
{
"domain": [("repo_id", "=", self.id)],
"context": {"default_repo_id": self.id},
}
)
return action
def action_view_projects(self):
"""Open projects list view."""
self.ensure_one()
action = self.env["ir.actions.actions"]._for_xml_id(
"cetmix_tower_git.cx_tower_git_project_action"
)
action.update(
{
"domain": [("repo_ids", "in", self.id)],
"context": {"default_repo_ids": [(4, self.id)]},
}
)
return action
@api.model_create_multi
def create(self, vals_list):
"""Create multiple repositories."""
# Check if any of the repositories already exist
# This is needed to allow creating repositories using just an URL.
# Eg when importing repositories from a YAML file.
res = self.browse()
existing_repo_ids = []
vals_list_to_create = []
for vals in vals_list:
url = vals.get("url")
if url:
# Try to get repository by URL
repo_id = self._get_repo_id_by_url(
url=url, create=False, raise_if_invalid=False
)
if repo_id:
existing_repo_ids.append(repo_id)
continue
# Parse URL and update vals
parsed_url_dict = self._parse_url(url=url, raise_if_invalid=True)
vals.update(parsed_url_dict)
# Add to create list (with or without URL)
vals_list_to_create.append(vals)
# Compose the result
if vals_list_to_create:
res |= super().create(vals_list_to_create)
if existing_repo_ids:
res |= self.browse(existing_repo_ids)
self.env.registry.clear_cache()
return res
def write(self, vals):
"""Write repositories."""
res = super().write(vals)
self.env.registry.clear_cache()
return res
def unlink(self):
"""Unlink repositories."""
res = super().unlink()
self.env.registry.clear_cache()
return res
@api.model
def name_create(self, name):
"""
Create a new repository from a URL.
"""
repo_id = self._get_repo_id_by_url(url=name, create=True, raise_if_invalid=True)
repo = self.browse(repo_id)
return repo_id, repo.display_name
@ormcache("self.env.uid", "self.env.su", "url", "create", "raise_if_invalid")
def _get_repo_id_by_url(self, url, create=False, raise_if_invalid=False):
"""Get repository id by URL.
Args:
url (Char): URL to get repository id
create (Bool, optional): Create repository if not found.
Default is False.
raise_if_invalid (Bool, optional): Raise ValidationError
if the URL is not valid. Default is False.
Returns:
int: Repository ID
or False if the URL is not valid and raise_if_invalid is False
Raises:
ValidationError: If the URL is not valid and raise_if_invalid is True
"""
# Parse URL
parsed_url_dict = self._parse_url(url, raise_if_invalid=raise_if_invalid)
if not parsed_url_dict:
return False
# Check if repository already exists and use it
repo = self.search(
[
("repo", "=", parsed_url_dict["repo"]),
("host", "=", parsed_url_dict["host"]),
("owner_id", "=", parsed_url_dict["owner_id"]),
],
limit=1,
)
# Otherwise, create a new one
if not repo and create:
repo = self.create(parsed_url_dict)
return repo.id if repo else False
def _parse_url(self, url, raise_if_invalid=True):
"""Parse URL to get name, host and owner.
Args:
url (Char): URL to parse
Raises:
ValidationError: If the URL is not valid
Returns:
Dict: Dictionary with name, host and owner
or empty dict if the URL is not valid and raise_if_invalid is False
"""
# Validate URL
if not giturlparse.validate(url):
if raise_if_invalid:
raise ValidationError(_("Not a valid repository URL!"))
return {}
# Parse URL
parsed_url = giturlparse.parse(url)
# Get or create owner
owner_id = self.env["cx.tower.git.repo.owner"]._get_owner_id_by_name(
name=parsed_url.owner,
create=True,
)
# Get provider based on host
provider = self._get_provider(parsed_url)
return {
"repo": parsed_url.repo,
"host": parsed_url.host,
"owner_id": owner_id,
"provider": provider,
}
def _get_provider(self, parsed_url):
"""Get provider.
Args:
parsed_url (GitUrlParsed): Parsed URL object
Returns:
str: Provider name
"""
provider = "other"
if parsed_url.assembla:
provider = "assembla"
elif parsed_url.bitbucket or "bitbucket" in parsed_url.host:
provider = "bitbucket"
elif parsed_url.gitlab:
provider = "gitlab"
elif parsed_url.github:
provider = "github"
return provider
# ------------------------------
# YAML mixin methods
# ------------------------------
def _get_fields_for_yaml(self):
res = super()._get_fields_for_yaml()
res += [
"url",
"is_private",
"secret_id",
]
return res

View File

@@ -1,107 +0,0 @@
# Copyright (C) 2024 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
from odoo.tools import ormcache
class CxTowerGitRepoOwner(models.Model):
"""
Git Repository Owner.
Represents an organization or user that owns repositories.
Examples: "cetmix", "OCA", etc.
"""
_name = "cx.tower.git.repo.owner"
_inherit = ["cx.tower.reference.mixin", "cx.tower.yaml.mixin"]
_description = "Cetmix Tower Git Repository Owner"
_order = "name"
display_name = fields.Char(
readonly=False, compute="_compute_display_name", store=True
)
name = fields.Char(
help="Name of the repository owner (e.g., 'cetmix', 'OCA')",
)
reference = fields.Char(
index=True,
compute="_compute_display_name",
required=False,
store=True,
)
repo_ids = fields.One2many(
comodel_name="cx.tower.git.repo",
inverse_name="owner_id",
string="Repositories",
copy=False,
help="Repositories owned by this organization/user",
)
secret_id = fields.Many2one(
comodel_name="cx.tower.key",
string="Secret",
domain="[('key_type', '=', 's')]",
help="Custom secret used for this repository owner",
)
@api.depends("name")
def _compute_display_name(self):
"""Compute display name."""
for owner in self:
# By default, display name is the same as name
name = owner.name
owner.update(
{
"display_name": name or False,
"reference": owner._generate_or_fix_reference(name)
if name
else False,
}
)
@ormcache("self.env.uid", "self.env.su", "name", "create")
def _get_owner_id_by_name(self, name, create=False):
"""Get owner id by name.
Args:
name (str): Owner name
create (bool): Create owner if not found
Returns:
int: Owner ID or None if not found
"""
owner = self.search([("name", "=ilike", name)], limit=1) if name else None
if not owner and create and name:
owner = self.create({"name": name})
return owner.id if owner else None
@api.model_create_multi
def create(self, vals_list):
"""Clear cache on create."""
res = super().create(vals_list)
self.env.registry.clear_cache()
return res
def write(self, vals):
"""Clear cache on write."""
res = super().write(vals)
if "name" in vals:
self.env.registry.clear_cache()
return res
def unlink(self):
"""Clear cache on unlink."""
res = super().unlink()
self.env.registry.clear_cache()
return res
# ------------------------------
# YAML mixin methods
# ------------------------------
def _get_fields_for_yaml(self):
res = super()._get_fields_for_yaml()
res += [
"display_name",
"name",
"secret_id",
]
return res

View File

@@ -1,195 +0,0 @@
# Copyright (C) 2024 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import api, fields, models
class CxTowerGitSource(models.Model):
"""
Git Source.
Implements single git source.
Each source can include multiple remotes which can be
branches or pull requests of different repositories.
"""
_name = "cx.tower.git.source"
_description = "Cetmix Tower Git Source"
_inherit = [
"cx.tower.reference.mixin",
"cx.tower.yaml.mixin",
]
_order = "sequence, name"
active = fields.Boolean(related="git_project_id.active", store=True, readonly=True)
enabled = fields.Boolean(
default=True, help="Enable in configuration and exported to files"
)
name = fields.Char(required=False)
sequence = fields.Integer(default=10)
git_project_id = fields.Many2one(
comodel_name="cx.tower.git.project",
string="Git Configuration",
required=True,
ondelete="cascade",
auto_join=True,
)
remote_ids = fields.One2many(
comodel_name="cx.tower.git.remote",
inverse_name="source_id",
auto_join=True,
copy=True,
)
remote_count = fields.Integer(
compute="_compute_remote_count",
string="Remotes",
)
remote_count_private = fields.Integer(
compute="_compute_remote_count",
string="Private Remotes",
)
@api.depends("remote_ids", "remote_ids.enabled", "remote_ids.is_private")
def _compute_remote_count(self):
for record in self:
remote_count = private_remote_count = 0
for remote in record.remote_ids:
if not remote.enabled:
continue
if remote.is_private:
private_remote_count += 1
remote_count += 1
record.update(
{
"remote_count": remote_count,
"remote_count_private": private_remote_count,
}
)
@api.model_create_multi
def create(self, vals_list):
res = super().create(vals_list)
# Update name
no_name = res.filtered(lambda s: not s.name)
if no_name:
no_name._compose_name()
# Update related files and templates on create
res._update_related_files_and_templates()
return res
def write(self, vals):
res = super().write(vals)
# Compose name
if "name" in vals and not vals.get("name"):
self._compose_name()
# Update related files and templates on update
self._update_related_files_and_templates()
return res
def unlink(self):
"""
Override to update related files and templates on unlink
"""
projects = self.git_project_id
res = super().unlink()
# Update related files and templates on unlink
if projects:
file_relations = projects.git_project_rel_ids # type: ignore
if file_relations:
file_relations._save_to_file()
template_relations = projects.git_project_file_template_rel_ids # type: ignore
if template_relations:
template_relations._save_to_file_template()
return res
def _compose_name(self):
"""Compose name if not provided explicitly"""
for source in self:
if source.name:
continue
remote = fields.first(source.remote_ids)
if not remote:
source.name = "Empty Source"
continue
remote_repo = remote.repo_id
if not remote_repo or not remote_repo.owner_id:
source.name = "Empty Source"
continue
source.name = f"{remote_repo.owner_id.name}/{remote_repo.repo}"
def _update_related_files_and_templates(self):
# Update related files and templates on update
related_files = self.mapped("git_project_id").mapped("git_project_rel_ids")
if related_files:
related_files._save_to_file()
related_templates = self.mapped("git_project_id").mapped(
"git_project_file_template_rel_ids"
)
if related_templates:
related_templates._save_to_file_template()
# ------------------------------
# Reference mixin methods
# ------------------------------
def _get_pre_populated_model_data(self):
res = super()._get_pre_populated_model_data()
res.update({"cx.tower.git.source": ["cx.tower.git.project", "git_project_id"]})
return res
# ------------------------------
# YAML mixin methods
# ------------------------------
def _get_fields_for_yaml(self):
res = super()._get_fields_for_yaml()
res += [
"name",
"enabled",
"sequence",
"remote_ids",
]
return res
# ------------------------------
# Git Aggregator related methods
# ------------------------------
def _git_aggregator_prepare_record(self):
"""Prepare json structure for git aggregator.
Returns:
Dict: Json structure for git aggregator
"""
self.ensure_one()
# Prepare remotes, merges and target
remotes = {}
merges = []
target = None
for remote in self.remote_ids:
if remote.enabled:
remotes.update({remote.name: remote._git_aggregator_prepare_url()})
merges.append(
{
"remote": remote.name,
"ref": remote._git_aggregator_prepare_head(),
}
)
# Set target to first remote name
if not target:
target = remote.name
# If no remotes, return empty dict
if not remotes:
return {}
vals = {
"remotes": remotes,
"merges": merges,
"target": target,
}
# Fetch only first commit if there is only one remote
if len(remotes) == 1:
vals.update({"defaults": {"depth": 1}})
return vals

View File

@@ -1,32 +0,0 @@
# Copyright (C) 2025 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class CxTowerPlanLine(models.Model):
"""Flight Plan Line"""
_inherit = "cx.tower.plan.line"
git_project_id = fields.Many2one(
comodel_name="cx.tower.git.project",
string="Git Project",
help="Select a git project to be linked to the file and server.",
)
is_make_copy = fields.Boolean(
string="Make a Copy",
help="Create a copy of the Git Project instead of linking "
"the file to the existing one.",
)
# ------------------------------
# YAML mixin methods
# ------------------------------
def _get_fields_for_yaml(self):
res = super()._get_fields_for_yaml()
res += [
"git_project_id",
"is_make_copy",
]
return res

View File

@@ -1,187 +0,0 @@
# Copyright (C) 2024 Cetmix OÜ
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
import logging
from odoo import api, fields, models
_logger = logging.getLogger(__name__)
class CxTowerServer(models.Model):
_inherit = "cx.tower.server"
git_project_rel_ids = fields.One2many(
comodel_name="cx.tower.git.project.rel",
inverse_name="server_id",
copy=False,
depends=["git_project_ids"],
groups="cetmix_tower_server.group_manager,cetmix_tower_server.group_root",
)
# Helper field to get all git projects related to server
# IMPORTANT: This field may contain duplicates because of the relation nature!
git_project_ids = fields.Many2many(
comodel_name="cx.tower.git.project",
relation="cx_tower_git_project_rel",
column1="server_id",
column2="git_project_id",
readonly=True,
copy=False,
depends=["git_project_rel_ids"],
groups="cetmix_tower_server.group_manager,cetmix_tower_server.group_root",
)
# ------------------------------
# YAML mixin methods
# ------------------------------
def _get_fields_for_yaml(self):
res = super()._get_fields_for_yaml()
res += [
"git_project_rel_ids",
]
return res
def _get_force_x2m_resolve_models(self):
res = super()._get_force_x2m_resolve_models()
# Add File in order to always try to use existing one
res += ["cx.tower.file"]
return res
def _update_or_create_related_record(
self, model, reference, values, create_immediately=False
):
# Files must be created immediately because they are related
# to both server and git project.
# So if a file is not created immediately when it is created
# for the server, the same file will be created for the git project.
# This will lead to creation of two files with the same content
# for the same server.
if model._name == "cx.tower.file":
create_immediately = True
return super()._update_or_create_related_record(
model, reference, values, create_immediately=create_immediately
)
@api.model
def get_servers_by_git_ref(self, repository_url, head=None, head_type=None):
"""
Return servers linked to a given Git repository reference.
Parameters
----------
repository_url : str
Pre-normalized canonical Git URL
(e.g. ``https://host/owner/repo.git``).
head : str, optional
Branch name, commit SHA, or PR identifier.
head_type : {'branch', 'commit', 'pr'}, optional
Type of the ``head`` argument.
If only ``head`` is provided, it will match across all head types.
If only ``head_type`` is provided, it will filter by type regardless of head
Returns
-------
recordset of cx.tower.server
Matching servers. Empty recordset if no matches.
"""
server_obj = self.env["cx.tower.server"]
# URL MUST be already canonical.
if not repository_url:
return server_obj
# Get repository id by URL
repo_id = self.env["cx.tower.git.repo"]._get_repo_id_by_url(
repository_url, raise_if_invalid=False
)
if not repo_id:
return server_obj
repo = self.env["cx.tower.git.repo"].browse(repo_id)
# Compose domain for remotes
remote_domain = [
("source_id.enabled", "=", True),
("enabled", "=", True),
]
if head:
head = self.env["cx.tower.git.remote"]._sanitize_head(head)
remote_domain.append(("head", "=", head))
if head_type:
remote_domain.append(("head_type", "=", head_type))
# Get remotes
remotes = repo.remote_ids.filtered_domain(remote_domain)
if not remotes:
return server_obj
# Get servers from remotes
servers = remotes.mapped("git_project_id.git_project_rel_ids.server_id")
return servers
def _command_runner_file_using_template_create_file(
self,
log_record,
server_dir,
**kwargs,
):
"""Override to create git project relation
when creating a file using a template.
"""
file = super()._command_runner_file_using_template_create_file(
log_record, server_dir, **kwargs
)
if file:
# Get the flight plan line from log record
plan_line = log_record.plan_log_id.plan_line_executed_id
# Try to get git project from custom values
custom_values = log_record.variable_values
git_project_reference = custom_values and custom_values.get(
"__git_project__"
)
if git_project_reference:
git_project = self.env["cx.tower.git.project"].get_by_reference(
git_project_reference
)
if not git_project:
_logger.warning(
"Git project '%s' provided with the `__git_project__` "
"custom value not found for server '%s' "
"in flight plan line '%s' "
"of the flight plan '%s'. "
"No project was linked to the file '%s'.",
git_project_reference,
self.name,
plan_line.name,
log_record.plan_log_id.plan_id.name,
file.name,
)
# Try to get git project set explicitly in the flight plan line
else:
git_project = plan_line.git_project_id
if not git_project:
return file
if plan_line.is_make_copy:
# Remove default_server_ids from context, because this relation
# will be created through git_project_rel_ids.
# default_server_ids will interfere at the moment when
# pairs of values are created through SQL query
# in the method write_real and it does not take into account
# that in this case we are creating a copy of the git project
git_project = git_project.with_context(default_server_ids=False).copy(
{"name": git_project._compose_copy_name(server=self)}
)
self.env["cx.tower.git.project.rel"].create(
{
"git_project_id": git_project.id,
"server_id": self.id,
"file_id": file.id,
"project_format": git_project._default_project_format(),
}
)
return file

View File

@@ -1,3 +0,0 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@@ -1 +0,0 @@
Please refer to the [official documentation](https://cetmix.com/tower) for detailed configuration instructions.

View File

@@ -1,3 +0,0 @@
This module implements Git Management functionality for [Cetmix Tower](https://cetmix.com/tower).
Please refer to the [official documentation](https://cetmix.com/tower) for detailed information.

View File

@@ -1,10 +0,0 @@
## 18.0.1.0.2 (2026-03-10)
- Features: Provide git project name using the `__git_project__` custom value when creating a project in flight plan. Improve the UI and UX of Git Projects. (5197)
- Bugfixes: Link server to git project only once. (5214)
## 18.0.1.0.1 (2025-12-17)
- Features: Improve search views, implement the search panel for selected views. (5139)

View File

@@ -1 +0,0 @@
Please refer to the [official documentation](https://cetmix.com/tower) for detailed usage instructions.

View File

@@ -1,46 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Manager Read Rule -->
<record id="rule_git_project_file_template_rel_manager_read" model="ir.rule">
<field
name="name"
>Git Project File Template Relation: Manager Read Access</field>
<field name="model_id" ref="model_cx_tower_git_project_file_template_rel" />
<field name="domain_force">['&amp;',
'|',
('git_project_id.user_ids', 'in', [user.id]),
('git_project_id.manager_ids', 'in', [user.id]),
'|',
('file_template_id.user_ids', 'in', [user.id]),
('file_template_id.manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="1" />
<field name="perm_write" eval="0" />
<field name="perm_create" eval="0" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Manager Write/Create/Delete Rule -->
<record id="rule_git_project_file_template_rel_manager_write" model="ir.rule">
<field
name="name"
>Git Project File Template Relation: Manager Write Access</field>
<field name="model_id" ref="model_cx_tower_git_project_file_template_rel" />
<field name="domain_force">[
('git_project_id.manager_ids', 'in', [user.id]),
('file_template_id.manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="0" />
<field name="perm_write" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_unlink" eval="1" />
</record>
<!-- Root Access Rule -->
<record id="rule_git_project_file_template_rel_root" model="ir.rule">
<field name="name">Git Project File Template Relation: Root Full Access</field>
<field name="model_id" ref="model_cx_tower_git_project_file_template_rel" />
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_root'))]" />
</record>
</odoo>

View File

@@ -1,43 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Manager Read Rule -->
<record id="rule_git_project_rel_manager_read" model="ir.rule">
<field name="name">Git Project Relation: Manager Read Access</field>
<field name="model_id" ref="model_cx_tower_git_project_rel" />
<field name="domain_force">['&amp;',
'|',
('git_project_id.user_ids', 'in', [user.id]),
('git_project_id.manager_ids', 'in', [user.id]),
'|',
('server_id.user_ids', 'in', [user.id]),
('server_id.manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="1" />
<field name="perm_write" eval="0" />
<field name="perm_create" eval="0" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Manager Write/Create/Delete Rule -->
<record id="rule_git_project_rel_manager_create_write_unlink" model="ir.rule">
<field
name="name"
>Git Project Relation: Manager Create/Write/Delete Access</field>
<field name="model_id" ref="model_cx_tower_git_project_rel" />
<field name="domain_force">[('git_project_id.manager_ids', 'in', [user.id]),
('server_id.manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="0" />
<field name="perm_write" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_unlink" eval="1" />
</record>
<!-- Root Access Rule -->
<record id="rule_git_project_rel_root" model="ir.rule">
<field name="name">Git Project Relation: Root Full Access</field>
<field name="model_id" ref="model_cx_tower_git_project_rel" />
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_root'))]" />
</record>
</odoo>

View File

@@ -1,64 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Manager Read Rule -->
<record id="rule_git_project_manager_read" model="ir.rule">
<field name="name">Git Project: Manager Read Access</field>
<field name="model_id" ref="model_cx_tower_git_project" />
<field
name="domain_force"
>['|', ('user_ids', 'in', [user.id]), ('manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="1" />
<field name="perm_write" eval="0" />
<field name="perm_create" eval="0" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Additional Manager Read Rule with Server Access -->
<record id="rule_git_project_manager_read_server" model="ir.rule">
<field name="name">Git Project: Manager Read Access via Server</field>
<field name="model_id" ref="model_cx_tower_git_project" />
<field name="domain_force">['|',
('git_project_rel_ids.server_id.user_ids', 'in', [user.id]),
('git_project_rel_ids.server_id.manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="1" />
<field name="perm_write" eval="0" />
<field name="perm_create" eval="0" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Manager Write/Create Rule -->
<record id="rule_git_project_manager_write" model="ir.rule">
<field name="name">Git Project: Manager Write Access</field>
<field name="model_id" ref="model_cx_tower_git_project" />
<field name="domain_force">[('manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="0" />
<field name="perm_write" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Manager Delete Rule -->
<record id="rule_git_project_manager_unlink" model="ir.rule">
<field name="name">Git Project: Manager Delete Access</field>
<field name="model_id" ref="model_cx_tower_git_project" />
<field
name="domain_force"
>[('manager_ids', 'in', [user.id]), ('create_uid', '=', user.id)]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="0" />
<field name="perm_write" eval="0" />
<field name="perm_create" eval="0" />
<field name="perm_unlink" eval="1" />
</record>
<!-- Root Access Rule -->
<record id="rule_git_project_root" model="ir.rule">
<field name="name">Git Project: Root Full Access</field>
<field name="model_id" ref="model_cx_tower_git_project" />
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_root'))]" />
</record>
</odoo>

View File

@@ -1,70 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Manager Read Rule -->
<record id="rule_git_remote_manager_read" model="ir.rule">
<field name="name">Git Remote: Manager Read Access</field>
<field name="model_id" ref="model_cx_tower_git_remote" />
<field
name="domain_force"
>['|', ('git_project_id.user_ids', 'in', [user.id]), ('git_project_id.manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="1" />
<field name="perm_write" eval="0" />
<field name="perm_create" eval="0" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Additional Manager Read Rule with Server Access -->
<record id="rule_git_remote_manager_read_server" model="ir.rule">
<field name="name">Git Remote: Manager Read Access via Server</field>
<field name="model_id" ref="model_cx_tower_git_remote" />
<field name="domain_force">['|',
('git_project_id.git_project_rel_ids.server_id.user_ids', 'in', [user.id]),
('git_project_id.git_project_rel_ids.server_id.manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="1" />
<field name="perm_write" eval="0" />
<field name="perm_create" eval="0" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Manager Write/Create Rule -->
<record id="rule_git_remote_manager_write" model="ir.rule">
<field name="name">Git Remote: Manager Write/Create Access</field>
<field name="model_id" ref="model_cx_tower_git_remote" />
<field
name="domain_force"
>[('git_project_id.manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="0" />
<field name="perm_write" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Manager Delete Rule -->
<record id="rule_git_remote_manager_unlink" model="ir.rule">
<field name="name">Git Remote: Manager Delete Access</field>
<field name="model_id" ref="model_cx_tower_git_remote" />
<field
name="domain_force"
>[('git_project_id.manager_ids', 'in', [user.id]), ('create_uid', '=', user.id)]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="0" />
<field name="perm_write" eval="0" />
<field name="perm_create" eval="0" />
<field name="perm_unlink" eval="1" />
</record>
<!-- Root Access Rule -->
<record id="rule_git_remote_root" model="ir.rule">
<field name="name">Git Remote: Root Full Access</field>
<field name="model_id" ref="model_cx_tower_git_remote" />
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_root'))]" />
<field name="perm_read" eval="1" />
<field name="perm_write" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_unlink" eval="1" />
</record>
</odoo>

View File

@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Manager Read Rule - View All Records - nothing to add as this is default -->
<!-- Manager Write/Create Rule -->
<record id="rule_git_repo_owner_manager_write" model="ir.rule">
<field name="name">Git Repository Owner: Manager Write/Create Access</field>
<field name="model_id" ref="model_cx_tower_git_repo_owner" />
<field name="domain_force">[('create_uid', '=', user.id)]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="0" />
<field name="perm_write" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Root Access Rule -->
<record id="rule_git_repo_owner_root" model="ir.rule">
<field name="name">Git Repository Owner: Root Full Access</field>
<field name="model_id" ref="model_cx_tower_git_repo_owner" />
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_root'))]" />
</record>
</odoo>

View File

@@ -1,24 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Manager Read Rule - View All Records - nothing to add as this is default -->
<!-- Manager Write/Create Rule -->
<record id="rule_git_repo_manager_write" model="ir.rule">
<field name="name">Git Repository: Manager Write/Create Access</field>
<field name="model_id" ref="model_cx_tower_git_repo" />
<field name="domain_force">[('create_uid', '=', user.id)]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="0" />
<field name="perm_write" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Root Access Rule -->
<record id="rule_git_repo_root" model="ir.rule">
<field name="name">Git Repository: Root Full Access</field>
<field name="model_id" ref="model_cx_tower_git_repo" />
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_root'))]" />
</record>
</odoo>

View File

@@ -1,72 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<!-- Git Source Record Rules -->
<!-- Manager Read Rule -->
<record id="rule_git_source_manager_read" model="ir.rule">
<field name="name">Git Source: Manager Read Access</field>
<field name="model_id" ref="model_cx_tower_git_source" />
<field
name="domain_force"
>['|', ('git_project_id.user_ids', 'in', [user.id]), ('git_project_id.manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="1" />
<field name="perm_write" eval="0" />
<field name="perm_create" eval="0" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Additional Manager Read Rule with Server Access -->
<record id="rule_git_source_manager_read_server" model="ir.rule">
<field name="name">Git Source: Manager Read Access via Server</field>
<field name="model_id" ref="model_cx_tower_git_source" />
<field name="domain_force">['|',
('git_project_id.git_project_rel_ids.server_id.user_ids', 'in', [user.id]),
('git_project_id.git_project_rel_ids.server_id.manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="1" />
<field name="perm_write" eval="0" />
<field name="perm_create" eval="0" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Manager Write/Create Rule -->
<record id="rule_git_source_manager_write" model="ir.rule">
<field name="name">Git Source: Manager Write/Create Access</field>
<field name="model_id" ref="model_cx_tower_git_source" />
<field
name="domain_force"
>[('git_project_id.manager_ids', 'in', [user.id])]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="0" />
<field name="perm_write" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_unlink" eval="0" />
</record>
<!-- Manager Delete Rule -->
<record id="rule_git_source_manager_unlink" model="ir.rule">
<field name="name">Git Source: Manager Delete Access</field>
<field name="model_id" ref="model_cx_tower_git_source" />
<field
name="domain_force"
>[('git_project_id.manager_ids', 'in', [user.id]), ('create_uid', '=', user.id)]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_manager'))]" />
<field name="perm_read" eval="0" />
<field name="perm_write" eval="0" />
<field name="perm_create" eval="0" />
<field name="perm_unlink" eval="1" />
</record>
<!-- Root Access Rule -->
<record id="rule_git_source_root" model="ir.rule">
<field name="name">Git Source: Root Full Access</field>
<field name="model_id" ref="model_cx_tower_git_source" />
<field name="domain_force">[(1, '=', 1)]</field>
<field name="groups" eval="[(4, ref('cetmix_tower_server.group_root'))]" />
<field name="perm_read" eval="1" />
<field name="perm_write" eval="1" />
<field name="perm_create" eval="1" />
<field name="perm_unlink" eval="1" />
</record>
</odoo>

View File

@@ -1,15 +0,0 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_git_config_manager,Git Config Manager,model_cx_tower_git_project,cetmix_tower_server.group_manager,1,1,1,1
access_git_config_root,Git Config Root,model_cx_tower_git_project,cetmix_tower_server.group_root,1,1,1,1
access_git_source_manager,Git Source Manager,model_cx_tower_git_source,cetmix_tower_server.group_manager,1,1,1,1
access_git_source_root,Git Source Root,model_cx_tower_git_source,cetmix_tower_server.group_root,1,1,1,1
access_git_remote_manager,Git Remote Manager,model_cx_tower_git_remote,cetmix_tower_server.group_manager,1,1,1,1
access_git_remote_root,Git Remote Root,model_cx_tower_git_remote,cetmix_tower_server.group_root,1,1,1,1
access_git_repo_manager,Git Repository Manager,model_cx_tower_git_repo,cetmix_tower_server.group_manager,1,1,1,1
access_git_repo_root,Git Repository Root,model_cx_tower_git_repo,cetmix_tower_server.group_root,1,1,1,1
access_git_repo_owner_manager,Git Repository Owner Manager,model_cx_tower_git_repo_owner,cetmix_tower_server.group_manager,1,1,1,0
access_git_repo_owner_root,Git Repository Owner Root,model_cx_tower_git_repo_owner,cetmix_tower_server.group_root,1,1,1,1
access_git_project_server_file_rel,Git Project Server File Rel Manager,model_cx_tower_git_project_rel,cetmix_tower_server.group_manager,1,1,1,1
access_git_project_server_file_rel_root,Git Project Server File Rel Root,model_cx_tower_git_project_rel,cetmix_tower_server.group_root,1,1,1,1
access_git_project_file_template_rel,Git Project File Template Rel Manager,model_cx_tower_git_project_file_template_rel,cetmix_tower_server.group_manager,1,1,1,1
access_git_project_file_template_rel_root,Git Project File Template Rel Root,model_cx_tower_git_project_file_template_rel,cetmix_tower_server.group_root,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_git_config_manager Git Config Manager model_cx_tower_git_project cetmix_tower_server.group_manager 1 1 1 1
3 access_git_config_root Git Config Root model_cx_tower_git_project cetmix_tower_server.group_root 1 1 1 1
4 access_git_source_manager Git Source Manager model_cx_tower_git_source cetmix_tower_server.group_manager 1 1 1 1
5 access_git_source_root Git Source Root model_cx_tower_git_source cetmix_tower_server.group_root 1 1 1 1
6 access_git_remote_manager Git Remote Manager model_cx_tower_git_remote cetmix_tower_server.group_manager 1 1 1 1
7 access_git_remote_root Git Remote Root model_cx_tower_git_remote cetmix_tower_server.group_root 1 1 1 1
8 access_git_repo_manager Git Repository Manager model_cx_tower_git_repo cetmix_tower_server.group_manager 1 1 1 1
9 access_git_repo_root Git Repository Root model_cx_tower_git_repo cetmix_tower_server.group_root 1 1 1 1
10 access_git_repo_owner_manager Git Repository Owner Manager model_cx_tower_git_repo_owner cetmix_tower_server.group_manager 1 1 1 0
11 access_git_repo_owner_root Git Repository Owner Root model_cx_tower_git_repo_owner cetmix_tower_server.group_root 1 1 1 1
12 access_git_project_server_file_rel Git Project Server File Rel Manager model_cx_tower_git_project_rel cetmix_tower_server.group_manager 1 1 1 1
13 access_git_project_server_file_rel_root Git Project Server File Rel Root model_cx_tower_git_project_rel cetmix_tower_server.group_root 1 1 1 1
14 access_git_project_file_template_rel Git Project File Template Rel Manager model_cx_tower_git_project_file_template_rel cetmix_tower_server.group_manager 1 1 1 1
15 access_git_project_file_template_rel_root Git Project File Template Rel Root model_cx_tower_git_project_file_template_rel cetmix_tower_server.group_root 1 1 1 1

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -1,450 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Cetmix Tower Git</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="cetmix-tower-git">
<h1 class="title">Cetmix Tower Git</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:2a3dd557b4ae104188b8e2912c02b135bcfe7cc6518f8633daa149ccb94850fe
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/cetmix/cetmix-tower/tree/18.0/cetmix_tower_git"><img alt="cetmix/cetmix-tower" src="https://img.shields.io/badge/github-cetmix%2Fcetmix--tower-lightgray.png?logo=github" /></a></p>
<p>This module implements Git Management functionality for <a class="reference external" href="https://cetmix.com/tower">Cetmix
Tower</a>.</p>
<p>Please refer to the <a class="reference external" href="https://cetmix.com/tower">official
documentation</a> for detailed information.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#changelog" id="toc-entry-3">Changelog</a><ul>
<li><a class="reference internal" href="#section-1" id="toc-entry-4">18.0.1.0.2 (2026-03-10)</a></li>
<li><a class="reference internal" href="#section-2" id="toc-entry-5">18.0.1.0.1 (2025-12-17)</a></li>
</ul>
</li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-6">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-7">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-8">Authors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-9">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<p>Please refer to the <a class="reference external" href="https://cetmix.com/tower">official
documentation</a> for detailed configuration
instructions.</p>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<p>Please refer to the <a class="reference external" href="https://cetmix.com/tower">official
documentation</a> for detailed usage
instructions.</p>
</div>
<div class="section" id="changelog">
<h1><a class="toc-backref" href="#toc-entry-3">Changelog</a></h1>
<div class="section" id="section-1">
<h2><a class="toc-backref" href="#toc-entry-4">18.0.1.0.2 (2026-03-10)</a></h2>
<ul class="simple">
<li>Features: Provide git project name using the <tt class="docutils literal">__git_project__</tt>
custom value when creating a project in flight plan. Improve the UI
and UX of Git Projects. (5197)</li>
<li>Bugfixes: Link server to git project only once. (5214)</li>
</ul>
</div>
<div class="section" id="section-2">
<h2><a class="toc-backref" href="#toc-entry-5">18.0.1.0.1 (2025-12-17)</a></h2>
<ul class="simple">
<li>Features: Improve search views, implement the search panel for
selected views. (5139)</li>
</ul>
</div>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-6">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/cetmix/cetmix-tower/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/cetmix/cetmix-tower/issues/new?body=module:%20cetmix_tower_git%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-7">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-8">Authors</a></h2>
<ul class="simple">
<li>Cetmix</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-9">Maintainers</a></h2>
<p>This module is part of the <a class="reference external" href="https://github.com/cetmix/cetmix-tower/tree/18.0/cetmix_tower_git">cetmix/cetmix-tower</a> project on GitHub.</p>
<p>You are welcome to contribute.</p>
</div>
</div>
</div>
</body>
</html>

Some files were not shown because too many files have changed in this diff Show More