459 Commits
v1.0.1 ... v2.2

Author SHA1 Message Date
Chuck
2526c6097e update docs 2025-08-12 10:23:22 -05:00
Chuck
1e0889fe84 cleanup 2025-08-11 18:24:23 -05:00
Chuck
ba0716d37e update readme 2025-08-11 18:20:23 -05:00
Chuck
b8d9eb65f6 clean up milb upcoming 2025-08-11 18:00:40 -05:00
Chuck
03f0a6e6e2 troubleshoot milb upcoming 2025-08-11 17:25:03 -05:00
Chuck
5971e4afa1 troubleshooting autostart for web ui v2 2025-08-11 16:28:04 -05:00
Chuck
dc840b63d8 trying to improve on demand display 2025-08-11 16:01:16 -05:00
Chuck
865b30c631 reduce log spam 2025-08-11 15:45:19 -05:00
Chuck
da17f214da improve stop on demand 2025-08-11 15:21:20 -05:00
Chuck
643397c939 added first_time_install script 2025-08-11 14:22:54 -05:00
Chuck
1704001ef6 ensure web ui actions work and web interface is starting without venv 2025-08-11 14:12:17 -05:00
Chuck
18d6758dbe web sudo script 2025-08-11 14:02:43 -05:00
Chuck
19f5b7e3bc remove venv from web v2 2025-08-11 11:35:43 -05:00
Chuck
28c81825cc remove venv from web v2 2025-08-11 11:27:03 -05:00
Chuck
151777fbd6 update requirements for web ui 2025-08-10 21:22:36 -05:00
Chuck
8a8e3c21cb update service to autostart web ui 2025-08-10 20:53:33 -05:00
Chuck
809cb07bb8 on demand displays 2025-08-10 20:46:41 -05:00
Chuck
edce5fae85 milb upcoming game debug logging 2025-08-10 18:26:25 -05:00
Chuck
10c1342bdb milb upcoming game debug logging 2025-08-10 17:38:56 -05:00
Chuck
ede82406fa set web ui v2 to be default 2025-08-10 17:18:59 -05:00
Chuck
6ff8d8b5af display preview error handling 2025-08-10 16:27:49 -05:00
Chuck
bd7d136504 bdf double baseline issue 2025-08-10 16:20:21 -05:00
Chuck
f8ebcffa08 add api counter 2025-08-10 16:17:51 -05:00
Chuck
eed64334e3 improvements 2025-08-10 16:02:56 -05:00
Chuck
2bee99f9cc added shutdown to actions tab, enabled some more displays, changed baseball to non-priority 2025-08-10 15:45:06 -05:00
Chuck
35dcf76689 web preview display improvements 2025-08-10 15:33:51 -05:00
Chuck
1f7285cfc4 web preview fixes 2025-08-10 13:33:51 -05:00
Chuck
4f1736fb0f web action simplification 2025-08-10 13:17:53 -05:00
Chuck
0229567156 web action permission changes 2025-08-10 12:59:07 -05:00
Chuck
87daddbeb2 web action permission changes 2025-08-10 12:52:27 -05:00
Chuck
c284b9c26c web v2 command updates 2025-08-10 12:37:41 -05:00
Chuck
95e3e4dda4 live preview updates to formatting 2025-08-10 12:31:12 -05:00
Chuck
d95e6539e3 live preview troubleshooting 2025-08-10 12:14:53 -05:00
Chuck
a49feb2971 change web ui v2 server side loading 2025-08-10 12:02:33 -05:00
Chuck
8b7ae3beed web ui v2 improvements 2025-08-10 11:43:28 -05:00
Chuck
0a0fbbbdbb remove extra spacing on score 2025-08-10 11:07:00 -05:00
Chuck
ca44097669 update ncaa FB and NFL recent games to look more like other displays 2025-08-10 11:05:03 -05:00
Chuck
c0c77f6762 show fav teams only nfl 2025-08-09 22:39:16 -05:00
Chuck
b7ba899df7 adjust ball & strike count in mlb display 2025-08-09 22:38:40 -05:00
Chuck
9b4bf36dbb test favorite teams false 2025-08-09 21:01:11 -05:00
Chuck
85d63243c7 AI bug squash sesh 2025-08-09 21:00:25 -05:00
Chuck
79cbc46f9b set soccer logging to info 2025-08-09 20:45:56 -05:00
Chuck
bd9fe652d9 only call update module for active displays 2025-08-09 20:44:31 -05:00
Chuck
dac7b34228 fix show_favorite_teams_only false logic 2025-08-09 20:36:37 -05:00
Chuck
8703c485bc live priority rotation fix 2025-08-09 20:31:47 -05:00
Chuck
29f36827ca adjust score spacing soccer 2025-08-09 20:21:35 -05:00
Chuck
6fdb2b55b5 improved sport switching on simultaneous displays 2025-08-09 20:17:54 -05:00
Chuck
6a2e5edf2e more robust half time detection 2025-08-09 20:06:25 -05:00
Chuck
938c31c815 adjust MLS half detection 2025-08-09 20:03:44 -05:00
Chuck
d0ead60421 adjust NFL quarter logic 2025-08-09 19:57:17 -05:00
Chuck
e0883eeae2 adjust NFL recent score spacing 2025-08-09 17:17:17 -05:00
Chuck
b0941641c7 added dynamic display durations to scrolling managers 2025-08-09 17:15:14 -05:00
Chuck
8654dd44e6 all sports managers process recent and upcoming games as a function of game count instead of time (hours). Ensure all sports managers respect favorite team filtering if enabled 2025-08-09 16:47:38 -05:00
Chuck
afb7e23fcc fix soccer timezone 2025-08-09 16:03:02 -05:00
Chuck
1ffe3e7c16 add favorite team filtering to soccer manager and ensure timezones are respected 2025-08-09 15:54:15 -05:00
Chuck
7c0934cd9b non-priority live game setting change 2025-08-09 15:38:57 -05:00
Chuck
e5eef1320d milb live game check extended to 5 minutes 2025-08-09 14:20:08 -05:00
Chuck
5ec9b3ea6f case insensitive soccer logos 2025-08-09 14:17:05 -05:00
Chuck
708e993f41 soccer game extraction improvement 2025-08-09 14:09:05 -05:00
Chuck
fd68777484 enable NFL recent 2025-08-09 14:00:44 -05:00
Chuck
d616dddac0 enable soccer 2025-08-09 14:00:01 -05:00
Chuck
7b31c4cca5 milb deduplication 2025-08-09 13:55:34 -05:00
Chuck
be94e9fb6b decision flag debug logging for when games are rejected MILB 2025-08-09 13:48:52 -05:00
Chuck
1b9981d74e try to handle incorrect api data from milb 2025-08-09 13:42:04 -05:00
Chuck
f1ad263849 got duplicate live feeds for milb 2025-08-09 13:38:23 -05:00
Chuck
d802adb048 updates to milb live descriptors 2025-08-09 13:32:22 -05:00
Chuck
71bb616b76 changes to fildering and processing of MILB live games 2025-08-09 13:26:18 -05:00
Chuck
3ba0ec2041 milb live logic change 2025-08-09 13:17:10 -05:00
Chuck
40576ac18d shorten live check for milbLive Manager 2025-08-09 13:09:48 -05:00
Chuck
e6fa83904b pull live games even if missing inning info 2025-08-09 13:05:49 -05:00
Chuck
a52696aae2 milb update interval 2025-08-09 12:46:12 -05:00
Chuck
e9ca9a0454 milb upcoming type error 2025-08-09 12:22:34 -05:00
Chuck
7d38bbb0fa display update improvements and less logging 2025-08-09 12:03:56 -05:00
Chuck
512ffb7639 live games respect update durations from config 2025-08-09 12:00:12 -05:00
Chuck
cc652472a0 improved game filtering milb 2025-08-09 11:47:20 -05:00
Chuck
4cc3b39ce6 cache manager revamp 2025-08-09 11:42:51 -05:00
Chuck
fabb9bd611 cache key logic updates 2025-08-09 11:15:01 -05:00
Chuck
436bdbd8f2 milb debugging around strikes an dballs. 2025-08-09 11:10:19 -05:00
Chuck
d6ca83f090 disable soccer to focus on milb live 2025-08-09 11:05:27 -05:00
Chuck
96de2e7d0f milb debugging 2025-08-09 11:04:39 -05:00
Chuck
ec922fac2c manual cache management 2025-08-09 10:46:14 -05:00
Chuck
b4d5aef876 milb logging and manual cache clearing 2025-08-09 10:44:58 -05:00
Chuck
a672abba6a soccer logger update 2025-08-09 10:35:56 -05:00
Chuck
b193e03be9 milb_manager live display logic update and enable mls 2025-08-09 10:30:01 -05:00
Chuck
4088807c72 milb_manager cache test 2025-08-09 10:22:56 -05:00
Chuck
f02ed06e09 update milb gamedate filed 2025-08-02 20:16:10 -05:00
Chuck
ac69569d77 logging for why milb api isn't working and cache updates to odds cache storage 2025-08-02 20:02:52 -05:00
Chuck
13a2ef6e5e fix number of arguments called for config 2025-08-02 19:45:33 -05:00
Chuck
c490c5dca8 ensure displays share config file 2025-08-02 19:33:24 -05:00
Chuck
24204c581e milb config error 2025-08-02 17:49:19 -05:00
Chuck
881a46867d milb combined live game status mapping that was causing confusion 2025-08-02 17:41:37 -05:00
Chuck
3c665c21d1 milb turn off test mode.... 2025-08-02 17:31:35 -05:00
Chuck
f95138d1a4 milb diagnosis script with error fixes 2025-08-01 17:56:53 -05:00
Chuck
04009f78f7 milb diagnosis 2025-08-01 17:52:06 -05:00
Chuck
45f449d371 slow down scrolling 2025-07-31 22:52:37 -05:00
Chuck
d8e2de927a weather api error handling 2025-07-31 22:51:42 -05:00
Chuck
f67348b9b8 Scroll delay changes 2025-07-31 22:42:57 -05:00
Chuck
c92eaa93bd Merge cursor/modernize-and-enhance-led-matrix-web-interface-24d0 into development 2025-07-31 22:27:30 -05:00
Chuck
8411e4ff76 news manager font change 2025-07-31 22:12:47 -05:00
Chuck
b451d5def8 Respect live game display duration when no priority is given 2025-07-31 21:52:21 -05:00
Chuck
a6f8237069 adjust milb use of cache 2025-07-30 17:18:25 -05:00
Chuck
ceb6d5fdac set milb to priority 2025-07-30 16:49:37 -05:00
Chuck
41ed6b8a43 call managers differently 2025-07-30 16:37:05 -05:00
Chuck
06a51b5799 non-priority live game logic update 2025-07-30 16:11:48 -05:00
Chuck
5001e59ee3 non-priority live game error 2025-07-30 15:53:51 -05:00
Chuck
85747edff1 non-priority rotation fix 2025-07-30 15:15:06 -05:00
Chuck
fb4b950148 Merge branch 'cursor/modernize-and-enhance-led-matrix-web-interface-24d0' of https://github.com/ChuckBuilds/LEDMatrix into cursor/modernize-and-enhance-led-matrix-web-interface-24d0 2025-07-30 14:23:15 -05:00
Chuck
a2988557de better log messaging about what display going to and from 2025-07-30 14:22:17 -05:00
Chuck
f554e35686 Merge branch 'agent' into cursor/modernize-and-enhance-led-matrix-web-interface-24d0
Signed-off-by: Chuck <33324927+ChuckBuilds@users.noreply.github.com>
2025-07-30 13:14:36 -05:00
Chuck
dbcfbcd0f2 change espn logo 2025-07-30 12:33:32 -05:00
Chuck
27b52466ad fix scroll logic in news manager 2025-07-30 11:57:41 -05:00
Cursor Agent
20082cbadf Enhance LED Matrix web interface with comprehensive config and monitoring
Co-authored-by: charlesmynard <charlesmynard@gmail.com>
2025-07-28 03:08:55 +00:00
Chuck
4a7138205c fix error in web v2 2025-07-27 21:12:55 -05:00
Chuck
6ae4451c51 fix error in web v2 2025-07-27 21:10:27 -05:00
Chuck
7f17d8cd8f fix error in web v2 2025-07-27 21:07:17 -05:00
Chuck
0f6e3c9497 fix error in web v2 2025-07-27 21:00:49 -05:00
Chuck
88078111b4 venv requirements 2025-07-27 20:55:43 -05:00
Chuck
0601a9fda7 new strategy to draw news manager 2025-07-27 13:19:10 -05:00
Chuck
05d9f7c057 cant find why its not scrolling faster 2025-07-27 13:10:07 -05:00
Chuck
34903dd979 Scroll delay check 2025-07-27 13:03:57 -05:00
Chuck
3ba317c4e4 Add scroll control to news manager 2025-07-27 13:01:02 -05:00
Chuck
6bbb4f5de8 trying to make news scroll smoother 2025-07-27 12:56:17 -05:00
Chuck
4ab4d14a4e adjusting news manager scroll speed 2025-07-27 12:42:12 -05:00
Cursor Agent
d9e5b9404d Add modern web interface v2 for LED Matrix display control
Co-authored-by: charlesmynard <charlesmynard@gmail.com>
2025-07-27 15:32:48 +00:00
Chuck
e5d4f3c9f0 playing with scroll speed for news manager 2025-07-27 10:25:47 -05:00
Chuck
46ba9b4c4a added font logging to news manager 2025-07-27 10:20:23 -05:00
Chuck
9b6231915a change font 2025-07-27 10:19:30 -05:00
Chuck
6d8e7abff7 reduce dynamic duration logging 2025-07-27 10:14:55 -05:00
Chuck
932b263c5a news ticker scroll speed change 2025-07-27 10:10:45 -05:00
Chuck
aef8b3b6cc remove dynamic duration calculation from startup loop 2025-07-27 10:08:03 -05:00
Chuck
be50fb86d7 adjust display controller loop of news 2025-07-27 10:06:15 -05:00
Chuck
73d2248ccb fix news loop 2025-07-27 10:02:32 -05:00
Chuck
48937855d4 fix display_image error 2025-07-27 10:00:50 -05:00
Chuck
802e596f06 fix display width error for news_manager 2025-07-27 09:58:37 -05:00
Chuck
b6751a94c2 Sports news ticker with dynamic headline scrolling (#9)
* Add news manager with RSS feed ticker and dynamic scrolling

Co-authored-by: charlesmynard <charlesmynard@gmail.com>

* Add F1 feeds, custom feed management script, and comprehensive feed guide

Co-authored-by: charlesmynard <charlesmynard@gmail.com>

* Remove emoji and improve error/success message formatting

Co-authored-by: charlesmynard <charlesmynard@gmail.com>

* Add dynamic duration feature for news display with configurable timing

Co-authored-by: charlesmynard <charlesmynard@gmail.com>

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
2025-07-27 09:53:19 -05:00
Chuck
8b0c71dbdf new display logic for non-priority games 2025-07-26 20:42:56 -05:00
Chuck
2f7fa481a3 non-priority sports logic improvement 2025-07-26 19:34:41 -05:00
ChuckBuilds
ffc006bd99 change default config to just clock 2025-07-26 18:25:45 -05:00
ChuckBuilds
ea74d388b0 Update wiki submodule with latest documentation 2025-07-26 18:23:58 -05:00
Chuck
d4bd8d66e8 new bible verses for 5ymb01 2025-07-26 18:22:46 -05:00
ChuckBuilds
3a81e16490 wiki updates 2025-07-26 18:20:39 -05:00
Chuck
4ea2b9cc36 json fix bible verse 2025-07-25 22:17:51 -05:00
Chuck
407ebc56d7 add 3rd category to config 2025-07-25 21:52:37 -05:00
Chuck
f9e3419f39 test 3rd word of the day 2025-07-25 21:09:31 -05:00
ChuckBuilds
b03371d69a toggle visual adjustments 2025-07-24 20:59:58 -05:00
ChuckBuilds
58251eefb7 placement as % of matrix height 2025-07-24 20:49:40 -05:00
ChuckBuilds
74036ed6d9 placement as % of matrix height 2025-07-24 20:47:20 -05:00
ChuckBuilds
bfa1234feb updated hard coded y values for music title, artist, album 2025-07-24 20:44:50 -05:00
ChuckBuilds
6535ce113a updated hard coded y values for music title, artist, album 2025-07-24 20:14:46 -05:00
ChuckBuilds
dd8d219e73 updated hard coded y values for music title, artist, album 2025-07-24 20:13:04 -05:00
ChuckBuilds
1576e730ea hard coded y values for music title, artist, album 2025-07-24 20:10:57 -05:00
ChuckBuilds
7fc158c914 change artist postioning 2025-07-24 20:00:35 -05:00
ChuckBuilds
f9588f47d0 hard code line height 2025-07-24 19:51:17 -05:00
ChuckBuilds
2eaa158e80 adjust bdf offset 2025-07-24 19:31:01 -05:00
ChuckBuilds
3f05d9fcbc webui button changes 2025-07-24 19:29:25 -05:00
Chuck
3d2b155b79 change default user to be programatic to download git updates 2025-07-24 16:15:41 -05:00
Chuck
3df3b93348 added log viewer to web ui 2025-07-24 16:13:35 -05:00
Chuck
790b483298 remove hard coded bdf y offset 2025-07-24 16:09:00 -05:00
Chuck
d80c1a93db hardcoded line placements 2025-07-24 16:05:48 -05:00
Chuck
e8d2408477 font detection for music font placement 2025-07-24 15:59:24 -05:00
Chuck
fcc8c10c2b disable displays for debugging 2025-07-24 15:38:59 -05:00
Chuck
3063840b6d programmatic changes to artist and album font placement 2025-07-24 15:38:29 -05:00
Chuck
a3c5f9a74f programmatic changes to artist and album font 2025-07-24 15:33:58 -05:00
Chuck
e85bebee12 adjust music artist and album font programatically. Web ui now includes all settings 2025-07-24 15:04:17 -05:00
Chuck
30d416b822 web ui json editor improvements 2025-07-24 14:48:59 -05:00
Chuck
e1a32b1466 web ui save button improvements 2025-07-24 14:40:12 -05:00
Chuck
d02d7445cd web ui JSON linter added 2025-07-24 14:21:49 -05:00
Chuck
0785bcba93 web ui more options added 2025-07-24 14:05:42 -05:00
Chuck
9d01996ae6 webui rework 2025-07-24 13:31:24 -05:00
Chuck
8c705753df changing album position 2025-07-24 13:12:40 -05:00
Chuck
c7fc86e54d changing case for album scrolling 2025-07-24 13:06:42 -05:00
Chuck
9eb65ec891 swap displays for testing 2025-07-24 12:48:23 -05:00
Chuck
92891af6b6 music scroll album name 2025-07-24 12:44:14 -05:00
Chuck
c0d299892e live game duration 2025-07-24 12:32:38 -05:00
Chuck
9a63550a9b adjusting music manager artist and album location 2025-07-24 10:23:31 -05:00
Chuck
25506410d0 adjusting music manager artist and album location 2025-07-24 10:20:56 -05:00
Chuck
102c0eb795 adjusting music manager artist and album location 2025-07-24 10:19:08 -05:00
Chuck
4605cb5c39 adjusting music manager artist and album location 2025-07-24 10:17:16 -05:00
Chuck
f8bf76c150 adjusting music manager artist and album location 2025-07-24 10:15:39 -05:00
Chuck
977bd96241 adjusting music manager artist and album location 2025-07-24 10:13:32 -05:00
Chuck
5224c09faf adjusting music manager artist and album location 2025-07-24 10:12:00 -05:00
Chuck
f342bd9d3a adjusting music manager artist and album location 2025-07-24 10:09:59 -05:00
Chuck
5516a5f764 disabling other displays to focus on debugging 2025-07-24 10:08:14 -05:00
Chuck
15fcd0a722 disabling other displays to focus on debugging 2025-07-24 10:07:28 -05:00
Chuck
a867f767d9 adjusting music manager artist and album location 2025-07-24 10:06:50 -05:00
Chuck
e84640501d adjusting music manager artist and album location 2025-07-24 10:04:34 -05:00
Chuck
e627594989 adjust music artist location lower slight 2025-07-24 09:45:27 -05:00
Chuck
7963ac77b9 disabled some displays to test faster 2025-07-24 09:42:15 -05:00
Chuck
fe6272bf3a shift album and artist names up in the music manager 2025-07-24 09:40:10 -05:00
Chuck
7fc902dea1 cache updates for live games in all sports 2025-07-24 08:21:14 -05:00
Chuck
e61ce4e4be fix NCAA FB cache error 2025-07-23 20:35:39 -05:00
Chuck
18b0a9703e remove all sports live displays from checking cache 2025-07-23 20:31:25 -05:00
Chuck
4994d8ac21 remove Live Sports display from new cache 2025-07-23 20:18:43 -05:00
Chuck
12dd1de858 fix utc timedate error in milb 2025-07-23 19:32:37 -05:00
Chuck
d928fcd5d6 switch milb upcoming flag from final to preview 2025-07-23 17:48:32 -05:00
Chuck
bb52bfdecb adjust stock logo position 2025-07-23 17:43:27 -05:00
Chuck
7f38aec32a adjust stock logo draw 2025-07-23 17:39:17 -05:00
Chuck
af6b78a094 adjust float error 2025-07-23 17:25:38 -05:00
Chuck
2d280a80fd removed -5 spacing from album y_pos for music manager 2025-07-23 17:21:30 -05:00
Chuck
0781b72c1d adjust stock ticker when charts are disabled to make it more compact 2025-07-23 17:18:21 -05:00
Chuck
9280538e08 adjust user configurable parts of stock ticker 2025-07-23 17:02:50 -05:00
Chuck
0b1ff3f9b6 adjust broadcast logo height ratio from .6 to .8 2025-07-23 16:47:35 -05:00
Chuck
3855b30d1b shift down calendar description 2025-07-23 16:46:30 -05:00
Chuck
9dedfe0264 shift bdf draw text down one mor epixel total 6 2025-07-23 16:18:07 -05:00
Chuck
0d6e147df3 shift bdf draw text down one mor epixel 2025-07-23 16:17:44 -05:00
Chuck
8bab8124cd shift bdf draw text down 2025-07-23 16:11:10 -05:00
Chuck
b051288804 broadcast logo rescaling 2025-07-23 15:00:06 -05:00
Chuck
b4d2c34217 fix bdf font positioning for displays negatively impacted by previous change 2025-07-23 14:57:07 -05:00
Chuck
2af78a37d5 fix bdf drawing in other displays relying on display manager 2025-07-23 14:36:35 -05:00
Chuck
b5b18babe8 revert daily weather temp font change due to negative effects on other displays 2025-07-23 14:27:50 -05:00
Chuck
723b7ce190 fix bdf font for weather 2025-07-23 14:17:53 -05:00
Chuck
6c02b9dc4a justify day date font in odds ticker manager 2025-07-23 13:53:30 -05:00
Chuck
58bfdc04a0 found a nice font for weather daily tempts 2025-07-23 13:50:46 -05:00
Chuck
d371b5ad09 re-enable other displays 2025-07-23 13:42:20 -05:00
Chuck
258ae8e654 revert font 2025-07-23 13:39:55 -05:00
Chuck
dc7e5b5a4f change font of body 2025-07-23 13:39:08 -05:00
Chuck
329b2def38 shift down one px starting line of body text 2025-07-23 13:37:18 -05:00
Chuck
56dc224e16 add one px line gap 2025-07-23 13:35:34 -05:00
Chuck
de04e342e8 center text 2025-07-23 13:33:46 -05:00
Chuck
80e12a8599 separate x and y logic for bdf placement 2025-07-23 13:30:54 -05:00
Chuck
64bb6129a8 steal logic from font test manager 2025-07-23 13:28:14 -05:00
Chuck
53ffc12a99 baseline tuning 2025-07-23 13:26:42 -05:00
Chuck
9b173f3ff2 improved rotation logic and trying to fix desenders on glyphs 2025-07-23 13:23:13 -05:00
Chuck
e5046db928 font change 2025-07-23 13:18:52 -05:00
Chuck
2638d222e7 shift down 2025-07-23 13:18:03 -05:00
Chuck
a0d15fb595 dyanmic movement 2025-07-23 13:16:59 -05:00
Chuck
81d8289158 shift letters down 2025-07-23 13:14:59 -05:00
Chuck
6c5f2c5c64 baseline shift 2025-07-23 13:13:40 -05:00
Chuck
85613aac00 baseline math 2025-07-23 13:12:17 -05:00
Chuck
9a86a9fe85 use font scender, whatever that is 2025-07-23 13:09:43 -05:00
Chuck
69df66b471 attempt to simplify font drawing 2025-07-23 13:08:01 -05:00
Chuck
665e1b4f67 bitmap fonts are outrageous 2025-07-23 13:05:20 -05:00
Chuck
93c68cc903 bitmap flip 2025-07-23 13:03:21 -05:00
Chuck
19f5191a5d attacking bdf baseline issue 2025-07-23 13:01:33 -05:00
Chuck
d10aed8fe5 trying x version 2025-07-23 12:59:48 -05:00
Chuck
78f014cad3 new fonts: Matrix light & chunky 2025-07-23 12:58:49 -05:00
Chuck
53464e0971 font change to MatrixLight8X 2025-07-23 12:55:26 -05:00
Chuck
e7100c4cba font change to cozette 2025-07-23 12:53:26 -05:00
Chuck
33e61634be fotn changes 2025-07-23 12:51:24 -05:00
Chuck
5518810889 new font 2025-07-23 12:48:15 -05:00
Chuck
e54a25da78 new font 2025-07-23 12:46:55 -05:00
Chuck
aa0472e5c5 new font try 2 2025-07-23 12:07:02 -05:00
Chuck
f3f50b87af try font change setting 2025-07-23 12:04:19 -05:00
Chuck
e4294a5e38 update display duration for of the day 2025-07-23 11:50:22 -05:00
Chuck
b5e8383342 text formatting 2025-07-23 11:40:49 -05:00
Chuck
141063117e fix body text height 2025-07-23 11:36:25 -05:00
Chuck
d4e799b202 fix line wrap 2025-07-23 11:34:55 -05:00
Chuck
fcacb82c57 fix title height 2025-07-23 11:33:21 -05:00
Chuck
60a7159a4d back to bdf font for clear drawing 2025-07-23 11:32:11 -05:00
Chuck
7eee58d5c1 font size too small 2025-07-23 11:28:32 -05:00
Chuck
475a1b1d15 PIL box attributeerror correction 2025-07-23 11:25:14 -05:00
Chuck
c6b7d2a5cc switching to TTF font 2025-07-23 11:24:10 -05:00
Chuck
3a2956a2c6 OTD formatting errors with BDF font 2025-07-23 11:18:15 -05:00
Chuck
30435c5371 update text height detection 2025-07-23 11:16:51 -05:00
Chuck
1192005c19 baseline offset 2025-07-23 11:11:35 -05:00
Chuck
4e7c5b0d1b address bitmap baseline in text rednering 2025-07-23 11:09:55 -05:00
Chuck
db11b2be27 fix bdf baseline text placement 2025-07-23 11:06:32 -05:00
Chuck
5654345b2a fix bdf text wrapping 2025-07-23 11:04:49 -05:00
Chuck
8ba5b73dab error squashing with bdf drawing 2025-07-23 11:03:56 -05:00
Chuck
5e47496704 bdf font size debugging 2025-07-23 10:33:12 -05:00
Chuck
585dbe0d10 bdf font debugging 2025-07-23 10:31:56 -05:00
Chuck
0d47875dec fix new bdf font draw error 2025-07-23 10:24:43 -05:00
Chuck
a904cac016 Of the day format and font updates, new rotational strucutre 2025-07-23 10:23:14 -05:00
Chuck
553a857cb6 try new font, Cozette 2025-07-23 09:50:16 -05:00
Chuck
4e56f88463 try new font 2025-07-23 08:37:15 -05:00
Chuck
b311256cc1 OTD draw cache change 2025-07-22 22:21:30 -05:00
Chuck
5c6776d120 OTD layout changes 2025-07-22 22:18:57 -05:00
Chuck
4a9c011b93 OTD layout changes 2025-07-22 22:05:42 -05:00
Chuck
54352825fd OTD layout changes 2025-07-22 22:03:48 -05:00
Chuck
3b75962ec1 change OTD font 2025-07-22 21:57:00 -05:00
Chuck
3db6fa5bdb change font test size 2025-07-22 21:53:01 -05:00
Chuck
04753e56e4 change font test size 2025-07-22 21:47:31 -05:00
Chuck
b6244075a7 change font test size 2025-07-22 21:46:33 -05:00
Chuck
7c45179248 update parent directory of font test 2025-07-22 21:40:45 -05:00
Chuck
eb96285a5c left justify OTD display and update font display to test 5x7regular 2025-07-22 21:38:43 -05:00
Chuck
584976fc49 format OTD 2025-07-22 21:31:16 -05:00
Chuck
ad8602a3d5 replace clear function after intializing and before drawing 2025-07-22 21:27:29 -05:00
Chuck
f27e4ef892 remove redundant clear_display 2025-07-22 21:26:00 -05:00
Chuck
41d703d825 update draw logic 2025-07-22 21:24:41 -05:00
Chuck
8af500237d add a rectangle to test draw method 2025-07-22 21:23:28 -05:00
Chuck
6e2e5cbfe4 display order rework 2025-07-22 21:19:07 -05:00
Chuck
935f7acfa2 more debug logging 2025-07-22 21:04:37 -05:00
Chuck
c588de84f3 file path name fix to remove duplicate folder name 2025-07-22 21:02:47 -05:00
Chuck
54c281475c additional logging and rate limit logs to see what is happening 2025-07-22 21:01:38 -05:00
Chuck
3ac37e06bb add debug logging to of the day display 2025-07-22 20:59:29 -05:00
Chuck
86e53360ac disable other displays to test Of the day display 2025-07-22 20:46:05 -05:00
Chuck
16d6c7c9b1 adjust timing of the day display 2025-07-22 20:44:11 -05:00
Chuck
cb81bec042 add Of The Day display 2025-07-22 20:39:09 -05:00
Chuck
3ab28e8201 move test files to test folder to clean up repo 2025-07-22 20:01:39 -05:00
Chuck
f50c457dc4 push working version of broadcast logos 2025-07-22 19:12:30 -05:00
Chuck
b589e5b0ff new text script to test broadcast name extraction 2025-07-22 18:44:36 -05:00
Chuck
1aab15fb4e new name extraction for broadcast names 2025-07-22 18:43:23 -05:00
Chuck
5b2709bee7 api test script to find broadcast info 2025-07-22 18:04:22 -05:00
Chuck
0e617122dc broadcast logo test py error fix 2 2025-07-22 18:00:21 -05:00
Chuck
41ed81d1ec broadcast logo test py error fix 2025-07-22 17:59:25 -05:00
Chuck
2c0596baf6 broadcast logo test py 2025-07-22 17:56:52 -05:00
Chuck
1a92389334 more channel logo formatting 2025-07-22 17:34:26 -05:00
Chuck
2199dd4e05 channel logo movement 2025-07-22 17:24:46 -05:00
Chuck
eed0baec53 changing the postitioning of channel logo 2025-07-22 17:07:17 -05:00
Chuck
740a47d061 more robust broadcast image logic 2025-07-22 16:58:12 -05:00
Chuck
442dd929e6 type error fix : remote ttl 2025-07-22 16:48:38 -05:00
Chuck
f3201adc05 add scoreboard to cache 2025-07-22 16:44:31 -05:00
Chuck
d851df6709 dynamic odds updates depending on how soon a game is 2025-07-22 16:39:06 -05:00
Chuck
0ffd8efeb3 more robust channel name processing 2025-07-22 16:32:45 -05:00
Chuck
045f51ed96 less odds ticker logging and skip milb odds check 2025-07-22 16:15:43 -05:00
Chuck
2e7644b2ea skip milb when checking odds 2025-07-22 16:05:46 -05:00
Chuck
26a518e63f odds error handling so it doesn't get stuck 2025-07-22 16:00:55 -05:00
Chuck
5e7e9fa2ae debug logging around channel logos 2025-07-22 13:14:40 -05:00
Chuck
16ed79fef1 debug logging around channel logos 2025-07-22 13:07:21 -05:00
Chuck
784b0458bb move channel logo behind game time 2025-07-22 12:54:11 -05:00
Chuck
e25e853de6 fix import error and method order 2025-07-22 12:35:14 -05:00
Chuck
0f181905eb resolve temp image draw error 2025-07-22 12:28:29 -05:00
Chuck
9ce74800dc odds ticker channel logos and ensure all sports work with odds ticker manager 2025-07-22 12:12:42 -05:00
Chuck
acc3e7f249 resolve milb error with odds_ticker_manager 2025-07-22 11:54:21 -05:00
Chuck
8b6e40b32e make odds ticker channel logos user definable in config 2025-07-22 11:51:06 -05:00
Chuck
f6441c0674 add channel logo for odds_ticker_manager 2025-07-22 11:49:29 -05:00
Chuck
c141742b6a SHow team names instead of city abbreviatons on Odds_ticker 2025-07-22 11:33:12 -05:00
Chuck
df3d010c65 toggleable short date format 2025-07-22 11:28:13 -05:00
Chuck
c3ded3999f game time formatting to remove space between time and AM/PM 2025-07-22 11:23:25 -05:00
Chuck
a580d87876 massive refactor on game filtering logic and odds calls for all sports displays 2025-07-22 11:06:54 -05:00
Chuck
e238577f36 filtering NFL and MLB games odds to only check games we favorite 2025-07-22 10:40:27 -05:00
Chuck
0a8e543150 filtering NFL game odds to only check games we favorite 2025-07-22 10:23:01 -05:00
Chuck
155cb03131 MLB logging changes to make sure we are filtering correctly 2025-07-22 10:09:35 -05:00
Chuck
4da2fd32e2 change weather logging, changed odds api call to only pull odds for games we will see, expanded game fetch window to see more games on odds ticker (50days from 30). 2025-07-22 09:31:14 -05:00
Chuck
5f99cdeced remove duplicate display duration from Odds ticker, add milb and mlb recent game debug messages, some cache changes that may prove to be a mistake 2025-07-21 22:15:54 -05:00
Chuck
78a63d5cea mlb and milb recent game debugging 2025-07-21 22:07:21 -05:00
Chuck
7c83717ca8 trying to fix permission errors 2025-07-21 21:54:16 -05:00
Chuck
580a71e6c5 trying to get NFL upcoming to work 2025-07-21 21:49:49 -05:00
Chuck
ba232c58b7 huge cache refactor, dictonary error updates, and changed from time based game searching to game based for recent and upcoming 2025-07-21 21:37:22 -05:00
Chuck
bf44d7b55b cache rework 2025-07-21 21:18:34 -05:00
Chuck
3a450b717a updates to caching 2025-07-21 21:02:19 -05:00
ChuckBuilds
2516a06ad3 implement some functionality from commit 8dccebf without a complete roll back 2025-07-21 19:48:20 -05:00
Chuck
243dc44eb9 trying to fix odds ticker 2025-07-21 19:37:24 -05:00
Chuck
537ef2c6c8 cache type error resolution 2025-07-21 19:27:28 -05:00
Chuck
88affae2db struggling to efficiently pull sports data 2025-07-21 19:23:21 -05:00
Chuck
19006c6e2a game filtering logic 2025-07-21 18:43:58 -05:00
Chuck
918e25bb77 cache fix it script 2025-07-21 18:35:22 -05:00
Chuck
8d4736c91b cache enhancements 2025-07-21 18:20:01 -05:00
Chuck
e611715d54 seach logic will search for each team in a smarter search loop 2025-07-21 18:07:04 -05:00
Chuck
e21bf2b3dd filtering logic for future and past games 2025-07-21 17:55:26 -05:00
Chuck
8d33797ec3 dynamically skip recent or upcoming game caches if corresponding display is disabled 2025-07-21 17:44:43 -05:00
Chuck
f904c377b3 reduce cache messaging and logging 2025-07-21 17:35:37 -05:00
Chuck
0909523ba2 disable recent game scores for NFL, NCAA FB 2025-07-21 17:29:48 -05:00
Chuck
0a109e460f cache football dates when checking for next or last 2025-07-21 17:26:46 -05:00
Chuck
8feddb3a82 improved logic for checking last and next X games, will check up to one year 2025-07-21 17:18:25 -05:00
Chuck
e9cf2829da change football logic from days to games. 2025-07-21 16:51:29 -05:00
Chuck
8dccebff01 centered team logos in odds ticker and removed dynamic display duration 2025-07-21 16:42:24 -05:00
Chuck
49378f79cf add logo_dir to game dictionary to fix key error 2025-07-21 16:19:40 -05:00
Chuck
87b0064d7a make team logos larger on ticker and enable NFL & NCAA FB displays. Limit data pulls based on future fetch days and games per favorite 2025-07-21 16:14:50 -05:00
Chuck
574ea020c1 odds ticker time window is now user configurable 2025-07-21 16:06:42 -05:00
Chuck
267029278f logging dynamic ticker display 2025-07-21 15:51:05 -05:00
Chuck
06fa6d656a adjustments to formatting of odds 2025-07-21 15:43:22 -05:00
Chuck
94f0eb060b lots of visual and logic changes 2025-07-21 15:22:12 -05:00
Chuck
d3ab27b221 visual improvements - separator between match up info, MILB team record logic to hide if no record found. Customization settings to see more information in the odds ticker manager 2025-07-21 15:07:36 -05:00
Chuck
7464244dfa odds ticker display changes 2025-07-21 14:39:52 -05:00
Chuck
0df72c81cc adjust font and logo size for odds ticker manager 2025-07-21 14:33:34 -05:00
Chuck
d7d03fd7a3 add team records to milb 2025-07-21 14:27:10 -05:00
Chuck
8b8b087f9a dynamically define time on screen to rotate through odds ticker display 2025-07-20 21:28:29 -05:00
Chuck
c45fb1b76f added game time and date to ticker 2025-07-20 21:13:49 -05:00
Chuck
8356c0dab5 adjust odds scroll delay and font size of team ticker odds 2025-07-20 21:01:09 -05:00
Chuck
1dcd79f758 add granular control over records display and troubleshooting odds ticker. Enabled Team Records for all sports 2025-07-20 20:52:55 -05:00
Chuck
5741cdee9a fix odds dictionary 2025-07-20 20:26:06 -05:00
Chuck
25a6bf9dc8 display improvements for the scrolling 2025-07-20 20:14:24 -05:00
Chuck
1630e2d2ba fix scroll position 2025-07-20 19:57:41 -05:00
Chuck
dcf54f50df added team record to recent and upcoming displays, working on odds ticker display logic 2025-07-20 19:52:16 -05:00
Chuck
651f26ff71 revisit scroll display logic 2025-07-20 19:44:40 -05:00
Chuck
af1ea8ee8d disable MLB live temporarily while debugging 2025-07-20 19:34:29 -05:00
Chuck
9dcedc7c0e found random timezone error from old time import method 2025-07-20 19:34:02 -05:00
Chuck
c958a1c094 display debugging 2025-07-20 19:23:03 -05:00
Chuck
26c2f1e414 odds data management and debugging 2025-07-20 19:19:37 -05:00
Chuck
8fb510cb48 filter favorite games before loading the rest for odd ticker 2025-07-20 18:07:55 -05:00
Chuck
1806022657 improve odds format for ticker 2025-07-20 17:49:27 -05:00
Chuck
779ec310fe mlb tester logic to filter correct games 2025-07-20 17:41:28 -05:00
Chuck
320dccf19c mlb tester 2025-07-20 17:36:59 -05:00
Chuck
1bc7799b75 odds ticker debugging 2025-07-20 17:28:46 -05:00
Chuck
ab7d0278cc format gambling displays for all sports, add gambling ticker 2025-07-20 17:19:21 -05:00
Chuck
85f46e8024 formatting updates to MLB Live Gambling 2025-07-20 16:19:06 -05:00
Chuck
ca1d56378a cache updates 2025-07-20 16:08:18 -05:00
Chuck
86fac90de5 font adjustments for MLB Live 2025-07-20 16:05:41 -05:00
Chuck
3aefeb6a3f fonts adjustment for MLB gambling 2025-07-20 15:51:48 -05:00
Chuck
2f239ff21c gambling layout changes for MLB 2025-07-20 15:47:25 -05:00
Chuck
7a5ba6807f MLB gambling display improvements 2025-07-20 15:38:03 -05:00
Chuck
b75552a1ea debugging logging for ESPN odds 2025-07-20 15:30:20 -05:00
Chuck
0b3d02548a add gambling odds to recent and upcoming games 2025-07-20 14:18:55 -05:00
Chuck
6d476b403b disable cache to see if that is the problem 2025-07-19 20:05:55 -05:00
Chuck
5b19c0c664 troubleshooting display odds key 2025-07-19 18:55:41 -05:00
Chuck
fa93b8256b reduce log spam and work on display odds in-line with team score 2025-07-19 18:37:04 -05:00
Chuck
4d1e80bccd draw odds on live MLB games 2025-07-19 18:30:13 -05:00
Chuck
a72704bdc4 specific logging messages for odds manager to see if we are missing odds or display method 2025-07-19 18:23:46 -05:00
Chuck
4e430e2b59 more odds manager logging, less MLB logging 2025-07-19 18:20:54 -05:00
Chuck
c9ab9a339b reduce logging noise 2025-07-19 17:12:57 -05:00
Chuck
72e10e06d4 attempting cache improvements to see if that is affecting ability to see recent odds updates 2025-07-19 17:07:46 -05:00
Chuck
c571b427e0 changing odds display formatting and adding logging 2025-07-19 17:03:23 -05:00
Chuck
1d3c74a17e reduce mlb logging nouse 2025-07-19 16:35:41 -05:00
Chuck
eb6851de3c reduce logging noise 2025-07-19 16:24:28 -05:00
Chuck
e452a97b92 ensure we are pulling game Id's for odds 2025-07-19 16:18:09 -05:00
Chuck
0acd0765ca adjust mlb logging levels 2025-07-19 16:06:51 -05:00
Chuck
98e6b2b349 cache key fix 2025-07-19 11:31:52 -05:00
Chuck
f2b078e4f1 debug logging odds manager 2025-07-19 11:12:57 -05:00
Chuck
9e157c43f7 actually enable drawing odds in config lol 2025-07-19 10:47:51 -05:00
Chuck
14745bd8ff draw odds on display 2025-07-19 10:32:53 -05:00
Chuck
4c8d9e1467 corrected instantiation error 2025-07-18 22:15:51 -05:00
Chuck
aa379e8369 gambling updates 2025-07-18 22:12:33 -05:00
Chuck
88d6f577ef fix MILB searching for game data too often 2025-07-18 21:11:30 -05:00
Chuck
193dbad0f0 actually load config to read timezone for clock 2025-07-17 13:19:24 -05:00
Chuck
1922d5e3b0 fixed clock / timezone configuration discrepancies 2025-07-17 11:12:45 -05:00
Chuck
297a950385 adjustments made to MLB inning logic, pulling short detail 2025-07-09 18:58:41 -05:00
Chuck
180975f452 adjustments made to MLB inning logic 2025-07-09 18:42:16 -05:00
Chuck
21773cd948 adjustments in Display scheduling to fix blank screen after re-activated 2025-07-09 07:35:27 -05:00
Chuck
b3dc4f696c debug MLB innings 2025-07-08 21:04:39 -05:00
Chuck
176a4dcf0f better parsing of inning halves 2025-07-08 20:58:31 -05:00
Chuck
1eedcbac68 remove sleep from display controller due to negative impact on scrolling text 2025-07-08 20:23:45 -05:00
Chuck
49f7677b37 set web ui autostart to true by default 2025-07-08 20:12:47 -05:00
Chuck
3b9740fe8b fix MLB inning half detection by fixing api parse 2025-07-08 19:40:35 -05:00
Chuck
9bb4f088a6 adding scheduling function to web ui and display 2025-07-08 19:33:08 -05:00
Chuck
a0e7c662fb removing spaces from Youtube Subscriber display 2025-07-08 13:58:41 -05:00
Chuck
f849e5ecb7 changing how innings are pulled and processed 2025-07-08 13:50:51 -05:00
Chuck
bb64cada7f update verbiage on milb_manager 2025-06-29 08:19:52 -05:00
Chuck
8f439948e3 changing how scores and innings are pulled 2025-06-18 18:26:19 -05:00
Chuck
1e64bc78a1 moving logos slight more away from center info 2025-06-18 09:40:57 -05:00
Chuck
b9d07ff962 noticed images for MILB had padding, messing up dynamic placement. Trying static placement 2025-06-18 09:30:10 -05:00
Chuck
f3c33f0be6 slightly move MILB logos to be more dynamically placed 2025-06-18 09:23:09 -05:00
Chuck
c68cb240b5 slightly enlarge MILB logos to be more readable 2025-06-18 09:17:51 -05:00
Chuck
15d0706ba9 adjust MILB logos to be slightly smaller and more visible 2025-06-18 09:11:53 -05:00
Chuck
0b29882a8a adjust MILB logos to be closer to edges 2025-06-18 09:05:21 -05:00
Chuck
4ae98a5b52 oversized MLB and NCAA Baseball logos, adjusted layout so they should be more clear. Disabled NCAA Baseball in config since my teams are out of tournament 2025-06-18 08:56:23 -05:00
Chuck
abc66309f4 oversized milb team logos 2025-06-18 08:46:31 -05:00
Chuck
3ea62dfc2f implementing minor league baseball display 2025-06-17 20:13:37 -05:00
ChuckBuilds
83f90ff261 add milb logos and mapping 2025-06-17 17:41:30 -05:00
Chuck
0078b8a0f8 disable web autostart 2025-06-12 09:43:12 -05:00
Chuck
52de128716 track data checks for NHL games to prevent looping 2025-06-08 20:00:04 -05:00
Chuck
0565b2c7b3 disable nhl displays 2025-06-08 19:45:42 -05:00
Chuck
99c031e38d replace air pressure with UV index 2025-06-07 15:58:24 -05:00
Chuck
030a59c758 bug fix for Title scrolling in Music display 2025-06-07 15:28:57 -05:00
Chuck
bc1bfefbf0 adjust default sports update intervals 2025-06-07 14:54:55 -05:00
Chuck
c651b0f413 increase album art by 1 px 2025-06-05 10:12:01 -05:00
Chuck
f9ed61488f add web page to config and enable autostart 2025-06-05 09:57:20 -05:00
Chuck
644a76a199 add update button to web control page 2025-06-05 09:41:20 -05:00
Chuck
58c87e9299 updated readme and added reboot action 2025-06-01 17:35:26 -05:00
Chuck
59fbea84a4 updating commands 2025-05-31 18:58:16 -05:00
Chuck
9877cbff81 web ui command updates 2025-05-31 18:05:46 -05:00
Chuck
3562e9c3a2 remove default api 2025-05-31 17:34:09 -05:00
Chuck
dbbe5b2e99 enable cmd support for quick actions 2025-05-31 14:09:34 -05:00
Chuck
aba6ab1a86 adding quick scripts page 2025-05-31 13:55:54 -05:00
Chuck
5a07d47096 fixing web ui tabs 2025-05-31 12:48:21 -05:00
Chuck
085b615370 json handling improvements to stop shuffle 2025-05-31 12:11:52 -05:00
Chuck
7b91a2b8a5 json formatting and optional config secrets editor 2025-05-31 12:02:26 -05:00
Chuck
af82d3c81f improved logic to separate config_secrets.json 2025-05-31 11:49:04 -05:00
Chuck
4066d30195 first add of webui 2025-05-31 11:38:40 -05:00
Chuck
b319b2de30 better drawing of possession football indicator 2025-05-30 09:07:37 -05:00
Chuck
b961579018 adjust position indicator placement 2025-05-30 08:58:54 -05:00
Chuck
69ce967bed possesion tracking for test data 2025-05-30 08:51:37 -05:00
Chuck
c1e648b730 ball possession indicatior for NFL and NCAAF 2025-05-30 08:33:52 -05:00
Chuck
1b1413416f NCAA Baseball team logo fallback transparency 2025-05-29 14:15:48 -05:00
Chuck
d787aaab5a NCAA Baseball team logo fallback to Acronym 2025-05-29 14:06:24 -05:00
Chuck
c4a3bd47a8 Update README.md
Signed-off-by: Chuck <33324927+ChuckBuilds@users.noreply.github.com>
2025-05-29 13:58:40 -05:00
Chuck
5f1aee8a4c Update README.md
Signed-off-by: Chuck <33324927+ChuckBuilds@users.noreply.github.com>
2025-05-29 13:56:09 -05:00
Chuck
8abba7a676 Update README.md
Signed-off-by: Chuck <33324927+ChuckBuilds@users.noreply.github.com>
2025-05-28 19:59:37 -05:00
Chuck
17fe4faccb Update README.md
Signed-off-by: Chuck <33324927+ChuckBuilds@users.noreply.github.com>
2025-05-28 19:59:04 -05:00
257 changed files with 128598 additions and 2389 deletions

326
INSTALLATION_GUIDE.md Normal file
View File

@@ -0,0 +1,326 @@
# LED Matrix Installation Guide
## Quick Start (Recommended for First-Time Installation)
# System Setup & Installation
1. Open PowerShell and ssh into your Raspberry Pi with ledpi@ledpi (or Username@Hostname)
```bash
ssh ledpi@ledpi
```
2. Update repositories, upgrade raspberry pi OS, install git
```bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y git python3-pip cython3 build-essential python3-dev python3-pillow scons
```
3. Clone this repository:
```bash
git clone https://github.com/ChuckBuilds/LEDMatrix.git
cd LEDMatrix
```
4. Install dependencies:
```bash
sudo pip3 install --break-system-packages -r requirements.txt
```
--break-system-packages allows us to install without a virtual environment
5. Install rpi-rgb-led-matrix dependencies:
```bash
cd rpi-rgb-led-matrix-master
```
```bash
sudo make build-python PYTHON=$(which python3)
```
```bash
cd bindings/python
sudo python3 setup.py install
```
Test it with:
```bash
python3 -c 'from rgbmatrix import RGBMatrix, RGBMatrixOptions; print("Success!")'
```
## Important: Sound Module Configuration
1. Remove unnecessary services that might interfere with the LED matrix:
```bash
sudo apt-get remove bluez bluez-firmware pi-bluetooth triggerhappy pigpio
```
2. Blacklist the sound module:
```bash
cat <<EOF | sudo tee /etc/modprobe.d/blacklist-rgb-matrix.conf
blacklist snd_bcm2835
EOF
```
then execute
```bash
sudo update-initramfs -u
```
3. Reboot:
```bash
sudo reboot
```
## Performance Optimization
To reduce flickering and improve display quality:
1. Edit `/boot/firmware/cmdline.txt`:
```bash
sudo nano /boot/firmware/cmdline.txt
```
2. Add `isolcpus=3` at the end of the line
3. Ctrl + X to exit, Y to save, Enter to Confirm
4. Edit /boot/firmware/config.txt with
```bash
sudo nano /boot/firmware/config.txt
```
6. Edit the `dtparam=audio=on` section to `dtparam=audio=off`
7. Ctrl + X to exit, Y to save, Enter to Confirm
8. Save and reboot:
```bash
sudo reboot
```
9. Run the first_time_install.sh with
```
sudo ./first_time_install.sh
```
to ensure all the permissions are correct.
10. Then run
```
sudo python start_web_conditionally.py
```
to start the web ui and download the r
-----------------------------------------------------------------------------------
## Configuration
1.Edit `config/config.json` with your preferences via `sudo nano config/config.json`
###API Keys
For sensitive settings like API keys:
Copy the template: `cp config/config_secrets.template.json config/config_secrets.json`
Edit `config/config_secrets.json` with your API keys via `sudo nano config/config_secrets.json`
Ctrl + X to exit, Y to overwrite, Enter to Confirm
Everything is configured via `config/config.json` and `config/config_secrets.json`.
For a complete first-time installation, run:
```bash
chmod +x first_time_install.sh
```
then
```bash
sudo ./first_time_install.sh
```
This single script handles everything you need for a new installation.
## Individual Scripts Explained
### **First-Time Installation Scripts**
#### `first_time_install.sh` ⭐ **RECOMMENDED**
- **When to use**: New installations only
- **What it does**: Complete setup including all steps below
- **Usage**: `sudo ./first_time_install.sh`
### **Service Installation Scripts**
#### `install_service.sh`
- **When to use**: Install main LED Matrix display service
- **What it does**:
- Creates systemd service for main display
- Creates systemd service for web interface
- Enables services to start on boot
- **Usage**: `sudo ./install_service.sh`
#### `install_web_service.sh`
- **When to use**: Install only the web interface service (legacy)
- **What it does**: Installs the web interface systemd service
- **Usage**: `sudo ./install_web_service.sh`
- **Note**: `install_service.sh` now handles this automatically
### **Permission Fix Scripts**
#### `fix_cache_permissions.sh`
- **When to use**: When you see cache permission errors
- **What it does**:
- Creates cache directories (`/var/cache/ledmatrix`)
- Sets proper permissions for cache access
- Creates placeholder logo directories
- **Usage**: `sudo ./fix_cache_permissions.sh`
#### `fix_web_permissions.sh`
- **When to use**: When web interface can't access logs or system commands
- **What it does**:
- Adds user to `systemd-journal` group (for log access)
- Adds user to `adm` group (for system access)
- Sets proper file ownership
- **Usage**: `./fix_web_permissions.sh` (run as regular user)
#### `configure_web_sudo.sh`
- **When to use**: When web interface buttons don't work (sudo password errors)
- **What it does**:
- Configures passwordless sudo access for web interface
- Allows web interface to start/stop services without password
- **Usage**: `./configure_web_sudo.sh` (run as regular user)
### **Dependency Installation Scripts**
#### `install_dependencies_apt.py`
- **When to use**: When you want to install packages via apt first, then pip
- **What it does**:
- Tries to install packages via apt (system packages)
- Falls back to pip with `--break-system-packages`
- Handles externally managed Python environments
- **Usage**: `sudo python3 install_dependencies_apt.py`
#### `start_web_v2.py`
- **When to use**: Manual web interface startup
- **What it does**:
- Installs dependencies
- Starts web interface directly
- Includes comprehensive logging
- **Usage**: `python3 start_web_v2.py`
#### `run_web_v2.sh`
- **When to use**: Manual web interface startup (shell script version)
- **What it does**: Same as `start_web_v2.py` but as a shell script
- **Usage**: `./run_web_v2.sh`
### **Utility Scripts**
#### `cleanup_venv.sh`
- **When to use**: Remove virtual environment if you don't want to use it
- **What it does**: Removes `venv_web_v2` directory
- **Usage**: `./cleanup_venv.sh`
#### `start_web_conditionally.py`
- **When to use**: Called by systemd service (don't run manually)
- **What it does**:
- Checks config for `web_display_autostart` setting
- Starts web interface only if enabled
- Used by the systemd service
## Installation Scenarios
### **Scenario 1: Brand New Installation**
```bash
# One command does everything
sudo ./first_time_install.sh
```
### **Scenario 2: Adding Web Interface to Existing Installation**
```bash
# Install web interface dependencies
sudo python3 install_dependencies_apt.py
# Fix permissions
./fix_web_permissions.sh
# Configure sudo access
./configure_web_sudo.sh
# Install services
sudo ./install_service.sh
```
### **Scenario 3: Fixing Permission Issues**
```bash
# Fix cache permissions
sudo ./fix_cache_permissions.sh
# Fix web interface permissions
./fix_web_permissions.sh
# Configure sudo access
./configure_web_sudo.sh
# Log out and back in for group changes to take effect
```
### **Scenario 4: Manual Web Interface Startup**
```bash
# Start web interface manually (for testing)
python3 start_web_v2.py
```
## Post-Installation Steps
### **1. Log Out and Log Back In**
After running permission scripts, you need to log out and back in for group changes to take effect:
```bash
# Or use this command to apply group changes immediately
newgrp systemd-journal
```
### **2. Configure the Web Interface**
Edit `config/config.json` and set:
```json
{
"web_display_autostart": true
}
```
### **3. Access the Web Interface**
Open your browser and go to:
```
http://your-pi-ip:5001
```
### **4. Test Everything**
- Check if services are running: `sudo systemctl status ledmatrix.service`
- Check web interface: `sudo systemctl status ledmatrix-web.service`
- View logs: `journalctl -u ledmatrix.service -f`
## Troubleshooting
### **Web Interface Not Accessible**
1. Check if service is running: `sudo systemctl status ledmatrix-web.service`
2. Check logs: `journalctl -u ledmatrix-web.service -f`
3. Ensure `web_display_autostart` is `true` in config
### **Permission Errors**
1. Run: `./fix_web_permissions.sh`
2. Run: `./configure_web_sudo.sh`
3. Log out and back in
### **Cache Permission Errors**
1. Run: `sudo ./fix_cache_permissions.sh`
### **Sudo Password Prompts**
1. Run: `./configure_web_sudo.sh`
2. Log out and back in
### **Dependency Installation Errors**
1. Run: `sudo python3 install_dependencies_apt.py`
## Summary
For **first-time installations**: Use `first_time_install.sh`
For **existing installations with issues**: Use the individual permission and configuration scripts as needed.
The `first_time_install.sh` script is designed to handle everything automatically, so you typically only need to run individual scripts if you're troubleshooting specific issues.

1
LEDMatrix.wiki Submodule

Submodule LEDMatrix.wiki added at a01c72e156

625
README.md
View File

@@ -1,7 +1,21 @@
# LEDMatrix
An LED matrix display system that provides real-time information display capabilities for various data sources. The system is highly configurable and supports multiple display modes that can be enabled or disabled based on user preferences.
Special Thanks to:
### Setup video and feature walkthrough on Youtube :
[![IMAGE ALT TEXT HERE](https://img.youtube.com/vi/_HaqfJy1Y54/0.jpg)](https://www.youtube.com/watch?v=_HaqfJy1Y54)
-----------------------------------------------------------------------------------
### Connect with ChuckBuilds
- Show support on Youtube: https://www.youtube.com/@ChuckBuilds
- Check out the write-up on my website: https://www.chuck-builds.com/led-matrix/
- Stay in touch on Instagram: https://www.instagram.com/ChuckBuilds/
- Want to chat? Reach out on the ChuckBuilds Discord: https://discord.com/invite/uW36dVAtcT
- Feeling Generous? Buy Me a Coffee : https://buymeacoffee.com/chuckbuilds
-----------------------------------------------------------------------------------
### Special Thanks to:
- Hzeller @ https://github.com/hzeller/rpi-rgb-led-matrix for his groundwork on controlling an LED Matrix from the Raspberry Pi
- Basmilius @ https://github.com/basmilius/weather-icons/ for his free and extensive weather icons
- nvstly @ https://github.com/nvstly/icons for their Stock and Crypto Icons
@@ -48,6 +62,7 @@ The system supports live, recent, and upcoming game information for multiple spo
- Soccer
- (Note, some of these sports seasons were not active during development and might need fine tuning when games are active)
### Financial Information
- Near real-time stock & crypto price updates
- Stock news headlines
@@ -231,17 +246,30 @@ sudo nano /boot/firmware/config.txt
sudo reboot
```
9. Run the first_time_install.sh with
```bash
chmod +x first_time_install.sh
```
then
```bash
sudo ./first_time_install.sh
```
to ensure all the permissions are correct.
-----------------------------------------------------------------------------------
## Configuration
1.Edit `config/config.json` with your preferences via `sudo nano config/config.json`
1.Edit `config/config.json` with your preferences via `sudo nano config/config.json`
###API Keys
For sensitive settings like API keys:
Copy the template: `cp config/config_secrets.template.json config/config_secrets.json`
Edit `config/config_secrets.json` with your API keys via `sudo nano config/config_secrets.json`
Copy the template: `cp config/config_secrets.template.json config/config_secrets.json`
Edit `config/config_secrets.json` with your API keys via `sudo nano config/config_secrets.json`
Ctrl + X to exit, Y to overwrite, Enter to Confirm
Everything is configured via `config/config.json` and `config/config_secrets.json`.
@@ -285,6 +313,251 @@ The calendar display will show:
- Event title (wrapped to fit the display)
- Up to 3 upcoming events (configurable)
## Odds Ticker Configuration
The odds ticker displays betting odds for upcoming sports games. To configure it:
1. In `config/config.json`, add the following section:
```json
{
"odds_ticker": {
"enabled": true,
"enabled_leagues": ["nfl", "nba", "mlb", "ncaa_fb"],
"update_interval": 3600,
"scroll_speed": 2,
"scroll_delay": 0.05,
"display_duration": 30
}
}
```
### Configuration Options
- **`enabled`**: Enable/disable the odds ticker (default: false)
- **`enabled_leagues`**: Array of leagues to display (options: "nfl", "nba", "mlb", "ncaa_fb")
- **`update_interval`**: How often to fetch new odds data in seconds (default: 3600)
- **`scroll_speed`**: Pixels to scroll per update (default: 1)
- **`scroll_delay`**: Delay between scroll updates in seconds (default: 0.05)
- **`display_duration`**: How long to show each game in seconds (default: 30)
**How it works:**
- The ticker intelligently filters games based on the `"show_favorite_teams_only"` setting within each individual sport's configuration block (e.g., `"nfl_scoreboard"`). If set to `true` for a sport, only favorite teams from that sport will appear in the ticker.
- Games are sorted by the soonest start time.
### Display Format
The odds ticker shows information in this format:
```
[12:00 PM] DAL -6.5 ML -200 O/U 47.5 vs NYG ML +175
```
Where:
- `[12:00 PM]` - Game time in local timezone
- `DAL` - Away team abbreviation
- `-6.5` - Spread for away team (negative = favored)
- `ML -200` - Money line for away team
- `O/U 47.5` - Over/under total
- `vs` - Separator
- `NYG` - Home team abbreviation
- `ML +175` - Money line for home team
### Team Logos
The ticker displays team logos alongside the text:
- Away team logo appears to the left of the text
- Home team logo appears to the right of the text
- Logos are automatically resized to fit the display
### Requirements
- ESPN API access for odds data
- Team logo files in the appropriate directories:
- `assets/sports/nfl_logos/`
- `assets/sports/nba_logos/`
- `assets/sports/mlb_logos/`
- `assets/sports/ncaa_fbs_logos/`
### Troubleshooting
**No Games Displayed:**
1. **League Configuration**: Ensure the leagues you want are enabled in their respective config sections
2. **Favorite Teams**: If `show_favorite_teams_only` is true, ensure you have favorite teams configured
3. **API Access**: Verify ESPN API is accessible and returning data
4. **Time Window**: The ticker only shows games in the next 7 days
**No Odds Data:**
1. **API Timing**: Odds may not be available immediately when games are scheduled
2. **League Support**: Not all leagues may have odds data available
3. **API Limits**: ESPN API may have rate limits or temporary issues
**Performance Issues:**
1. **Reduce scroll_speed**: Try setting it to 1 instead of 2
2. **Increase scroll_delay**: Try 0.1 instead of 0.05
3. **Check system resources**: Ensure the Raspberry Pi has adequate resources
### Testing
You can test the odds ticker functionality using:
```bash
python test_odds_ticker.py
```
This will:
1. Initialize the odds ticker
2. Fetch upcoming games and odds
3. Display sample games
4. Test the scrolling functionality
## Stocks Configuration
The stocks display shows real-time stock and crypto prices in a scrolling ticker format. To configure it:
1. In `config/config.json`, add the following section:
```json
{
"stocks": {
"enabled": true,
"symbols": ["AAPL", "MSFT", "GOOGL", "TSLA"],
"update_interval": 600,
"scroll_speed": 1,
"scroll_delay": 0.01,
"toggle_chart": false
}
}
```
### Configuration Options
- **`enabled`**: Enable/disable the stocks display (default: false)
- **`symbols`**: Array of stock symbols to display (e.g., ["AAPL", "MSFT", "GOOGL"])
- **`update_interval`**: How often to fetch new stock data in seconds (default: 600)
- **`scroll_speed`**: Pixels to scroll per update (default: 1)
- **`scroll_delay`**: Delay between scroll updates in seconds (default: 0.01)
- **`toggle_chart`**: Enable/disable mini charts in the scrolling ticker (default: false)
### Display Format
The stocks display shows information in this format:
```
[Logo] SYMBOL
$PRICE
+CHANGE (+PERCENT%)
```
Where:
- `[Logo]` - Stock/crypto logo (if available)
- `SYMBOL` - Stock symbol (e.g., AAPL, MSFT)
- `$PRICE` - Current stock price
- `+CHANGE` - Price change (green for positive, red for negative)
- `+PERCENT%` - Percentage change
### Chart Toggle Feature
The `toggle_chart` setting controls whether mini price charts are displayed alongside each stock:
- **`"toggle_chart": true`**: Shows mini line charts on the right side of each stock display
- **`"toggle_chart": false`**: Shows only text information (symbol, price, change)
When charts are disabled, the text is centered more prominently on the display.
### Crypto Support
The system also supports cryptocurrency symbols. Add crypto symbols to the `symbols` array:
```json
{
"stocks": {
"enabled": true,
"symbols": ["AAPL", "MSFT", "BTC-USD", "ETH-USD"],
"update_interval": 600,
"scroll_speed": 1,
"scroll_delay": 0.01,
"toggle_chart": false
}
}
```
### Requirements
- Yahoo Finance API access for stock data
- Stock/crypto logo files in the appropriate directories:
- `assets/stocks/ticker_icons/` (for stocks)
- `assets/stocks/crypto_icons/` (for cryptocurrencies)
### Troubleshooting
**No Stock Data Displayed:**
1. **Symbol Format**: Ensure stock symbols are correct (e.g., "AAPL" not "apple")
2. **API Access**: Verify Yahoo Finance API is accessible
3. **Market Hours**: Some data may be limited during off-hours
4. **Symbol Validity**: Check that symbols exist and are actively traded
**Performance Issues:**
1. **Reduce scroll_speed**: Try setting it to 1 instead of higher values
2. **Increase scroll_delay**: Try 0.05 instead of 0.01 for smoother scrolling
3. **Reduce symbols**: Limit the number of symbols to improve performance
### Testing
You can test the stocks functionality using:
```bash
python test/test_stock_toggle_chart.py
```
This will:
1. Test the toggle_chart functionality
2. Verify configuration loading
3. Test cache clearing behavior
## Football Game-Based Configuration (NFL & NCAA FB)
For NFL and NCAA Football, the system now uses a game-based fetch approach instead of time-based windows. This is more practical for football since games are weekly and you want to show specific numbers of games rather than arbitrary time periods.
### Configuration Options
Instead of using `past_fetch_days` and `future_fetch_days`, the system now uses:
- **`fetch_past_games`**: Number of recent games to fetch (default: 1)
- **`fetch_future_games`**: Number of upcoming games to fetch (default: 1)
### Example Configuration
```json
{
"nfl_scoreboard": {
"enabled": true,
"fetch_past_games": 1,
"fetch_future_games": 1,
"favorite_teams": ["TB", "DAL"]
},
"ncaa_fb_scoreboard": {
"enabled": true,
"fetch_past_games": 1,
"fetch_future_games": 1,
"favorite_teams": ["UGA", "AUB"]
}
}
```
### How It Works
- **`fetch_past_games: 1`**: Shows the most recent game for your favorite teams
- **`fetch_future_games: 1`**: Shows the next upcoming game for your favorite teams
- **`fetch_future_games: 2`**: Shows the next two upcoming games (e.g., Week 1 and Week 2 matchups)
### Benefits
1. **Predictable Results**: Always shows exactly the number of games you specify
2. **Season Flexibility**: Works well both during the season and in the off-season
3. **Future Planning**: Can show games far in the future (e.g., Week 1 when it's 40 days away)
4. **Efficient**: Only fetches the games you actually want to see
### Use Cases
- **During Season**: `fetch_future_games: 1` shows next week's game
- **Off-Season**: `fetch_future_games: 1` shows the first scheduled game (even if it's months away)
- **Planning**: `fetch_future_games: 2` shows the next two matchups for planning purposes
## Music Display Configuration
The Music Display module shows information about the currently playing track from either Spotify or YouTube Music (via the [YouTube Music Desktop App](https://ytmdesktop.app/) companion server).
@@ -422,7 +695,105 @@ To get these credentials:
* Ensure your firewall (Windows Firewall) allows YTM Desktop app to access local networks.
-----------------------------------------------------------------------------------
### Favorite Team Filtering
Across all sports displays (NFL, MLB, NBA, etc.), you can control which games are shown using the `"show_favorite_teams_only"` and `"favorite_teams"` settings in your `config/config.json`.
**How it Works:**
* **`"show_favorite_teams_only": true`**: When this is set to `true` within a specific sport's configuration (e.g., in the `"nfl_scoreboard"` block), the system will **only** fetch and display games (Live, Recent, and Upcoming) that involve one of the teams listed in your `"favorite_teams"` array for that sport. This is the best way to reduce API calls and keep the display focused.
* **`"show_favorite_teams_only": false`**: When set to `false` (or omitted), the system will display **all** available games for that sport, ignoring the `"favorite_teams"` list completely.
**Example `config.json` for NFL:**
```json
"nfl_scoreboard": {
"enabled": true,
"show_odds": true,
"show_favorite_teams_only": true, // <-- Only shows games for DAL & TB
"favorite_teams": ["DAL", "TB"],
"fetch_past_games": 1,
"fetch_future_games": 1
},
```
### Odds Ticker Feature
The system includes a comprehensive odds ticker that displays betting odds for upcoming sports games. The ticker respects the `show_favorite_teams_only` setting from each individual sports module. For example, if `"show_favorite_teams_only": true` is set in the `nfl_scoreboard` config, the odds ticker will only show odds for your favorite NFL teams.
**Features:**
- **Multi-League Support**: NFL, NBA, MLB, NCAA Football
- **Configurable Leagues**: Choose which leagues to display
- **Favorite Teams Filter**: Obeys the `show_favorite_teams_only` setting in each sport's configuration block.
- **Team Logos**: Displays team logos alongside odds information
- **Comprehensive Odds**: Shows spreads, money lines, and over/under totals
- **Scrolling Display**: Smooth scrolling text with team logos
- **Time Display**: Shows game times in local timezone
**Display Format:**
```
[12:00 PM] DAL -6.5 ML -200 O/U 47.5 vs NYG ML +175
```
**Configuration:**
Add the following section to your `config/config.json`:
```json
{
"odds_ticker": {
"enabled": true,
"enabled_leagues": ["nfl", "nba", "mlb", "ncaa_fb"],
"update_interval": 3600,
"scroll_speed": 2,
"scroll_delay": 0.05,
"display_duration": 30
}
}
```
**Testing:**
You can test the odds ticker functionality using:
```bash
python test_odds_ticker.py
```
### Persistent Caching Setup
The LEDMatrix system uses persistent caching to improve performance and reduce API calls. When running with `sudo`, the system needs a persistent cache directory that survives restarts.
**First-Time Setup:**
Run the setup script to create a persistent cache directory:
```bash
chmod +x setup_cache.sh
./setup_cache.sh
```
This will:
- Create `/var/cache/ledmatrix/` directory
- Set proper ownership to your user account
- Set permissions to allow the daemon user (which the system runs as) to write
- Test writability for both your user and the daemon user
**If You Still See Cache Warnings:**
If you see warnings about using temporary cache directory, run the permissions fix:
```bash
chmod +x fix_cache_permissions.sh
./fix_cache_permissions.sh
```
**Manual Setup:**
If you prefer to set up manually:
```bash
sudo mkdir -p /var/cache/ledmatrix
sudo chown $USER:$USER /var/cache/ledmatrix
sudo chmod 777 /var/cache/ledmatrix
```
**Cache Locations (in order of preference):**
1. `~/.ledmatrix_cache/` (user's home directory) - **Most persistent**
2. `/var/cache/ledmatrix/` (system cache directory) - **Persistent across restarts**
3. `/opt/ledmatrix/cache/` (alternative persistent location)
4. `/tmp/ledmatrix_cache/` (temporary directory) - **NOT persistent**
**Note:** If the system falls back to `/tmp/ledmatrix_cache/`, you'll see a warning message and the cache will not persist across restarts.
------------------------------------------------------------------------------------
## Before Running the Display
- To allow the script to properly access fonts, you need to set the correct permissions on your home directory:
```bash
@@ -449,7 +820,7 @@ This will start the display cycle but only stays active as long as your ssh sess
The LEDMatrix can be installed as a systemd service to run automatically at boot and be managed easily. The service runs as root to ensure proper hardware timing access for the LED matrix.
### Installing the Service
### Installing the Service (this is included in the first_time_install.sh)
1. Make the install script executable:
```bash
@@ -509,6 +880,102 @@ sudo ./start_display.sh
sudo ./stop_display.sh
```
-----------------------------------------------------------------------------------
## Web Interface Installation
The LEDMatrix system includes a web interface that allows you to control and configure the display remotely. The web interface runs on port 5001 and provides real-time display preview, configuration management, and on-demand display controls.
### Installing the Web Interface Service
1. Make the install script executable:
```bash
chmod +x install_web_service.sh
```
2. Run the install script with sudo:
```bash
sudo ./install_web_service.sh
```
The script will:
- Copy the web service file to `/etc/systemd/system/`
- Enable the service to start on boot
- Start the service immediately
- Show the service status
### Web Interface Configuration
The web interface can be configured to start automatically with the main display service:
1. In `config/config.json`, ensure the web interface autostart is enabled:
```json
{
"web_display_autostart": true
}
```
2. The web interface will now start automatically when:
- The system boots
- The `web_display_autostart` setting is `true` in your config
### Accessing the Web Interface
Once installed, you can access the web interface at:
```
http://your-pi-ip:5001
```
### Managing the Web Interface Service
```bash
# Check service status
sudo systemctl status ledmatrix-web.service
# View logs
journalctl -u ledmatrix-web.service -f
# Stop the service
sudo systemctl stop ledmatrix-web.service
# Start the service
sudo systemctl start ledmatrix-web.service
# Disable autostart
sudo systemctl disable ledmatrix-web.service
# Enable autostart
sudo systemctl enable ledmatrix-web.service
```
### Web Interface Features
- **Real-time Display Preview**: See what's currently displayed on the LED matrix
- **Configuration Management**: Edit settings through a web interface
- **On-Demand Controls**: Start specific displays (weather, stocks, sports) on demand
- **Service Management**: Start/stop the main display service
- **System Controls**: Restart, update code, and manage the system
- **API Metrics**: Monitor API usage and system performance
- **Logs**: View system logs in real-time
### Troubleshooting Web Interface
**Web Interface Not Accessible After Restart:**
1. Check if the web service is running: `sudo systemctl status ledmatrix-web.service`
2. Verify the service is enabled: `sudo systemctl is-enabled ledmatrix-web.service`
3. Check logs for errors: `journalctl -u ledmatrix-web.service -f`
4. Ensure `web_display_autostart` is set to `true` in `config/config.json`
**Port 5001 Not Accessible:**
1. Check if the service is running on the correct port
2. Verify firewall settings allow access to port 5001
3. Check if another service is using port 5001
**Service Fails to Start:**
1. Check Python dependencies are installed
2. Verify the virtual environment is set up correctly
3. Check file permissions and ownership
-----------------------------------------------------------------------------------
@@ -575,6 +1042,30 @@ Example: NHL Configuration"nhl_scoreboard": {
}
```
## Date Format Configuration
You can customize the date format for upcoming games across all sports displays. The `use_short_date_format` setting in `config/config.json` under the `display` section controls this behavior.
- **`"use_short_date_format": true`**: Displays dates in a short, numerical format (e.g., "8/30").
- **`"use_short_date_format": false`** (Default): Displays dates in a more descriptive format with an ordinal suffix (e.g., "Aug 30th").
### Example `config.json`
```json
"display": {
"hardware": {
...
},
"runtime": {
...
},
"display_durations": {
...
},
"use_short_date_format": false // Set to true for "8/30" format
},
```
## Project Structure
@@ -651,6 +1142,31 @@ The LEDMatrix system includes a comprehensive scoreboard display system with thr
- Automatic game switching
- Built-in caching to reduce API calls
- Test mode for development
## API Usage Tracking
The LEDMatrix system includes a built-in API usage counter that tracks API calls made by various managers in a 24-hour rolling window. This feature helps monitor API usage and ensure compliance with rate limits.
### API Counter Features
- **Real-time Tracking**: Counts API calls for weather, stocks, sports, and news data
- **24-hour Window**: Rolling window that resets every 24 hours
- **Web Interface Integration**: View current usage in the Overview tab of the web interface
- **Forecast Display**: Shows predicted API usage based on current configuration
- **Automatic Reset**: Counters automatically reset when the 24-hour window expires
### Tracked API Calls
- **Weather**: OpenWeatherMap API calls (geocoding + weather data)
- **Stocks**: Yahoo Finance API calls for stock and crypto data
- **Sports**: ESPN API calls for various sports leagues (NHL, NBA, MLB, NFL, etc.)
- **News**: RSS feed and news API calls
### Accessing API Metrics
1. Open the web interface in your browser
2. Navigate to the **Overview** tab
3. Scroll down to the "API Calls (24h window)" section
4. Click "Refresh API Metrics" to update the display
The counter shows both actual usage and forecasted usage based on your current configuration settings.
## Caching System
The LEDMatrix system includes a robust caching mechanism to optimize API calls and reduce network traffic:
@@ -685,15 +1201,104 @@ The LEDMatrix system includes a robust caching mechanism to optimize API calls a
## Final Notes
- Most configuration is done via config/config.json
- Refresh intervals for sports/weather/stocks are customizable
- A caching system reduces API strain and helps ensure the display doesnt hammer external services (and ruin it for everyone)
- A caching system reduces API strain and helps ensure the display doesn't hammer external services (and ruin it for everyone)
- Font files should be placed in assets/fonts/
- You can test each module individually for debugging
##What's Next?
- Adding MQTT/HomeAssistant integration
- Gambling odds?
- Building a user-friendly UI for easier configuration
- Gambling odds (done!)
- Building a user-friendly UI for easier configuration (done!)
### If youve read this far — thanks!
## Granting Passwordless Sudo Access for Web Interface Actions
The web interface needs to run certain commands with `sudo` (e.g., `reboot`, `systemctl start/stop/enable/disable ledmatrix.service`, `python display_controller.py`). To avoid needing to enter a password for these actions through the web UI, you can configure the `sudoers` file to allow the user running the Flask application to execute these specific commands without a password.
1. Shortcut to automate the below steps:
```chmod +x configure_web_sudo.sh```
then
```./configure_web_sudo.sh```
Manual Method:
**WARNING: Be very careful when editing the `sudoers` file. Incorrect syntax can lock you out of `sudo` access.**
1. **Identify the user:** Determine which user is running the `web_interface.py` script. Often, this might be the default user like `pi` on a Raspberry Pi, or a dedicated user you've set up.
2. **Open the sudoers file for editing:**
Use the `visudo` command, which locks the sudoers file and checks for syntax errors before saving.
```bash
sudo visudo
```
3. **Add the permission lines:**
Scroll to the bottom of the file and add lines similar to the following. Replace `your_flask_user` with the actual username running the Flask application.
You'll need to specify the full paths to the commands. You can find these using the `which` command (e.g., `which python`, `which systemctl`, `which reboot`).
```sudoers
# Allow your_flask_user to run specific commands without a password for the LED Matrix web interface
your_flask_user ALL=(ALL) NOPASSWD: /sbin/reboot
your_flask_user ALL=(ALL) NOPASSWD: /bin/systemctl start ledmatrix.service
your_flask_user ALL=(ALL) NOPASSWD: /bin/systemctl stop ledmatrix.service
your_flask_user ALL=(ALL) NOPASSWD: /bin/systemctl enable ledmatrix.service
your_flask_user ALL=(ALL) NOPASSWD: /bin/systemctl disable ledmatrix.service
your_flask_user ALL=(ALL) NOPASSWD: /usr/bin/python /path/to/your/display_controller.py
your_flask_user ALL=(ALL) NOPASSWD: /bin/bash /path/to/your/stop_display.sh
```
* **Important:**
* Replace `your_flask_user` with the correct username.
* Replace `/path/to/your/display_controller.py` with the absolute path to your `display_controller.py` script.
* Replace `/path/to/your/stop_display.sh` with the absolute path to your `stop_display.sh` script.
* The paths to `python`, `systemctl`, `reboot`, and `bash` might vary slightly depending on your system. Use `which <command>` to find the correct paths if you are unsure. For example, `which python` might output `/usr/bin/python3` - use that full path.
4. **Save and Exit:**
* If you're in `nano` (common default for `visudo`): `Ctrl+X`, then `Y` to confirm, then `Enter`.
* If you're in `vim`: `Esc`, then `:wq`, then `Enter`.
`visudo` will check the syntax. If there's an error, it will prompt you to re-edit or quit. **Do not quit without fixing errors if possible.**
5. **Test:**
After saving, try running one of the specified commands as `your_flask_user` using `sudo` from a regular terminal session to ensure it doesn't ask for a password.
For example:
```bash
sudo -u your_flask_user sudo /sbin/reboot
```
(Don't actually reboot if you're not ready, but it should proceed without a password prompt if configured correctly. You can test with a less disruptive command like `sudo -u your_flask_user sudo systemctl status ledmatrix.service`).
**Security Considerations:**
Granting passwordless `sudo` access, even for specific commands, has security implications. Ensure that the scripts and commands allowed are secure and cannot be easily exploited. The web interface itself should also be secured if it's exposed to untrusted networks.
For `display_controller.py` and `stop_display.sh`, ensure their file permissions restrict write access to only trusted users, preventing unauthorized modification of these scripts which run with elevated privileges.
## Web Interface V2 (simplified quick start)
### 1) un the helper (does the above and starts the server):
```
python3 start_web_v2.py
```
### 2) Start the web UI v2
```
python web_interface_v2.py
```
### 3) Autostart (optional)
Set `"web_display_autostart": true` in `config/config.json`.
Ensure your systemd service (or launcher) calls `start_web_conditionally.py`.
### 4) Permissions (optional but recommended)
- Add the service user to `systemd-journal` for viewing logs without sudo.
- Configure passwordless sudo for actions (start/stop service, reboot, shutdown) if desired.
- Required for web Ui actions, look in the section above for the commands to run (chmod +x configure_web_sudo.sh & ./configure_web_sudo.sh)
### 5) Old web UI (v1)
The project now defaults to Web UI v2. The v1 interface can be ignored.
An LED matrix display system that provides real-time information display capabilities for various data sources. The system is highly configurable and supports multiple display modes that can be enabled or disabled based on user preferences.
### If you've read this far — thanks!

162
add_custom_feed_example.py Normal file
View File

@@ -0,0 +1,162 @@
#!/usr/bin/env python3
import json
import sys
import os
def add_custom_feed(feed_name, feed_url):
"""Add a custom RSS feed to the news manager configuration"""
config_path = "config/config.json"
try:
# Load current config
with open(config_path, 'r') as f:
config = json.load(f)
# Ensure news_manager section exists
if 'news_manager' not in config:
print("ERROR: News manager configuration not found!")
return False
# Add custom feed
if 'custom_feeds' not in config['news_manager']:
config['news_manager']['custom_feeds'] = {}
config['news_manager']['custom_feeds'][feed_name] = feed_url
# Add to enabled feeds if not already there
if feed_name not in config['news_manager']['enabled_feeds']:
config['news_manager']['enabled_feeds'].append(feed_name)
# Save updated config
with open(config_path, 'w') as f:
json.dump(config, f, indent=4)
print(f"SUCCESS: Successfully added custom feed: {feed_name}")
print(f" URL: {feed_url}")
print(f" Feed is now enabled and will appear in rotation")
return True
except Exception as e:
print(f"ERROR: Error adding custom feed: {e}")
return False
def list_all_feeds():
"""List all available feeds (default + custom)"""
config_path = "config/config.json"
try:
with open(config_path, 'r') as f:
config = json.load(f)
news_config = config.get('news_manager', {})
custom_feeds = news_config.get('custom_feeds', {})
enabled_feeds = news_config.get('enabled_feeds', [])
print("\nAvailable News Feeds:")
print("=" * 50)
# Default feeds (hardcoded in news_manager.py)
default_feeds = {
'MLB': 'http://espn.com/espn/rss/mlb/news',
'NFL': 'http://espn.go.com/espn/rss/nfl/news',
'NCAA FB': 'https://www.espn.com/espn/rss/ncf/news',
'NHL': 'https://www.espn.com/espn/rss/nhl/news',
'NBA': 'https://www.espn.com/espn/rss/nba/news',
'TOP SPORTS': 'https://www.espn.com/espn/rss/news',
'BIG10': 'https://www.espn.com/blog/feed?blog=bigten',
'NCAA': 'https://www.espn.com/espn/rss/ncaa/news',
'Other': 'https://www.coveringthecorner.com/rss/current.xml'
}
print("\nDefault Sports Feeds:")
for name, url in default_feeds.items():
status = "ENABLED" if name in enabled_feeds else "DISABLED"
print(f" {name}: {status}")
print(f" {url}")
if custom_feeds:
print("\nCustom Feeds:")
for name, url in custom_feeds.items():
status = "ENABLED" if name in enabled_feeds else "DISABLED"
print(f" {name}: {status}")
print(f" {url}")
else:
print("\nCustom Feeds: None added yet")
print(f"\nCurrently Enabled Feeds: {len(enabled_feeds)}")
print(f" {', '.join(enabled_feeds)}")
except Exception as e:
print(f"ERROR: Error listing feeds: {e}")
def remove_custom_feed(feed_name):
"""Remove a custom RSS feed"""
config_path = "config/config.json"
try:
with open(config_path, 'r') as f:
config = json.load(f)
news_config = config.get('news_manager', {})
custom_feeds = news_config.get('custom_feeds', {})
if feed_name not in custom_feeds:
print(f"ERROR: Custom feed '{feed_name}' not found!")
return False
# Remove from custom feeds
del config['news_manager']['custom_feeds'][feed_name]
# Remove from enabled feeds if present
if feed_name in config['news_manager']['enabled_feeds']:
config['news_manager']['enabled_feeds'].remove(feed_name)
# Save updated config
with open(config_path, 'w') as f:
json.dump(config, f, indent=4)
print(f"SUCCESS: Successfully removed custom feed: {feed_name}")
return True
except Exception as e:
print(f"ERROR: Error removing custom feed: {e}")
return False
def main():
if len(sys.argv) < 2:
print("Usage:")
print(" python3 add_custom_feed_example.py list")
print(" python3 add_custom_feed_example.py add <feed_name> <feed_url>")
print(" python3 add_custom_feed_example.py remove <feed_name>")
print("\nExamples:")
print(" # Add F1 news feed")
print(" python3 add_custom_feed_example.py add 'F1' 'https://www.espn.com/espn/rss/rpm/news'")
print(" # Add BBC F1 feed")
print(" python3 add_custom_feed_example.py add 'BBC F1' 'http://feeds.bbci.co.uk/sport/formula1/rss.xml'")
print(" # Add personal blog feed")
print(" python3 add_custom_feed_example.py add 'My Blog' 'https://myblog.com/rss.xml'")
return
command = sys.argv[1].lower()
if command == 'list':
list_all_feeds()
elif command == 'add':
if len(sys.argv) != 4:
print("ERROR: Usage: python3 add_custom_feed_example.py add <feed_name> <feed_url>")
return
feed_name = sys.argv[2]
feed_url = sys.argv[3]
add_custom_feed(feed_name, feed_url)
elif command == 'remove':
if len(sys.argv) != 3:
print("ERROR: Usage: python3 add_custom_feed_example.py remove <feed_name>")
return
feed_name = sys.argv[2]
remove_custom_feed(feed_name)
else:
print(f"ERROR: Unknown command: {command}")
if __name__ == "__main__":
main()

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

21422
assets/fonts/5x8.bdf Normal file

File diff suppressed because it is too large Load Diff

20768
assets/fonts/6x9.bdf Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

10184
assets/fonts/MatrixLight8X.bdf Normal file

File diff suppressed because it is too large Load Diff

9993
assets/fonts/ic8x8u.bdf Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 402 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

View File

@@ -0,0 +1,409 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" width="154.45552389996837" height="145.0" viewBox="0 0 673 631.8" style="enable-background:new 0 0 673 631.8;" xml:space="preserve" preserveAspectRatio="xMidYMid meet">
<style type="text/css">
.st0{fill:#FFFFFF;}
.st1{fill:#231F20;}
.st2{fill:#D31245;}
.st3{fill:#6A737B;}
.st4{fill:#B0B7BC;}
.st5{fill:#A68462;}
.st6{fill:#F6A2B6;}
.st7{fill:#C4CED4;}
</style>
<path class="st0" d="M671.6,122.8c-1.5-3.9-3.9-7.1-6.5-9.8c-5.3-5.4-13.1-10.4-22.4-15.1c-18.4-9.3-45.1-18.6-75.1-26.5
c-52.7-13.9-116.4-23.9-163.8-22.9l-0.2-1.2c0.1-12.8-8.4-27.7-18.3-31.9c-1.2-0.5-2.5-0.9-4.1-1.3l-2.1-1.5c-0.9-1.2-2-2.2-3.1-3.1
c-0.9-0.7-1.9-1.4-4.1-3.2c-4.8-7-12.7-7.9-21.2-3.8l-2.3,1l-1.8-0.2c-2.5-0.2-6.2-0.3-10.8,1.1l-1.6,0.5l-4.8,2
c-9.1-0.1-19.8,0.3-31.7,1.7c-14.9,2.5-31.9,8.3-45,15.9c-4.2,2.4-8.1,5.8-11,9.4c-2.2,2.1-4.5,4.9-6,7.9c-1.9,3.9-3.4,8.2-4.6,12.5
l-0.7,2.6l-2.6,0.8c-2.2,0.7-4.5,1.2-7,1.6c-27.6,4-51.8,10.3-53.9,10.8c-12.5,3.1-15.6,16.3-10,24.8c-6,2-12.2,4.2-18.5,6.4
l-17.8,6.4l-4.2,101.7l39.4-4.9l-8.7,18.5l-5,4.4l1.8,1.4l-4,7.7l-4.6-1.4c-0.4,1.1-0.6,2.3-0.8,3.7c-0.1,1-0.1,1.9-0.1,3.2
l-0.8,2.3c-1.6,2.6-3,5-4.7,7.4c-1.5,2.2-2.8,3.6-4.1,4.7l-4,3.2l-0.9,5c-0.9,5.1-1.2,9.9-0.4,15.5l-0.6,2.6
c-3.9,7-7.9,14.9-12,24.7c-3.6,4.9-7.2,11.7-8.5,19.1l-40.2,85.4l-21.6,22.4L0,495.8l27.6,15.9L10,631.8l86.9-48.2l40.3-95.3
c20.3-6.7,46.4-13.7,74.9-20.5l-22.7-11.4c-5.9,1.5-11.6,3-17.1,4.4c-0.3,0.1-0.7,0.2-1,0.3c-2.4,0.6-4.8,1.3-7.1,1.9
c-0.3,0.1-0.6,0.2-0.9,0.3c-5.1,1.4-10,2.9-14.6,4.2c-0.5,0.1-0.9,0.3-1.4,0.4c-1.7,0.5-3.4,1.1-5,1.6c-0.6,0.2-1.3,0.4-1.9,0.6
c-1.5,0.5-2.9,0.9-4.4,1.4c-0.6,0.2-1.1,0.4-1.7,0.6c-1.9,0.6-3.8,1.3-5.5,1.9L87.3,572l-42.6,23.6l-15.5,8.6l15.6-107L22,484.1
l24.5-41.3l22.8-23.6l21.2-44.9l21.6-46c1-4.6,3.4-9.1,6-12.8l16-34.1c-1.5-4.5-1.6-8.9-0.6-14.2c5.5-4.5,8.5-10.4,12.4-16.5
c0.4-0.7,1.6-0.4,2.7-0.2l1.6-3.5c-0.8-2.2-2.4-4.1-2.1-6.8c0.2-1.8,1.5-2.8,1.7-4.6c2.2,0.1,4.2-0.2,6.1-0.7l24.2-51.5l-47.3,5.9
l2.9-70c25.3-9,48.2-16.3,69.9-22.3c-1-0.4-2-0.7-3-1.1c-11.7-3.9-31.2-7.4-32.3-7.6c-0.1,0-0.1,0-0.1,0c0,0-0.1,0-0.1,0
c-0.3,0-0.6-0.1-0.9-0.3c-0.1,0-0.1-0.1-0.2-0.1c-0.2-0.1-0.4-0.2-0.6-0.4c-0.1-0.1-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.3-0.3-0.4
c0-0.1-0.1-0.2-0.1-0.3c0-0.1-0.1-0.3-0.1-0.4c0-0.1,0-0.2,0-0.3c0-0.1,0-0.3,0.1-0.4c0-0.1,0.1-0.2,0.1-0.3
c0.1-0.2,0.3-0.5,0.5-0.7c0.1-0.1,0.2-0.2,0.4-0.3c0.1-0.1,0.2-0.2,0.4-0.2c0.1,0,0.2-0.1,0.3-0.1c0.1,0,0.1-0.1,0.1-0.1
c0.1-0.1,0.3-0.1,0.4-0.1c0,0,0,0,0,0c0,0,0.1,0,0.2,0c0.3-0.1,1-0.3,2.3-0.6c0,0,0.1,0,0.1,0c0.5-0.1,1-0.3,1.6-0.4
c0.1,0,0.2-0.1,0.3-0.1c0.5-0.1,1.1-0.3,1.7-0.4c0.2-0.1,0.5-0.1,0.8-0.2c0.6-0.1,1.2-0.3,1.8-0.4c0.3-0.1,0.6-0.1,0.9-0.2
c0.7-0.2,1.3-0.3,2.1-0.5c0.3-0.1,0.7-0.2,1-0.2c0.7-0.2,1.5-0.3,2.2-0.5c0.4-0.1,0.8-0.2,1.2-0.3c0.8-0.2,1.6-0.3,2.4-0.5
c0.5-0.1,0.9-0.2,1.4-0.3c0.8-0.2,1.7-0.4,2.6-0.5c0.5-0.1,1-0.2,1.4-0.3c0.9-0.2,1.8-0.4,2.8-0.6c0.5-0.1,1-0.2,1.5-0.3
c1-0.2,1.9-0.4,2.9-0.6c0.5-0.1,1-0.2,1.6-0.3c1-0.2,2.1-0.4,3.2-0.6c0.5-0.1,1-0.2,1.5-0.3c1.1-0.2,2.2-0.4,3.4-0.6
c0.5-0.1,1-0.2,1.5-0.3c1.2-0.2,2.4-0.4,3.7-0.6c0.4-0.1,0.9-0.2,1.3-0.2c1.7-0.3,3.4-0.5,5.1-0.8c7.8-1.1,14-3.6,19.7-6.3
c1.2-6.9,2.9-13.6,5.5-18.7c0.9-1.7,2.2-3.3,3.9-4.7c1.8-2.6,4.4-4.9,7.6-6.8c10-5.8,22.5-10.5,34.3-13.1c0-0.1,0.1-0.1,0.1-0.2
c1.6-2.3,4.8-3.6,9.3-3.8c5.5-0.3,8.7,0.3,10.6,1.6c7.5-0.4,14.3-0.4,20.2-0.2l5.7-3.3c4.4-1.4,7.1,0.1,11.6-0.4
c3.6-0.4,8.2-5.4,9.7-2c1.6,3.7,6.2,3.4,7.9,7.1c2,4.4,6.4,3.9,10.8,5.8c8,3.4,10.7,14.7,9,21.2c2.8,5.6,5.1,11.8,6.9,18
c82-2,219.9,30.9,253.6,59.9c2.3,2,4.1,3.9,5.4,5.8c0,0,0,0,0,0c0.4,0.6,0.7,1.2,1,1.8c0.1,0.1,0.1,0.3,0.2,0.4
c0.2,0.5,0.4,0.9,0.5,1.4c0.1,0.2,0.1,0.3,0.2,0.5c0.1,0.4,0.2,0.8,0.2,1.2c0,0.2,0.1,0.4,0.1,0.6c0,0.4,0,0.8,0,1.2
c0,0.2,0,0.4,0,0.5c-0.1,0.6-0.2,1.1-0.4,1.7c0,0-4.9,73.8-34,91.6l-5.8,3.4c3.3,3.6,6.1,7.5,8.4,11.8c13.4-8.8,22.7-22.8,28.4-34.6
c5.9-12.3,9.8-25.5,12.5-36.7c4.2-18.1,5.9-34.6,6.5-40.5C673.8,130.8,672.7,125.9,671.6,122.8z"/>
<path class="st0" d="M471.4,322.2c0.1,5.1-0.7,11.5-2.1,18.5c2.1,0.1,4.3,0.1,6.4,0.3c16.9-3.7,34.8-7.9,43.7-8.2
c28.1,0.4,74.1,3,74.1,3s3.6,3.2,8.1,8.5h0c1.4,1.7,3,3.7,4.5,5.8c0.2,0.2,0.3,0.5,0.5,0.8c0.6,0.8,1.1,1.6,1.7,2.4
c0.3,0.4,0.5,0.8,0.8,1.2c0.5,0.7,0.9,1.5,1.4,2.2c0.3,0.5,0.5,0.9,0.8,1.4c0.4,0.7,0.8,1.5,1.2,2.3c0.3,0.5,0.5,1,0.8,1.6
c0.4,0.8,0.7,1.6,1.1,2.4c0.2,0.5,0.4,1,0.7,1.6c0.4,0.9,0.7,1.8,1,2.7c0.2,0.5,0.3,0.9,0.5,1.4c0.4,1.4,0.8,2.8,1.1,4.2v0
c1.4,7.1,1.2,14.6-2,22.1c-0.5,1.2-1.1,2.3-1.9,3.5c-0.2,0.4-0.5,0.8-0.8,1.2c-0.5,0.8-1.1,1.6-1.6,2.4c-0.4,0.5-0.8,1-1.1,1.4
c-0.6,0.7-1.1,1.5-1.8,2.2c-0.4,0.5-0.9,1-1.4,1.5c-0.6,0.7-1.3,1.4-2,2.1c-0.5,0.6-1.1,1.1-1.7,1.6c-0.7,0.7-1.5,1.4-2.3,2.1
c-0.6,0.6-1.2,1.1-1.9,1.7c-0.8,0.7-1.6,1.4-2.5,2.1c-0.7,0.6-1.4,1.1-2.1,1.7c-0.9,0.7-1.8,1.5-2.8,2.2c-0.7,0.6-1.5,1.1-2.3,1.7
c-1,0.7-2,1.5-3,2.2c-0.8,0.6-1.6,1.1-2.4,1.7c-1.1,0.8-2.2,1.5-3.3,2.2c-0.9,0.6-1.7,1.2-2.6,1.7c-1.2,0.8-2.4,1.5-3.6,2.3
c-0.9,0.6-1.8,1.1-2.7,1.7c-1.3,0.8-2.5,1.6-3.9,2.4c-0.9,0.6-1.8,1.1-2.8,1.7c-1.4,0.8-2.8,1.6-4.2,2.4c-0.9,0.5-1.8,1.1-2.8,1.6
c-1.5,0.9-3.1,1.7-4.6,2.6c-0.9,0.5-1.8,1-2.7,1.5c-1.7,0.9-3.4,1.9-5.2,2.8c-0.8,0.4-1.6,0.9-2.4,1.3c-2,1.1-4.1,2.1-6.1,3.2
c-0.6,0.3-1.2,0.6-1.8,0.9c-5.5,2.8-11.1,5.6-17,8.4c-0.3,0.1-0.6,0.3-0.9,0.4c-2.6,1.3-5.2,2.5-7.9,3.7c-0.8,0.4-1.5,0.7-2.3,1.1
c-2.2,1-4.5,2.1-6.7,3.1c-1,0.4-1.9,0.9-2.9,1.3c-2.1,0.9-4.2,1.9-6.4,2.9c-1.1,0.5-2.1,0.9-3.2,1.4c-2.1,0.9-4.1,1.8-6.2,2.7
l-3.5,1.5c-2.1,0.9-4.1,1.8-6.2,2.7c-1.2,0.5-2.4,1-3.6,1.5c-2.1,0.9-4.1,1.7-6.2,2.6c-1.3,0.5-2.5,1-3.8,1.6
c-2.1,0.9-4.2,1.7-6.2,2.6c-1.3,0.5-2.6,1-3.8,1.6c-2.1,0.8-4.2,1.7-6.3,2.5c-1.3,0.5-2.6,1-3.8,1.5c-2.1,0.8-4.3,1.7-6.4,2.5
c-1.3,0.5-2.6,1-3.8,1.5c-2.2,0.9-4.4,1.7-6.6,2.6c-1.2,0.5-2.5,0.9-3.7,1.4c-2.3,0.9-4.6,1.7-6.8,2.6c-1.2,0.5-2.4,0.9-3.6,1.4
c-2.4,0.9-4.7,1.8-7.1,2.7c-1.1,0.4-2.2,0.8-3.4,1.3c-2.6,0.9-5.1,1.9-7.7,2.8c-0.9,0.4-1.9,0.7-2.9,1.1c-2.8,1-5.7,2.1-8.5,3.1
c-0.7,0.3-1.4,0.5-2.1,0.7c-7.1,2.6-14.2,5.1-21.3,7.6c-0.2,0.1-0.5,0.2-0.7,0.2c-3.3,1.1-6.5,2.3-9.8,3.4c-0.9,0.3-1.9,0.6-2.8,1
c-2.5,0.9-5.1,1.7-7.6,2.6c-1.3,0.4-2.5,0.9-3.8,1.3c-2.2,0.8-4.4,1.5-6.6,2.2c-1.4,0.5-2.8,0.9-4.2,1.4c-2,0.7-4,1.4-6,2
c-1.5,0.5-3,1-4.5,1.5c-1.9,0.6-3.7,1.2-5.6,1.9c-1.6,0.5-3.1,1-4.7,1.6c-1.8,0.6-3.5,1.2-5.3,1.7c-1.6,0.5-3.2,1-4.8,1.6
c-1.7,0.6-3.4,1.1-5.1,1.6c-1.6,0.5-3.3,1.1-4.9,1.6c-1.6,0.5-3.1,1-4.7,1.5c-1.7,0.5-3.3,1.1-5,1.6c-1.5,0.5-3.1,1-4.6,1.4
c-1.7,0.5-3.3,1.1-5,1.6c-1.4,0.4-2.9,0.9-4.3,1.3c-1.7,0.5-3.4,1.1-5.1,1.6c-1.3,0.4-2.6,0.8-3.9,1.2c-1.8,0.6-3.5,1.1-5.3,1.6
c-1.1,0.3-2.2,0.7-3.3,1c-1.9,0.6-3.8,1.1-5.6,1.7c-0.9,0.3-1.8,0.6-2.7,0.8c-2,0.6-4,1.2-5.9,1.8c-0.6,0.2-1.3,0.4-1.9,0.6
c-2.2,0.6-4.3,1.3-6.4,1.9c0,0,0,0,0,0c-13.2,3.9-25.3,7.2-36,10.1c-0.1,0-0.2,0-0.3,0.1c-1.9,0.5-3.8,1-5.6,1.5
c-0.3,0.1-0.6,0.1-0.8,0.2c-1.7,0.5-3.4,0.9-5.1,1.3c-0.3,0.1-0.6,0.1-0.9,0.2c-1.6,0.4-3.2,0.8-4.7,1.2c-0.3,0.1-0.6,0.2-0.9,0.2
c-1.5,0.4-3,0.7-4.4,1.1c-0.3,0.1-0.5,0.1-0.8,0.2c-1.4,0.3-2.7,0.7-4,0.9c-0.2,0.1-0.5,0.1-0.7,0.2c-1.3,0.3-2.5,0.6-3.7,0.8
c-0.2,0-0.4,0.1-0.6,0.1c-1.2,0.3-2.3,0.5-3.4,0.7c-0.2,0-0.3,0.1-0.5,0.1c-1.1,0.2-2.1,0.4-3.1,0.6c-0.1,0-0.2,0-0.3,0.1
c-1,0.2-1.9,0.3-2.7,0.5h0c-3.6,0.6-6,0.7-6.9,0.4c-32-11.5,63.8-64.5,113.1-96.5c0.5,5.4-4.4,13.2,2.5,15.4c0.1,0,0.1,0.1,0.2,0.1
c0.3,0.1,0.8,0.2,1.3,0.2c0.1,0,0.2,0,0.3,0c0.6,0,1.2,0,1.9,0h0.1c0.7-0.1,1.6-0.1,2.5-0.2c0.1,0,0.1,0,0.2,0c1-0.1,2-0.3,3.2-0.5
c43.7-7.2,212.1-63.5,255.1-96.4c1.2-0.9,2.1-1.7,2.8-2.5c1.4-1.5,1.9-2.8,1.7-3.9c-17.5,4.2-31.5,6.7-31.5,6.7
c-13.2,7.2-30.1,14.8-48.7,22.3c0.1,0.3,0.1,0.6,0.1,0.6c0,0-0.1,0-0.1,0.1c0-0.2-0.1-0.4-0.1-0.6c-12.5,5.1-25.8,10.1-39.2,14.9
c0,0-0.1,0-0.1,0c-30.2,10.9-60.9,20.7-84.9,27.8c-0.6,0.2-1.2,0.4-1.8,0.5c-1.2,0.4-2.4,0.7-3.6,1c-0.8,0.2-1.7,0.5-2.5,0.7
c-1,0.3-2,0.6-3.1,0.9c-0.9,0.3-1.9,0.5-2.8,0.8c-0.9,0.2-1.7,0.5-2.5,0.7c-1,0.3-2,0.6-3,0.8c-0.7,0.2-1.4,0.4-2,0.6
c0,0-0.1,0-0.1,0c-0.7,0.2-1.4,0.4-2.1,0.6c-1.7,0.5-3.3,0.9-4.8,1.3c-0.1,0-0.1,0-0.2,0.1c-6.7,1.7-11.7,2.8-14.4,3.2l-0.5-0.3
c0,0.1,0,0.1,0,0.1c0,0.1,0,0.2-0.1,0.3c-3.5,0.8-6.2,1.3-7.9,1.6c0.2-1.7,0.3-3.8,0.2-5.9l-16-8.1l-2.1,1.4
c-25,16.2-61.6,37.7-88.1,56.6c-12.6,9-27.1,20.3-35.9,32.2c-16.8,22.7-9.4,37.5,2.5,41.8c12.5,4.2,132.2-29.9,244.3-70
c58.4-20.9,117.5-44.3,164.1-67.4c23.4-11.6,44.6-23.5,61.5-35.3c15.4-10.8,32.8-25.9,41.2-44.3c6-14,5.8-26.4,4-35.1
c-1.8-8.9-5.7-16.7-9.5-22.9c-3.9-6.2-8.2-11.4-11.5-15c-3.4-3.7-7.9-7.6-7.9-7.6s-49.7-2.8-78-3.2c-3.7,0.2-9.1,0.9-15.2,2
l26.2-15.3c-4.4-1.2-11.2-3.2-19.3-5.6L471.4,322.2L471.4,322.2z M522.2,167c-0.1-0.5-0.3-1-0.5-1.4v0c-0.3-0.5-0.6-1-1-1.4
c0-0.1-0.1-0.1-0.2-0.2c-0.3-0.4-0.8-0.8-1.2-1.1c-0.1-0.1-0.3-0.2-0.4-0.3c-0.6-0.4-1.2-0.8-2-1.2c-16.3-8.1-38.2-11.5-77.3-12
c-0.1,0.6-0.2,1.1-0.3,1.6c-0.1,0.5-0.1,0.9-0.3,1.4c-0.4,1.3-0.8,2.6-1.3,3.9c-0.3,0.6-0.5,1.1-0.7,1.6c0,0.1-0.1,0.1-0.1,0.2
c0.3,0.1,0.5,0.2,0.7,0.4c0.4,0.2,0.7,0.4,1.1,0.6c0.3,0.2,0.6,0.4,1,0.6c0.3,0.2,0.6,0.4,0.9,0.6c0.3,0.2,0.6,0.4,0.8,0.6
c0.3,0.2,0.6,0.4,0.8,0.6c0.2,0.2,0.5,0.3,0.7,0.5c0.4,0.4,0.8,0.7,1.2,1c0.2,0.2,0.4,0.4,0.6,0.6c0.2,0.2,0.3,0.3,0.5,0.5
c0.2,0.2,0.4,0.4,0.6,0.6c0.1,0.1,0.2,0.3,0.3,0.4c0.2,0.2,0.4,0.5,0.5,0.7c0,0.1,0.1,0.1,0.1,0.2c0.4,0.6,0.7,1.1,1,1.6
c5.4-1.7,11.3-2.4,17.1-1.5c11.7,1.9,18.5,14,17.4,27.7l38.2-20.1C520.3,173.6,523,170.6,522.2,167z"/>
<path class="st1" d="M244.2,515.2c-6.9-2.2-2-10-2.5-15.4c-49.3,32-145.1,85-113.1,96.5c0.9,0.3,3.3,0.1,6.9-0.4
C140.4,577.8,202.4,541.6,244.2,515.2z M257.4,524c15.3,4.8,217-60.4,264.6-96.9c9.1-6.9,4.3-10.4-10.2-11.2
c-0.7,0.8-1.6,1.6-2.8,2.5c-43,33-211.3,89.3-255.1,96.4C253.2,518.8,252.7,522.6,257.4,524z M44.7,498.4l0.2-1.1l-15.6,107
l15.5-8.6l13.1-89.7L44.7,498.4z M148.9,128.2c25.8-9.2,49.1-16.6,71.1-22.6c-3.8-2.2-7.3-4.5-9.7-6.2c-0.9-0.6-2.1-1.3-3.7-1.9
c-0.2-0.1-0.5-0.2-0.7-0.3c-21.7,6-44.6,13.3-69.9,22.3l-2.9,70l47.3-5.9l-33.9,4.3L148.9,128.2z M398.1,76.5c0.6,0,1.1-0.1,1.7-0.1
c2.8-1.3,4.6-2.1,4.7-2.1c0.7-0.4,2.3-0.1,2.9,0.6c0.4,0.4,0.8,0.8,1.2,1.2c73.9-1.9,193.2,24.7,240.8,51.2
c-33.7-29-171.6-61.9-253.6-59.9c0.8,2.6,1.5,5.2,2.1,7.8C397.8,75.4,397.9,75.9,398.1,76.5z M59.6,451.5l22.8-23.6l22.7-48.2
l-4.4-16.3c-0.3-4.2,1.3-7.7,4.5-10.5l14.3-3.9l1.2-2.5c-0.6-0.4-1.2-0.8-1.8-1.2c-6.8-4.4-8.1-10.8-6.7-17l-21.6,46l-21.2,44.9
l-22.8,23.6L22,484.1l22.8,13.1l-9.3-5.3L59.6,451.5z M134.8,283.1c-0.2-0.6-0.4-1.1-0.5-1.7l-16,34.1c0.4-0.6,0.8-1.1,1.2-1.6
C123.7,303.2,128.8,292.9,134.8,283.1z M150.8,250c0.1-1.1-0.1-2.1-0.4-3l-1.6,3.5C149.8,250.7,150.8,250.8,150.8,250z M184.3,211.2
l9-19l-18.2,2.3L156.1,235c2.9-0.6,5.6-1.7,8.2-2.7C169.2,224.3,176.1,217.4,184.3,211.2z M532.4,341.5c22.6,0.3,56.7,2.1,69.2,2.7
c-4.5-5.3-8.1-8.5-8.1-8.5s-46-2.6-74.1-3c-8.9,0.4-26.7,4.5-43.7,8.2c11.5,0.6,22.9,2,34.2,4.1
C519.1,343.2,527.3,341.7,532.4,341.5z M529.8,170c-2.4-1.1-5-2.1-7.7-3c0.8,3.5-1.9,6.6-1.9,6.6l-38.2,20.1c-0.1,1-0.2,2-0.3,3
c0,0.3-0.2,0.6-0.3,1c0.1,0.3,0.1,0.6,0.2,0.9c0.1,0.4,0.1,0.8,0.2,1.3c0.1,0.9,0.2,1.7,0.2,2.6c0,0.4,0,0.8,0,1.2
c0,0.9-0.1,1.9-0.1,2.8c0,0.3,0,0.7-0.1,1c-0.1,0.8-0.2,1.6-0.3,2.4l51.8-27.4C533.3,182.3,539.7,175.1,529.8,170z"/>
<path class="st2" d="M433.4,441c18.6-7.5,35.5-15.1,48.7-22.3c0,0,14-2.4,31.5-6.7c0.2,1.1-0.3,2.4-1.7,3.9
c14.4,0.9,19.3,4.4,10.2,11.2c-47.6,36.5-249.3,101.8-264.6,96.9c-4.7-1.4-4.2-5.2-3.4-9.2c-1.2,0.2-2.2,0.3-3.2,0.5
c-0.1,0-0.1,0-0.2,0c-0.9,0.1-1.8,0.2-2.5,0.2h-0.1c-0.7,0-1.3,0-1.9,0c-0.1,0-0.2,0-0.3,0c-0.5,0-1-0.1-1.3-0.2
c-0.1,0-0.1-0.1-0.2-0.1c-41.8,26.4-103.8,62.5-108.7,80.7h0c0.8-0.1,1.8-0.3,2.7-0.5c0.1,0,0.2,0,0.3-0.1c0.9-0.2,2-0.4,3.1-0.6
c0.1,0,0.3-0.1,0.5-0.1c1.1-0.2,2.2-0.5,3.4-0.7c0.2,0,0.4-0.1,0.6-0.1c1.2-0.2,2.4-0.5,3.7-0.8c0.2-0.1,0.5-0.1,0.7-0.2
c1.3-0.3,2.6-0.6,4-0.9c0.3-0.1,0.5-0.1,0.8-0.2c1.4-0.3,2.9-0.7,4.4-1.1c0.3-0.1,0.6-0.1,0.9-0.2c1.5-0.4,3.1-0.8,4.7-1.2
c0.3-0.1,0.6-0.1,0.9-0.2c1.7-0.4,3.4-0.9,5.1-1.3c0.3-0.1,0.6-0.1,0.8-0.2c1.8-0.5,3.7-1,5.6-1.5c0.1,0,0.2-0.1,0.3-0.1
c10.7-2.9,22.8-6.3,36-10.1c0,0,0,0,0,0c2.1-0.6,4.3-1.3,6.4-1.9c0.6-0.2,1.3-0.4,1.9-0.6c1.9-0.6,3.9-1.2,5.9-1.8
c0.9-0.3,1.8-0.5,2.7-0.8c1.9-0.6,3.7-1.1,5.6-1.7c1.1-0.3,2.2-0.7,3.3-1c1.7-0.5,3.5-1.1,5.3-1.6c1.3-0.4,2.6-0.8,3.9-1.2
c1.7-0.5,3.4-1,5.1-1.6c1.4-0.4,2.9-0.9,4.3-1.3c1.6-0.5,3.3-1,5-1.6c1.5-0.5,3.1-1,4.6-1.4c1.7-0.5,3.3-1.1,5-1.6
c1.6-0.5,3.1-1,4.7-1.5c1.6-0.5,3.3-1.1,4.9-1.6c1.7-0.6,3.4-1.1,5.1-1.6c1.6-0.5,3.2-1,4.8-1.6c1.8-0.6,3.5-1.1,5.3-1.7
c1.6-0.5,3.1-1,4.7-1.6c1.9-0.6,3.7-1.2,5.6-1.9c1.5-0.5,3-1,4.5-1.5c2-0.7,4-1.3,6-2c1.4-0.5,2.8-0.9,4.2-1.4
c2.2-0.7,4.4-1.5,6.6-2.2c1.3-0.4,2.5-0.9,3.8-1.3c2.5-0.9,5.1-1.7,7.6-2.6c0.9-0.3,1.9-0.6,2.8-1c3.3-1.1,6.5-2.3,9.8-3.4
c0.2-0.1,0.5-0.2,0.7-0.2c7.1-2.5,14.2-5,21.3-7.6c0.7-0.2,1.4-0.5,2.1-0.7c2.8-1,5.7-2.1,8.5-3.1c0.9-0.4,1.9-0.7,2.9-1.1
c2.6-0.9,5.1-1.9,7.7-2.8c1.1-0.4,2.2-0.8,3.4-1.3c2.4-0.9,4.7-1.8,7.1-2.7c1.2-0.5,2.4-0.9,3.6-1.4c2.3-0.9,4.6-1.7,6.8-2.6
c1.2-0.5,2.5-0.9,3.7-1.4c2.2-0.9,4.4-1.7,6.6-2.6c1.3-0.5,2.6-1,3.8-1.5c2.2-0.9,4.3-1.7,6.4-2.5c1.3-0.5,2.6-1,3.8-1.5
c2.1-0.9,4.2-1.7,6.3-2.5c1.3-0.5,2.6-1,3.8-1.6c2.1-0.9,4.2-1.7,6.2-2.6c1.3-0.5,2.5-1,3.8-1.6c2.1-0.9,4.2-1.7,6.2-2.6
c1.2-0.5,2.4-1,3.6-1.5c2.1-0.9,4.2-1.8,6.2-2.7c1.2-0.5,2.4-1,3.5-1.5c2.1-0.9,4.2-1.8,6.2-2.7c1.1-0.5,2.1-0.9,3.2-1.4
c2.1-0.9,4.3-1.9,6.4-2.9c1-0.4,1.9-0.9,2.9-1.3c2.3-1,4.5-2.1,6.7-3.1c0.8-0.4,1.5-0.7,2.3-1.1c2.7-1.2,5.3-2.5,7.9-3.7
c0.3-0.1,0.6-0.3,0.9-0.4c5.8-2.8,11.5-5.6,17-8.4c0.6-0.3,1.2-0.6,1.8-0.9c2.1-1.1,4.1-2.1,6.1-3.2c0.8-0.4,1.6-0.9,2.4-1.3
c1.7-0.9,3.5-1.9,5.2-2.8c0.9-0.5,1.8-1,2.7-1.5c1.6-0.9,3.1-1.7,4.6-2.6c0.9-0.5,1.8-1.1,2.8-1.6c1.4-0.8,2.8-1.6,4.2-2.4
c0.9-0.6,1.8-1.1,2.8-1.7c1.3-0.8,2.6-1.6,3.9-2.4c0.9-0.6,1.8-1.1,2.7-1.7c1.2-0.8,2.4-1.5,3.6-2.3c0.9-0.6,1.7-1.1,2.6-1.7
c1.1-0.7,2.2-1.5,3.3-2.2c0.8-0.6,1.6-1.1,2.4-1.7c1-0.7,2-1.5,3-2.2c0.8-0.6,1.5-1.1,2.3-1.7c0.9-0.7,1.9-1.5,2.8-2.2
c0.7-0.6,1.4-1.1,2.1-1.7c0.9-0.7,1.7-1.4,2.5-2.1c0.6-0.6,1.3-1.1,1.9-1.7c0.8-0.7,1.5-1.4,2.3-2.1c0.6-0.6,1.1-1.1,1.7-1.6
c0.7-0.7,1.4-1.4,2-2.1c0.5-0.5,1-1,1.4-1.5c0.6-0.7,1.2-1.5,1.8-2.2c0.4-0.5,0.8-0.9,1.1-1.4c0.6-0.8,1.1-1.6,1.6-2.4
c0.3-0.4,0.6-0.8,0.8-1.2c0.7-1.2,1.3-2.3,1.9-3.5c3.2-7.5,3.4-15,2-22.1v0c-0.3-1.4-0.7-2.8-1.1-4.2c-0.1-0.5-0.3-0.9-0.5-1.4
c-0.3-0.9-0.6-1.8-1-2.7c-0.2-0.5-0.4-1.1-0.7-1.6c-0.3-0.8-0.7-1.6-1.1-2.4c-0.3-0.5-0.5-1-0.8-1.6c-0.4-0.8-0.8-1.5-1.2-2.3
c-0.3-0.5-0.5-0.9-0.8-1.4c-0.4-0.8-0.9-1.5-1.4-2.2c-0.3-0.4-0.5-0.8-0.8-1.2c-0.5-0.8-1.1-1.6-1.7-2.4c-0.2-0.3-0.4-0.5-0.5-0.8
c-1.5-2.1-3.1-4.1-4.5-5.8h0c-12.6-0.7-46.7-2.4-69.2-2.7c-5.1,0.2-13.2,1.7-22.5,3.6c-11.3-2.1-22.7-3.5-34.2-4.1
c-2.1-0.1-4.3-0.2-6.4-0.3c-1.2,5.9-2.9,12.1-5,18.2c0.5,2.2,1.5,4.3,2.8,6.4c0.3,0.6,0,1.5-0.8,2l-6.9,4.6
c-0.1,0.1-0.2,0.1-0.4,0.1c-4.8,10.6-10.6,19.4-16.6,23c-1.9,2-3.7,3.7-5.4,3.7c-1.5,0-2.9-0.2-4.3-0.5c-0.5-0.1-1-0.2-1.5-0.3
c-0.4,0-0.9,0-1.3,0c-4.8,12.6-9,23.8-11.8,32.5c1,2.5,0.6,6.5,0.8,8.1c0.3,3,0.7,5.4,1,7.5C420.1,446.2,420.7,446.1,433.4,441
C433.3,441,433.4,441,433.4,441L433.4,441z"/>
<path class="st2" d="M265.6,494.7l0.5,0.3c2.7-0.4,7.7-1.5,14.4-3.2c1.2-4.7,2.9-9,6.2-11.2c0-18.3-27.5-16.5-80-56.1
c-0.7,0.9-1.5,1.9-2.2,2.9c-0.9,1.1-1.7,2.3-2.6,3.4c-0.9,1.1-1.9,2.1-3.1,3.1c-2.3,1.9-5.2,3.1-9,3.1c-4.3-0.1-7-0.8-11.3-1.1
c-0.7,0-1.4-0.6-1.5-1.2c-0.4-2.8-0.7-4.6-0.9-6.9c-1-0.4-2-0.8-3-1.4c-1,1.6-1.9,3.2-2.7,4.9c-0.2,0.4-0.9,0.8-1.5,0.8l-7.5-0.1
c-0.9,0-1.6-0.6-1.6-1.4c0-6.9-1.3-12.1-6.9-16.4c-0.3-0.2-0.6-0.7-0.6-1l0-3.6c-4.1-3.7-7.6-8.3-10.6-13.5l-1.4,3.3l-15.9,4.4
l-9.6-4.6l-9.1-17.1l-0.6-2.2l-22.7,48.2l-22.8,23.6l-24,40.4l9.3,5.3l-0.2,1.1l13.2,7.6l-13.1,89.7L87.3,572l41.5-97.9
c1.8-0.6,3.6-1.3,5.5-1.9c0.6-0.2,1.1-0.4,1.7-0.6c1.4-0.5,2.9-0.9,4.4-1.4c0.6-0.2,1.3-0.4,1.9-0.6c1.6-0.5,3.3-1,5-1.6
c0.5-0.1,0.9-0.3,1.4-0.4c4.6-1.4,9.5-2.8,14.6-4.2c0.3-0.1,0.6-0.2,0.9-0.3c2.3-0.6,4.7-1.3,7.1-1.9c0.4-0.1,0.7-0.2,1-0.3
c5.5-1.5,11.2-3,17.1-4.4l22.7,11.4l29.6,14.9l16,8.1L265.6,494.7z M193.3,192.2l-9,19c10.7-7.9,23.7-14.4,37.9-19.8l4.6-7.9
c-5.3-4.3-10.2-8.9-10.1-16.3c0.1-3.8,0.8-6.9,2-9.7c0.1-0.3,0.1-0.5,0.3-0.8c0.5-1.1,1.1-2.2,1.7-3.2c-5.8,2.5-15.5,6.5-15.2-1.7
c0-1,1.6-3.8,3.5-6.9c0-0.1,0-0.1-0.1-0.1c-0.2-0.5-0.2-1.2,0.1-1.7c0.1-0.1,0.2-0.2,0.3-0.3c0-0.1,0-0.3,0.1-0.4l-0.2-0.2
c-0.2-0.2-0.4-0.8-0.3-1.3c0-0.2,0.1-0.4,0.2-0.6c0-0.1,0.1-0.3,0.1-0.4c0.1-0.2,0.1-0.3,0.1-0.4c0-0.2,0-0.5-0.1-0.7
c-0.1-0.2-0.1-0.3-0.2-0.5c-0.1-0.2-0.2-0.5-0.3-0.7c-0.1-0.4-0.1-1.1,0.1-1.5c0.2-0.3,0.3-0.6,0.3-1.4c0-0.6,0.4-1.1,0.7-1.2
l1.7-0.2c0.4-1,1-1.4,1.5-1.6c0.4-0.1,0.7-0.2,1.1-0.3l0-0.5c0-0.5,0.4-1.1,0.7-1.3c0.1-0.1,0.2-0.1,0.3-0.2
c0.1-0.1,0.3-0.3,0.4-0.4c0.3-0.3,0.7-0.7,1.7-0.8c0.7,0,1.2,0.4,1.3,0.8c0.1,0.1,0.1,0.2,0.1,0.3c0.2,0.1,0.5,0.2,0.7,0.4
c4.5-6.5,9.6-13.5,13.6-17.8c-3.8-1.4-8.5-3.8-12.9-6.4c-22,6.1-45.3,13.5-71.1,22.6l-2.5,59.5l33.9-4.3l-5.2,11L193.3,192.2z
M408.4,76c5.5,5.5,15.2,12.1,24.8,18c2.8,1.7,1.4,5.2-1.8,4.5c-10.9-2.4-23.7-4.4-33.6,0.6c-0.6,0.6-1.1,1.3-1.7,1.9l29.6-2.7
c0.6-0.1,2,0.6,2.3,1.2l8.8,15.1c1.6,2.8-1,5.1-3.6,3.2c-2.5-1.8-6.1-3.4-9.2-3.9c-0.6-0.1-1.3-0.2-1.9-0.2c-0.2,0-0.4,0-0.6,0
c-0.5,0-1,0-1.5,0.1c0,0-0.1,0-0.1,0c0,0,0,0-0.1,0c0.2,0.1,0.4,0.2,0.6,0.3c0.3,0.1,0.6,0.3,0.8,0.4c0.4,0.2,0.8,0.5,1.1,0.7
c0.3,0.2,0.6,0.4,0.9,0.6c0.4,0.3,0.9,0.6,1.3,0.9c0.3,0.2,0.5,0.4,0.8,0.6c0.5,0.4,1,0.9,1.6,1.4c0.2,0.2,0.4,0.3,0.6,0.5
c0.7,0.7,1.4,1.4,2.1,2.2c0.1,0.2,0.3,0.3,0.4,0.5c0.6,0.6,1.1,1.3,1.6,2c0.2,0.3,0.5,0.6,0.7,1c0.4,0.6,0.8,1.1,1.2,1.7
c0.3,0.4,0.5,0.8,0.7,1.2c0.4,0.6,0.7,1.1,1,1.7c0.2,0.4,0.5,0.9,0.7,1.3c0.3,0.6,0.6,1.2,0.8,1.8c0.2,0.5,0.4,1,0.6,1.5
c0.2,0.6,0.4,1.2,0.6,1.9c0.2,0.5,0.3,1,0.4,1.5c0.2,0.6,0.3,1.3,0.4,1.9c0.1,0.5,0.2,1.1,0.3,1.6c0.1,0.7,0.2,1.3,0.2,2
c0,0.6,0.1,1.1,0.1,1.6c0,0.7,0,1.5-0.1,2.2c0,0.5,0,1.1-0.1,1.6c0,0.3-0.1,0.6-0.1,0.8c39.1,0.6,61,4,77.3,12
c0.8,0.4,1.4,0.8,2,1.2c0.2,0.1,0.3,0.2,0.4,0.3c0.5,0.4,0.9,0.8,1.2,1.1c0.1,0.1,0.1,0.1,0.2,0.2c0.4,0.5,0.7,1,1,1.4v0
c0.2,0.5,0.4,1,0.5,1.4c2.6,0.9,5.2,1.8,7.7,3c9.9,5.1,3.4,12.3,3.4,12.3l-51.8,27.4c-0.1,0.5-0.1,0.9-0.2,1.4
c-0.5,3.3-1.5,8-2.8,13.3c0.6,1.3,1.3,2.6,1.8,4c8.9,4.4,17.5,8.2,21,9.8l-5.3-8c0,0,12.7-0.5,18.3-0.4l-9.9-10.3l-7.4-7.7l-2.4-2.6
l-0.7-0.7c-0.4-0.6,0.3-0.6,0.3-0.6c10.6,0.1,68.4,11.1,83.1,14.4c7.3,1.6,21.1,5.2,28.4,6.3l0.9,0.3c3.7,2.6,6.9,5.4,9.8,8.6
l5.8-3.4c29-17.8,34-91.6,34-91.6c0.2-0.5,0.3-1.1,0.4-1.7c0-0.2,0-0.4,0-0.5c0-0.4,0-0.8,0-1.2c0-0.2,0-0.4-0.1-0.6
c0-0.4-0.1-0.8-0.2-1.2c0-0.2-0.1-0.3-0.2-0.5c-0.1-0.5-0.3-0.9-0.5-1.4c-0.1-0.1-0.1-0.3-0.2-0.4c-0.3-0.6-0.6-1.2-1-1.8
c0,0,0,0,0,0c-1.3-1.9-3.1-3.9-5.4-5.8C601.6,100.7,482.3,74.2,408.4,76z M121,348.5l7,3.1c0-0.3-0.1-0.6-0.1-0.9
c-0.6-0.2-1.1-0.5-1.7-0.8c-1.9-1-3.8-2.3-5.6-3.4l-1.2,2.5L121,348.5z M398.2,77.1c0.6-0.2,1-0.4,1.5-0.7c-0.6,0-1.1,0.1-1.7,0.1
C398.1,76.7,398.1,76.9,398.2,77.1z M486.7,285.4c-3.3,13.1-9.5,28.4-15.3,34.9c0,0.6,0,1.3,0,2l46.6-27.3
C508.7,292.2,497.7,288.8,486.7,285.4z"/>
<path class="st1" d="M627.1,253.2c-4.7-10-11.2-18.1-20.3-24.5l-0.9-0.3c-7.4-1.1-21.1-4.7-28.4-6.3c-14.8-3.3-72.6-14.3-83.1-14.4
c0,0-0.7,0-0.3,0.6l0.7,0.7l2.4,2.6l7.4,7.7l9.9,10.3c-5.6-0.1-18.3,0.4-18.3,0.4l5.3,8c-3.6-1.6-12.1-5.4-21-9.8
c-0.6-1.3-1.2-2.7-1.8-4c1.3-5.2,2.3-10,2.8-13.3c0.2-1.3,0.4-2.5,0.5-3.8c0-0.3,0-0.6,0.1-1c0.1-0.9,0.1-1.9,0.1-2.8
c0-0.4,0-0.8,0-1.2c0-0.9-0.1-1.7-0.2-2.6c0-0.4-0.1-0.9-0.2-1.3c0-0.3-0.1-0.6-0.2-0.9c0.1-0.4,0.3-0.7,0.3-1
c2.4-14.9-4.5-28.7-17-30.7c-5.8-0.9-11.7-0.2-17.1,1.5c-0.3-0.5-0.7-1.1-1-1.6c-0.1-0.1-0.1-0.1-0.1-0.2c-0.2-0.2-0.4-0.5-0.5-0.7
c-0.1-0.1-0.2-0.3-0.3-0.4c-0.2-0.2-0.4-0.4-0.6-0.6c-0.1-0.1-0.3-0.3-0.5-0.5c-0.2-0.2-0.4-0.4-0.6-0.6c-0.4-0.4-0.8-0.7-1.2-1
c-0.2-0.2-0.4-0.3-0.7-0.5c-0.3-0.2-0.5-0.4-0.8-0.6c-0.3-0.2-0.5-0.4-0.8-0.6c-0.3-0.2-0.6-0.4-0.9-0.6c-0.3-0.2-0.6-0.4-1-0.6
c-0.3-0.2-0.7-0.4-1.1-0.6c-0.2-0.1-0.5-0.3-0.7-0.4c0-0.1,0.1-0.1,0.1-0.2c0.3-0.5,0.5-1.1,0.7-1.6c0.6-1.3,1-2.6,1.3-3.9
c0.1-0.5,0.2-0.9,0.3-1.4c0.2-0.8,0.3-1.6,0.4-2.5c0.1-0.5,0.1-1.1,0.1-1.6c0-0.7,0.1-1.5,0.1-2.2c0-0.6-0.1-1.1-0.1-1.6
c0-0.7-0.1-1.4-0.2-2c-0.1-0.5-0.2-1.1-0.3-1.6c-0.1-0.7-0.3-1.3-0.4-1.9c-0.1-0.5-0.3-1-0.4-1.5c-0.2-0.6-0.4-1.2-0.6-1.9
c-0.2-0.5-0.4-1-0.6-1.5c-0.3-0.6-0.6-1.2-0.8-1.8c-0.2-0.4-0.4-0.9-0.7-1.3c-0.3-0.6-0.7-1.2-1-1.7c-0.2-0.4-0.5-0.8-0.7-1.2
c-0.4-0.6-0.8-1.2-1.2-1.7c-0.2-0.3-0.5-0.6-0.7-1c-0.5-0.7-1.1-1.3-1.6-2c-0.1-0.2-0.3-0.3-0.4-0.5c-0.7-0.8-1.4-1.5-2.1-2.2
c-0.2-0.2-0.4-0.3-0.6-0.5c-0.5-0.5-1.1-1-1.6-1.4c-0.3-0.2-0.5-0.4-0.8-0.6c-0.4-0.3-0.9-0.7-1.3-0.9c-0.3-0.2-0.6-0.4-0.9-0.6
c-0.4-0.2-0.8-0.5-1.1-0.7c-0.3-0.2-0.6-0.3-0.8-0.4c-0.2-0.1-0.4-0.2-0.6-0.3c0,0,0,0,0.1,0c0,0,0.1,0,0.1,0c0.5-0.1,1-0.1,1.5-0.1
c0.2,0,0.4,0,0.6,0c0.7,0,1.3,0.1,1.9,0.2c3,0.5,6.7,2,9.2,3.9c2.6,1.9,5.2-0.4,3.6-3.2L428,99.4c-0.3-0.5-1.7-1.3-2.3-1.2
l-29.6,2.7c0.6-0.6,1.2-1.3,1.7-1.9c9.9-4.9,22.7-3,33.6-0.6c3.2,0.7,4.6-2.7,1.8-4.5c-10.3-6.4-20.8-13.5-26-19.2
c-0.6-0.6-2.1-0.9-2.9-0.6c-0.1,0-2.4,1.2-6.2,2.8c-0.2-0.9-0.4-1.6-0.5-2c-2.1-8.7-5.1-17.8-9-25.8c1.8-6.5-0.9-17.8-9-21.2
c-4.4-1.9-8.8-1.4-10.8-5.8c-1.6-3.7-6.2-3.4-7.9-7.1c-1.5-3.4-6.1,1.5-9.7,2c-4.5,0.5-7.2-0.9-11.6,0.4l-5.7,3.3
c-5.9-0.3-12.7-0.3-20.2,0.2c-1.9-1.3-5.1-1.9-10.6-1.6c-4.5,0.3-7.7,1.5-9.3,3.8c0,0.1-0.1,0.1-0.1,0.2
c-11.8,2.6-24.3,7.3-34.3,13.1c-3.2,1.9-5.8,4.2-7.6,6.8c-1.7,1.5-3.1,3.1-3.9,4.7c-2.5,5-4.3,11.7-5.5,18.7
c-5.7,2.7-11.9,5.2-19.7,6.3c-1.7,0.2-3.4,0.5-5.1,0.8c-0.4,0.1-0.9,0.1-1.3,0.2c-1.2,0.2-2.5,0.4-3.7,0.6c-0.5,0.1-1,0.2-1.5,0.3
c-1.1,0.2-2.3,0.4-3.4,0.6c-0.5,0.1-1,0.2-1.5,0.3c-1.1,0.2-2.1,0.4-3.2,0.6c-0.5,0.1-1.1,0.2-1.6,0.3c-1,0.2-2,0.4-2.9,0.6
c-0.5,0.1-1,0.2-1.5,0.3c-0.9,0.2-1.9,0.4-2.8,0.6c-0.5,0.1-1,0.2-1.4,0.3c-0.9,0.2-1.7,0.4-2.6,0.5c-0.5,0.1-0.9,0.2-1.4,0.3
c-0.8,0.2-1.6,0.4-2.4,0.5c-0.4,0.1-0.8,0.2-1.2,0.3c-0.8,0.2-1.5,0.3-2.2,0.5c-0.4,0.1-0.7,0.2-1,0.2c-0.7,0.2-1.4,0.3-2.1,0.5
c-0.3,0.1-0.6,0.1-0.9,0.2c-0.6,0.1-1.2,0.3-1.8,0.4c-0.3,0.1-0.5,0.1-0.8,0.2c-0.6,0.1-1.2,0.3-1.7,0.4c-0.1,0-0.2,0.1-0.3,0.1
c-0.6,0.1-1.2,0.3-1.6,0.4c0,0-0.1,0-0.1,0c-1.3,0.3-2,0.5-2.3,0.6c-0.1,0-0.2,0-0.2,0c0,0,0,0,0,0c-0.1,0-0.3,0.1-0.4,0.1
c0,0-0.1,0.1-0.1,0.1c-0.1,0-0.2,0.1-0.3,0.1c-0.1,0.1-0.3,0.2-0.4,0.2c-0.1,0.1-0.3,0.2-0.4,0.3c-0.2,0.2-0.4,0.4-0.5,0.7
c0,0.1-0.1,0.2-0.1,0.3c0,0.1-0.1,0.3-0.1,0.4c0,0.1,0,0.2,0,0.3c0,0.2,0.1,0.3,0.1,0.4c0,0.1,0.1,0.2,0.1,0.3
c0.1,0.2,0.2,0.3,0.3,0.4c0.1,0.1,0.1,0.2,0.2,0.2c0.2,0.2,0.4,0.3,0.6,0.4c0.1,0,0.1,0.1,0.2,0.1c0.3,0.1,0.6,0.2,0.9,0.3
c0,0,0.1,0,0.1,0c0,0,0.1,0,0.1,0c1.1,0.2,20.6,3.7,32.3,7.6c1.3,0.4,2.6,0.9,3.7,1.3c1.6,0.6,2.8,1.3,3.7,1.9
c5.3,3.8,15.7,10.1,22.6,12.6c-4,4.3-9.1,11.3-13.6,17.8c-0.2-0.1-0.5-0.3-0.7-0.4c0-0.1,0-0.2-0.1-0.3c-0.2-0.4-0.6-0.9-1.3-0.8
c-0.9,0.1-1.4,0.5-1.7,0.8c-0.1,0.1-0.3,0.3-0.4,0.4c-0.1,0.1-0.2,0.2-0.3,0.2c-0.3,0.2-0.6,0.8-0.7,1.3l0,0.5
c-0.4,0.1-0.8,0.1-1.1,0.3c-0.5,0.2-1.1,0.6-1.5,1.6l-1.7,0.2c-0.3,0-0.6,0.6-0.7,1.2c-0.1,0.8-0.1,1.1-0.3,1.4
c-0.2,0.4-0.3,1.1-0.1,1.5c0.1,0.3,0.2,0.5,0.3,0.7c0.1,0.2,0.1,0.3,0.2,0.5c0.1,0.3,0.1,0.4,0.1,0.7c0,0.1,0,0.1-0.1,0.4
c-0.1,0.1-0.1,0.3-0.1,0.4c-0.1,0.2-0.1,0.4-0.2,0.6c-0.1,0.5,0,1.1,0.3,1.3l0.2,0.2c0,0.1-0.1,0.3-0.1,0.4
c-0.1,0.1-0.2,0.2-0.3,0.3c-0.3,0.4-0.3,1.2-0.1,1.7c0,0.1,0,0.1,0.1,0.1c-1.9,3.1-3.4,5.8-3.5,6.9c-0.4,8.3,9.4,4.2,15.2,1.7
c-0.6,1.1-1.2,2.1-1.7,3.2c-0.1,0.2-0.2,0.5-0.3,0.8c-1.2,2.8-2,5.9-2,9.7c-0.1,7.4,4.8,12,10.1,16.3l-4.6,7.9
c-25.3,9.5-46.6,22.6-58,40.8c-4.3,1.7-8.6,3.5-14.2,3.4c-0.2,1.8-1.5,2.8-1.7,4.6c-0.4,3.8,2.9,5.9,2.5,9.8
c-0.2,1.8-4.1-0.7-4.8,0.7c-3.9,6.1-6.9,12-12.4,16.5c-1.1,6-0.9,10.7,1.2,15.9c-6,9.8-11.1,20.1-15.3,30.7
c-6.8,8.5-13.1,23.2-0.5,31.4c2,1.3,4.8,3.2,7.4,4.6c0.6,0.3,1.1,0.6,1.7,0.8c0,0.3,0.1,0.6,0.1,0.9l-7-3.1l-15.8,4.3
c-3.2,2.8-4.8,6.3-4.5,10.5l4.9,18.5l9.1,17.1l9.6,4.6l15.9-4.4l1.4-3.3c3,5.2,6.5,9.8,10.6,13.5l0,3.6c0,0.3,0.3,0.8,0.6,1
c5.6,4.3,6.9,9.5,6.9,16.4c0,0.8,0.7,1.4,1.6,1.4l7.5,0.1c0.6,0,1.3-0.4,1.5-0.8c0.9-1.8,1.7-3.3,2.7-4.9c1,0.6,2,1,3,1.4
c0.2,2.3,0.5,4.1,0.9,6.9c0.1,0.6,0.8,1.2,1.5,1.2c4.3,0.3,7,1,11.3,1.1c3.8,0.1,6.7-1.2,9-3.1c1.1-0.9,2.2-2,3.1-3.1
c0.9-1.1,1.8-2.2,2.6-3.4c0.8-1,1.5-2,2.2-2.9c52.5,39.6,80,37.8,80,56.1c-3.3,2.3-5,6.6-6.2,11.2c2.2-0.6,4.5-1.2,7.1-1.9
c0-1.4,0.1-2.5,0.9-3c3.4-2.3,3.5-15.4,3-19.9c24.4-10.6,60.8-28.4,90.5-32.9c0.3,6.8,3.2,16,4.6,24.6v0c0.4-0.1,0.7-0.3,1.1-0.4
c0.1,0,0.2-0.1,0.4-0.1c2-0.7,4-1.4,6-2.1v0c-1.5-9.2-3.9-18.3-4.2-22.8c1.5-0.1,3.1-0.2,4.5-0.2c8.5-0.1,14.6,0.9,17.7,1.6
c0.1,3.7,0.7,8.9,1.9,14c2.1-0.8,4.1-1.6,6.1-2.3c-0.4-2.1-0.7-4.5-1-7.5c-0.2-1.6,0.2-5.6-0.8-8.1c2.8-8.7,6.9-19.9,11.8-32.5
c0.4,0,0.9,0,1.3,0c0.7,0.1,1.3,0.2,1.5,0.3c1.4,0.3,2.8,0.5,4.3,0.5c1.8,0,3.5-1.7,5.4-3.7c6-3.5,11.7-12.3,16.6-23
c0.1-0.1,0.3-0.1,0.4-0.1l6.9-4.6c0.8-0.5,1.2-1.5,0.8-2c-1.4-2.2-2.3-4.3-2.8-6.4c4.9-14.3,7.7-29.3,7.1-38.7
c5.8-6.5,12.1-21.8,15.3-34.9c26,8.1,52.3,15.9,55.7,16.4c10.7,1.7,21.8,4.2,32.9,5.4c11.1,1.3,22.3,1.3,33.2-1.9
c1.7-0.5,6.1-6.5,10.1-12.4c4.1-6,8.1-12.3,9.2-13.7c0.1-0.1,0.1-0.2,0.3-0.8l0.2-1.2c0.2-0.9,0.4-2.1,0.5-3.2
c0.3-2.4,0.6-4.8,0.8-5.5C629.6,268.5,627.1,253.2,627.1,253.2z"/>
<path class="st3" d="M269,415.1c-0.6-0.3-1.2-0.5-1.8-0.8c-0.7,0.2-1.4,0.5-2,0.7c-0.1,0.3-0.3,0.6-0.4,0.8
c-0.6,1.1-1.1,2.1-1.7,3.1c-1.3,2.1-3,3.9-6.3,4.9c-2.3,0.7-4.5,0.6-6.5,0.1c-1-0.3-1.9-0.6-2.8-1c-0.9-0.4-1.7-0.8-2.6-1.2
c-0.4-0.2-0.7-0.3-1.1-0.5c-3.6,0.7-6.4,1.1-8.9,1.2c0,2.1,0.2,4.8-0.7,5c-0.8,0.2-1.6,0.5-2.4,0.6c-0.9,0.2-1.9,0.3-3,0.3
c-0.5,0-1-0.1-1.4-0.2c40.7,22.9,61.1,29.4,61.9,29.1c0,0,34.8-11.3,48.1-17.4c12-5.4,29.2-10.9,46.1-13c1.4-1.8,3.8-1.7,5.4-0.6
c8.1-0.6,16-0.4,23,1.1c2.6-4,4.7-8.6,6.9-13.8c2.3-5.3,4.5-10.6,6.8-15.9c-2.6-0.3-5.2-0.9-7.6-1.7c-1-0.4-3-0.9-5.8-1.5
c-1.7,1.3-3.4,2.5-5.3,3.8c0,0.2,0,0.4-0.1,0.6c-0.1,0.7-0.3,1.5-0.6,2.2c-0.6,1.5-1.6,3.1-3.5,4.4c-0.9,0.6-1.9,1.1-2.9,1.6
c-0.9,0.4-1.7,0.7-2.5,1c-0.8,0.3-1.6-1-2.4-2.4c-3.3,1.9-7,3.7-10.9,5.4c-0.4,0.5-0.7,1-1.1,1.6c-0.6,0.8-1.4,1.7-2.1,2.5
c-1.6,1.6-3.5,3.1-6,3.9c-3.5,1.2-6,0.8-8.1,0c-0.4-0.2-0.9-0.4-1.3-0.6c-3.9,0.8-7.6,1.6-11,2.4c-1.5,0.8-3.2,1.7-5.2,2.9
c-1.2,0.7-6.2,3.1-7.3,3.3l-9.5,0.7c-3.6,1.4-6.8,2.8-9.7,4.1c-5.3,4.9-13.2,12.8-14.4,12.8c-2.1,0.1-2.8-2.2-4.8-2.1
c-2.1,0.1-2.5,2.5-4.6,2.6c-5.4,0.3-7.9-4.2-10.2-9c-2.5-2.7-4.3-6.2-6-9.7c-1.4-1.3-3.1-2-5.3-2.1c-0.1-1.8-1.3-2.9-1.4-4.7
c0-0.7-0.2-1.3-0.5-1.8c-0.7-0.2-1.3-0.5-1.9-0.8C271.9,416.6,270.5,415.9,269,415.1L269,415.1z M221.2,423
c-0.1-0.1-0.1-0.2-0.2-0.3c-0.9,0-1.9,0.1-3,0.2c1.9,1.1,3.8,2.2,5.7,3.2c-0.4-0.4-0.9-0.9-1.2-1.4C222,424.2,221.6,423.6,221.2,423
z M388,458.1c-0.1,0.1-0.3,0.1-0.4,0.1C387.8,458.2,387.9,458.1,388,458.1z M412.1,434.6c-3.1-0.7-9.2-1.7-17.7-1.6
c-1.5,0-3,0.1-4.5,0.2c0.3,4.5,2.7,13.6,4.2,22.8c6.7-2.4,13.4-4.9,19.9-7.4C412.9,443.5,412.2,438.3,412.1,434.6z"/>
<path class="st3" d="M381.9,434c-29.7,4.5-66.1,22.3-90.5,32.9c0.4,4.5,0.4,17.6-3,19.9c-0.8,0.5-0.9,1.6-0.9,3
c23.5-6.4,61.2-17.9,99-31.3C385.2,450,382.3,440.8,381.9,434z"/>
<path class="st4" d="M213.3,308.1c1.2-0.9,3.7-2.6,7.4-4.4c-1.8-0.3-3.5-0.8-5.2-1.4c-28.6-10-66.5-5.6-91.9,17.4
c-1.4,1.3-3.2,3-4.8,4.7c0,0.1,0,0,0,0c-2.5,5.1-3,10.6,3.3,14.7c2,1.3,3.6,2.5,4.8,3.4c-0.7-5.7-1-10.6-0.1-11.6
c0,0,0.1-0.1,0.2-0.1c0.1-0.2,0.1-0.5,0.3-0.7C127.3,330.1,159.7,296.1,213.3,308.1z"/>
<path class="st4" d="M220.7,294.1c5.9,2.2,9.3,3.8,10.8,5c0.1,0.1,0.1,0.2,0.2,0.2c5.6-1.7,12.5-3.1,20.4-3.5c0.8,0,1.6,0,2.4-0.1
c3.8-1.9,7.7-3.7,11.5-5.6c0.2-3.7,0.6-7.2,1.3-10.1c-0.5-4.2-1.1-8.3-1.9-12.4l-12.3,6.1l-1.9-47.6c-1.5,1-3.3,1.8-5.3,2.1
c-0.5-1.9,1.1-3.2,1.2-5.4c0.1-5.9-9.6-6.1-9.5-12c0-0.7,0.2-1.3,0.3-1.9l-25.3-0.8l3.8-6.6c-15.7,7.3-29.4,16.3-39.5,27.6
c0.7,0,1.4-0.1,2.2,0c2.1,0.2,2.4,2.6,4.4,2.8c2.1,0.2,2.9-2.1,4.9-1.9c1.8,0.2,2.8,1.5,4.6,1.7l-0.1,11.9c-1.1,4.9-4,6.7-5.9,11.3
c-1.6,3.7,0.6,10.8-3.5,10.3c-4.4-0.5-6.7,4-11.1,3.6c-5.3-0.6-7.3,4-11.5,7.1c-10,7.6-20.4,8.4-26.5,18.8c1.6-1,3.2-1.9,4.7-2.7
C157.2,283,184.6,280.4,220.7,294.1z M381.3,308.1c-2.6-0.6-4.6-0.9-5.8-1c1,1.1,1.6,2,2,2.7c2.7,0.9,11.6,4.3,22,11.1
c12.4,8.1,27.1,21.1,35.8,40.9l0.3,1c0.1-0.1,0.2-0.2,0.4-0.3c1.4-1.1,2.8-2,4.1-2.9c0.6-0.5,1.3-0.9,1.9-1.4
C430.8,333.9,407.3,314.1,381.3,308.1z M387.7,294.4c6.8,1.1,16,3.2,25.8,7.7c14.4,6.6,29.9,18.4,40.5,38.7c0.1-0.1,0.1-0.2,0.2-0.3
c0.3-0.8,0.6-1.6,0.8-2.6c0.2-1,0.4-2,0.6-3c0.3-1.6,2.5-2.4,3.1-1.1l1.6,3.6c3.9-15.4,4.5-25.5,4.6-25.6c0,0,6.2-6.7,12.3-15.2
c2.5-3.4,3.8-8,4.4-12.8c-13.3-4.2-26.1-8.3-35.3-11.3c-21,7.3-41.4,14.4-61.7,21.4C385.5,294.1,386.5,294.2,387.7,294.4z"/>
<path class="st2" d="M123.5,319.8c25.4-23.1,63.4-27.5,91.9-17.4c1.9,0.7,3.7,1.1,5.2,1.4c2.9-1.5,6.6-3,11.1-4.4
c-0.1-0.1-0.1-0.2-0.2-0.2c-1.5-1.2-4.9-2.8-10.8-5c-36.1-13.7-63.5-11.1-81.3-1.9c-1.5,0.8-3,1.7-4.7,2.7c-0.2,0.3-0.4,0.6-0.6,1
l-0.3-0.3c-1.5,2.8-2.9,5.5-4.3,8.3c-0.6,1.1-1.1,2.2-1.6,3.4c-0.4,0.9-0.8,1.8-1.2,2.7c-0.9,2.1-1.9,4.2-2.7,6.3l-0.4,0.6
c0,0-0.9,1.1-2.1,2.8c-1,1.6-2,3.2-2.9,4.9C120.4,322.8,122.2,321,123.5,319.8z M413.4,302.1c-9.8-4.5-19-6.7-25.8-7.7
c-1.1-0.2-2.1-0.3-3.1-0.4c-1.6,0.6-3.2,1.1-4.8,1.7c-2.3,2.8-6.1,5.2-9.4,6.9c2.3,1.6,4,3.2,5.2,4.6c1.2,0.1,3.2,0.4,5.8,1
c26,6,49.4,25.8,60.6,50c1.8-1.4,3.4-2.8,4.8-4.9c0.3-0.4,0.5-0.9,0.6-1.5c0.1-0.7,0.2-1.4,0.3-2c0.2-1.4,0.5-3.5,3-5.2
c1.6-1.1,2.6-2.3,3.2-3.7C443.3,320.5,427.8,308.7,413.4,302.1z"/>
<path class="st5" d="M276.7,269.6c0.7-0.1,1.5-0.1,2.2-0.1c0-1,0.1-2,0-3c0-1.9-0.3-3.5-0.9-5l-2.9,1.4
C275.7,265.1,276.2,267.3,276.7,269.6z"/>
<path class="st2" d="M273.3,270.5c1.1-0.5,2.3-0.8,3.4-0.9c-0.5-2.2-1-4.5-1.5-6.7l-9.8,4.8c0.8,4.1,1.4,8.2,1.9,12.4
C268.4,275.3,270.3,271.8,273.3,270.5z"/>
<g>
<path class="st5" d="M375.2,276.1c17.8-8.3,34.4-16.6,43.9-21.8c-2.9-0.9-5.4-1.8-6.9-2.6c-0.7-0.4-1.6-1-2.7-1.8l-1.2,0.5
c-0.2,0.3-0.4,0.6-0.6,1c-0.4,0.7-0.8,1.4-1.3,2c-0.4,0.7-1,1.3-1.5,1.9c-1.2,1.2-2.8,2.1-4.9,2.1c-1,0-2-0.2-3-0.4
c-0.8-0.2-1.6-0.5-2.4-0.8c-0.1,0-0.2-0.1-0.4-0.1l-12.7,5.1c-0.4,0.5-0.9,1-1.3,1.4c-0.7,0.7-1.5,1.4-2.3,2
c-1.7,1.2-3.7,2.1-6.2,2.1c-1.1,0-2-0.2-2.9-0.5l-0.5,0.2C370.6,269.3,373,272.5,375.2,276.1z M427,261.2c-0.9-1.3-1.7-2.7-2.6-4.1
c-0.3-0.5-0.6-1.1-1-1.6c0,0-0.1,0-0.1,0c-0.4,0.2-0.9,0.4-1.3,0.6c-9.2,5.1-26.5,13.8-45.3,22.6c1.4,2.5,2.8,5.2,4.1,8
c17.6-6.1,35.3-12.2,53.3-18.5c-0.9-0.4-1.4-0.6-1.5-0.8l-0.1-0.5c-0.9-0.6-1.8-1.2-2.5-2C428.9,263.8,427.9,262.5,427,261.2z
M121.7,379.8c-6.1-7.4-3.4-22.3-2.8-25.2c-0.4,0.1-0.8,0.2-1.1,0.4c-4.1,1.7-12.2,6.9-10.4,11.4L118,390
c1.7,4.5,12.4,6.3,16.4,4.6c2.5-1,3.9-2.5,4.3-4.5c-1-2.1-1.9-4.2-2.7-6.3C131.7,384.1,125.1,383.9,121.7,379.8z"/>
<path class="st5" d="M120.3,354.4l1.7,0.4c0,0.2-3.6,16.2,2.1,23.1c2.2,2.7,6.9,3.1,10.7,2.9c-1.7-4.8-3.1-9.8-4.2-14.8l-2.4-6.2
C126.8,356.2,123.6,354.2,120.3,354.4z M231.4,356.9c-5.5-14.9-21.4-23.8-18.6-41.7c0.1-0.6,0.3-1.1,0.4-1.6c-0.6,0-1.4,0-2.4,0.1
c-14.1,1.2-26.4,8.6-34,20.9c-1.6,2.6-4.7,1.2-3.1-1.4c6.1-9.8,16.2-18.5,27.6-22.3c-22.8-2-44.4,5.6-63.1,20.1
c-3.4,2.7-5.3,4.5-5.5,4.8c0.9,10.5,5.7,40.9,20.5,58.5c0.4,0.1,0.7,0.3,1,0.6c0.7,0.9,1.3,1.7,1.9,2.4c0.3,0.3,0.6,0.6,0.9,0.9
c0.4,0.4,0.9,0.8,1.4,1.2c1.1,0.8,2.4,1.4,4.2,1.4c2.7,0.1,4,1.8,4.8,3c0.4,0.6,0.7,1.2,1.2,1.7c0.4,0.5,0.8,0.8,1.2,1
c2.7,1.4,5.2,1.6,8.1,1.8c1.5,0.1,3,0.1,4.6,0.2c1.1,0.1,2.2,0.2,3.4,0.5c0.2-2,0.5-3.6,0.9-5.8c0.2-1,1.3-1.4,2.4-0.9
c2.7,1.3,4.7,2.4,7.2,3.6l0-6.9c0-1.1,1.3-1.7,2.4-1.1c3.1,1.7,5.2,2.8,7.8,5c1.1-0.7,2-1.3,3-2c1.2-0.9,2.2-1.8,3-3.1
c0.4-0.6,1.4-0.9,2.1-0.5l6.8,3c1.7-4.1,4.7-7.4,9.6-8.8c-0.8-2-1.5-3.7-2.6-5.9c-0.5-1,0.3-1.9,1.5-1.9l5.3,0.1l0.5,0.1
c3,1.5,5,2.4,7.5,3.3c0.8-0.8,1.7-1.6,2.6-2.3c-0.2-1-0.4-2.1-0.5-3.1c-1.7-2.2-3.3-4.3-4.6-6.3c-3.6-2-15.9-10.1-9.8-10.5l2.8-2.4
C232.8,360.6,232.1,358.7,231.4,356.9z"/>
<path class="st5" d="M397.3,327c-1.9-1.4-3.8-2.7-5.6-3.9c-10.4-6.8-19.3-10.1-22-11.1c-0.8-1.3-2.7-3.8-6-6.4
c-3.3,1.4-6.5,2.6-8.8,3.4c4.4,11.7-30.4,20.5-46,15.1c-2,2.4-7.6,6.4-14.1,9.5c0,0.5,0,0.9-0.1,1.4c-0.5-0.2-0.9-0.5-1.3-0.8
c-9,3.9-19.2,5.5-22.7-2.7c-1.2-2.6-3.5-14.8-4.4-27.6c-11.3-1.7-24.1-1.4-34.7,1.1c-4,1.6-7.9,3.5-11.5,5.8c-0.8,1.1-1.5,2-2,3.1
c-0.3,0.6-0.6,1.3-0.7,2c-2.4,14.9,17.2,25.1,22.2,38.8c1.4,3.7,2.3,6.9,5,11.3l2.3,0.8c-1-7.1,12.3,1.5,19.1,4.3
c5.8,2.3,7.2,11.8,13,14.2c2.7,1.1,7.8,2.9,10.6,4c3.8,1.6-0.7,10,7.1,10.1c4.2,0.7,11.4,0,15.3,1.5c1.9,0.8,6.3-6.9,8.2-6.2
l9.2-1.9c0.4,4.6,8.5,10,12.9,11.8c1.2,0.5,2.3-0.1,3.4-0.5l2.2-1.1c1.9-2.3,2.1-3.2,4.1-6.2l6.2-0.4l14.4-12.7
c1.1-0.7,2.2-0.5,2.2,0.5c0.1,2.4,0.2,4.1,0.4,6.1c5.3-1.9,17.4-12.7,20.9-10.6l4.9-6.5c0.6-0.7,1.6-1.1,2.2-0.9
c1.4,0.5,2.7,0.6,4.2,0.6c1.2,0,2.4-0.2,3.7-0.3c1.4-3.2,2.8-5.4,4.9-8.5c0.8-1.2,2.2-1.5,2.8-0.6l3.2,5.2c1.6-2.3,3-4.3,4.7-6.7
C419.2,346.2,407.9,334.8,397.3,327z M598.1,235c0.1,0,0.1,0,0.2,0c-7.3-0.6-63.7-13.3-85.8-18.6c-5.4,0.4,29,22,23.8,22.3
c-10.5,0.5-17.1-1.8-26.2-0.9c-1.4,0.1,0.2,1.7,2.5,3.7C553.1,241.8,585,237.2,598.1,235z M598.3,235c1.3,0.1,2.5,0.3,3.6,0.6
C600.7,235.4,599.5,235.1,598.3,235z M503.1,263.9c-11.9,1.2-23-0.5-33.6-3.2c0,0.6-0.1,1.1-0.1,1.7c0,0.9-0.8,1.6-1.7,1.6
l-7.5-0.1c-0.6,0-1.3-0.5-1.5-1c-0.6-1.6-1.2-2.9-1.8-4.2c-1.2,0.2-2.5,0.4-3.9,0.5c-0.2,1.9-0.4,3.6-0.7,5.7
c31.4,10.3,94,28.7,137.8,35.7c3,0.5,5.9,0.1,8.6-0.8C581.1,289.2,531.3,261.2,503.1,263.9z M616.5,278.4c-0.3,1-0.7,1.9-1.1,2.9
c4.6-11.3,5.4-25.1,0.5-34.7c-18.3,4-42.9,10.2-47.9,14.3C568.3,264.1,590.3,272,616.5,278.4z"/>
<path class="st5" d="M477,243c-0.1,0.1-0.1,0.2-0.2,0.3c-4.6,3.8-6.4,8.5-7,14.3c10.5,2.8,21.4,4.4,33.1,3.3
c30.5-3,83.4,27.5,99.3,37.2c-1.1,0.6-2.2,1.1-3.4,1.6c7.3-2.5,13.1-9.7,16.6-18.3c-13.8-3.4-48.8-12.6-50.4-19.7
c-0.2-0.7-0.2-2.1,1.2-3.3c5.5-4.6,30.9-10.8,48-14.5c0.6,0.9,1.2,1.8,1.7,2.8c-2.7-5.3-7.2-9.3-13.8-10.9c1.1,0.3,2.1,0.6,3.1,1
l0,0.1c-0.5,0.1-37.4,7.8-88.9,7.8c2.8,2.2,4.9,4.2,3.2,4.2c-6,0.1-13.7-2-21.6-4.5C491.2,244,484.1,243.6,477,243L477,243z
M487.4,240.7c0.1,0,0.3,0.1,0.4,0.1c-3.7-1.2-7.2-2.4-10.4-3.3l0,2.4C480.7,240.2,484.1,240.5,487.4,240.7z"/>
</g>
<path class="st4" d="M282.2,57.5c0.4,0.1,0.8,0.2,1.2,0.2c0.8-9.4,4.4-16.9,13.6-21.6C274.6,40,257.5,47.8,255.3,52
c-1.2,2.4-2.1,6-2.9,10c7.3-3.3,14.8-5.9,25.3-5.1l1.5-2C280.4,55.8,281.3,56.6,282.2,57.5z M301.8,56.5c4.5,4.7,10.1,6.9,16,10
c1.3,0.6-0.6,4.3,1,4.3c3.5,0.1,5.2-3.2,8.7-3.1c1.6,0,2.7,1.1,4.3,1.1c0.6,9.4,6.8,14.5,8,22.9c15,0.1,32.2-4.8,45.1-9.5
c0.9-0.3,1.9-0.7,2.8-1c0.4-0.2,0.8-0.3,1.2-0.4c0.7-0.3,1.3-0.5,1.9-0.7c-2.2-13.7-6.8-33.7-15.7-40.6
c-14.5-11.2-35.5-5.7-51.7-5.6c-0.4,0.2-1,0.4-2,0.5c-17.8,1.4-25.2,12.3-28,17.5c-0.8,1.4-1.2,3.2-1.4,5.1
C295,56.3,298.2,56.1,301.8,56.5z"/>
<path class="st2" d="M315.9,27.4c-0.5-4.8-1.7-7.7-12.6-7.1c-4.3,0.2-7.2,1.4-8.7,3.5c-0.9,1.2-1.1,2.5-1.1,3.4c0,0.7,0.1,1,0.1,1.1
C297.2,29.4,307,30.5,315.9,27.4z M251.8,126.9c0.4-0.6,0.9-1.3,1.3-1.9c0,0,0,0,0-0.1c1.4-2.1,2.9-4.3,4.2-6.3
c0.1-0.1,0.2-0.2,0.2-0.4c0.3-0.4,0.5-0.8,0.8-1.2c0.5-0.8,1-1.5,1.4-2.2c-0.7,0-1.4,0-2,0c-0.9,0-1.9,0-2.8,0
c-1.5,0-2.9-0.1-4.3-0.1c-0.9,0-1.8-0.1-2.6-0.1c-1.5-0.1-3-0.3-4.6-0.5c-0.7-0.1-1.4-0.2-2.1-0.3c-0.7,0.6-1.4,1.2-2.2,1.9
c-3.7,3.5-9.4,11.5-13.7,17.7c0.5,0.7,0.8,1.4,0.7,2.5c0,0.2-0.1,0.5-0.2,0.7c0,0.1-0.1,0.2-0.1,0.3c-0.1,0.1-0.1,0.2-0.2,0.2l-1,1
c-0.1,0-0.3,0.2-0.4,0.2c-1.2,0-2,0.3-3,1c0,0,0,0.1-0.1,0.1c0.7,0.7,1.2,1.3,1.9,2.1c0.5,0.7,0.3,1.6-0.5,2
c-0.4,0.2-0.7,0.4-1.1,0.7c1.9-0.3,5.2-1.7,9.3-3.3c5.9-7.2,11.3-14.2,20.4-13c0.1-0.2,0.2-0.3,0.4-0.5
C251.6,127.2,251.7,127.1,251.8,126.9z"/>
<path class="st5" d="M231.6,187.5l-10.1,15.9l18.1,0.6c0.1-0.6,0.3-1.1,0.3-1.7C240,195.7,236.2,191.4,231.6,187.5z M259.8,241.5
l-1.9,25.1l17.3-8.6c-0.9-0.6-2-0.8-3.3-0.9c-2.2-0.1-4.6,0.2-7.1,0.1c-0.9,0-1.6-0.8-1.6-1.6c0.1-4,0.5-7.6,0.3-10.9
c-0.1-1.1-0.2-2.3-0.5-3.4c-0.4,0-0.8,0-1.2,0L259.8,241.5z M390.6,163.5L390.6,163.5l-2.5-1.3h0L390.6,163.5z"/>
<path class="st5" d="M361.6,177.3c-5.2-0.8-13.2-5-19.3-11.4l-1.4,1.1c0.1,0.1,0.2,0.3,0.3,0.4c4.9,6.4,7.9,11.3,9.3,19.3l0.5-0.3
c0.8-0.4,1.5-0.9,2.2-1.4c1.6-0.9,3.4-1.8,5.9-1.8c0.8,0,1.5,0.3,2,0.6c0.2,0.1,0.5,0.3,0.7,0.5l0.5,0.4c0.3,0.3,0.5,0.5,0.7,0.6
c0.1,0.1,0.3,0.1,0.4,0.1c0.8,0,1.5,0.7,1.6,1.5c0.2,2.8,0.3,4.8,0.6,7.2l1-0.7c1.1-0.7,2.4-1.4,4.3-1.4c0.7,0,1.3,0.1,1.8,0.2
c0.5,0.1,0.9,0.3,1.4,0.4c0.8,0.3,1.4,0.5,2.2,0.5c0.9,0,1.6,0.8,1.6,1.6c-0.1,3,1.1,5.1,2.8,7.2c0.9,1.1,2,2.2,3,3.3
c0.8,0.9,1.7,1.8,2.5,2.9c2.6-1.1,4.6-2,7.7-3.7l0.5-0.1l5.4,0.1c1.2,0,1.9,1.1,1.5,2.3c-1.1,2.6-1.9,4.5-2.8,6.9
c5,1.8,7.9,5.9,9.5,10.8l7-3.3c0.8-0.4,1.7,0,2.1,0.7c0.8,1.6,1.8,2.7,3,3.8c0.9,0.9,1.9,1.6,3,2.5c2.7-2.4,4.8-3.7,8-5.6
c1.2-0.7,2.5,0.1,2.4,1.4l-0.1,8.1c2.6-1.4,4.7-2.6,7.4-4c1-0.5,2.2,0.1,2.4,1.2c0.4,2.6,0.6,4.5,0.8,6.9c1.2-0.2,2.3-0.4,3.4-0.4
c1.6-0.1,3.1-0.1,4.6-0.1c2.9-0.1,5.4-0.3,8.2-1.8c0.4-0.2,0.9-0.6,1.2-1.2c0.5-0.6,0.8-1.3,1.2-2c0.8-1.4,2.2-3.4,4.9-3.4
c2,0,3.4-0.6,4.6-1.7c0.2-0.2,0.4-0.4,0.5-0.6c2-5.8,3.5-11.2,4-14.6c0.2-1.5,0.2-3.3,0-5.2c-6.7,8-17.8,17.7-21.9,17
c-2.6-0.4-4.1-2.3-5.1-4.2c-2.1-4-2.6-8.7-4.1-12.9c-2.8-7.7-13.4-11-16.1-17.5c-6.1,1.7-10,2.6-13.7,4.8c-3.9,2.3-6.1,4.2-6.1,4.2
c-2.5,2.1-5.6-1.6-3.1-3.7c5.8-4.9,16-10.7,23.7-13.5c2.3-3.7,7-7.4,12.9-10c-2.4-3.3-8-8.6-20.8-10.6c-11.4-1.8-33.7,9.8-35.7,22.2
c-0.5,3.2-8.3,2-7.8-1.2c0.2-1.3,0.7-2.7,1.5-4.2C375.2,177.7,369.3,178.5,361.6,177.3z M425.4,210.5c0.1,0.6-0.3,1.3-0.9,1.4
c-0.2,0-4.7,0.9-7.5-1.5c-0.5-0.4-0.5-1.2-0.1-1.7c0.4-0.5,1.2-0.5,1.7-0.1c0,0,0,0,0,0c1.9,1.7,5.4,1,5.4,1
C424.7,209.4,425.3,209.8,425.4,210.5z"/>
<path class="st5" d="M406.2,116.8c-0.7-0.2-1.4-0.3-2-0.5c-0.8-0.1-1.6-0.3-2.5-0.5c-3.4-0.6-5.7-0.8-5.7-0.8
c-3.2-0.2-2.9-5,0.3-4.9c0,0,3.6,0.4,8,1c7.5-1.3,17-2.8,20.6-2.2c1.3,0.2,2.5,0.5,3.6,0.9l-3.9-6.6l-43.1,4
c-3.2,0.3-3.7-4.5-0.4-4.9c0,0,5.8-4.8,6.7-5.7c7.2-7.2,18.7-8.3,28.8-7.3c-5.4-3.9-8-6.3-11.6-10c-18.5,8.6-44.8,22.9-66.3,21.6
c0.6,0.7,1.3,1.4,1.3,2.5c0,0.5-0.1,1-0.3,1.5c0.9,0.4,1.9,0.7,2.9,0.9c3.2,0.5,2.4,5.3-0.8,4.8c-2.4-0.4-4.6-1.3-6.6-2.6l-7.2,0.6
c-4.6-0.6-6.4-3.1-10.7-4.5c-3.5-1.1-9.7,1.5-9.7-2.3c0.1-4.1-4.2-5.7-4.2-9.8c0.1-4.9-4.2-6.3-7.4-9.8c-5.3-5.8-7.7-12.1-11.9-16.9
c-1-0.2-2-0.5-3-0.7c-13-2.1-16.5,0.7-23,3.9c-10.3,5.2-16.6,8.5-28.5,10.3c-14.7,2.1-31.7,4.4-42.6,6.4c8.1,0.6,18.5,0.9,28.9,0
c19.3-1.6,26.7-10.4,48.4-7c24.1,3.8,23.8,14.9,23.5,16.5c-0.5,3.2-5.3,2.4-4.8-0.8c0-7.2-16.1-10.4-19.5-10.9
c-20.2-3.2-28.4,5.5-47.3,7c-3.4,0.3-6.9,0.4-10.2,0.5c3.7,1.1,6.9,2.4,8.8,3.8c5.1,3.6,15.5,11.9,21.3,13.5
c13.5,3.6,26.9,2.5,37.1,0.5c10-2,16.7-4.9,16.7-4.9c3-1.3,4.9,3.1,2,4.5c-7.6,3.4-16.7,5.5-26,6.5c-1.1,4-2.7,8.2-4.7,12.3
c3.2-0.9,6.4-1.5,9.4-1.9c3.2-0.5,3.9,4.4,0.7,4.8c-4.4,0.6-9.5,2.3-14.7,4.7c0.4,0.3,0.7,0.7,0.6,1.3c0,1.9-2.2,2.4-2.2,4.3
c-0.1,4.3,4.8,4.7,8.5,6.6l-2.3,8.6c0,1.9,2.1,2.5,2.1,4.4c-0.1,3.8-0.6,3.1-1.5,6.9c6.5-3.7,7.5-0.3,7.5,1.9c0,1.9,4.2,5.7,2.3,7.6
c1.8,3.2,5.1,4.9,5.2,8.4c1.4-0.3,2.4-0.7,3-1.6c0.5-0.7,0.7-1.5,0.9-2.4c0.2-1,0.3-2.1,0.4-3.1c0.3-2.1,0.9-4.7,4-5.9
c2.2-0.7,4.3-0.9,6.3-0.8c0.8,0,1.5,0.1,2.3,0.2c5.8-4.7,12.1-8.1,18.4-9.7c1-1,2.1-1.9,3.2-2.7c3.8-2.9,8.2-4.8,13.9-4.7
c4.2,0.1,6.3,2.8,7.7,5.6c0.7,1.4,1.3,2.9,2,4.3c0.3,0.6,0.6,1.2,0.9,1.7l1.1-0.8c-4.6-5.5-7.6-12.4-6.4-20.3
c1.2-7.8,5.4-14.1,12.2-16.9l2.5,1.2l-2.5-1.2c-3.6-1.5-7.4-2.5-11.3-3.1c-5.7-0.9-21-3.8-27.3,0.8c-2.6,1.9-5.8-0.7-3.7-3.2
c5.5-6.7,24-5.2,30.1-4.3c32.4,5.1,49.6,34.9,63.4,40.8c6.7-4,14.3-6.4,21-5.4c4.2,0.7,7.7,1.5,10.7,2.4c0.3-0.4,0.7-1.2,1.3-2.3
C440.2,134.1,423,120.9,406.2,116.8z"/>
<path class="st6" d="M300.6,184.9c1.7-1.3,3.6-2.2,5.5-2.6l-1.5-5l1.8-0.6l1.7,5.4c2.5-0.1,4.9,0.7,7,2.3l14.7-11.3
c-7-7.1-22-5.7-33.5,4C298.2,178.8,299.8,181.4,300.6,184.9z M362,239.6c4.4-0.4,8.7-0.9,12.9-1.5
C370.7,238.7,366.4,239.2,362,239.6z M335.5,241.4c-0.1-0.5-0.1-1-0.2-1.5c-0.5,0.6-1.1,1.1-1.6,1.6L335.5,241.4z M289.3,184.7
c-3.2,4.4-5.6,9.8-7,16C283.7,194.5,286.1,189.1,289.3,184.7z M336.5,195.2c0.9-0.9,1.9-1.8,3-2.4c-2.7-4.4-4.9-8.8-6.6-14.3
c-0.4-1.5-1.1-2.7-2-3.9l-14.4,11.2c0.7,0.8,1.3,1.7,1.8,2.8l12.8-1.3l0.2,1.9l-12.4,1.2c0.2,0.5,0.4,0.9,0.5,1.4
C325.2,188.3,332.6,190,336.5,195.2z M314.6,231.5c-9.1,6.4-18.3,0.8-19.1-8.2c-5,2.9-9.9,2.1-13.3-0.8c2.3,8.7,7.9,15.5,18,17
c7.6,1.2,12.8,1.4,16.3,1.6C314.6,238.6,313.8,235.2,314.6,231.5z M389.6,235.9c-0.6-0.4-1.2-0.8-1.8-1.2c-0.8,0.6-1.7,1.3-2.6,1.9
C383.4,236.9,384.9,236.7,389.6,235.9z M383.6,232c0,0-0.1,0-0.1-0.1c0,0,0,0,0,0C383.6,232,383.6,232,383.6,232z"/>
<path class="st0" d="M358,218c0.1,1.1,0.2,2.2,0.4,3.4c1.3,2.7,2.6,5.8,3.5,8.9c1.2-1.1,2.5-2.1,3.6-2.9c1.6-1.1,3.6-2.2,5.1-3
c-0.1-0.4-0.1-0.9-0.2-1.4c-3.5-2.4-6.7-4.8-9.7-7.1c0,0,0,0,0,0c-0.4-0.3-0.8-0.6-1.1-0.9C359.1,216.2,358.6,217.2,358,218z
M377.3,230.9c0.2,0.4,0.3,0.7,0.5,1.1c0.4,1,0.9,1.9,1.4,2.8c1.7-1,3.1-2,4.4-2.9c0,0,0,0,0,0c-2.5-1.6-5-3.3-7.5-5
C376.4,228.3,376.8,229.6,377.3,230.9z M371.3,229.4c-3.2,1.8-6.2,4.1-8.7,6.9c0,1.2-0.2,2.3-0.6,3.3c4.4-0.4,8.7-0.9,12.9-1.5
C374.2,235.7,373.1,232.8,371.3,229.4z M290.2,193.4c0.1-0.1,0.2-0.1,0.3-0.2l-2.4,0.2l-0.2-1.9l7.1-0.7c0.5-0.2,0.9-0.4,1.3-0.6
v-0.1c0-1.2,0-2.5-0.2-3.7l-4.9-1.9l0.7-1.8l3.7,1.4c-0.6-1.5-1.4-2.8-2.8-3.6c-1.2,1.3-2.3,2.6-3.3,4.1c0,0,0,0.1-0.1,0.1
c-3.2,4.4-5.6,9.8-7,16v0C284.7,197.5,287.7,195.1,290.2,193.4z M315,193.5l-3.9-1.4l2.4,7.7c0.5-1.4,1.1-2.6,1.7-3.6
C315.2,195.2,315.1,194.3,315,193.5z M313.7,191l0.6,0.2c0-0.1-0.1-0.2-0.1-0.3L313.7,191z M309.6,187.1l0.4,1.3l1.1-0.9
c-0.4-0.2-0.9-0.3-1.4-0.4C309.7,187.1,309.7,187.1,309.6,187.1z M308.8,202.6c0.9-0.5,2-1,3.1-1.5l-2.9-9.5l-9.7,7.5
c0.2,3.3,0.7,6.5,1.9,9.6C303.6,206,306.4,204,308.8,202.6z M301.8,190.2l3.5-0.3L303,189C302.6,189.3,302.2,189.7,301.8,190.2z
M304.9,187.7l3.2,1.2l-0.6-1.8C306.6,187.1,305.7,187.3,304.9,187.7z M312.1,189.2l1.1-0.1c-0.1-0.2-0.3-0.3-0.4-0.4L312.1,189.2z
M299.3,196.6l6.3-4.9l-5,0.5C299.9,193.7,299.5,195.3,299.3,196.6L299.3,196.6z M357.3,238.5c1.1-1.9,0.9-7-3.8-16.2
c-0.5,0.3-1,0.7-1.5,1c-1.4,0.9-2.5,1.6-3.6,2.4c-2.5,2.1-4.8,4.4-6.4,7.2c-1.3,2.3-2.4,5.5-1.7,8.3c2.4-0.1,4.9-0.2,7.3-0.4
c2.8-0.2,5.5-0.4,8.3-0.6c0.1,0,0.2,0,0.3,0C356.8,239.4,357.2,238.7,357.3,238.5z M330.6,218.2c-0.8,0.6-1.7,1.3-2.5,1.8
c-8.3,6-7.7,5.5-9.3,16c0.8,1.7,2,3.2,4.1,4.2c5.5,2.6,10.7-5.9,11.3-6.8c0.4-0.7,0.5-2.4,0-4.8c-0.8-2.3-1.5-4.6-2.1-7
C331.7,220.5,331.2,219.4,330.6,218.2z M318.1,200.8c-0.7,6.9-1.2,13.5,1.6,19.8c3.3-3,7.7-5.5,10.9-8.6c0-0.5-0.1-0.9-0.1-1.4
c0-4.4,1.1-8.2,2.8-11.3c-1-2.2-2.7-3.9-5.1-4.2c-1.4-0.2-2.6-0.2-3.8,0l3.1,1.2l-0.7,1.8l-5.2-1.9
C320.1,197.1,318.9,198.8,318.1,200.8z M304,228.7c4.7,3,9.8-2.4,11.8-5c-2.5-4.6-3.4-10.7-3-17.8c-3.5,1.8-6.7,4.3-9.2,7.4
c0.1,0.2-2.6,5-3,5.5C299.6,222.1,299.8,226,304,228.7z M284.6,205.8c-0.6,1-1.1,2.1-1.5,3.4l11.5-8.9c-0.1-1.3-0.2-2.5-0.2-3.9
C290.5,198.7,286.9,201.8,284.6,205.8z M286.7,219.7c4.8,2.8,9.7-2.9,11.5-5.6c-1.9-3.1-3-7-3.5-11.5l-12.2,9.4
C282.3,214.8,283.3,217.7,286.7,219.7z M335.3,210.5c0,5.3,1.9,12,3.6,17.1c1.3-1.6,2.7-2.9,4-4c4.3-3.6,11.1-5.8,12.3-11.8
c-3.6-2.9-6.3-5.5-7.7-7.4c-2.1-2.9-4.2-5.5-5.6-7.6C338.3,199.2,335.3,204.1,335.3,210.5z"/>
<path class="st7" d="M341,164.5l-1.1,0.8l-3.7,2.8l-6.5,5L315,184.5l-3.9,3l-1.1,0.9l-0.4-1.3l-1.5-4.9l-1.7-5.4l-1.8,0.6l1.5,5
l1.4,4.7l0.6,1.8l-3.2-1.2l-5.2-1.9l-4.3-1.6l-3.7-1.4l-0.7,1.8l4.9,1.9l2.2,0.8l4.7,1.8l2.3,0.9l-3.5,0.3l-2.4,0.2l-4.5,0.4
l-7.1,0.7l0.2,1.9l2.4-0.2l8.9-0.9l1.3-0.1l5-0.5l-6.3,4.9l-0.1,0.1l-4.7,3.6l-11.5,8.9l-2.1,1.6l0,0l-7,5.4l-2,1.6l1.2,1.5l1.1-0.9
l6.7-5.2l0,0l1.6-1.3l12.2-9.4l4.5-3.5l9.7-7.5l2.9,9.5l0.3,1.1l1.8-0.6l-0.4-1.2l-0.2-0.6l-2.4-7.7l3.9,1.4l1.8,0.7l5,1.9l5.2,1.9
l0.7-1.8l-3.1-1.2l-6.1-2.3l-4-1.5l-0.6-0.2l0.5-0.1l4.7-0.5l12.4-1.2l-0.2-1.9l-12.8,1.3l-5.1,0.5l-1.1,0.1l0.7-0.5l3.7-2.9
l14.4-11.2l6.3-4.9l3.6-2.8l1.4-1.1C341.8,165.4,341.4,165,341,164.5L341,164.5z"/>
<path class="st5" d="M275.6,276c-6.2,7.4-7.1,34.3,1.1,52.9c0.9,2,5.3,2,10.3,0.9c-5.7-5-8.6-10.8-8.9-15c2.5-6.3,7.3-5.7,15.2-4.4
c0.7,5.6,1.6,10.4,1.6,17c4.6-1.8,8.3-4.2,8.7-6.4c-0.6-0.6-1.1-1.4-1.5-2.2c-2.1-4.7-8.7-21.7-11.8-37.7
C286.6,278,280.2,274,275.6,276z M328.9,263.4c2.7,3.1,5.1,6.4,7.3,9.6c7.4,10.9,13.1,23.1,16.4,30.5c2.7-0.9,6.6-2.4,10.5-4.1
c-4.8-4.5-7.7-8.5-11.5-12.8c4.5-6.4,7.4-10.1,13.9-7.5c2.9,3.1,5.2,9.2,5,16.6c3.3-1.9,5.4-3.8,4.8-5.4
C373.3,286,341.6,231.7,328.9,263.4z M308.7,317c1.5,3.4,10.4,3.2,16.8,2.7c-6.1-4.2-10.4-9.9-12.8-17.2c7.8-10.9,19.2-4.3,19.2-4.3
c3.8,4.2,3.4,11.2,1.6,20.1c5.2-1.3,16.3-4.6,14.8-7.9c-2.2-5.1-8.9-21-18.2-34.8c-9.8-14.6-20.4-23.4-30-20.7
C287.1,258.7,306.1,311.2,308.7,317z"/>
<path class="st0" d="M334.6,144.2c-1.2,7.9,1.8,14.8,6.4,20.3c0.4,0.5,0.9,0.9,1.3,1.4c6,6.4,14.1,10.6,19.3,11.4
c7.7,1.2,13.7,0.3,18.7-1.8c2-3.8,5.7-8.1,10.3-12l-2.5-1.3h0c-3.5-2.5-6.9-6-10.5-10c0.2,0.9,0.3,1.8,0.2,2.7
c-0.5,3.5-3.8,5.8-7.2,5.3c-3.5-0.6-5.8-3.8-5.3-7.2c0.5-3.5,3.8-5.8,7.2-5.3c0.4,0.1,0.9,0.2,1.3,0.3c-5.6-6.1-11.9-12.6-20.1-17.4
h0l-4.4-2.2l-2.5-1.2C339.9,130.1,335.8,136.4,334.6,144.2z"/>
<path class="st1" d="M335,40.4c0.3-0.1,4.3-0.6,8.7,1.4c-0.5,0-1,0.1-1.5,0.1l-4.9,0.3c-0.5,0-0.9,0.5-0.9,1c0,0.5,0.5,0.9,1,0.9
l4.9-0.3c1.5-0.1,2.8-0.2,4.2-0.2c3.6,2.7,7,7.7,8.6,16.6c0.1,0.5,0.6,0.9,1.1,0.8c0.5-0.1,0.9-0.6,0.8-1.1
c-1.4-8.1-4.4-13.2-7.7-16.3c3.5,0,7,0.4,10.8,1.7c1.4,1.4,2.8,3.2,3.9,5.5c-0.2,0-0.5-0.1-0.7-0.1c-0.9-0.2-1.9-0.5-2.8-0.6
c-1.5-0.1-1.9,1.1-0.7,1.8c0.1,0.1,0.2,0.1,0.3,0.1c0.9,0.3,1.9,0.4,2.8,0.6c0.7,0.1,1.4,0.3,2.1,0.4c0.9,2.1,1.6,4.6,2.1,7.5
c0.1,0.5,0.6,0.9,1.1,0.8c0.5-0.1,0.9-0.6,0.8-1.1c-0.4-2.3-1-4.5-1.8-6.7c0.3,0.1,0.6,0.1,0.9,0.2c2.8,0.5,3.5,0.6,6.9,2.6
c0.5,1.5,0.9,3.1,1.2,4.9c0.1,0.5,0.6,0.9,1.1,0.8c0.5-0.1,0.9-0.6,0.8-1.1c-0.2-1.1-0.5-2.2-0.7-3.2c0.4,0.2,0.7,0.4,1.1,0.7
l2.6,1.5c0.5,0.3,1,0.1,1.3-0.3c0.3-0.5,0.1-1-0.3-1.3c0,0,0,0,0,0l-2.6-1.5c-1.2-0.7-2.1-1.2-2.9-1.7
c-5.9-17.8-20.7-15.5-20.9-15.5c-0.3,0-0.5,0.2-0.6,0.5c-4.6-1.7-8.4-1.1-8.5-1.1c-0.5,0.1-0.9,0.6-0.8,1.1c0.1,0.5,0.6,0.9,1.1,0.8
c0.3-0.1,4.5-0.7,9,1.6c-3-0.5-5.9-0.6-8.9-0.5c-6-4.1-12.3-3.2-12.4-3.2c-0.5,0.1-0.9,0.6-0.8,1.1C334,40.2,334.5,40.5,335,40.4z
M357.9,41.1c3.6,0,11.8,1.3,16.3,12.3c-2.1-1.1-3.1-1.3-5.6-1.8c-0.7-0.2-1.4-0.3-2.1-0.5c-0.8-1.7-1.6-3.3-2.5-4.6
c1.7,0.8,3.5,1.6,5.4,2.8c0.5,0.3,1.1,0.1,1.3-0.3c0.3-0.5,0.1-1-0.3-1.3c0,0,0,0,0,0c-3.5-2-6.5-3.3-9.2-4.3
C360,42.5,359,41.8,357.9,41.1z"/>
<path class="st0" d="M549.6,488.6h-5.9v16.2h-4v-16.2h-5.9v-3.5h15.9V488.6z M576.5,504.8h-4v-15.7h-0.1l-5.7,15.7h-3.9l-5.5-15.7
h-0.1v15.7h-4v-19.7h7l4.6,12.9h0.1l4.8-12.9h6.9V504.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 306 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 438 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 395 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 141 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 204 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 454 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 192 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 368 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 KiB

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