From 02e12ffd86fc84988890243de3a16109334911be Mon Sep 17 00:00:00 2001 From: aaronrolls Date: Wed, 24 Aug 2022 10:38:13 +0000 Subject: [PATCH 01/25] Bug Fixes --- apps/chimer/settings.js | 2 +- apps/chimer/widget.js | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/apps/chimer/settings.js b/apps/chimer/settings.js index 1174246bd..594188c00 100644 --- a/apps/chimer/settings.js +++ b/apps/chimer/settings.js @@ -36,7 +36,7 @@ Repetition: { value: settings.repeat, min: 1, - max: 3, + max: 5, format: (v) => v, onchange: (v) => { settings.repeat = v; diff --git a/apps/chimer/widget.js b/apps/chimer/widget.js index 9029511f8..807f2b0cb 100644 --- a/apps/chimer/widget.js +++ b/apps/chimer/widget.js @@ -32,7 +32,7 @@ } else { return; } - sleep(100); + sleep(150); } } @@ -44,7 +44,11 @@ m = now.getMinutes(), s = now.getSeconds(), ms = now.getMilliseconds(); - if (h > settings.end || h < settings.start) { + if ( + h > settings.end || + (h >= settings.end && m !== 0) || + h < settings.start + ) { var mLeft = 60 - m, sLeft = mLeft * 60 - s, msLeft = sLeft * 1000 - ms; @@ -52,7 +56,8 @@ return; } if (settings.freq === 1) { - if ((m !== lastMinute && m === 0) || m === 30) chime(); + if ((m !== lastMinute && m === 0) || (m !== lastMinute && m === 30)) + chime(); lastHour = h; lastMinute = m; // check again in 30 minutes @@ -70,7 +75,12 @@ } setTimeout(check, msLeft); } else if (settings.freq === 2) { - if ((m !== lastMinute && m === 0) || m === 15 || m === 30 || m === 45) + if ( + (m !== lastMinute && m === 0) || + (m !== lastMinute && m === 15) || + (m !== lastMinute && m === 30) || + (m !== lastMinute && m === 45) + ) chime(); lastHour = h; lastMinute = m; From 5ea59aa0534ca0c8c18ca96950455beabd077e78 Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 24 Aug 2022 22:19:52 +0200 Subject: [PATCH 02/25] Set timer for agenda entries --- apps/bwclk/ChangeLog | 3 +- apps/bwclk/README.md | 2 +- apps/bwclk/app.js | 71 ++++++++++++++++++++++++++++++---------- apps/bwclk/metadata.json | 2 +- 4 files changed, 58 insertions(+), 20 deletions(-) diff --git a/apps/bwclk/ChangeLog b/apps/bwclk/ChangeLog index 967062223..ae95e8ae7 100644 --- a/apps/bwclk/ChangeLog +++ b/apps/bwclk/ChangeLog @@ -14,4 +14,5 @@ 0.14: Adds humidity to weather data. 0.15: Added option for a dynamic mode to show widgets only if unlocked. 0.16: You can now show your agenda if your calendar is synced with Gadgetbridge. -0.17: Fix - Step count was no more shown in the menu. \ No newline at end of file +0.17: Fix - Step count was no more shown in the menu. +0.18: Set timer for an agenda entry by simply clicking in the middle of the screen. Only one timer can be set. \ No newline at end of file diff --git a/apps/bwclk/README.md b/apps/bwclk/README.md index 3f177d6fa..dfb9bf515 100644 --- a/apps/bwclk/README.md +++ b/apps/bwclk/README.md @@ -7,7 +7,7 @@ A very minimalistic clock to mainly show date and time. The BW clock provides many features and also 3rd party integrations: - Bangle data such as steps, heart rate, battery or charging state. - A timer can be set directly. *Requirement: Scheduler library* -- Show agenda entries. *Requirement: Gadgetbridge calendar sync enabled* +- Show agenda entries. A timer for an agenda entry can also be set by simply clicking in the middle of the screen. This can be used to not forget a meeting etc. Note that only one agenda-timer can be set at a time. *Requirement: Gadgetbridge calendar sync enabled* - Weather temperature as well as the wind speed can be shown. *Requirement: Weather app* - HomeAssistant triggers can be executed directly. *Requirement: HomeAssistant app* diff --git a/apps/bwclk/app.js b/apps/bwclk/app.js index 577014130..6de1a8b7f 100644 --- a/apps/bwclk/app.js +++ b/apps/bwclk/app.js @@ -8,7 +8,8 @@ const storage = require('Storage'); * Statics */ const SETTINGS_FILE = "bwclk.setting.json"; -const TIMER_IDX = "bwclk"; +const TIMER_IDX = "bwclk_timer"; +const TIMER_AGENDA_IDX = "bwclk_agenda"; const W = g.getWidth(); const H = g.getHeight(); @@ -205,8 +206,8 @@ try{ require('sched'); menu.push([ function(){ - var text = isAlarmEnabled() ? getAlarmMinutes() + " min." : "Timer"; - return [text, imgTimer(), () => decreaseAlarm(), () => increaseAlarm(), null ] + var text = isAlarmEnabled(TIMER_IDX) ? getAlarmMinutes(TIMER_IDX) + " min." : "Timer"; + return [text, imgTimer(), () => decreaseAlarm(TIMER_IDX), () => increaseAlarm(TIMER_IDX), null ] }, ]); } catch(ex) { @@ -219,6 +220,7 @@ try{ * Note that we handle the agenda differently in order to hide old entries... */ var agendaIdx = 0; +var agendaTimerIdx = 0; if(storage.readJSON("android.calendar.json") !== undefined){ function nextAgendaEntry(){ agendaIdx += 1; @@ -248,7 +250,41 @@ if(storage.readJSON("android.calendar.json") !== undefined){ var dateStr = locale.date(date).replace(/\d\d\d\d/,""); dateStr += entry.durationInSeconds < 86400 ? " / " + locale.time(date,1) : ""; - return [title + "\n" + dateStr, imgAgenda(), () => nextAgendaEntry(), () => previousAgendaEntry(), null] + function dynImgAgenda(){ + if(isAlarmEnabled(TIMER_AGENDA_IDX) && agendaTimerIdx == agendaIdx){ + return imgTimer(); + } else { + return imgAgenda(); + } + } + + return [title + "\n" + dateStr, dynImgAgenda(), () => nextAgendaEntry(), () => previousAgendaEntry(), function(){ + try{ + var alarm = require('sched') + + // If other time, we disable the old one and enable this one. + if(agendaIdx != agendaTimerIdx){ + agendaTimerIdx = -1; + alarm.setAlarm(TIMER_AGENDA_IDX, undefined); + } + + // Disable alarm if enabled + if(isAlarmEnabled(TIMER_AGENDA_IDX)){ + agendaTimerIdx = -1; + alarm.setAlarm(TIMER_AGENDA_IDX, undefined); + alarm.reload(); + return + } + + // Otherwise, set alarm for given event + agendaTimerIdx = agendaIdx; + alarm.setAlarm(TIMER_AGENDA_IDX, { + msg: title, + timer : parseInt((date - now)), + }); + alarm.reload(); + } catch(ex){ } + }] }, ]); } @@ -364,10 +400,10 @@ function getWeather(){ } -function isAlarmEnabled(){ +function isAlarmEnabled(idx){ try{ var alarm = require('sched'); - var alarmObj = alarm.getAlarm(TIMER_IDX); + var alarmObj = alarm.getAlarm(idx); if(alarmObj===undefined || !alarmObj.on){ return false; } @@ -379,22 +415,22 @@ function isAlarmEnabled(){ } -function getAlarmMinutes(){ - if(!isAlarmEnabled()){ +function getAlarmMinutes(idx){ + if(!isAlarmEnabled(idx)){ return -1; } var alarm = require('sched'); - var alarmObj = alarm.getAlarm(TIMER_IDX); + var alarmObj = alarm.getAlarm(idx); return Math.round(alarm.getTimeToAlarm(alarmObj)/(60*1000)); } -function increaseAlarm(){ +function increaseAlarm(idx){ try{ - var minutes = isAlarmEnabled() ? getAlarmMinutes() : 0; - var alarm = require('sched') - alarm.setAlarm(TIMER_IDX, { + var minutes = isAlarmEnabled(idx) ? getAlarmMinutes(idx) : 0; + var alarm = require('sched'); + alarm.setAlarm(idx, { timer : (minutes+5)*60*1000, }); alarm.reload(); @@ -402,16 +438,16 @@ function increaseAlarm(){ } -function decreaseAlarm(){ +function decreaseAlarm(idx){ try{ - var minutes = getAlarmMinutes(); + var minutes = getAlarmMinutes(idx); minutes -= 5; var alarm = require('sched') - alarm.setAlarm(TIMER_IDX, undefined); + alarm.setAlarm(idx, undefined); if(minutes > 0){ - alarm.setAlarm(TIMER_IDX, { + alarm.setAlarm(idx, { timer : minutes*60*1000, }); } @@ -670,6 +706,7 @@ Bangle.on('touch', function(btn, e){ menuEntry[4](); setTimeout(()=>{ Bangle.buzz(80, 0.6); + drawTime(); }, 250); } catch(ex){ // In case it fails, we simply ignore it. diff --git a/apps/bwclk/metadata.json b/apps/bwclk/metadata.json index 1eb1fde72..0f9836a42 100644 --- a/apps/bwclk/metadata.json +++ b/apps/bwclk/metadata.json @@ -1,7 +1,7 @@ { "id": "bwclk", "name": "BW Clock", - "version": "0.17", + "version": "0.18", "description": "A very minimalistic clock to mainly show date and time.", "readme": "README.md", "icon": "app.png", From a23b8a4e745a4de2b6a807de6878b745afb560dd Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 24 Aug 2022 22:21:29 +0200 Subject: [PATCH 03/25] Updated screenshot --- apps/bwclk/screenshot_3.png | Bin 3312 -> 3294 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/bwclk/screenshot_3.png b/apps/bwclk/screenshot_3.png index f9a9a7d3fdaf5fc43aa87825bddf80455f98fbbc..6586dc3555ebeefcc7f397d78258bd6ce273109e 100644 GIT binary patch literal 3294 zcmb_fdpOgN_kV8;ZEkbRGM9+lR&pz>avxjqNg1p9PPp7We@(*N?n$U%2N0RWJ5 zcXRgI^0oh}jMSE`X`CW$IZ&h*#u0ehhnxif*8|y?d_$02Aw~i9;Df8o*Zdm6mTWG0LeVFZ_JY>?d*3ZIg2BEzXg?5WeP-!hEXY(! ztC|K}xwJaP2Gk_zczfWmZQ?}|keP%r(V=PIJ!G?&_Ljp?Rpih;%KqNYIm72cW%!uK zo_#QWx@bKxP>(?8GcBHUp1c;&D(Xlv*iep!-#g+@6_%pHq+$CpTS}Y z@1T{!4S1WQDrc>_h|I zmsTD1%i|kP4h}jZQ>2N($Gts$8_O5~3F7`I`ML3@rvOGiTkGg)PMli#_A#z_8pJY& zynM#UBujC4XG_InAAoxPLZvl0X5n0&DaV8}3f8V(=PhC4M`sc|6T@t1sBm6^$Z97~ z(uH5Tv_zcoJe-n=|0rYN+^bg8?dv!o6z71lVzxmsz%IFi5LU6?B_*m zU+>^(i0e~9?monhB8ms-fCh=V8kp7tycm%3MI|rCE%-%DQ;~YHJLH8jF%aQpixsOO zLM8yBTLl_&)Yw_Zc-xBFH|K}_#fO@~Fg`XF6@Hq&52(0M;0dTFJ(doCkYb-;Pc?T9 z{xcp@|5|y!#5ltH#buDLP=-IzqpM1mBz0gHQXa>0W11{lass%s15cvF&!R1tIXY3} z4`_i`;I>NnJ06gp=JXP+ve$$ek>Qb2=X;)X*S8(r@&h z9iab0;<@D%ev6}*1s z`(xU!V9`3f49Bff>l`TST_0G&LDb>RQ|h?1;a~LY*2g=U7wC_w(5y>GB!-lOqoTb3 zWSU534gb@ACsyI zKd%jCvCKBqz#BHJc%^vC5_;`Ny1zt{B~Aj5RAb}!#r|%sO$v4o*;$-UAId-wmAGRR4nYKin6_@!(8qwli zFiN94EaLx=HmgO`yN5aZPnwf^YMW#^^`A=)ZeoRj4faGZC8^*a>)z6uk`uc2IvJDt{sW27hu>l+}n<5H;|sX=b@NfC&c`hF(> zBRyxaIN`ntYEHF{UTnZ< z^SA4(*|Ip{{FO-2dewOgJ9)KBcw`z zN*blLI*5Imscp3xRa&YBPAY;cgXz;au3&6mW(g3j$SV++25IhbbP8Ha?p1)4L$kV< zHV-@!^6n^?bx!kwk$BY{adKbw2p-~EXsbwO(xcpp@PK5k9&G-5M42t)OJUouj#goh z-R|3Jpe*C4V2G=H#jWcE;fJuDRlw3J396%NqddaAeG|&|iBoxBprXj}?7o$-@sI|n zsr+9z%vDKFR|9v=1HOJ!HTiw0$D@O1`;;+TI;_Uv!8u=wV$KqHjb64i9Cr0}Tw)STsD@!VXAcPRvPUiu*Jo=AN} zh7aX5WUQ^)d7X=t#k;>yd1-=Zap35kT2Meq<$;wp=+)O(o>sXcXRz;S4YDn{pE_-v~Q zr=c=5K>Zyw6&HU*wb<8|F_fK6KBSC)L#E&4byd(dBCyZvI9gF@!a z3$H2!(6~5&YT4u&GNl*cy~;Enp_0l$ApY})c&;g*IeSb3_IqlqIS!=F=h9XpGq3eh z>vE&hh#n5y3xD4pm8Av`Y;mczQb-EBEDj~o3)V{vXOf6x7c z0<-jyAFkZXJ(cLBoH^p!dH;tfC!n!#>o)WTR9PzFC$8T>VZiw{PpI$3&*rX!jK8s$%ZB1Jlb{Zth~j7&lB{zdmjzRUIxG8taF}OOUJwZv1{ z>_~Su7!|5z%prK(nvWxE%ocs!!Q|)xPnWOSdFR)KOa!r}L17o#ORJ;HZW`q?!95Zu z=aL{b_E!WPgy4<4pOG0B1VUp&-WQb90FOLxSIpK1#TZq`dTouB(X;LuLx`l%@S&Aw z1{i$61&`3&nli12&%e4Kvj-k`88aALX^fkLXd~!4s2yDKw!&ObW$R%9++94JpE{D0 F{|Dgx3}XNQ literal 3312 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 From 752e91e1b8cb5f3be5f28651338f27bc854114b8 Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 24 Aug 2022 22:27:47 +0200 Subject: [PATCH 04/25] Minor design improvement --- apps/bwclk/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bwclk/app.js b/apps/bwclk/app.js index 6de1a8b7f..d577ed511 100644 --- a/apps/bwclk/app.js +++ b/apps/bwclk/app.js @@ -248,7 +248,7 @@ if(storage.readJSON("android.calendar.json") !== undefined){ var title = entry.title.slice(0,14); var date = new Date(entry.timestamp*1000); var dateStr = locale.date(date).replace(/\d\d\d\d/,""); - dateStr += entry.durationInSeconds < 86400 ? " / " + locale.time(date,1) : ""; + dateStr += entry.durationInSeconds < 86400 ? "/ " + locale.time(date,1) : ""; function dynImgAgenda(){ if(isAlarmEnabled(TIMER_AGENDA_IDX) && agendaTimerIdx == agendaIdx){ From 4485e58218fd3b8662269a3186cfec294c52838d Mon Sep 17 00:00:00 2001 From: David Peer Date: Wed, 24 Aug 2022 22:29:03 +0200 Subject: [PATCH 05/25] Updated screenshot --- apps/bwclk/screenshot_3.png | Bin 3294 -> 3438 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/bwclk/screenshot_3.png b/apps/bwclk/screenshot_3.png index 6586dc3555ebeefcc7f397d78258bd6ce273109e..8d982cac483cd804c66a797c2075692ffb413b60 100644 GIT binary patch delta 3423 zcmV-l4WRPg8SWa8FnH3zTTfnAVgfv!n&%m4JiY&duYZgft)@4?pT2d_PFw(w z&K2tG1o(OUxkpr1PZZeNi4x!u#5bV59+&{Tr}xVerpJeRGM$a>XRdmPr=5cYy#51f)-PNGpj z13gb6G|F;pihlwYfZ0N%q=u773b2Kc6ykMv1*Fplbi$cUoYW)V*ZDyPnvEBY8v%^A z1GC3yY$09*oOh`8WB)!XLyyt;L56omXiuep22}K;W$h<%Y#~%BAQacm*Tq*;Mp1)ka5@sl`nI(Va2fl&`!+d``_zJK}S>y+AjaeRUTt&Lr4TE5Vp zkPJ?-j{-ag-X|CI#Gn8HHi*Vs_ECTU?~@C9Vo-np8${zR`zSzw7v`eeaU;L*r5Udo z8zn)84+J5+mhMndyOGjl_^sX}<-YOIxHc(xpap4u%qq=$6=m`;NTN1y#z5-yhaMa_ZMUr`x7YeW^9G*K@|;GL>(uV<8Cxv!(uQL-n& z(raB_*Fq5BcFHvsc+?UgM_(Q}kZgD?7-><3R$ysz?RBpTykqs1dQ{}N>(-M1YspF) z|8#(R5FWN zV*vI7&&!TgaOu95e`rNTPfs+b5!&i6onlDwYp=fwU<cz>j~05}TX+3NdtfJaXP%~^HiGFT4q&hV}PxCI6R3o_=X zZxp_@jO3(*Qrbs67GOlE8F8#O`u+d&XuLc-7zC*@f zs?CpD0&q0EQtvx2+iwdV0FT-LsYQ^k_ns;{f8!X*Q#!yI@DkwfVeWgddo2P4Jg+gS z088+CRI%1Z#Y?P_9S`4ES6~9%$*=_Ob(;qO$mS~w=2`y{cxC`cS_s4k^nWBHO6S^c zcm-Yo?}{o+fU}VOd!A5$5qLeqo`nZJ)+)z&&#BeQ@--i+da?pnBxsXjh1nY>q!sa; z)2fsA2?7Boz@|003&8d14f>TL&&8}2kS&CuSPw4Gq}{@J^FfBSvS?SK zCrrO~xy5?}5k0U42IL%f27f+n-XisvSYQQST!GQ5i5!E~Er67K6mrSVV*!=|=XLyl zDar&`I)=>p#xcT2XazAW0F!~E6(GPzr;pAPU@~yD0tEQz^wD_&Oa_itAQfQb6+HA^REz4X=ePLW zx@VU-q~B-rig#ou9DiU$?3ROGAg`X^D~UVAq4mKlhsyxg2J8*;>iJj0Th2cN)2xm& zb4wbARp8m6XT@JVza%_*eRUjO^G87(0bGqSsf)v3h<~Cs%-xpl7})C_%h>epGa6+zxSAe6ZXjX@4PIPXkzj?{*aZH5l#j zQpWs}*y!~c4Wf0t>`PioAWQe7I(>Zc`ckKd=riK4o?j#SXzUJgc=+I91JRTKH&n_J zKk6wmQwXkmd+}>3XO@QH0BeFS6RH(aJ6>Ad-u9&VB{4@7Terc~;eDQ$K!v+#70S;&(EYKjyvW&6%G6Ueuz1kSJ1UOTGh@&hkG}`1z z<7adn-7C#I>{&bi@1E5r0d6QallZLTBP8KbaUgTI#(zZYAGQN{R&=Yl_kAAo?@)m~ z;utMPtjq07G&aO;67E)`gz00Ca1I)CSMQ-A=wNl8O16d=GWROg&-3J_p7DQReh z0X5a15Ly?=^( z{T-<`Pii3uFuF98#*N_WT`T{NRM;m0e5J(`VpiZu&?QJm=5O((KKW??Pf8wkJ6niC z+EHa4o$I#ldlJB&)%TK{6?k$zTU&^-`i^?!@{#MAtjVy=w-aEqbTKy~0JmlywGa3B z-k6g?CcrTqnypHYcd5VaZE8wLYkwOA_)oe#wRmL@Y$pGOH||`0Km9bn6Zb+Y6(JK~ zg;*TAp8^DUznst`P=VdyO=}^LPp&{s)x(et*=Cx-HQLCB9(*^}~ zv`?s8s2Q6-wj$4gBLJRF27gk0k!p;L={=f}K6TW3WCI-455ERrZLirArdP3%g@(eY zo!erU0RK@fwS{Q)Z%8sc07l`JdRt5TplNlG%8qEJ>6MX6=v9S1H*lYpFRF!*0+x2B zXjRlCyw&3(Eybv>lMC1KA+<7E~l?QMN+>mMT>5Q8!9< zUD4{XqlMBFPpaD1>yob}KsAU`OEOxZlE3%8nmMAt^RgQPu$Oa)9ci&3HaO;71&#u^ z*9$)Bk$5gjYdk*&;8;-){G>avxjqNg1p9PPp7We@(*N?n$U%2N0RWJ5 zcXRgI^0oh}jMSE`X`CW$IZ&h*#u0ehhnxif*8|y?d_$02Aw~i9;Df8o*Zdm6mTWG0LeVFZ_JY>?d*3ZIg2BEzXg?5WeP-!hEXY(! ztC|K}xwJaP2Gk_zczfWmZQ?}|keP%r(V=PIJ!G?&_Ljp?Rpih;%KqNYIm72cW%!uK zo_#QWx@bKxP>(?8GcBHUp1c;&D(Xlv*iep!-#g+@6_%pHq+$CpTS}Y z@1T{!4S1WQDrc>_h|I zmsTD1%i|kP4h}jZQ>2N($Gts$8_O5~3F7`I`ML3@rvOGiTkGg)PMli#_A#z_8pJY& zynM#UBujC4XG_InAAoxPLZvl0X5n0&DaV8}3f8V(=PhC4M`sc|6T@t1sBm6^$Z97~ z(uH5Tv_zcoJe-n=|0rYN+^bg8?dv!o6z71lVzxmsz%IFi5LU6?B_*m zU+>^(i0e~9?monhB8ms-fCh=V8kp7tycm%3MI|rCE%-%DQ;~YHJLH8jF%aQpixsOO zLM8yBTLl_&)Yw_Zc-xBFH|K}_#fO@~Fg`XF6@Hq&52(0M;0dTFJ(doCkYb-;Pc?T9 z{xcp@|5|y!#5ltH#buDLP=-IzqpM1mBz0gHQXa>0W11{lass%s15cvF&!R1tIXY3} z4`_i`;I>NnJ06gp=JXP+ve$$ek>Qb2=X;)X*S8(r@&h z9iab0;<@D%ev6}*1s z`(xU!V9`3f49Bff>l`TST_0G&LDb>RQ|h?1;a~LY*2g=U7wC_w(5y>GB!-lOqoTb3 zWSU534gb@ACsyI zKd%jCvCKBqz#BHJc%^vC5_;`Ny1zt{B~Aj5RAb}!#r|%sO$v4o*;$-UAId-wmAGRR4nYKin6_@!(8qwli zFiN94EaLx=HmgO`yN5aZPnwf^YMW#^^`A=)ZeoRj4faGZC8^*a>)z6uk`uc2IvJDt{sW27hu>l+}n<5H;|sX=b@NfC&c`hF(> zBRyxaIN`ntYEHF{UTnZ< z^SA4(*|Ip{{FO-2dewOgJ9)KBcw`z zN*blLI*5Imscp3xRa&YBPAY;cgXz;au3&6mW(g3j$SV++25IhbbP8Ha?p1)4L$kV< zHV-@!^6n^?bx!kwk$BY{adKbw2p-~EXsbwO(xcpp@PK5k9&G-5M42t)OJUouj#goh z-R|3Jpe*C4V2G=H#jWcE;fJuDRlw3J396%NqddaAeG|&|iBoxBprXj}?7o$-@sI|n zsr+9z%vDKFR|9v=1HOJ!HTiw0$D@O1`;;+TI;_Uv!8u=wV$KqHjb64i9Cr0}Tw)STsD@!VXAcPRvPUiu*Jo=AN} zh7aX5WUQ^)d7X=t#k;>yd1-=Zap35kT2Meq<$;wp=+)O(o>sXcXRz;S4YDn{pE_-v~Q zr=c=5K>Zyw6&HU*wb<8|F_fK6KBSC)L#E&4byd(dBCyZvI9gF@!a z3$H2!(6~5&YT4u&GNl*cy~;Enp_0l$ApY})c&;g*IeSb3_IqlqIS!=F=h9XpGq3eh z>vE&hh#n5y3xD4pm8Av`Y;mczQb-EBEDj~o3)V{vXOf6x7c z0<-jyAFkZXJ(cLBoH^p!dH;tfC!n!#>o)WTR9PzFC$8T>VZiw{PpI$3&*rX!jK8s$%ZB1Jlb{Zth~j7&lB{zdmjzRUIxG8taF}OOUJwZv1{ z>_~Su7!|5z%prK(nvWxE%ocs!!Q|)xPnWOSdFR)KOa!r}L17o#ORJ;HZW`q?!95Zu z=aL{b_E!WPgy4<4pOG0B1VUp&-WQb90FOLxSIpK1#TZq`dTouB(X;LuLx`l%@S&Aw z1{i$61&`3&nli12&%e4Kvj-k`88aALX^fkLXd~!4s2yDKw!&ObW$R%9++94JpE{D0 F{|Dgx3}XNQ From a3de2a946075be9e9bc43d0cb3ffbd58094d0867 Mon Sep 17 00:00:00 2001 From: aaronrolls Date: Thu, 25 Aug 2022 09:15:35 +0000 Subject: [PATCH 06/25] Added readme, change up version to 0.02 --- apps/chimer/metadata.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/chimer/metadata.json b/apps/chimer/metadata.json index fab277f15..d5bc04950 100644 --- a/apps/chimer/metadata.json +++ b/apps/chimer/metadata.json @@ -1,12 +1,13 @@ { "id": "chimer", "name": "Chimer", - "version": "0.01", + "version": "0.02", "description": "A fork of Hour Chime that adds extra features such as: \n - Buzz or beep on every 60, 30 or 15 minutes. \n - Reapeat Chime up to 3 times \n - Set hours to disable chime", "icon": "widget.png", "type": "widget", "tags": "widget", "supports": ["BANGLEJS", "BANGLEJS2"], + "readme": "README.MD", "storage": [ { "name": "chimer.wid.js", "url": "widget.js" }, { "name": "chimer.settings.js", "url": "settings.js" } From 747b21f7fe9d092584567ed63720359b94d4992b Mon Sep 17 00:00:00 2001 From: aaronrolls Date: Thu, 25 Aug 2022 09:15:42 +0000 Subject: [PATCH 07/25] Created --- apps/chimer/ChangeLog | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 apps/chimer/ChangeLog diff --git a/apps/chimer/ChangeLog b/apps/chimer/ChangeLog new file mode 100644 index 000000000..01bd00a0a --- /dev/null +++ b/apps/chimer/ChangeLog @@ -0,0 +1,2 @@ +0.01: Initial Creation +0.02: Fixed some sleep bugs. Added a sleep mode toggle \ No newline at end of file From b3c33855ac94f8f7c63767511c99f7d70abf5e75 Mon Sep 17 00:00:00 2001 From: aaronrolls Date: Thu, 25 Aug 2022 09:15:59 +0000 Subject: [PATCH 08/25] Added setting to toggle sleep mode --- apps/chimer/settings.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/apps/chimer/settings.js b/apps/chimer/settings.js index 594188c00..ea049f493 100644 --- a/apps/chimer/settings.js +++ b/apps/chimer/settings.js @@ -43,7 +43,14 @@ writeSettings(settings); }, }, - "Start Hour": { + "Sleep Mode": { + value: settings.sleep, + onchange: (v) => { + settings.sleep = v; + writeSettings(settings); + }, + }, + "Sleep Start": { value: settings.start, min: 0, max: 23, @@ -53,7 +60,7 @@ writeSettings(settings); }, }, - "End Hour": { + "Sleep End": { value: settings.end, min: 0, max: 23, @@ -71,6 +78,7 @@ type: 1, freq: 0, repeat: 1, + sleep: true, start: 6, end: 22, }; From 478cef2393e63529dc7b0560fc18abc81da878b7 Mon Sep 17 00:00:00 2001 From: aaronrolls Date: Thu, 25 Aug 2022 09:16:51 +0000 Subject: [PATCH 09/25] Added sleep mode feature --- apps/chimer/widget.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/chimer/widget.js b/apps/chimer/widget.js index 807f2b0cb..18358df9e 100644 --- a/apps/chimer/widget.js +++ b/apps/chimer/widget.js @@ -7,6 +7,7 @@ type: 1, freq: 0, repeat: 1, + sleep: true, start: 6, end: 22, }; @@ -45,9 +46,9 @@ s = now.getSeconds(), ms = now.getMilliseconds(); if ( - h > settings.end || - (h >= settings.end && m !== 0) || - h < settings.start + (settings.sleep && h > settings.end) || + (settings.sleep && h >= settings.end && m !== 0) || + (settings.sleep && h < settings.start) ) { var mLeft = 60 - m, sLeft = mLeft * 60 - s, From 8f70e2779a31528d6c661514b14abbb5d44edd77 Mon Sep 17 00:00:00 2001 From: aaronrolls Date: Thu, 25 Aug 2022 09:26:36 +0000 Subject: [PATCH 10/25] Added sleep mode toggle --- apps/chimer/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/chimer/settings.js b/apps/chimer/settings.js index ea049f493..55160c9be 100644 --- a/apps/chimer/settings.js +++ b/apps/chimer/settings.js @@ -44,7 +44,7 @@ }, }, "Sleep Mode": { - value: settings.sleep, + value: !!settings.sleep, onchange: (v) => { settings.sleep = v; writeSettings(settings); From 5d14311c584e99c83f6ea9ee47ca25bd2d755096 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Fri, 26 Aug 2022 01:58:19 +0200 Subject: [PATCH 11/25] move setUI("clock") up before loadWidgets(). This makes bwclock and "Digital clock widget" play nice together --- apps/bwclk/app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/bwclk/app.js b/apps/bwclk/app.js index d577ed511..f1c650c10 100644 --- a/apps/bwclk/app.js +++ b/apps/bwclk/app.js @@ -735,6 +735,9 @@ E.on("kill", function(){ // dark/light theme as well as the colors. g.setTheme({bg:g.theme.fg,fg:g.theme.bg, dark:!g.theme.dark}).clear(); +// Show launcher when middle button pressed +Bangle.setUI("clock"); + // Load widgets and draw clock the first time Bangle.loadWidgets(); @@ -744,6 +747,3 @@ for (let wd of WIDGETS) {wd._draw=wd.draw; wd._area=wd.area;} // Draw first time draw(); - -// Show launcher when middle button pressed -Bangle.setUI("clock"); From a16d414e4ebc471b180c7992542e1b8588f36db1 Mon Sep 17 00:00:00 2001 From: thyttan <6uuxstm66@mozmail.com⁩> Date: Fri, 26 Aug 2022 02:20:01 +0200 Subject: [PATCH 12/25] bump version --- apps/bwclk/ChangeLog | 3 ++- apps/bwclk/metadata.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/bwclk/ChangeLog b/apps/bwclk/ChangeLog index ae95e8ae7..5ff1eb90e 100644 --- a/apps/bwclk/ChangeLog +++ b/apps/bwclk/ChangeLog @@ -15,4 +15,5 @@ 0.15: Added option for a dynamic mode to show widgets only if unlocked. 0.16: You can now show your agenda if your calendar is synced with Gadgetbridge. 0.17: Fix - Step count was no more shown in the menu. -0.18: Set timer for an agenda entry by simply clicking in the middle of the screen. Only one timer can be set. \ No newline at end of file +0.18: Set timer for an agenda entry by simply clicking in the middle of the screen. Only one timer can be set. +0.19: Fix - Compatibility with "Digital clock widget" diff --git a/apps/bwclk/metadata.json b/apps/bwclk/metadata.json index 0f9836a42..bc2bb37b6 100644 --- a/apps/bwclk/metadata.json +++ b/apps/bwclk/metadata.json @@ -1,7 +1,7 @@ { "id": "bwclk", "name": "BW Clock", - "version": "0.18", + "version": "0.19", "description": "A very minimalistic clock to mainly show date and time.", "readme": "README.md", "icon": "app.png", From 1751b96e6670897935d997f772e7bed1bca7a2dc Mon Sep 17 00:00:00 2001 From: storm64 Date: Sun, 28 Aug 2022 16:30:13 +0200 Subject: [PATCH 13/25] Update .gitignore Add Nextcloud and Windows configuration files. --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index a9398e871..f4588ac6f 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,6 @@ tests/Layout/testresult.bmp apps.local.json _site .jekyll-cache +.owncloudsync.log +Desktop.ini +.sync_*.db* From 6e909eeeeb17b3f77921632256185be54f2e8870 Mon Sep 17 00:00:00 2001 From: Leon Matthes Date: Sun, 7 Aug 2022 23:32:16 +0200 Subject: [PATCH 14/25] [calclock] Initial version --- apps/calclock/ChangeLog | 1 + apps/calclock/README.md | 6 ++ apps/calclock/app.js | 106 ++++++++++++++++++++++++++++++++++++ apps/calclock/app.png | Bin 0 -> 3119 bytes apps/calclock/metadata.json | 15 +++++ 5 files changed, 128 insertions(+) create mode 100644 apps/calclock/ChangeLog create mode 100644 apps/calclock/README.md create mode 100644 apps/calclock/app.js create mode 100644 apps/calclock/app.png create mode 100644 apps/calclock/metadata.json diff --git a/apps/calclock/ChangeLog b/apps/calclock/ChangeLog new file mode 100644 index 000000000..ec66c5568 --- /dev/null +++ b/apps/calclock/ChangeLog @@ -0,0 +1 @@ +0.01: Initial version diff --git a/apps/calclock/README.md b/apps/calclock/README.md new file mode 100644 index 000000000..d4b8fc9b6 --- /dev/null +++ b/apps/calclock/README.md @@ -0,0 +1,6 @@ +# Calendar Clock - Your day at a glance + +This clock shows a chronological view of your current and future events. +It uses events synced from Gadgetbridge to achieve this. + +The current time and date is highlighted in cyan. diff --git a/apps/calclock/app.js b/apps/calclock/app.js new file mode 100644 index 000000000..d25a8d309 --- /dev/null +++ b/apps/calclock/app.js @@ -0,0 +1,106 @@ +var calendar = []; +var current = []; +var next = []; + +function updateCalendar() { + calendar = require("Storage").readJSON("android.calendar.json",true)||[]; + calendar = calendar.filter(e => isActive(e) || getTime() <= e.timestamp); + calendar.sort((a,b) => a.timestamp - b.timestamp); + + current = calendar.filter(isActive); + next = calendar.filter(e=>!isActive(e)); +} + +function isActive(event) { + var timeActive = getTime() - event.timestamp; + return timeActive >= 0 && timeActive <= event.durationInSeconds; +} +function zp(str) { + return ("0"+str).substr(-2); +} + +function drawEvent(event, y) { + g.setFont("Vector", 24); + + var time = isActive(event) ? new Date() : new Date(event.timestamp * 1000); + var timeStr = zp(time.getHours()) + ":" + zp(time.getMinutes()); + g.drawString(timeStr, 5, y); + y += 24; + + g.setFont("6x15", 1); + if (isActive(event)) { + g.drawString(require("locale").date(time,1),15*timeStr.length,y-15); + } else { + var offset = 0-time.getTimezoneOffset()/1440; + var days = Math.floor((time.getTime()/1000)/86400+offset)-Math.floor(getTime()/86400+offset); + if(days > 0) { + var daysStr = days===1?/*LANG*/"tomorrow":/*LANG*/"in "+days+/*LANG*/" days"; + g.drawString(daysStr,15*timeStr.length,y-15); + } + } + + g.setFont("12x20", 1); + var lines = g.wrapString(event.title, g.getWidth()-10); + g.drawString(lines.join('\n'), 5, y); + y += 20 * lines.length; + y += 5; + + return y; +} + +var curEventHeight = 0; + +function drawCurrentEvents(y) { + g.setColor("#0ff"); + g.clearRect(5, y, g.getWidth() - 5, y + curEventHeight); + curEventHeight = y; + + if(current.length === 0) { + y = drawEvent({timestamp: getTime(), durationInSeconds: 100}, y); + } else { + for (var e of current) { + y = drawEvent(e, y); + } + } + curEventHeight = y - curEventHeight; + return y; +} + +function drawFutureEvents(y) { + g.setColor("#fff"); + for (var e of next) { + y = drawEvent(e, y); + if(y>g.getHeight())break; + } + return y; +} + +function fullRedraw() { + g.clearRect(5,24,g.getWidth()-5,g.getHeight()); + updateCalendar(); + var y = 30; + y = drawCurrentEvents(y); + drawFutureEvents(y); +} + +function redraw() { + g.reset(); + if (current.find(e=>!isActive(e)) || next.find(isActive)) { + fullRedraw(); + } else { + drawCurrentEvents(30); + } +} + +// ------------------ DEBUG ----------------- +// calendar[2].timestamp = getTime(); + +// Clear the screen once, at startup +g.clear(); +// draw immediately at first +fullRedraw(); +var minuteInterval = setInterval(redraw, 60 * 1000); + +Bangle.loadWidgets(); +Bangle.drawWidgets(); +Bangle.setUI("clock"); \ No newline at end of file diff --git a/apps/calclock/app.png b/apps/calclock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..c850b0e5d1a3eb98b9c9cb68968ab554119fe23f GIT binary patch literal 3119 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 Date: Tue, 30 Aug 2022 11:01:01 +0200 Subject: [PATCH 15/25] [calclock] Version 0.02 More compact rendering & App icon --- apps/calclock/ChangeLog | 1 + apps/calclock/README.md | 3 ++ apps/calclock/app.png | Bin 3119 -> 0 bytes apps/calclock/calclock-icon.js | 1 + apps/calclock/{app.js => calclock.js} | 41 +++++++++++++++++--------- apps/calclock/calclock.png | Bin 0 -> 11346 bytes apps/calclock/location.png | Bin 0 -> 692 bytes apps/calclock/metadata.json | 10 ++++--- apps/calclock/screenshot.png | Bin 0 -> 2922 bytes 9 files changed, 38 insertions(+), 18 deletions(-) delete mode 100644 apps/calclock/app.png create mode 100644 apps/calclock/calclock-icon.js rename apps/calclock/{app.js => calclock.js} (74%) create mode 100644 apps/calclock/calclock.png create mode 100644 apps/calclock/location.png create mode 100644 apps/calclock/screenshot.png diff --git a/apps/calclock/ChangeLog b/apps/calclock/ChangeLog index ec66c5568..faffda176 100644 --- a/apps/calclock/ChangeLog +++ b/apps/calclock/ChangeLog @@ -1 +1,2 @@ 0.01: Initial version +0.02: More compact rendering & app icon diff --git a/apps/calclock/README.md b/apps/calclock/README.md index d4b8fc9b6..2b4e93a0c 100644 --- a/apps/calclock/README.md +++ b/apps/calclock/README.md @@ -4,3 +4,6 @@ This clock shows a chronological view of your current and future events. It uses events synced from Gadgetbridge to achieve this. The current time and date is highlighted in cyan. + +## Screenshot +![](screenshot.png) diff --git a/apps/calclock/app.png b/apps/calclock/app.png deleted file mode 100644 index c850b0e5d1a3eb98b9c9cb68968ab554119fe23f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3119 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 0) { var daysStr = days===1?/*LANG*/"tomorrow":/*LANG*/"in "+days+/*LANG*/" days"; - g.drawString(daysStr,15*timeStr.length,y-15); + g.drawString(daysStr,15*timeStr.length,y-21); } } + return y; +} +function drawEventBody(event, y) { g.setFont("12x20", 1); var lines = g.wrapString(event.title, g.getWidth()-10); + if (lines.length > 2) { + lines = lines.slice(0,2); + lines[1] = lines[1].slice(0,-3)+"..."; + } g.drawString(lines.join('\n'), 5, y); - y += 20 * lines.length; - y += 5; + y+=20 * lines.length; + if(event.location) { + g.drawImage(atob("DBSBAA8D/H/nDuB+B+B+B3Dn/j/B+A8A8AYAYAYAAAAAAA=="),5,y); + g.drawString(event.location, 20, y); + y+=20; + } + y+=5; + return y; +} +function drawEvent(event, y) { + y = drawEventHeader(event, y); + y = drawEventBody(event, y); return y; } @@ -58,8 +75,9 @@ function drawCurrentEvents(y) { if(current.length === 0) { y = drawEvent({timestamp: getTime(), durationInSeconds: 100}, y); } else { + y = drawEventHeader(current[0], y); for (var e of current) { - y = drawEvent(e, y); + y = drawEventBody(e, y); } } curEventHeight = y - curEventHeight; @@ -67,7 +85,7 @@ function drawCurrentEvents(y) { } function drawFutureEvents(y) { - g.setColor("#fff"); + g.setColor(g.theme.fg); for (var e of next) { y = drawEvent(e, y); if(y>g.getHeight())break; @@ -92,15 +110,10 @@ function redraw() { } } -// ------------------ DEBUG ----------------- -// calendar[2].timestamp = getTime(); - -// Clear the screen once, at startup g.clear(); -// draw immediately at first fullRedraw(); var minuteInterval = setInterval(redraw, 60 * 1000); Bangle.loadWidgets(); Bangle.drawWidgets(); -Bangle.setUI("clock"); \ No newline at end of file +Bangle.setUI("clock"); diff --git a/apps/calclock/calclock.png b/apps/calclock/calclock.png new file mode 100644 index 0000000000000000000000000000000000000000..5f953c1ee58bf850e2e3c127f378e9f798e44d33 GIT binary patch literal 11346 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 z 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 literal 0 HcmV?d00001 From bd829f27e92e0c487f31e39ddb75d05939b8fe61 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 2 Sep 2022 20:03:50 +0200 Subject: [PATCH 16/25] widgps: Do not take widget space if icon is hidden --- apps/widgps/.ChangeLog.swp | Bin 0 -> 12288 bytes apps/widgps/.metadata.json.swp | Bin 0 -> 12288 bytes apps/widgps/.widget.js.swp | Bin 0 -> 12288 bytes apps/widgps/ChangeLog | 3 ++- apps/widgps/metadata.json | 2 +- apps/widgps/widget.js | 5 +++-- 6 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 apps/widgps/.ChangeLog.swp create mode 100644 apps/widgps/.metadata.json.swp create mode 100644 apps/widgps/.widget.js.swp diff --git a/apps/widgps/.ChangeLog.swp b/apps/widgps/.ChangeLog.swp new file mode 100644 index 0000000000000000000000000000000000000000..0ad8a6b78f715368557e99f268fe89e6c6eade41 GIT binary patch literal 12288 zcmeI2&59F25XU>-JnSm#3zRNsge715Va&*Es6coT~YtSHP$%HL;oq-xuNr_3Vlo;jn3!no|PP@S8l$gog51RA#g1M zd+K;J9Hf%Ndw1c^!P{$9OR^9U0zyCt2mv7=1cZPP5CXeRAXXjqnOC^6UgPH4cmDC~ zpW=jo5D)@FKnMr{As_^VfDjM@LO=)zfgL1(xl%v&l!AR0&;S2#-v58yQtBJq7q*J+ zKHGQB`O5Z&tQnxqs^$7x;^4?VWMeC`(4SJX(?r2Oh)_9W zTE%GtzV#mKa0G5i-lrv50LQ1UVU2u`JvZ#T+yV}VC#Pqvtdj{`rXi_5o&4>QW*kr8 zIR`2ibkxrBA}KoBOrCkdMMCatn+}uq(Q+{6F8-=PPtg5Xhsb**otv%Du42jA?d)Ni M;5mo&1|FgQ0L?SUh5!Hn literal 0 HcmV?d00001 diff --git a/apps/widgps/.metadata.json.swp b/apps/widgps/.metadata.json.swp new file mode 100644 index 0000000000000000000000000000000000000000..b9181f20d7dc4c1e2f9341bd2ab365f99c150634 GIT binary patch literal 12288 zcmeI2(P|Sx6ox0gQlwVe7Z|7DMG3nxf@r-lp&?Xk5u;U*g44`ovvxDH?o3QeDL#w0 zzJzb!l~=xi2tI>&W_N?t3hAYVf8gKQoH^&rIbW_q&OvK$dxzhP+Kko>#=bpV9e%#` zy74k&Oc&{4FfUpMnH(NEFN+0^@z_puyk%!5vr@UZD@~H=PM*71hQ};b32hVYrIKDo zZ=5v?QsNi{K;Xgzmf4;5?N)GK7dQFZ>hlXn!Vv^O00ck)1V8`;KmY_l;PMmjd4s*D zHkRsE*6O|S*Is|b1_B@e0w4eaAOHd&00JNY0w4eaAaDr@NX6KPWyY>vr{d}V|M~C# zpDT?0AblZyA{o*isY}`*Es?%c%vaJ!(p%C4(p}O9X@zu+6!KmnVSxY$fB*=900@8p z2!H?xfB*>mCj?Fz=ldkiPlS;ZEjC3pk6n&oi*PK$RJPdUujqZhNssfsPJ5r4#8HrF zifNHinzOc$=6saWBRS1{b<;fT598^-ucHdj-V_SfA&n^gh4Z$M3AIv|ED9}EXpD=e zz0TH7FPbP3@(MT2b6a>997VUY+kf19G@$zDuWeDbE4)mCPYFi*CJn1s@%}h3(^mIa zwsdICZ{H|4No7~s4U07QX?6T8HOIV)n&)<=3oeb~qx6W=aJ`>8Zb#)= q|H&Zk?+&QKQ2aYxxH?%YYTd7l)i=lmx$+k!mAWc5uc@s4g#7{=CBj|+ literal 0 HcmV?d00001 diff --git a/apps/widgps/.widget.js.swp b/apps/widgps/.widget.js.swp new file mode 100644 index 0000000000000000000000000000000000000000..914d069103c2512c2910399744afd34b564191d9 GIT binary patch literal 12288 zcmeI2Pi)&%9LL{4Y`_?xA%w(`_%&mjL#jCKDiKj-=!I-)fh?P{u>~ZA6TdiaQ#;ts z(rSy4IB?r>XcvwMX?IQ>5O4zt4jd6T5OCq&5pm%A{I5<|(QXIO*t7Jho%hf0_j!Mu zsP2?rU2aghIL~lA%Gl?%gWY3~yt(J%fHC3Ot1@|~qcbqNtA1d3I~3IW?wZhR?${Z) zhUx27!?6Z}4~M>P$UkG-wBnNpiYxvO&8ci=797ghsU{CxxIp5h)s@^LD%78MU3@8K2 zfHI&AC}q2@8BD76`TPL@CrBqDqt`8 z?qSA00$0H@m;+CPr@$ewAN+NIv5&zA;5~2+ybg|lec-Ey7<(5ifjl?>_JN=GGxjBT zAGqK-a1{LdAY(s(@4?sL6Ho(3z%$@+@XG^?eFi=SH^6mp2>f|JW50o)z>nYya06Tc zr@=gU5?tTMm=8Q)01oot!@Z2X1J;2J&VwR&0$hW`A?SfOz(sHloCTrZyL+ms=#_#0 zp@GR{lGpN!EIBPQq6tX;Zl1GOGG87+-}Z~^voueI=z0T9g*ll&M&Nd|T)k>nd3sa} zyt<Uz!M3w+GGKs4ICce2epR-3;zZu7>%m^Zp-d9%rReTnlWl&#gqyt=l)tA#G- zWn{GLX`Aw*Qpx3KGd-}1re}-AA31sg&jX|xV?Mgci4_3ZW3MH+dUlEi%50V4oj z)1zT+#8aSMZu2ZMUDB+MdA(}IQ-EU%0Mtj!m;!06;l(Wk>^fvPCiM+}DpvDZXx@607uI(eU>1cVh zMHJ>IlI2*e8Q!Y!$d;|Mxc263+q{zP?rI3OEI_GB*UMF1FJKD6?Ka4~9r9%xQ~GbR zPvP>9BapqFntxO2Sd%Zh1J~1Xhs))1F25*6VD&+%<%x~7?5@^tA~TUEZ@mjq|B# zMou@dUF;6n94;)^>L<^&iYOgE&9qDc?lVcAcWDPJxKWUXnY#POpeox1h2_`ni|#5x z%2<#igem(ThZXb%$(No*KtsH2?V5Ji7z{R|1!omKfnG#gpL_<>^HWiwSEw8Gk-V+# zbfBl7&-4P7P-T8W25or4z=vGm*o(M*sL*ZuYIx;1;AiH!S?7ScK zF;l-7^{hfOaXmTwJ9S95eaXO%E%$XiSSsWW%vSgaIOC3mr@787*(N4i+ygX-l3^YS zrz0L0Lj