From cc57c42a17d44016834cd749a5fe4aba0f10b2b5 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 16 Feb 2023 19:05:45 +0100 Subject: [PATCH 001/118] magnav Add tiltfix() for compensation on given sensor values --- apps/magnav/ChangeLog | 1 + apps/magnav/lib.js | 16 +++++++++++----- apps/magnav/metadata.json | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/apps/magnav/ChangeLog b/apps/magnav/ChangeLog index 14a6eb2a2..7b548841a 100644 --- a/apps/magnav/ChangeLog +++ b/apps/magnav/ChangeLog @@ -4,3 +4,4 @@ 0.04: Fix Font size 0.05: Initial portable version 0.06: Outsource tilt compensation to library +0.07: Add tiltfix() for compensation on given sensor values diff --git a/apps/magnav/lib.js b/apps/magnav/lib.js index e3fe8fccb..39c51a1e1 100644 --- a/apps/magnav/lib.js +++ b/apps/magnav/lib.js @@ -22,11 +22,10 @@ exports.calibrate = () => { }); } -exports.tiltfixread = (O,S) => { - "ram" - var m = Bangle.getCompass(); - var g = Bangle.getAccel(); - m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; +exports.tiltfix = (m,g,O,S) => { + if (O & S) { + m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; + } var d = Math.atan2(-m.dx,m.dy)*180/Math.PI; if (d<0) d+=360; var phi = Math.atan(-g.x/-g.z); @@ -39,3 +38,10 @@ exports.tiltfixread = (O,S) => { if (psi<0) psi+=360; return psi; } + +exports.tiltfixread = (O,S) => { + "ram" + var m = Bangle.getCompass({noTiltComp: true}); + var g = Bangle.getAccel(); + return exports.tiltfix(m,g,O,S); +} diff --git a/apps/magnav/metadata.json b/apps/magnav/metadata.json index bd40a08fd..6bdb9d0b6 100644 --- a/apps/magnav/metadata.json +++ b/apps/magnav/metadata.json @@ -1,7 +1,7 @@ { "id": "magnav", "name": "Navigation Compass", - "version": "0.06", + "version": "0.07", "description": "Compass with linear display as for GPSNAV. Has Tilt compensation and remembers calibration.", "screenshots": [{"url":"screenshot-b2.png"},{"url":"screenshot-light-b2.png"}], "icon": "magnav.png", From f1ce35362e5eae3f3c3fcef059ef133459846ee9 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 16 Feb 2023 19:07:59 +0100 Subject: [PATCH 002/118] Adding gpsmagdir bootloader modification Replace GPS heading with compass heading when speed is slow or standing still to avoid the heading from jumping around randomly --- apps/gpsmagdir/README.md | 12 ++++++ apps/gpsmagdir/app.png | Bin 0 -> 1224 bytes apps/gpsmagdir/boot.js | 81 +++++++++++++++++++++++++++++++++++ apps/gpsmagdir/metadata.json | 17 ++++++++ 4 files changed, 110 insertions(+) create mode 100644 apps/gpsmagdir/README.md create mode 100644 apps/gpsmagdir/app.png create mode 100644 apps/gpsmagdir/boot.js create mode 100644 apps/gpsmagdir/metadata.json diff --git a/apps/gpsmagdir/README.md b/apps/gpsmagdir/README.md new file mode 100644 index 000000000..b4c3acf0c --- /dev/null +++ b/apps/gpsmagdir/README.md @@ -0,0 +1,12 @@ +TODO: +- Add Widget +- Add Settings +- Test on BangleJS +- Document settings with defaults +- Document Widget +- Write a summary why +- Drop a note about compass north vs true north +- Note that top of Bangle must point at moving direction when compass +- Document uncompensated compass only when clock is faced up +- Note to regularly calibrate compass before use +- Note compass value not when NaN after calibration diff --git a/apps/gpsmagdir/app.png b/apps/gpsmagdir/app.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e990268e5962927ee471d37fadf9771a4cca2f GIT binary patch literal 1224 zcmV;(1ULJMP)cO9wm>?PxZ;CM{L|NFa>cvE}i;JKF;-c}&k9r^;Tz02kbJ*pX z>Yl-#>Y8Pyw|iXTd`TU4`t_^tdsY4F)mwlrx>&p*2KSQ(>)=WSd9a&2_yn#*PytpG zgMb)ZpaRDfmXnX!p%^>|5EAN$X^mu0Y#D?Ba~Qhji#-w1W}!{!+I zX!OAo=9#gHzatbL6DoMPW5fr?Xc<@fHLmnrBN09O+-PunD1gB?2>~8_ZJt$zvB%gp zyesuZq42$dJ#=-h26 z=Oe*`bvs%QE6IcNO$B%`P3z#gx_wCo4{?QmxK_frM6tTawuC)at=d%K|*u z>+(_dv5?qGe)ZAx0+jyNTGr2<Md;x z5DK?gAMRl%`A1+md2p^q?8JQaKdpy*iNOyw0e?{eR=Di!l+7hRlR|*rZ8>?xNy>vF zd7z2GOQwjsoL>T1N(?IDdC>=3oO4Tj)e7FnZ3{?5A$DLj5Q@s?Tif+--XR7%nx*bm zRzHE>4`-;A0Xd;}q4ReIED*i_`xS^oNc<`OA(;;gI)suRY_M-_Z95TCe`eL`gSoJE zKq&pXm4!Zqb|IABX5F|>K!?C3o@^9QEw}9?yfs;+#8&^pow+cM!IUeBQeqf;Ae&+i zomFI(5E6&2?K76z8J9RD2tUS%IcZ~`KbEc3E8$) zl9LFfPdAHFD+O3NTHVHN6WzilGVjuvj&kCH|LAQuFyeZgOTBr)c|I$YB;F>Zu9(Wvl)nxE$D(J|a_ZWq mljzhvIyZC$bkPNL1pff@&jb*6-b};*0000 0) { + const isFaceUp = (acc) => { + return (acc.z<-6700/8192) && (acc.z>-9000/8192) && Math.abs(acc.x)<2048/8192 && Math.abs(acc.y)<2048/8192; + }; + + const changeGpsCourse = (gps) => { + if (gps.speed < settings.speed) { + if (settings.compassSrc === 1 && (settings.tiltCompensation || isFaceUp(Bangle.getAccel()))) { // Use uncompensated firmware heading only if face is up + const heading = Bangle.getCompass().heading; + if (!isNaN(heading)) { + gps.courseOrig = gps.course; + gps.course = Bangle.getCompass().heading; + } + } else if (settings.compassSrc === 2) { // magnav tilt correction with magnav calibration + gps.courseOrig = gps.course; + gps.course = require("magnav").tiltfixread(CALIBDATA.offset,CALIBDATA.scale); + } + } + return gps; + }; + + // Modify GPS event + Bangle.on('GPS', gps => { + changeGpsCourse(gps); + }); + const origGetGPSFix = Bangle.getGPSFix; + Bangle.getGPSFix = function() { + return changeGpsCourse(origGetGPSFix()); + }; + + // Enable Compass with GPS + const origSetGPSPower = Bangle.setGPSPower; + Bangle.setGPSPower = function(on, id) { + const isGPSon = origSetGPSPower(on, id); + Bangle.setCompassPower(isGPSon, "gpsmagdir"); + return isGPSon; + }; + } // if (settings.compassSrc > 0) +} diff --git a/apps/gpsmagdir/metadata.json b/apps/gpsmagdir/metadata.json new file mode 100644 index 000000000..ebff8f7c9 --- /dev/null +++ b/apps/gpsmagdir/metadata.json @@ -0,0 +1,17 @@ +{ + "id": "gpsmagdir", + "name": "GPS Compass heading switcher", + "shortName":"GPS/Compass direction", + "icon": "app.png", + "version":"0.01", + "description": "Replace GPS heading with compass heading when speed is slow or standing still to avoid the heading from jumping around randomly.", + "type": "bootloader", + "tags": "outdoors", + "supports": ["BANGLEJS","BANGLEJS2"], + "readme": "README.md", + "storage": [ + {"name":"gpsmagdir.boot.js","url":"boot.js"} + ], + "data": [{"name":"gpsmagdir.json"}] +} + From 742bcdddabfabfabb5c2fc9b0ce010010e703747 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 16 Feb 2023 19:19:01 +0100 Subject: [PATCH 003/118] magnav Add tiltfix() for compensation on given sensor values --- apps/magnav/lib.js | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/magnav/lib.js b/apps/magnav/lib.js index 39c51a1e1..fe58615cb 100644 --- a/apps/magnav/lib.js +++ b/apps/magnav/lib.js @@ -23,6 +23,7 @@ exports.calibrate = () => { } exports.tiltfix = (m,g,O,S) => { + "ram" if (O & S) { m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; } From 0b263219750f323f286f3c2ba61aedacf4789b75 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 17 Feb 2023 18:11:12 +0100 Subject: [PATCH 004/118] gpsmagdir: Add widget --- apps/gpsmagdir/metadata.json | 5 ++- apps/gpsmagdir/widget.js | 80 ++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 2 deletions(-) create mode 100644 apps/gpsmagdir/widget.js diff --git a/apps/gpsmagdir/metadata.json b/apps/gpsmagdir/metadata.json index ebff8f7c9..f83f1ee90 100644 --- a/apps/gpsmagdir/metadata.json +++ b/apps/gpsmagdir/metadata.json @@ -6,11 +6,12 @@ "version":"0.01", "description": "Replace GPS heading with compass heading when speed is slow or standing still to avoid the heading from jumping around randomly.", "type": "bootloader", - "tags": "outdoors", + "tags": "outdoors,widget", "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ - {"name":"gpsmagdir.boot.js","url":"boot.js"} + {"name":"gpsmagdir.boot.js","url":"boot.js"}, + {"name":"gpsmagdir.wid.js","url":"widget.js"} ], "data": [{"name":"gpsmagdir.json"}] } diff --git a/apps/gpsmagdir/widget.js b/apps/gpsmagdir/widget.js new file mode 100644 index 000000000..cf3c9c60c --- /dev/null +++ b/apps/gpsmagdir/widget.js @@ -0,0 +1,80 @@ +(() => { + const settings = Object.assign({ + compassSrc: 1, // 0 = off + showWidget: 2, // 0 = never, 1 = when replacing GPS course with compass course, 2 = when GPS is on + }, require("Storage").readJSON("gpsmagdir.json", true) || {}); + + function isInside(rect, e) { + return e.x>=rect.x && e.x=rect.y && e.y<=rect.y+rect.h; + } + + function draw() { + if (this.width) { + g.clearRect(this.x, this.y, this.x+this.width-1, this.y+23); + + if (this.show) { + this.width = 24; + g.reset(); + g.drawImage(require("heatshrink").decompress(atob("jEYwgrohEN6EwBQ+DBYM4wALFxGA7vdB4IWFxEABYMAnAlECwMNBYPQCIQLDgALDDAI5EBYIFBBYIeBBYRBGA4QnBCAZBDA4ILLEZYLMKYR9FAgaKFNYpgCD4RBFAwQLBCwpOELAwACgeIwbLHK5ILPAAwA=")), this.x, this.y); + if (this.show === 2) { + // draw stroke + g.setColor(1,0,0).fillPoly([this.x+2, 0, + this.x+this.width-1,this.y+21, + this.x+this.width-3, this.y+23, + this.x, 2 + ]); + } + } + } + + const newWidth = this.show ? 24 : 0; + if (newWidth !== this.width) { + this.width = newWidth; + Bangle.drawWidgets(); + } + } + + if (settings.compassSrc > 0 && settings.showWidget > 0) { + // add your widget + WIDGETS.gpsmagdir={ + area:"tr", // tl (top left), tr (top right), bl (bottom left), br (bottom right) + width: 0, // hide by default + draw:draw, + show:0 // 0 = hide, 1 = show, 2 = with stroke + }; + + // show only when GPS course is replaced + Bangle.on('GPS', function(gps) { + if (gps.courseOrig && WIDGETS.gpsmagdir.show !== 1 && Bangle.isGPSOn()) { + WIDGETS.gpsmagdir.show = 1; + WIDGETS.gpsmagdir.draw(); + } else if (WIDGETS.gpsmagdir.show) { + WIDGETS.gpsmagdir.show = settings.showWidget === 1 ? 0 : 2; + WIDGETS.gpsmagdir.draw(); + } + }); + + // hide widget if GPS is turned off + const origSetGPSPower = Bangle.setGPSPower; + Bangle.setGPSPower = function(on, id) { + const isGPSon = origSetGPSPower(on, id); + if (!isGPSon && WIDGETS.gpsmagdir.show) { + WIDGETS.gpsmagdir.show = 0; + WIDGETS.gpsmagdir.draw(); + } else if (isGPSon && !WIDGETS.gpsmagdir.show) { + WIDGETS.gpsmagdir.show = 2; + WIDGETS.gpsmagdir.draw(); + } + return isGPSon; + }; + + // reset compass on click on widget + Bangle.on('touch', function(button, touch) { + if (WIDGETS.gpsmagdir && WIDGETS.gpsmagdir.x && WIDGETS.gpsmagdir.width && isInside({x: WIDGETS.gpsmagdir.x, y: WIDGETS.gpsmagdir.y, w: WIDGETS.gpsmagdir.width, h: 24}, touch)) { + Bangle.buzz(50); + Bangle.resetCompass(); + } + }); + } // if (settings.compassSrc > 0 && settings.showWidget) +})(); From 78302ecd4dd506be2a066284c577dc9bbd09d5a3 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 17 Feb 2023 18:22:57 +0100 Subject: [PATCH 005/118] gpsmagdir boot: magnav check --- apps/gpsmagdir/boot.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/apps/gpsmagdir/boot.js b/apps/gpsmagdir/boot.js index 94daf88ca..b8a58f371 100644 --- a/apps/gpsmagdir/boot.js +++ b/apps/gpsmagdir/boot.js @@ -7,6 +7,19 @@ }, require("Storage").readJSON("gpsmagdir.json", true) || {}); const CALIBDATA = (settings.compassSrc === 2) ? require("Storage").readJSON("magnav.json",1) || {} : undefined; + // Check if magnav is installed + try { + require("magnav"); + } catch(err) { + // not installed, adjust settings to work without magnav + if (settings.compassSrc === 2) { + settings.compassSrc = 1; + } + if (settings.tiltCompensation) { + settings.tiltCompensation = false; + } + } + // execute Bangle.resetCompass() after Bangle.setCompassPower(); if (settings.resetCompassOnPwr) { const origSetCompassPower = Bangle.setCompassPower; From 4b4057764f390541a147835d4e830831afca2f45 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Fri, 17 Feb 2023 18:35:14 +0100 Subject: [PATCH 006/118] gpsmagdir: check for magnav calibration --- apps/gpsmagdir/boot.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/gpsmagdir/boot.js b/apps/gpsmagdir/boot.js index b8a58f371..2ccdb4290 100644 --- a/apps/gpsmagdir/boot.js +++ b/apps/gpsmagdir/boot.js @@ -5,7 +5,7 @@ resetCompassOnPwr: true, // reset compass on power on tiltCompensation: true, // tilt compensation on default compass }, require("Storage").readJSON("gpsmagdir.json", true) || {}); - const CALIBDATA = (settings.compassSrc === 2) ? require("Storage").readJSON("magnav.json",1) || {} : undefined; + const CALIBDATA = (settings.compassSrc === 2) ? require("Storage").readJSON("magnav.json",1) : undefined; // Check if magnav is installed try { @@ -19,6 +19,10 @@ settings.tiltCompensation = false; } } + if (settings.compassSrc === 2 && !CALIBDATA) { + // No calibration for magnav, fallback to default compass + settings.compassSrc = 1; + } // execute Bangle.resetCompass() after Bangle.setCompassPower(); if (settings.resetCompassOnPwr) { From 8b6fcced6616aa1798f84fbfa6207b405190ea22 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 19 Feb 2023 11:13:41 +0100 Subject: [PATCH 007/118] gpsmagdir: Readme updates --- apps/gpsmagdir/README.md | 57 +++++++++++++++++++++++++++++++++------- apps/gpsmagdir/boot.js | 6 ++--- 2 files changed, 50 insertions(+), 13 deletions(-) diff --git a/apps/gpsmagdir/README.md b/apps/gpsmagdir/README.md index b4c3acf0c..de7526ccd 100644 --- a/apps/gpsmagdir/README.md +++ b/apps/gpsmagdir/README.md @@ -1,12 +1,49 @@ -TODO: -- Add Widget +# GPS Compass heading switcher +The GPS course and speed is calculated by the difference of positions. +However GPS position is noisy and prone to jump around. +This results in randomly jumping GPS course values when speed is slow or standing still. +So in these cases a user might want to get his moving direction from a compass instead. +This is why this app replaces the GPS heading with the compass heading when the speed is slower then 6 km/h (threshold is configurable, see settings). + +## Important Notes +* **Watch orientation** + When the GPS is calculating the course the orientation of the watch does not matter. + When the Compass is used as the source of the current heading its top must obviously point at the moving direction (Usually away from you). +* **Tilt compensation** + When "Navigation Compass" is installed the built-in compass gets automatic tilt compensation. This can be turned off in settings. Without "Navigation Compass" installed or this feature disabled the watch must be orientated with the display up to provide a useable compass value. +* **Compass reset and calibration** + When using "Navigation Compass" as compass source (see settings) please remember to calibrate it regularly. + With this app installed the built-in compass calibration is automatically reset when the compass is turned on (deactivatable in settings). It can also be reset with a tap on the Widget (Bangle.js 2 only). Please note that directly after a reset the built-in compass must be turned 360 degrees to provide a useable value. +* **True north vs magnetic north** + Please note that the compass does not point to the "real north" but depending on your location there is an offset, see [Magnetic declination](https://en.wikipedia.org/wiki/Magnetic_declination) + However the error from local magnetic interference and from calibration will probably be higher.. + +## Widget +The widget indicates if the current GPS heading is provided from GPS or compass. +It can be turned off in the settings. +On Bangle.js 2 a click on the widget does reset the built-in compass. + +## Settings +* **speed** + - (default = 6 km/h) When lower then this use direction from compass +* **compassSrc** + - off: + - built-in (default): + - Navigation Compass: +* **reset compass on power on** + - off: + - on (default): +* **tilt compensation** + - off: + - on (default): +* **show Widget** + - Never + - Active (default): When replacing GPS course with compass course + - GPS on + +## TODO: - Add Settings -- Test on BangleJS - Document settings with defaults -- Document Widget -- Write a summary why -- Drop a note about compass north vs true north -- Note that top of Bangle must point at moving direction when compass -- Document uncompensated compass only when clock is faced up -- Note to regularly calibrate compass before use -- Note compass value not when NaN after calibration +- Check magnav dependency in settings +- note magnav silently downgrade +- Test on BangleJS diff --git a/apps/gpsmagdir/boot.js b/apps/gpsmagdir/boot.js index 2ccdb4290..2195a8424 100644 --- a/apps/gpsmagdir/boot.js +++ b/apps/gpsmagdir/boot.js @@ -1,9 +1,9 @@ { const settings = Object.assign({ speed: 6, // when lower then this use direction from compass - compassSrc: 1, // [off, firmware, magnav] + compassSrc: 1, // [off, built-in, magnav] resetCompassOnPwr: true, // reset compass on power on - tiltCompensation: true, // tilt compensation on default compass + tiltCompensation: true, // tilt compensation on built-in compass }, require("Storage").readJSON("gpsmagdir.json", true) || {}); const CALIBDATA = (settings.compassSrc === 2) ? require("Storage").readJSON("magnav.json",1) : undefined; @@ -64,7 +64,7 @@ const changeGpsCourse = (gps) => { if (gps.speed < settings.speed) { - if (settings.compassSrc === 1 && (settings.tiltCompensation || isFaceUp(Bangle.getAccel()))) { // Use uncompensated firmware heading only if face is up + if (settings.compassSrc === 1 && (settings.tiltCompensation || isFaceUp(Bangle.getAccel()))) { // Use uncompensated built-in compass heading only if face is up const heading = Bangle.getCompass().heading; if (!isNaN(heading)) { gps.courseOrig = gps.course; From 7d5151c3226e558c68a9865b241dfd16b938c994 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 19 Feb 2023 11:52:58 +0100 Subject: [PATCH 008/118] gpsmagdir renamed to gpsmagcourse --- apps/{gpsmagdir => gpsmagcourse}/README.md | 0 apps/{gpsmagdir => gpsmagcourse}/app.png | Bin apps/{gpsmagdir => gpsmagcourse}/boot.js | 4 +-- .../{gpsmagdir => gpsmagcourse}/metadata.json | 10 +++--- apps/{gpsmagdir => gpsmagcourse}/widget.js | 30 +++++++++--------- 5 files changed, 22 insertions(+), 22 deletions(-) rename apps/{gpsmagdir => gpsmagcourse}/README.md (100%) rename apps/{gpsmagdir => gpsmagcourse}/app.png (100%) rename apps/{gpsmagdir => gpsmagcourse}/boot.js (96%) rename apps/{gpsmagdir => gpsmagcourse}/metadata.json (64%) rename apps/{gpsmagdir => gpsmagcourse}/widget.js (70%) diff --git a/apps/gpsmagdir/README.md b/apps/gpsmagcourse/README.md similarity index 100% rename from apps/gpsmagdir/README.md rename to apps/gpsmagcourse/README.md diff --git a/apps/gpsmagdir/app.png b/apps/gpsmagcourse/app.png similarity index 100% rename from apps/gpsmagdir/app.png rename to apps/gpsmagcourse/app.png diff --git a/apps/gpsmagdir/boot.js b/apps/gpsmagcourse/boot.js similarity index 96% rename from apps/gpsmagdir/boot.js rename to apps/gpsmagcourse/boot.js index 2195a8424..189dd9e35 100644 --- a/apps/gpsmagdir/boot.js +++ b/apps/gpsmagcourse/boot.js @@ -4,7 +4,7 @@ compassSrc: 1, // [off, built-in, magnav] resetCompassOnPwr: true, // reset compass on power on tiltCompensation: true, // tilt compensation on built-in compass - }, require("Storage").readJSON("gpsmagdir.json", true) || {}); + }, require("Storage").readJSON("gpsmagcourse.json", true) || {}); const CALIBDATA = (settings.compassSrc === 2) ? require("Storage").readJSON("magnav.json",1) : undefined; // Check if magnav is installed @@ -91,7 +91,7 @@ const origSetGPSPower = Bangle.setGPSPower; Bangle.setGPSPower = function(on, id) { const isGPSon = origSetGPSPower(on, id); - Bangle.setCompassPower(isGPSon, "gpsmagdir"); + Bangle.setCompassPower(isGPSon, "gpsmagcourse"); return isGPSon; }; } // if (settings.compassSrc > 0) diff --git a/apps/gpsmagdir/metadata.json b/apps/gpsmagcourse/metadata.json similarity index 64% rename from apps/gpsmagdir/metadata.json rename to apps/gpsmagcourse/metadata.json index f83f1ee90..2dcc27384 100644 --- a/apps/gpsmagdir/metadata.json +++ b/apps/gpsmagcourse/metadata.json @@ -1,7 +1,7 @@ { - "id": "gpsmagdir", + "id": "gpsmagcourse", "name": "GPS Compass heading switcher", - "shortName":"GPS/Compass direction", + "shortName":"GPS/Comp. course", "icon": "app.png", "version":"0.01", "description": "Replace GPS heading with compass heading when speed is slow or standing still to avoid the heading from jumping around randomly.", @@ -10,9 +10,9 @@ "supports": ["BANGLEJS","BANGLEJS2"], "readme": "README.md", "storage": [ - {"name":"gpsmagdir.boot.js","url":"boot.js"}, - {"name":"gpsmagdir.wid.js","url":"widget.js"} + {"name":"gpsmagcourse.boot.js","url":"boot.js"}, + {"name":"gpsmagcourse.wid.js","url":"widget.js"} ], - "data": [{"name":"gpsmagdir.json"}] + "data": [{"name":"gpsmagcourse.json"}] } diff --git a/apps/gpsmagdir/widget.js b/apps/gpsmagcourse/widget.js similarity index 70% rename from apps/gpsmagdir/widget.js rename to apps/gpsmagcourse/widget.js index cf3c9c60c..0df33755d 100644 --- a/apps/gpsmagdir/widget.js +++ b/apps/gpsmagcourse/widget.js @@ -2,7 +2,7 @@ const settings = Object.assign({ compassSrc: 1, // 0 = off showWidget: 2, // 0 = never, 1 = when replacing GPS course with compass course, 2 = when GPS is on - }, require("Storage").readJSON("gpsmagdir.json", true) || {}); + }, require("Storage").readJSON("gpsmagcourse.json", true) || {}); function isInside(rect, e) { return e.x>=rect.x && e.x 0 && settings.showWidget > 0) { // add your widget - WIDGETS.gpsmagdir={ + WIDGETS.gpsmagcourse={ area:"tr", // tl (top left), tr (top right), bl (bottom left), br (bottom right) width: 0, // hide by default draw:draw, @@ -46,12 +46,12 @@ // show only when GPS course is replaced Bangle.on('GPS', function(gps) { - if (gps.courseOrig && WIDGETS.gpsmagdir.show !== 1 && Bangle.isGPSOn()) { - WIDGETS.gpsmagdir.show = 1; - WIDGETS.gpsmagdir.draw(); - } else if (WIDGETS.gpsmagdir.show) { - WIDGETS.gpsmagdir.show = settings.showWidget === 1 ? 0 : 2; - WIDGETS.gpsmagdir.draw(); + if (gps.courseOrig && WIDGETS.gpsmagcourse.show !== 1 && Bangle.isGPSOn()) { + WIDGETS.gpsmagcourse.show = 1; + WIDGETS.gpsmagcourse.draw(); + } else if (WIDGETS.gpsmagcourse.show) { + WIDGETS.gpsmagcourse.show = settings.showWidget === 1 ? 0 : 2; + WIDGETS.gpsmagcourse.draw(); } }); @@ -59,19 +59,19 @@ const origSetGPSPower = Bangle.setGPSPower; Bangle.setGPSPower = function(on, id) { const isGPSon = origSetGPSPower(on, id); - if (!isGPSon && WIDGETS.gpsmagdir.show) { - WIDGETS.gpsmagdir.show = 0; - WIDGETS.gpsmagdir.draw(); - } else if (isGPSon && !WIDGETS.gpsmagdir.show) { - WIDGETS.gpsmagdir.show = 2; - WIDGETS.gpsmagdir.draw(); + if (!isGPSon && WIDGETS.gpsmagcourse.show) { + WIDGETS.gpsmagcourse.show = 0; + WIDGETS.gpsmagcourse.draw(); + } else if (isGPSon && !WIDGETS.gpsmagcourse.show) { + WIDGETS.gpsmagcourse.show = 2; + WIDGETS.gpsmagcourse.draw(); } return isGPSon; }; // reset compass on click on widget Bangle.on('touch', function(button, touch) { - if (WIDGETS.gpsmagdir && WIDGETS.gpsmagdir.x && WIDGETS.gpsmagdir.width && isInside({x: WIDGETS.gpsmagdir.x, y: WIDGETS.gpsmagdir.y, w: WIDGETS.gpsmagdir.width, h: 24}, touch)) { + if (WIDGETS.gpsmagcourse && WIDGETS.gpsmagcourse.x && WIDGETS.gpsmagcourse.width && isInside({x: WIDGETS.gpsmagcourse.x, y: WIDGETS.gpsmagcourse.y, w: WIDGETS.gpsmagcourse.width, h: 24}, touch)) { Bangle.buzz(50); Bangle.resetCompass(); } From fab9e85cc3551eeda57143d56324a36a5306e3a4 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 19 Feb 2023 11:56:28 +0100 Subject: [PATCH 009/118] gpsmagcourse: Add settings (untested) --- apps/gpsmagcourse/settings.js | 91 +++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 apps/gpsmagcourse/settings.js diff --git a/apps/gpsmagcourse/settings.js b/apps/gpsmagcourse/settings.js new file mode 100644 index 000000000..e5fd524c9 --- /dev/null +++ b/apps/gpsmagcourse/settings.js @@ -0,0 +1,91 @@ +(function(back) { + var FILE = "gpsmagcourse.json"; + // Load settings + const settings = Object.assign({ + speed: 6, // when lower then this use direction from compass + compassSrc: 1, // [off, built-in, magnav] + resetCompassOnPwr: true, // reset compass on power on + tiltCompensation: true, // tilt compensation on built-in compass + showWidget: 2, // 0 = never, 1 = when replacing GPS course with compass course, 2 = when GPS is on + }, require("Storage").readJSON(FILE, true) || {}); + + let magnavInstalled = true; + // Check if magnav is installed + try { + require("magnav"); + } catch(err) { + // not installed + magnavInstalled = false; + } + + if (!magnavInstalled) { + // adjust settings to work without magnav + if (settings.compassSrc === 2) { + settings.compassSrc = 1; + } + if (settings.tiltCompensation) { + settings.tiltCompensation = false; + } + } + const compassSrcOpts = ["off", "built-in"]; + if (magnavInstalled) { + compassSrcOpts.push("magnav"); + } + + function writeSettings() { + require('Storage').writeJSON(FILE, settings); + } + + const menu = { + "" : { "title" : /*LANG*/"GPS/Comp. course" }, + "< Back" : () => back(), + /*LANG*/'Speed threshold': { + value: settings.speed, + min: 1, max: 20, + onchange: v => { + settings.speed = v; + writeSettings(); + } + }, + /*LANG*/'Compass source': { + value: settings.compassSrc, + min: 0, max: compassSrcOpts.length-1, + format: v => compassSrcOpts[v], + onchange: v => { + settings.compassSrc = v; + writeSettings(); + } + }, + /*LANG*/'Reset compass when powered on': { + value: !!settings.resetCompassOnPwr, + format: v => v?/*LANG*/"On":/*LANG*/"Off", + onchange: v => { + settings.resetCompassOnPwr = v; + writeSettings(); + } + }, + /*LANG*/'Show Widget': { + value: settings.showWidget, + min: 0, max: 2, + format: v => ["Never", "Active", "GPS on"][v], + onchange: v => { + settings.showWidget = v; + writeSettings(); + } + }, + }; + + if (magnavInstalled) { + menu[/*LANG*/'Tilt compensation on built-in compass'] = { + value: !!settings.tiltCompensation, + format: v => v?/*LANG*/"On":/*LANG*/"Off", + onchange: v => { + settings.tiltCompensation = v; + writeSettings(); + } + }; + } + + // Show the menu + E.showMenu(menu); +})(load); From 78fd64bf3f89bf363dd4fea0e2a217510e45b5d4 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 19 Feb 2023 19:15:26 +0100 Subject: [PATCH 010/118] gpsmagcourse: settings changes --- apps/gpsmagcourse/README.md | 1 - apps/gpsmagcourse/metadata.json | 7 ++++--- apps/gpsmagcourse/settings.js | 12 ++++++------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/gpsmagcourse/README.md b/apps/gpsmagcourse/README.md index de7526ccd..de6c51751 100644 --- a/apps/gpsmagcourse/README.md +++ b/apps/gpsmagcourse/README.md @@ -42,7 +42,6 @@ On Bangle.js 2 a click on the widget does reset the built-in compass. - GPS on ## TODO: -- Add Settings - Document settings with defaults - Check magnav dependency in settings - note magnav silently downgrade diff --git a/apps/gpsmagcourse/metadata.json b/apps/gpsmagcourse/metadata.json index 2dcc27384..266924bef 100644 --- a/apps/gpsmagcourse/metadata.json +++ b/apps/gpsmagcourse/metadata.json @@ -1,7 +1,7 @@ { "id": "gpsmagcourse", - "name": "GPS Compass heading switcher", - "shortName":"GPS/Comp. course", + "name": "GPS Compass course switcher", + "shortName":"GPS/Compass course", "icon": "app.png", "version":"0.01", "description": "Replace GPS heading with compass heading when speed is slow or standing still to avoid the heading from jumping around randomly.", @@ -11,7 +11,8 @@ "readme": "README.md", "storage": [ {"name":"gpsmagcourse.boot.js","url":"boot.js"}, - {"name":"gpsmagcourse.wid.js","url":"widget.js"} + {"name":"gpsmagcourse.wid.js","url":"widget.js"}, + {"name":"gpsmagcourse.settings.js","url":"settings.js"} ], "data": [{"name":"gpsmagcourse.json"}] } diff --git a/apps/gpsmagcourse/settings.js b/apps/gpsmagcourse/settings.js index e5fd524c9..572850d6f 100644 --- a/apps/gpsmagcourse/settings.js +++ b/apps/gpsmagcourse/settings.js @@ -27,9 +27,9 @@ settings.tiltCompensation = false; } } - const compassSrcOpts = ["off", "built-in"]; + const compassSrcOpts = [/*LANG*/"off", /*LANG*/"built-in"]; if (magnavInstalled) { - compassSrcOpts.push("magnav"); + compassSrcOpts.push(/*LANG*/"magnav"); } function writeSettings() { @@ -37,11 +37,11 @@ } const menu = { - "" : { "title" : /*LANG*/"GPS/Comp. course" }, + "" : { "title" : /*LANG*/"GPS/Com.course" }, "< Back" : () => back(), /*LANG*/'Speed threshold': { value: settings.speed, - min: 1, max: 20, + min: 1, max: 20, step: 0.5, onchange: v => { settings.speed = v; writeSettings(); @@ -67,7 +67,7 @@ /*LANG*/'Show Widget': { value: settings.showWidget, min: 0, max: 2, - format: v => ["Never", "Active", "GPS on"][v], + format: v => [/*LANG*/"Never", /*LANG*/"Active", /*LANG*/"GPS on"][v], onchange: v => { settings.showWidget = v; writeSettings(); @@ -88,4 +88,4 @@ // Show the menu E.showMenu(menu); -})(load); +}) From a59f500895af09e1dc14d06b92cb3c2bafe41424 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 20 Feb 2023 21:35:35 +0100 Subject: [PATCH 011/118] gpsmagcourse: README updates --- apps/gpsmagcourse/README.md | 47 +++++++++++++++------------------ apps/gpsmagcourse/metadata.json | 2 +- apps/gpsmagcourse/widget.js | 2 +- 3 files changed, 23 insertions(+), 28 deletions(-) diff --git a/apps/gpsmagcourse/README.md b/apps/gpsmagcourse/README.md index de6c51751..bca039424 100644 --- a/apps/gpsmagcourse/README.md +++ b/apps/gpsmagcourse/README.md @@ -1,9 +1,9 @@ -# GPS Compass heading switcher +# GPS Compass course switcher The GPS course and speed is calculated by the difference of positions. However GPS position is noisy and prone to jump around. This results in randomly jumping GPS course values when speed is slow or standing still. -So in these cases a user might want to get his moving direction from a compass instead. -This is why this app replaces the GPS heading with the compass heading when the speed is slower then 6 km/h (threshold is configurable, see settings). +So in these cases a user might want to get the moving direction from a compass instead. +This is why this app replaces the GPS course with the compass heading when the speed is slower then 6 km/h (threshold is configurable, see settings). ## Important Notes * **Watch orientation** @@ -19,30 +19,25 @@ This is why this app replaces the GPS heading with the compass heading when the However the error from local magnetic interference and from calibration will probably be higher.. ## Widget -The widget indicates if the current GPS heading is provided from GPS or compass. +The widget indicates if the current GPS course is provided from GPS or compass. It can be turned off in the settings. On Bangle.js 2 a click on the widget does reset the built-in compass. ## Settings -* **speed** - - (default = 6 km/h) When lower then this use direction from compass -* **compassSrc** - - off: - - built-in (default): - - Navigation Compass: -* **reset compass on power on** - - off: - - on (default): -* **tilt compensation** - - off: - - on (default): -* **show Widget** - - Never - - Active (default): When replacing GPS course with compass course - - GPS on - -## TODO: -- Document settings with defaults -- Check magnav dependency in settings -- note magnav silently downgrade -- Test on BangleJS +* **Speed threshold** + - (default = 6 km/h) When GPS speed is lower then this threshold use the compass direction. +* **Compass source** + - off: Disables this addon. + - built-in (default): Uses the built-in compass. Its calibration can be restarted by pressing the Widget. When tilt compensation is disabled or "Navigation compass" is not installed the watch must be orientated horizontally for the compass heading to be used. + - magnav (only if "Navigation Compass" is installed): Compass heading is provided by "Navigation Compass" (magnav). Remember to calibrate it regularly. +* **Reset compass when powered on** + - Off: Do nothing when compass is turned on. + - On (default): The calibration of the built-in compass is reset when it is turned on. +* **Tilt compensation on built-in compass** + Only available if "Navigation Compass" is installed. + - Off: Leaves the value of the built-in compass unchanged. + - On (default): Apply the tilt compensation from "Navigation Compass" to the built-in compass in _all_ applications. +* **Show Widget** + - Never: Widget is hidden. + - Active (default): Widget is only visible when replacing GPS course with compass heading. + - GPS on: Widget is shown as soon as GPS is enabled, crossed out when GPS provides the course and displayed normally when the compass heading is used. diff --git a/apps/gpsmagcourse/metadata.json b/apps/gpsmagcourse/metadata.json index 266924bef..057b01383 100644 --- a/apps/gpsmagcourse/metadata.json +++ b/apps/gpsmagcourse/metadata.json @@ -4,7 +4,7 @@ "shortName":"GPS/Compass course", "icon": "app.png", "version":"0.01", - "description": "Replace GPS heading with compass heading when speed is slow or standing still to avoid the heading from jumping around randomly.", + "description": "Replaces the GPS course with the compass heading when speed is slow or standing still to avoid the value from jumping randomly. For best experience also install \"Navigation Compass\", although not a requirement (see README).", "type": "bootloader", "tags": "outdoors,widget", "supports": ["BANGLEJS","BANGLEJS2"], diff --git a/apps/gpsmagcourse/widget.js b/apps/gpsmagcourse/widget.js index 0df33755d..0e00a1a70 100644 --- a/apps/gpsmagcourse/widget.js +++ b/apps/gpsmagcourse/widget.js @@ -71,7 +71,7 @@ // reset compass on click on widget Bangle.on('touch', function(button, touch) { - if (WIDGETS.gpsmagcourse && WIDGETS.gpsmagcourse.x && WIDGETS.gpsmagcourse.width && isInside({x: WIDGETS.gpsmagcourse.x, y: WIDGETS.gpsmagcourse.y, w: WIDGETS.gpsmagcourse.width, h: 24}, touch)) { + if (touch && WIDGETS.gpsmagcourse && WIDGETS.gpsmagcourse.x && WIDGETS.gpsmagcourse.width && isInside({x: WIDGETS.gpsmagcourse.x, y: WIDGETS.gpsmagcourse.y, w: WIDGETS.gpsmagcourse.width, h: 24}, touch)) { Bangle.buzz(50); Bangle.resetCompass(); } From ed3ebf97543d324df6fb16b4808565a641b0e31c Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Wed, 22 Feb 2023 19:33:24 +0100 Subject: [PATCH 012/118] gpsmagcourse: Avoid jitter, fix widget --- apps/gpsmagcourse/README.md | 2 +- apps/gpsmagcourse/boot.js | 4 +++- apps/gpsmagcourse/widget.js | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/apps/gpsmagcourse/README.md b/apps/gpsmagcourse/README.md index bca039424..f6e60ea61 100644 --- a/apps/gpsmagcourse/README.md +++ b/apps/gpsmagcourse/README.md @@ -25,7 +25,7 @@ On Bangle.js 2 a click on the widget does reset the built-in compass. ## Settings * **Speed threshold** - - (default = 6 km/h) When GPS speed is lower then this threshold use the compass direction. + - (default = 6 km/h) When GPS speed is lower then this threshold use the compass direction. The speed must be for at least 10 seconds this fast to switch back to GPS course. * **Compass source** - off: Disables this addon. - built-in (default): Uses the built-in compass. Its calibration can be restarted by pressing the Widget. When tilt compensation is disabled or "Navigation compass" is not installed the watch must be orientated horizontally for the compass heading to be used. diff --git a/apps/gpsmagcourse/boot.js b/apps/gpsmagcourse/boot.js index 189dd9e35..ffa9512fa 100644 --- a/apps/gpsmagcourse/boot.js +++ b/apps/gpsmagcourse/boot.js @@ -6,6 +6,7 @@ tiltCompensation: true, // tilt compensation on built-in compass }, require("Storage").readJSON("gpsmagcourse.json", true) || {}); const CALIBDATA = (settings.compassSrc === 2) ? require("Storage").readJSON("magnav.json",1) : undefined; + let cntAboveSpeed = 0; // Check if magnav is installed try { @@ -63,7 +64,8 @@ }; const changeGpsCourse = (gps) => { - if (gps.speed < settings.speed) { + cntAboveSpeed = gps.speed < settings.speed ? 0 : cntAboveSpeed+1; + if (cntAboveSpeed < 10) { // need to stay x events above or equal threshold if (settings.compassSrc === 1 && (settings.tiltCompensation || isFaceUp(Bangle.getAccel()))) { // Use uncompensated built-in compass heading only if face is up const heading = Bangle.getCompass().heading; if (!isNaN(heading)) { diff --git a/apps/gpsmagcourse/widget.js b/apps/gpsmagcourse/widget.js index 0e00a1a70..6317cedcd 100644 --- a/apps/gpsmagcourse/widget.js +++ b/apps/gpsmagcourse/widget.js @@ -49,7 +49,7 @@ if (gps.courseOrig && WIDGETS.gpsmagcourse.show !== 1 && Bangle.isGPSOn()) { WIDGETS.gpsmagcourse.show = 1; WIDGETS.gpsmagcourse.draw(); - } else if (WIDGETS.gpsmagcourse.show) { + } else if (!gps.courseOrig && WIDGETS.gpsmagcourse.show === 1) { WIDGETS.gpsmagcourse.show = settings.showWidget === 1 ? 0 : 2; WIDGETS.gpsmagcourse.draw(); } From db370302a573a90cf75500ee2ea26122c0de5968 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Thu, 23 Feb 2023 19:30:15 +0100 Subject: [PATCH 013/118] gpsmagcourse: conform with 0ba8cef33c1a313626e204cd811ed02a58381d11 --- apps/gpsmagcourse/settings.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/apps/gpsmagcourse/settings.js b/apps/gpsmagcourse/settings.js index 572850d6f..5eb27400d 100644 --- a/apps/gpsmagcourse/settings.js +++ b/apps/gpsmagcourse/settings.js @@ -58,7 +58,6 @@ }, /*LANG*/'Reset compass when powered on': { value: !!settings.resetCompassOnPwr, - format: v => v?/*LANG*/"On":/*LANG*/"Off", onchange: v => { settings.resetCompassOnPwr = v; writeSettings(); @@ -78,7 +77,6 @@ if (magnavInstalled) { menu[/*LANG*/'Tilt compensation on built-in compass'] = { value: !!settings.tiltCompensation, - format: v => v?/*LANG*/"On":/*LANG*/"Off", onchange: v => { settings.tiltCompensation = v; writeSettings(); From 965e60e149f9f90851c73032a80342beacd6a57d Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Sun, 26 Feb 2023 09:00:26 +0100 Subject: [PATCH 014/118] gpsmagcourse README updates --- apps/gpsmagcourse/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/gpsmagcourse/README.md b/apps/gpsmagcourse/README.md index f6e60ea61..81fed2986 100644 --- a/apps/gpsmagcourse/README.md +++ b/apps/gpsmagcourse/README.md @@ -3,7 +3,7 @@ The GPS course and speed is calculated by the difference of positions. However GPS position is noisy and prone to jump around. This results in randomly jumping GPS course values when speed is slow or standing still. So in these cases a user might want to get the moving direction from a compass instead. -This is why this app replaces the GPS course with the compass heading when the speed is slower then 6 km/h (threshold is configurable, see settings). +This is why this service replaces the GPS course with the compass heading when the speed is slower then 6 km/h (threshold is configurable, see settings). ## Important Notes * **Watch orientation** @@ -13,7 +13,7 @@ This is why this app replaces the GPS course with the compass heading when the s When "Navigation Compass" is installed the built-in compass gets automatic tilt compensation. This can be turned off in settings. Without "Navigation Compass" installed or this feature disabled the watch must be orientated with the display up to provide a useable compass value. * **Compass reset and calibration** When using "Navigation Compass" as compass source (see settings) please remember to calibrate it regularly. - With this app installed the built-in compass calibration is automatically reset when the compass is turned on (deactivatable in settings). It can also be reset with a tap on the Widget (Bangle.js 2 only). Please note that directly after a reset the built-in compass must be turned 360 degrees to provide a useable value. + With this service installed the built-in compass calibration is automatically reset when the compass is turned on (deactivatable in settings). It can also be reset with a tap on the Widget (Bangle.js 2 only). Please note that directly after a reset the built-in compass must be turned 360 degrees to provide a useable value. * **True north vs magnetic north** Please note that the compass does not point to the "real north" but depending on your location there is an offset, see [Magnetic declination](https://en.wikipedia.org/wiki/Magnetic_declination) However the error from local magnetic interference and from calibration will probably be higher.. From eaf17b71cc5b52e75d89ea5fd83243e8adc6f90a Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 27 Feb 2023 20:50:51 +0100 Subject: [PATCH 015/118] gpsmagcourse: Do not recalculate in getCompass() --- apps/gpsmagcourse/boot.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/apps/gpsmagcourse/boot.js b/apps/gpsmagcourse/boot.js index ffa9512fa..0aa456fe3 100644 --- a/apps/gpsmagcourse/boot.js +++ b/apps/gpsmagcourse/boot.js @@ -7,6 +7,7 @@ }, require("Storage").readJSON("gpsmagcourse.json", true) || {}); const CALIBDATA = (settings.compassSrc === 2) ? require("Storage").readJSON("magnav.json",1) : undefined; let cntAboveSpeed = 0; + let lastMag; // Check if magnav is installed try { @@ -40,13 +41,10 @@ if (settings.tiltCompensation) { const origGetCompass = Bangle.getCompass; Bangle.getCompass = function(argObj) { - const mag = origGetCompass(); - if (!isNaN(mag.heading) && (argObj === undefined || !argObj.noTiltComp)) { - const d = require("magnav").tiltfix(mag, Bangle.getAccel()); - mag.headingOrig = mag.heading; - mag.heading = d; + if (!isNaN(lastMag.heading) && (argObj === undefined || !argObj.noTiltComp)) { + return lastMag; } - return mag; + return origGetCompass(); }; Bangle.on('mag', function(mag) { @@ -55,6 +53,7 @@ mag.headingOrig = mag.heading; mag.heading = d; } + lastMag = mag; }); } // if (settings.tiltCompensation) From 864ef1b2bce558e6349d155287a7659cd6aad666 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 27 Feb 2023 21:11:15 +0100 Subject: [PATCH 016/118] magnav: replace var with let/const --- apps/magnav/lib.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/magnav/lib.js b/apps/magnav/lib.js index fe58615cb..443fc91ac 100644 --- a/apps/magnav/lib.js +++ b/apps/magnav/lib.js @@ -1,8 +1,8 @@ exports.calibrate = () => { - var max={x:-32000, y:-32000, z:-32000}, + const max={x:-32000, y:-32000, z:-32000}, min={x:32000, y:32000, z:32000}; - var ref = setInterval(()=>{ - var m = Bangle.getCompass(); + const ref = setInterval(()=>{ + const m = Bangle.getCompass(); max.x = m.x>max.x?m.x:max.x; max.y = m.y>max.y?m.y:max.y; max.z = m.z>max.z?m.z:max.z; @@ -13,10 +13,10 @@ exports.calibrate = () => { return new Promise((resolve) => { setTimeout(()=>{ if(ref) clearInterval(ref); - var offset = {x:(max.x+min.x)/2,y:(max.y+min.y)/2,z:(max.z+min.z)/2}; - var delta = {x:(max.x-min.x)/2,y:(max.y-min.y)/2,z:(max.z-min.z)/2}; - var avg = (delta.x+delta.y+delta.z)/3; - var scale = {x:avg/delta.x, y:avg/delta.y, z:avg/delta.z}; + const offset = {x:(max.x+min.x)/2,y:(max.y+min.y)/2,z:(max.z+min.z)/2}; + const delta = {x:(max.x-min.x)/2,y:(max.y-min.y)/2,z:(max.z-min.z)/2}; + const avg = (delta.x+delta.y+delta.z)/3; + const scale = {x:avg/delta.x, y:avg/delta.y, z:avg/delta.z}; resolve({offset:offset,scale:scale}); },20000); }); @@ -27,22 +27,22 @@ exports.tiltfix = (m,g,O,S) => { if (O & S) { m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; } - var d = Math.atan2(-m.dx,m.dy)*180/Math.PI; + let d = Math.atan2(-m.dx,m.dy)*180/Math.PI; if (d<0) d+=360; - var phi = Math.atan(-g.x/-g.z); - var cosphi = Math.cos(phi), sinphi = Math.sin(phi); - var theta = Math.atan(-g.y/(-g.x*sinphi-g.z*cosphi)); - var costheta = Math.cos(theta), sintheta = Math.sin(theta); - var xh = m.dy*costheta + m.dx*sinphi*sintheta + m.dz*cosphi*sintheta; - var yh = m.dz*sinphi - m.dx*cosphi; - var psi = Math.atan2(yh,xh)*180/Math.PI; + const phi = Math.atan(-g.x/-g.z); + const cosphi = Math.cos(phi), sinphi = Math.sin(phi); + const theta = Math.atan(-g.y/(-g.x*sinphi-g.z*cosphi)); + const costheta = Math.cos(theta), sintheta = Math.sin(theta); + const xh = m.dy*costheta + m.dx*sinphi*sintheta + m.dz*cosphi*sintheta; + const yh = m.dz*sinphi - m.dx*cosphi; + let psi = Math.atan2(yh,xh)*180/Math.PI; if (psi<0) psi+=360; return psi; } exports.tiltfixread = (O,S) => { "ram" - var m = Bangle.getCompass({noTiltComp: true}); - var g = Bangle.getAccel(); - return exports.tiltfix(m,g,O,S); + const mag = Bangle.getCompass({noTiltComp: true}); + const acc = Bangle.getAccel(); + return exports.tiltfix(mag,acc,O,S); } From d92dee62469bc6aacdf052cc3aace63529913d9e Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Mon, 27 Feb 2023 21:30:40 +0100 Subject: [PATCH 017/118] magnav: fix calibration check --- apps/magnav/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/magnav/lib.js b/apps/magnav/lib.js index 443fc91ac..88e8a8426 100644 --- a/apps/magnav/lib.js +++ b/apps/magnav/lib.js @@ -24,7 +24,7 @@ exports.calibrate = () => { exports.tiltfix = (m,g,O,S) => { "ram" - if (O & S) { + if (O && S) { m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; } let d = Math.atan2(-m.dx,m.dy)*180/Math.PI; From 096b8721fa4eaff400be3e2c21753a0aff2bfb0d Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 28 Feb 2023 09:28:28 +0100 Subject: [PATCH 018/118] Revert "magnav: fix calibration check" This reverts commit d92dee62469bc6aacdf052cc3aace63529913d9e. --- apps/magnav/lib.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/magnav/lib.js b/apps/magnav/lib.js index 88e8a8426..443fc91ac 100644 --- a/apps/magnav/lib.js +++ b/apps/magnav/lib.js @@ -24,7 +24,7 @@ exports.calibrate = () => { exports.tiltfix = (m,g,O,S) => { "ram" - if (O && S) { + if (O & S) { m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; } let d = Math.atan2(-m.dx,m.dy)*180/Math.PI; From 27e8080cef0a58cb24fdc9e98c389177f0153652 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 28 Feb 2023 09:28:39 +0100 Subject: [PATCH 019/118] Revert "magnav: replace var with let/const" This reverts commit 864ef1b2bce558e6349d155287a7659cd6aad666. --- apps/magnav/lib.js | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/apps/magnav/lib.js b/apps/magnav/lib.js index 443fc91ac..fe58615cb 100644 --- a/apps/magnav/lib.js +++ b/apps/magnav/lib.js @@ -1,8 +1,8 @@ exports.calibrate = () => { - const max={x:-32000, y:-32000, z:-32000}, + var max={x:-32000, y:-32000, z:-32000}, min={x:32000, y:32000, z:32000}; - const ref = setInterval(()=>{ - const m = Bangle.getCompass(); + var ref = setInterval(()=>{ + var m = Bangle.getCompass(); max.x = m.x>max.x?m.x:max.x; max.y = m.y>max.y?m.y:max.y; max.z = m.z>max.z?m.z:max.z; @@ -13,10 +13,10 @@ exports.calibrate = () => { return new Promise((resolve) => { setTimeout(()=>{ if(ref) clearInterval(ref); - const offset = {x:(max.x+min.x)/2,y:(max.y+min.y)/2,z:(max.z+min.z)/2}; - const delta = {x:(max.x-min.x)/2,y:(max.y-min.y)/2,z:(max.z-min.z)/2}; - const avg = (delta.x+delta.y+delta.z)/3; - const scale = {x:avg/delta.x, y:avg/delta.y, z:avg/delta.z}; + var offset = {x:(max.x+min.x)/2,y:(max.y+min.y)/2,z:(max.z+min.z)/2}; + var delta = {x:(max.x-min.x)/2,y:(max.y-min.y)/2,z:(max.z-min.z)/2}; + var avg = (delta.x+delta.y+delta.z)/3; + var scale = {x:avg/delta.x, y:avg/delta.y, z:avg/delta.z}; resolve({offset:offset,scale:scale}); },20000); }); @@ -27,22 +27,22 @@ exports.tiltfix = (m,g,O,S) => { if (O & S) { m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; } - let d = Math.atan2(-m.dx,m.dy)*180/Math.PI; + var d = Math.atan2(-m.dx,m.dy)*180/Math.PI; if (d<0) d+=360; - const phi = Math.atan(-g.x/-g.z); - const cosphi = Math.cos(phi), sinphi = Math.sin(phi); - const theta = Math.atan(-g.y/(-g.x*sinphi-g.z*cosphi)); - const costheta = Math.cos(theta), sintheta = Math.sin(theta); - const xh = m.dy*costheta + m.dx*sinphi*sintheta + m.dz*cosphi*sintheta; - const yh = m.dz*sinphi - m.dx*cosphi; - let psi = Math.atan2(yh,xh)*180/Math.PI; + var phi = Math.atan(-g.x/-g.z); + var cosphi = Math.cos(phi), sinphi = Math.sin(phi); + var theta = Math.atan(-g.y/(-g.x*sinphi-g.z*cosphi)); + var costheta = Math.cos(theta), sintheta = Math.sin(theta); + var xh = m.dy*costheta + m.dx*sinphi*sintheta + m.dz*cosphi*sintheta; + var yh = m.dz*sinphi - m.dx*cosphi; + var psi = Math.atan2(yh,xh)*180/Math.PI; if (psi<0) psi+=360; return psi; } exports.tiltfixread = (O,S) => { "ram" - const mag = Bangle.getCompass({noTiltComp: true}); - const acc = Bangle.getAccel(); - return exports.tiltfix(mag,acc,O,S); + var m = Bangle.getCompass({noTiltComp: true}); + var g = Bangle.getAccel(); + return exports.tiltfix(m,g,O,S); } From 0677f027d058f536ce7a3499f18366079bc55900 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 28 Feb 2023 09:28:55 +0100 Subject: [PATCH 020/118] Revert "magnav" This reverts commit 742bcdddabfabfabb5c2fc9b0ce010010e703747. --- apps/magnav/lib.js | 1 - 1 file changed, 1 deletion(-) diff --git a/apps/magnav/lib.js b/apps/magnav/lib.js index fe58615cb..39c51a1e1 100644 --- a/apps/magnav/lib.js +++ b/apps/magnav/lib.js @@ -23,7 +23,6 @@ exports.calibrate = () => { } exports.tiltfix = (m,g,O,S) => { - "ram" if (O & S) { m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; } From 71964b041ec24be413985ec3e7ed084b2677bbb1 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 28 Feb 2023 09:29:11 +0100 Subject: [PATCH 021/118] Revert "magnav" This reverts commit cc57c42a17d44016834cd749a5fe4aba0f10b2b5. --- apps/magnav/ChangeLog | 1 - apps/magnav/lib.js | 16 +++++----------- apps/magnav/metadata.json | 2 +- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/apps/magnav/ChangeLog b/apps/magnav/ChangeLog index 7b548841a..14a6eb2a2 100644 --- a/apps/magnav/ChangeLog +++ b/apps/magnav/ChangeLog @@ -4,4 +4,3 @@ 0.04: Fix Font size 0.05: Initial portable version 0.06: Outsource tilt compensation to library -0.07: Add tiltfix() for compensation on given sensor values diff --git a/apps/magnav/lib.js b/apps/magnav/lib.js index 39c51a1e1..e3fe8fccb 100644 --- a/apps/magnav/lib.js +++ b/apps/magnav/lib.js @@ -22,10 +22,11 @@ exports.calibrate = () => { }); } -exports.tiltfix = (m,g,O,S) => { - if (O & S) { - m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; - } +exports.tiltfixread = (O,S) => { + "ram" + var m = Bangle.getCompass(); + var g = Bangle.getAccel(); + m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z; var d = Math.atan2(-m.dx,m.dy)*180/Math.PI; if (d<0) d+=360; var phi = Math.atan(-g.x/-g.z); @@ -38,10 +39,3 @@ exports.tiltfix = (m,g,O,S) => { if (psi<0) psi+=360; return psi; } - -exports.tiltfixread = (O,S) => { - "ram" - var m = Bangle.getCompass({noTiltComp: true}); - var g = Bangle.getAccel(); - return exports.tiltfix(m,g,O,S); -} diff --git a/apps/magnav/metadata.json b/apps/magnav/metadata.json index 6bdb9d0b6..bd40a08fd 100644 --- a/apps/magnav/metadata.json +++ b/apps/magnav/metadata.json @@ -1,7 +1,7 @@ { "id": "magnav", "name": "Navigation Compass", - "version": "0.07", + "version": "0.06", "description": "Compass with linear display as for GPSNAV. Has Tilt compensation and remembers calibration.", "screenshots": [{"url":"screenshot-b2.png"},{"url":"screenshot-light-b2.png"}], "icon": "magnav.png", From 331a366ce71f6fc4c462256d862fdea0090ba8de Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 28 Feb 2023 10:36:45 +0100 Subject: [PATCH 022/118] gpsmagswitch: Drop tiltCompensation because of unscaled values --- apps/gpsmagcourse/README.md | 15 +++++---------- apps/gpsmagcourse/boot.js | 28 ++-------------------------- apps/gpsmagcourse/settings.js | 16 +--------------- 3 files changed, 8 insertions(+), 51 deletions(-) diff --git a/apps/gpsmagcourse/README.md b/apps/gpsmagcourse/README.md index 81fed2986..162f8a2c0 100644 --- a/apps/gpsmagcourse/README.md +++ b/apps/gpsmagcourse/README.md @@ -4,13 +4,12 @@ However GPS position is noisy and prone to jump around. This results in randomly jumping GPS course values when speed is slow or standing still. So in these cases a user might want to get the moving direction from a compass instead. This is why this service replaces the GPS course with the compass heading when the speed is slower then 6 km/h (threshold is configurable, see settings). +You can switch between the built-in compass and "Navigation Compass" (magnav) as the source of the compass heading. When using magnav on Bangle.js 2 at least firmware 2v16.191 is recommended to get a three-dimensional reading. ## Important Notes * **Watch orientation** When the GPS is calculating the course the orientation of the watch does not matter. When the Compass is used as the source of the current heading its top must obviously point at the moving direction (Usually away from you). -* **Tilt compensation** - When "Navigation Compass" is installed the built-in compass gets automatic tilt compensation. This can be turned off in settings. Without "Navigation Compass" installed or this feature disabled the watch must be orientated with the display up to provide a useable compass value. * **Compass reset and calibration** When using "Navigation Compass" as compass source (see settings) please remember to calibrate it regularly. With this service installed the built-in compass calibration is automatically reset when the compass is turned on (deactivatable in settings). It can also be reset with a tap on the Widget (Bangle.js 2 only). Please note that directly after a reset the built-in compass must be turned 360 degrees to provide a useable value. @@ -21,22 +20,18 @@ This is why this service replaces the GPS course with the compass heading when t ## Widget The widget indicates if the current GPS course is provided from GPS or compass. It can be turned off in the settings. -On Bangle.js 2 a click on the widget does reset the built-in compass. +On Bangle.js 2 a click on the widget does reset the built-in compass, has only an affect if the built-in compass is used. ## Settings * **Speed threshold** - (default = 6 km/h) When GPS speed is lower then this threshold use the compass direction. The speed must be for at least 10 seconds this fast to switch back to GPS course. * **Compass source** - - off: Disables this addon. - - built-in (default): Uses the built-in compass. Its calibration can be restarted by pressing the Widget. When tilt compensation is disabled or "Navigation compass" is not installed the watch must be orientated horizontally for the compass heading to be used. - - magnav (only if "Navigation Compass" is installed): Compass heading is provided by "Navigation Compass" (magnav). Remember to calibrate it regularly. + - off: Disables this service. + - built-in (default if "Navigation Compass" is not installed): Uses the built-in compass. Its calibration can be restarted by pressing the Widget. The watch must be orientated horizontally for the compass heading to be used. + - magnav (default if "Navigation Compass" is installed): Compass heading is provided by "Navigation Compass" (magnav). Remember to calibrate it regularly, at least each time after attaching the charge cable. * **Reset compass when powered on** - Off: Do nothing when compass is turned on. - On (default): The calibration of the built-in compass is reset when it is turned on. -* **Tilt compensation on built-in compass** - Only available if "Navigation Compass" is installed. - - Off: Leaves the value of the built-in compass unchanged. - - On (default): Apply the tilt compensation from "Navigation Compass" to the built-in compass in _all_ applications. * **Show Widget** - Never: Widget is hidden. - Active (default): Widget is only visible when replacing GPS course with compass heading. diff --git a/apps/gpsmagcourse/boot.js b/apps/gpsmagcourse/boot.js index 0aa456fe3..ea8527577 100644 --- a/apps/gpsmagcourse/boot.js +++ b/apps/gpsmagcourse/boot.js @@ -1,13 +1,11 @@ { const settings = Object.assign({ speed: 6, // when lower then this use direction from compass - compassSrc: 1, // [off, built-in, magnav] + compassSrc: 2, // [off, built-in, magnav] resetCompassOnPwr: true, // reset compass on power on - tiltCompensation: true, // tilt compensation on built-in compass }, require("Storage").readJSON("gpsmagcourse.json", true) || {}); const CALIBDATA = (settings.compassSrc === 2) ? require("Storage").readJSON("magnav.json",1) : undefined; let cntAboveSpeed = 0; - let lastMag; // Check if magnav is installed try { @@ -17,9 +15,6 @@ if (settings.compassSrc === 2) { settings.compassSrc = 1; } - if (settings.tiltCompensation) { - settings.tiltCompensation = false; - } } if (settings.compassSrc === 2 && !CALIBDATA) { // No calibration for magnav, fallback to default compass @@ -38,25 +33,6 @@ }; } // if (settings.resetCompassOnPwr) - if (settings.tiltCompensation) { - const origGetCompass = Bangle.getCompass; - Bangle.getCompass = function(argObj) { - if (!isNaN(lastMag.heading) && (argObj === undefined || !argObj.noTiltComp)) { - return lastMag; - } - return origGetCompass(); - }; - - Bangle.on('mag', function(mag) { - if (!isNaN(mag.heading)) { - const d = require("magnav").tiltfix(mag, Bangle.getAccel()); - mag.headingOrig = mag.heading; - mag.heading = d; - } - lastMag = mag; - }); - } // if (settings.tiltCompensation) - if (settings.compassSrc > 0) { const isFaceUp = (acc) => { return (acc.z<-6700/8192) && (acc.z>-9000/8192) && Math.abs(acc.x)<2048/8192 && Math.abs(acc.y)<2048/8192; @@ -65,7 +41,7 @@ const changeGpsCourse = (gps) => { cntAboveSpeed = gps.speed < settings.speed ? 0 : cntAboveSpeed+1; if (cntAboveSpeed < 10) { // need to stay x events above or equal threshold - if (settings.compassSrc === 1 && (settings.tiltCompensation || isFaceUp(Bangle.getAccel()))) { // Use uncompensated built-in compass heading only if face is up + if (settings.compassSrc === 1 && isFaceUp(Bangle.getAccel())) { // Use built-in compass heading only if face is up const heading = Bangle.getCompass().heading; if (!isNaN(heading)) { gps.courseOrig = gps.course; diff --git a/apps/gpsmagcourse/settings.js b/apps/gpsmagcourse/settings.js index 5eb27400d..e574292d6 100644 --- a/apps/gpsmagcourse/settings.js +++ b/apps/gpsmagcourse/settings.js @@ -3,9 +3,8 @@ // Load settings const settings = Object.assign({ speed: 6, // when lower then this use direction from compass - compassSrc: 1, // [off, built-in, magnav] + compassSrc: 2, // [off, built-in, magnav] resetCompassOnPwr: true, // reset compass on power on - tiltCompensation: true, // tilt compensation on built-in compass showWidget: 2, // 0 = never, 1 = when replacing GPS course with compass course, 2 = when GPS is on }, require("Storage").readJSON(FILE, true) || {}); @@ -23,9 +22,6 @@ if (settings.compassSrc === 2) { settings.compassSrc = 1; } - if (settings.tiltCompensation) { - settings.tiltCompensation = false; - } } const compassSrcOpts = [/*LANG*/"off", /*LANG*/"built-in"]; if (magnavInstalled) { @@ -74,16 +70,6 @@ }, }; - if (magnavInstalled) { - menu[/*LANG*/'Tilt compensation on built-in compass'] = { - value: !!settings.tiltCompensation, - onchange: v => { - settings.tiltCompensation = v; - writeSettings(); - } - }; - } - // Show the menu E.showMenu(menu); }) From 82c64a7e6254b2066ed28dcde92b053e3f2f0e88 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 28 Feb 2023 19:20:19 +0100 Subject: [PATCH 023/118] gpsmagswitch: minor fixes --- apps/gpsmagcourse/README.md | 8 ++++---- apps/gpsmagcourse/boot.js | 14 +++++++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/apps/gpsmagcourse/README.md b/apps/gpsmagcourse/README.md index 162f8a2c0..82670e7a2 100644 --- a/apps/gpsmagcourse/README.md +++ b/apps/gpsmagcourse/README.md @@ -11,7 +11,7 @@ You can switch between the built-in compass and "Navigation Compass" (magnav) as When the GPS is calculating the course the orientation of the watch does not matter. When the Compass is used as the source of the current heading its top must obviously point at the moving direction (Usually away from you). * **Compass reset and calibration** - When using "Navigation Compass" as compass source (see settings) please remember to calibrate it regularly. + When using "Navigation Compass" as compass source (see settings) please remember to calibrate it regularly. The author recommends to calibrate before every use and at least each time after attaching the charge cable. With this service installed the built-in compass calibration is automatically reset when the compass is turned on (deactivatable in settings). It can also be reset with a tap on the Widget (Bangle.js 2 only). Please note that directly after a reset the built-in compass must be turned 360 degrees to provide a useable value. * **True north vs magnetic north** Please note that the compass does not point to the "real north" but depending on your location there is an offset, see [Magnetic declination](https://en.wikipedia.org/wiki/Magnetic_declination) @@ -20,15 +20,15 @@ You can switch between the built-in compass and "Navigation Compass" (magnav) as ## Widget The widget indicates if the current GPS course is provided from GPS or compass. It can be turned off in the settings. -On Bangle.js 2 a click on the widget does reset the built-in compass, has only an affect if the built-in compass is used. +On Bangle.js 2 a click on the widget does reset the built-in compass, it has only an affect if the built-in compass is used. ## Settings * **Speed threshold** - - (default = 6 km/h) When GPS speed is lower then this threshold use the compass direction. The speed must be for at least 10 seconds this fast to switch back to GPS course. + - (default = 6 km/h) When GPS speed is lower then this threshold use the compass direction. The speed must be for at least 10 seconds this fast to switch back to GPS course. The optimum threshold varies with the quality of the GPS reception. * **Compass source** - off: Disables this service. - built-in (default if "Navigation Compass" is not installed): Uses the built-in compass. Its calibration can be restarted by pressing the Widget. The watch must be orientated horizontally for the compass heading to be used. - - magnav (default if "Navigation Compass" is installed): Compass heading is provided by "Navigation Compass" (magnav). Remember to calibrate it regularly, at least each time after attaching the charge cable. + - magnav (default if "Navigation Compass" is installed and calibrated): Compass heading is provided by "Navigation Compass" (magnav). * **Reset compass when powered on** - Off: Do nothing when compass is turned on. - On (default): The calibration of the built-in compass is reset when it is turned on. diff --git a/apps/gpsmagcourse/boot.js b/apps/gpsmagcourse/boot.js index ea8527577..723e27598 100644 --- a/apps/gpsmagcourse/boot.js +++ b/apps/gpsmagcourse/boot.js @@ -6,6 +6,7 @@ }, require("Storage").readJSON("gpsmagcourse.json", true) || {}); const CALIBDATA = (settings.compassSrc === 2) ? require("Storage").readJSON("magnav.json",1) : undefined; let cntAboveSpeed = 0; + let lastGPS; // Check if magnav is installed try { @@ -17,7 +18,7 @@ } } if (settings.compassSrc === 2 && !CALIBDATA) { - // No calibration for magnav, fallback to default compass + // No calibration for magnav, fallback to built-in compass settings.compassSrc = 1; } @@ -47,7 +48,7 @@ gps.courseOrig = gps.course; gps.course = Bangle.getCompass().heading; } - } else if (settings.compassSrc === 2) { // magnav tilt correction with magnav calibration + } else if (settings.compassSrc === 2) { // magnav gps.courseOrig = gps.course; gps.course = require("magnav").tiltfixread(CALIBDATA.offset,CALIBDATA.scale); } @@ -57,18 +58,21 @@ // Modify GPS event Bangle.on('GPS', gps => { - changeGpsCourse(gps); + lastGPS = gps; + if (!isNaN(gps.course)) { + changeGpsCourse(gps); + } }); const origGetGPSFix = Bangle.getGPSFix; Bangle.getGPSFix = function() { - return changeGpsCourse(origGetGPSFix()); + return lastGPS === undefined ? origGetGPSFix() : lastGPS; }; // Enable Compass with GPS const origSetGPSPower = Bangle.setGPSPower; Bangle.setGPSPower = function(on, id) { const isGPSon = origSetGPSPower(on, id); - Bangle.setCompassPower(isGPSon, "gpsmagcourse"); + Bangle.setCompassPower(isGPSon, "gpsmagcourse" + (id || '')); return isGPSon; }; } // if (settings.compassSrc > 0) From e8bbfd5ae485c78574065c6fc74ad4b30ef851d5 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 28 Feb 2023 19:22:14 +0100 Subject: [PATCH 024/118] Revert "settings: Also invert value" This reverts commit fb1518f6b8fd4c2250e58dcbe9785d14341dc556. --- apps/sleepphasealarm/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sleepphasealarm/settings.js b/apps/sleepphasealarm/settings.js index e72d95e7f..29e3d33c9 100644 --- a/apps/sleepphasealarm/settings.js +++ b/apps/sleepphasealarm/settings.js @@ -90,7 +90,7 @@ E.showMenu({ "" : { "title" : "SleepPhaseAlarm" }, 'Keep alarm enabled': { - value: !config.settings.disableAlarm, + value: !!config.settings.disableAlarm, onchange: v => { config.settings.disableAlarm = !v; writeSettings(); From 51e22e70e8f23514a29bb3e17acbf3b006cf7ec4 Mon Sep 17 00:00:00 2001 From: Erik Andresen Date: Tue, 28 Feb 2023 19:24:40 +0100 Subject: [PATCH 025/118] Revert "Revert "settings: Also invert value"" This reverts commit e8bbfd5ae485c78574065c6fc74ad4b30ef851d5. --- apps/sleepphasealarm/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/sleepphasealarm/settings.js b/apps/sleepphasealarm/settings.js index 29e3d33c9..e72d95e7f 100644 --- a/apps/sleepphasealarm/settings.js +++ b/apps/sleepphasealarm/settings.js @@ -90,7 +90,7 @@ E.showMenu({ "" : { "title" : "SleepPhaseAlarm" }, 'Keep alarm enabled': { - value: !!config.settings.disableAlarm, + value: !config.settings.disableAlarm, onchange: v => { config.settings.disableAlarm = !v; writeSettings(); From 55441d5ef54f10a1d1ef7622ca9fbdbeb0fdecdf Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Wed, 19 Apr 2023 08:58:21 +0100 Subject: [PATCH 026/118] powermanager: format seconds into days/hours/minutes/seconds --- apps/powermanager/interface.html | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/apps/powermanager/interface.html b/apps/powermanager/interface.html index 7a00af993..fac49694c 100644 --- a/apps/powermanager/interface.html +++ b/apps/powermanager/interface.html @@ -108,7 +108,7 @@ function viewDeferredTable(filename) { for (var i in rows) { let c = rows[i]; tableRows += ` - ${(c.time/1000).toFixed(2)}s + ${timeFormat(c.time)} ${(c.time/sum*100).toFixed(2)}%
${c.func}
` } @@ -118,7 +118,7 @@ function viewDeferredTable(filename) { var htmlOverview = `

Deferred function calls

- This are functions used in timeouts and intervals and their accumulated execution times. Recorded in a time span of ${Math.round((duration)/1000)}s. Timeouts/intervals have run for ${Math.round(sum/1000)}s (${(sum/duration*100).toFixed(2)}%). Percentages are calculated from summarized timeout/interval running time. + This are functions used in timeouts and intervals and their accumulated execution times. Recorded in a time span of ${timeFormat(duration)}. Timeouts/intervals have run for ${timeFormat(sum)} (${(sum/duration*100).toFixed(2)}%). Percentages are calculated from summarized timeout/interval running time.
@@ -185,7 +185,7 @@ function viewHardwareTable(filename) { for (var i in rows) { let c = rows[i]; tableRows += ` - + ` } @@ -194,7 +194,7 @@ function viewHardwareTable(filename) { var htmlOverview = `

Hardware power

- Recorded in a time span of ${Math.round(duration/1000)}s. Percentages are calculated from recording time. + Recorded in a time span of ${timeFormat(duration)}. Percentages are calculated from recording time.
${(c.time/1000).toFixed(2)}s${timeFormat(c.time)} ${(c.time/duration*100).toFixed(2)}% ${c.func}
@@ -263,6 +263,27 @@ function onInit() { show(); } +function timeFormat(time) { + let secs = time / 1000; + + if (secs < 60) + return secs.toFixed(2) + "s"; + + let mins = secs / 60; + secs %= 60; + if (mins < 60) + return mins.toFixed(0) + "m" + secs.toFixed(0) + "s"; + + let hrs = mins / 60; + mins %= 60; + if (hrs < 24) + return hrs.toFixed(0) + "h" + mins.toFixed(0) + "m" + secs.toFixed(0) + "s"; + + let days = hrs / 24; + hrs %= 24; + return days.toFixed(0) + "d" + hrs.toFixed(0) + "h" + mins.toFixed(0) + "m" + secs.toFixed(0) + "s"; +} + From 71883255f766863566b2b9585652e67ebc86eee0 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 19:28:20 +0200 Subject: [PATCH 027/118] Create polymath.app.js --- apps/polymath.app.js | 238 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 apps/polymath.app.js diff --git a/apps/polymath.app.js b/apps/polymath.app.js new file mode 100644 index 000000000..153a72036 --- /dev/null +++ b/apps/polymath.app.js @@ -0,0 +1,238 @@ +// Clock with date day and moon based on the "Anton Clock" + +//require("Font4x4").add(Graphics); + + +Graphics.prototype.setFontmoonphases = function() { + // Actual height 23 (23 - 1) + return this.setFontCustom( + atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACAH/nAH/nAAACAAAAAAAAAAAAAHwAAH4AAAAAAAAAAGAAAH4AAHgAAAAAAAAAAAQgAAQhAAQ/AA/4AH8gAGQgAAQjAAR/AA/4AH4gAEQgAAQgAAA4APg8APwMAY4EAQ4EB///AQcEAQcMAcP8AeP4AADwAAAAAB4AAD8AAHOAAECBAECDAGGGAH8cAD44AABgAAHAAAMAAAY+ABz/ADDDAGCBAECBAADnAAB+AAA8AAAAAAAAAAB8AAD+ADz/AH+DAGeBAEOBAEPBAELhAH5zADw6ABg+AAEeAAF/AAHnAAGDAAEBAAABAAAAAAAAAH4AAHwAAAAAAAAAAP/gA//4B8B8DgAOGAACEAADAAAAAAAAEAADGAACDgAOB8B8A//4AP/gAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAP8AAAAAAAAAAAAAAH4AAf+AB//gD//wD//wH//4H//8P//8P//8P//8P//8P//8P//8P//8H//4H//4D//wB//gA//AAf+AADwAAAABAAAxAAA+AAA8AAAAAAAAAAAAAABgAABgAABgAABgAABgAABgAAAAAAAAAAACAAAHAAAHAAACAAAAAAAHAAA8AAHwAA+AADwAAHAAAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAP8AAAAAAAAAAAAAABABADABACABAH//AH//AAABAAABAAABAAAAAAAAAAAAAHAHAHAHAEAPAEAbAEAzAGBjAHPDAD+DAD8DAAADAAAAAAAAADAPAHADAGABAEEBAEEBAEGBAGODAH7HAD7+AAh8AAAAAAA4AAB4AAHYAAMYAAYYABwYADgYAH//AH//AAAYAAAYAAAAAAAAAAAGAH8PAGEDAGEBAGEBAGEBAGGDAGGDAGD+AAD8AAAQAAAAAA/4AB/+ADyPAGGDAEEBAEEBAEGBAGHHAHD+AAB8AAAAAAAAAAAAAHgAAGABAGAHAGAeAGB4AGHgAGeAAH4AAHgAAEAAAAAAABx8AD7+AH/HAGOBAEEBAEEBAGODAH/HAD7+ABx8AAAAAAAAAB8GAD+HAHvBAGDBAEBBAEBBAGBDAHjOAD/8AB/4AAAAAAAAAAICAAcHAAcHAAICAAAAAAAAAAAAAAABAHAzAHA+AHA8AAAAAAAAAAAAAAGAAAHAAANAAANgAAZgAAYwAAwwAAwYAAgYABgIABAMAAAAAAAAAAAAABAMABgIAAgYAAwQAAQwAAYgAAJgAANgAAPAAAHAAAGAAAAAAAAAAAAAAHAAAGAAAEAHAED3AECHAGGAAH8AAD8AAAwAAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACQAACYAAGIAAEMAAMGAAYDAAwBgBgA8PAAH4AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA5nAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8F//oCf+QBjxgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+L//0N//sEf+ICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+b//2J//kMP8MEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+X//6Y//GIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+X//6QBgCYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+QAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+fAA+YAAGQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f4H+eAAeYAAGQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8PgB8eAAeYAAGQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH8P4PAA8OAAcYAAGYAAGQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD4HwHAA4OAAcMAAMYAAGYAAGQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB4HgDgBwGAAYMAAMIAAEYAAGQAACQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACQAACYAAGIAAEMAAMGAAYDgBwB4HgA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACYAAGYAAGMAAMOAAcHAA4D4HwB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACYAAGcAAOOAAcPAA8H8P4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACYAAGYAAGeAAePgB8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACYAAGeAAef4H+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACYAAGfgB+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACf//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQH4CX//6f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEY//GX//6f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMf+MJ//kf//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEf+IN//sL//0f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABjxgCf+QF//oP//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAH4AA8PAB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAP8AAAAAAAAAAAAAD///D///CAADCAADCAABAAAAAHAAAB4AAAfAAAD4AAAeAAADAAAAAAAACAABCAADCAADD///D///AAAAAAAA'), + 32, + atob("GAgKDAwUEwQICBgXBggGBxgMDAwMDAwMDAwHBw4ADgsYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgIBwg="), + 24|65536 + ); +} + +Graphics.prototype.setFontInknutAntiqua24 = function() { + // Actual height 24 (23 - 0) + return this.setFontCustom( + atob('AAAAAB4AAD4AAD4AAD4AABwAAAAAAAAAAAAAAAAPAAD/AA/4AP+AD/gAf4AAeAAAAAAAAAAAAYAAB/AAD/gAH/wAP/4APH4AcB4AcA4AcA4AcA4AeA4AfBwAf/wAP/gAH/AAD+AAA4AAAAAAAAAAIAYAcAYAcA4Af/4Af/4Af/4Af/4AcAYAYAYAAAQAAAAACAIAGAYAOA4AeB4AcD4AcH4AcP4Aef4Af94Af54APx4APh4ADH4AAH8AAAAAAAAACAAAGAAYOAAYeAA4cCAwcHBwefBwf/ngP//gPz/AHj+ACB8AAAwAAAAAAAwAABwAAHwAAPwAAfwAA8wABwwADgwAPBwAP//wf//wf//wf//gAAwAAAwAAAwAAAAAAHAGD/AOH/AMHvgMHngcHnwYHn44Hj/wHj/wfh/gfw/AAAeAAAAAAAAAAAAAAB8AAP/AAf/gA//wB//4D8D4HwB4HsA4POA4ePA4cPh44H/w4H/gAD/AAB+AAAYAAAAAAAAA/gAAfgAAeAAYeAB4eAHweAfAeB8AeHwAePAAe8AAf4AAfgAAeAAAYAAAAAAAAAAAAAeADg/APx/gP7/gf//w/+Dw4+Bw4fBw4fBw8fhw//zwf3/gfj/gPD/AAB+AAAYAAAAAAAAAA+AAD/AAH/gYH/wYP/w4OD5wcA5wcAzgeAPgfAfAP/+AP/8AH/4AD/wAB/AAAAAAAAAAAAAAHB4APj4APj4APj4APBwAAAAAAAAA'), + 46, + atob("CAkTDBANEQ8SEBISCA=="), + 24|65536 + ); +}; + +Graphics.prototype.setFontInknutAntiqua66 = function() { + // Actual height 66 (65 - 0) + return this.setFontCustom( + atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAH/AAAAAAAAAP/AAAAAAAAAf/gAAAAAAAAf/gAAAAAAAA//wAAAAAAAA//wAAAAAAAA//wAAAAAAAB//gAAAAAAAA//gAAAAAAAA//gAAAAAAAA//AAAAAAAAAf+AAAAAAAAAP8AAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAfAAAAAAAAAH/AAAAAAAAB//AAAAAAAAf//AAAAAAAH///AAAAAAB///8AAAAAA////AAAAAAP///wAAAAAD///8AAAAAA////AAAAAAP///wAAAAAD///8AAAAAA////AAAAAAf///gAAAAAH///4AAAAAAf//+AAAAAAAf//gAAAAAAAf/4AAAAAAAAf+AAAAAAAAAfgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAf/gAAAAAAAB//8AAAAAAAH//+AAAAAAAP///gAAAAAAf///wAAAAAA////4AAAAAB////8AAAAAD////8AAAAAH////+AAAAAP/////AAAAAP/////AAAAAf/////AAAAAf+AH//gAAAA/wAA//gAAAA/gAAf/gAAAB/AAAH/gAAAB/AAAD/wAAAD/AAAB/wAAAD+AAAB/wAAAD+AAAB/wAAAD+AAAA/wAAAD+AAAA/wAAAD/AAAA/gAAAH/AAAA/gAAAH/AAAA/gAAAD/gAAA/gAAAD/gAAB/AAAAD/wAAB/AAAAD/8AAD/AAAAD//AAH+AAAAD//4A/+AAAAB/////8AAAAB/////8AAAAA/////4AAAAA/////wAAAAAf////gAAAAAP////gAAAAAP////AAAAAAH///+AAAAAAB///4AAAAAAA///wAAAAAAAP//AAAAAAAAD/8AAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAA4AAAAHgAAAD4AAAAPgAAAD8AAAAfgAAAD8AAAAfgAAAD8AAAA/gAAAD8AAAB/gAAAD+AAAD/gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD/gAAA/gAAAD/AAAAfgAAAD+AAAAfgAAAD+AAAAfgAAAD8AAAAPgAAAD4AAAAPgAAADwAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAHgAAAAD8AAAPgAAAAD8AAAfgAAAAH4AAA/gAAAAP4AAB/gAAAAfwAAD/gAAAA/wAAD/gAAAA/wAAH/gAAAB/gAAP/gAAAD/gAAf/gAAAD/gAA//gAAAD/AAB//gAAAD/AAB//gAAAD/AAD//gAAAD/AAH//gAAAD/AAP//gAAAD/gAf//gAAAD/gB///gAAAD/wD///gAAAD/8P/f/gAAAD///+f/gAAAD///+f/gAAAD///8f/gAAAB///4f/gAAAB///wf/gAAAB///gf/gAAAA///Af/gAAAA//+Af/gAAAAf/8Af/gAAAAf/4Af/gAAAAP/wAf/gAAAAH/AA//gAAAAB8AH//gAAAAAAAP//wAAAAAAAP//wAAAAAAAP//wAAAAAAAP//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAADwAAAAAAcAAH4AAAAAAfAAH4AAAAAA/AAPwAAAAAA/AAfwAAAAAA/AA/gAAAAAB+AB/gAAAAAB+AB/AAAAAAD+AD/AAAAAAD8AH/AAAAAAH8AH+AAAAAAH4AH+AAHgAAP4AH+AAPwAAP4AH/AAfwAAfwAH/AA/4AAfwAH/gD/4AA/gAH/4P/8AB/gAH////+AD/AAD/////AH/AAD/////wf+AAD///////+AAB///v///8AAB///P///8AAA//+H///4AAA//8H///wAAAf/4D///wAAAP/wB///gAAAP/gB///AAAAD+AA//+AAAAA4AAf/8AAAAAAAAP/wAAAAAAAAH/AAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAB8AAAAAAAAAH8AAAAAAAAAP8AAAAAAAAAf8AAAAAAAAA/8AAAAAAAAB/8AAAAAAAAH/8AAAAAAAAP/8AAAAAAAAf/8AAAAAAAA//8AAAAAAAB/38AAAAAAAH/n8AAAAAAAP/H8AAAAAAAf+H8AAAAAAA/4H8AAAAAAD/wH8AAAAAAH/gH8AAAAAAP/AH8AAAAAAf8AH8AAAAAA/4AH8AAAAAD/wAH8AAAAAH/gAH8AAAAAP/AAH8AAAAAf8AAH8AAAAA////////8AA////////4AB////////4AB////////4AB////////wAD////////wAD////////wAD////////gAH////////gAH////////AAH////////AAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH4AAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAH4AAAAPgAAAH4AAAH/gAAAH4AAD//wAAAPwAB///wAAAPwAf///wAAAPwA////4AAAfgA////4AAAfgA//D/8AAAfgA//D/8AAA/AA//D/8AAA/AA//B/+AAB/AA//B/+AAB+AA//A//AAD+AA//A//AAD+AA//A//gAH8AA//Af/wAP8AA//Af/wAP4AA//AP/4A/4AA//AP/+D/wAA//AH////wAA//AH////gAA//AD////gAA//AD////AAA//AB///+AAB//AB///+AAP//AA///8AAf//gAf//4AAf//gAP//wAAf//gAH//gAAf//gAD//AAAAAAAAB/8AAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8AAAAAAAB///gAAAAAAP///4AAAAAA////+AAAAAB/////AAAAAH/////gAAAAP/////wAAAAf/////4AAAA//////8AAAB//////8AAAD//////+AAAH//////+AAAP//4B///AAAf/+AAH//AAA//wAAB//AAB//AAAAf/AAD/+AAAAP/gAD/4AAAAH/gAH/wMAAAD/gAP/geAAAD/gAP+B+AAAB/gAf8B/AAAB/gA/4B/gAAB/AA/wB/gAAB/AB/wB/wAAB/AB/gB/4AAD/AD/AB/+AAD+AH+AA//gAP+AH8AA//8A/8AP8AA/////8AP4AAf////4AfwAAf////4AfgAAP////wAfgAAH////gAPAAAH////AACAAAD///+AAAAAAB///8AAAAAAA///4AAAAAAAf//wAAAAAAAH//AAAAAAAAB/8AAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//4AAAAAAAH//4AAAAAAAD//8AAAAAAAD//8AAAAAAAD//wAAAAAAAD//AAAAAACAD/8AAAAAAPAD/8AAAAAA/AD/8AAAAAD/gD/8AAAAAP/gD/8AAAAA//AD/8AAAAD/8AD/8AAAAP/wAD/8AAAAf/AAD/8AAAB/8AAD/8AAAH/wAAD/8AAAf/AAAD/8AAB/+AAAD/8AAH/4AAAD/8AAf/gAAAD/8AB/+AAAAD/8AD/4AAAAD/8AP/gAAAAD/8A/+AAAAAD/8D/4AAAAAD/8P/gAAAAAD/8//AAAAAAD///8AAAAAAD///wAAAAAAD///AAAAAAAD//8AAAAAAAD//wAAAAAAAD//AAAAAAAAD/8AAAAAAAAD/wAAAAAAAAD/gAAAAAAAAD+AAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAD/wAAAAAAAAH/8AAAAAAAAf/+AAAAf4AA///AAAB/+AB///gAAD//AB///wAAH//gD///4AAf//wH///4AAf//4P///8AA///8P///8AB///+f///+AD///+////+AD/////gD/+AH////+AA//AP////8AAP/AP+D//4AAH/AP4A//wAAD/AfwAf/4AAD/AfwAP/8AAB/gfgAH/8AAB/gfgAD/+AAA/g/gAD/+AAA/g/wAB//AAA/gfwAA//gAA/gf4AA//wAA/gf8AD//wAB/Af/AP//4AB/Af/////8AD/Af//////AH+AP///z//gf+AP///j////8AH///B////4AH//+B////4AD//8A////wAB//4Af///gAA//wAf///AAAf/AAP///AAAP8AAH//+AAAAgAAD//4AAAAAAAB//wAAAAAAAAf/gAAAAAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAD//gAAAAAAAH//4AAAAAAAf//8AAAAAAA///+AAAAAAB////AAAAAAD////gAAMAAH////gAAfAAP////wAA/gAP////4AA/AAf////4AB/AAf////8AD+AA/+A//8AD+AA/wAH/8AH8AB/gAB/+AP8AB/AAAf+Af4AD/AAAP+Af4AD+AAAH+A/wAD+AAAH+B/wAD+AAAD+D/gAD+AAAB+H/AAD/AAAB4P/AAH/AAAAwf+AAD/gAAAA/8AAD/wAAAD/8AAD/4AAAH/4AAD/8AAAf/wAAD//AAD//gAAD//8Af//gAAB///////AAAB//////+AAAA//////8AAAA//////4AAAAf/////wAAAAP/////gAAAAH/////AAAAAD////8AAAAAB////4AAAAAAf///gAAAAAAH//+AAAAAAAB//wAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAB8AAAAAD/AAH+AAAAAP/gAP/AAAAAP/gAf/gAAAAf/wAf/gAAAA//wA//wAAAA//wA//wAAAA//wA//wAAAA//wA//gAAAA//gA//gAAAA//gA//gAAAA//AA//AAAAAf/AAf+AAAAAP+AAP8AAAAAH4AAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='), + 46, + atob("FhczISslMCkyKzMyFg=="), + 66|65536 + ); +}; + +Graphics.prototype.setFontInknutAntiqua88 = function() { + // Actual height 88 (87 - 0) + return this.setFontCustom( + atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAA/4AAAAAAAAAAAAH/wAAAAAAAAAAAA//gAAAAAAAAAAAH//AAAAAAAAAAAA//+AAAAAAAAAAAD//4AAAAAAAAAAAf//gAAAAAAAAAAB//+AAAAAAAAAAAH//4AAAAAAAAAAAf//gAAAAAAAAAAB//+AAAAAAAAAAAH//4AAAAAAAAAAAf//AAAAAAAAAAAB//8AAAAAAAAAAAH//gAAAAAAAAAAAP/8AAAAAAAAAAAAf/gAAAAAAAAAAAA/8AAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAP8AAAAAAAAAAAAP/wAAAAAAAAAAAf//AAAAAAAAAAAf//8AAAAAAAAAAf///wAAAAAAAAAf////AAAAAAAAAf////wAAAAAAAAf////wAAAAAAAAf////gAAAAAAAAf////gAAAAAAAAf////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAAP////gAAAAAAAAA////AAAAAAAAAAD///AAAAAAAAAAAH//AAAAAAAAAAAAf/AAAAAAAAAAAAB/AAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAB//wAAAAAAAAAAAf//wAAAAAAAAAAH///wAAAAAAAAAB////wAAAAAAAAAP////gAAAAAAAAB/////gAAAAAAAAP/////AAAAAAAAB/////+AAAAAAAAP/////4AAAAAAAB//////wAAAAAAAP//////gAAAAAAB///////AAAAAAAP//////8AAAAAAA///////4AAAAAAH///////gAAAAAAf//////+AAAAAAD//AB///8AAAAAAf/gAAf//wAAAAAB/8AAAf//AAAAAAH/gAAAf/+AAAAAA/8AAAAf/4AAAAAD/gAAAA//gAAAAAf+AAAAD/+AAAAAB/wAAAAH/4AAAAAH/AAAAAP/gAAAAAf8AAAAA/+AAAAAD/wAAAAD/4AAAAAP/AAAAAH/gAAAAA/8AAAAAf+AAAAAD/wAAAAB/4AAAAAP/AAAAAH/gAAAAA/+AAAAAf+AAAAAD/4AAAAB/wAAAAAP/gAAAAH/AAAAAA//AAAAAf8AAAAAD/+AAAAD/gAAAAAP/8AAAAP+AAAAAA//4AAAB/4AAAAAD//wAAAP/AAAAAAH//wAAB/8AAAAAAf//4AAf/gAAAAAB////A//+AAAAAAD///////wAAAAAAP///////AAAAAAAf//////4AAAAAAB///////AAAAAAAD//////8AAAAAAAP//////gAAAAAAAf/////8AAAAAAAA//////gAAAAAAAB/////8AAAAAAAAD/////gAAAAAAAAH////8AAAAAAAAAP////gAAAAAAAAAP///4AAAAAAAAAAf//+AAAAAAAAAAAf//gAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAHgAAAAAB8AAAAAB+AAAAAAPwAAAAAP8AAAAAB/AAAAAA/wAAAAAP8AAAAAD/AAAAAA/wAAAAAP8AAAAAH/AAAAAA/4AAAAA/8AAAAAD/gAAAAH/wAAAAAP+AAAAA//AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA//AAAAAf8AAAAAD/4AAAAA/wAAAAAP/gAAAAD/AAAAAA/8AAAAAP8AAAAAD/gAAAAA/wAAAAAP8AAAAAB/AAAAAA/gAAAAAH8AAAAAD+AAAAAAfwAAAAAHwAAAAAA8AAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAB8AAAAAAAPgAAAAPwAAAAAAB/AAAAB/AAAAAAAP8AAAAP8AAAAAAB/wAAAB/wAAAAAAP+AAAAH/AAAAAAA/4AAAA/8AAAAAAH/AAAAH/wAAAAAA/8AAAA//AAAAAAH/gAAAH/8AAAAAA/+AAAAf/wAAAAAD/4AAAD//AAAAAAf/AAAAf/8AAAAAB/8AAAD//wAAAAAP/wAAAf//AAAAAA/+AAAD//8AAAAAD/4AAAf//wAAAAAP/gAAB///AAAAAA/+AAAP//8AAAAAD/4AAB///wAAAAAP/gAAP///AAAAAA//AAB///8AAAAAD/8AAP///wAAAAAP/wAB////AAAAAA//gAf///8AAAAAD//AD/9//wAAAAAP/+A//n//AAAAAA/////8f/8AAAAAD/////h//wAAAAAH////+H//AAAAAAf////wf/8AAAAAB////+B//wAAAAAH////wH//AAAAAAP///+Af/8AAAAAA////wB//wAAAAAD///+AH//AAAAAAH///wAf/8AAAAAAf//+AB//wAAAAAA///wAH//AAAAAAB//+AAf/8AAAAAAD//wAB//wAAAAAAP/8AAH//AAAAAAAP/gAB//8AAAAAAAf4AA///wAAAAAAAAAAP///gAAAAAAAAAB///+AAAAAAAAAAH///4AAAAAAAAAAP///gAAAAAAAAAA////AAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAB4AAAAAAAADgAAAP4AAAAAAAAP4AAA/gAAAAAAAA/gAAH+AAAAAAAAH+AAA/wAAAAAAAAf4AAH/AAAAAAAAB/AAA/4AAAAAAAAP8AAD/gAAAAAAAA/wAAf8AAAAAAAAH+AAD/wAAAAAAAAf4AAf+AAAAAAAAB/gAD/4AAAAAAAAP8AAP/gAAAAAAAA/wAA/+AAAAAAAAH/AAD/wAAAAAAAAf4AAP/AAAHwAAAD/gAB/8AAA/gAAAP8AAD/4AAH+AAAB/wAAP/gAA/8AAAH/AAA/+AAH/4AAA/4AAD/8AA//gAAH/gAAP/4AP//AAAf8AAA//8H//+AAD/wAAD//////8AAf+AAAP//////4AD/4AAAf//////wA//AAAB///////9//8AAAH//////////gAAAP///8/////+AAAA////j/////wAAAD///+H/////AAAAH///wf////4AAAAf//+A/////AAAAA///wD////4AAAAB//+AH////gAAAAD//wAf///8AAAAAH/+AA////gAAAAAP/gAB///8AAAAAAf8AAD///gAAAAAAOAAAP//8AAAAAAAAAAAf//AAAAAAAAAAAAf/wAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAH8AAAAAAAAAAAAA/wAAAAAAAAAAAAH/AAAAAAAAAAAAA/8AAAAAAAAAAAAH/wAAAAAAAAAAAB//AAAAAAAAAAAAP/8AAAAAAAAAAAB//wAAAAAAAAAAAP//AAAAAAAAAAAB//8AAAAAAAAAAAf//wAAAAAAAAAAD///AAAAAAAAAAAf//8AAAAAAAAAAD/9/wAAAAAAAAAA//n/AAAAAAAAAAH/8f8AAAAAAAAAA//h/wAAAAAAAAAH/4H/AAAAAAAAAA//Af8AAAAAAAAAP/4B/wAAAAAAAAB//AH/AAAAAAAAAP/4Af8AAAAAAAAB/+AB/wAAAAAAAAP/wAH/AAAAAAAAD/+AAf8AAAAAAAAf/wAB/wAAAAAAAD/8AAH/AAAAAAAAf/gAAf8AAAAAAAD/8AAB/wAAAAAAA//gAAH/AAAAAAAH/8AAAf8AAAAAAA//AAAB/wAAAAAAH//////////+AAAf//////////4AAB///////////gAAP//////////8AAA///////////wAAD///////////AAAf//////////4AAB///////////gAAP//////////+AAA///////////wAAD///////////AAAf//////////8AAB///////////gAAH//////////+AAA///////////wAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB/wAAAAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB/wAAAAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB/wAAAAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB+AAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAfwAAAAAAfAAAAAB/gAAAAA/+AAAAAH8AAAAB//4AAAAA/wAAAD///gAAAAD/AAAH////AAAAAP4AAP////8AAAAB/gAD/////wAAAAH+AAP/////gAAAA/wAA/////+AAAAD/AAD//g//4AAAAP8AAP/+D//wAAAB/gAA//4H//AAAAH+AAD//gf/+AAAA/4AAP/+B//4AAAD/AAA//4D//wAAAP8AAD//gP//AAAB/wAAP/+A//+AAAH+AAA//4B//4AAA/4AAD//gH//wAAH/AAAP/+AP//AAAf8AAA//4A//+AAD/wAAD//gD//8AAf+AAAP/+AH//4AD/4AAA//4Af//wAf/AAAD//gA///gH/8AAAP/+AD//////gAAA//4AH/////+AAAD//gAf/////wAAAP/+AA//////AAAA//4AD/////4AAAD//gAH/////AAAAP/+AAf////8AAAD//4AA/////gAAA///gAB////8AAAf///AAH////gAAD///8AAP///+AAAP///wAAf///wAAAf///AAA///+AAAB///+AAB///gAAAH///4AAD//8AAAAAAAAAAAD//AAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//8AAAAAAAAAAB///+AAAAAAAAAAf///+AAAAAAAAAP////+AAAAAAAAD/////+AAAAAAAAf/////8AAAAAAAH//////8AAAAAAA///////4AAAAAAP///////wAAAAAB////////gAAAAAP///////+AAAAAB////////8AAAAAP////////4AAAAB/////////gAAAAP/////////AAAAB/////////8AAAAP///8Af///wAAAB///4AAD///gAAAP//8AAAB//+AAAB///AAAAB//4AAAH//wAAAAD//wAAA//8AAAAAD//AAAH//gAAAAAH/8AAA//4AAAAAAP/wAAD//AGAAAAA//AAAf/4B4AAAAB/8AAD/+APwAAAAH/wAAP/wD/AAAAAf/AAB/+AP+AAAAA/8AAP/wA/8AAAAD/gAA/+AD/wAAAAP+AAH/4AP/gAAAA/4AAf/AA//AAAAH/gAD/4AD/+AAAAf8AAf/AAP/8AAAB/wAB/4AAf/8AAAP/AAP/AAB//8AAB/4AA/8AAH//8AAf/gAH/gAAP///gf/8AAf8AAA///////wAD/gAAD//////+AAP+AAAH//////4AB/wAAAf//////AAH+AAAA//////4AA/4AAAB//////AAA/AAAAH/////8AAA4AAAAP/////gAAAAAAAAf////8AAAAAAAAA/////gAAAAAAAAB////8AAAAAAAAAD////AAAAAAAAAAH///4AAAAAAAAAAH//+AAAAAAAAAAAH//gAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///8AAAAAAAAAAH///4AAAAAAAAAAP///gAAAAAAAAAA///+AAAAAAAAAAD///8AAAAAAAAAAP///gAAAAAAAAAA///wAAAAAAAAAAB//8AAAAAAAAGAAH//AAAAAAAAB8AAf/8AAAAAAAAPwAB//wAAAAAAAD/gAH//AAAAAAAA/+AAf/8AAAAAAAP/8AB//wAAAAAAD//gAH//AAAAAAA//4AAf/8AAAAAAP/+AAB//wAAAAAD//gAAH//AAAAAAf/8AAAf/8AAAAAH//AAAB//wAAAAB//wAAAH//AAAAAf/8AAAAf/8AAAAH//AAAAB//wAAAB//wAAAAH//AAAAf/8AAAAAf/8AAAD//AAAAAB//wAAA//4AAAAAH//AAAP/+AAAAAAf/8AAD//gAAAAAB//wAA//4AAAAAAH//AAP/+AAAAAAAf/8AD//gAAAAAAB//wA//4AAAAAAAH//AH/+AAAAAAAAf/8B//wAAAAAAAB//wf/8AAAAAAAAH//H//AAAAAAAAAf/9//wAAAAAAAAB////8AAAAAAAAAH////AAAAAAAAAAf///wAAAAAAAAAB///8AAAAAAAAAAH///gAAAAAAAAAAf//4AAAAAAAAAAB//+AAAAAAAAAAAH//gAAAAAAAAAAAf/4AAAAAAAAAAAB/+AAAAAAAAAAAAH/gAAAAAAAAAAAAf4AAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAA//gAAAAAAAAAAAH//gAAAAAAAAAAA///AAAAAACAAAAP//+AAAAAD/wAAB///8AAAAA//wAAP///4AAAAH//wAA////wAAAA///gAH////gAAAH///AA/////AAAA///+AH////8AAAH///8A/////4AAA////4D/////gAAH////wf/////AAA/////D/////8AAH////+f/////4AAf////9//v///gAD///////AA//+AAf//////wAA//8AB//////+AAA//wAP//////wAAB//AA/+A///+AAAD/8AH/wA///wAAAH/4Af8AB///AAAAP/gB/wAB//+AAAA/+AP+AAD//4AAAB/4A/4AAP//wAAAH/gD/gAAf//AAAAP+AP+AAA//+AAAA/4A/4AAB//8AAAD/gD/gAAH//wAAAP+AP+AAAP//gAAA/4A/8AAAf//AAAD/gD/wAAB//8AAAP+AP/wAAf//4AAA/4A//gAH///wAAH/AD//gB////gAAf8AH////////AAD/wAf///////+AAf+AB/////3//+AH/4AD////+P//+B//AAP////w//////8AA////+B//////gAB////wH/////+AAD///+AP/////wAAP///wAf////+AAAf//+AB/////wAAA///wAD/////AAAB//+AAH////4AAAD//gAAP////AAAAH/8AAA////4AAAAD/AAAB////AAAAAAAAAAD///4AAAAAAAAAAD//+AAAAAAAAAAAH//wAAAAAAAAAAAP/8AAAAAAAAAAAAP/AAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAA//+AAAAAAAAAAAP//8AAAAAAAAAAD///8AAAAAAAAAAf///4AAAAAAAAAH////wAAAAAAAAA/////gAAAAAAAAH/////AAAAAAAAA/////+AAAAYAAAH/////8AAAD4AAA//////wAAAfwAAD//////gAAB/gAAf//////AAAP+AAD//////8AAB/wAAP//////4AAH/AAB///////gAA/4AAH/+Af//+AAH/gAA//AAH//8AAf8AAD/wAAD//wAD/wAAf+AAAD//AAf+AAB/wAAAH/+AD/4AAH/AAAAP/4Af/AAA/8AAAAf/gB/4AAD/gAAAA/+AP/gAAP+AAAAB/4B/8AAA/4AAAAD/gP/wAAH/gAAAAP+B/+AAAf/AAAAAf4P/4AAB/8AAAAB+B//AAAH/wAAAADgP/4AAAf/gAAAAMB//gAAB/+AAAAAAP/8AAAH/8AAAAAD//gAAAf/4AAAAAf/+AAAB//wAAAAH//wAAAD//wAAAB//+AAAAP//wAAAf//wAAAA///4AAP//+AAAAB////Af///4AAAAH/////////AAAAAf////////4AAAAA/////////AAAAAD////////4AAAAAH////////AAAAAAP///////4AAAAAA////////AAAAAAB///////4AAAAAAD//////+AAAAAAAH//////wAAAAAAAP/////+AAAAAAAAP/////gAAAAAAAAf////4AAAAAAAAAf///+AAAAAAAAAAP///AAAAAAAAAAAH//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAD/AAAAAAAA/8AAAf+AAAAAAAH/4AAD/8AAAAAAA//wAAf/4AAAAAAH//gAD//wAAAAAA//+AAf//AAAAAAD//4AB//8AAAAAAf//gAP//wAAAAAB//+AA///AAAAAAH//4AD//8AAAAAAf//gAP//wAAAAAB//+AA///AAAAAAH//4AD//8AAAAAAf//AAP//gAAAAAB//8AA//+AAAAAAD//gAB//wAAAAAAH/8AAD/+AAAAAAAf/gAAP/wAAAAAAAf8AAAP+AAAAAAAAfAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'), + 46, + atob("HR9FLTkxQDdDOkNDHQ=="), + 88|65536 + ); +}; + +{ // must be inside our own scope here so that when we are unloaded everything disappears + // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global + +let drawStatusTimeout; + +let drawStatus = function(){ // battery and 24h line clock, remove if ou want to display wigets instead + +g.clearRect(0,22,175,22); +g.setColor(g.theme.fg); // draw battery +g.drawLine(0,2,E.getBattery()*1.75,2); + // draw line for 24 h clock + var x = g.getWidth() / 2; + var y = g.getHeight() / 2; + var ix; + var shade; + var w ; + var date = new Date(); + for ( ix = 0; ix < 176; ix=ix+4){ + shade = 2*Math.PI * ((date.getHours()-6)/24); + shade = Math.sin(2*Math.PI* ix/176 + shade ); + shade = shade * 0.5 + 0.5; + shade = 1- shade ; +g.setColor(shade,shade,shade); +g.drawLine(ix,18, ix+3,18); + } +g.setColor(g.theme.fg); // draw dots at noon / midnight +ix = x-(((date.getHours())%12)/24)*176; +g.drawLine(ix,16,ix+2,18); +g.drawLine(ix+2,18,ix, 20); +g.drawLine(ix,20,ix-2,18); +g.drawLine(ix-2,18,ix,16); + +ix = ix + 176/2; +g.drawLine(ix,16,ix+2,18); +g.drawLine(ix+2,18,ix, 20); +g.drawLine(ix,20,ix-2,18); +g.drawLine(ix-2,18,ix,16); + +// queue next drawStatus + if (drawStatusTimeout) clearTimeout(drawStatusTimeout); + drawStatusTimeout = setTimeout(function() { + drawStatusTimeout = undefined; + drawStatus(); + //draw(); + //drawWeek(); + }, 30*60000 - (Date.now() % 30*60000)); + +};//------------------<< status + + + +let drawWeekTimeout; + +let drawWeek = function() { + // date and day of week, moonphase, next quater moon + var date = new Date(); + var weekday = Math.abs(date.getDay() -1 % 7); + var dateStr = date.getDate() ; + + g.reset().clearRect(0,175-36,175,175-36); + g.setColor(g.theme.fg); + g.fillRect(0, 175-15, 175, 175); + var pos; + var d; + for ( d=0; d< 7; d++){ + pos = d * 25; + if (d < 5 ){ + g.setColor(g.theme.bg); + g.fillRect(pos, 175-15, pos+22, 175); + }else{ g.setColor(g.blendColor(g.theme.bg,g.theme.fg,0.25)); + g.fillRect(pos, 175-15, pos+22, 175); + } + + } +g.setColor(g.theme.fg); +g.setFontAlign(0, 0).setFont("InknutAntiqua24", 1).drawString(dateStr, weekday*(176/7)+11, g.getHeight() - 15); + +var mphaseq=-1; // moonphase 0-3 +var qday = -1; // day in week quater moon +var moonssince; // full moons since May 5th 2023 +var lundaymo; // lunation day monday +var tms = date.getTime();// +var weekdayms = weekday * 86400000 ;//seconds since monday +var startd = tms - weekdayms; // monday +var perc;// percent of cycle +tms = startd - 1683308000000 ;//may5th 1734h 2023; +moonssince = tms /2551442823.5;//div ms in a lunar month +perc = moonssince - Math.floor(moonssince); +lundaymo = perc * 29.530588235; +mphaseq =Math.round((lundaymo)/ 7.38264705875); + +qday = Math.round( 7.38264705875 - (lundaymo- (mphaseq* 7.38264705875))) % 7; // next quater phase day +mphaseq = (mphaseq+1) % 4; // set to next quater phase + + +g.setColor(0,0,0); // black moon bg +var yoffset = (qday == weekday )*24; +g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(48), qday*(176/7)+11, g.getHeight() - 22- yoffset); +g.setColor(1,1,1); // moonshape + //g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(65+mphaseq*26/4), qday*(176/7)+11, g.getHeight() - 26- yoffset); // next moon or : +g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(65+perc*26), qday*(176/7)+11, g.getHeight() - 22- yoffset); + +// queue next drawWeek + if (drawWeekTimeout) clearTimeout(drawWeekTimeout); + drawWeekTimeout = setTimeout(function() { + drawWeekTimeout = undefined; + draw(); + drawWeek(); + }, 180*60000 - (Date.now() % 180*60000)); + +};//-------------------<< week + +let drawTimeout; + +// draw clock +let draw = function() { + var x = g.getWidth() / 2; + var y = g.getHeight() / 2; + var xoffset =0; + var minute; + var hour; + var hour_old; + var date; + var digit1; + var digit2; + + g.reset().clearRect(0,25,175,175-36); // clear area + + date = new Date(); + hour_old = hour; + hour = date.getHours(); // hour + if (hour_old != hour){ // only draw if hour has changed + if (hour > 12) { + hour = hour % 12; + } + digit2 = hour % 10; + digit1 = hour - digit2; + if (digit1 > 0 ){ // draw hours, one or two digits + xoffset = -10; + g.setColor(g.theme.fg); + g.setFontAlign(1, 0).setFont("InknutAntiqua66",1).drawString(hour, x+xoffset, y); + } + else { + xoffset = -15; + g.setColor(g.theme.fg); + g.setFontAlign(1, 0).setFont("InknutAntiqua88",1).drawString(hour, x+xoffset, y); + } + } + minute = date.getMinutes(); // minutes + digit2 = minute % 10; + digit1 = Math.floor(minute / 10); + minute = digit1.toString() + digit2.toString(); + + g.setColor(g.blendColor(g.theme.bg,g.theme.fg,0.5)); + g.setFontAlign(-1, 0).setFont("InknutAntiqua66",1).drawString(minute, x+xoffset , y); + +// queue next draw + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); + +};//-----------------------<< clock + + +// Show launcher when middle button pressed +Bangle.setUI({ + mode : "clock", + remove : function() { + // Called to unload all of the clock app + if (drawStatusTimeout) clearTimeout(drawStatusTimeout); + drawStatusTimeout = undefined; + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + if (drawWeekTimeout) clearTimeout(drawWeekTimeout); + drawWeekTimeout = undefined; + delete Graphics.prototype.setFontmoonphases; + delete Graphics.prototype.setFontInknutAntiqua24; + delete Graphics.prototype.setFontInknutAntiqua66d; + delete Graphics.prototype.setFontInknutAntiqua88; + + + }}); +//Load widgets +//Bangle.loadWidgets(); +g.reset().clearRect(0,0,g.getWidth(),g.getHeight()); +draw(); +drawWeek(); +drawStatus(); // remove if ou want wigets to draw instead +// +//setTimeout(Bangle.drawWidgets,0); +} From 59cdf22af72c8f3a4d96af3a5dd5dee9446fd78d Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 19:34:01 +0200 Subject: [PATCH 028/118] Create polymath.js --- apps/polymath/polymath.js | 238 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 apps/polymath/polymath.js diff --git a/apps/polymath/polymath.js b/apps/polymath/polymath.js new file mode 100644 index 000000000..153a72036 --- /dev/null +++ b/apps/polymath/polymath.js @@ -0,0 +1,238 @@ +// Clock with date day and moon based on the "Anton Clock" + +//require("Font4x4").add(Graphics); + + +Graphics.prototype.setFontmoonphases = function() { + // Actual height 23 (23 - 1) + return this.setFontCustom( + atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACAH/nAH/nAAACAAAAAAAAAAAAAHwAAH4AAAAAAAAAAGAAAH4AAHgAAAAAAAAAAAQgAAQhAAQ/AA/4AH8gAGQgAAQjAAR/AA/4AH4gAEQgAAQgAAA4APg8APwMAY4EAQ4EB///AQcEAQcMAcP8AeP4AADwAAAAAB4AAD8AAHOAAECBAECDAGGGAH8cAD44AABgAAHAAAMAAAY+ABz/ADDDAGCBAECBAADnAAB+AAA8AAAAAAAAAAB8AAD+ADz/AH+DAGeBAEOBAEPBAELhAH5zADw6ABg+AAEeAAF/AAHnAAGDAAEBAAABAAAAAAAAAH4AAHwAAAAAAAAAAP/gA//4B8B8DgAOGAACEAADAAAAAAAAEAADGAACDgAOB8B8A//4AP/gAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAP8AAAAAAAAAAAAAAH4AAf+AB//gD//wD//wH//4H//8P//8P//8P//8P//8P//8P//8P//8H//4H//4D//wB//gA//AAf+AADwAAAABAAAxAAA+AAA8AAAAAAAAAAAAAABgAABgAABgAABgAABgAABgAAAAAAAAAAACAAAHAAAHAAACAAAAAAAHAAA8AAHwAA+AADwAAHAAAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAP8AAAAAAAAAAAAAABABADABACABAH//AH//AAABAAABAAABAAAAAAAAAAAAAHAHAHAHAEAPAEAbAEAzAGBjAHPDAD+DAD8DAAADAAAAAAAAADAPAHADAGABAEEBAEEBAEGBAGODAH7HAD7+AAh8AAAAAAA4AAB4AAHYAAMYAAYYABwYADgYAH//AH//AAAYAAAYAAAAAAAAAAAGAH8PAGEDAGEBAGEBAGEBAGGDAGGDAGD+AAD8AAAQAAAAAA/4AB/+ADyPAGGDAEEBAEEBAEGBAGHHAHD+AAB8AAAAAAAAAAAAAHgAAGABAGAHAGAeAGB4AGHgAGeAAH4AAHgAAEAAAAAAABx8AD7+AH/HAGOBAEEBAEEBAGODAH/HAD7+ABx8AAAAAAAAAB8GAD+HAHvBAGDBAEBBAEBBAGBDAHjOAD/8AB/4AAAAAAAAAAICAAcHAAcHAAICAAAAAAAAAAAAAAABAHAzAHA+AHA8AAAAAAAAAAAAAAGAAAHAAANAAANgAAZgAAYwAAwwAAwYAAgYABgIABAMAAAAAAAAAAAAABAMABgIAAgYAAwQAAQwAAYgAAJgAANgAAPAAAHAAAGAAAAAAAAAAAAAAHAAAGAAAEAHAED3AECHAGGAAH8AAD8AAAwAAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACQAACYAAGIAAEMAAMGAAYDAAwBgBgA8PAAH4AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA5nAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8F//oCf+QBjxgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+L//0N//sEf+ICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+b//2J//kMP8MEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+X//6Y//GIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+X//6QBgCYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+QAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+fAA+YAAGQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f4H+eAAeYAAGQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8PgB8eAAeYAAGQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH8P4PAA8OAAcYAAGYAAGQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD4HwHAA4OAAcMAAMYAAGYAAGQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB4HgDgBwGAAYMAAMIAAEYAAGQAACQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACQAACYAAGIAAEMAAMGAAYDgBwB4HgA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACYAAGYAAGMAAMOAAcHAA4D4HwB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACYAAGcAAOOAAcPAA8H8P4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACYAAGYAAGeAAePgB8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACYAAGeAAef4H+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACYAAGfgB+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACf//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQH4CX//6f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEY//GX//6f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMf+MJ//kf//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEf+IN//sL//0f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABjxgCf+QF//oP//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAH4AA8PAB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAP8AAAAAAAAAAAAAD///D///CAADCAADCAABAAAAAHAAAB4AAAfAAAD4AAAeAAADAAAAAAAACAABCAADCAADD///D///AAAAAAAA'), + 32, + atob("GAgKDAwUEwQICBgXBggGBxgMDAwMDAwMDAwHBw4ADgsYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgIBwg="), + 24|65536 + ); +} + +Graphics.prototype.setFontInknutAntiqua24 = function() { + // Actual height 24 (23 - 0) + return this.setFontCustom( + atob('AAAAAB4AAD4AAD4AAD4AABwAAAAAAAAAAAAAAAAPAAD/AA/4AP+AD/gAf4AAeAAAAAAAAAAAAYAAB/AAD/gAH/wAP/4APH4AcB4AcA4AcA4AcA4AeA4AfBwAf/wAP/gAH/AAD+AAA4AAAAAAAAAAIAYAcAYAcA4Af/4Af/4Af/4Af/4AcAYAYAYAAAQAAAAACAIAGAYAOA4AeB4AcD4AcH4AcP4Aef4Af94Af54APx4APh4ADH4AAH8AAAAAAAAACAAAGAAYOAAYeAA4cCAwcHBwefBwf/ngP//gPz/AHj+ACB8AAAwAAAAAAAwAABwAAHwAAPwAAfwAA8wABwwADgwAPBwAP//wf//wf//wf//gAAwAAAwAAAwAAAAAAHAGD/AOH/AMHvgMHngcHnwYHn44Hj/wHj/wfh/gfw/AAAeAAAAAAAAAAAAAAB8AAP/AAf/gA//wB//4D8D4HwB4HsA4POA4ePA4cPh44H/w4H/gAD/AAB+AAAYAAAAAAAAA/gAAfgAAeAAYeAB4eAHweAfAeB8AeHwAePAAe8AAf4AAfgAAeAAAYAAAAAAAAAAAAAeADg/APx/gP7/gf//w/+Dw4+Bw4fBw4fBw8fhw//zwf3/gfj/gPD/AAB+AAAYAAAAAAAAAA+AAD/AAH/gYH/wYP/w4OD5wcA5wcAzgeAPgfAfAP/+AP/8AH/4AD/wAB/AAAAAAAAAAAAAAHB4APj4APj4APj4APBwAAAAAAAAA'), + 46, + atob("CAkTDBANEQ8SEBISCA=="), + 24|65536 + ); +}; + +Graphics.prototype.setFontInknutAntiqua66 = function() { + // Actual height 66 (65 - 0) + return this.setFontCustom( + atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAH/AAAAAAAAAP/AAAAAAAAAf/gAAAAAAAAf/gAAAAAAAA//wAAAAAAAA//wAAAAAAAA//wAAAAAAAB//gAAAAAAAA//gAAAAAAAA//gAAAAAAAA//AAAAAAAAAf+AAAAAAAAAP8AAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAfAAAAAAAAAH/AAAAAAAAB//AAAAAAAAf//AAAAAAAH///AAAAAAB///8AAAAAA////AAAAAAP///wAAAAAD///8AAAAAA////AAAAAAP///wAAAAAD///8AAAAAA////AAAAAAf///gAAAAAH///4AAAAAAf//+AAAAAAAf//gAAAAAAAf/4AAAAAAAAf+AAAAAAAAAfgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAf/gAAAAAAAB//8AAAAAAAH//+AAAAAAAP///gAAAAAAf///wAAAAAA////4AAAAAB////8AAAAAD////8AAAAAH////+AAAAAP/////AAAAAP/////AAAAAf/////AAAAAf+AH//gAAAA/wAA//gAAAA/gAAf/gAAAB/AAAH/gAAAB/AAAD/wAAAD/AAAB/wAAAD+AAAB/wAAAD+AAAB/wAAAD+AAAA/wAAAD+AAAA/wAAAD/AAAA/gAAAH/AAAA/gAAAH/AAAA/gAAAD/gAAA/gAAAD/gAAB/AAAAD/wAAB/AAAAD/8AAD/AAAAD//AAH+AAAAD//4A/+AAAAB/////8AAAAB/////8AAAAA/////4AAAAA/////wAAAAAf////gAAAAAP////gAAAAAP////AAAAAAH///+AAAAAAB///4AAAAAAA///wAAAAAAAP//AAAAAAAAD/8AAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAA4AAAAHgAAAD4AAAAPgAAAD8AAAAfgAAAD8AAAAfgAAAD8AAAA/gAAAD8AAAB/gAAAD+AAAD/gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD/gAAA/gAAAD/AAAAfgAAAD+AAAAfgAAAD+AAAAfgAAAD8AAAAPgAAAD4AAAAPgAAADwAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAHgAAAAD8AAAPgAAAAD8AAAfgAAAAH4AAA/gAAAAP4AAB/gAAAAfwAAD/gAAAA/wAAD/gAAAA/wAAH/gAAAB/gAAP/gAAAD/gAAf/gAAAD/gAA//gAAAD/AAB//gAAAD/AAB//gAAAD/AAD//gAAAD/AAH//gAAAD/AAP//gAAAD/gAf//gAAAD/gB///gAAAD/wD///gAAAD/8P/f/gAAAD///+f/gAAAD///+f/gAAAD///8f/gAAAB///4f/gAAAB///wf/gAAAB///gf/gAAAA///Af/gAAAA//+Af/gAAAAf/8Af/gAAAAf/4Af/gAAAAP/wAf/gAAAAH/AA//gAAAAB8AH//gAAAAAAAP//wAAAAAAAP//wAAAAAAAP//wAAAAAAAP//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAADwAAAAAAcAAH4AAAAAAfAAH4AAAAAA/AAPwAAAAAA/AAfwAAAAAA/AA/gAAAAAB+AB/gAAAAAB+AB/AAAAAAD+AD/AAAAAAD8AH/AAAAAAH8AH+AAAAAAH4AH+AAHgAAP4AH+AAPwAAP4AH/AAfwAAfwAH/AA/4AAfwAH/gD/4AA/gAH/4P/8AB/gAH////+AD/AAD/////AH/AAD/////wf+AAD///////+AAB///v///8AAB///P///8AAA//+H///4AAA//8H///wAAAf/4D///wAAAP/wB///gAAAP/gB///AAAAD+AA//+AAAAA4AAf/8AAAAAAAAP/wAAAAAAAAH/AAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAB8AAAAAAAAAH8AAAAAAAAAP8AAAAAAAAAf8AAAAAAAAA/8AAAAAAAAB/8AAAAAAAAH/8AAAAAAAAP/8AAAAAAAAf/8AAAAAAAA//8AAAAAAAB/38AAAAAAAH/n8AAAAAAAP/H8AAAAAAAf+H8AAAAAAA/4H8AAAAAAD/wH8AAAAAAH/gH8AAAAAAP/AH8AAAAAAf8AH8AAAAAA/4AH8AAAAAD/wAH8AAAAAH/gAH8AAAAAP/AAH8AAAAAf8AAH8AAAAA////////8AA////////4AB////////4AB////////4AB////////wAD////////wAD////////wAD////////gAH////////gAH////////AAH////////AAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH4AAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAH4AAAAPgAAAH4AAAH/gAAAH4AAD//wAAAPwAB///wAAAPwAf///wAAAPwA////4AAAfgA////4AAAfgA//D/8AAAfgA//D/8AAA/AA//D/8AAA/AA//B/+AAB/AA//B/+AAB+AA//A//AAD+AA//A//AAD+AA//A//gAH8AA//Af/wAP8AA//Af/wAP4AA//AP/4A/4AA//AP/+D/wAA//AH////wAA//AH////gAA//AD////gAA//AD////AAA//AB///+AAB//AB///+AAP//AA///8AAf//gAf//4AAf//gAP//wAAf//gAH//gAAf//gAD//AAAAAAAAB/8AAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8AAAAAAAB///gAAAAAAP///4AAAAAA////+AAAAAB/////AAAAAH/////gAAAAP/////wAAAAf/////4AAAA//////8AAAB//////8AAAD//////+AAAH//////+AAAP//4B///AAAf/+AAH//AAA//wAAB//AAB//AAAAf/AAD/+AAAAP/gAD/4AAAAH/gAH/wMAAAD/gAP/geAAAD/gAP+B+AAAB/gAf8B/AAAB/gA/4B/gAAB/AA/wB/gAAB/AB/wB/wAAB/AB/gB/4AAD/AD/AB/+AAD+AH+AA//gAP+AH8AA//8A/8AP8AA/////8AP4AAf////4AfwAAf////4AfgAAP////wAfgAAH////gAPAAAH////AACAAAD///+AAAAAAB///8AAAAAAA///4AAAAAAAf//wAAAAAAAH//AAAAAAAAB/8AAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//4AAAAAAAH//4AAAAAAAD//8AAAAAAAD//8AAAAAAAD//wAAAAAAAD//AAAAAACAD/8AAAAAAPAD/8AAAAAA/AD/8AAAAAD/gD/8AAAAAP/gD/8AAAAA//AD/8AAAAD/8AD/8AAAAP/wAD/8AAAAf/AAD/8AAAB/8AAD/8AAAH/wAAD/8AAAf/AAAD/8AAB/+AAAD/8AAH/4AAAD/8AAf/gAAAD/8AB/+AAAAD/8AD/4AAAAD/8AP/gAAAAD/8A/+AAAAAD/8D/4AAAAAD/8P/gAAAAAD/8//AAAAAAD///8AAAAAAD///wAAAAAAD///AAAAAAAD//8AAAAAAAD//wAAAAAAAD//AAAAAAAAD/8AAAAAAAAD/wAAAAAAAAD/gAAAAAAAAD+AAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAD/wAAAAAAAAH/8AAAAAAAAf/+AAAAf4AA///AAAB/+AB///gAAD//AB///wAAH//gD///4AAf//wH///4AAf//4P///8AA///8P///8AB///+f///+AD///+////+AD/////gD/+AH////+AA//AP////8AAP/AP+D//4AAH/AP4A//wAAD/AfwAf/4AAD/AfwAP/8AAB/gfgAH/8AAB/gfgAD/+AAA/g/gAD/+AAA/g/wAB//AAA/gfwAA//gAA/gf4AA//wAA/gf8AD//wAB/Af/AP//4AB/Af/////8AD/Af//////AH+AP///z//gf+AP///j////8AH///B////4AH//+B////4AD//8A////wAB//4Af///gAA//wAf///AAAf/AAP///AAAP8AAH//+AAAAgAAD//4AAAAAAAB//wAAAAAAAAf/gAAAAAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAD//gAAAAAAAH//4AAAAAAAf//8AAAAAAA///+AAAAAAB////AAAAAAD////gAAMAAH////gAAfAAP////wAA/gAP////4AA/AAf////4AB/AAf////8AD+AA/+A//8AD+AA/wAH/8AH8AB/gAB/+AP8AB/AAAf+Af4AD/AAAP+Af4AD+AAAH+A/wAD+AAAH+B/wAD+AAAD+D/gAD+AAAB+H/AAD/AAAB4P/AAH/AAAAwf+AAD/gAAAA/8AAD/wAAAD/8AAD/4AAAH/4AAD/8AAAf/wAAD//AAD//gAAD//8Af//gAAB///////AAAB//////+AAAA//////8AAAA//////4AAAAf/////wAAAAP/////gAAAAH/////AAAAAD////8AAAAAB////4AAAAAAf///gAAAAAAH//+AAAAAAAB//wAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAB8AAAAAD/AAH+AAAAAP/gAP/AAAAAP/gAf/gAAAAf/wAf/gAAAA//wA//wAAAA//wA//wAAAA//wA//wAAAA//wA//gAAAA//gA//gAAAA//gA//gAAAA//AA//AAAAAf/AAf+AAAAAP+AAP8AAAAAH4AAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='), + 46, + atob("FhczISslMCkyKzMyFg=="), + 66|65536 + ); +}; + +Graphics.prototype.setFontInknutAntiqua88 = function() { + // Actual height 88 (87 - 0) + return this.setFontCustom( + atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAA/4AAAAAAAAAAAAH/wAAAAAAAAAAAA//gAAAAAAAAAAAH//AAAAAAAAAAAA//+AAAAAAAAAAAD//4AAAAAAAAAAAf//gAAAAAAAAAAB//+AAAAAAAAAAAH//4AAAAAAAAAAAf//gAAAAAAAAAAB//+AAAAAAAAAAAH//4AAAAAAAAAAAf//AAAAAAAAAAAB//8AAAAAAAAAAAH//gAAAAAAAAAAAP/8AAAAAAAAAAAAf/gAAAAAAAAAAAA/8AAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAP8AAAAAAAAAAAAP/wAAAAAAAAAAAf//AAAAAAAAAAAf//8AAAAAAAAAAf///wAAAAAAAAAf////AAAAAAAAAf////wAAAAAAAAf////wAAAAAAAAf////gAAAAAAAAf////gAAAAAAAAf////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAAP////gAAAAAAAAA////AAAAAAAAAAD///AAAAAAAAAAAH//AAAAAAAAAAAAf/AAAAAAAAAAAAB/AAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAB//wAAAAAAAAAAAf//wAAAAAAAAAAH///wAAAAAAAAAB////wAAAAAAAAAP////gAAAAAAAAB/////gAAAAAAAAP/////AAAAAAAAB/////+AAAAAAAAP/////4AAAAAAAB//////wAAAAAAAP//////gAAAAAAB///////AAAAAAAP//////8AAAAAAA///////4AAAAAAH///////gAAAAAAf//////+AAAAAAD//AB///8AAAAAAf/gAAf//wAAAAAB/8AAAf//AAAAAAH/gAAAf/+AAAAAA/8AAAAf/4AAAAAD/gAAAA//gAAAAAf+AAAAD/+AAAAAB/wAAAAH/4AAAAAH/AAAAAP/gAAAAAf8AAAAA/+AAAAAD/wAAAAD/4AAAAAP/AAAAAH/gAAAAA/8AAAAAf+AAAAAD/wAAAAB/4AAAAAP/AAAAAH/gAAAAA/+AAAAAf+AAAAAD/4AAAAB/wAAAAAP/gAAAAH/AAAAAA//AAAAAf8AAAAAD/+AAAAD/gAAAAAP/8AAAAP+AAAAAA//4AAAB/4AAAAAD//wAAAP/AAAAAAH//wAAB/8AAAAAAf//4AAf/gAAAAAB////A//+AAAAAAD///////wAAAAAAP///////AAAAAAAf//////4AAAAAAB///////AAAAAAAD//////8AAAAAAAP//////gAAAAAAAf/////8AAAAAAAA//////gAAAAAAAB/////8AAAAAAAAD/////gAAAAAAAAH////8AAAAAAAAAP////gAAAAAAAAAP///4AAAAAAAAAAf//+AAAAAAAAAAAf//gAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAHgAAAAAB8AAAAAB+AAAAAAPwAAAAAP8AAAAAB/AAAAAA/wAAAAAP8AAAAAD/AAAAAA/wAAAAAP8AAAAAH/AAAAAA/4AAAAA/8AAAAAD/gAAAAH/wAAAAAP+AAAAA//AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA//AAAAAf8AAAAAD/4AAAAA/wAAAAAP/gAAAAD/AAAAAA/8AAAAAP8AAAAAD/gAAAAA/wAAAAAP8AAAAAB/AAAAAA/gAAAAAH8AAAAAD+AAAAAAfwAAAAAHwAAAAAA8AAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAB8AAAAAAAPgAAAAPwAAAAAAB/AAAAB/AAAAAAAP8AAAAP8AAAAAAB/wAAAB/wAAAAAAP+AAAAH/AAAAAAA/4AAAA/8AAAAAAH/AAAAH/wAAAAAA/8AAAA//AAAAAAH/gAAAH/8AAAAAA/+AAAAf/wAAAAAD/4AAAD//AAAAAAf/AAAAf/8AAAAAB/8AAAD//wAAAAAP/wAAAf//AAAAAA/+AAAD//8AAAAAD/4AAAf//wAAAAAP/gAAB///AAAAAA/+AAAP//8AAAAAD/4AAB///wAAAAAP/gAAP///AAAAAA//AAB///8AAAAAD/8AAP///wAAAAAP/wAB////AAAAAA//gAf///8AAAAAD//AD/9//wAAAAAP/+A//n//AAAAAA/////8f/8AAAAAD/////h//wAAAAAH////+H//AAAAAAf////wf/8AAAAAB////+B//wAAAAAH////wH//AAAAAAP///+Af/8AAAAAA////wB//wAAAAAD///+AH//AAAAAAH///wAf/8AAAAAAf//+AB//wAAAAAA///wAH//AAAAAAB//+AAf/8AAAAAAD//wAB//wAAAAAAP/8AAH//AAAAAAAP/gAB//8AAAAAAAf4AA///wAAAAAAAAAAP///gAAAAAAAAAB///+AAAAAAAAAAH///4AAAAAAAAAAP///gAAAAAAAAAA////AAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAB4AAAAAAAADgAAAP4AAAAAAAAP4AAA/gAAAAAAAA/gAAH+AAAAAAAAH+AAA/wAAAAAAAAf4AAH/AAAAAAAAB/AAA/4AAAAAAAAP8AAD/gAAAAAAAA/wAAf8AAAAAAAAH+AAD/wAAAAAAAAf4AAf+AAAAAAAAB/gAD/4AAAAAAAAP8AAP/gAAAAAAAA/wAA/+AAAAAAAAH/AAD/wAAAAAAAAf4AAP/AAAHwAAAD/gAB/8AAA/gAAAP8AAD/4AAH+AAAB/wAAP/gAA/8AAAH/AAA/+AAH/4AAA/4AAD/8AA//gAAH/gAAP/4AP//AAAf8AAA//8H//+AAD/wAAD//////8AAf+AAAP//////4AD/4AAAf//////wA//AAAB///////9//8AAAH//////////gAAAP///8/////+AAAA////j/////wAAAD///+H/////AAAAH///wf////4AAAAf//+A/////AAAAA///wD////4AAAAB//+AH////gAAAAD//wAf///8AAAAAH/+AA////gAAAAAP/gAB///8AAAAAAf8AAD///gAAAAAAOAAAP//8AAAAAAAAAAAf//AAAAAAAAAAAAf/wAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAH8AAAAAAAAAAAAA/wAAAAAAAAAAAAH/AAAAAAAAAAAAA/8AAAAAAAAAAAAH/wAAAAAAAAAAAB//AAAAAAAAAAAAP/8AAAAAAAAAAAB//wAAAAAAAAAAAP//AAAAAAAAAAAB//8AAAAAAAAAAAf//wAAAAAAAAAAD///AAAAAAAAAAAf//8AAAAAAAAAAD/9/wAAAAAAAAAA//n/AAAAAAAAAAH/8f8AAAAAAAAAA//h/wAAAAAAAAAH/4H/AAAAAAAAAA//Af8AAAAAAAAAP/4B/wAAAAAAAAB//AH/AAAAAAAAAP/4Af8AAAAAAAAB/+AB/wAAAAAAAAP/wAH/AAAAAAAAD/+AAf8AAAAAAAAf/wAB/wAAAAAAAD/8AAH/AAAAAAAAf/gAAf8AAAAAAAD/8AAB/wAAAAAAA//gAAH/AAAAAAAH/8AAAf8AAAAAAA//AAAB/wAAAAAAH//////////+AAAf//////////4AAB///////////gAAP//////////8AAA///////////wAAD///////////AAAf//////////4AAB///////////gAAP//////////+AAA///////////wAAD///////////AAAf//////////8AAB///////////gAAH//////////+AAA///////////wAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB/wAAAAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB/wAAAAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB/wAAAAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB+AAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAfwAAAAAAfAAAAAB/gAAAAA/+AAAAAH8AAAAB//4AAAAA/wAAAD///gAAAAD/AAAH////AAAAAP4AAP////8AAAAB/gAD/////wAAAAH+AAP/////gAAAA/wAA/////+AAAAD/AAD//g//4AAAAP8AAP/+D//wAAAB/gAA//4H//AAAAH+AAD//gf/+AAAA/4AAP/+B//4AAAD/AAA//4D//wAAAP8AAD//gP//AAAB/wAAP/+A//+AAAH+AAA//4B//4AAA/4AAD//gH//wAAH/AAAP/+AP//AAAf8AAA//4A//+AAD/wAAD//gD//8AAf+AAAP/+AH//4AD/4AAA//4Af//wAf/AAAD//gA///gH/8AAAP/+AD//////gAAA//4AH/////+AAAD//gAf/////wAAAP/+AA//////AAAA//4AD/////4AAAD//gAH/////AAAAP/+AAf////8AAAD//4AA/////gAAA///gAB////8AAAf///AAH////gAAD///8AAP///+AAAP///wAAf///wAAAf///AAA///+AAAB///+AAB///gAAAH///4AAD//8AAAAAAAAAAAD//AAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//8AAAAAAAAAAB///+AAAAAAAAAAf///+AAAAAAAAAP////+AAAAAAAAD/////+AAAAAAAAf/////8AAAAAAAH//////8AAAAAAA///////4AAAAAAP///////wAAAAAB////////gAAAAAP///////+AAAAAB////////8AAAAAP////////4AAAAB/////////gAAAAP/////////AAAAB/////////8AAAAP///8Af///wAAAB///4AAD///gAAAP//8AAAB//+AAAB///AAAAB//4AAAH//wAAAAD//wAAA//8AAAAAD//AAAH//gAAAAAH/8AAA//4AAAAAAP/wAAD//AGAAAAA//AAAf/4B4AAAAB/8AAD/+APwAAAAH/wAAP/wD/AAAAAf/AAB/+AP+AAAAA/8AAP/wA/8AAAAD/gAA/+AD/wAAAAP+AAH/4AP/gAAAA/4AAf/AA//AAAAH/gAD/4AD/+AAAAf8AAf/AAP/8AAAB/wAB/4AAf/8AAAP/AAP/AAB//8AAB/4AA/8AAH//8AAf/gAH/gAAP///gf/8AAf8AAA///////wAD/gAAD//////+AAP+AAAH//////4AB/wAAAf//////AAH+AAAA//////4AA/4AAAB//////AAA/AAAAH/////8AAA4AAAAP/////gAAAAAAAAf////8AAAAAAAAA/////gAAAAAAAAB////8AAAAAAAAAD////AAAAAAAAAAH///4AAAAAAAAAAH//+AAAAAAAAAAAH//gAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///8AAAAAAAAAAH///4AAAAAAAAAAP///gAAAAAAAAAA///+AAAAAAAAAAD///8AAAAAAAAAAP///gAAAAAAAAAA///wAAAAAAAAAAB//8AAAAAAAAGAAH//AAAAAAAAB8AAf/8AAAAAAAAPwAB//wAAAAAAAD/gAH//AAAAAAAA/+AAf/8AAAAAAAP/8AB//wAAAAAAD//gAH//AAAAAAA//4AAf/8AAAAAAP/+AAB//wAAAAAD//gAAH//AAAAAAf/8AAAf/8AAAAAH//AAAB//wAAAAB//wAAAH//AAAAAf/8AAAAf/8AAAAH//AAAAB//wAAAB//wAAAAH//AAAAf/8AAAAAf/8AAAD//AAAAAB//wAAA//4AAAAAH//AAAP/+AAAAAAf/8AAD//gAAAAAB//wAA//4AAAAAAH//AAP/+AAAAAAAf/8AD//gAAAAAAB//wA//4AAAAAAAH//AH/+AAAAAAAAf/8B//wAAAAAAAB//wf/8AAAAAAAAH//H//AAAAAAAAAf/9//wAAAAAAAAB////8AAAAAAAAAH////AAAAAAAAAAf///wAAAAAAAAAB///8AAAAAAAAAAH///gAAAAAAAAAAf//4AAAAAAAAAAB//+AAAAAAAAAAAH//gAAAAAAAAAAAf/4AAAAAAAAAAAB/+AAAAAAAAAAAAH/gAAAAAAAAAAAAf4AAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAA//gAAAAAAAAAAAH//gAAAAAAAAAAA///AAAAAACAAAAP//+AAAAAD/wAAB///8AAAAA//wAAP///4AAAAH//wAA////wAAAA///gAH////gAAAH///AA/////AAAA///+AH////8AAAH///8A/////4AAA////4D/////gAAH////wf/////AAA/////D/////8AAH////+f/////4AAf////9//v///gAD///////AA//+AAf//////wAA//8AB//////+AAA//wAP//////wAAB//AA/+A///+AAAD/8AH/wA///wAAAH/4Af8AB///AAAAP/gB/wAB//+AAAA/+AP+AAD//4AAAB/4A/4AAP//wAAAH/gD/gAAf//AAAAP+AP+AAA//+AAAA/4A/4AAB//8AAAD/gD/gAAH//wAAAP+AP+AAAP//gAAA/4A/8AAAf//AAAD/gD/wAAB//8AAAP+AP/wAAf//4AAA/4A//gAH///wAAH/AD//gB////gAAf8AH////////AAD/wAf///////+AAf+AB/////3//+AH/4AD////+P//+B//AAP////w//////8AA////+B//////gAB////wH/////+AAD///+AP/////wAAP///wAf////+AAAf//+AB/////wAAA///wAD/////AAAB//+AAH////4AAAD//gAAP////AAAAH/8AAA////4AAAAD/AAAB////AAAAAAAAAAD///4AAAAAAAAAAD//+AAAAAAAAAAAH//wAAAAAAAAAAAP/8AAAAAAAAAAAAP/AAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAA//+AAAAAAAAAAAP//8AAAAAAAAAAD///8AAAAAAAAAAf///4AAAAAAAAAH////wAAAAAAAAA/////gAAAAAAAAH/////AAAAAAAAA/////+AAAAYAAAH/////8AAAD4AAA//////wAAAfwAAD//////gAAB/gAAf//////AAAP+AAD//////8AAB/wAAP//////4AAH/AAB///////gAA/4AAH/+Af//+AAH/gAA//AAH//8AAf8AAD/wAAD//wAD/wAAf+AAAD//AAf+AAB/wAAAH/+AD/4AAH/AAAAP/4Af/AAA/8AAAAf/gB/4AAD/gAAAA/+AP/gAAP+AAAAB/4B/8AAA/4AAAAD/gP/wAAH/gAAAAP+B/+AAAf/AAAAAf4P/4AAB/8AAAAB+B//AAAH/wAAAADgP/4AAAf/gAAAAMB//gAAB/+AAAAAAP/8AAAH/8AAAAAD//gAAAf/4AAAAAf/+AAAB//wAAAAH//wAAAD//wAAAB//+AAAAP//wAAAf//wAAAA///4AAP//+AAAAB////Af///4AAAAH/////////AAAAAf////////4AAAAA/////////AAAAAD////////4AAAAAH////////AAAAAAP///////4AAAAAA////////AAAAAAB///////4AAAAAAD//////+AAAAAAAH//////wAAAAAAAP/////+AAAAAAAAP/////gAAAAAAAAf////4AAAAAAAAAf///+AAAAAAAAAAP///AAAAAAAAAAAH//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAD/AAAAAAAA/8AAAf+AAAAAAAH/4AAD/8AAAAAAA//wAAf/4AAAAAAH//gAD//wAAAAAA//+AAf//AAAAAAD//4AB//8AAAAAAf//gAP//wAAAAAB//+AA///AAAAAAH//4AD//8AAAAAAf//gAP//wAAAAAB//+AA///AAAAAAH//4AD//8AAAAAAf//AAP//gAAAAAB//8AA//+AAAAAAD//gAB//wAAAAAAH/8AAD/+AAAAAAAf/gAAP/wAAAAAAAf8AAAP+AAAAAAAAfAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'), + 46, + atob("HR9FLTkxQDdDOkNDHQ=="), + 88|65536 + ); +}; + +{ // must be inside our own scope here so that when we are unloaded everything disappears + // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global + +let drawStatusTimeout; + +let drawStatus = function(){ // battery and 24h line clock, remove if ou want to display wigets instead + +g.clearRect(0,22,175,22); +g.setColor(g.theme.fg); // draw battery +g.drawLine(0,2,E.getBattery()*1.75,2); + // draw line for 24 h clock + var x = g.getWidth() / 2; + var y = g.getHeight() / 2; + var ix; + var shade; + var w ; + var date = new Date(); + for ( ix = 0; ix < 176; ix=ix+4){ + shade = 2*Math.PI * ((date.getHours()-6)/24); + shade = Math.sin(2*Math.PI* ix/176 + shade ); + shade = shade * 0.5 + 0.5; + shade = 1- shade ; +g.setColor(shade,shade,shade); +g.drawLine(ix,18, ix+3,18); + } +g.setColor(g.theme.fg); // draw dots at noon / midnight +ix = x-(((date.getHours())%12)/24)*176; +g.drawLine(ix,16,ix+2,18); +g.drawLine(ix+2,18,ix, 20); +g.drawLine(ix,20,ix-2,18); +g.drawLine(ix-2,18,ix,16); + +ix = ix + 176/2; +g.drawLine(ix,16,ix+2,18); +g.drawLine(ix+2,18,ix, 20); +g.drawLine(ix,20,ix-2,18); +g.drawLine(ix-2,18,ix,16); + +// queue next drawStatus + if (drawStatusTimeout) clearTimeout(drawStatusTimeout); + drawStatusTimeout = setTimeout(function() { + drawStatusTimeout = undefined; + drawStatus(); + //draw(); + //drawWeek(); + }, 30*60000 - (Date.now() % 30*60000)); + +};//------------------<< status + + + +let drawWeekTimeout; + +let drawWeek = function() { + // date and day of week, moonphase, next quater moon + var date = new Date(); + var weekday = Math.abs(date.getDay() -1 % 7); + var dateStr = date.getDate() ; + + g.reset().clearRect(0,175-36,175,175-36); + g.setColor(g.theme.fg); + g.fillRect(0, 175-15, 175, 175); + var pos; + var d; + for ( d=0; d< 7; d++){ + pos = d * 25; + if (d < 5 ){ + g.setColor(g.theme.bg); + g.fillRect(pos, 175-15, pos+22, 175); + }else{ g.setColor(g.blendColor(g.theme.bg,g.theme.fg,0.25)); + g.fillRect(pos, 175-15, pos+22, 175); + } + + } +g.setColor(g.theme.fg); +g.setFontAlign(0, 0).setFont("InknutAntiqua24", 1).drawString(dateStr, weekday*(176/7)+11, g.getHeight() - 15); + +var mphaseq=-1; // moonphase 0-3 +var qday = -1; // day in week quater moon +var moonssince; // full moons since May 5th 2023 +var lundaymo; // lunation day monday +var tms = date.getTime();// +var weekdayms = weekday * 86400000 ;//seconds since monday +var startd = tms - weekdayms; // monday +var perc;// percent of cycle +tms = startd - 1683308000000 ;//may5th 1734h 2023; +moonssince = tms /2551442823.5;//div ms in a lunar month +perc = moonssince - Math.floor(moonssince); +lundaymo = perc * 29.530588235; +mphaseq =Math.round((lundaymo)/ 7.38264705875); + +qday = Math.round( 7.38264705875 - (lundaymo- (mphaseq* 7.38264705875))) % 7; // next quater phase day +mphaseq = (mphaseq+1) % 4; // set to next quater phase + + +g.setColor(0,0,0); // black moon bg +var yoffset = (qday == weekday )*24; +g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(48), qday*(176/7)+11, g.getHeight() - 22- yoffset); +g.setColor(1,1,1); // moonshape + //g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(65+mphaseq*26/4), qday*(176/7)+11, g.getHeight() - 26- yoffset); // next moon or : +g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(65+perc*26), qday*(176/7)+11, g.getHeight() - 22- yoffset); + +// queue next drawWeek + if (drawWeekTimeout) clearTimeout(drawWeekTimeout); + drawWeekTimeout = setTimeout(function() { + drawWeekTimeout = undefined; + draw(); + drawWeek(); + }, 180*60000 - (Date.now() % 180*60000)); + +};//-------------------<< week + +let drawTimeout; + +// draw clock +let draw = function() { + var x = g.getWidth() / 2; + var y = g.getHeight() / 2; + var xoffset =0; + var minute; + var hour; + var hour_old; + var date; + var digit1; + var digit2; + + g.reset().clearRect(0,25,175,175-36); // clear area + + date = new Date(); + hour_old = hour; + hour = date.getHours(); // hour + if (hour_old != hour){ // only draw if hour has changed + if (hour > 12) { + hour = hour % 12; + } + digit2 = hour % 10; + digit1 = hour - digit2; + if (digit1 > 0 ){ // draw hours, one or two digits + xoffset = -10; + g.setColor(g.theme.fg); + g.setFontAlign(1, 0).setFont("InknutAntiqua66",1).drawString(hour, x+xoffset, y); + } + else { + xoffset = -15; + g.setColor(g.theme.fg); + g.setFontAlign(1, 0).setFont("InknutAntiqua88",1).drawString(hour, x+xoffset, y); + } + } + minute = date.getMinutes(); // minutes + digit2 = minute % 10; + digit1 = Math.floor(minute / 10); + minute = digit1.toString() + digit2.toString(); + + g.setColor(g.blendColor(g.theme.bg,g.theme.fg,0.5)); + g.setFontAlign(-1, 0).setFont("InknutAntiqua66",1).drawString(minute, x+xoffset , y); + +// queue next draw + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); + +};//-----------------------<< clock + + +// Show launcher when middle button pressed +Bangle.setUI({ + mode : "clock", + remove : function() { + // Called to unload all of the clock app + if (drawStatusTimeout) clearTimeout(drawStatusTimeout); + drawStatusTimeout = undefined; + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + if (drawWeekTimeout) clearTimeout(drawWeekTimeout); + drawWeekTimeout = undefined; + delete Graphics.prototype.setFontmoonphases; + delete Graphics.prototype.setFontInknutAntiqua24; + delete Graphics.prototype.setFontInknutAntiqua66d; + delete Graphics.prototype.setFontInknutAntiqua88; + + + }}); +//Load widgets +//Bangle.loadWidgets(); +g.reset().clearRect(0,0,g.getWidth(),g.getHeight()); +draw(); +drawWeek(); +drawStatus(); // remove if ou want wigets to draw instead +// +//setTimeout(Bangle.drawWidgets,0); +} From 7fdabba1cb3a2957b83d7cbfe980d3a735599c9f Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 19:36:47 +0200 Subject: [PATCH 029/118] Add files via upload --- apps/polymath/app.js | Bin 0 -> 383 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/polymath/app.js diff --git a/apps/polymath/app.js b/apps/polymath/app.js new file mode 100644 index 0000000000000000000000000000000000000000..6aebe036ff27a1fd033e651b52616b0036409b30 GIT binary patch literal 383 zcmV-_0f7FAP)RtdYiqToQ-ruop6LpiC5K zQ(B7y<71<&cdu;UcXK1If`OBI%Fgr|5?ak0k7@53uw3XooZBlWsI5j8K(3CJ1tN0Z z9T_i7$dvnaSVW2h*2;{8F5lfCRc?(sGLlv-!c5?(47rYp>&(ky${~4!nIQ{npd1=> zguxi|W)~yV4?MqimD?*D5 zHx7{hXpo%!l)l$h6w?~(vbPzY8*ap$+PL8*x)=k!SsSRDp|#N&o@QNhN9lqie~k9B dFI3!)& Date: Tue, 2 May 2023 19:41:14 +0200 Subject: [PATCH 030/118] Create app-icon.js --- apps/polymath/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/polymath/app-icon.js diff --git a/apps/polymath/app-icon.js b/apps/polymath/app-icon.js new file mode 100644 index 000000000..a8798a5be --- /dev/null +++ b/apps/polymath/app-icon.js @@ -0,0 +1 @@ +atob("MDAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAAAAAAAAAAAAP/////wAAAAAADwAAAAAAAAAAAAAAAAAP/////wAAAAAADwAAAAAA/wAAAAAAAAD//////wAAD/AA/wAAD/AA//AAAAAAAAD/AAAADwAAAA//AAAAAAAAAA8AAAAAAAD/AAAAAAAAAA//AAAAAAAAAA/wAAAAAAD///AAAAAAAAAAAAAPAAAAAA/wAAAAAAD////wAAAA//AAAAAA/wAAAPAAAAAAAAD/////8AAA//AAAAAA//AAAPAAAAAAAAAP/////wAAD/AA8AAA//AAD/AAAAAAAAAAD////wAAAA//AAAAAA8AAA8AAAAAAAAAAA////AAAAAPAAAAAA//AAAAAAAAAAAAAAD///AAAAAPAAAAAA//AAAAAAAAAAAAAAD///AAAAAA/wAAAAAAAAAAAAAAAAAAAAD//wAAAAAA/wAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAP//8AAAAA/wAAAAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAP/wAAAAAAAAAADwAAAAAAAAAAAAAAAAAADwAAAAAAAAAADwAAAAAAAAAAAAAAAAAA8AAAAAAAAAAADwAAAAAAAAAAAAAAAA8P/wDwAAAAAAAAAAAAAAAADwAAAPAAAA8AAADwAAAAAAAAAAAAD/AA//AA//AAAA8AAADwAAAAAAAAAAAAD/AA//AA//AAAA8AAADwAAAAAAAAAAAAD/AA//AA//") From 8f85b9e58a4da47a537ec9284646dde75fc39f94 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 19:47:07 +0200 Subject: [PATCH 031/118] Create metadata.json --- apps/polymath/metadata.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 apps/polymath/metadata.json diff --git a/apps/polymath/metadata.json b/apps/polymath/metadata.json new file mode 100644 index 000000000..5c5fb16f4 --- /dev/null +++ b/apps/polymath/metadata.json @@ -0,0 +1,12 @@ +{ "id": "polymath", + "name": "A Polymaths Clock", + "shortName":"Polymath", + "icon": "app.png", + "version":"0.01", + "description": "This is a graphical clock based on Anton Clock with date, day and moon phase. Beta", + "tags": "clock", + "storage": [ + {"name":"timer.app.js","url":"app.js"}, + {"name":"timer.img","url":"app-icon.js","evaluate":true} + ] +} From 355d1ab8f9815c91804308cb4534d5ab11a73a50 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Tue, 2 May 2023 13:01:44 -0500 Subject: [PATCH 032/118] Create app.js --- apps/shadowclk/app.js | 63 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 apps/shadowclk/app.js diff --git a/apps/shadowclk/app.js b/apps/shadowclk/app.js new file mode 100644 index 000000000..c18363f72 --- /dev/null +++ b/apps/shadowclk/app.js @@ -0,0 +1,63 @@ +// Clock with large colored digits using the "Londrina" font and a slightly larger "Londrina Shadow" font on top + +Graphics.prototype.setFontLondrinaSolid = function() { + // Actual height 59 (64 - 6) + return this.setFontCustom( + E.toString(require('heatshrink').decompress(atob('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'))), + 46, + atob("DyEqHigoJikpJygqEQ=="), + 81|65536 + ); +}; + +Graphics.prototype.setFontLondrinaShadow = function() { + // Actual height 63 (67 - 5) + return this.setFontCustom( + E.toString(require('heatshrink').decompress(atob('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'))), + 46, + atob("DyEqHigoJikpJygqEQ=="), + 81|65536 + ); +}; + +(function() { + let drawTimeout; + + // Actually draw the watch face + function draw() { + const x = g.getWidth() / 2; + const y = g.getHeight() / 2; + g.reset().clearRect(Bangle.appRect); + const date = new Date(); + var hour = String(date.getHours()).padStart(2, '0'); + if (hour[0] === '0') hour = hour[1]; + var minutes = String(date.getMinutes()).padStart(2, '0'); + const timeStr = hour + ':' + minutes; + + g.setFontAlign(0, 0).setFont("LondrinaSolid").setColor(0, 1, 1).drawString(timeStr, x - 1, y); + g.reset().setFontAlign(0, 0).setFont("LondrinaShadow").drawString(timeStr, x - 1, y); + + const locale = require("locale"); + const dateStr = locale.date(date, 0).toUpperCase() + "\n" + + locale.dow(date, 0).toUpperCase(); + g.setFontAlign(0, 0).setFont("6x8", 2).drawString(dateStr, x, y + 48); + + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(() => { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); + } + + Bangle.setUI({ + mode: "clock", + remove: function() { + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + } + }); + + Bangle.loadWidgets(); + draw(); + setTimeout(Bangle.drawWidgets, 0); +})(); From e8f1bf638ce6e2feec73cf1531b86a392974760d Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Tue, 2 May 2023 13:02:46 -0500 Subject: [PATCH 033/118] Add files via upload --- apps/shadowclk/app.png | Bin 0 -> 8844 bytes apps/shadowclk/screenshot.png | Bin 0 -> 2676 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/shadowclk/app.png create mode 100644 apps/shadowclk/screenshot.png diff --git a/apps/shadowclk/app.png b/apps/shadowclk/app.png new file mode 100644 index 0000000000000000000000000000000000000000..9d02ed5b4bbb2e4c5002d1b3b2c10c84ae0b9866 GIT binary patch literal 8844 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 ayYRInTDGC?DC6sm1l&%ab*gm0XZ!=*Lh}az literal 0 HcmV?d00001 From 18e6df533f884bb0da047bbb7469c93f566b9376 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Tue, 2 May 2023 13:04:44 -0500 Subject: [PATCH 034/118] Create ChangeLog --- apps/shadowclk/ChangeLog | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/shadowclk/ChangeLog diff --git a/apps/shadowclk/ChangeLog b/apps/shadowclk/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/shadowclk/ChangeLog @@ -0,0 +1 @@ +0.01: New App! From 5790cfc58de76a3b853c7f1d83fc6a7545ea69f0 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Tue, 2 May 2023 13:06:27 -0500 Subject: [PATCH 035/118] Create app-icon.js --- apps/shadowclk/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/shadowclk/app-icon.js diff --git a/apps/shadowclk/app-icon.js b/apps/shadowclk/app-icon.js new file mode 100644 index 000000000..3e3eee97f --- /dev/null +++ b/apps/shadowclk/app-icon.js @@ -0,0 +1 @@ +require("heatshrink").decompress(atob("mEwhHXAH4A/AH4A/AH4A/AH4A/AH4A/AFGsAAQOUA4OBDBYfHo8jAAOBByOssgICkdkF6AWEF5IOHxAHDAAVALx4VEF5AOHA4oAD0ovNoEjo6BCF5AOHF4ccp9dAoVdFxh2CioUCa44OIwIFCirwBjgFBqyNPqxJCEAOIKwOIBxYJChwfBwIABJQ7dHnIkCEAsVBxovDdiMcVYIgHFQgOJR4WIxBdMCoccshUCkdkRYJ6DBxIvDAAlkF5wWLBxQKJOAIvTroOOBQkcmU5aoYAKhwACjiqDqwOOTQQqDGwQvMAAawCcoOsAAQOL642DBAI0EAB1AC4QfBJIU5BxQ2DAAp5FF6ZJFF4xgFAAMOOwyPKjkcCgWsAoMyBxQAB1k5BAMcZAQuPDIS6EYBAIRAHKHCAIhPLAoWswIMEL6OBDIgYGHA4qCCwIKBDIgvPDggnIAw7lBF4J4KR5gVJKgZDDIgQCDMITvXXA47EHxD2aFQhOCBAY8DRiiWLD4aEBMYzuCLzgvEEQK4BFAQCDB4TACF7QA/AH4A/AH4A/AAQA==")) From 49ec9476f1fd10bc91c81786490b050b9527733d Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 20:08:29 +0200 Subject: [PATCH 036/118] Update metadata.json --- apps/polymath/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/polymath/metadata.json b/apps/polymath/metadata.json index 5c5fb16f4..73dd4a36c 100644 --- a/apps/polymath/metadata.json +++ b/apps/polymath/metadata.json @@ -6,7 +6,7 @@ "description": "This is a graphical clock based on Anton Clock with date, day and moon phase. Beta", "tags": "clock", "storage": [ - {"name":"timer.app.js","url":"app.js"}, - {"name":"timer.img","url":"app-icon.js","evaluate":true} + {"name":"polymath.app.js","url":"app.js"}, + {"name":"polymath.img","url":"app-icon.js","evaluate":true} ] } From c2aa2f39080318c68ff873639dd77dfbf38420fb Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Tue, 2 May 2023 13:09:37 -0500 Subject: [PATCH 037/118] Create metadata.json --- apps/shadowclk/metadata.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 apps/shadowclk/metadata.json diff --git a/apps/shadowclk/metadata.json b/apps/shadowclk/metadata.json new file mode 100644 index 000000000..3813c8998 --- /dev/null +++ b/apps/shadowclk/metadata.json @@ -0,0 +1,16 @@ +{ + "id": "shadowclk", + "name": "Shadow Clock", + "version": "0.01", + "description": "A simple clock using the Londrina font with color and a shadowed outline. Based on the Anton Clock. + "icon": "app.png", + "screenshots": [{"url":"screenshot.png"}], + "type": "clock", + "tags": "clock", + "supports": ["BANGLEJS","BANGLEJS2"], + "allow_emulator": true, + "storage": [ + {"name":"shadowclk.app.js","url":"app.js"}, + {"name":"shadowclk.img","url":"app-icon.js","evaluate":true} + ] +} From cba2e11dcc1290fa58a4d2c88d264994180b35dc Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Tue, 2 May 2023 13:25:35 -0500 Subject: [PATCH 038/118] Update metadata.json --- apps/shadowclk/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/shadowclk/metadata.json b/apps/shadowclk/metadata.json index 3813c8998..db9382681 100644 --- a/apps/shadowclk/metadata.json +++ b/apps/shadowclk/metadata.json @@ -2,7 +2,7 @@ "id": "shadowclk", "name": "Shadow Clock", "version": "0.01", - "description": "A simple clock using the Londrina font with color and a shadowed outline. Based on the Anton Clock. + "description": "A simple clock using the Londrina font with color and a shadowed outline. Based on the Anton Clock.", "icon": "app.png", "screenshots": [{"url":"screenshot.png"}], "type": "clock", From 4d20b495aa44fc7c5ec73d6ca11f094c78e97169 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 20:32:31 +0200 Subject: [PATCH 039/118] Add files via upload --- apps/polymath/app.png | Bin 0 -> 383 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/polymath/app.png diff --git a/apps/polymath/app.png b/apps/polymath/app.png new file mode 100644 index 0000000000000000000000000000000000000000..6aebe036ff27a1fd033e651b52616b0036409b30 GIT binary patch literal 383 zcmV-_0f7FAP)RtdYiqToQ-ruop6LpiC5K zQ(B7y<71<&cdu;UcXK1If`OBI%Fgr|5?ak0k7@53uw3XooZBlWsI5j8K(3CJ1tN0Z z9T_i7$dvnaSVW2h*2;{8F5lfCRc?(sGLlv-!c5?(47rYp>&(ky${~4!nIQ{npd1=> zguxi|W)~yV4?MqimD?*D5 zHx7{hXpo%!l)l$h6w?~(vbPzY8*ap$+PL8*x)=k!SsSRDp|#N&o@QNhN9lqie~k9B dFI3!)& Date: Tue, 2 May 2023 14:37:21 -0400 Subject: [PATCH 040/118] rearrange bitmap code to save memory and preallocate fonts --- apps/nesclock/ChangeLog | 1 + apps/nesclock/app.js | 490 +++++++++++++++++++----------------- apps/nesclock/metadata.json | 2 +- 3 files changed, 258 insertions(+), 235 deletions(-) diff --git a/apps/nesclock/ChangeLog b/apps/nesclock/ChangeLog index 28d9c03ba..58bcd4648 100644 --- a/apps/nesclock/ChangeLog +++ b/apps/nesclock/ChangeLog @@ -1,3 +1,4 @@ 0.01: First release of clock with faces for mario1-3, kirby, and zelda 0.02: Fix issue witih plumbers font where some numbers were cut off. 0.03: Fix issue with smb3 font on 24hr time. Better center time. +0.04: Rearrange bitmap code to save memory. diff --git a/apps/nesclock/app.js b/apps/nesclock/app.js index 81e9b32b5..8ef84f171 100644 --- a/apps/nesclock/app.js +++ b/apps/nesclock/app.js @@ -1,244 +1,266 @@ -Graphics.prototype.setFontSuperMario256 = function() { - // Actual height 26 (25 - 0) - return this.setFontCustom( - E.toString(require('heatshrink').decompress(atob('AFMf4EAg//4EB//++F//+8j//54RBiIRBDIoCBg+ABIl8AQMeGBEEAQMBCwV48ATBnwgBx+4gPj/0AHQOB///8ACBwE/+fghl4/AZC8BUB/ACB/wCB/+DAoMAKwOAmPjGAIZChxIBgODHwUgAQM4HoM/gED957B/IWB/4JBv/H4E//Pwj5KBh4zB4YCB+CRCj/P/kD/P/DgWAh/PEwPBS4MgGwQAGgUD4EDwP4gZ0Bgf4n/D/kH+YmB/Z+BgYCG37PBj/gv8HvEfgP+h8An8DWYYAGbYX8AQLwBh89+EH/EOgf8ZQPDwFgmF4jEMh5QBgPhwHAnlgnkHzAzBC4T+CwYtBmabBh/OUoPBWQPAPYMwhB3CIod8AQLHBAAisBgEffIMPwEcg4kBwbWCbQUYcIIMBFwPwgFwj+A/CIBIAJoBFIdwAQM8AQMGAQMBRhAADFQUBSgQdCXAKqB8BQBFgQMCjgZEWxTpBAoJSBAAQZFGYwMMcpIAGY4I2BDQQ2CE4QAGQAUHNAMHJoMHCwMH/gCBX4ICD/wCDgYCBgICBgF+bggnCIQgZC//AgbFBZAImBAQPgn///kP8H/gf8v+ABgn4DgJDBDIUPXgMBJ4KHBn8AvkPAgOD+AjB/hfBn4mBBgIcBA4IzCAwJDBI4IMG/AmBGILSCTAQ9BegIMDjEAwEPwF4GYSBBj4mBh4HB44mB8JnCGZAGBQIPvLQP7+C0BGYM+GYQmBN4JACAAlAfQM8gZAB4IcB+H+gf4z/A/3zGYN8GYSBBOgV/IAMfIAIJCgE9UoMEn42BAAp9CLwJCBCoICB4ACBBgLICM4KJBMYKoKWomAcYPgNoP4gEHOAt8H4/+g4zB86RB/v4EwN+EwPPwH/+fgn38BgO/n0D9/fwH7GYM+/4MCRwPnIAP4KAMgn5DBg4CBG4YZBAQP4OIJrBAQPgTYP4TYJIB8/PwPx+/gvl/BgOfBgX/wIwCvEPFogvCA4X+AQM/wCbBBILcBBg1wBgLpCLQJDCVAKBCVAa1FEwKkBgSjGAAUBFwN8DIJnGEAOBGAV7WQMe/8+BgPfBgYZCHoIjB+Y3BgF/cAJsDAAN4hCbBgeAWIPwh/8bIWfEwLmBv35+Efnn4GYP+XAQZBKAIJBMoICCn4CBAAfwvBkBnx4Bh+AgeBIYIANRQUBwEOgYwB4HggIsCnAYIkACBhgCBg7WBgJzC/jgEjwJBg+8QYPHBIPwBIN4ngPBDoMPDoI7BBIKJBwF4HwMegE8h5lBMQITBHgNwIw0NFgMDsAGB7ACBmwMEg4MBgIMCuxmHMYMIg4hBa4IzBvhSBj5ABBIJCBvBXGIYJkCWoJxEvJxBhyfBgaICvwCBNoIJBZARjChBHHBwS7CIAIbB8Pxgfw/vg/F/vE+n/eh//BgP/DQM/XATcC/DcIdoInBJQM/DQMP+f4g/sj8B4/54H3/94vf/70d//7x98n3h78P3F34fuj4MBwe//vA///uAJBEwP/GAPgh0An0DwEH+atB/5RBMoJNIDIIdBAQXAAQPwNwICCXYIvBgH/nxgBx7IB8YMFDgJDBEwIGBO4KPCEYIGBRgTJCdIN/BgKHB/gVB/4mBDIICBBgmfz8D8/nBgP9+AzCKYP/NoIZBEwUH84zBgP+GYMeIYRtCK4RQEDIPgj+DGYPgIAIuB4H8AgM/gIMB4F+A4WA/wUBn+HM4sAM4ZNJM43wv8D/k/BgOPBgYZCJoWABIPgYoQJBNQRdBbYaxDTZYMF/wMC3wMB5+/gfz950B/YMBgAMBwEfFwMDExoMG57PB+fgEIJTBn4nBh4vBgf74EAY4QLBAAkDDIMPBoLPEAwLpFn/nZ4SbB+DHB/oWBn9//BNB/0D+6bBBgUeBgMDz4tDewJNBZ4P+WoWBAQIrBV4JnBCwIDBwC1DLYeADIP4dIQZDExIWBGgIABZ55KBGwJ4BDgMDDgUGOgf8AgLPD4E/A4MfdIMHZ56OCEIRkB/kBYQYmBHAPwZAj2PhhaCOAQJBVAXwg/5GAV/4Eeh/wgcBM4U4AQMMGYbCMBgP8BgS+BOgLgBKQLJDv4hCBhF+AQMHVAIAGjgZCPgS1Bh5NBh5aBPAOAAQPgAQK9BAQKBBF4ICCn4CBBgKbBbARWBHAIJBAwI8BQAICBB4KUCF4QZBGwKoFWoSlC4EBGgUHM4UeLwQqBagU/cILPLewakBZ4ZhDV4IZLBgl/HgQACBAIcBEwgWB4B3B/AZCM4Xgn/vEwPhEwP4v+A/8fBgIWBDgP+DIZGB4CyCM4I6Bj6OBDoI/DJoxaMUIefFIPnbgP7FIKuFLQPgWIbMCWgYACj4MBIYQWB4ClCXARaCM4ODIAPgv5WBr/A/k/BgMfOgPHOgP4fQP/3/AQIQmBFoJ+E8EA+F4HwMMgJ9CB4Pwj50KQInH+8D/IpBBgOABgPwWoRaCHoQJB/hkB/0egEBgeAGoLwBAQUYHwMOv5+B7/gg/7LQP+/4mB77CN/1/BgPfBgPzBgIJBwF/x+Ag/DGYJ5BgEQAQJcBYoJFBVAL/EBgeBQJwMJ4IMBcoMDd4TeBEwI/BBgQAGEwLIC/gmCbgIzOUQIuDAgN/4DcFg4TBYQSBBDgIMBVYIfCAAQECn5+BGYOAGYLpD8BAB/DpCKgYNBDYMHIAInBgAtBIAYZEb4IVCEoIzEEIMDXYMAAQQACgwCBYQYZDJQJACQIwGBIAI9BQ4JNDAQKHBDoIkBJoQPBIgM/DIIdBLoXARARXCAoP4Cod/AQMfOwS6CTAUwLIdAAIM4gE4j4WBh/gh/nYQalCwBDCHgJrBFoV/IwJxCB4JqCDIN+v4jBHwMBwaJCvgCBhw+DUoUHBwJaBcwiODZIKBDOIJ0CJoYSBn7cBwYMB4E8gPggcAuAmBhACBj/B/kP+AZB/ivBDgL2B74MBEwbPEHIIzDJoIMBv/3BgPxBgP4BgP8IAN+FwJqDCwIADMwMAP4V+IwWAPQZ3BQIMPOwL/DAxYbBGYYJCh4CBgPAGYs+BoQXBNQQADKIYAFgITBgAgCCAQCCngCBgZCBgE4AQMEEBAABCIUwAQMMDYQMyAAhjCBoUORgYDBjACBgRdKABF/DYN/QYN/WoN//7WBAQX+AoWAh/z8ED/C9B/y9BBgf//kBXYPAAwImBBILNBEYLpDg69CvEHCwLZC4DYCEwP8DAIME/P5+E+v18BgPfGYZTB+EfDIImCgF+v4zBj4zBgICBIwV/MgZQDDIP+gP4n/A/0PIAMBIAPAn8DFwPAFwPgA4P4h/g/wEBGYRnDhBACJpJnG/8HGYPDBgP4BggZCCwP4BIJXBYoQJBNQTxCbYSxCTZYMG94MB/fvM4P7BgM+BgPP350BPIP4gIqBgE8ExoMF/jPBEwJTB5+AgfzEQP+f4M/3gMBSYIzBLwX4AwJqBTAIGBEwOAGAKbE/IzB/DCCDwM/v7CB77CBDIX9/7PBBgMHz6bB84tD4EfBALPCwICB8CrBFYKyBM4WAAYJSBv5QBn64BLYIiBYoYZDExIWBCYIABTaAjBGwM/DgKWBAQMBwB0DgAZB4E/Z4f8g4MBwL2OKAIMCEIJkBEwNAEILCEZwIADeyAGB4BwCBIPAQIP8gP+v4wBj/wg+DFYPAvwrBhyGCGYbCMBgS1BFoM/w5SBgJSCZIUfL4KBBBhDWBgKoBAA0HAQR8CWoMDMIJ1BwACB8ACB/ACBXoICBgACCn4CBh4CBBgIiBeoSHBHAIJCn48BQAICBB4KUCF4QZBGwKoGOgQGBDQN/GIInBK4RnBgEgagYTBCQLPLewSkBZ4ZhDV4IZMBgYSBTQk/MgQmECwPwJ4IJBaQaFBh/7EwP4v/A/0f8E/44MBCwIzCwAZCGYPwWQZnBOwIPBgAsBAARNGLRgMBUIPnFIP5FIP+FIIMDLQbJBWITMCWgYACg4MBIYQMBPwJ0CXARaBM4PgOgUfOgMXIAMPBgPHOgPxEAP+n6BB9/wQISYCwB+EI4M8jx2CgF+AgIPB/hDBOhKBE+P9IAN/wAMB8AMB/i1DLQI9CBIU+MgOHWQNA8A1BmACDgwPBgef4EB+/4gP+LQW/4F/+7COz4MB+4MB/gMCz/gj/j8EB+CoBnA4BggCBn5FBVAI8BQwL/DBgl/QJoMJ+AZBcoJdBEwXAEwI/BBgYAFEwLICC4ICBbgIzODYN/Fwd/j/wbgsBDITCBQIIcBBgKrBD4YABnhACPwIzBQoLfCGYP4IAP+dIZUCHIIgBEgICC4AtBIAYZEb4QVBn4wBGYYhBgA1BgEgQgkBXYLCEDIRKBIAaBGTAQ9BWAN/JoQCBQ4IdBEgJNCB4IZBE4LNC4BdB+CICK4QFBDIIVCj4CBg52CTQV8AQMMLIcQAIMOgEOg6EB4f4gf5YQhXB8BDDVYItDTAJxDB4JqD4Efz4jB44JBsCJCj4CBgaTCUocBBwV/QYKyCRwYwBZ4ZxBOgRNE//PbgPgBgPwh8AvEA4EcEQMCAQMH+F/gf8n4ZBV4M/572B+//FIQMBZ4g5BGYl/BgMf/oMB/l/LQImBv8PBgODWAQAMNwMAmACBJwLZCGYN/8f/x/88ALBCIVMAQMTAQMEFZhNBKII+OXAYCBgwWBgIzC54CB+f/75sB+7HBh7SBgJaFhgxRAA04DgkHAQMBf4VgQgYMEGwQZChxYCCwoMGEwoAHA='))), - 32, - atob("DQgHFhMQFwMGBwcLBAsIDw4SExAUEQ8TEA8ICBYKFg4YExAQEQ8PERIJEhARHhIUERQSExUTFhsUEBEGDAkKEw0TEBARDw4REgkSEBEeEhQRFBITFRMWGxQQEREEERYA"), - 26|65536 - ); -}; - -Graphics.prototype.setFontSuperPlumberBrothers = function() { - // Actual height 20 (19 - 0) - return this.setFontCustom( - E.toString(require('heatshrink').decompress(atob('ABcP//v//+/4EBBIXAgH8AgYJLgfegE98AiBgH/+AECBJYYCAAMB/8/n/z+f/3/8nEzIIM/7/x/gZBGwMAn/wn//v4BC54BC4H/wEPwEA+AWBv+/MwIADhwCBH4PwDoMP8AVDNBMHDogABCgQABAgIjBAAX3AQKBCmBQBBwItB/wiBAgIJBgcQEAwEDRYgyCBwyRDEYMfwEB/AIEjwESEQoKHJwKrBVIqnB4CnCAIIACBwKpFQYodCFQRQBBgqQDEQb4BG4Uf/8HFIP4//+h9/wDgDh/vawLbChw2G342CgIXBv6PB+AmBUgLdGU4RKB/P8/+f//5//zwH/n4EBCgMf/j+DCYIADCYW///7fIOfCYQrBToIgBAIIABT4vAHYQnKAAf3BwITDngyCG4PwnATJgPh8EejwECBIsfwPhYIIABewMDSAWAh98gPj8E8j8HwATCg+egF58AERDAXA/E+j8B+fgh5MBGII2CHYITCAwL/Bh/zc4P+MoL5BE4JTDSA/xfgN/x/3DAN/94ECj4dBEQXgDQMDF4N/fQ0AEAIADBwJEBIoIAGh8PCYzaCAgI0BE4gTBAIJMCh67CE44TCE4oTKHYPwEoIEDJ5ZkB+ASBAgSYCJ5P8BQPH/98v47JEYIJICZIyCOQQuCBIJtFYAQxeCgJqBAgrlJDoXzBJDvHDpYTJd5DbRBIJxBDIN/4DHMHZByFFhRUJ5/v/gKBGAMOFgIPB+4DBn5UCF4gsHHIgODKgjqOx//HgQTGBIWAE54dJGI4AEVQIJICYXAh/+BwS+CAAQJCYQfwg//gf/+IhE/ABBh/8XpaNDh5pBGwQCBWQICCgE/DoM/CYMQXAgkIA='))), - 32, - atob("BQQIDAgJCQQFBQgKBAoECQgGCAgJCAgICAgEBAgKCAgNCAgICAgICAgECAgIDAgICAoICAgICAwICAgFCQU="), - 20|65536 - ); -}; - -Graphics.prototype.setFontKirbyClassic = function() { - // Actual height 16 (15 - 0) - return this.setFontCustom( - E.toString(require('heatshrink').decompress(atob('AC0P+cH/OABg88gEfA4kD8ARHoEDkUBz8A/8D/kB+Vgjfwj/gn1AjcggOQgAxGsEenEfxkI4Uf//ijGBx3A8/AgABBKQYBB4EEkECiHB/HAvPAgOAgeAg84g8/g0xwUQoEMsBZGnEAv0D2eD+HBzEgw0QoOImFsjkcgFPgE/wEcoEIkEAiH4DgKHCgInDv+A//w8Ec4EDNwsMgEjwFwCAKFBBwxaBOISaBgEwgEsgEyCYsQgEIgEEgECHoOAj/8g/+gBNCCAgAHGIQZBBAZdCA4NAD4QAGsBECXIc/gH4g/gWIJ6D4F/+F//k8n0cg8Px+H//B//ATwIUBhzcD/8H//H//hQ4LGCnE8EAM+j1/h1/EIPD/vg/nwhDYBXQMeGAOP2fHznj/3w//4IIMevjvEnjUCv8AvvA//8v/+n//CATxBSwMB4H9EYN4v88n+Ojvvh3/w8/wePMYUfcAP8j/+j/nh9zCAPBz/gRwISBuA+Bh0en8PMof/wLVBeIN4KYTeBQ4IBB4e88PcuBnBn4yBCoJpCgfwgf84J4B894vYSCh/8gf4cQUxwEY4DlF4Fj4ExBQ0BwB8BgBaBJANsgEzgEREIUMmEMjEGhgcFgEJTgOAgVAgI7ByEApEAkkAiQQGDowAB4OAsHAjFghlggUwgOYgHYbgTNBhx7BDQgJBIgMEjuCjnBxinCDAIAEfQP/wHAGIVH41n+cjjGRglIwUkv8Tv+YwFIsFgjlggbgCegMAn+Bbgf94F/8C2BgDjBh7gCKIP/8P/+DcBuecnfOj7rCwPvwAVBn+Av/wbQM+j0cg8Pg+H8/D+fA/LRCuAWB/whBh//w+B4fh8H/8E/IYJUDAYNwGgJUBIYXnnBDBnGOgECFAU4Kg+AnPAjjRD/0B//AGQPwvFwjk8v0ev8HL4MPwDNDEIN//hUBIZQpBCAZlBGQScBh/AgYQBnDsBCAX+h4lBVI8fPQP8j8/h0HU4KUBKwIQCGQJKCZAWAgOABwghB+EB/kD/0HAIP/4IQBj/4gEYaIRUCg4JB/4wBIYk/Z4UH/gfBOwWA8PAuHwCAP8h4yBD4JGDXQ874Ef4EH8EBFISUB4F/+BlBnEfjkH58H8///I/CPgLmCKgcP/+HnkD35WB8B2Bj0+gEGCwMB4eD/Ph/nx984uf8nn8h08CAKbEKgoyBZwKMCCAP/CAKaCgF4bg8D4CxBTgPAn/4WwRSCVIIQBJIQSCbgTJDgbRB/+An5DEv56ChkCh+Hw4uBAIKYDvxnBj0ACAJUBEYXgn/wIYN/gCIBjhlDgfDw/h54yD7k/h0eg8EgY5CKgP//n//1AgMggAMDMoRjBg4EBviiCAAUIgEkgETbwQTBAAQA=='))), - 32, - atob("CQcIDgsQDwQHBwkOBQYFBgoHCgkLCgkKCgkDBg4ODgkRCgoKCgkJCQsECQkHDAkKCgoLCAkICgwJCQkHBgc="), - 17|65536 - ); -}; - -Graphics.prototype.setFontKirbyClassicBig = function() { - // Actual height 58 (57 - 0) - return this.setFontCustom( - E.toString(require('heatshrink').decompress(atob('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'))), - 32, - atob("HhgcMiY5NQ4XFx4yExQTFCQZIyEoIyEjIyEKFDIyMiA8JCMjJCAfICYNHx4aKR4jIyMnHR8dIikfHyAXFBc="), - 60|65536 - ); -}; - - -Graphics.prototype.setFontZapf = function() { - // Actual height 56 (55 - 0) - return this.setFontCustom( - E.toString(require('heatshrink').decompress(atob('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'))), - 32, - atob("EhQVLiUwNQsXFx4yEhcSESUlJSUlJSUlJSUUFDIyMh47Ky8pMismLzQaGTInOi4uKy4vJSstKzsnKCgXERc="), - 60|65536 - ); -}; - -Graphics.prototype.setFontNES = function() { - // Actual height 12 (11 - 0) - return this.setFontCustom( - E.toString(require('heatshrink').decompress(atob('ACsPwH/3/7AQOA/AOFg/AvkHA4YFBwFwCAnh5//AAXh50cBBEAgeMplP/9Go98gIeCgfgkMCmce8EYg0Bx8xiERgHzg0ws3bs02sdt2YIBsEbgEwgZVFthTBJooAEkE/4xdBiEAwEWg0/4ANBgNghkD+EMAoIYCKAMQAQP/AogeBBwXwj8BEAQAKgeAnACKCo9wLpcHgfj8ANB/E/4f8sF2gdgm8DBATiBDIkzgcwm//v/3/6VDmBLCg9x+8fsf2ndn237v838c4CIUAgwyBg68B8duBwN3+9/sPgCIV4HYP4nOHzFxw44DgOAjBeB418u/Htk24YCCt/2/8HEYf+n/z/92eQL1Cs/2v8BCISOCAQNhBYIOB8F8g/ATQcDzg+CEAQCCBAU5agS9BvxlBCIlvv/nIILLIgeHnFzw4MHgMM8FAAwbsC4EkTgNGhkgCocCoEkARAOCCgNGDQMkEAM4EwJBFgFggx9B21gsxiBBwngv+H/F/8f/n/3/wICnwSDBYKwBuOGjFhw8YBAUP+CwCboaeMgH4n/j/1wu0DsE2gdwu8HmFgEYwOCsE3g8/4f8h5bCGpQCCsEwCI6NBAQqGCI4YsBI4ljs/2v9nNY4ZBDgVgBAV/CIQABKwhfHI4UAjkB+EfgALCAQIjDR4Q1EaAP+h/jz9w+8HEYkAHwjtBmACFEYzgB/EPwbyBLIoRIwE+CI0D/hlGLIk/LI9hw0YAQV/w/4FgIjIjdh20Pv/H/k/2AjIj1h81/v3398+NYUDw1+u/nfAc3sc3+d/gPgYojSCFIgIDB4UH/wLCTwp9DEYUH+BiCgfgj7dBR4IIBv4jDa4ngUJUHg99+/fTALFC/gICuFwLId8g/gvzuBHoV+BAN8B4UGg9h+0fs/2/dv2/jvk34dwR4QAB//4gOAiEAuBLBAIMHwEYgP/JQQ='))), - 32, - atob("DAwMDAgLDAwFBQYKDAwMBAwMDAwMDAwMDAwMBAoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwFBAU="), - 12|65536 - ); -}; - { // must be inside our own scope here so that when we are unloaded everything disappears - // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global -let drawTimeout; - -let bg_mario3 = { - width : 176, height : 165, bpp : 3, - transparent : 1, - buffer : require("heatshrink").decompress(atob("kmT0mQtMkyVImmSpMkjQCByUNAQNJgwLCwYLCoOkBAMg6QIBEDpBCwEJBYNAggLCgQsCgIsCgAgCgAgCLwIIBgESBAIgdIIXAgJKBsEANYMwgBrBzEANYNMgBrBk0ANYOTgBrCwEDFIIgdAwOAiAdBgEIDoMAgkYAYMChgDBgMGboWDAYVBwADBkHAAYIgdIIKkeYsZB/yV0gFAm3aRgMbtqtBhu2wEIg3bFgMDtuggUB23QgMA7dogGAtu0EDqDBgGQKYMApBTBBQMSAYMShIDBhMEbwMEwVAeQNBkDyBkGQCAIgdYv7FCIIQUCKAIgCCgRxBEAY1CNAIgCGoRoBIIQgcIIKRBAHpICIP5B/IIThBAALhBAAMQAYUIAYUEAYUCAYUBDwbiDEDxBBpgGBkMmD4WTD4VJCAMEknAD4MSsAfBhMwCAOEzADBoQgeIINJAX4C/AX4C/AX4C/AX4C/AQPtgAABk3EIPU8h//AAUDIPUD//MAgMP/kCIPFOj//n///18/+MIPFI//P//ypP/z/wIPX//n//pB+AAP5IPdOjnP5n//18/+MIPFJgf5n/ypMP/kCIPM8h0EY4UDH24CD9u2gEAk3Ea5XQB4MCthQ6yfASQX/+E5IPOQn/85IEB//AIPPh//zQQPn5/4a5QCux/8IAMkz/5/8EIPJAB5//75B+AAKD88PM/iDB8/P/HEIPGQn+T/4EB//AH2wCCyfA8FPYwPwnJB5yVO7dggECtg+4AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AVWTwEYHe/YgEA7BBD8PgiRB1pEJAYMAHYWT//8IO1CAwcCIPY2EkAECv8DIOucGwkhxKDBwGEQGYCByAGFhK/0AQh4GwJB/IPUnggJFwxB/IP5B8kgGGyBB/IP5B/IP5B/IP5B/IP5B/IP5BVu0AgE2H2GT2A1BII+TwQFBwEEIN+QiQDBgBBHCQdAIN+EAwcJIJVIKQRBsAwlAIJdiINs4IKFJgEAjhBrkIGEpBBLkBCBZFcJAwsEIJsAIP8AgIWGAUVOFQ0AQZ0xIP6EBIPkkIIUHINFIBhRBLgBB/IP5BD4hB/IP4ACghB/IP5B/IP5B/IP5BFIAZB8hICBoBB8wALDkBB7gQLEIP5B9iQLEwEAhxB3kALGgEAhJB/AAJB/AAOEIP8AjBB1gBBJBQxBvBw5ACgZBik9ggEBILMAiRBhkCECVZJBzhIGDE5BBQsRBgpAGEwBB6uBBegQHCp8AoQyKyehkYuH7AFDDYuQILlI/+IpMngEJgENwEAwEGBwMEkcApMmC4dJgAlDiQsFhJBc8fwIIMOhEf+E/8EP/AWC8dIsOchunmHCukA5OJIMw7BAoOOnhBHgnDgOAgUMmHAgOGAoMxkmcII0BQcEP4MAuE4/l+nArCgcBwI7BgHAwMBDoI3BIMsAhxBBgAvBAAMDAQIrCQYJBBgRBBwFAgeAnJBSG4gA7IP5BCyf/AHyDDv4HC4BNCj4HC+AHCg4HC/gHCgIgDMwYgcQYOAIP7FCIYIABn4LC8AHCh4HC/AHCgYHC/w9DEgYgcIP5B/IImSczwkDEDhB/IP5B/II2TAYOABgU/BYXgA4UPA4X4A4UDA4X+HoYkDEDhB/IP5B/IP5B/IP5B/IP5B/IP5BV4AGDAHUkyRA+IP5B/IP5B/IP5B/IP5B/ACA")) -}; + // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global -let bg_mario1 = { - width : 176, height : 165, bpp : 3, - transparent : 1, - buffer : require("heatshrink").decompress(atob("kmSpIC/AX4C/AX4C/AX4C/AX4C/AX4C/ATE8z1P/mf/8n//P/4gU+V/n/+v4gB5IFBBwYmB5P/+fJ8///IjLEAU/IgIpCk5BU+f/MQN5n5BBngCBBweeOIJuB84jNIIIgBz1/IINPIKv/IKGTIIKJBYpqDBz6VBQa5BDYoYFBBwiDDYoIjNMQYjBcAPP/5BULIKkDXIM/+RBG//zIIP/OIIjKPQXkyaVD8mSvIREsJWDyVPJqQCWnn+ZAZcBp8/GouTkkEAoPnOIJQBMQ59CyZ0MAR38YodPboPPk4FBGoZBC+fP8iqB/jIJAoSeFQaxBRdgJBNp//ILi8CHwPJHweT57FGHwd5YtICQoAsrAX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AREggEJIPtAH4OAghB8iQDByFAIPeQAYWAhBGCIPGEIIcJgRB6AYUggACBIPMhIIbDChJB4HIZBDwJB3pAJHyBB3oQJIghB2X4QJGoBB1yDPKJhICrwgMKgRB0AYUgBIkgQIMgF8MAU4WAhLxCggRHkIVG0gTBAoQaCILtC7ciGQNtyL7B23ICg4zDIIeg7aDCkmBIL82IIMJjZBBgmNIIOCCItIAYVAgAJC2HbthBCyBBg7NkwMbtmyoBBBrLyGoRBDBIeG7VEB4bdIAS2yrMtwNZlmW4Gsy1LsARFO4RBFy3bsgPDoBBdguS7dtyXJtu25Nk2wvBCImQDZGEPwtIKQYCYkMtHAI+BAQ1sgQ3FDY0lBIMMBAkCILcrHxBBDyQUDDZEl2mSCIIIDkBBapFbIJYCBpCVCIJOkyVMBYsJILNCHxYCC5DyBFpWApEEBAuBQbRBO4AUB7//4/+t//8f/m//+MGzcB/H/5v//l/83//0/+d//8f/O//+P/ggK/+b/4gS+VJg+QvMkwfInmSoPkj1JkHyh8kBwMHNQM8wfJkkeCIOSh4RBEH4gjgkAEAOCgAgCgAgCwAgCoAgCkEDEAMQgIgBhEAEEUH/xiC/4gC/+eEAP/54gBv/nEALmBEALmBMQTmDEEDF/EH8g+ALByF4BYIFBiQaBj0JDQMPggaBg+CDQOD4IsBoPgFgIgh/+B8jXB4Hya4PgNAMf+BoBh/4NAMH/gsBwf+FgL4BgfJEEPyv4gBvM/EAM8z/5MQNP/ggBk/+EAOT/4gB5P/WwX/EEWAgPAgFAgHggEggFwgEQgE4gEIgEcgEEgEOgECgEHgEBgEDwEAEEHf//H/1v//j/83//x/+b//4//N//8v/m//+n/zv//j/53//x/8EEHySQKkBSQPIcAKSBcAKzBcAIOBcAKzBUgKzBCIKzBCIIg/EEbUBEAOCgAgCgAgCwAgCoAgCkEDEAMQgIgBeoIgig/+MQX/EAX/zwgB//PEAN/84gBcwIgBcwJiCcwYggYv4g/kHwBYOQvALBAoMSDQMehIaBh8EDQMHwQaBwfBFgNB8AsBEEP/wPka4PA+TXB8BoBj/wNAMP/BoBg/8FgOD/wsBfAMD5Igh+V/EAN5n4gBnmf/JiBp/8EAMn/wgByf/EAPJ/62C/4giwEB4EAoEA8EAkEAuEAiEAnEAhEAjkAgkAh0AgUAg8AgMAgeAgAggA==")) -}; + const sm256 = E.toString(require('heatshrink').decompress(atob('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'))); -let bg_mario2 = { - width : 176, height : 165, bpp : 3, - transparent : 1, - buffer : require("heatshrink").decompress(atob("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")) -}; + Graphics.prototype.setFontSuperMario256 = function() { + // Actual height 26 (25 - 0) + return this.setFontCustom( + sm256, + 32, + atob("DQgHFhMQFwMGBwcLBAsIDw4SExAUEQ8TEA8ICBYKFg4YExAQEQ8PERIJEhARHhIUERQSExUTFhsUEBEGDAkKEw0TEBARDw4REgkSEBEeEhQRFBITFRMWGxQQEREEERYA"), + 26 | 65536 + ); + }; -let bg_kirby = { - width : 176, height : 165, bpp : 3, - transparent : 2, - buffer : require("heatshrink").decompress(atob("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")) -}; + const spb = E.toString(require('heatshrink').decompress(atob('ABcP//v//+/4EBBIXAgH8AgYJLgfegE98AiBgH/+AECBJYYCAAMB/8/n/z+f/3/8nEzIIM/7/x/gZBGwMAn/wn//v4BC54BC4H/wEPwEA+AWBv+/MwIADhwCBH4PwDoMP8AVDNBMHDogABCgQABAgIjBAAX3AQKBCmBQBBwItB/wiBAgIJBgcQEAwEDRYgyCBwyRDEYMfwEB/AIEjwESEQoKHJwKrBVIqnB4CnCAIIACBwKpFQYodCFQRQBBgqQDEQb4BG4Uf/8HFIP4//+h9/wDgDh/vawLbChw2G342CgIXBv6PB+AmBUgLdGU4RKB/P8/+f//5//zwH/n4EBCgMf/j+DCYIADCYW///7fIOfCYQrBToIgBAIIABT4vAHYQnKAAf3BwITDngyCG4PwnATJgPh8EejwECBIsfwPhYIIABewMDSAWAh98gPj8E8j8HwATCg+egF58AERDAXA/E+j8B+fgh5MBGII2CHYITCAwL/Bh/zc4P+MoL5BE4JTDSA/xfgN/x/3DAN/94ECj4dBEQXgDQMDF4N/fQ0AEAIADBwJEBIoIAGh8PCYzaCAgI0BE4gTBAIJMCh67CE44TCE4oTKHYPwEoIEDJ5ZkB+ASBAgSYCJ5P8BQPH/98v47JEYIJICZIyCOQQuCBIJtFYAQxeCgJqBAgrlJDoXzBJDvHDpYTJd5DbRBIJxBDIN/4DHMHZByFFhRUJ5/v/gKBGAMOFgIPB+4DBn5UCF4gsHHIgODKgjqOx//HgQTGBIWAE54dJGI4AEVQIJICYXAh/+BwS+CAAQJCYQfwg//gf/+IhE/ABBh/8XpaNDh5pBGwQCBWQICCgE/DoM/CYMQXAgkIA='))); -let bg_zelda = { - width : 176, height : 165, bpp : 8, - transparent : 254, - buffer : require("heatshrink").decompress(atob("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")) -}; - -let settings = Object.assign({ - currentFace : "Mario 3" -}, require("Storage").readJSON("nesclock.json", true) || {}); - -let currentFace = {}; - -if (settings.currentFace == "Mario 3") { - currentFace = {'fontFace': "SuperMario256", - 'dateFontFace': "NES", - 'clockScale': 2, - 'clockOffsetX': 0, - 'clockOffsetY': 0, - 'dateOffsetX': 0, - 'dateOffsetY': 48, - 'clockShadowOffsetX': 5, - 'clockShadowOffsetY': 5, - 'dateShadowOffsetX': 1, - 'dateShadowOffsetY': 1, - 'dateScale': 1, - 'clockColor': "#4299f4", - 'dateColor': "#ffffff", - 'bgColor': "#f5bf66", - 'bgImage': bg_mario3}; -} else if (settings.currentFace == "Mario 2") { - currentFace = {'fontFace': "SuperPlumberBrothers", - 'dateFontFace': "NES", - 'clockScale': 3, - 'clockOffsetX': 0, - 'clockOffsetY': -8, - 'dateOffsetX': 0, - 'dateOffsetY': 54, - 'clockShadowOffsetX': 3, - 'clockShadowOffsetY': 3, - 'dateShadowOffsetX': 1, - 'dateShadowOffsetY': 1, - 'dateScale': 1, - 'clockColor': "#ffffff", - 'dateColor': "#ffffff", - 'bgColor': "#9290ff", - 'bgImage': bg_mario2}; -} else if (settings.currentFace == "Mario 1") { - currentFace = {'fontFace': "SuperPlumberBrothers", - 'dateFontFace': "NES", - 'clockScale': 4, - 'clockOffsetX': 0, - 'clockOffsetY': -8, - 'dateOffsetX': 0, - 'dateOffsetY': 54, - 'clockShadowOffsetX': 3, - 'clockShadowOffsetY': 3, - 'dateShadowOffsetX': 1, - 'dateShadowOffsetY': 1, - 'dateScale': 1, - 'clockColor': "#aa4e00", - 'dateColor': "#ffffff", - 'bgColor': "#9290ff", - 'bgImage': bg_mario1}; -} else if (settings.currentFace == "Kirby") { - currentFace = {'fontFace': "KirbyClassicBig", - 'dateFontFace': "KirbyClassic", - 'clockScale': 1, - 'clockOffsetX': 0, - 'clockOffsetY': 0, - 'dateOffsetX': 0, - 'dateOffsetY': 54, - 'clockShadowOffsetX': 3, - 'clockShadowOffsetY': 3, - 'dateShadowOffsetX': 2, - 'dateShadowOffsetY': 2, - 'dateScale': 1, - 'clockColor': "#ff00ff", - 'dateColor': "#fe6ecc", - 'bgColor': "#ffffff", - 'bgImage': bg_kirby}; -} else if (settings.currentFace == "Zelda") { - currentFace = {'fontFace': "Zapf", - 'dateFontFace': "NES", - 'clockScale': 1, - 'clockOffsetX': 0, - 'clockOffsetY': -10, - 'dateOffsetX': 0, - 'dateOffsetY': 40, - 'clockShadowOffsetX': 3, - 'clockShadowOffsetY': 3, - 'dateShadowOffsetX': 2, - 'dateShadowOffsetY': 2, - 'dateScale': 1, - 'clockColor': "#994e00", - 'dateColor': "#0c9300", - 'bgColor': "#feccc5", - 'bgImage': bg_zelda}; -} + Graphics.prototype.setFontSuperPlumberBrothers = function() { + // Actual height 20 (19 - 0) + return this.setFontCustom( + spb, + 32, + atob("BQQIDAgJCQQFBQgKBAoECQgGCAgJCAgICAgEBAgKCAgNCAgICAgICAgECAgIDAgICAoICAgICAwICAgFCQU="), + 20 | 65536 + ); + }; -// Actually draw the watch face -let draw = function() { - var x = g.getWidth() / 2; - var y = g.getHeight() / 2; - g.reset().clearRect(Bangle.appRect); // clear whole background (w/o widgets) - - //Set Background color for face - g.setColor(currentFace.bgColor); - g.fillRect(Bangle.appRect); - g.drawImage(currentFace.bgImage, 0, 24); - var date = new Date(); - var timeStr = require("locale").time(date, 1).trim(); // Hour and minute trimmed to center whole text instead of on colon - var dateStr = require("locale").date(date, 0).toUpperCase()+"\n"+ - require("locale").dow(date, 0).toUpperCase(); - //shadows - g.setColor(0,0,0); - g.setFontAlign(0, 0).setFont(currentFace.fontFace, currentFace.clockScale).drawString(timeStr, x+currentFace.clockOffsetX+currentFace.clockShadowOffsetX, y+currentFace.clockOffsetY+currentFace.clockShadowOffsetY); - g.setFontAlign(0, 0).setFont(currentFace.dateFontFace, currentFace.dateScale).drawString(dateStr, x+currentFace.dateOffsetX+currentFace.dateShadowOffsetX, y+currentFace.dateOffsetY+currentFace.dateShadowOffsetY); - - //main text - g.setColor(currentFace.clockColor); - g.setFontAlign(0, 0).setFont(currentFace.fontFace, currentFace.clockScale).drawString(timeStr, x+currentFace.clockOffsetX, y+currentFace.clockOffsetY); - // Show date and day of week - g.setColor(currentFace.dateColor); - g.setFontAlign(0, 0).setFont(currentFace.dateFontFace, currentFace.dateScale).drawString(dateStr, x+currentFace.dateOffsetX, y+currentFace.dateOffsetY); + const kc = E.toString(require('heatshrink').decompress(atob('AC0P+cH/OABg88gEfA4kD8ARHoEDkUBz8A/8D/kB+Vgjfwj/gn1AjcggOQgAxGsEenEfxkI4Uf//ijGBx3A8/AgABBKQYBB4EEkECiHB/HAvPAgOAgeAg84g8/g0xwUQoEMsBZGnEAv0D2eD+HBzEgw0QoOImFsjkcgFPgE/wEcoEIkEAiH4DgKHCgInDv+A//w8Ec4EDNwsMgEjwFwCAKFBBwxaBOISaBgEwgEsgEyCYsQgEIgEEgECHoOAj/8g/+gBNCCAgAHGIQZBBAZdCA4NAD4QAGsBECXIc/gH4g/gWIJ6D4F/+F//k8n0cg8Px+H//B//ATwIUBhzcD/8H//H//hQ4LGCnE8EAM+j1/h1/EIPD/vg/nwhDYBXQMeGAOP2fHznj/3w//4IIMevjvEnjUCv8AvvA//8v/+n//CATxBSwMB4H9EYN4v88n+Ojvvh3/w8/wePMYUfcAP8j/+j/nh9zCAPBz/gRwISBuA+Bh0en8PMof/wLVBeIN4KYTeBQ4IBB4e88PcuBnBn4yBCoJpCgfwgf84J4B894vYSCh/8gf4cQUxwEY4DlF4Fj4ExBQ0BwB8BgBaBJANsgEzgEREIUMmEMjEGhgcFgEJTgOAgVAgI7ByEApEAkkAiQQGDowAB4OAsHAjFghlggUwgOYgHYbgTNBhx7BDQgJBIgMEjuCjnBxinCDAIAEfQP/wHAGIVH41n+cjjGRglIwUkv8Tv+YwFIsFgjlggbgCegMAn+Bbgf94F/8C2BgDjBh7gCKIP/8P/+DcBuecnfOj7rCwPvwAVBn+Av/wbQM+j0cg8Pg+H8/D+fA/LRCuAWB/whBh//w+B4fh8H/8E/IYJUDAYNwGgJUBIYXnnBDBnGOgECFAU4Kg+AnPAjjRD/0B//AGQPwvFwjk8v0ev8HL4MPwDNDEIN//hUBIZQpBCAZlBGQScBh/AgYQBnDsBCAX+h4lBVI8fPQP8j8/h0HU4KUBKwIQCGQJKCZAWAgOABwghB+EB/kD/0HAIP/4IQBj/4gEYaIRUCg4JB/4wBIYk/Z4UH/gfBOwWA8PAuHwCAP8h4yBD4JGDXQ874Ef4EH8EBFISUB4F/+BlBnEfjkH58H8///I/CPgLmCKgcP/+HnkD35WB8B2Bj0+gEGCwMB4eD/Ph/nx984uf8nn8h08CAKbEKgoyBZwKMCCAP/CAKaCgF4bg8D4CxBTgPAn/4WwRSCVIIQBJIQSCbgTJDgbRB/+An5DEv56ChkCh+Hw4uBAIKYDvxnBj0ACAJUBEYXgn/wIYN/gCIBjhlDgfDw/h54yD7k/h0eg8EgY5CKgP//n//1AgMggAMDMoRjBg4EBviiCAAUIgEkgETbwQTBAAQA=='))); + + Graphics.prototype.setFontKirbyClassic = function() { + // Actual height 16 (15 - 0) + return this.setFontCustom( + kc, + 32, + atob("CQcIDgsQDwQHBwkOBQYFBgoHCgkLCgkKCgkDBg4ODgkRCgoKCgkJCQsECQkHDAkKCgoLCAkICgwJCQkHBgc="), + 17 | 65536 + ); + }; + + const kcb = E.toString(require('heatshrink').decompress(atob('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'))); + + Graphics.prototype.setFontKirbyClassicBig = function() { + // Actual height 58 (57 - 0) + return this.setFontCustom( + kcb, + 32, + atob("HhgcMiY5NQ4XFx4yExQTFCQZIyEoIyEjIyEKFDIyMiA8JCMjJCAfICYNHx4aKR4jIyMnHR8dIikfHyAXFBc="), + 60 | 65536 + ); + }; + + const zapf = E.toString(require('heatshrink').decompress(atob('AH4A/ADsOAQMD4ADBg/+AYN/BwX//EAh4CBAYP/8EB/+AgADBAgMf/gOBj4HB4f/EoIOC/8/BwuDBwoKBBwQsB4AsDHYPwHYkDCQRKDggCBgIVCAFg3DAARRBHApgBTQQODToQOLDoosGAC08AwrYDHYo0EJSHgJQoNEV6cYIwwZFgbfCF4gOFg/4g4GDsF/wb6BAAM+BwP/KYfgv//BwUB/0HMgIOCj4OHNYIOE84GBBwYFBBwoGCJYQODQQc/AwKQDFQRoDIAQcDgYGCBwZHB/53BmAVDw/4j4ODLIOPJQIOBNAoODLIUH/oOGO4sHwP+KYQOBoEf953IJYZ3C/zwDQosANAphDDgwODPwZ3F/jvDNAYOFLIIONvyrD+IOBIQd4O4NAAwUEd4JXDfwYGEgIqDAAUeAwoAPh7kBTgREBGgJ4DSoPwh/8BwS5B4JcBNIf8j5NDNIPhYQcPSoKgBXQnxTwasCx40CBwX4mF4GYQ0BwEDBwMD4A0BgE4BwM4HgPAgIOCHgIOBjAOBmAOB8AOCc4QAC+DgDAAQdCKAQdDPAQsDwAOCHYYOB/DTCJQJxB8B3Cn/4FYZoCNwKGDj/8IoKVCBwPHBwKkCh/4PAKzDv+BBwPAAwLOBIYLyDd4IzDAAUDEgbpDc4YAdgIpFHIIHFK4IGEVgJPDCoReDI4RtEewYlENoKLCBwXwgYOEjkAhwEBE4LMCsEAngJBbYMGGAIOCAQL9BGwSUBnynBDQI7Dh4uCHYUDLYZZCv5ZFj5iDbwODCoa4B+BaEd4IVEHQMHYIsBCoieCJALXFMgIVDEoKXEv6uBRAZeBfwheBMYJLDv5yCFwRIBaYIlCCoJbBZgZIBRwN8CocDwChCYQMAmEAhikDgbCGnDOCgEQBwIfBQAg7ES4Y7DXoZZDZgaIEXoKeFv6eFEoIkEgEHRoYAJggGFg5JEfIQzFJQJCEGYIWFv7CEEgLCEh/AAwIlCgf+MAIlDv/wAwJ3CDYOfBwn//IOEDYPfSoaLB/v8LQZPBQgI3BTQYEBcAbwBYgQOB4EPBYLRCjEAuALCcAUHBYLvCBwU/4AdDg8P8AOCj/ggZuBHYeAIYIsCj/4CAIsCNAODBwkP/E/+EDQweHTYN4SoXwv4fBBwUMR4PPZQi6Bfwi6CYQgOBaIjYBcAs/CopMBEgglCBwquBAwjbCComBBwv+g4OEPwM/IQqWCIQfgj4OE/0BHYgOBnwOFb4QsESgQABXgIkEVoL/CEog6EADhsFTQX4HIy4EBwKiFBxAdFFg4A1JgI+EAwIHEbAJjFAwT3Dj4GCNYUHBwYWCv4WFFYQABPYLXBAAeAZ4IGDEoI6DAALiBv4wCn/+GYKcDj40BvjyEGYInBAARiBNgkHgEOPYlwgAuBOgcAhgOEmEAbwgdBh4dGb4kfCAIWDgY5Bv4tCgJZCRQQDDO4yGFDQKrDSoS6EUgSzENoQlDGYIlFQYS7DQYYWCU4TSENgl/EYQA/AAsgYwIADh8HeIkB/BmEToOPdQjSBaYgdBz4sFvrxEEoPcCosNw40DgP8+Y0EaIQ0DXQQOF45DGFgsAno7Fg/PBwv8LIwkFO48Pw4zFuE4a/4AfgP+A4sfaQwO/By9//4ABdQUHAwX/wAOuQ34OpAH4AHkAEDg/Ag5iGuBiE+EOAwcDaIJrEn/4jgOF4fABwjwDBwf/R4v/EgkB//8BwkPCoolBFYgAsh5XEAAJ2BB34O8AE0YAwsH+A8Mj5LFgP/fws//gGEgYONDo4sGHY5KHLIwAOGg//IYt//5CFCosP//gIIn/IQhuBLAv//wqLn5mFGIwqGKoIqFj6ZGGIoOBSIsBOQoAKvjPGKQoGBGwhZBJgiEBAAI3CKQIWFCoSVDNAIACQoglEEgYlDAwZ6CBwwzDGgcfGAUfOgMBJwc8AQMcQYqGEhgCBjBsDBwScDBwQdHfQaXCG4RkBBwRKGNCqGHSo6kGWY7CGEoZVDCwQ6CFof+fwoUDAD8GA41wAwsHBwx0CX4cPAQMDMIYOCnAONvAGCj4vCBwT/DPAcfBYN/BwUDYQqsEBwS7DBwbKDBwSzDBwT3EBwUfBwozDd47+JEggOCEgboEJoThEEIQOFQwgACSogACUgYOKYQYAggPAA4v8AYUQQQSkDCQMfUgiYCZIbgBv7jCZIOATALJD/EB54OCBYOAnAODUIMHj4OEgFhBwQzB+EOF4Q/B/0A8bCDBQMcn5KCjgJB4YODLAM8BwsHBw14BwsPwf/BYIOBgf4n6GCj5TBBwj8CBwgHBQwIOE+AOKEYIOFO4P+Bw3gBwakB/gOEv4EBU4IGBBYKdBUgY0BEALnDAgKcDNIUH8D/HACkCAwsBKIQADn4tDHAJKEn5HBLIcHDQJ6BYQILBDQJjBQwTvBBwKGDBwSVD/0MFgKzD8BwBWYf8hiKBBwcAAgLsBgEegAOBBIT+CAIIJCCIIQBBweAgI8BDoQODDQQCBgZxBngODv+Ah4OCdoP/77+FAAJKD/7iBBwn3BIKGBBwiGD//nBwaDB/wOG4YOBWYV//g8Be4SSBwYYBYQfwGwKrCgILBIQYWBwDYEbYoAaj4GFSwQAEv4GFh4OGIQ0fBwsD74OFvIOFj47FgfBBwt4BwsPagMYCofAj77BCoYOBnAVDFoMDBwQVBBwN4CobjCBwT3DaIUDfwYOCZ4IObfgIOEawIOFAwYOCh4OFgIOGj77Bn8PO4bRCO4ZFCO4YOC8AOFviVEIoIFEAANgAwsEAwoAIhwGFgZNBAAl/8AGEPQIOF/7wFPQJEDh/wQw2PQwv4/40CbAMHFgPABwXgsE/Bwf+hj6CBwXAAgMcUgYECBwfhAgIYBDoQOJBIUP/0eBYIJBMoPhOoM8BwcfwEPBwhbBJQQOCA4IOGO4YODQwQOP8AGBUgQOBS4SwD4AGBYQR3BSgJCCNAMAn5CDn/AgYzDg4oBE4IkCBQV/aAYAfnAFEdIQHEAwI7DKARvDJYIGBLIYcCNAZwBA4R3CMwIACBwV/AwQlCEgakEAASzDBxQ0CGYZDCIQOAj+BBweAgYBBBwRGBmEAjgOBAQMHBYIOCF4IQBhgOBjEAhwEBBwYfCDoQOBj4dE4EBK4N8HYXwj/4v5KD4JZF/hbCNAYOCO4f+BwTBD4CVF/iIBZQc/4CmBYQf4UwIkCgEGSAT3FCoYAmgb8Dd4YyEK4JeCIAZeDBwZIFLwgODLwwkBj7EBBwZ4BBwqkEBYJ/BF4QOBgbCDBwRUEv/wEgIOCFIS7BBwgkBBwjqBBws/BwoBBd4YOBGYJKCBgI9BLIc/+IkEJ4JuDBwXjTokD/18Qwk/97BF/4cEBwKkFDoKkFn66Fg7QFgF+AwsHMgQADCowvDAwqOBA4t/IocBwD5FUgRNDj/4UgIwCNAPDSol//ykG86zEAgIOEGIP3VgbWCAALRCcoIACBwgbBBwcAJAMDBwXAAgUcBwICBngLCAQQECBwgBBBwgdN+EPbIIJBJQfAh5ZJNAJZEO4gOEO4SGCSpHjBwk//izEGgODWYkP+BFBJgIABiA2BGYQACE4IkCbYYVDAC0BEQpDBA4phBgEwGIZXBS4TNBK4OBLIZmBNIJoCJ4P/4aGE//+n6GCUgSHBUggOBfwYHB8IOCgP+g/+gl8BwQfB8DvEgF+gEMd4cDKAIOCHwLtBBwUYBwPADos4DQQCCg4QCBwJkBEgJKD8KGBJQZRBAAJZFd4gGDO4oOISor+ESoIABWYr+EGgbTDEgolDKYIWFdIgtBXIQAvZIIBBAAUP+ABBAwSeBwJLEn/4j5wDPAPDKYk//gBBBxf4BwwsBBwcfFgLCCSwQBCSwfAgazCAHMCSol8gFwSocf8EHSosATwR3C/EOQwuBPASVDngOFWgYdC/4kCSof+SoqdESoSdDSoSzDAH4ATNoZwDPgQACVgKLCAASOBAwiOBQgYABv59Fg4OGUQjgC//gBwqlBIQjADIQYOFZ4JDEgf+KQs/85DEg/8v5DEv/HBwkP/k/IYn/wZSEh72BIYZCBAIKUFj5DDQoIfBIYYqBD4JCDFQJDEAgJMBKIgJBIYYiBNQJCEE4TIEIYhPCKQYLCbQgaCIYYpDZYY4CIYgA/AGH/gb+F+E/ZIYO/B34O/B24A/AF58Cgf4AwMH/wDBv6HCn/gSAKHCgYOC/+AAYMf+ACBDoUB/4CDBwQLBCIQaDEAYpBBwIvCHAY+DIYI4BIQYEB8AJCIYhCDEQPwE4RDDAIIODIAJCEDYOBKIZDCIQgOB4ZCDIYRCEIYPHIQZDCBws/95CDBwP/IQhDB/5CEKAJCEIYIOFIYJCEBwRREIYJCEKQP/IQhDBBwpDBIQjXEIYgGEAH5nDK4sBQgpuBQgp9BAYMYRgaiBg6lCTYKmCFASiCQAcfSYKABTwKEDTwceEYP7BwYCBv+/BwQ3Bg+BBwYvB+AsDBwMOHYYdBgPgJQYsBn0AjhvC/EfNIkffopKBfooOBdwoOBfoh3BBwt/foqVBIASkDVgqDDEogVFfF49FgZqBLYgGBKgk/A4KzCPASBESwQWEOAV/MgUHBYV/FoT3CgKYCj4hCg62BgYwDagIZBSQYlBg4VBn4/BEoIVBj4uBvAEBNAX4g+ADARRCngnCMIP8gfAAIIVBeIMcgAQBMAUB8AfBOAXwhwuBOAcABwJwDBwXwTgI9BBwMPBwJTBuAFB+EHIgMGBAIXBvhoBEYQ1CgBBBBwVwOYQODPoJzBBwiJBBwk/FwIOCnBwB4A7B8DnCKYPgBwJoCAoS1BNAhZCO4lwRoX/QwQ5BBoNwKYN4BwJrBgKkBwF/KASiBnEHAwMGBgIQBO4bRBjznCjwqBIYRwB4DvCBwU4IQLqCLYIPBgEDCwJIBIQL3CUwYABvxiBUwIABPwQvCEQX/JYIADj/8AwgAZnAGFcYQAEGoo2BBwsDBw3/BwsfBwq1BBwkBMQzaBBwkP/CZCDgX8YIIcEwEYBwd/uEBBwc/wYqEh/gmAjE+EDIAibBBwixBBwiyBDorBB88AHYQOBL4JKDAwIXBUgQOC//HBwp3DBwZ3DBzsfBwoHEQwYHCWYgHCWYi6BYRitBBwq8CfxkfBwsAcAgWCBwyVChgOG8AOFhwOG+AsFh4HCv6zvB2nAh6kEN4NgQwsGQwnABwUYUgYOBgIOEUwIOCDoIBBWYkBFwIsCHIUAg4OC/EHJAJZF8E/O8WfBwv5BxcH//xBwl//0f/76CgZJBBwIGBL4P8E4J5BEoQYB/gGCDAYkCDAYkCAAcwAwoAjMQI6EIIJYDPAZRENwJgEDgJ+EVgYWDVgbzBfQIGC/wOCn4HCSogACBwV/aIozDcChDELAIvCIYJCBFAQODJwQDCgK3DvgCBjyJDBwQVCgE8AQMcAwQLCBwgLCBw6RDBxQdOW4c4JQsHFIJZEQwZoDHAS3Cg4ODAYKCBDoTlCv6VE4ACCBwX8CobKCKYYAQCgcYAQMONAsANAakCh5oFcAK6Cd5wO/ByoKCNAaGDO4bvGhgGCgYOCUgYOgHZd4YQsPLJMP+BzCO4YHBQy4wCv4GCFAUHBxROCgYGC/wOCn4HCNgUBGYo0EAwRDDQQYlCCocAj4rEFoYGEABqzDgLgJWYbCDOYSzEBQQDDSpYO/Bzn8gfwgIODgEeeYKVEAIKVEUwKVDBgLXBBwgBBBwodGBzDCCBwZKHLIgOBj5FBMgXggf8BwIKBgkAv4OCPYUfBwf+FYP/BwaFB/4OCgf/gE/BwQACBIQAEjAGFABggDC4RXBEwRoEAAKGCNAIABO4ZGCaIj+kB34OD4E/YwIOCYIL+ISoqmBSoQMBhiOBBwgBBWYi1DBwoACBw/wBwpGBBwkBYQIOFLoQOD/4NEBwP/fwsfFoIAjv49Fn//Fwi0CR4JLD//+Dgi6EZQgWDAwRzBMIYABNYUDbIY6EAAI8Cg7vGGYT+TA4ZDBLAIpBn5DCTgd/BwQKCAYcfIwUHBwTBDngCBjgGCgYOCAQMHBYYCCuALCBw8YAQN4Bw2ADooOH4A7CjxYCC4JKDT4J3CLISfBQwRkBBwkPCwIOEAYIOBQQUfcoIOBdwf8BwqhBBwYqBBwoACZgIGEbYIOHHYQOCU4YACvAGFNwQAEuAGFgQEDhgDCgIXCSoKwEhxVDBwQ4DnCGCGoz+DSof/AASVDAAQO/BzuAjwDCQwUBRAKGCSoIBBSoakBBwKkChCmDZYjfGWoYdIaIIOBaIYMBHYjCBJQLCD/EB+ADBUn7CsAYMfAYR1BAAN4UQrCDWIaVCUgIABUgbFDZwICDBYjCBAALCCFhzCBAALCEA4SV/B1iOCYVoUCYQbICFgYABjgsEEwPAYQYABvjCELwIOBMIf//hoEAAIOOwAOFFQIOMQgIOFUgv/K4IzGBwqEBEgwOECoIOE/zCFAAbCDAASVFTwQGFYQYADYQzRHcAzvHfw0PBQQDDTYpoFB34OcYoNwgIODgEHAIKVEBgKVCUgMf4CkDAgP/gEYXgc/doQACg78CAAY6ECoT9DagIVBKIYsBKITVChwVBAAIjENAv4O40DBwvgPIR3Ev4OEMIQODBQJEBQwhTCBwRlCBww1BSoiPBBwUOKoV/BwsDBw0fUgYHCBwSzBT4SWEAALCCAAcDDozCCFgYODHYQdDLIQsEawT+EVgakDWYwO/BzKOCWYbgCgF4SqDCDBwbFDYRTRKcA47CAAZODAAUBYwQADv4OFh4OFgf/Bwv/Bws/BwoVBNgYOCJIwADQxaVGh6kFg6zDBQN/aKYDBBwn+FgoLDHYQdBIgJKDEQJtBjAsEM4cBAwImCfQQHBRgYOCFwYOD/5kCBwacDBwYuDNoIeFBwwtHXIJMFg4OFFwbDEFwIOEEwQOEEwJSCYIb2FgB4Ed5EfM4RDDEYsBEY1/BIIeDj4EBWYQ5BYQsDKwU4IAsHSoYDBj7+LSooO/BySTCgIODUwYOCRgKGEhyuDBwS/DUgQODUgYdDvAOFh4OCawS2DBQUHNDYDBn4ODBYQOEKYJoD/7oCNAQOBIgJZDGIZoCj//R4R6CBwJqDBwQ8CBwg5CLIgWEv4WQU4YWHgYWdKYQWEToQWOd4gOEcALQBBwZtBn7CENQYOCBQJTBBwYWBKYKzD+AlBd6YLCL4YFEBwJsEAALmBBwoGFLIQAOnAGF//+AwhfBSg4oDUYRNEZIQWDOAZVCSYQtEUQIlEEgYlDEgSYBAwLACSpoORIYJCBHAMP/hnCH4SoCgKkDngCBjwGCgIOCXQccAQgABBwTXDhgOFDp0DHY18JQQWCn5ZDAYN/LIaGZGAQOEWZrRHIwTRDIQRDEPYYkFEoYkDEoYVDCwS9CSQQcEAA6nCWAgaDnACBhykDBwQiDvB3CBQQDDSqQO/ByoKCAYcPXwaVEhCVFUQKkFjABCBwi7DUgIbCFgYqDAAP8gI9DJQbuGBzriDBwYGDBw8H//+Bwl//5qBAAUD//8Bwk/GYsBEgolBCooAQgYlEKYQ8EJYI1EGgJTFIYI9ECoQWEAwRFDj4HC4EMNAQlCgYfBEgQlBD4IkD/8fD4KGBAAPxD4KkCAAO/BwIGD/YOGHoQGEFgMfLwX//v4gJlD/0GKIJkDQAMBQYc8AQMcQQfAAQYLEjAODDoQODFIQdEJIIOEn5+BHYZdB4EB/D6D/4OBDIKJB35ZBMwf5O42PMwIGD/DjBBwgfBBwnwv/wWYbCBBwKzD8BLBaIf8BwTRDwAOBIYf4gY7BGgYTBQAIlC4EDLwIlCNYM/PoIWBDQMHOoUfDgJPBQgSdDCoKVDWAUOAwUDwADBaIc4UATgDBwQ9BW4IyCQwgOCSogO/BysAvkDBwaECO4aGBnyGDSoMDcgIOCUgK/BUgUMSYK4EbQQrCDoQOBV4fwJgQkCh+An//V4RZECQJoMCwQOEdgQOI/oOGw4OF/A8BBwV/L4IODK4PwAQIOCn/+AQIOCgILCBwcPOoMHMIcIDIQOCAAUBBwYACh4OFYgIGFgYOGngGFAAsBRgQABj/gNAIICLwODNAZZB/h6BBwQTBCwLSCgaOBNAIOCQwP4g4OCWYXAj7CEFQIOF8EHLIIzB/6WBLIUfj4OBNAUB8A0CjgOBji0CgIOC4DDChgOBjBLBGQIOCwBuCBwY1BBwhPBKQIsDPAQsEKYPgBwUeMQRZD+AOB/qVCOYJDBQwf8KQI1CWQQOEGQKyBMQIOC/xSBMQIOC+KPCSoYBBGYQACGYjaDEgTpDUoIWFCogAUUYIbERgQxFBw6KBBwhHFgIcFSoQHFCosAhwEDCQSCCboIOFgYOGnAOFg4OCFgUBYQSiBAAQOCAwYO/Bzh3Dh6GNSp0BBwwoDAwqgDcAj2FfwIOG/wOGDwsfMoY0DBwr+EAARKNgH8BwyUFSogOGGwYODMgQODLgYOD+DCGBxzgVLoQOEIYQOHAYMDBwYKCgYODNgYOCSod8fwwOCbAc8TIoODAAccfYwOVnACBhgsDO4RKDBwRKDg4DCUAQDDh4ZCjyzDCoTRE8EfcA7vGJIYGGBwLtDBwRdFh5SDAAQwDBwYGFUggACNAYADEgwdHbgQOEGg3/Q4Z3EBwpaFO4SXCO4gOGA4iVKA4YGDIwQOEFwQOd8E/BwiVBA4QOCMwIHBQQoHBNQkAv4OFgIOGn7jMg6mFgIjEDIP+cAqUELIN/WYwjF/7hFBwLgGI4zvGHIgOCCosACo0PAwpKBAwsMBwwkGNAIsNEoxZHWAzWEd4gHEeor+EA4YGCA4YODA4YGDJwQOdh0BBwvAA4QOCSoQOFA4QdDAQIXBBwT1Cj4SCh4KBTAj2Bg4RCBYP+g6uEGIP8Sor4FBxAPFL4QHDO4YHDSskPj4OF8EHSowHCBwQCBA4JxEA4TwDSoSHDAAMDCosBPAgABO4ivBUwIACYQN/FQngv7ACNAYxFI4zCBGIpOGh4cFgBHGd4QAECoxKBAApIDnCVDQ4SkDA4V4DoowDFgbCDToYOCJQSdDh4lCRAZoCh4ODO4MBd4geBn7+E+EH4b+E4PwLIQOB/8+gIOE/5rDBwStEBwcYBwn/gYdF/wsFAAIOFEwYOH8IOFhkHBwvAn5EFBw3B+IOEh0+B4Q7D4EfHYgDBv4OETgSzFDwLCFj4ODBQTCDBQUBcAzvHfwyVDc4UASoUMWAYACBwYACDoYADFgY3GAAf+BwzeEO4QtFYQIeBfwgeCcAgeBd4o9BNATgCVoLvRB0reBBwngBwsOcwIOE4DmBBwYuETIgmBBwvAn4dDgaWBcAiGF8F+SoykGaQUYBwX8YQzZFh7oGCozvHCoxKBAAruFAAhZDAAZoCAAbgDHgUDQwUfdwJVDVQIOBj4OEgCtBBwYVCBwYDBn5zD/wVCcAfAaQQOCCoYODaI3gCoTvDbAQOECoQOChkDfwwVCBwZaB//7BwXDAwP+cAUMDgWDcAYAB8DvEEYKkDBwT+FQAIOFHIIOEQAQOESwLCCBwLpBeYazCRQQOCBYLRDJAIkBCIUPAYQnCAYICBn4ODCoQODFALjDWYS7CBwQVBTwIFBAH4ADVYTEDXQbaCB3kMKAlggCfCAAMGBz0BfQQADj/wAwjdBC4gOB/+AA4l/bwxWCDwouFg//Fwp5BOoIuFGws/Fx/8A4kDGwwuBLowWFFwIOBUkgOOfzoOlAGY='))); + + Graphics.prototype.setFontZapf = function() { + // Actual height 56 (55 - 0) + return this.setFontCustom( + zaph, + 32, + atob("EhQVLiUwNQsXFx4yEhcSESUlJSUlJSUlJSUUFDIyMh47Ky8pMismLzQaGTInOi4uKy4vJSstKzsnKCgXERc="), + 60 | 65536 + ); + }; + + const nes = E.toString(require('heatshrink').decompress(atob('ACsPwH/3/7AQOA/AOFg/AvkHA4YFBwFwCAnh5//AAXh50cBBEAgeMplP/9Go98gIeCgfgkMCmce8EYg0Bx8xiERgHzg0ws3bs02sdt2YIBsEbgEwgZVFthTBJooAEkE/4xdBiEAwEWg0/4ANBgNghkD+EMAoIYCKAMQAQP/AogeBBwXwj8BEAQAKgeAnACKCo9wLpcHgfj8ANB/E/4f8sF2gdgm8DBATiBDIkzgcwm//v/3/6VDmBLCg9x+8fsf2ndn237v838c4CIUAgwyBg68B8duBwN3+9/sPgCIV4HYP4nOHzFxw44DgOAjBeB418u/Htk24YCCt/2/8HEYf+n/z/92eQL1Cs/2v8BCISOCAQNhBYIOB8F8g/ATQcDzg+CEAQCCBAU5agS9BvxlBCIlvv/nIILLIgeHnFzw4MHgMM8FAAwbsC4EkTgNGhkgCocCoEkARAOCCgNGDQMkEAM4EwJBFgFggx9B21gsxiBBwngv+H/F/8f/n/3/wICnwSDBYKwBuOGjFhw8YBAUP+CwCboaeMgH4n/j/1wu0DsE2gdwu8HmFgEYwOCsE3g8/4f8h5bCGpQCCsEwCI6NBAQqGCI4YsBI4ljs/2v9nNY4ZBDgVgBAV/CIQABKwhfHI4UAjkB+EfgALCAQIjDR4Q1EaAP+h/jz9w+8HEYkAHwjtBmACFEYzgB/EPwbyBLIoRIwE+CI0D/hlGLIk/LI9hw0YAQV/w/4FgIjIjdh20Pv/H/k/2AjIj1h81/v3398+NYUDw1+u/nfAc3sc3+d/gPgYojSCFIgIDB4UH/wLCTwp9DEYUH+BiCgfgj7dBR4IIBv4jDa4ngUJUHg99+/fTALFC/gICuFwLId8g/gvzuBHoV+BAN8B4UGg9h+0fs/2/dv2/jvk34dwR4QAB//4gOAiEAuBLBAIMHwEYgP/JQQ='))); + + Graphics.prototype.setFontNES = function() { + // Actual height 12 (11 - 0) + return this.setFontCustom( + nes, + 32, + atob("DAwMDAgLDAwFBQYKDAwMBAwMDAwMDAwMDAwMBAoKCgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwFBAU="), + 12 | 65536 + ); + }; + + let drawTimeout; + + let settings = Object.assign({ + currentFace: "Mario 3" + }, require("Storage").readJSON("nesclock.json", true) || {}); + + let currentFace = {}; + + if (settings.currentFace == "Mario 3") { + currentFace = { + 'fontFace': "SuperMario256", + 'dateFontFace': "NES", + 'clockScale': 2, + 'clockOffsetX': 0, + 'clockOffsetY': 0, + 'dateOffsetX': 0, + 'dateOffsetY': 48, + 'clockShadowOffsetX': 5, + 'clockShadowOffsetY': 5, + 'dateShadowOffsetX': 1, + 'dateShadowOffsetY': 1, + 'dateScale': 1, + 'clockColor': "#4299f4", + 'dateColor': "#ffffff", + 'bgColor': "#f5bf66", + 'bgImage': { + width: 176, + height: 165, + bpp: 3, + transparent: 1, + buffer: require("heatshrink").decompress(atob("kmT0mQtMkyVImmSpMkjQCByUNAQNJgwLCwYLCoOkBAMg6QIBEDpBCwEJBYNAggLCgQsCgIsCgAgCgAgCLwIIBgESBAIgdIIXAgJKBsEANYMwgBrBzEANYNMgBrBk0ANYOTgBrCwEDFIIgdAwOAiAdBgEIDoMAgkYAYMChgDBgMGboWDAYVBwADBkHAAYIgdIIKkeYsZB/yV0gFAm3aRgMbtqtBhu2wEIg3bFgMDtuggUB23QgMA7dogGAtu0EDqDBgGQKYMApBTBBQMSAYMShIDBhMEbwMEwVAeQNBkDyBkGQCAIgdYv7FCIIQUCKAIgCCgRxBEAY1CNAIgCGoRoBIIQgcIIKRBAHpICIP5B/IIThBAALhBAAMQAYUIAYUEAYUCAYUBDwbiDEDxBBpgGBkMmD4WTD4VJCAMEknAD4MSsAfBhMwCAOEzADBoQgeIINJAX4C/AX4C/AX4C/AX4C/AQPtgAABk3EIPU8h//AAUDIPUD//MAgMP/kCIPFOj//n///18/+MIPFI//P//ypP/z/wIPX//n//pB+AAP5IPdOjnP5n//18/+MIPFJgf5n/ypMP/kCIPM8h0EY4UDH24CD9u2gEAk3Ea5XQB4MCthQ6yfASQX/+E5IPOQn/85IEB//AIPPh//zQQPn5/4a5QCux/8IAMkz/5/8EIPJAB5//75B+AAKD88PM/iDB8/P/HEIPGQn+T/4EB//AH2wCCyfA8FPYwPwnJB5yVO7dggECtg+4AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AVWTwEYHe/YgEA7BBD8PgiRB1pEJAYMAHYWT//8IO1CAwcCIPY2EkAECv8DIOucGwkhxKDBwGEQGYCByAGFhK/0AQh4GwJB/IPUnggJFwxB/IP5B8kgGGyBB/IP5B/IP5B/IP5B/IP5B/IP5BVu0AgE2H2GT2A1BII+TwQFBwEEIN+QiQDBgBBHCQdAIN+EAwcJIJVIKQRBsAwlAIJdiINs4IKFJgEAjhBrkIGEpBBLkBCBZFcJAwsEIJsAIP8AgIWGAUVOFQ0AQZ0xIP6EBIPkkIIUHINFIBhRBLgBB/IP5BD4hB/IP4ACghB/IP5B/IP5B/IP5BFIAZB8hICBoBB8wALDkBB7gQLEIP5B9iQLEwEAhxB3kALGgEAhJB/AAJB/AAOEIP8AjBB1gBBJBQxBvBw5ACgZBik9ggEBILMAiRBhkCECVZJBzhIGDE5BBQsRBgpAGEwBB6uBBegQHCp8AoQyKyehkYuH7AFDDYuQILlI/+IpMngEJgENwEAwEGBwMEkcApMmC4dJgAlDiQsFhJBc8fwIIMOhEf+E/8EP/AWC8dIsOchunmHCukA5OJIMw7BAoOOnhBHgnDgOAgUMmHAgOGAoMxkmcII0BQcEP4MAuE4/l+nArCgcBwI7BgHAwMBDoI3BIMsAhxBBgAvBAAMDAQIrCQYJBBgRBBwFAgeAnJBSG4gA7IP5BCyf/AHyDDv4HC4BNCj4HC+AHCg4HC/gHCgIgDMwYgcQYOAIP7FCIYIABn4LC8AHCh4HC/AHCgYHC/w9DEgYgcIP5B/IImSczwkDEDhB/IP5B/II2TAYOABgU/BYXgA4UPA4X4A4UDA4X+HoYkDEDhB/IP5B/IP5B/IP5B/IP5B/IP5BV4AGDAHUkyRA+IP5B/IP5B/IP5B/IP5B/ACA")) + } + }; + } else if (settings.currentFace == "Mario 2") { + currentFace = { + 'fontFace': "SuperPlumberBrothers", + 'dateFontFace': "NES", + 'clockScale': 3, + 'clockOffsetX': 0, + 'clockOffsetY': -8, + 'dateOffsetX': 0, + 'dateOffsetY': 54, + 'clockShadowOffsetX': 3, + 'clockShadowOffsetY': 3, + 'dateShadowOffsetX': 1, + 'dateShadowOffsetY': 1, + 'dateScale': 1, + 'clockColor': "#ffffff", + 'dateColor': "#ffffff", + 'bgColor': "#9290ff", + 'bgImage': { + width: 176, + height: 165, + bpp: 3, + transparent: 1, + buffer: require("heatshrink").decompress(atob("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")) + } + }; + } else if (settings.currentFace == "Mario 1") { + currentFace = { + 'fontFace': "SuperPlumberBrothers", + 'dateFontFace': "NES", + 'clockScale': 4, + 'clockOffsetX': 0, + 'clockOffsetY': -8, + 'dateOffsetX': 0, + 'dateOffsetY': 54, + 'clockShadowOffsetX': 3, + 'clockShadowOffsetY': 3, + 'dateShadowOffsetX': 1, + 'dateShadowOffsetY': 1, + 'dateScale': 1, + 'clockColor': "#aa4e00", + 'dateColor': "#ffffff", + 'bgColor': "#9290ff", + 'bgImage': { + width: 176, + height: 165, + bpp: 3, + transparent: 1, + buffer: require("heatshrink").decompress(atob("kmSpIC/AX4C/AX4C/AX4C/AX4C/AX4C/ATE8z1P/mf/8n//P/4gU+V/n/+v4gB5IFBBwYmB5P/+fJ8///IjLEAU/IgIpCk5BU+f/MQN5n5BBngCBBweeOIJuB84jNIIIgBz1/IINPIKv/IKGTIIKJBYpqDBz6VBQa5BDYoYFBBwiDDYoIjNMQYjBcAPP/5BULIKkDXIM/+RBG//zIIP/OIIjKPQXkyaVD8mSvIREsJWDyVPJqQCWnn+ZAZcBp8/GouTkkEAoPnOIJQBMQ59CyZ0MAR38YodPboPPk4FBGoZBC+fP8iqB/jIJAoSeFQaxBRdgJBNp//ILi8CHwPJHweT57FGHwd5YtICQoAsrAX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AX4C/AREggEJIPtAH4OAghB8iQDByFAIPeQAYWAhBGCIPGEIIcJgRB6AYUggACBIPMhIIbDChJB4HIZBDwJB3pAJHyBB3oQJIghB2X4QJGoBB1yDPKJhICrwgMKgRB0AYUgBIkgQIMgF8MAU4WAhLxCggRHkIVG0gTBAoQaCILtC7ciGQNtyL7B23ICg4zDIIeg7aDCkmBIL82IIMJjZBBgmNIIOCCItIAYVAgAJC2HbthBCyBBg7NkwMbtmyoBBBrLyGoRBDBIeG7VEB4bdIAS2yrMtwNZlmW4Gsy1LsARFO4RBFy3bsgPDoBBdguS7dtyXJtu25Nk2wvBCImQDZGEPwtIKQYCYkMtHAI+BAQ1sgQ3FDY0lBIMMBAkCILcrHxBBDyQUDDZEl2mSCIIIDkBBapFbIJYCBpCVCIJOkyVMBYsJILNCHxYCC5DyBFpWApEEBAuBQbRBO4AUB7//4/+t//8f/m//+MGzcB/H/5v//l/83//0/+d//8f/O//+P/ggK/+b/4gS+VJg+QvMkwfInmSoPkj1JkHyh8kBwMHNQM8wfJkkeCIOSh4RBEH4gjgkAEAOCgAgCgAgCwAgCoAgCkEDEAMQgIgBhEAEEUH/xiC/4gC/+eEAP/54gBv/nEALmBEALmBMQTmDEEDF/EH8g+ALByF4BYIFBiQaBj0JDQMPggaBg+CDQOD4IsBoPgFgIgh/+B8jXB4Hya4PgNAMf+BoBh/4NAMH/gsBwf+FgL4BgfJEEPyv4gBvM/EAM8z/5MQNP/ggBk/+EAOT/4gB5P/WwX/EEWAgPAgFAgHggEggFwgEQgE4gEIgEcgEEgEOgECgEHgEBgEDwEAEEHf//H/1v//j/83//x/+b//4//N//8v/m//+n/zv//j/53//x/8EEHySQKkBSQPIcAKSBcAKzBcAIOBcAKzBUgKzBCIKzBCIIg/EEbUBEAOCgAgCgAgCwAgCoAgCkEDEAMQgIgBeoIgig/+MQX/EAX/zwgB//PEAN/84gBcwIgBcwJiCcwYggYv4g/kHwBYOQvALBAoMSDQMehIaBh8EDQMHwQaBwfBFgNB8AsBEEP/wPka4PA+TXB8BoBj/wNAMP/BoBg/8FgOD/wsBfAMD5Igh+V/EAN5n4gBnmf/JiBp/8EAMn/wgByf/EAPJ/62C/4giwEB4EAoEA8EAkEAuEAiEAnEAhEAjkAgkAh0AgUAg8AgMAgeAgAggA==")) + } + }; + } else if (settings.currentFace == "Kirby") { + currentFace = { + 'fontFace': "KirbyClassicBig", + 'dateFontFace': "KirbyClassic", + 'clockScale': 1, + 'clockOffsetX': 0, + 'clockOffsetY': 0, + 'dateOffsetX': 0, + 'dateOffsetY': 54, + 'clockShadowOffsetX': 3, + 'clockShadowOffsetY': 3, + 'dateShadowOffsetX': 2, + 'dateShadowOffsetY': 2, + 'dateScale': 1, + 'clockColor': "#ff00ff", + 'dateColor': "#fe6ecc", + 'bgColor': "#ffffff", + 'bgImage': { + width: 176, + height: 165, + bpp: 3, + transparent: 2, + buffer: require("heatshrink").decompress(atob("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")) + } + }; + } else if (settings.currentFace == "Zelda") { + currentFace = { + 'fontFace': "Zapf", + 'dateFontFace': "NES", + 'clockScale': 1, + 'clockOffsetX': 0, + 'clockOffsetY': -10, + 'dateOffsetX': 0, + 'dateOffsetY': 40, + 'clockShadowOffsetX': 3, + 'clockShadowOffsetY': 3, + 'dateShadowOffsetX': 2, + 'dateShadowOffsetY': 2, + 'dateScale': 1, + 'clockColor': "#994e00", + 'dateColor': "#0c9300", + 'bgColor': "#feccc5", + 'bgImage': { + width: 176, + height: 165, + bpp: 8, + transparent: 254, + buffer: require("heatshrink").decompress(atob("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")) + } + }; + } + + // Actually draw the watch face + let draw = function() { + var x = g.getWidth() / 2; + var y = g.getHeight() / 2; + g.reset().clearRect(Bangle.appRect); // clear whole background (w/o widgets) + + //Set Background color for face + g.setColor(currentFace.bgColor); + g.fillRect(Bangle.appRect); + g.drawImage(currentFace.bgImage, 0, 24); + var date = new Date(); + var timeStr = require("locale").time(date, 1).trim(); // Hour and minute trimmed to center whole text instead of on colon + var dateStr = require("locale").date(date, 0).toUpperCase() + "\n" + + require("locale").dow(date, 0).toUpperCase(); + //shadows + g.setColor(0, 0, 0); + g.setFontAlign(0, 0).setFont(currentFace.fontFace, currentFace.clockScale).drawString(timeStr, x + currentFace.clockOffsetX + currentFace.clockShadowOffsetX, y + currentFace.clockOffsetY + currentFace.clockShadowOffsetY); + g.setFontAlign(0, 0).setFont(currentFace.dateFontFace, currentFace.dateScale).drawString(dateStr, x + currentFace.dateOffsetX + currentFace.dateShadowOffsetX, y + currentFace.dateOffsetY + currentFace.dateShadowOffsetY); + + //main text + g.setColor(currentFace.clockColor); + g.setFontAlign(0, 0).setFont(currentFace.fontFace, currentFace.clockScale).drawString(timeStr, x + currentFace.clockOffsetX, y + currentFace.clockOffsetY); + // Show date and day of week + g.setColor(currentFace.dateColor); + g.setFontAlign(0, 0).setFont(currentFace.dateFontFace, currentFace.dateScale).drawString(dateStr, x + currentFace.dateOffsetX, y + currentFace.dateOffsetY); - - // queue next draw - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = setTimeout(function() { - drawTimeout = undefined; + + // queue next draw + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 60000 - (Date.now() % 60000)); + }; + + // Show launcher when middle button pressed + Bangle.setUI({ + mode: "clock", + remove: function() { + // Called to unload all of the clock app + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + delete Graphics.prototype.setFontMarioBrosDS; + delete Graphics.prototype.setFontSuperPlumberBrothers; + delete Graphics.prototype.setFontKirbyClassic; + delete Graphics.prototype.setFontKirbyClassicBig; + delete Graphics.prototype.setFontZapf; + delete Graphics.prototype.setFontNES; + } + }); + // Load widgets + Bangle.loadWidgets(); draw(); - }, 60000 - (Date.now() % 60000)); -}; - -// Show launcher when middle button pressed -Bangle.setUI({ - mode : "clock", - remove : function() { - // Called to unload all of the clock app - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = undefined; - delete Graphics.prototype.setFontMarioBrosDS; - delete Graphics.prototype.setFontSuperPlumberBrothers; - delete Graphics.prototype.setFontKirbyClassic; - delete Graphics.prototype.setFontKirbyClassicBig; - delete Graphics.prototype.setFontZapf; - delete Graphics.prototype.setFontNES; - }}); -// Load widgets -Bangle.loadWidgets(); -draw(); -setTimeout(Bangle.drawWidgets,0); + setTimeout(Bangle.drawWidgets, 0); } - diff --git a/apps/nesclock/metadata.json b/apps/nesclock/metadata.json index 3c77054a6..76b61fb91 100644 --- a/apps/nesclock/metadata.json +++ b/apps/nesclock/metadata.json @@ -2,7 +2,7 @@ "id": "nesclock", "name": "NES Clock", "shortName": "NES Clock", - "version": "0.03", + "version": "0.04", "description": "A clock themed after different NES title screens.", "readme":"README.md", "icon": "app.png", From 3dde3f703516073f6b46cf5972e90e079b842320 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 20:42:08 +0200 Subject: [PATCH 041/118] Delete app.js --- apps/polymath/app.js | Bin 383 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/polymath/app.js diff --git a/apps/polymath/app.js b/apps/polymath/app.js deleted file mode 100644 index 6aebe036ff27a1fd033e651b52616b0036409b30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 383 zcmV-_0f7FAP)RtdYiqToQ-ruop6LpiC5K zQ(B7y<71<&cdu;UcXK1If`OBI%Fgr|5?ak0k7@53uw3XooZBlWsI5j8K(3CJ1tN0Z z9T_i7$dvnaSVW2h*2;{8F5lfCRc?(sGLlv-!c5?(47rYp>&(ky${~4!nIQ{npd1=> zguxi|W)~yV4?MqimD?*D5 zHx7{hXpo%!l)l$h6w?~(vbPzY8*ap$+PL8*x)=k!SsSRDp|#N&o@QNhN9lqie~k9B dFI3!)& Date: Tue, 2 May 2023 14:46:45 -0400 Subject: [PATCH 042/118] typo in variable name --- apps/nesclock/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/nesclock/app.js b/apps/nesclock/app.js index 8ef84f171..f4232d32d 100644 --- a/apps/nesclock/app.js +++ b/apps/nesclock/app.js @@ -54,7 +54,7 @@ Graphics.prototype.setFontZapf = function() { // Actual height 56 (55 - 0) return this.setFontCustom( - zaph, + zapf, 32, atob("EhQVLiUwNQsXFx4yEhcSESUlJSUlJSUlJSUUFDIyMh47Ky8pMismLzQaGTInOi4uKy4vJSstKzsnKCgXERc="), 60 | 65536 From 847362dd148cc96bfb18938000fb752c086e9b89 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 20:52:07 +0200 Subject: [PATCH 043/118] Add files via upload --- apps/polymath/app.js | Bin 0 -> 383 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/polymath/app.js diff --git a/apps/polymath/app.js b/apps/polymath/app.js new file mode 100644 index 0000000000000000000000000000000000000000..6aebe036ff27a1fd033e651b52616b0036409b30 GIT binary patch literal 383 zcmV-_0f7FAP)RtdYiqToQ-ruop6LpiC5K zQ(B7y<71<&cdu;UcXK1If`OBI%Fgr|5?ak0k7@53uw3XooZBlWsI5j8K(3CJ1tN0Z z9T_i7$dvnaSVW2h*2;{8F5lfCRc?(sGLlv-!c5?(47rYp>&(ky${~4!nIQ{npd1=> zguxi|W)~yV4?MqimD?*D5 zHx7{hXpo%!l)l$h6w?~(vbPzY8*ap$+PL8*x)=k!SsSRDp|#N&o@QNhN9lqie~k9B dFI3!)& Date: Tue, 2 May 2023 20:57:02 +0200 Subject: [PATCH 044/118] Add files via upload --- apps/polymath/app.js | Bin 383 -> 27615 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/polymath/app.js b/apps/polymath/app.js index 6aebe036ff27a1fd033e651b52616b0036409b30..4753cb4056db4053cce3c26d1207673644bb0485 100644 GIT binary patch literal 27615 zcmdsAZFd?+vi`1LG1uqp2{MvKLI{%=?>U2zg?FPEZ+1^s_scy94G0^7Bao4t>;HbA z=c($M1|i3awaM=7WT3jcy572~`UQ;AG&vkk`)`xQXnv8L_vSfXZj;{RJh_}sC&^iF zmY*j8<`;SLB%90uYQU3?jWoT=f4&}F<&`HdrjvR7rv7Aer+0o{Ilk(>yBPIno8NA1 zY=p|ryQ}GZI=_9F@67T!2av(L3ow`^&y&IRq(2``CzZ|QmyIMz(d8_BPRdmCvuQDAZ^cs2yI<=F`gxI+LU~pPp5|%6_kMlpSWBbfPB%9GA`_ z%R2S4sfc$%({z{?6iKA zy{;d%(lpIp_W}1$vVOOjlzU=uuFW!ceT3r{;cK0XGYe%7v|vjv(RAfDhk zt!AwcY1VE7N4PBvo&cwcP7n#D1-M;JjX^>V1lP(qV7{FA{Bk;jE@d*>USl*6Ft4YIvITfx-^}buj|I2iiyQDLu!n?D$nX>pVlxGbnu#CXRlNr*jHF z$8&m`wHBvYdw3ejh4ze3D2$PAc6X-cO~3S7pT>nwfIMtzABN~?JcyMga} z&~F33WzTU7_IdLvYo|@f3!8-U5`NQ%hwvf1R4{*-j}9EE6XyZq9OI#5{lEtT|2Ljf z_}qdI>flMfj+j<9VT0+Ax^;b2uzQ`^l;t7KH?A;luzMw3)0Bo4oms`v18}} zDKgGAk3j!LnobV~)z_^zH$&RuvFLxFrn^6+>Fj7wrL(-2eIAMaS(?`VlBRD@y3G^L z*<;fGXPP!n)3li1$D~i%FvMZ(KaWK}_R~kDkHuj%79NFuy;IGzEMKKfJ-(R!u+_Ye z_7~A_cI$}nCU#1F%D7JU-%P*WSs?oAq|LnYsPyZdVSCtGFjqY^zkSj_A1i-Cwiaa6 zUWz#_l;1!<*o}J9mb7Ubwk`H*k3helWv@t^zJM*j@?P)@=m**9yIuG&_lI}(gI`FW zvV_NIr2hqpgf_sb?*lUDw>uAPp0q>Lk$ymUiE1a{48^*=7*1-Yq4*ht4 zg*=3_TgnG}jJ7{^HswB(M}}-bECL9v^85kZRu~g#pkL*y%`M$T?APpFHxf^dv*BOc z+2S8Zi`Op?Tf=|0hQs65&F}`~v!;4`V^2 zc!qZ30bV%y;5-DYzJd)-I`4-koyoA@nJi8_lX|`L1~(#j1{djYuz-=4tqtDLp^Nr` zZa%oG)^YIW`daVIvU(Q=$-B@8O5-YHfoG^G)CCdkX9ca<01tGB{;hfrg>pnv4*EHC z1C1;PE6%s$$@*bDN4AG4>Uu}Q;2)og~+ek2aA5j=fg0^RoVb@b#ZX-;y~PiU$o&v^trfn-~-(^(G&S{i1vCT zj`qXs?cZ_g{^96#^T(ss%O4N3=l4Y`E=upeCtV8HM&mQW6-brF0WM1)7_PCtYhj(P zt%vdDh2G+YPIDK;)P>fypmuJK!3(!_U})s6TPRT?XY@TnDK90J^o?SvDg+Ho;ExVs zeQ^-o@E{dH-iTmz^|?qqv>R;PAY|i8qA?f&V6YdnnU}~$j4dy?(0E8;^7c|rD^zq9 z5GjQe)Y17+V4rP3E)osn<7fm2sgaW)0XJ9#l9snZBcO{1$p;V(CY!>QsmN9fg|ICx zh-Av6wO~D%l?V=M>O{=ueih_m1R?k$(2@nyhUX1lttl(=71TPKFM##TG?qoo4iN~w zP|WTE&62VMnK3h?M4%dJnlKln7A6j$5zsh8r9fc@(Ht7T{5|q6@z*CD+BG4=g1qGp zx#JzsEJ?9i2GU$+WciD!{Ck6x+UFRMRw;9%yPzy;YD#$nW&Bqh`?y7sDf^mL#mztq zcV$C!6Mhb4M%7Njj4C&ezz{gl*gi;6pGB6yFae}hm?Q!*HJW3(dI`c=trgq40;Gdl z>w*(%AP&NT8$5X}h|g|_EB`J*?1Mrpwg?0nL!J}>Rs%SI*E@o3`-F?#Kxk#8n>gG8 zg=7PI&?1VWPlM$DStVL%{8KvYOpBXk95}*)2C29UWC6&{po69?w>v()23kL|9rr>k z2)3|*VS8$cNaP99iQpjw$%UYE0Vi1m?jsN%r2zy}Y>>E5B2%UvSeTqFHZ{b+g+A3H z0t(1;-rnOuq!45tW6+?FR2Vd9AV>`{L!?3wGZZ`qu1OG$3PX_vObJDc9mLl=UV_@J z7mcCw6YmOU^=n^ln9|+){*A33f`5M)MMh8`eTvWj`R`!{h*V(}MA!T7dWv z(Gjrb1Q0bu88t8VKfSB5G7YgSKYNA*W2sFQiMuuurPW4bUPLQTs z>gXc@Ny0T->6yrkCwwu4okP&V0oTE*PR7jJgQhmD1j!0w%cGEJ4a7ECJ7u(@Ngoj- z$K!vw9Q=&y1t$=9HVjKnHvVT`l%4=>%Beh;EExhI$kURD4T91cL?EC*``!YLBCX88 z!6DG<6F_PqotteyfXD$=7cXjiycaME>?07e2BynkkPodU!y(M)sNE8zQLPn|6+p~c z05RG@zB$Mh&O!45Qjqr6%3Cr=V84NyIRkma;jOkI;xOwMf_oBM=~#~IbAndyC$9Gs z42p94Tv38<2!f=90?_*j-Z4}V-El)da3zW;xO)JOE@3p_VJ|@>@+=rdOSZxf-V1w~ z{In876QV$Nffxsez>LX3=$fd~!T@_Y~XDm-B+)t)e2SJoy)-uxQA{p`qD}s=S z{z@_cnM^pAGiv6BfGVI?OqTEH*^XTFdzJEf1u8)}6$l$7gf_v&p^VEVBN!@1X&kaN zorNT@xP+s8mz%|O|bZsD^nlaPShj08kJ*jm(l1~^WrLJp1rjKXo~Q;%PGUhp#m?Z;&j zg;|nzbg(#u7DrFY<+6PWl*m-fm0JQCM`FPkatCEd_+f>cQroTy=`&xRKVN^f{or{smXtpR$PEVig!goU294 zZP6Fz#v2gcWf!L?_##^oAnvcivG@q+aMl<%$}YrsAZ{RvchFUoc@yZykx*`a)gPr- z)|W{V{LL*O>0|E=qJEfEE}o5)rk?7^p=Fg0&J?wIX}0sTH5BUessoCTcyp&PB2?s)9O+-JoE%zj$8{xGa`2_tPX4#H>z^+EUQ`o%IdPV z>MTuft4UyQokh4=X9!K}EcjSwpyZvwI^G#HpoLMK5~XGF8IYe8LC(dJ#C)g%uTa*G zHmI7wcFo|M(-4*6(;wd_2R616_&E_AWFI>LaFRtZ?Be}0%kz$JiNkK+7ck=;n1+SM zal@C1S8>g0C7e$LBqzHF)uA__Ma)-UYXQ!~!Gs_01uppIl-XO?oaVUiGFbyG} zY1+zcOy6g5=kZw#lj;-Yv$!(jJ~YhuvUkv3Q9`F8E=-JEJMJ_}MR>|vijhzYrRY>O zI4G0`pTc{sTB6dn5h}X>y-WEO0?KKha)eElZZOd5H{zb?Lpt*L^HyzOfxFyV_?el+ z=f)i@EamQCA>L?u7MqRWEP<}|{paG+%D55ITL|_-H@Q(^Nkb~^Yd#imt+SX5>-0-o zoh!)3B8*>cVX+|wV>=XpKjfYNwgxd7M6%n*@X3p56?F4Gb=YQDCJXt@&!NH3biG=n zOHXsb&wN7_e8;bkL%y(()=>(Q+0?-K%sRFphYu1g&7so_Yg-;91;Z5~bee8P2%P~J ziZiK2xJWh;E;}P!W+KPMJ39j|-q{&&?e4q4)n|YOE-$veE^&FBos@J*H0WmWb`fxu z7x|e{umd>;TqS2-H<%2<<$a9dQaFAdX!0r>^Rp$xB^zD87%qqMeCD`HumvuM^3?5g z(T?m};A$F5TrFA!E-b`DdY~KbmP`h*rj!;utO8ZjXHt=8oXnSTrI91zjT*W5W#gAZ z(Wm?%RenVT{}>OmU#v5NN;L@iVHjwF-0Z0G=BWr5D2%33M+R9~{@DRTd9HFo(ajwR z`6dIMJf4JnhAIh#jgAv44NLYbgtU)Pq9S_>FezjbQD!c=3VYF&t)&O)+L}u}bR(iE zRebCFi}D=lfhoeAVu0A2ualDW;Pj&K4hMv|%CqpUK%A|LDB>*BGrVXj0OL*;g;L5h zbT=on%hzoHI|=dogzj4Mb=J(i@vaZ*ZBFFt8Y&-^uX89xASH0)NOcBZ_fAb5SzBlJ z3Im{_jnr^zXh5h&aRI_HYK-@|Fu(0vmgr+gHkNM7TIsf|tq53TdG*0?diR&*gEl&2 zO<|P?7oD-$@5M7VI_VzpC-itRxE zE^+O`ypVwlQ%P65`x2KcT}fAAQ{vizDCnln64#^4b+Zfng0AdS;6`D>z@Y1TL4?85 zMS+ug__2wMi!Mz74Ijz_2$5+RhId%zenMcnBGHQU%Y;CgrL>ut`D_k3EzP( z{heQFw)}4^u0B?#awJ5$U<0ml82kD&xyoTE-O{qe54fPKFH71eg=LAjN=n+3k}lN+ zaoUD-(ZoVy5Z9cT#t^QBAhjnhhoYb+TpLQ6g=<6EDO?RD7jyzgBaI7~DRkILENY2@ zPEtfG=Z7Nj9lVJ{5e%1<*hvz2=NrkAgjtScLjl16@;x|J-1h$jh8-fs-8exvT8=ie zBKI$u2&bPYu(>7$ig+3DoT2C7I<=*#z@qj?BAO>7H{NJZch<(QN(2rszIv#quE zom?mFB&sb17EwQuGvM@rpILyCafLNCv}?vl-`Da^gPT&{15+msH~G0UkwWr_3~) zxd%8XYxz)!OOeTyg(UHiD+)QVQ(S|YQ57Y2S`n_z0UAW9?37Fa(+G>CHGz-WxTqF% z(DLtl!A2!Z9c8XaD@{_VGjJm%X^?2>U0k`kjW%B}_*ljZRC%FNoQyF+x)cZ_=?t)J zz$Nz*m(B;ejtgmGTt!cTtHq$e6>3S>umY~J3%LFsWN;*Z^H#?RL%cQ6vv;tR5{?vN z+i)cvyM=4gp=P)N)#NQugB-OGPuY>9+bB(h8s^Z5X;%H z@Cj38@e=t1aibVOs6~ziaUxHm3=t~ijZmRmj0)TsRhI)2Trb59T-o%8K`XK>tGJ?Z zVOD*46rp4)D>cJb9%piP#+l3m5->h$76N!z02m)y-?J(WfSP}Gh%>}a`=X5~p=MvF z)=+l(X`epJn*Q~xgixoxpCloaKXJdn?`?B|u);x#R8=LTB9&F@MS-aW3Ob=4nz#{F zCr@r%#jF#cPK&ewMq(JgZKxC>17QRg2r#BaxYQ5;ZF(gfMT-f9)KJ4U*}&0oL6{Z+ zqHv)fhk~dU9#EpQ5tmp-Nw_9B8;Q$7?%>4ri9jQ^&J0qDPfA$oWIMQy+{8FVyXR)spwXr zWGy=tRhXET@j@F!RTw-niEK;5TS1>}Y&CO`&?ifCKJc$(@mMDb>nkT3$@$d>CpLqe zEuAsQ69t_fBdlSlHc{pol!>Q1O(1$P)S7q;ZeGA9V1O}(a;p~ZA-PopXC3&!*&y4X zap}>Gq+K=W#)op4MQ~H2O`!q~jdW9bn3P11U!}Tx;k*hip7gu$ccSSai8p-v3}`k0 z|GEWgpwq9_+89Y1{*mqpI%OI6Me{rJ=HTSO6<53y3nMg1(4Fs4l5c1g30RO-*hxsR z9>$_koj`&t#jM-3sSQKa&Wdvr$QSmJjTIB67^+SMGP|wQyaQG16xXuTDY?R&LKaC2 zeDi?N=~Y~|HNYb*8@9$`})QAe}8-Px_#b$_4bE$=XLq@z-Dvx>w&-U*FG=t z^PS0Ao{T25(RrRsudkBnVv@}I(|0+31N16SW>fs$XK$V?F7ipT$dex0t|#MZ?;O8S zn!nGlZt-)VlVNf`n)Tkj%X?Qd{1gT#6LpNi=lNhX$%`Kvoh8>ZqJK5c=gDBQ^3}tg zosVB7gXxui_jJ~~%<+?>z1eiKQ;Y|_{&*%ShU4j3Zwzi5q;-DPTl_fh&97&FA6@3t z>-o2LdzQFK|FhnF4i)svtF`(?GN!D3{xs_rSYJ-x!!!e!C0X<)^CX!=pV92y7{ArJ z7!C9JjE0-%y>s#!?)1md|8IGJUfJEM)wcGY9pDW=3o_)dr5;Yl)2qsG2S4e0nePmS zo8Qt*6gvr00Fm|YAp|LG9qoWe%S5bfKHb|PLC}+dHB$1@VE8?e3lki@?|WCt4U`>n z{7<9v`2~L8HBD+9$-djr*U_)ME_aS@0@~~XlN>6GBtZJP+ULn6UnFh(a&1KdQHDw~ zBG=t-`Tkw9_pCwa`RJxv-~0uvlSCAOQhR#Rn_uj7UnWnJN`(X|X$S5%t88vJHq%;N zRLc>oFhf7+|b1W#$gRsM}Fu!nPz z{gP;EMCVpg+gGs{zfIHaJLS9Yl9`emi245^`H|DQ z)W>#cyP_hjjGvsw?@seKr}^8{(*aU;jFcs|kP|BtTlv z6NPK5Ob87XV9W=g*PN&c92Z;k8=b{Do2_2~a6B zl2^^Min%6|-a+E24rpscIz!qQ33V58fuMwuWT;fJdQifE{4pQT@?XgMlVyqF**Kq^ zFE2W0!>w}t+1lNy9hkF;=y2!r#gPgd$-TMHaw30iJR6UO6D(%P5PmlA^nO-G+|(dIVlNjdB}*gX{5FAuvnS2nWAS4)ELUwcVPL9wR;U zZZD@oN2SM~RaazPPT3>=^Gi7n!yfA$qZPR!P1WbYBa9G8Pm^Y&&TO%p0Bx4{K`KZP zkwr?lnxDfZNq;*S?Q-T;DA>Qtulk^q@IA+V1~K2iMfTh5C)oG*K~ zRCe##KK4jd`P&T|*9_!*)7rtoUcFvx*7mX1A{UO{ClCh)?j^JbQ^;g~u|eh-5{=)s zbTJrDu|X=^ku^7hRWU&05OH7c9PIBNG{FY3=QEx>SHiiPViGEqFlaMPp6%>6YmNFd z3<%M*;Z6{ZSVm)J4kQ3Ni>J#-o14tpNDDBh7Akijc_62~6s;gp-Q$?L#vrY6H+g3$ zB5T8<$3k~^3;)?x@oe0~UkspqlCz;)=5{(5kkIp_VoE&^bDwNJt<|}5qx;@4Bq{q# z0CytL0&!<>HN8B%=v^I7&+|&Xxw(~)&nKg?R@+WoE`(*2k@mLmpJ}2wzUaNnnMZJ% zdQ2%B2h}iRwMJV1ERh?L$i;-p(Ad>}^SD-oeDvg}wZ>@ z0c-X}aW9u4Zdal<_z~RYlY63N>@_>0u=@$5t&V-qUh}?MYy6srBlssH^Oa7efVwXjU=w;%7?b8$|citQiTn}TD7mgFO~9CiFB%KE?Jy^R4DoJV!BAiJ^Vo+-22&eAFe9S$9Zyg zJ?9@FdWXXp{w&c(3-LbIpA-7W%gQg%?Gn3#=rK7gvY9@fdf9 z*!|c&BJK&t+=}vV9hpqHNCc76#7p;jYu2^pewy11zSIu0uNd=TGq^g3_YjL#$TgD2 zy``K{>s=|&bF5~0a{mvNmfJX|_-g}Jj$glJRHG4YK_0}c*)(RFA-sJ2h%}L=-{UqJ z7pmtt6U|U{2jd+xE-%^0UBvp8aTh0AVE84cRl?a2gBW%k9B)Smn`d~oyL-{=m%F^~ bRtdYiqToQ-ruop6LpiC5K zQ(B7y<71<&cdu;UcXK1If`OBI%Fgr|5?ak0k7@53uw3XooZBlWsI5j8K(3CJ1tN0Z z9T_i7$dvnaSVW2h*2;{8F5lfCRc?(sGLlv-!c5?(47rYp>&(ky${~4!nIQ{npd1=> zguxi|W)~yV4?MqimD?*D5 zHx7{hXpo%!l)l$h6w?~(vbPzY8*ap$+PL8*x)=k!SsSRDp|#N&o@QNhN9lqie~k9B dFI3!)& Date: Tue, 2 May 2023 21:01:30 +0200 Subject: [PATCH 045/118] Delete polymath.js --- apps/polymath/polymath.js | 238 -------------------------------------- 1 file changed, 238 deletions(-) delete mode 100644 apps/polymath/polymath.js diff --git a/apps/polymath/polymath.js b/apps/polymath/polymath.js deleted file mode 100644 index 153a72036..000000000 --- a/apps/polymath/polymath.js +++ /dev/null @@ -1,238 +0,0 @@ -// Clock with date day and moon based on the "Anton Clock" - -//require("Font4x4").add(Graphics); - - -Graphics.prototype.setFontmoonphases = function() { - // Actual height 23 (23 - 1) - return this.setFontCustom( - atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACAH/nAH/nAAACAAAAAAAAAAAAAHwAAH4AAAAAAAAAAGAAAH4AAHgAAAAAAAAAAAQgAAQhAAQ/AA/4AH8gAGQgAAQjAAR/AA/4AH4gAEQgAAQgAAA4APg8APwMAY4EAQ4EB///AQcEAQcMAcP8AeP4AADwAAAAAB4AAD8AAHOAAECBAECDAGGGAH8cAD44AABgAAHAAAMAAAY+ABz/ADDDAGCBAECBAADnAAB+AAA8AAAAAAAAAAB8AAD+ADz/AH+DAGeBAEOBAEPBAELhAH5zADw6ABg+AAEeAAF/AAHnAAGDAAEBAAABAAAAAAAAAH4AAHwAAAAAAAAAAP/gA//4B8B8DgAOGAACEAADAAAAAAAAEAADGAACDgAOB8B8A//4AP/gAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAP8AAAAAAAAAAAAAAH4AAf+AB//gD//wD//wH//4H//8P//8P//8P//8P//8P//8P//8P//8H//4H//4D//wB//gA//AAf+AADwAAAABAAAxAAA+AAA8AAAAAAAAAAAAAABgAABgAABgAABgAABgAABgAAAAAAAAAAACAAAHAAAHAAACAAAAAAAHAAA8AAHwAA+AADwAAHAAAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAP8AAAAAAAAAAAAAABABADABACABAH//AH//AAABAAABAAABAAAAAAAAAAAAAHAHAHAHAEAPAEAbAEAzAGBjAHPDAD+DAD8DAAADAAAAAAAAADAPAHADAGABAEEBAEEBAEGBAGODAH7HAD7+AAh8AAAAAAA4AAB4AAHYAAMYAAYYABwYADgYAH//AH//AAAYAAAYAAAAAAAAAAAGAH8PAGEDAGEBAGEBAGEBAGGDAGGDAGD+AAD8AAAQAAAAAA/4AB/+ADyPAGGDAEEBAEEBAEGBAGHHAHD+AAB8AAAAAAAAAAAAAHgAAGABAGAHAGAeAGB4AGHgAGeAAH4AAHgAAEAAAAAAABx8AD7+AH/HAGOBAEEBAEEBAGODAH/HAD7+ABx8AAAAAAAAAB8GAD+HAHvBAGDBAEBBAEBBAGBDAHjOAD/8AB/4AAAAAAAAAAICAAcHAAcHAAICAAAAAAAAAAAAAAABAHAzAHA+AHA8AAAAAAAAAAAAAAGAAAHAAANAAANgAAZgAAYwAAwwAAwYAAgYABgIABAMAAAAAAAAAAAAABAMABgIAAgYAAwQAAQwAAYgAAJgAANgAAPAAAHAAAGAAAAAAAAAAAAAAHAAAGAAAEAHAED3AECHAGGAAH8AAD8AAAwAAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACQAACYAAGIAAEMAAMGAAYDAAwBgBgA8PAAH4AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA5nAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8F//oCf+QBjxgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+L//0N//sEf+ICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+b//2J//kMP8MEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+X//6Y//GIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+X//6QBgCYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+QAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+fAA+YAAGQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f4H+eAAeYAAGQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8PgB8eAAeYAAGQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH8P4PAA8OAAcYAAGYAAGQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD4HwHAA4OAAcMAAMYAAGYAAGQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB4HgDgBwGAAYMAAMIAAEYAAGQAACQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACQAACYAAGIAAEMAAMGAAYDgBwB4HgA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACYAAGYAAGMAAMOAAcHAA4D4HwB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACYAAGcAAOOAAcPAA8H8P4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACYAAGYAAGeAAePgB8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACYAAGeAAef4H+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACYAAGfgB+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACf//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQH4CX//6f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEY//GX//6f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMf+MJ//kf//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEf+IN//sL//0f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABjxgCf+QF//oP//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAH4AA8PAB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAP8AAAAAAAAAAAAAD///D///CAADCAADCAABAAAAAHAAAB4AAAfAAAD4AAAeAAADAAAAAAAACAABCAADCAADD///D///AAAAAAAA'), - 32, - atob("GAgKDAwUEwQICBgXBggGBxgMDAwMDAwMDAwHBw4ADgsYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgIBwg="), - 24|65536 - ); -} - -Graphics.prototype.setFontInknutAntiqua24 = function() { - // Actual height 24 (23 - 0) - return this.setFontCustom( - atob('AAAAAB4AAD4AAD4AAD4AABwAAAAAAAAAAAAAAAAPAAD/AA/4AP+AD/gAf4AAeAAAAAAAAAAAAYAAB/AAD/gAH/wAP/4APH4AcB4AcA4AcA4AcA4AeA4AfBwAf/wAP/gAH/AAD+AAA4AAAAAAAAAAIAYAcAYAcA4Af/4Af/4Af/4Af/4AcAYAYAYAAAQAAAAACAIAGAYAOA4AeB4AcD4AcH4AcP4Aef4Af94Af54APx4APh4ADH4AAH8AAAAAAAAACAAAGAAYOAAYeAA4cCAwcHBwefBwf/ngP//gPz/AHj+ACB8AAAwAAAAAAAwAABwAAHwAAPwAAfwAA8wABwwADgwAPBwAP//wf//wf//wf//gAAwAAAwAAAwAAAAAAHAGD/AOH/AMHvgMHngcHnwYHn44Hj/wHj/wfh/gfw/AAAeAAAAAAAAAAAAAAB8AAP/AAf/gA//wB//4D8D4HwB4HsA4POA4ePA4cPh44H/w4H/gAD/AAB+AAAYAAAAAAAAA/gAAfgAAeAAYeAB4eAHweAfAeB8AeHwAePAAe8AAf4AAfgAAeAAAYAAAAAAAAAAAAAeADg/APx/gP7/gf//w/+Dw4+Bw4fBw4fBw8fhw//zwf3/gfj/gPD/AAB+AAAYAAAAAAAAAA+AAD/AAH/gYH/wYP/w4OD5wcA5wcAzgeAPgfAfAP/+AP/8AH/4AD/wAB/AAAAAAAAAAAAAAHB4APj4APj4APj4APBwAAAAAAAAA'), - 46, - atob("CAkTDBANEQ8SEBISCA=="), - 24|65536 - ); -}; - -Graphics.prototype.setFontInknutAntiqua66 = function() { - // Actual height 66 (65 - 0) - return this.setFontCustom( - atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAH/AAAAAAAAAP/AAAAAAAAAf/gAAAAAAAAf/gAAAAAAAA//wAAAAAAAA//wAAAAAAAA//wAAAAAAAB//gAAAAAAAA//gAAAAAAAA//gAAAAAAAA//AAAAAAAAAf+AAAAAAAAAP8AAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAfAAAAAAAAAH/AAAAAAAAB//AAAAAAAAf//AAAAAAAH///AAAAAAB///8AAAAAA////AAAAAAP///wAAAAAD///8AAAAAA////AAAAAAP///wAAAAAD///8AAAAAA////AAAAAAf///gAAAAAH///4AAAAAAf//+AAAAAAAf//gAAAAAAAf/4AAAAAAAAf+AAAAAAAAAfgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAf/gAAAAAAAB//8AAAAAAAH//+AAAAAAAP///gAAAAAAf///wAAAAAA////4AAAAAB////8AAAAAD////8AAAAAH////+AAAAAP/////AAAAAP/////AAAAAf/////AAAAAf+AH//gAAAA/wAA//gAAAA/gAAf/gAAAB/AAAH/gAAAB/AAAD/wAAAD/AAAB/wAAAD+AAAB/wAAAD+AAAB/wAAAD+AAAA/wAAAD+AAAA/wAAAD/AAAA/gAAAH/AAAA/gAAAH/AAAA/gAAAD/gAAA/gAAAD/gAAB/AAAAD/wAAB/AAAAD/8AAD/AAAAD//AAH+AAAAD//4A/+AAAAB/////8AAAAB/////8AAAAA/////4AAAAA/////wAAAAAf////gAAAAAP////gAAAAAP////AAAAAAH///+AAAAAAB///4AAAAAAA///wAAAAAAAP//AAAAAAAAD/8AAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAA4AAAAHgAAAD4AAAAPgAAAD8AAAAfgAAAD8AAAAfgAAAD8AAAA/gAAAD8AAAB/gAAAD+AAAD/gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD/gAAA/gAAAD/AAAAfgAAAD+AAAAfgAAAD+AAAAfgAAAD8AAAAPgAAAD4AAAAPgAAADwAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAHgAAAAD8AAAPgAAAAD8AAAfgAAAAH4AAA/gAAAAP4AAB/gAAAAfwAAD/gAAAA/wAAD/gAAAA/wAAH/gAAAB/gAAP/gAAAD/gAAf/gAAAD/gAA//gAAAD/AAB//gAAAD/AAB//gAAAD/AAD//gAAAD/AAH//gAAAD/AAP//gAAAD/gAf//gAAAD/gB///gAAAD/wD///gAAAD/8P/f/gAAAD///+f/gAAAD///+f/gAAAD///8f/gAAAB///4f/gAAAB///wf/gAAAB///gf/gAAAA///Af/gAAAA//+Af/gAAAAf/8Af/gAAAAf/4Af/gAAAAP/wAf/gAAAAH/AA//gAAAAB8AH//gAAAAAAAP//wAAAAAAAP//wAAAAAAAP//wAAAAAAAP//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAADwAAAAAAcAAH4AAAAAAfAAH4AAAAAA/AAPwAAAAAA/AAfwAAAAAA/AA/gAAAAAB+AB/gAAAAAB+AB/AAAAAAD+AD/AAAAAAD8AH/AAAAAAH8AH+AAAAAAH4AH+AAHgAAP4AH+AAPwAAP4AH/AAfwAAfwAH/AA/4AAfwAH/gD/4AA/gAH/4P/8AB/gAH////+AD/AAD/////AH/AAD/////wf+AAD///////+AAB///v///8AAB///P///8AAA//+H///4AAA//8H///wAAAf/4D///wAAAP/wB///gAAAP/gB///AAAAD+AA//+AAAAA4AAf/8AAAAAAAAP/wAAAAAAAAH/AAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAB8AAAAAAAAAH8AAAAAAAAAP8AAAAAAAAAf8AAAAAAAAA/8AAAAAAAAB/8AAAAAAAAH/8AAAAAAAAP/8AAAAAAAAf/8AAAAAAAA//8AAAAAAAB/38AAAAAAAH/n8AAAAAAAP/H8AAAAAAAf+H8AAAAAAA/4H8AAAAAAD/wH8AAAAAAH/gH8AAAAAAP/AH8AAAAAAf8AH8AAAAAA/4AH8AAAAAD/wAH8AAAAAH/gAH8AAAAAP/AAH8AAAAAf8AAH8AAAAA////////8AA////////4AB////////4AB////////4AB////////wAD////////wAD////////wAD////////gAH////////gAH////////AAH////////AAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH4AAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAH4AAAAPgAAAH4AAAH/gAAAH4AAD//wAAAPwAB///wAAAPwAf///wAAAPwA////4AAAfgA////4AAAfgA//D/8AAAfgA//D/8AAA/AA//D/8AAA/AA//B/+AAB/AA//B/+AAB+AA//A//AAD+AA//A//AAD+AA//A//gAH8AA//Af/wAP8AA//Af/wAP4AA//AP/4A/4AA//AP/+D/wAA//AH////wAA//AH////gAA//AD////gAA//AD////AAA//AB///+AAB//AB///+AAP//AA///8AAf//gAf//4AAf//gAP//wAAf//gAH//gAAf//gAD//AAAAAAAAB/8AAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8AAAAAAAB///gAAAAAAP///4AAAAAA////+AAAAAB/////AAAAAH/////gAAAAP/////wAAAAf/////4AAAA//////8AAAB//////8AAAD//////+AAAH//////+AAAP//4B///AAAf/+AAH//AAA//wAAB//AAB//AAAAf/AAD/+AAAAP/gAD/4AAAAH/gAH/wMAAAD/gAP/geAAAD/gAP+B+AAAB/gAf8B/AAAB/gA/4B/gAAB/AA/wB/gAAB/AB/wB/wAAB/AB/gB/4AAD/AD/AB/+AAD+AH+AA//gAP+AH8AA//8A/8AP8AA/////8AP4AAf////4AfwAAf////4AfgAAP////wAfgAAH////gAPAAAH////AACAAAD///+AAAAAAB///8AAAAAAA///4AAAAAAAf//wAAAAAAAH//AAAAAAAAB/8AAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//4AAAAAAAH//4AAAAAAAD//8AAAAAAAD//8AAAAAAAD//wAAAAAAAD//AAAAAACAD/8AAAAAAPAD/8AAAAAA/AD/8AAAAAD/gD/8AAAAAP/gD/8AAAAA//AD/8AAAAD/8AD/8AAAAP/wAD/8AAAAf/AAD/8AAAB/8AAD/8AAAH/wAAD/8AAAf/AAAD/8AAB/+AAAD/8AAH/4AAAD/8AAf/gAAAD/8AB/+AAAAD/8AD/4AAAAD/8AP/gAAAAD/8A/+AAAAAD/8D/4AAAAAD/8P/gAAAAAD/8//AAAAAAD///8AAAAAAD///wAAAAAAD///AAAAAAAD//8AAAAAAAD//wAAAAAAAD//AAAAAAAAD/8AAAAAAAAD/wAAAAAAAAD/gAAAAAAAAD+AAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAD/wAAAAAAAAH/8AAAAAAAAf/+AAAAf4AA///AAAB/+AB///gAAD//AB///wAAH//gD///4AAf//wH///4AAf//4P///8AA///8P///8AB///+f///+AD///+////+AD/////gD/+AH////+AA//AP////8AAP/AP+D//4AAH/AP4A//wAAD/AfwAf/4AAD/AfwAP/8AAB/gfgAH/8AAB/gfgAD/+AAA/g/gAD/+AAA/g/wAB//AAA/gfwAA//gAA/gf4AA//wAA/gf8AD//wAB/Af/AP//4AB/Af/////8AD/Af//////AH+AP///z//gf+AP///j////8AH///B////4AH//+B////4AD//8A////wAB//4Af///gAA//wAf///AAAf/AAP///AAAP8AAH//+AAAAgAAD//4AAAAAAAB//wAAAAAAAAf/gAAAAAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAD//gAAAAAAAH//4AAAAAAAf//8AAAAAAA///+AAAAAAB////AAAAAAD////gAAMAAH////gAAfAAP////wAA/gAP////4AA/AAf////4AB/AAf////8AD+AA/+A//8AD+AA/wAH/8AH8AB/gAB/+AP8AB/AAAf+Af4AD/AAAP+Af4AD+AAAH+A/wAD+AAAH+B/wAD+AAAD+D/gAD+AAAB+H/AAD/AAAB4P/AAH/AAAAwf+AAD/gAAAA/8AAD/wAAAD/8AAD/4AAAH/4AAD/8AAAf/wAAD//AAD//gAAD//8Af//gAAB///////AAAB//////+AAAA//////8AAAA//////4AAAAf/////wAAAAP/////gAAAAH/////AAAAAD////8AAAAAB////4AAAAAAf///gAAAAAAH//+AAAAAAAB//wAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAB8AAAAAD/AAH+AAAAAP/gAP/AAAAAP/gAf/gAAAAf/wAf/gAAAA//wA//wAAAA//wA//wAAAA//wA//wAAAA//wA//gAAAA//gA//gAAAA//gA//gAAAA//AA//AAAAAf/AAf+AAAAAP+AAP8AAAAAH4AAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='), - 46, - atob("FhczISslMCkyKzMyFg=="), - 66|65536 - ); -}; - -Graphics.prototype.setFontInknutAntiqua88 = function() { - // Actual height 88 (87 - 0) - return this.setFontCustom( - atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAA/4AAAAAAAAAAAAH/wAAAAAAAAAAAA//gAAAAAAAAAAAH//AAAAAAAAAAAA//+AAAAAAAAAAAD//4AAAAAAAAAAAf//gAAAAAAAAAAB//+AAAAAAAAAAAH//4AAAAAAAAAAAf//gAAAAAAAAAAB//+AAAAAAAAAAAH//4AAAAAAAAAAAf//AAAAAAAAAAAB//8AAAAAAAAAAAH//gAAAAAAAAAAAP/8AAAAAAAAAAAAf/gAAAAAAAAAAAA/8AAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAP8AAAAAAAAAAAAP/wAAAAAAAAAAAf//AAAAAAAAAAAf//8AAAAAAAAAAf///wAAAAAAAAAf////AAAAAAAAAf////wAAAAAAAAf////wAAAAAAAAf////gAAAAAAAAf////gAAAAAAAAf////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAAP////gAAAAAAAAA////AAAAAAAAAAD///AAAAAAAAAAAH//AAAAAAAAAAAAf/AAAAAAAAAAAAB/AAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAB//wAAAAAAAAAAAf//wAAAAAAAAAAH///wAAAAAAAAAB////wAAAAAAAAAP////gAAAAAAAAB/////gAAAAAAAAP/////AAAAAAAAB/////+AAAAAAAAP/////4AAAAAAAB//////wAAAAAAAP//////gAAAAAAB///////AAAAAAAP//////8AAAAAAA///////4AAAAAAH///////gAAAAAAf//////+AAAAAAD//AB///8AAAAAAf/gAAf//wAAAAAB/8AAAf//AAAAAAH/gAAAf/+AAAAAA/8AAAAf/4AAAAAD/gAAAA//gAAAAAf+AAAAD/+AAAAAB/wAAAAH/4AAAAAH/AAAAAP/gAAAAAf8AAAAA/+AAAAAD/wAAAAD/4AAAAAP/AAAAAH/gAAAAA/8AAAAAf+AAAAAD/wAAAAB/4AAAAAP/AAAAAH/gAAAAA/+AAAAAf+AAAAAD/4AAAAB/wAAAAAP/gAAAAH/AAAAAA//AAAAAf8AAAAAD/+AAAAD/gAAAAAP/8AAAAP+AAAAAA//4AAAB/4AAAAAD//wAAAP/AAAAAAH//wAAB/8AAAAAAf//4AAf/gAAAAAB////A//+AAAAAAD///////wAAAAAAP///////AAAAAAAf//////4AAAAAAB///////AAAAAAAD//////8AAAAAAAP//////gAAAAAAAf/////8AAAAAAAA//////gAAAAAAAB/////8AAAAAAAAD/////gAAAAAAAAH////8AAAAAAAAAP////gAAAAAAAAAP///4AAAAAAAAAAf//+AAAAAAAAAAAf//gAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAHgAAAAAB8AAAAAB+AAAAAAPwAAAAAP8AAAAAB/AAAAAA/wAAAAAP8AAAAAD/AAAAAA/wAAAAAP8AAAAAH/AAAAAA/4AAAAA/8AAAAAD/gAAAAH/wAAAAAP+AAAAA//AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA//AAAAAf8AAAAAD/4AAAAA/wAAAAAP/gAAAAD/AAAAAA/8AAAAAP8AAAAAD/gAAAAA/wAAAAAP8AAAAAB/AAAAAA/gAAAAAH8AAAAAD+AAAAAAfwAAAAAHwAAAAAA8AAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAB8AAAAAAAPgAAAAPwAAAAAAB/AAAAB/AAAAAAAP8AAAAP8AAAAAAB/wAAAB/wAAAAAAP+AAAAH/AAAAAAA/4AAAA/8AAAAAAH/AAAAH/wAAAAAA/8AAAA//AAAAAAH/gAAAH/8AAAAAA/+AAAAf/wAAAAAD/4AAAD//AAAAAAf/AAAAf/8AAAAAB/8AAAD//wAAAAAP/wAAAf//AAAAAA/+AAAD//8AAAAAD/4AAAf//wAAAAAP/gAAB///AAAAAA/+AAAP//8AAAAAD/4AAB///wAAAAAP/gAAP///AAAAAA//AAB///8AAAAAD/8AAP///wAAAAAP/wAB////AAAAAA//gAf///8AAAAAD//AD/9//wAAAAAP/+A//n//AAAAAA/////8f/8AAAAAD/////h//wAAAAAH////+H//AAAAAAf////wf/8AAAAAB////+B//wAAAAAH////wH//AAAAAAP///+Af/8AAAAAA////wB//wAAAAAD///+AH//AAAAAAH///wAf/8AAAAAAf//+AB//wAAAAAA///wAH//AAAAAAB//+AAf/8AAAAAAD//wAB//wAAAAAAP/8AAH//AAAAAAAP/gAB//8AAAAAAAf4AA///wAAAAAAAAAAP///gAAAAAAAAAB///+AAAAAAAAAAH///4AAAAAAAAAAP///gAAAAAAAAAA////AAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAB4AAAAAAAADgAAAP4AAAAAAAAP4AAA/gAAAAAAAA/gAAH+AAAAAAAAH+AAA/wAAAAAAAAf4AAH/AAAAAAAAB/AAA/4AAAAAAAAP8AAD/gAAAAAAAA/wAAf8AAAAAAAAH+AAD/wAAAAAAAAf4AAf+AAAAAAAAB/gAD/4AAAAAAAAP8AAP/gAAAAAAAA/wAA/+AAAAAAAAH/AAD/wAAAAAAAAf4AAP/AAAHwAAAD/gAB/8AAA/gAAAP8AAD/4AAH+AAAB/wAAP/gAA/8AAAH/AAA/+AAH/4AAA/4AAD/8AA//gAAH/gAAP/4AP//AAAf8AAA//8H//+AAD/wAAD//////8AAf+AAAP//////4AD/4AAAf//////wA//AAAB///////9//8AAAH//////////gAAAP///8/////+AAAA////j/////wAAAD///+H/////AAAAH///wf////4AAAAf//+A/////AAAAA///wD////4AAAAB//+AH////gAAAAD//wAf///8AAAAAH/+AA////gAAAAAP/gAB///8AAAAAAf8AAD///gAAAAAAOAAAP//8AAAAAAAAAAAf//AAAAAAAAAAAAf/wAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAH8AAAAAAAAAAAAA/wAAAAAAAAAAAAH/AAAAAAAAAAAAA/8AAAAAAAAAAAAH/wAAAAAAAAAAAB//AAAAAAAAAAAAP/8AAAAAAAAAAAB//wAAAAAAAAAAAP//AAAAAAAAAAAB//8AAAAAAAAAAAf//wAAAAAAAAAAD///AAAAAAAAAAAf//8AAAAAAAAAAD/9/wAAAAAAAAAA//n/AAAAAAAAAAH/8f8AAAAAAAAAA//h/wAAAAAAAAAH/4H/AAAAAAAAAA//Af8AAAAAAAAAP/4B/wAAAAAAAAB//AH/AAAAAAAAAP/4Af8AAAAAAAAB/+AB/wAAAAAAAAP/wAH/AAAAAAAAD/+AAf8AAAAAAAAf/wAB/wAAAAAAAD/8AAH/AAAAAAAAf/gAAf8AAAAAAAD/8AAB/wAAAAAAA//gAAH/AAAAAAAH/8AAAf8AAAAAAA//AAAB/wAAAAAAH//////////+AAAf//////////4AAB///////////gAAP//////////8AAA///////////wAAD///////////AAAf//////////4AAB///////////gAAP//////////+AAA///////////wAAD///////////AAAf//////////8AAB///////////gAAH//////////+AAA///////////wAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB/wAAAAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB/wAAAAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB/wAAAAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB+AAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAfwAAAAAAfAAAAAB/gAAAAA/+AAAAAH8AAAAB//4AAAAA/wAAAD///gAAAAD/AAAH////AAAAAP4AAP////8AAAAB/gAD/////wAAAAH+AAP/////gAAAA/wAA/////+AAAAD/AAD//g//4AAAAP8AAP/+D//wAAAB/gAA//4H//AAAAH+AAD//gf/+AAAA/4AAP/+B//4AAAD/AAA//4D//wAAAP8AAD//gP//AAAB/wAAP/+A//+AAAH+AAA//4B//4AAA/4AAD//gH//wAAH/AAAP/+AP//AAAf8AAA//4A//+AAD/wAAD//gD//8AAf+AAAP/+AH//4AD/4AAA//4Af//wAf/AAAD//gA///gH/8AAAP/+AD//////gAAA//4AH/////+AAAD//gAf/////wAAAP/+AA//////AAAA//4AD/////4AAAD//gAH/////AAAAP/+AAf////8AAAD//4AA/////gAAA///gAB////8AAAf///AAH////gAAD///8AAP///+AAAP///wAAf///wAAAf///AAA///+AAAB///+AAB///gAAAH///4AAD//8AAAAAAAAAAAD//AAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//8AAAAAAAAAAB///+AAAAAAAAAAf///+AAAAAAAAAP////+AAAAAAAAD/////+AAAAAAAAf/////8AAAAAAAH//////8AAAAAAA///////4AAAAAAP///////wAAAAAB////////gAAAAAP///////+AAAAAB////////8AAAAAP////////4AAAAB/////////gAAAAP/////////AAAAB/////////8AAAAP///8Af///wAAAB///4AAD///gAAAP//8AAAB//+AAAB///AAAAB//4AAAH//wAAAAD//wAAA//8AAAAAD//AAAH//gAAAAAH/8AAA//4AAAAAAP/wAAD//AGAAAAA//AAAf/4B4AAAAB/8AAD/+APwAAAAH/wAAP/wD/AAAAAf/AAB/+AP+AAAAA/8AAP/wA/8AAAAD/gAA/+AD/wAAAAP+AAH/4AP/gAAAA/4AAf/AA//AAAAH/gAD/4AD/+AAAAf8AAf/AAP/8AAAB/wAB/4AAf/8AAAP/AAP/AAB//8AAB/4AA/8AAH//8AAf/gAH/gAAP///gf/8AAf8AAA///////wAD/gAAD//////+AAP+AAAH//////4AB/wAAAf//////AAH+AAAA//////4AA/4AAAB//////AAA/AAAAH/////8AAA4AAAAP/////gAAAAAAAAf////8AAAAAAAAA/////gAAAAAAAAB////8AAAAAAAAAD////AAAAAAAAAAH///4AAAAAAAAAAH//+AAAAAAAAAAAH//gAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///8AAAAAAAAAAH///4AAAAAAAAAAP///gAAAAAAAAAA///+AAAAAAAAAAD///8AAAAAAAAAAP///gAAAAAAAAAA///wAAAAAAAAAAB//8AAAAAAAAGAAH//AAAAAAAAB8AAf/8AAAAAAAAPwAB//wAAAAAAAD/gAH//AAAAAAAA/+AAf/8AAAAAAAP/8AB//wAAAAAAD//gAH//AAAAAAA//4AAf/8AAAAAAP/+AAB//wAAAAAD//gAAH//AAAAAAf/8AAAf/8AAAAAH//AAAB//wAAAAB//wAAAH//AAAAAf/8AAAAf/8AAAAH//AAAAB//wAAAB//wAAAAH//AAAAf/8AAAAAf/8AAAD//AAAAAB//wAAA//4AAAAAH//AAAP/+AAAAAAf/8AAD//gAAAAAB//wAA//4AAAAAAH//AAP/+AAAAAAAf/8AD//gAAAAAAB//wA//4AAAAAAAH//AH/+AAAAAAAAf/8B//wAAAAAAAB//wf/8AAAAAAAAH//H//AAAAAAAAAf/9//wAAAAAAAAB////8AAAAAAAAAH////AAAAAAAAAAf///wAAAAAAAAAB///8AAAAAAAAAAH///gAAAAAAAAAAf//4AAAAAAAAAAB//+AAAAAAAAAAAH//gAAAAAAAAAAAf/4AAAAAAAAAAAB/+AAAAAAAAAAAAH/gAAAAAAAAAAAAf4AAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAA//gAAAAAAAAAAAH//gAAAAAAAAAAA///AAAAAACAAAAP//+AAAAAD/wAAB///8AAAAA//wAAP///4AAAAH//wAA////wAAAA///gAH////gAAAH///AA/////AAAA///+AH////8AAAH///8A/////4AAA////4D/////gAAH////wf/////AAA/////D/////8AAH////+f/////4AAf////9//v///gAD///////AA//+AAf//////wAA//8AB//////+AAA//wAP//////wAAB//AA/+A///+AAAD/8AH/wA///wAAAH/4Af8AB///AAAAP/gB/wAB//+AAAA/+AP+AAD//4AAAB/4A/4AAP//wAAAH/gD/gAAf//AAAAP+AP+AAA//+AAAA/4A/4AAB//8AAAD/gD/gAAH//wAAAP+AP+AAAP//gAAA/4A/8AAAf//AAAD/gD/wAAB//8AAAP+AP/wAAf//4AAA/4A//gAH///wAAH/AD//gB////gAAf8AH////////AAD/wAf///////+AAf+AB/////3//+AH/4AD////+P//+B//AAP////w//////8AA////+B//////gAB////wH/////+AAD///+AP/////wAAP///wAf////+AAAf//+AB/////wAAA///wAD/////AAAB//+AAH////4AAAD//gAAP////AAAAH/8AAA////4AAAAD/AAAB////AAAAAAAAAAD///4AAAAAAAAAAD//+AAAAAAAAAAAH//wAAAAAAAAAAAP/8AAAAAAAAAAAAP/AAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAA//+AAAAAAAAAAAP//8AAAAAAAAAAD///8AAAAAAAAAAf///4AAAAAAAAAH////wAAAAAAAAA/////gAAAAAAAAH/////AAAAAAAAA/////+AAAAYAAAH/////8AAAD4AAA//////wAAAfwAAD//////gAAB/gAAf//////AAAP+AAD//////8AAB/wAAP//////4AAH/AAB///////gAA/4AAH/+Af//+AAH/gAA//AAH//8AAf8AAD/wAAD//wAD/wAAf+AAAD//AAf+AAB/wAAAH/+AD/4AAH/AAAAP/4Af/AAA/8AAAAf/gB/4AAD/gAAAA/+AP/gAAP+AAAAB/4B/8AAA/4AAAAD/gP/wAAH/gAAAAP+B/+AAAf/AAAAAf4P/4AAB/8AAAAB+B//AAAH/wAAAADgP/4AAAf/gAAAAMB//gAAB/+AAAAAAP/8AAAH/8AAAAAD//gAAAf/4AAAAAf/+AAAB//wAAAAH//wAAAD//wAAAB//+AAAAP//wAAAf//wAAAA///4AAP//+AAAAB////Af///4AAAAH/////////AAAAAf////////4AAAAA/////////AAAAAD////////4AAAAAH////////AAAAAAP///////4AAAAAA////////AAAAAAB///////4AAAAAAD//////+AAAAAAAH//////wAAAAAAAP/////+AAAAAAAAP/////gAAAAAAAAf////4AAAAAAAAAf///+AAAAAAAAAAP///AAAAAAAAAAAH//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAD/AAAAAAAA/8AAAf+AAAAAAAH/4AAD/8AAAAAAA//wAAf/4AAAAAAH//gAD//wAAAAAA//+AAf//AAAAAAD//4AB//8AAAAAAf//gAP//wAAAAAB//+AA///AAAAAAH//4AD//8AAAAAAf//gAP//wAAAAAB//+AA///AAAAAAH//4AD//8AAAAAAf//AAP//gAAAAAB//8AA//+AAAAAAD//gAB//wAAAAAAH/8AAD/+AAAAAAAf/gAAP/wAAAAAAAf8AAAP+AAAAAAAAfAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'), - 46, - atob("HR9FLTkxQDdDOkNDHQ=="), - 88|65536 - ); -}; - -{ // must be inside our own scope here so that when we are unloaded everything disappears - // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global - -let drawStatusTimeout; - -let drawStatus = function(){ // battery and 24h line clock, remove if ou want to display wigets instead - -g.clearRect(0,22,175,22); -g.setColor(g.theme.fg); // draw battery -g.drawLine(0,2,E.getBattery()*1.75,2); - // draw line for 24 h clock - var x = g.getWidth() / 2; - var y = g.getHeight() / 2; - var ix; - var shade; - var w ; - var date = new Date(); - for ( ix = 0; ix < 176; ix=ix+4){ - shade = 2*Math.PI * ((date.getHours()-6)/24); - shade = Math.sin(2*Math.PI* ix/176 + shade ); - shade = shade * 0.5 + 0.5; - shade = 1- shade ; -g.setColor(shade,shade,shade); -g.drawLine(ix,18, ix+3,18); - } -g.setColor(g.theme.fg); // draw dots at noon / midnight -ix = x-(((date.getHours())%12)/24)*176; -g.drawLine(ix,16,ix+2,18); -g.drawLine(ix+2,18,ix, 20); -g.drawLine(ix,20,ix-2,18); -g.drawLine(ix-2,18,ix,16); - -ix = ix + 176/2; -g.drawLine(ix,16,ix+2,18); -g.drawLine(ix+2,18,ix, 20); -g.drawLine(ix,20,ix-2,18); -g.drawLine(ix-2,18,ix,16); - -// queue next drawStatus - if (drawStatusTimeout) clearTimeout(drawStatusTimeout); - drawStatusTimeout = setTimeout(function() { - drawStatusTimeout = undefined; - drawStatus(); - //draw(); - //drawWeek(); - }, 30*60000 - (Date.now() % 30*60000)); - -};//------------------<< status - - - -let drawWeekTimeout; - -let drawWeek = function() { - // date and day of week, moonphase, next quater moon - var date = new Date(); - var weekday = Math.abs(date.getDay() -1 % 7); - var dateStr = date.getDate() ; - - g.reset().clearRect(0,175-36,175,175-36); - g.setColor(g.theme.fg); - g.fillRect(0, 175-15, 175, 175); - var pos; - var d; - for ( d=0; d< 7; d++){ - pos = d * 25; - if (d < 5 ){ - g.setColor(g.theme.bg); - g.fillRect(pos, 175-15, pos+22, 175); - }else{ g.setColor(g.blendColor(g.theme.bg,g.theme.fg,0.25)); - g.fillRect(pos, 175-15, pos+22, 175); - } - - } -g.setColor(g.theme.fg); -g.setFontAlign(0, 0).setFont("InknutAntiqua24", 1).drawString(dateStr, weekday*(176/7)+11, g.getHeight() - 15); - -var mphaseq=-1; // moonphase 0-3 -var qday = -1; // day in week quater moon -var moonssince; // full moons since May 5th 2023 -var lundaymo; // lunation day monday -var tms = date.getTime();// -var weekdayms = weekday * 86400000 ;//seconds since monday -var startd = tms - weekdayms; // monday -var perc;// percent of cycle -tms = startd - 1683308000000 ;//may5th 1734h 2023; -moonssince = tms /2551442823.5;//div ms in a lunar month -perc = moonssince - Math.floor(moonssince); -lundaymo = perc * 29.530588235; -mphaseq =Math.round((lundaymo)/ 7.38264705875); - -qday = Math.round( 7.38264705875 - (lundaymo- (mphaseq* 7.38264705875))) % 7; // next quater phase day -mphaseq = (mphaseq+1) % 4; // set to next quater phase - - -g.setColor(0,0,0); // black moon bg -var yoffset = (qday == weekday )*24; -g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(48), qday*(176/7)+11, g.getHeight() - 22- yoffset); -g.setColor(1,1,1); // moonshape - //g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(65+mphaseq*26/4), qday*(176/7)+11, g.getHeight() - 26- yoffset); // next moon or : -g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(65+perc*26), qday*(176/7)+11, g.getHeight() - 22- yoffset); - -// queue next drawWeek - if (drawWeekTimeout) clearTimeout(drawWeekTimeout); - drawWeekTimeout = setTimeout(function() { - drawWeekTimeout = undefined; - draw(); - drawWeek(); - }, 180*60000 - (Date.now() % 180*60000)); - -};//-------------------<< week - -let drawTimeout; - -// draw clock -let draw = function() { - var x = g.getWidth() / 2; - var y = g.getHeight() / 2; - var xoffset =0; - var minute; - var hour; - var hour_old; - var date; - var digit1; - var digit2; - - g.reset().clearRect(0,25,175,175-36); // clear area - - date = new Date(); - hour_old = hour; - hour = date.getHours(); // hour - if (hour_old != hour){ // only draw if hour has changed - if (hour > 12) { - hour = hour % 12; - } - digit2 = hour % 10; - digit1 = hour - digit2; - if (digit1 > 0 ){ // draw hours, one or two digits - xoffset = -10; - g.setColor(g.theme.fg); - g.setFontAlign(1, 0).setFont("InknutAntiqua66",1).drawString(hour, x+xoffset, y); - } - else { - xoffset = -15; - g.setColor(g.theme.fg); - g.setFontAlign(1, 0).setFont("InknutAntiqua88",1).drawString(hour, x+xoffset, y); - } - } - minute = date.getMinutes(); // minutes - digit2 = minute % 10; - digit1 = Math.floor(minute / 10); - minute = digit1.toString() + digit2.toString(); - - g.setColor(g.blendColor(g.theme.bg,g.theme.fg,0.5)); - g.setFontAlign(-1, 0).setFont("InknutAntiqua66",1).drawString(minute, x+xoffset , y); - -// queue next draw - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = setTimeout(function() { - drawTimeout = undefined; - draw(); - }, 60000 - (Date.now() % 60000)); - -};//-----------------------<< clock - - -// Show launcher when middle button pressed -Bangle.setUI({ - mode : "clock", - remove : function() { - // Called to unload all of the clock app - if (drawStatusTimeout) clearTimeout(drawStatusTimeout); - drawStatusTimeout = undefined; - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = undefined; - if (drawWeekTimeout) clearTimeout(drawWeekTimeout); - drawWeekTimeout = undefined; - delete Graphics.prototype.setFontmoonphases; - delete Graphics.prototype.setFontInknutAntiqua24; - delete Graphics.prototype.setFontInknutAntiqua66d; - delete Graphics.prototype.setFontInknutAntiqua88; - - - }}); -//Load widgets -//Bangle.loadWidgets(); -g.reset().clearRect(0,0,g.getWidth(),g.getHeight()); -draw(); -drawWeek(); -drawStatus(); // remove if ou want wigets to draw instead -// -//setTimeout(Bangle.drawWidgets,0); -} From 1f7b92d9c123607c1931a6793b67a21d2cdb1c19 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 21:14:20 +0200 Subject: [PATCH 046/118] Update metadata.json --- apps/polymath/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/polymath/metadata.json b/apps/polymath/metadata.json index 73dd4a36c..eff31b38a 100644 --- a/apps/polymath/metadata.json +++ b/apps/polymath/metadata.json @@ -5,6 +5,7 @@ "version":"0.01", "description": "This is a graphical clock based on Anton Clock with date, day and moon phase. Beta", "tags": "clock", + "supports": ["BANGLEJS2"], "storage": [ {"name":"polymath.app.js","url":"app.js"}, {"name":"polymath.img","url":"app-icon.js","evaluate":true} From c187db2a2f603cdabf3bad21d5c87e23eb6b132c Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 21:37:48 +0200 Subject: [PATCH 047/118] Create README.md --- apps/polymath/README.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 apps/polymath/README.md diff --git a/apps/polymath/README.md b/apps/polymath/README.md new file mode 100644 index 000000000..fe0ad3524 --- /dev/null +++ b/apps/polymath/README.md @@ -0,0 +1,6 @@ +The clock does not use the locale settings for time zone and DST yet. +You need to change your watches time instead. + +The clock does not show widges but a custom battry indicator. + +You can revert this in the code easily by uncommenting the respective lines. From db627a029534a11f2d38b019431b63b006b3a195 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 21:40:20 +0200 Subject: [PATCH 048/118] Add files via upload --- apps/polymath/screenshot.png | Bin 0 -> 2088 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/polymath/screenshot.png diff --git a/apps/polymath/screenshot.png b/apps/polymath/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..8ce1832d7d5bc0b5b4326d06aebaf67f8c609ff3 GIT binary patch literal 2088 zcmai#SzHnd7RJe|i3?ubnk$NmM&>qZh7xWOYNB2jD3=z>%#BP*GnZ16RJ1H7GYL&{ z!@@vJ>t&k};xUc|S0AtgcxCt6j~^f?@E|}2d=()3YxTd!EW<`l zkdg;-s}ykKP>B)cROeY<$}sosi^h5y%k!VpP!Dr9)6qB8hEcmYnBQ=Uv|Y@PK3_na zSfluPKX|(FDBesbNj=Q*Zz}%p4Obgu70gl}Ha;-<{OsE{PouL)-$q1G@H(nGl zfMwqEgc|m=%>&<&!j&!pmf8(7 z`;E#_PcD!YIW<2DAMlxn!E2uiVIl%5V_<~^@7@ab{=BE33C-jt@mGoxcLK{{^ z^>ODT_1y$8tnF^$?!VNzxZra`VWOkYa*~Smo9!kKas)LM=Bs*}Vp@3>3)V@rJ(Xsi zu{)l}MP31&Ir&MvG&{_?d;FY7_V4pFTp-OY`^4J-n#p<+$eg&wKEyGH$8dHY?!}oL zhaXL1y`AfKWtMi`^DX7>Ld0A_&*^-1%ea;IXS?+s$o0rqP%RV}!o2tfQcg|7Y%xI4 z6U2&V`y4=QO@HKMm(xDG;uid_WCO{<2IETKJ0cK;whF_bAElGXjjS8icqPb z2(BN|mnX)lOH6ETQ)!(`Nm5I6t4udZDdS}QJ`Kdv61;Gc7+?SzInX;=TP5n+llGtj zH^dJ1)X|QQpo7{})KkUF_J+I2p7+`)bihuDbM_?xpc> zjv`5@uix1Y`q*?a4tf@n+-i?lzo(Re(STiTssB>)+KV)pRhbz~4 zv#`cb+c@iMQz*Ly65XFZrU~ym#?Jd7k<`#DjEHpu;_0wkRub^@7E^oxq7>ZlIF{>g z>;6o!JPi!pL$DXgI z^*9U|?Gu!6;EuHonaW~Cv+AsV$w`Y6hq^p8C#?P*Uv|>xT2z9&#b|Km;*;_c*Fa>b zz22GS>x8R_Is}1pcH zo)rpx8-KR1S>Ao|gY%fo23<^iFIqKBwx;JUY*h3ed6^Q;iNMfZub9LzXNATY5owgB z4l{UVa`heM7sJVn-{C-pH#cNKa-%yJ^HjLR$sV|_-PXIYla?7Gp>W+nN|i=HgVliK zB8aX5aC?&nNlc_(JP}|0r9sSdYJv&DQ{cqNx_z;P);wqrY^T-aKaw!210=HLyhFP# z;c@1qY)~zQgb;+aP~)+8h_i~ib65rzq%;$NZWz`a$b-(jtM>raH@7urf}K+lbEvts ze^-?D?*bDfsVio?MAU~&sB2yOQQZ6Qd@jfP_Rnv2z?}iz5950u8+= z>Ku4>uo@fkgdnK!KvJUzpi@jLiLd+xr;!K3+f-7CYs!004Jh*MQ^uxV8$ zX&Mxt?~X!%-!8`lPbaj!6lIg}@Qo0qFl9vyxBAQ2t4o)RJklb}#RJrA3)BV-_P|r! zJYVYTPJ=Y#mlqA?poUrAqsiA;>BW~ZC9%r%s>X;d!r&iyv$KK3tloU0O~Iqc67OE4 zLm$7^n2aZVV=gSP7?plA$4~ap2r)UBr9~gXM0HAf8pV6mGXt?QkMh4v=iQ3?0CALy zKEin%M4*sjFPCHTKgEh?LM1tA%XY6w;k|cOz~&(B#NPrrN)#Pe!s#h!nTxuG)+o2` z0)4IpLXb)jJ|J?x3T*xCagTd`gY5_FnqU{duir+dw`x%SWjP5(RR$Vd05b8& s^mGNvd#i4>Y>ZoRGit<8 literal 0 HcmV?d00001 From 695551037ed44ea35ff42937ec2cbf3388a6412c Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 21:42:46 +0200 Subject: [PATCH 049/118] Update metadata.json --- apps/polymath/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/polymath/metadata.json b/apps/polymath/metadata.json index eff31b38a..c3bcd0bb1 100644 --- a/apps/polymath/metadata.json +++ b/apps/polymath/metadata.json @@ -4,6 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "This is a graphical clock based on Anton Clock with date, day and moon phase. Beta", + "screenshots" : [ { "url":"screenshot.png" } ], "tags": "clock", "supports": ["BANGLEJS2"], "storage": [ From 48a0d61761d8a2d90e157f04ecf6854195b96661 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 21:44:02 +0200 Subject: [PATCH 050/118] Update metadata.json --- apps/polymath/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/polymath/metadata.json b/apps/polymath/metadata.json index c3bcd0bb1..4ee945eef 100644 --- a/apps/polymath/metadata.json +++ b/apps/polymath/metadata.json @@ -5,6 +5,7 @@ "version":"0.01", "description": "This is a graphical clock based on Anton Clock with date, day and moon phase. Beta", "screenshots" : [ { "url":"screenshot.png" } ], + "type":"clock", "tags": "clock", "supports": ["BANGLEJS2"], "storage": [ From 23cfcd7b58f91beda78153fc75bb1c2c71ba4539 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 21:48:53 +0200 Subject: [PATCH 051/118] Update metadata.json --- apps/polymath/metadata.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/polymath/metadata.json b/apps/polymath/metadata.json index 4ee945eef..476795024 100644 --- a/apps/polymath/metadata.json +++ b/apps/polymath/metadata.json @@ -7,6 +7,7 @@ "screenshots" : [ { "url":"screenshot.png" } ], "type":"clock", "tags": "clock", + "readme": "README.md", "supports": ["BANGLEJS2"], "storage": [ {"name":"polymath.app.js","url":"app.js"}, From 550914f69e87ed4e812e482b2818513f8d6d7803 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 21:54:25 +0200 Subject: [PATCH 052/118] Update metadata.json --- apps/polymath/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/polymath/metadata.json b/apps/polymath/metadata.json index 476795024..7d13f8537 100644 --- a/apps/polymath/metadata.json +++ b/apps/polymath/metadata.json @@ -4,7 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "This is a graphical clock based on Anton Clock with date, day and moon phase. Beta", - "screenshots" : [ { "url":"screenshot.png" } ], + "screenshots" : [ { "url":"screenshot.png" }, { "url":"polymathclock.jpg" } ], "type":"clock", "tags": "clock", "readme": "README.md", From 0532908632b37bfc4f18d8f80109164b53730fbb Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 21:56:16 +0200 Subject: [PATCH 053/118] Add files via upload --- apps/polymath/polymathclock.jpg | Bin 0 -> 37120 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/polymath/polymathclock.jpg diff --git a/apps/polymath/polymathclock.jpg b/apps/polymath/polymathclock.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c53ab3180623f37f827f4ac873a9086f63ca97ed GIT binary patch literal 37120 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 T55kjsdj6D4_eD3g0zd!RQhC!q literal 0 HcmV?d00001 From a01eb194d76a2dfee97cbd414e9dbd9505adc59a Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Tue, 2 May 2023 21:59:18 +0200 Subject: [PATCH 054/118] Update README.md --- apps/polymath/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/polymath/README.md b/apps/polymath/README.md index fe0ad3524..b3904355e 100644 --- a/apps/polymath/README.md +++ b/apps/polymath/README.md @@ -4,3 +4,5 @@ You need to change your watches time instead. The clock does not show widges but a custom battry indicator. You can revert this in the code easily by uncommenting the respective lines. + +![Image](polymathclock.jpg "photo") From 4e2c3dc0c167245d9c13df075839eebcabb3f439 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Tue, 2 May 2023 22:57:15 +0100 Subject: [PATCH 055/118] Ratchet launch: add caching --- apps/ratchet_launch/app.js | 53 +++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/apps/ratchet_launch/app.js b/apps/ratchet_launch/app.js index 11018080a..156106894 100644 --- a/apps/ratchet_launch/app.js +++ b/apps/ratchet_launch/app.js @@ -9,27 +9,38 @@ var blankImage = Graphics.createImage(` `); var rowHeight = g.getHeight()/3; // Load apps list -var apps = Storage.list(/\.info$/).map(app=>{ - var a=Storage.readJSON(app,1); - return a&&{ - name:a.name, - type:a.type, - icon:a.icon ? Storage.read(a.icon) : a.icon, - sortorder:a.sortorder, - src:a.src - }; -}).filter(app=>app && ( - app.type=="app" -// || (app.type=="clock" && settings.showClocks) - || !app.type -)); -apps.sort((a,b)=>{ - var n=(0|a.sortorder)-(0|b.sortorder); - if (n) return n; // do sortorder first - if (a.nameb.name) return 1; - return 0; -}); +var apps; + +var launchCache = s.readJSON("launch.cache.json", true)||{}; +var launchHash = require("Storage").hash(/\.info/); +if (launchCache.hash==launchHash) { + apps = launchCache.apps; +} else { + apps = Storage.list(/\.info$/).map(app=>{ + var a=Storage.readJSON(app,1); + return a&&{ + name:a.name, + type:a.type, + icon:a.icon ? Storage.read(a.icon) : a.icon, + sortorder:a.sortorder, + src:a.src + }; + }).filter(app=>app && ( + app.type=="app" + // || (app.type=="clock" && settings.showClocks) + || !app.type + )); + apps.sort((a,b)=>{ + var n=(0|a.sortorder)-(0|b.sortorder); + if (n) return n; // do sortorder first + if (a.nameb.name) return 1; + return 0; + }); + + launchCache = { apps, hash: launchHash }; + s.writeJSON("launch.cache.json", launchCache); +} // Uncomment for testing in the emulator without apps: // apps = [ From 9e82f580ae4a5d3099789f9c568210a6ad110efc Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 06:22:25 +0200 Subject: [PATCH 056/118] Add files via upload --- apps/polymath/app.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/polymath/app.js b/apps/polymath/app.js index 4753cb405..456fcb27d 100644 --- a/apps/polymath/app.js +++ b/apps/polymath/app.js @@ -1,7 +1,5 @@ // Clock with date day and moon based on the "Anton Clock" -//require("Font4x4").add(Graphics); - Graphics.prototype.setFontmoonphases = function() { // Actual height 23 (23 - 1) @@ -124,7 +122,7 @@ var mphaseq=-1; // moonphase 0-3 var qday = -1; // day in week quater moon var moonssince; // full moons since May 5th 2023 var lundaymo; // lunation day monday -var tms = date.getTime();// +var tms = date.getTime() + 3*86400000;// var weekdayms = weekday * 86400000 ;//seconds since monday var startd = tms - weekdayms; // monday var perc;// percent of cycle @@ -143,7 +141,14 @@ var yoffset = (qday == weekday )*24; g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(48), qday*(176/7)+11, g.getHeight() - 22- yoffset); g.setColor(1,1,1); // moonshape //g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(65+mphaseq*26/4), qday*(176/7)+11, g.getHeight() - 26- yoffset); // next moon or : -g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(65+perc*26), qday*(176/7)+11, g.getHeight() - 22- yoffset); + // exception for full moon: + var char; + if (Math.round(65+perc*26)==77) { + char = 48; + }else{ + char = Math.round(65+perc*26); + } +g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(char), qday*(176/7)+11, g.getHeight() - 22- yoffset); // queue next drawWeek if (drawWeekTimeout) clearTimeout(drawWeekTimeout); From b1b3c54db02d96b5e8e797e3714d337e4657548f Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 06:28:30 +0200 Subject: [PATCH 057/118] Update app.js --- apps/polymath/app.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/polymath/app.js b/apps/polymath/app.js index 456fcb27d..592365d48 100644 --- a/apps/polymath/app.js +++ b/apps/polymath/app.js @@ -110,7 +110,8 @@ let drawWeek = function() { if (d < 5 ){ g.setColor(g.theme.bg); g.fillRect(pos, 175-15, pos+22, 175); - }else{ g.setColor(g.blendColor(g.theme.bg,g.theme.fg,0.25)); + }else{ + g.setColor(g.blendColor(g.theme.bg,g.theme.fg,0.25)); g.fillRect(pos, 175-15, pos+22, 175); } @@ -122,7 +123,7 @@ var mphaseq=-1; // moonphase 0-3 var qday = -1; // day in week quater moon var moonssince; // full moons since May 5th 2023 var lundaymo; // lunation day monday -var tms = date.getTime() + 3*86400000;// +var tms = date.getTime() + 86400000;// var weekdayms = weekday * 86400000 ;//seconds since monday var startd = tms - weekdayms; // monday var perc;// percent of cycle @@ -240,4 +241,4 @@ drawWeek(); drawStatus(); // remove if ou want wigets to draw instead // //setTimeout(Bangle.drawWidgets,0); -} \ No newline at end of file +} From 65c890efc2dea4313bda7cf2a0c91bb393bbbde6 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 06:31:23 +0200 Subject: [PATCH 058/118] Update README.md --- apps/polymath/README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/polymath/README.md b/apps/polymath/README.md index b3904355e..d9102bb05 100644 --- a/apps/polymath/README.md +++ b/apps/polymath/README.md @@ -1,7 +1,5 @@ -The clock does not use the locale settings for time zone and DST yet. -You need to change your watches time instead. -The clock does not show widges but a custom battry indicator. +The clock does not show widgets but a custom battery indicator. You can revert this in the code easily by uncommenting the respective lines. From f2ed4e8976134823e89a1e792c86a070fdadd20f Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 06:39:53 +0200 Subject: [PATCH 059/118] Update README.md --- apps/polymath/README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/apps/polymath/README.md b/apps/polymath/README.md index d9102bb05..bbe198452 100644 --- a/apps/polymath/README.md +++ b/apps/polymath/README.md @@ -4,3 +4,11 @@ The clock does not show widgets but a custom battery indicator. You can revert this in the code easily by uncommenting the respective lines. ![Image](polymathclock.jpg "photo") + +The top line shows battery status. +The line below indicates noon and midnight on 24h timeline. +ToDo: show daylight sunshine duration according to geolocation. +Number in the middle is hour and minutes, in 12h format. +Bottom row: days in the week, with current date, and moonphase +placed on the date of next change of moon quartal (full moon, half moon etc) + From 8f93b46b21612cac2206d433e1066ff5303a618f Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 06:41:27 +0200 Subject: [PATCH 060/118] Update README.md --- apps/polymath/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/polymath/README.md b/apps/polymath/README.md index bbe198452..9a6104756 100644 --- a/apps/polymath/README.md +++ b/apps/polymath/README.md @@ -1,4 +1,5 @@ +Intended for the dark theme. The clock does not show widgets but a custom battery indicator. You can revert this in the code easily by uncommenting the respective lines. @@ -12,3 +13,4 @@ Number in the middle is hour and minutes, in 12h format. Bottom row: days in the week, with current date, and moonphase placed on the date of next change of moon quartal (full moon, half moon etc) +Please report any bugs and feature requetsts in the forum. From 90336ac20f92ffc1f174ba085f3312f2f53fb1f5 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 06:44:32 +0200 Subject: [PATCH 061/118] Update README.md --- apps/polymath/README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/polymath/README.md b/apps/polymath/README.md index 9a6104756..6e7d5ce43 100644 --- a/apps/polymath/README.md +++ b/apps/polymath/README.md @@ -10,7 +10,8 @@ The top line shows battery status. The line below indicates noon and midnight on 24h timeline. ToDo: show daylight sunshine duration according to geolocation. Number in the middle is hour and minutes, in 12h format. -Bottom row: days in the week, with current date, and moonphase -placed on the date of next change of moon quartal (full moon, half moon etc) +Bottom row: days in the week, with current date, +and current moon phase placed on the date of +next change of moon quartal (full moon, half moon etc) -Please report any bugs and feature requetsts in the forum. +Please report any bugs and feature requests in the forum. From 6b7674d58498ba220e3074ecba27ea1415ea17fc Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 06:51:19 +0200 Subject: [PATCH 062/118] Add files via upload --- apps/polymath/polymathclock.jpg | Bin 37120 -> 60766 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/polymath/polymathclock.jpg b/apps/polymath/polymathclock.jpg index c53ab3180623f37f827f4ac873a9086f63ca97ed..c90b43f0fd0d7c6545b38d8be884deeebb9b9e1d 100644 GIT binary patch literal 60766 zcmb@tbzED`(>NM5K#>Ba#i0dC3#GVAkf&I2cZw8>I|R3)#VJrITA)~g;%-HP6hd*g z04biJ!NN_S=PU2MpZAY@f1kS~=S=p@%+BoDnVp?o?&j{+al2lD?Q8%5RaF27001BW z+{eNJ;9wvu06qYKjRnB{8^+wQvHuNgDq&&$gF~2vK_mlU|4j)1jA2pyixvx0&-Zuz z1I)9TXtsaT;uvAk0r39e3E0J={SSPMA^E%Azj@yO56>$s-oIfI3`cBi%K!3@vimnr zEHbQT|Em8Z38r{hIC*$E+XDD_`1r+m1jTsxnR$f71cb!|`2IXr#C$Q${d3n=<nH)|d~KAwM95E<}@yi(DS(c)25 zW&R)VpXYxg-`(BW{UQ3_#sm*94-bG>h+p{c@qw)Z0I=WZH z!vFV?aJL4yuPm=555U6028d(+0C$T3IgH=J`t$i$!NJ4%Q}A(daqxinK;WM*0pUGD z0sMs3kL@qBP<>+#`|IgVx9wV z$?+&2^UB~;YFYrFxIN$tO)el{k*(>W()xv9<+pSXBP4qGh?<6$?J4`S=NtlpLc$`V zVsd}Il2=evQr6bd)zddHG_taOYh(M)&fde*%i9O+>lgk$A~GsECN?GYV_JH~r_8J` zg+;|*OG?YiYwPM88k?G1T7UHR^$$P>hlVF6r>19S=jIpIH(;Av+wk8zyU62{)3fsn z)aBJ5y)ZuSAGI*oe>D4l=!G$KENsj>zy$Th80X4xw*Vl;1rr?wD?^YfHmI5ISD zbG#ss2+s2sG2RmCt1w(z{K*>!cV@Pynph~UNN{R*TdCNCuFiH73eegu1DzYzH5&9~ z#99nNiR9@@8od12$_;j0d#T?lP5}rmKQCQxw|zHwcXHw_>ZWVX_2I-c?NVkyWPrm# z)!-HL3ZK8O1#ZgI{pXqkV)|)8v%wAe5qALV;E38i^yBP?zI}_yeJhr+DVv_h54<2W zR&)9d)S|D`pB)!X=-WCVPtMa2=KB!DF{}^GJ-t>t3DbJ=UdW~`z*>R!%!btpXH~-U zrsTE)wDu*B{0`tkqOCtJ!Rs6#x>hOms5xtZP*&9+Ai^#1K1>F9$UP3vM#1}CV)O2U zTtFYfPV};N_uD=>I&w{~h*N>QpB0)J4$>zH^D;yP#v_i-nNg;90NhKIPYLSeJfS6h z1HH|b1?f&w>9TLv4(ocSA>){xlIQ6IbtxNacK*u0lAdhb^hL@;3|hLz+)=!g*ZZLQ zIfyj?cK!4Y(DR~`6+N?1_`1lhW*!x^>@!kfcGx(%VdDN!B>;tklE>P8<)2=Lm_66H z4S$ic*e})r9q6K$-+cXbhlo<8$&0>XP+^R}XGoF^Cl<-Q$cZNEL6V&pPbfrq26J|U zNCoD-?a)jUHO{zJ`N>IfiRXT{g2(;COD2leX;~^MKOrgen|VKH=U&*DheUnv?NNJO zv3PaeX*)LE3m5%Z9b2|Q#Wrb4uVuP_!cY3g1Kp`g*$S>*Fy5+-b@?z zuxtYp)W~E^3|5%?r)xiKH93*l0(<9(h=vI}kMu9<%=RFyD@CSXX9S<$OKlh2{N!t6gr-Zu8sWN3pC55-6g0IHH5oXZ(u^Qjsh?7MJ$ z!}m)j5Ms4<2Uz&L!QJbhmZ6AD@37RzC4di#z?0^W7O4)+NxRm*1wBh)oxJf~?;=6L zm6IaUxDW0RE*&euM6b|P$J5iP^=}?%@F#~R2A`ajS5g|+=7jIb?dVq2v(2^SY)-Ok_v4C?akdh1h;IU1ZS z1X+T4?L|DuHr}9rBamWyp{J#3>Wg0b@TL{&EzUcMQ&uKt2WVwOX8q^1l&9~^ziOmG zHv=nHyKL1_&lElcJu+;J*^ulMMHIcqpYVF~Qu7gWlJN0J96}w~;iW*CzRh&Rd#-&% zRWcf!JVY;K5vG@a`wf(?zH<5c28x~axQR22fZm^|%8H{1YZz7>XjO(DGbibCSo}DJ zeqe9p6Y5m~2?q6My)W5!`%cdx1WfM>Ki*6TPzuhmImpB|~%rufZeoUDZ#52~fu?Gt_HS zTyyU=8?7IQ!)i=yMUL(OdsSgh*id~YyNP*k<)AloTfj*M1<{T6HMuQf*KUNmbTI8_ zRV2wu40nz#e;IpuE$)eVDCd`@Kfg{quI{?}tIp+7UU&ML%Sf(~0EW z`QySTtAbffkHR{ivfY%IU%y>!mOls+^E@zfSYM4v&-w|nnR;?;8bTLCMwgo@l~eKB z2%+Mh*s!DDouT?evL_iDSS9AYc5zx=(PN|hI*V)*EYjWuo{Bk@%G+pjGI`-n_BKhM)#LcdFy%z5C>SWlOPs*x=M6o z6^4|zi8l;>KZxTF?%rF{?;ti6E1wv@y!u4@G4S_&RLS~@f${{0I5T>8lWcOOh4bL4 zA`gukY>G7Ph&HIfscPq#kOuIEbcQ)hY}4alXUD+oF@o!B{%4rxg9yKaZb`qZ*{AF; z;?80g!^ha@WXmNq_l-n9yD`-b(P^{O>1e^W4$F&QJh9QAIjtq-X$-b2XKvVI<5fNVnQB#CW|Hsd7LCF z7_P@f%u9_Nprc_~ytxB#n6^b#i2|-qiqi5yzW5P5NJcG*I4+0;cUE-aG$&u# zrS#@%qQ=d}pF$nzB!5s3a628d_kE1ZD>^7bznz~$#6xq_MKr89Z_o3c*%~%Ay+=ps zfg^@-cIHNdxuW+-gESZEwVfpt{PTA*u$MSTo*YQ~iYG|lsy=Izl%L6B07liPR+`7? z;6A(qJZER7PY6G)YFw0AkP6~oyaP<@1h5z10e*-U_S1)4_GXB}B<}#w24}mg;%`*} zBhiJNQ~V^W8Aca~sg&3g2^Cd4QGo<)SV@20y`a%9{DwqYa5?hZX$~z{Um2tIQ8w$l zj^)n)GQS&X)F{%Y{|&!J*<&0uYmQE*3X>~!bg<;@~*Iz<$p$z*zR z>~hzh{yamrQASADS_~7xi!<>G2W|@VFWQ3^CvjD$x>xH4nL)Ox6Dsr+?tQsDKu}IF zeegRns-THHa+h{P7>Tl}xp9}fb-I}z6_k+n4nUOX+z^GN++b`#`a}GhVr~>lO?DT~ zn_O+%TQe_cOi~~io0mB)=QXVN?vK_2%1q_`==f$MIqg6eVNyS-%`t75vIPZ zc0P{?wXBen{sx3ipc97<^8ehFd=PP#Wo1CZItg$QE@l8iRR5td4OL1 z-G$d>6O4N7vwz^V0rvDaW!e9Jsb#N?XNvw^*ib=j1f zF5@rrYL~s&31FX&7&_!I!-e@8wQ6Kt^%t8@$y+R1O zGVXTc(ht6x0M_(S96kW>sq81;%! z4-;MSGDLf=aNYT5IwvqgBMB4DnW0%QSEUAs6Jp}6M94z+T0nCCnk&%nH$Dqx?y)St*hsBq7VuR#xVkw47wZ}gGyXbCK-YR4L|-|@H% zL(#?OmIOmKJ))oO97zQ+1N&?G;S$p61EN4th`<3)y|D4ew6(bVitJ0lxzpPg9P(*q zcAR$rGe3srJO{nh_fI!gb%IiZ=JOB^=6z)0jF0k+QRW*X+|hcxkdANMTxdv8KK&Mr zQv9)G>Yn*0b4sZPdwC@7a$bd~#8>STg0F?=Up%tgY8Hh6&aUES_a5C)=%eqoRo#&0 zDWUw4mgti{srxN&8)~L)NVsMa0PC#IDm9Ee>OVV+^naTlBx7RiMU?0r0FMi0%UJVH z;Hc58cYEGJ%qQKjRzy5X6E$0{&)qwtUs-&fW#p&i8I%=d3!U7c*CQ$~j@6Gf2kD${ zU#FU?Z~1FX7*Sm+au6~o9Zc>Rj&*8>xcZarnL7seNMlAsVjd;PQqpGE?i;s+-1^{h ztofq!{<@l5hYtOk7fWJsK%l=9UGH~d7j zn{o=G6P)QlB$}$4D_)vkGwy1*I34rJD=|Ri#vHmEmMP%97x7O1xaU5+H42f|yn_UL zJpi;IQ^bvW@Y<-Qq?~GNb3KE;e zsVbf63md{s%@NTlH24ez`wE)jW~xRaaV*;n$$PTJM7u*vXCTrW_3;~}ub-XtSnEE) z>>t>%SgN^G6PN8wW~r)o(|uaD^U)l-_uM)`e_@GH+N}pZn^#u-oZ?v$EHv*&!;Lud z;mMCWj>jiXa{+@8mR+pherT^<3;z1F@?0Cv=WQMQ;}{&iquxiAc)O!NtQ@usB?tU2 zs?`yB{r;-TJ;d4r*NUV?YgHb5&`MvM93;B}awdyQP{e6qvX=kx{4;v`Lfi1!7F_S* zDKy=x-Asi?5%j!y>JY$COLiW0(dxZ7*$}8k$>-!Dv&_UD+g)^N&&j{y)F9&ZOzMg% z84N5n@hKN;3j20uEQ=kz3FH_VSm_9Cx#jG?;YKR&skec-^~{%YJ!nY9Ekdt61%F=w z`#v=YExeS=rY{qblmv0lblAoe>xmuuuIg7R>n996ik2V|3{Q|U>-Qs-z5$7CR|~*H z2j75Cq4wvW1UV&@aWz@p@lC#43=Uo#VHRKr`bUFC%OMEbngRp=5RJ+n&~952%cM<|3<5LG)|Hdkpj)>w~7ks#aM&_z*`Wm z7PG2mms!m`CrtwkU-^;~ViFp%M2wS-rm{5n=?so3e_UGHh0LBsIevgSB8rTuJgroO#lInD_xKtQE# z;-_=$$)#A#P)K<&%lPr4>A2Q-8{%?uTA@xU`#IE1UR8G2fd2fnWH9M)cw+TXdN|*D z4JTap>1faLAkJ|`N^djcd&)T5(^8|C-Q-6*hDr}Jb2xcEAKr8+N4`3tlZeYsaJvJ{ zRuT%p_{rNCS8we}6LwojG)FvM@r%9oP6{CdTvV7bAW*XsvNaS1Tv4AN!?q-xj*jw% zzlJS`rRXGy-L&h!Uaxp$%$BV0k}bzOz!yAN`F+Y4?)^5pa)gA0Gg{Mt1zUsIKkJem zP1JQQXAtx=udZ*xPM^zZ;|@SII76#d1o3=Rc4A|Z*IJf@@g5Clkrh6SpRFWEenb-~FctT;3^9>f_ONZsRocl&AN0LQm(2 zIJ~qRLqm@`r5iyz@WWe>rk_tK3h;?Pz8Gie{lNoZ&5HxV*(ixo&f5=!^e;R=He{5%y2|5B z*GU(q(Pogeq8nhk_Uv@|>zZt`?!hiTbrqk1l`A^!iU~6{nqvYE5eIXG22=EX@Q1!K zsWb#keTEBKW1XbOzvTEs5&&!Bjie;tyUYjp3|3>fm_*-#$xh7 zhFTf~FSLDu!rdeV00PVI06_Yn<*SUC8$+^QC$Y=1oRU)iDOsYyeLi8*x$c2L1?8L6 zdJop}+BcbWY;CExezU3)d_9`(sU3EE?DJB&9cWm0FAUVM`$AT)5PwQP>(>xEC!=h9 zQSRJSP&dTnmmi_uD!Q zAc0l7NGIqmv+5mxOB(inm>@mqpPf9LY!0GnQY>Ll%_}xY)X>P|OCN%dPZnlcKEnk1 zs`xA%KQ>r~%(7DUCxSDtQV||#QhVglx$Cb^Zm_U4D!y>&x-or$w`4iO(*2fJ$T{d} zkW?(8VdTahWqQpQ+#{>&#U0W4JZgP5;VIKG_a0H>Qy)M;$oJzSc+M|T_A;E}AlEy< zyBHP?dEj>l2u`I1o{;Sh=|LmTZaC+=k>c-7U+4;obY(2NjLk|pkoQo7H>4UergLcS z0A4HHGkmR0DK)=WnYwJc9tDkcvIdIxwVKQz(>X~dC=e=GFcP%j_J!U7<*8NHsX0D+ za)lpJ6)E5=s5c`(_Ci)*R57r8neyxXPD7F34`2&55}IYdbJ=rjYHI^uT1t7I_zbKR z(G%;ZB~(U~P9cUWPHiXNtbd5z>YHzv_PX>G*;M65ec28IvH1Cr{DCOOmP>p#>t*7jQY7dX_9hL zIKS(rKeD3}Frwt6@b$*yHm?9>w;`PIqqPp))~l~sG;UAMKK4xkN*CJ0A=6`4NVT0( zwO=;2xl6F=?%>hAN`9t}YyKi#SR@MU)AZ3dX$b1YPIJN7uxix14oY+qSKk7g_c4=Y zvfiVDN|oSLYq$p0@BS)|`J96{yejj<>sc{vYZW{-`VQc!76`4WO6<7UeaXrd7ukFKn8KUC9KzFSFioCH5{%LRe+fuw~RC!l&u^{A%alC4cEla zR>~hsXZ6xczS~Lh{|aK3!}a0NI@ayh6Mq|*#D^2;25Fio=s?8Z0iq5AZberP1=+to z)L}sVhA?L5$(a2WQJCspLrm&UN;WIF05*mR6&4b#wJ-WOhT||30&nh>UFmm(kHNH; zDhm&Ny=qGs?CjeZ6rwu0lyITM-%Q8X4%cH&;d?6`{6ALj7q&Mj47Z97Y)OP?-w#Ap z3)i-ecRn$x|JCvuqS>67ZZHO*fdVI~l z8;KN=a-yx19HZNFdWF9h_f6~#<<*Q$(;Bs)K}>|Do<$OGk0@-%%(UP}>)qi-0*vh> zF$3qfI?OCFAGOXPofH=rmp%YSgVA0)lQ|s26B2&)<>Nl;a*5Lck0itSYlT+Za*AM; z7G{QgEsw#QRx2G1)(taU=e+T-kM13qSqGHkvGN4v9Y?b!ZPBxqt7E%b>AvA!G`-X6QWlN~d2Z zsiyb4D_W6Hqy8lzA4|evs}uzl-Ph5kSaQwydr(P$n2Qx+W!^J9bGLCD= zT)X4`rreDZDHH4L=azo4@yEMr8$feR5_(HXKS5slHYg1@c@0htoT#SrXrt$aiIf&; z6>ZwGe;@p|`9bANn-Z+bwBQus9Qs(8)E;Y^+{Fiqq@NK zX$^dF=ud3th5SwA(IirE{C6%(LyAacVKPo9_G8nW<~zWdj-O5DgN358zR;usdF-e7 zJd*A*qN9vrT@&qe>;4B0+FAErlW-8ebS_DXApi3Gg~u#4W(GOs`B>ZniLRit5AelI z)U~%&WIcJI-YfXO4p+FzQSbn5Y9=xV%Mcoa|@O^|^LV^@w%Y@VoM)_V>- zs4ynW-fgLGeOFc!!E0Zb9)Q+01MXwi7CpCu6bp9%y;u^D{)G6HTF<6NEin!}O9iz& zqwAY+EM@LJD)Sa~{p~B3&69vvhQYPt-f61b^IpNT+S}#}>adlvYpnpsSqYc&!O@pB z&yKBJgWa6FUMK?JP$@9fnGAe(oNcmm!mb;6PEd|DVvB>b%1Sm+*c2xo1qU+DUFpxR zA{6uHDY!8njP46ks?7dEiVhJl;`UVkL&bO4PzdRzv-PG_QhqR4nwHSQ*YN>`I8C4t71Mgu&B&CD;^nXVU zV8T$>01=dV<(~G>8m@?nq2}*^`z2I~2;23aUH5{h7kWMO?XNIYxi#GK*3eUqT20_Y1-P|G|ga$D%Q(s>*|AWx2_7r5kF z{dtqf@Ja7IyI5CW`5oXOr+ zJ7Fo(&g1F>czrH2E4eD=UnmifR|qJvrmD#l)#0;VeZPJtzo#Sz=GkX4vG@7LTm@96MD>_3>H>5@i7k)mP7o ztic(5?n~dvSXA5^-23)%;)u46jePJSHXM`7xq744-m@IvTUJ2rNJeAz&$MK=UG0{N4*spn7C&oA2|3?Q)z=fj7RCF zUq6KzU(RO-P32pOOugmccQmJ`zbN-$$*9RSfjk3(ZvB$*a@?4SOHv5-P{Fwkf_*qH z97@jeBBeAEU%H9Yj$+-?n`9m2T2OAt5i^wgmz9Ne=lUNWPxCz6Hrxh9*wZ9((-wDI z*?Tb?qu6vG4rqX30k1-y)+b*qnDS7sG}BWA@<^qve-MST)4!QaN3L70uS)WfiR{fD z-&9N{*a_n)w{9n%O|4giYh~1jZ`mBhq3Ip+$XtH<6@UD2-|+=99tqkIvmM{4{dF@% zjce_y=6kc(hzdk5Y9I=(1^4x?#y+zKnT)S+e_9leV5K0W>M9G6Ks5DV#~ew}d1ra& z6Z(8_7T0ZC!@5v}I&)@PSV_L?YM-`bzsC`MY_V<31Ge@|^Cgbcsopa6jzHRPP<$xE zaSxAlmG(FU_XuJ(Mk%g)#1iMv#BCZZP5@*yNrf~_Eak%F5=dvoRSFT*8CC&F|PX7VMLHlmAxO?F#0~3>qkEE6EBhk zw+@fg*(#7&MajZ$){Dq@y7P}-xSbGtO!;}3t4H-WHnmCxlfO@N;9vA2VI(n>;gE8K z)8{q}q6)hSaa~?0a3(}iYiC=Qf%!L764O$Xnio7$p)MzTrpu9qj1_?6VWnn|@W}?R z;Rm}F{LpyidbR?XUu5LDijtlrpLY^)16XNgVo2qx=xD`cbk60`J0ztm?=b|NywYc= zKbKlxadAv@Iq6!~hdBPFCbA#Y*##HV?kx`fA#4kZ%6(k)P5Q4# zU*5PAFp!yCREhU>K0Tgai$Gf>jZTsJ`_HNx4nznPwmr#aQ1Wlf4A0hxsM zgq#!emwru8tl3U-v37E&6tDSbb9wjFz{BzeVg7mcVRpjL7Sut-a^v;PHe_w$GW+Tc zyv4+Q+%i`aDYEz7J@#(O+Q5?hhP3zKR7?K1VmfBFBXMzVSs(MQaaeK2IN0N0SpH`_ zN;O4FACpevNbN_=?$JFNO7j-ir(x30v&b9E51TJao!Ty%DqKk}JdI9;R5PtT?=jc1 zopY*Oo%asO#|e$w=%m7|&sTz`?*MZv_a~(&?I>zj!4VIyjlpxi$%Yjc%s8cdAokm| zi|U#nt{aVsAc7m7*>>~F)}F6mztO6tHoT?ofU+~I5MWt#|1!HN5_sTpE#r`PU+}No z6U`~-o>;<1t|!zRE7S6>RQmQ;*6@x%Qp5KZx>a&NtBuHm(1Yhp^9nr+pl)bnYhL1w zMv_qCIwtE-&mQT8Yqm=k(OBPoz5FS3aPX`;QHuFSX}a?zYE>8cuvxP~(rmrtTpYH%60iF0DgUT0PuN-!mo>iYLO(43WxFyUtUUR+tLFnw_ zQu6xUlX$*~w)<4lOyls^}4i!tTAcgGW`0c#?)Xu%%|khHE5(to!*|Aoj}8 zJi|UPCzu1~*yM~up1Up&IM+R^b^yM5Q+pwdguYr?MR-fm#h#E=!V1EodejZQUA|m8 z`{W8w7fg66v8RPWh>qOVc<_P%!98}t&Znq4B%Kc8Ji^cUh38HdVb%Sc;wU`rT!k(* zk!nm>u-4jz(EEr2H+9{UpbR+rrk1N$=Hc}0>9PSmB#8jX;D1`(>q3D_Furc|E%Hv6 zf6@P0loj2ORgMs`RRsn4Ut&^1Wzf{OE*RIzpap7+>J6%Pc2QdeXXVygFNf!S+6o;K zEJP%(3pF7N`-A7Rs6J*z?Dnuhlj6$9O0gWR;~~i*qLL9FZzg5o{lQP$PVimVwLUHVXcDAiDAuvXjzo_0CylV>RM}_GP7;i+jp~ zxp7XavGQlu=WLuE9nIf)Gy+P3sK5cYpCK0KwEp~Miyv92cZ}SA)Rahr812f7NJTb1ceI}4zEt2k2u1r%)V=H< zrK)7osed#8-9 zB0MgTBVsxH$J|>OL$J|eH+^EI{922pyU;QJ!utibK6n)uQIgOathv7=QXv?lf~(ijX*?BGg9VS?}tTJi!7peEvg@ zf+d2AxP@sxbE}CP&TCn-#<*5c4A*R*pEh@T077NBB(Wp!Gvm$m^oP7~TJ|{4>PD2f z{^)@Fg6WK0Ni94%(IX*yHlycpA_MpiK-*wjK2l=BIy0%{BH+7#tkE+ss454i-!8Nk z(rE3G5H~QR8rx>2^NiSm+kk$N=1#j6QiX&I`8E4wOOKl&m`xrwr^WGN?%p%_+F* z7vQ>`R=c3At~Kp0h`7$cpt>ppTt4}Gz3lXWcTK}L&=km9uO0t! zlM$qtlXyR}HPp3tln9Fj6-|$Bx!HYP#@vb*O43Fx$*(84O16V$t#OE#Qk;%Wr;v$H z@R&+O^i)eu7f-c6e(wJ@ab&3XvA76COM%`4TI`o*Z&%hMFScmo*&3PBRFfi9Gq7}} z&s&MIcCn3fX0LAK7)yrDz0|gz@HK9w>;}QF^g2fO^)<;_3lizW2RH|-33MdI1mQT) zs#8Nslr$)c>O*O8;jk`(zlSmH_r*CPC1|5sR$U#^;L9EF6@AoDMuF2wJ%ks9urTt2_3rXUnGQz+CchFLobgnoC= z4^I$xd!=cd_);Z2#b47jR&l)!bT@VVgnqD(kxV($VvJ8LL8($4lSz-(5UhD?RzzWr zo7>@`YyInx%e5%Kd%$2eT#O=7u0!v`eCCB~YOb0h)TmTSkHZ&YG~R5e{dh8sLC0G6 zA>B66j#}c{%_KEGv)=kWdAhUW5GFEPSL?oDjGD;fV^tPCrJqs@_g*zi%l=}Nl#-Z) zoJ>tP!(L(K_<2xIsw4@7>9fRf99Rta`RU}%BbFcIGhgnC%{X(_PVGNz`o)!;>N-ps zp5if4{_U$B4(8BP_j$?kyxfE9CtC4IbWHGxcFbb+D{8VNXauv^Zs?-3SEH2_Vmf{2 z5!uqrPX1T>nN8JCLH6ftRzznyRM4p4wZ^Xc{ak)zLMFne_n5Q4q}ALZSNox`Fq@%e zBQr6cM*m_pt7lKO1WL5X06lCDXkd!=t6-`FJARN954ia$d*bn~u!-+U66tDY&)H7T=Io9y8&lc(3WtMJ`#h3nRB2;Z0ZVn^@VH5_ z`eY8_pJTb#*Sfr2Qaa{b?e%=+a9eIhi6MslL~!PY5v5yxobi$L+&T}-Hj4k4Hj9{o4B34 zR%`eB!7WoZO~Z&3h-JrZlOt68XF>X#rK|mnJh@X3G~v)S|H2LbxMv5uTBx}^f~wZI zZ!;KzF6IdM891;3pY-$7OT3|)L=&+Up}U!|KsBcogLx1$mY9iQT##4-ZU)J3ED76A zp#8a|?FLyC$bxKM2;SHEqBWlD24p>}uTFkheK@b=MlETWx1~8p+AD&#zXLcYF2GH1 ztAnKWIt7pqik9pth35~#GZKdJ1{0{*={YVKl-N7`4St%KY(;1EGCXN(nBD5CsJV>P z{y6=U<63fZrqHJ&x4mM_)L&tm(F1e->1hEh(Edbg%Eh*;vpu;ucf)4sM4V9x1fNVu z>t5P@YWF&z?-VNdw7BfHT((67NDVbgRIhUw`5xy^C@NWlRt-o~o~YogJ69H9QOySK5_7!Mbo3>KtTUo+g zXXG7mb{4j_l581eiU}qegHG_ZDZGZpyi4DROKSxn)?^G9^Sz&ukp>dCgl5Mf{}c2 zu2M%5R#$E^i56PwE1(1r^ti&QGHQQn_C7g!C4B|d&~Bj z8g{9p7->WAF`p=-#p{&R)`Y|Ul|+@E13=R)X@^|=Chf&~lI7hErhy)ReM}UZqCPrK ztnDfdFWos(clm?>NELPnTX^09d=^5e^|yeFUCPw-$PfifG3_b(lOajbF*_NyP?l0q zREKJJJjX@1Gh40ZP?U@7D*RR5 zWF~MsK7FZ0Y9&wkmlB_-VP>1R-`hk{kqSTW29LreLar*-Se;EV;V1e2{Evu>taANA z73F`;mXvMO$7P#^Y-CLxeQOUaMy;_jvNgOoex}e$$N~(O|&oG07XFUTqo>= zlXn~GsFI^7NJXJmV}ANf)A`B7l-d!!Va`mJv4?kpa5AXHd71LKPFGdyu@f%`@ zlN##B628^Sdw*vkE*VdlzOPav3YpBFebdSEtKIP3cXMf{GeQCxcb-QKwad-uixN%4 zpvQ<;D<3BWIM16YNolZN#O(G?F8OP6sDpQv^OW9+|L7w3a>2K~mO9vwmVf=y;R9;W)3 zCiq=?(RQAFyUy*|P>-s4O_TLQaUFDW=xg2`4jGRNRtsVxH+@GzU8Q+kLT5a=w~DB8 z=#`S}LhS#Hl+T(+7+Q+oR6-}c*uUX-iKTyZg^N6YwQ zYy1Ra;WrOe-!zuOB~7P7=$oma4Hypk=#+S@Z}dR*~f za}t(B{KmFJFGE_M1vDaBalG_ctDBUgqi?j`*^xAxd2G~EkxH$z-`4@^Jz(m;T?uu82q3p;+NZrqL9bRzLW zMN6}vTa{;cofez{aVWaio>0f^V2+y>Og!I#o~#Y}1*(@%MYQ!!NN$I(&BwIATRLc& zQeMjiMT!govTyoMAs}zeE{0sN9i7X(&$-J?fZ8>aehc_?`3W}4*SUDzfV4=ysO8+m zr+Nf57qxb<+9w&rrFN_@e6_#L*3l|%@E2jq_EyZUTRXhP-0z$(pi#HHw6|+3Y==#qA=0T>~2+aOLWn~tZk4ela8Of_IeC)N`FDDF$AdRJCf-%DCXf7(att}U8 z3a^c&M@P&M>(%CL9eUZEi7QAv!0lZCNC=7#7Bp5IFN{Z|^kvhiU&Opw74CExw21hc z#L8g`9R@OQp58j_^3%(HPM}C1pPW9kjsN(|?R|}4(DSydm(i!tdEmKI$8Cv}=x_AH z`bZfEFCK^aWHsg{^DG7SreOlcO@G)G{q2V!l6g>!=jDMDtR68Nnt#ofEwT_6%uRPo zmO)1eMgAMxo4&=T)v7M{v|`eL(4M0RoE%>JGI`)D8u zW|J!Q_WR^H@HW}A>wPELlo44pqfo;W^zp;K#)on0d7>5<)@k!${x0w>sxt!#?kR+F zc72ZO>btWW&?Bo8Qr4flHkm2C8v1bzh47cvzl=9iZTq_rrmLvu&9@a&ykvM_wd>&C zRh*yWKgP5B%gw4Z;iuN>%{d8%k?vo+1kWla#kXRX`qD)q>-qsQ-#WH>E?vt$>VkyT zXIl0uI)2K_`+1HA=vl>iu?;pFGZkB3n!cdIQ=>avT<)yCnm2TeX5-qvUz7`e+Ui2O zllQj4a1i)&Cwwy1fL6E8o;E}e_xS*+yh8P9)o6F@i~!(E{t?Qu5O}ZC#xK=dhVIiQ zl!<%iK+m=-X(w!U?2}Q9(c7q>QU>k-n|s;V()1f;FlWMUi@l}5=T%DXKv7tg!=&TD z54HRnX4mE0;4!=V@vA&=fo&6FF932;0QKc(CM)tcs8a4Z@609NGf{TQw&|2m1se9R zc8y4aP!XCj(F%%!RO&Hlrl?DF!)GJHwi*CMf1?T?BLNh1sHMCE)XmiJuyFkVU!4rx z_)EfPZGz})T4~aR;dPJbCG21+bPi|KH>}K>WsBJ(c@_k}oKWlzzxeJ8Ro2MPKcXa- zXQV0|;a}Xm&8;_&Z=4m2`Z21;xsyg*hced9d^61z1==-?F`P{hT|RW@?2*u2+Ywl{ z+#T~bjt6NrxMv8Z4*Yt3&qq(b2mfnhd!A~C(t%BLeT&@j2yQ%G^{y`|V8q!rg zQ8D~k-oOc};$2Di*^Wzz!Woy?bLaG;yh+5X_oci?u0v=W18=6j&4wte-^AlhMpwUc z=;iJ6*QKf@?0bs&^m(mn!B{e-ExpzNMM<}zBjp6cSeP5cW9%7+JQi>#p`$HGVB8x< zPtolPhWOC}z=|3kNlRA6e7Zlv!*KjAhRW1s)qI&I3O^=%f_UUMU|Cc$x?=$)k+E;6 z2Yk<16I4Z-aqflg@?L5KmgC6$0QztG*4$RUWFpG*L&P?jPSCGJo1BM4Bx_cS<>wZp z9NnM{!O+V+**E$vO_ba}38=?-bzB58QrScYe=BIB-HhVU_Hm&Rtl0A414W%kDCe#H zWuEL?x@;K#fFg&2gqvFID+$+<2B)DCw!t1i=wQ!4pnc9o)F)n!d!&W2%~SkaZ`tE2 z8p$yK4hG*d%4I-e_VgmNx$3tpX>La-tl-rEls9VxHuQe%HXRxv1RgTjpeKu7r?1BD=!_E=bPI*-H1gId)qPDUuK?z zRch68qwi*}*R6VJASzcx){U#rUBL{kTC8h*r1FPfGPxGT9uQOcWj}+WX4&2geoTlG z{i;ZGc6Ok0EickD23R#Rl1Uf!+S6<+I;xnGsl$V}Oe*UBgLxim3cSnmu#g;2zyOfMe8c z2FQl9!u08mCDJGUwH>Vk^U`_raKL5vnGP$?{{=rmz`og;X~*7|Dk4(lS4YDC0Ps=| zjxzq-f3~pjwuyIfFN6Lcv+2=E8DA=C6~EGMdh$sD6#G+uX-^)<`!;^b_S$xx99CW? z_=y{>(%7)b2wVq%cSfOK38{ae!&_81sP z1%-H?uSNc6&tt0ncM`Cw{IS*l0Fl5zqSbcBiV--+r?z|7(f_%2uNrEO~7 z9sQmB7pX^i;jf3M&G9ANd?u}}F%Ip=1S6MY$s6S(s#oS!?enO9a_2es;C}Op?}t8NGHFy)7qqs zOJ^IfJ%1|Hks^n4XBqS(pysVZ9&^x^H3z37l^d&cG@^4vXbqs<8vIMMP_AIJQ2`i>sWskz9n6JRq>SC)$OH?jPt`B zK25Ijn`0YPv0_U$+zj!Y4l3pBqe}O@nTqz#w=KQXn=V%aAxZ9dH03*nKnu5^2LgwL zzA>DhGuIVi6e8p9f-&n{mO7M{$kOmPjJ1!3{vus(!@8B$ld6DKZf)3ZBm1NrhF|tr z5Pd7xWBAG7kB@fH!{e(2@VANF1z!;92t+qhayMMSKLSYW{>ZNmC6%%^=ARJUGB`cT z@)PLT zKAGmczgN&2A{sxLMl+6o`oveGd?)zv;y;6Tj5OQUp2B9$#-Dfl+e?AmGB$blTpxPw zX0`Zt@#;b}nQguv_@dwiHW%(jjdsNI<;nj5EKYg@$7~+8%Zk8Ksd-a&Wz(%zm+^I7 z*Xn%C*5AF!J$i%2Dcg6hMnU|uUXk%9;KsY~%Un8dh_s1xo0GW2%vGbgP;t2(au{^) zpHW;^qoO^dx66UkkMo-GC5Nd8X(Q96S`$}`G8`OW08VrCsLC?7GDbTNeJaJ;m`NP& z#!t8T;-ZZ*ImaK*>sZM&X>qa;fFG2zWQ=qlFSv~0;D3b%U_S89dv&DUgUKZQJJSl1xdf7}`LpSN~P0liL z&j4{!7C71oQon^XFYh`WV;l_Q{Qm%20CF&s8Q_3V@}*=9qiD%){)37`klFjI{Q32# z6$ndXpy`bJ{{TPp-hc*B5O6b&dvi$Ae3&GaJoD7jmK_Kpnh-Dy7Z@X{z@RKcb7vjG zZYhF$k>0azED8_1f$ducJd9%mcBtlwWl}i|Ph(m}LTJGe7{&p~^`|U=fKLav9V+GR zfrt&bBdt~PwzhNAw_MhjA@(oBtIcX-*upJ<078tObI+;m&2$#JqI4+5-dI-6-%3gdG|4jn-I%kA&{&O22p5Yo81rI@#vum=R5wN@FnHwWAr z-SHig&1jbjL09B~#_W!@%|?YLA*nKvy`gCGYj^1qf-{LN$?8^=rOeOMVTX)Wk^k5G za^`R?WZ-8Q9kEnN0DasX^%ctW0!F`)jt<;6`OQc6yfzO* z?@`E9@sa@GV~kWxr`Xp0h5w(k4mp~dR6x1s6D`@ z8?T34=z0Ust z2k4CU+FGc>8x)XX$Dx^lW9&ffUt#|M!DxSK>An*D6NkWBE$oZp4;}!QLNY{__5px! zFnBT_lhbKx`Iq)u_-Cg4Ebukoh`dJPJr_W?8osVdDHD}BhS-02$o~K?G1GAFE7Qwx z9^SN5dz^UON~1MtsyQ zTKLl5Ex)u$v@Z&-?=D5ixVmHev>D)q3dH?IeewHce%SDS$G-_Re;8X!Z!e0^o#EdD z+U^_w0JJ1cx7v>b?%P1y6!h~Y#{}l5_&eZT1NIL6mDW3(h^?*kJ7V{ja(ss3=0G>O z$^P*t*9tLTlRvf(?N@pGQT$SySPMKl4w(_t^h;S={ypu3mu4gT^2l07_h36$+tidY zthrMAZ~A}aesfBUxQ91&roVFyJyO|x_w+oUUDhYQ)h=&t?j^gsypg4OrgnKGEJ-Da zB$Llm>sVJ;jXb2DGI`?_HPoS)l75365A*(URUSR;axs&}4_f@zwP{qS=K7zj!ZCzY zBDNhG8A_=B*}w z$CLo%pMG*F@xU2|Mq9Z9H98>+(>d`R&ur9)#m8KafAh$!U6@@CjBNvqV~n0Lj%q|> zf-{BAKO9m78*)cE{{TPKQis}l5;LE|hQpK#?tGJicsLy?i!Ru~=jA+hJ#j;}KBVK= z(`IFEH=a+gT1l15aSXm%?%(E zJtyI}?JKQ#CqX(Mu^qRHd@CyxCX=Wp^-xX^l>Y#E52tMQ=QYrO!jJIR#!FYe_;ssG zCF-G;Zw>0Nw)zk`K1&mcK*y;dW1et4U(CQG<_Eq-EuG|+mvK)M$pp6VzBi589yaw1 z4nfDIXsan{HFFAdIcLoWVt*6(E=?C!n%3&t=Em+8A>p1TibcWh7z6n9u5VG&Ud)~w zjP)GXzUV)+<-d%yNVIQ=+F|iFpC8K>qYl`08xj5FYykN5Je+b*N~7ZM+2CtB9J=>{ zbtwF2pd2!+Xk*l^7rM;{2Xgc!diB5txbZj`%UVw6)bVoXaHy<&^Kb{Ut_%$uWqJH47|@(5c5Dj-b{(<%E{-`1287;tlvag5QuWLy)T_`#`2Ta7Qt zB;*5-d(%9^I6rrw^%U$0f4qIEINEW^<2gJZ^Zja)C84q+$OvKxBL=f)kIHhc3g?>A z!h?~(2RwE^=lRqcgd$Yj04%%`YgFx_4RtAqe8d>f}T_=T}sgD^Dw~Up&pp)Qd{0NjnYnv z3r0!WdLA)~=)7U1uBB@o+&1kDGAGIj+)q>eeLGf-UN<2+WuWhVwYv#Cz z0+q72O&|Zz z`&vkqpVK`%Qy$HgSmUO0DqD$nz*w9d@IlR1hWbF|Ner#Wy>e(nkrawz?pTjeRiuz0 z>DI1X$Ra}JbDF0$(i4!lIUEs+8Z&IKa0Hm(06$91@t2A$JOSa2Q&-g|j@wVtZJzGt zM*ajp`B`qt~u11C}P^~be-c>e&wZa-=}-81_q;Qs)H=2 zMSK-*0!Or%uQdsyA}Ev(yg@lX@Ds-s@biBh8+1|M0~(@pKS?rT+j0lKrrMwl$c380hy3)^-EW)r>L{C6JGj zEQ6jhO9RIPuQmDSdvlzgxjFaGU*}tXIq{9xj66xGYTAs?bE)bRJohsAU z$5B=i+<}tZDapaBY=R_Gr`H^H{&eRH&q26zj-*wAX_frMH_)U1LS_Z4rLau09w{b^-ilo9kNr~DZtaHG zKnNeak0hbV9naxhjEX=f)L>SRhI~_f;cN7{vz|y@2qX`>NG*FsWT9Ld@vAaDjT>MF;DJXxuD z6J8pgje9nms48p|!q{RvDeOmVA6ln0VYnm$J-PL$n0(pE>66W67UJ%U(df@)pW?@Z z{x#bwc<)UbHoii`7m2i(a8D!tK4Ba>cO(Kp&NlU~PvVE{;jQ>5O-*7EXW}0X+=B3G z+Ekxtw`BEfWTD0~4;kY%!bxz&3g?cv>;C}it>1><89YJos`S2zeD=vJZkE}UNd&(3^pRB6dRb-5Jb?7xSy=yG@d6+Ty+6QRdA2S1Vj06l9O^3kCrVD<0D zE9iMA@CV1GfX3F}4t!EbR#6dcCs1bVoN*RUbBue}2k}eb?ziy6P?pnN(hYuSR)t#LKs79DDoY{AuV4gYxGbbJx>Tg_IsEA^0P^w1I^#Js=Gw!J!yI+% zOl2i-2~axsrEwI24LAUC+PzcYXYAeLFWO>VTF1i{&|Tl@I(zC8K+MQTR_%~O@8fCZq6h}eQHE9toJV{}3r(wqo`vjmLd_><`DQu^eCXJ((Cn+K~RAnR)`GZ}DgD!u!{2>$)F?lSck~Rc%A1N61 z;QofapZ*H(@LNsz7ykeS4*03z{TV`OFzZisY?uHl%^FN`?YY{#bKt=jt*Tn*FB-=> zucG9moc{pdy6np_A6cUsmbKN+Y{HMQsNlLYitz*s2B#=R3Ik^Yp!cm$1>EN3N1SpP zW3e36KM^cVhl(zf1y_H|$mfC0SMZ$VYPiY4;P)8ysl-Q`oRQInpDjqU?2iC=fOvz# zb{88)e5F}1FbNqMAD8o@xqsQySM&TKEvQ_ZX-Ne1AmNDV*DasMiu^M)r0L>iA2aqm zy0^5U86W@A`uzB=#e)yFLL}~`#_!6eu(?^KK3uU#qq>n;I?uyPJ!Ktb8Qh>BoT=dF zv8-FqgjZH<8%osfAUu)32k`oRb6#tyCD64BZEkuM(EZCP9E0_$7f7Zfo&$U0xH;$X zcZJZY{{To*2N(>bbJhCPcRv^}JU?W|RIva=rP#zz_;X9^32ue;X7*&i8GbNnKeOM$ zoqNVw?5hr&pxZR;8y}z5C z(>nzSF~CF{P;|f^mF&OpRBzg)KWTr6x-Y`-49jx5E|DT%YT>?BxVt#mr@0X!W3-HK zaou?2wViUu_Fny;FZK0rF6t=Gm7zhq4<*!#wdM`f7}TDBynUu_E^3a;f05?q zmHw|ya;wScy;Gtd| zbvXz)j@cM*=he7T^*FCdMdNWw6xN$BLkU%e2MX%edn>c;-}odK?7ja02oHeA#4TFP zCbQx+^7P21Tr?J$`}jQ!gelMWRC?FX-|$yI+RXfA_}d?Z^o!M#!+r;rOIMOF^>>%V zfpI2BP@7gY?ee}l*Vmu7pY1;n?4kQVeVaymdv6fyR?DVnR_VdDja6f5fCGUPXCR*V z$9nvRzq)zciDWV`$qmUTB$J%=Fr5x0AdCJ<2#LdFTkJK!^MBJ4~b*3@ZOlyr<6=P)<7gSEUHIqB)yMb4}TII5Lr0$IAh`?{@dDufQJ$JX7&fMqdo*I-aV) zefTZikxBJzZ6BF6_kX}2_$H@?J{VkS`oD^0e-L*&??{?c#}WvBrT_Kdh|z9H3gKM%u>ftvE*lht-3C|rA!^sipff8dnf1JZQ#O;23$E~|KXdzF$n6#FVF zlB4k^zM(VuX@RtcJvtLryrwOc2M6ZIKDFP6%V@#g*Y!Sc7sOb)mgSc%yBeO;a_p*!!g9lc2yg1&9dg5@E^dMIJj7R8{yA>`2PZ-2BlCePl7F~(8-2P7PNip@fdU7JYm zQOxGA6+i3db6@aLKZBkO_($-^LYKpS7x4axb*k!%6tY`c`Es;z#Vc^iFf!g)V8mo} z1dNZ4@X(_D|ZU_Px}9X}PqkX43|ZrD-iBvD!x=m(G!}1dK=+A#wm2`_*cdbw5MD5TOVzbVe8YwrHJ^v-NtS#8!M1`8Ryv4Yz7-6C(!=@Pijvw z6m;Zd{e9^??5OR}bDzSz&TTAvt3)8n3?G(-F&G4(v2nZ|ge2Lxl+vFptv5;~Gc ze^sLmX|qrA3PkdI5^`Yo@<|DwDJKxbD!xrrnb=(T zZ$Z>T1+7@7Lyf;xZo>(e|H`$yi|XiK7a!%w&IzlK#p$7y4bvrfWf)w!}?U9~Gdh&bAE3Gc-NUkleE#`%`%M8)9Z4-9{Fa%V}lZm7% zr@n+vxQ}ZMz<@AE1Xq9XfH9zdFQdrA>!aJ+Vs`5TF zwh1`gc*Z>k<>me_@FmxWwM&aVPfxhgwFo(QE)!$m_Z^5nqO#HQP-KQoGLT3rM?;_F zMS7Qoe`vdnUrUcf@#dWujC3_{sXVQ+{>XoNIYtS_GlFy1nogBEuijQ=LUX3H)gCc- zr8ESv>DL+kYMkSD%ttHEE8RRr@DkI-wii0TfVFSTB zeqc~I1mlsO522>Y`%4_;dkp*k0EIeFyf6qLlYlcrCS9?}KBKKPfT5^L5Db1oyItV82{#0E&OIu$ZMoYd^GWS6l;YnMj`+>l8<`*tNhOv;BbGdz0y27j8LFCWrrzfx zIR}qJQ{T#Nr7pk*en`z$iZSO7zV*R9+B)E#hteOjP5U;Tc@bO(VJFidWc`1_imUrE zN?Hk1sC}$`v5bBg&*mtv$8-2Eu1NiBB9r>0Pyf>U8XKRqcL0-tRs?=SVEyk-TMQo{!*%g3faD&@V5nz^f~PO-iK49vWawd7y7563Gn*@yOK*SuqR z5?i};`!<0~sWf=nZ;BmivigSs0SX1pRCB>;4K&`#??mTYlA+-U-pJ zxA;fE4q(a>BA)o*PbobKPxWI5``)~3Mwhgenlqi#Ni)trW^acYpN;i(*6*cR^<8dv zo@>bfU%bWTm!}G&C-5Iy@}Juu<1N3&Uy03SrK+ceyeI~prVlW;+8IeNaM|FqF+DpD z=bHCFj{g7>W&NH10B6;MPIzMR7mNq?ewu?Bg2)fwPDfz)Dm{AluZ=C&?6IUX00i~@obCSrW`Eh* zU0+ye^!-;{jB0w6(rpIT-DBMvGkPkL>@$p$>6-Y*{t2P`GJnGN_`)?EQrmZi{5*?w zces4A$+&EXp2r71*sr61;I01vwIcWz!4P~m(dCVAyi9`QR}hd5rH*hQ!27;t2qUrv z9AsC~WH?%QTr9H+y%V?f=eOQ`mlfjbV=++5aNTv6m;5&W0CDlR?VtNf&-+Y#XVi7r zWRdhpztMDPWElHBsva2s0JS3m=jsP)@te7J#zsbS$UW-qM@fD?3Ztb6Um*DB)s78e)Wffuzi3Zl=BZ{@*-5O0o?N6b}C)+htF6P5@ z{VFn~AZY#>(jxOOwOf^iNzNi%jqZJdl79;KVQ8xy5_i>|@9c^DCf|P3 z{yDhQjnvvclVfc67kA>^%d;6&MF#+}W9z^T-oHye6Z|6Z*TA0#u7%-kJZbg|Cz|BQ z(n)hB(56RXPD$I7jseap=fiJ@8ehS`0BJrM(IIH8^ovxr4#zJu43?3Pa?H%f-HmB7 z;4c{Ciuzn07ul|9Zhn26=F-H^k{UsNK4gx?@)(2Kp=VJiUcFCKLrcBF@z)-m>*inE zANKOL_%yGfctz~>jedBX8_2E_NOad(5lXNC?qa4-mmrUqwrjpHR&th!9ukD=)QuWS z@@KPrS@`$iFM;-vN#c!W4K`Vj%M1;cnq&k5RTnHq;-jWAYvX^7U+`4TTgN^hy3>3u zqRHXrxI+@&OFrwU*p z7Lcgxv=N*tk58?8z32QAlG5Mds$0k6a^5SA=9O+)PuT8(Kf8&e&g8(y%(*!yIR}q1 zVlfq)SaoIG`X!X$a8qAjo#gs-Ubffo`;U)2UE`g5$5Xx5xvJ_Kyrk|8b1O&}(`Y9H z>N%|IU}bMJtCNz)l76|atK#p$4;6d|*N&g!oib|^A^pUoFK==ObbJ6u>N|nWa-p`b zW#b3lyc+JbDnDr5&#j?Kf~LKKT)sttKbAj)bDZN9UREF-tN=WpQ`Vz166!K?PX|3J z2A6hl0Nu&-tQ|=`+0_X2B>P5TVg}ss4@^}_*l%JEdS^b>BRMKMT*ut@}*@rsZpPBWH0GAIiIpdj_<^8Wxo;Zrh!5Y7P^{CTD>3S)!V(nvP- z?av074VjCaWM`h$Rn8m(ocH6A-}+Rtwi^VWbM5|3LA!2w_3ub5E56pxQhM~}fi~nn zFDKunFfeQYM@)6?Q3cva`AEhO8K8G9>H59Ki+L5*t;NNq)NQ&s;E|%16Y3dAKau9W zi^E?TG@p$(b~-P_jW#Rm%Yv4c-Xyk-W52Y{6+FfOd5fO8&s_7)JWYXMamfCCY3U;? zAyQSNIZ_yc4tnu}S4Ojg*HmX-f~yN``ZMSskN*I&1)qTY0=mD36IRuh3%@GjS939u zHWJblQ~?5&BdN}P>*u)R!y!_oSbVk8>3hE}jgCw_3;zh_MSy=5V zNCyOV71}S0ybJN+gkB(q+rS=0M|!3#&8co{(nEly8i%){{RHMLGX;m`lK-3>C@oDsaU_AXEL9< z!Li0p2R^=sCy$dc?)4bR&r0NRlzt?4!bz*emNY$X_rtohch(nI7FSUH$zgJ?zlinp zuS#Eyx(~$dDXe^RrL=mCYm04jONa}UVbjfwl@1Sne*s=l7x#qZbH_?+xm=FprAw_V za`YxtRGs>lZ(7*TB10od5-|xQ$FRttoH1OTxgD~4)>YP+9f^#BM?vl?(NI(jqyjOXpXb)H zCyiou9SHpo`NeX|HZ@GF6e-C#{69KlzsSV$0H-3OY*zIL0F?9Nq%Sm}d;aRYF>^hA7Xs(m?Yw&_y_#qkEO~i)WtTBek9lG}X zD6hx!s*sj0O|$i^mM%D0qyN+T>r%2d=%tFC-j!6uWOBGWah#FTwC=RkyJ41K2LO&u zEKtX$Z)qD4#tSpC#?S_GPo^sgMQ+SFt-14m{1k`wpp*7Z{hY6_^!JH;N#YPR?G;(D zce4Q`z;*c%iO;Sp^Y8Xh_(vRe&wHpahB?))?{20!SfE4ZO69tPfZh2dR=4ei@zeer zxAwxhy0nx_;BN{?_8ld_%1Elme83adM+Ae9x~p8T?T7I~4~Jg}A@DAiWg5SXAzAO8 zbGpk--H7AJ{wY`&J<5g6dzoGuN&88!b!vIoiqW?%{poG!cyGsFjFbFy_@AkGfsnys zz*}jytN{BhtbZ(N#~H^z@G9jrJr?7{n$$LSmhxO&TsV$2kMGFLc7;$nl1QeVp#sN( zh&JS45(oJ;_DB2@SN3L47T6`_hFO{^- z3B}gDu>8w$dN5;$J;XyK{{XZ{rF<`_-zqlMt2@=W)Y3D`acXe_5T2Y`JX$& z8C;X8nb+2(U2gvXm-N5oVmtewT%N~}KRTgsyI3;hf_dVkF6GGDFi6EqXJpgOjjfE1 z*{_YVZ2P$Bxp%{QIJun|s3Az>9DZMwcGi(BWPH5_GmlECqUmDJ%}xL(oQl@Biz6qD z9P!eZZQ@RNA+;x31wi0)@?Uiu4Hj@JffSCLeN&J-LTrvP=Y*eg9c%fmJ> zXH(dt+lL6%EuA_s0YzNuc6DZ@tpaZ*!g}W$4Z7BQ-jub`L@=dC1?5R4cc5&jj6;|~>D_(#JUmZx~L8*Mt?OPN+AEag#490AEZV-@r; zh1vPVO3pF5-0`p5llHu}_yeLphcxt(Z?ny0y>b{lvx%S2^ zL1JB)xpqG>B!SF%@jCb8AH}NHUPl#dE5?bY@ZQ((`S># zI3;z6U36w2?H}+DNd2PzAHI{SMnAMI5=k_>r|oi+`=^fe)0yE_T5fA}aPanJDmaCQoA)2!{{Y~h z4zycWkO}N@%~y0PqX6-WwaO@o|dDvvjO6iOKZ`G=Od%r|I}om%#w=PaK}LBA{-AmghL6 zUoeqI4^xf6uj+rq)XJl18#DfY{Z!E&Ksd-fG1jMoMvat_w*s11A z&iPztu6tF>pO_L3KsnD(e)UG-zHhs?^~j;1T9HUYJ~_zaJ?VfJ{7!iObUT#|>w}yQ zw8F<6k;fo3{(t)P zrHRG}%_~MjgMrUrdi(x@l~c@-SAbiu)N@ePii_wjO0Ewz6C$3V6$1o&bN>L=sR_dJ zPDse_{zWsDAFgxWv1z?gu7_dp+vAqE@XFR}OJi++rOuvQnr-xcb+m(_8%e<9BadG7 z(ck!Yz~307p7X=Er@~sqQSO&UynXhP$Z^avoE6CgZR8A$0bW+8YGeRN93G~T6e|)B zC#eUnYe?0W($vCq*74B2tawiQ!q=h;+i7j3C>stjxMQgGst$!)1aXcy&p+f>OQiVz z~%5vGq z;qOyAZR-)zyNd4PX4suJCChMZ5kJJ=X!8g2XN`yqY)US++A0Ie*ymh>Z~2s z<&fW8n`>g(+(!birMT+N*E#34T-C0`&+?E$@sH2-thuM;=lm-dsY#5wn7IR>$6lOO z8=I3egPsTFMb*b8LExThDB~{O&O1^ICf0BJ~!-dFmzW%&z&2+yuL<1KjVH;$^o&@p01N{Nm# z)X%fCzwsukYp3b3o1I5coo#JmQOnBbYN+?g73=>1wUzysh4pt z?zP}r=ZG%+L8;tdUPvXmyP4;eg5Yju$;W#2>fx3b2N_g;{Y_H-?|+%*Q>!daE=oTI zJum(4-zE5&lAOuF?N>ZMZ~ddJL2P+5uv`wNsJoVK-7-D-kY%f#w*GXT|J3^-!;_WCB=8RzuabY@uRpa^{{RF& z3fp)eL%Vx_7yLt3wGRm3xA*@({C`lnm*Wsih3JMB|axJyktO@Z$2 zXOQ6`i4e0fJ%9qg9K3DuTTuPBKWYts;wGgOk!jLSEwqb#pWIl-m5p$E5Bq{y6TTzg zd}8>St9YMMK2(~7r^t^RL=Z2^hzFot52bt0?Zxp7_uBlB%N);0zuB?OyICUd}3ySGmcBpyw}a{zpUbv*GRc#a|t1 znm(BeNj{-+uqZ%SgUKzAKn72+uhid&9yZc{;GTc6YRO_^mr~QMqp;H9E!w#0Drr| z{PAC<#aZVpRJQCB->rQfS08ns3B~gL>=Nzzv9nFNG6)=c^Ii@A00j*Av#fk0{hnk^ zA_-RG#1}(OYvgdhVMaz`-`*vZGK_lm$3E#g6CquseAyr2Ul#uW!CcbneQUrkJn>TDP4`VQ4O&jNe3MAcs2TO z`xRJ4rvA!44-uINxVASrXDo2!;EePK8OLnb=B}OLyX|838(T<>*EdeFMyty^vBH7s zNj3Vl@Q=W^Ukd&bcyq(ok8ammO^jC37)BJ4pXHo&?V9y6ni5qUn&^Dr6jYDZBCoss z4fp7|?0&eeKjUYDlj2XpPZH=)7?rg>HfWIx?aYBoMl=5SQTW$fGRiZMazQw%*K77@ zo zw)|fQ+Pqt=Tqr=77xT&$Miom)%tkwMNyoioOAner>5BMj)PH#^pR>@N;F(rT01kH! z-kGS#+}S(<)~$IA!(hf+fIE|#)$rHDeS5`ol+!d#UiB31GDT|sTK!uX$K#6SSXz>P z>Nk~T6?r`j24z;kW1oLoSSBqZqNDC7vXfrJq5j6&-lHm;{YOaB*ljOwaLqiM30=*I zw_t!t0f_0^z2n247STKo1UgQWVWg;Cs`k(#$+ywi0{O;zkw)LpN|vd}$j6vLJbDW4w6ECe@?Ac8F7?elZj5Xph9qZ* zJ~}*{ah~d?y~g)ehgXr??G~3Z+c}D36zMBK-AXu8N;eJik~(y%(MymI2alV$$ieIQ z9{uaqhEGl^(npg#@}qZ&^Uk^ZF8G?kirXDKP){kOcaGpffrfrj=3ueoj1FtdwOb2~ zCiL6gMJy921*4G)umoq2c^=hrn!?`~YZ#ngsLH#u#j^c<3K1_0-vuQxHv;YBG#_42&Jb=y)~6rHxn zdQ@xzvE*aWigBI=LB2&pv}dQMtwkl|C0O~Jlzv$DuNG+bl+yxy!VY%hnngSwMn-e* zOqTxLob8cFKKzP@`$`Z%^FhGr{(Y)cTN{!^wPUpN+no0G{#7-iA2TWY&n%rr#PqAyEN}@Gc)V4AXe_lm7W&wiZp8Wp+lUR~?o+LdvUN{|U zHt|xoARgzQ2&~;Va@5hd(uKxO4{DOrR+7TyW{O!OmJ^g@I3V@@eAhK6i50(xws_{F zlf*@efW0`)T7fc`W7D+%0Ek+5h@|^AwF^7U3Vpd7Y=}u2X5j7v0|O(ya~?9(E%fPL z3rWq)TaL-Gw7Tc6I~wJNwCnSe{VN{xTaxNV`SXqeK9zKx z)YfN+^>crC?nnrOrfcbsg&KJMjXz{- z?;c*;m_8x=P=x7z8ir0Jv(xxzxWELB{e6`a``E8XDZ^8%U!JqHA@57kboF~9%gu3; zp-D!LwI=yuyx(6%yD>j)&x~3=v3;QYH}Fo_`~~pd6J=~bAl_X7Qd!%vV#UsJ&fGSKz0CTg7_( zY{U0?+B8GXJ`QM?40WFs?7!EHYRM9Xo>KDvGmBAfVLWtMcA6oWu>S~oIT75q=$F9`sDho^R=y_j=yj`jI&sn|I zwRzs_Q`IK>MA8y+*&Kg{IssjW?6>e9^Y(`Lyvl zGfG$-5;EOS9^X!t`f>jN1mgXlZ2tgfpM)1)H}MgM!dti+_TqVP1*NK?ZlvU#bpHTr z9eA%pBg-B?6z5lEt2uN0#bvk`Dr??;>{qY(7JuNNzZ;_cmVaiue+BqlBwi=+RjX;% z0@;3RD@6cYU13IZld*ltJcTv+V|{E=MUF5-D8b0-+P;PO#rsj&c=zH5i2Q$fHO{B4 zYgY1Ux+ReTVbJVyRx;VZG8Or-qpKXAc=^)r#6V66UHRZ-^403`HDxN1jAf$P9!Ck_ zDq*O~RadXO>pD;M6;F$3i!@}uegN8w&$ zZ>Zcw2ny_gft)r!l}Or@?VQaq1O2SvSI|+V2*Sx8T}qO2)YjDXH8+d_!U8}5aB=BU zcyj(5i_Ncq2qg2@y>pV?5_8b^C%L3nIVa{A7_6F6dK#&=kD`BPpNU#u!cU9-8rP@1 z5JRS4M)xkDu~>=P=KvCLq>=}wEA=Nu@phBqO%l^l)9#X64MGIDw{;ssqX1Ok;PmZZ zhW7HbXm>ea2k{((Uwr=n!8QK?Ya3r0_-4o9wznk1ThgLv^mdNa2&J=%Jo#mm{q(~g zK*+`kImfqvuTSCXe5VoMD%6Uv4S9NbA8AXd+7)706(iG%`CtADeWgpP_&38^%x$S$ zX?k4qM|Bix&jr5qP_sA#3&<k(Y%Hg5< zeiIplsY}{>M36waxc0Bn zZ9`rccji)^PB!)x#e6XMWu*KZ@J*J7quScR9i_Z*%`|W#J=-pRcVWvN#g8Q5917hs zn1^mU5IWbZhoj3A;&YtK>osi$?yZd}HPL`}sK*1|xWA1*7;L^4d^*LXH4KfK=6tm;OL9agVn&%t3Ojl@R|p8NVO{{Y}0Jgt(4+UOs%-;VrDW14*~EgH?&cbTYMEH1;00T9fc$5j=~dy0vG)$B#yn{jV>XEU&ddv^~DHb6LFah_Kr zc6hIx!C~QEPIGqhKSa%O)5BU6m(26ug}<}?zkxN#uk~BYJ#JNsMf)++k)T#!Fu=-5 z+&brHuhP9D_r(pT=~A1!sO;=*<6_=ys*u2-b=p8s0AbGDaZTBh9AGn?C~!i8co_p3 z10dr)tLE>IT8G4a5;>Dtzj34LA)`OpFnKnUAw_8;ZK@<8Ly&ip2nVft)An>Dq)!?( zE8{9!bFt{YD*dv2C87fbv)}72o<*!*xdi7wJCHNZI7420seaksCh=AHve0yGJ57@5 z#BrI~uI4UD>_9=({{R866}Z_fg_M;G$peg^diLMh7vYV*tt8$gyNH;rWovtF-dl+! zQl&dGzu1D%4PphpjxT4@#4%Eo^&7gmjC)3+Z6rv{LH&i2#Q|c)t5i zsdBL_PjfqSmH@EIhIQ;c0Oqu1yq%qbp>`PoRAm07`X0lr5(1EbLn%E&bsvYm8@Dyb z{A2i_J{I^k;^8Lpbvv*jvl}6oWQ3fv$0Gtzg>@xR_4-${DX7PqN6x59a^$A9XN&&T zUlphEM~d4*NeH#kWN4+pbz^b~Ni*{h%krrQ0OXO{ypHPnX3iP#20roWig|!U02n)d zUO3G}S9<~1-yf}fhA$H9Pn)6l7#upGO+%>ExnQB$+yTkUbpHT2uUzn7?EQ1%Z-VzX z@u`3WL7YX6bjKn8VKQyoXBH9Fsez(JZ&Ai3hTh-@v5Batqijad!uCy&xy6I z2K&R;t!=1UPiHqLWUI81lgR8xxT;1%3W9haQY-B575EcK@ur>jO;*O<_8r1tz!>F1 z3FJt>FyNjugWombpA$c2jZa0jmh(ZE`)b+%3&s~^$^jW?a-(o62t6AoBaXF(BQ2FD z`@K=77c-|>T29RJO}Sy)I2|+ZQTeU29DoPCNS4w7K^Va!9-g9!ARv6$&q8{hwdYRg z^kUOm71R>oWMdihr@kW?7$BN^!`A?3(xPN4q!XM9!M19WB6ZvNck4r7kCYI9N_#E< z$j9MK11Ev)Su%n&*fKhrP=Ju58;|%>qPfUu< zqSG#DnpnNMROM9t<{!d4{xz}U-AQ4z@?vvC#!)Gllu3T(QPT1J=2{ zX7tHB6S=Z*02w6u3X3-Ein>~}(Ek8r4}lT>(LWn4G_6N;UKi41ZBxV-0k(NoapQ7^ z?9vhtdlo&bQ}(d^px^d@_`7kbTZygoEh#^<^lL)@0K2rcOa%%D10W3jJuzK}jjg}o zlfP#)@Dyjs@sE!dJx9c{AtCK;@wyvK_5g6$>RJ0@zIoKH5)?6@z#T9v*v+c_Qx6Qf z9~1Yc`ro4YFU0b4+J9QaOCM2b8^#`;W%GZ6De9LkG{ggw+nSR{uzf=5Aso9ND!GhF zAnM$3e=7A)+4JG8&x!Tu$cU7X?G9HVM|13b>*Mj*nBnM3qv(BB2Ma7kWdwTf?9=eP zcz;c{y_N{s3CVn%lg~lv$gfRI=($EfzNH`6rPyhW_r+1nwO z=I&*VFabGYKmh(ESFtBKsNtinj}r!z6R$qMk?tSxPw&~LM+1z3~Wharjwtzbg$JW0q{wjP()&4O2Le_jw zuidrot*za?)y$=`Hxt5-_Ekcv_QHz$8m<{$3)w~c@;*|PN#?niwV&{*ZP~x;^f}E+ z_3m6T1QCS*_8q^aXUGU*=K$ucP71j_c;}8fR6%k`BOF)8RFj+LlRn-WEehvrIN)UV z2mI!@{5PhU&^r#j2l@OfJ4~@_tDpx?4+o`nR`#m|K~x-*$nDdw{{ULLFtFE|nc^yG zWI0!0$EO+gqCzBN!N>55bDf8_SE=buW0l7s*QpwfBZhV(RWG|d5PEvj1C!s6d{c{V z0FB2SQ)EzZK{yBU{{TPMrMBJJ;?VV&s6EDity$9btF0dT8@oG+tnV$`d^5ozNh5B= z5J440V|NFyILG<+r-lW`9>?FUTsfD$61mmveu{p~U+__n4E$2lw7n0-ZzqPlN{~Zp zw>J`bmYS4{7*hUk9$T>mh;f2X1m?brc(xEu2p}*y3&XWP z>;8Q!wD@QHNO<$%Pl@fdZ70P#x7sZ&{>YHs&evAW2ssfLq$PG|Bmsl(UfvruNpjRj z$7b9y8q@Z;X>z{LZ}3?Wo055p{UUQO22sk6K=zf*x zLm5G<^BxPyG3oNSU*?auoT*YnWPR+8ezl3>{{R{2{s^*;?^)Hf?JCw+Dw17XtV z=DpDV9~mvv=C_wxkryiIC>yQ$V9MyEZXjSkbJOGPV^g18)h@5DrD^XkWqIb2{`0#r zC6Cma9}Ibq=@waaq4I5=|CTJ?Qd8{tN94}Nv%{uzm{UbiwWKUXk#>_KVj12ESssKib+`ox%%~ z^F%@g9$Sz~fB^Y=abCR~$}?QGcRZT8I*zoDLin5eCuzPUmg4^a!}F$&JnsG#&rnYTx$oM&7(y#pt#&gHHhDSK(J*gp0tXnu3EmObV z`9}wl??6Kt#s)||dsm4cGwH7SA5nY_@Em>u@O`SxHfmami6s)m5@gN@i~VC|K>>yo zADf=QcNcbs-c*iNWF>N;!BR&~{{T_WE5LQX+P3od!EdHn>B(t#b7l4`i^scmatvDw zroe?;ATTA42pwz9yffmxL&93PzteB-Ep9*x%&u5W0Sp6zaN{6wYu<)Fl{#uGW5AYQ zUbRU|Z&U137|2pbE5e*|Kgsl{L$PJgahAKgEX{|uIZQQ@| z-aHFg802*0%jAx^9CZS{Mm7@KK{7f$yvQV1LzIz7$iV~*etcJE9=vMDnkSuK4LVJ! zBZl~q@JC1ZgDc(6uWNrNBIXc$$8RlHGHxe!HgEt?2X3ak7vc}X4Qs$snXaMxRf5Rq zF5y$R0k|x@>?B~|lh=Z4>d6&RRBsEDh8zG->FC{$T8ZOFgrtbFqoGz3pm0Y{Lktn^ zipLRwrB_>7m4wWy(RucG>3aN-%b?1-UDMz^ zbF&+HSh33t45tM~6>u@`Yv;KldwZE;ky#!lDnoTrI3WH!es%Mhj5MiA%=+9GE;ZxL z9m?k4eEo3PE)p5r5ql!d&(@`WcA$0T>A5W&5PI2?1H)k{~n-62)L zP&xOj_i_tcUgVL$tar?gc-#$fVkc!}X$5z2pp(WvxbOZ=HI5i`80}8w5ROUh?NQId z4*XXcum{~H0rtgoejL*TkDLRy4teXvVCk`Blk5Dep|zL$GRuB`W*Em>Ph#SSc(Y%g z%HZ4ENYS7tJ5CEPIM3l;iTfY?H?-CDeP7}qh#3>ZzYmpf6ihhOZ?TwRUdL&}xBLKi zuPM`X4M)d5C$!SE+jqRxHEGt`))gGc?SMZH=g9$WEC z;zi%Z9~|mlBEMqSI*XUaNeaKhzkmX`+ovxnC#Sz!v#4I~+(tM*ol+;wH~{i%#i>?x zYD%p~cJ)02UX%9!02TOs7TGRZTU6jGe96WzGl1B|etE^1 zhl#cxjFPtJ=o~eJRAcRGEm`gH5?AIRC^Nqqr0CbH>ko$l;iu+C-!NZ;7 zDts~2_`V~@x=>h3KOIdi>U_oj00npbsUz{f#LI7nS|z}nNAPr>ZmQ`ZD>kEor4Bmz zD0buf%-z7p#y4{uo_hD`SGB9TbsM?vuC8RcySkO8o_RTWZ+a8wrw7|(i@!yNqCJ^ujD`R`H42>SERYkL{DayB?53}j5wf^A2cDvk0!Yq5UiqhI&2Hc?AO5NX z1#Z1K8SPrCf+OZaI+IU`kju&A9S=iDjhwOTo|)#FNe_daze+jK5~ad}v=j24-RZY8 z24S}cKhmJxypxZ^(uo^r8OL0GDqQ;%qS)zno&n^0a1BOfW_#anq;1 zYBqhqjzJuD%@-{z5*NVgKm!BNdQ@#D6Q5p$am68%<^%!<>M4yT=fF||o-xw1mCHnh zgOPwZCZl7tV`#@uU(S_Olh01{DBKS~Kse7sP*hSQq$r07neKFJAS^GAcw#DxpDb$EO3o#2_@>uW~4!x?br>jGz>2us%v5F{SGf2rB%Id#(ov0a(0b+fIc*Ra75=g+3ax>~j zuNMjG`&u-Hf4uU*R6L^c7rb!tbH-)G11} zMHkfeJs-qYy4IH#qo&{{RAdf*@m&Ff-dIycPOWj9OvukOr z;*w*1YY;LZQS+9^GJV6txyNi*&0ZPt&adE2Q|)?1;kT3K4I3iM44agx-5X_32d*+W zBeiUNUHI33@p3yzu5B$WV74sImh#F(&cQ)u4BK;+Bw;`skF9x=#?$3@S38zdRyCBN zD9~5;ZbA@D+Nu z(!Gn}AMEJx&taHESwSPNUTMia1$UoAxW+JpB*(kbxW;c^{#JjZf|a6 z06eqEWp*F|$vpN0@T$``&^>y8kzNKf6ze$JwJ*Rt#8n?Osh;SzPratFcc}yZc0>WbiO5vz(u;0Ro(k=QzbK3pw;1 z>&cv(cV}8w8;z^T$o_Q)m*-8uEPp)IlQC1b^Tk-Ow%+3duX={diZ1CEIB?7|tJj(} zYq7h_QZSr;wQ}K?O|SrMEJ6POKc!jtLGa@9<4?rxH^a7W@Eh58U0i{YXKti0XWdP<&0Z@yCxBPSBmx!d@1)k4(|y z$SU!o0Pn{InYr9L=i0oRQMoSUaBwryyK{>1Qdl|<+=l*g>i+=9;mYvxw6S$pzdylr zU+3mSGkL9#Zr`PJzYaVnCx|u6bX4;c63v`*j>A1ku4*V+MjLr!@{D&i^q=g-@ZLz{ z7jwa~D6kBSav8WgM}9rMy({ChymP|g+@rfbuP4F0Mj#&Pg7NjDEa-S}VGi+(^U~KK0`Op3dTl+M_Ya96ERgcJ+IZIJ42gpY*bI@QM^V2o+zx)(4_N8CiQ}%$l z8f@(+gnTL+PSRA2eWin9Td#jH)a~>@zP0p+{1kWN@6gNpp|nFMLIKne#yKTqXfpk~!6VX&(KN9O+kuj^y;e3F$+ zZZdhEA$L$-UH<^DGAo;pGD2`UJu%RF{{Wv#gq4tS&=7y#_o6}_bAnHE>rG+u5(h)i zt$c?iozJ&S7C$mT6b-iY5D)7UB$9|ovyD?NC@O^XC^InuAZB9n+Djncs zgPx%0ze-bX!FQPD36Q>Lmc}rD-o`WSnl$8^^5r47iRYeqRw$xDmzCJ<3O&gq^RKDD zX{)P$*<Mo{1xa8;kZl zkb=CX?3b5U=#P|VQIOnlbH_CvbIy3}QeF=*WB^J302+W27=~Q*<2A`8XJgTdV~XHo zk%DPtOp)Ay{3op;P&yEE@7Mg|lWut#VtCC-DlB7VWGm`>3Tq!P3y?9$?dww{Kmd1h zO?Z`@;{^M4piNnfDqY4#Pi*xS5Fh|Hj!#c-@Tr)U2Lxmh)11_9eq86LUO!q5AoL@5 zD&*kf)7F?q&^q(L%{|8S7(5z|cHBtpGIL7$jWL9_+~E6<*A%EW=Z<~*(CkjmbD#5? zL{RwMjFW?roY3|t8bFPZ#16!sl;k0DNI3PRjY{Kz&pdk5JkFyBKT3j=x;MTZ>w0g8 zJY%Qd>d;->+1Sb_@~zf4W_80LD<{ZQw@`a#zJkzyXip%3(e9~vs*Z%;t z4~1=XU0UMbQWvjbZqjVG0hRYQ-H2r?f(CL&-WBM73_oWmGzZf4Jyz!AUMX4H#qDDeqlU_cX&Wt^09R-6 zSEG3M#xL;y0K@Npe{U?d@hFZcn4&QxfC{TJZow*eQZby@rH9My@6|laMqsstHFjtC zGvVf$;9D3h?d&X``4h`~=CmJaxNPG*mnwPaq;#xbi9a1|`~$2tmFQD+}gs$<7$|&tG~t z>IosZ?~iJ3-g*#7#yixIASus5#d69<))cUY0^I=jtV^lQ#N~;|JbPlV>sMr90XRK- zR%kr-KdpI~nwNGus6xu&#yj++W(o<%YBrVY&<~|DTw|Vk_5O9p*|^(y&BU2J59M73 zlVk*MxNQmtTF=w0Mg~9t9)0Tep>y^NVwuT2XElV|HHlMN)RmQqaIvE2o-jS@*mRgB z{g}Q6{jjWXc-!IxAg<;jT{}b z5=hr2AkVCfFh)np8mjzb_?>t0YscD#y?2QI)gdrK1{U5d{D?h(uU88dhQqv5_@0sd zS;1BNdg_PSTFdlbsmWg4EKvmq80lGI+F4lRj`cm{q2wwLUv9nXeH%`a{_P`=?;gXw zc$1Z{IUcf&+KM`_gFXi{IM)@zsU&T?dVG%vHdSe!$I zc3K~)$>-=bE<^m_1Gi>O0rT z)RFWtM1*2hWgu0<6Q1Wjs=8zCd>>gpy9R_PYb|;WY;~gvMF?F3z=jD>E0ukPar?egRg({{{ZW*pH0>+@0Tjd;PqVLtJ9&0jI?JRN^U37U$7s;4KqkO z@5OHw0KOgYFfv=KCQZ%IQbxdd44F)Sw9C_)@UM%X6g3}>KN9tC6l$%q?^T$;llO(P z0kt9?%AgN(lis`Eh~Ko;&x*fiZw~xA(=@w%A4$^Bn|$%PEvYy;QrrxD#IeqDLi5FW z85>(XF+B9=*1fz&A~dL~G@kmi%)`>0@iN3zTWGyM;E~989Aptq$WTefK^;vFpp)sI zDY+zPZ%+8guQKPXBFB<&I3pOvS(XvFoE)A&>MOAQoc;-2e0%t@r+8}BrH&bon|C~8 zCf?l$-u(B+1Kf(+{jIJ%8wbYQ%`?E7YU(p<&!oP)D*T!!e!=U(n(ktCc;Y*@D!a^`Q;IZeo117z5#lP@P zZ-|~7@QKu-{>#-b;v~zY+Dc8zs2{@5wOxVERDJ~4fE~i|WQIv1xGn^386mfJ+DAG1 zSKlA7efPxOTHjdI{B?PMsAyW1tYb@>_I2E{M&&Rg2j$A{+}KdW0(Ty3rwLA#M%0sM zlbqtK;o_%Bt1a)l^gaZ?)92FeCAPYTTWgDX8Yy9!3cPL!46F_aAcK&5)mN8r7z2)- z>)(IiqhAiR&jb8<{?gKf7R#>N{i5n9Eav>BmfUr@7jClb(aUM$Pk{G6?JG-iwTAd>l4G&rezi`L^^UzCO98G1$s- z4>{w#D?a92^&M~zPr`x4*iuP;hmJ=bC>bM+5IYao`O`t#InI0F;+0Mm0i1RRoby2L z#3uyw=RfE9QIew|@DCZGhT+Hrdx~o=Ta%D`e!jl-Jwb`)WDrL^I{pC z6cT^0_|iv#j(Q%r!S7zl`#ShH!aCNI9qr1^d#=MguGZ3B6%eFl86{Lrt&f-tm&R26 z2TcU$H3Oc!)i}Ac3*mq4>#6vj@#NQSwLK$GL<~#BBbIFTQ20CmPDt(VUiINyc)lI@ zZVOE@@9ng!H_J5F96RSFnSfQ#9nbZwZ;2lnG=B+2shgc!PMcea8bM{}v&|&93>AWI zE0d6S75mxx{O|EE;oXX`yDihn6a*3ikr7^gP;J$N-j`fRr&3}L8KpJP2g2o3{Cx8dOc&W8J?Xj$Dz{YF6 z{hWL&ZKc}k-w^e6Pwd|eVl6plT&3Qi!{or|-cb3-^(*OH;IOX|RY7#s`Yp_HScOKL zoAh3w;*$3a*Uxp@wIpXppTf;=|!h#k6met*iKwjo>P+l3iCij&S@yeS8E25a(JNy)i0^u&}^k!~q)+~*^ndK#RS znK6vu4}L0$$}k76agX!wQ^z<$GJntc6@ynUEYY|5!Cl9XUX^kN&l|8i`j25*w)Z=T z+HiXD&*Al}QNPQ$9pA&r_ces#Hrg-wWsY`_OoP&jEbkGUXd?h*=cN^uko7k0?s>&rx=>4iImsXo%BeJDU2_Dpgk4*Q) zJ;4q^7(ZHJP|DnHz|CT4HHpr0qz*p3{{V#m0l?2ZVwIeR#_Z#-J*lOz2?rVJ-hzh6 zxjY=_6kAUAldC31GoF3u401~zPhQ+p9e{9nB=zE|D%zlW=yW<~ixhyj3+<3IpTf0S zlIW>M%C-(gaSb6umEG6#t9ClPwnGYc4!oR<*HkeU(nb@a`W-{tga?pE(ui%haq@zD zXP>Q7)3wx{aLu==13ATap9L;FJ0Hc54_tVj;!Ax7JJfsG6-#AT<^X|{g26%dCc5a# zGnKA#)qIh1X!maj-%a}&{>St9fW|F+eens6u9~t(iEXX$SzjGMRRTkta?y(UV{s!d zx>r9lIXtl^IX_&JUYGk?e0rPqh4{^Rsz4=+M6h45=`gbG+XA1ySD zXT`sV-ww2Y5LkHU!KcLoQE2Y%E_io=qC<#6oMBnB$ZQ?hVT$$Y$~A354#^%)5zdu4 zVrr)E6Ei{jzSnRdMhp z`&96*y80xVM1O3#F+wDs;u3@RXxRA(Cp)k>8OX*Dn0PbeAMD|y-b1X}*jeaz@YPS87ga*{iVO)qL#ie@V(}T;L8HhYLHE9eR-)`vh7Drpv0m0 zatr{;gZ7h0hnUo>jjK*HsL3?-zQ@WM#r@ZaZ)d*0xw*Z*xsjxr;^EAa z%EabN>L>r+H1+Cj&X-t!U^T6~6H}{{V?yjpn4woUOD?DbM@_ z8g{AS%k2oN-&$N*vw~G+jHz%qI0Sa-TPhPu_7}8^cDb5Y7;c1didp#wO_Ys7i(#9BWQ$%80NyaUL9F_4^AsBj~sE- zdI~oL9G;)8Ol0EjhSGX6U3*=;@iwh-e|t2yH&;!*X=MA-wgApR^aFv?tA;o@&prKr z&-ukVX2%)HJ^OxC!gwbb=bYA@@^0)(DJvv2k`&_y8T=``h#2FKynT74KQ4GA4o-Q; zxBmcMm|Jkj`FY2#Xyz>ow6ku>0C&c5N)sR*zb-nS)T-Dc0FQii??Qu;IuXxb$NA=v zt{q1?1a!#h%_1o)?~Xm`*v3e}2enCV4&uikfsyUrrMne!8@a{2IOjb*YZ>Gcxjv^n z^{Mq+voyF+a0#lwot&@XUPdCN-H!TDvH-&Xj9?DkDHpy@PuH*c{W*OL=k^fzCflo7kd%4ESpQ0LT6OxWPOYz*X)5J(|3`RlF;>7cT9R#hA9^ z>-yJaS<4MamM`9({!6jTN)fMHnoCG+=KK7L+O^-C85sv@s!^$w?LB+*+J?)yEyv+q z4}f%(yVYTmPr9rK8RtE##+;NQ+dXJO)S8OwdS~qC@cpDiaXJyO?#@2;Tjc}jF`D<- zcF3fC!rg%DT)%;|cG2`W)TSPAO9ls#+pppN9M=3tX}|@$D{{yu?+#m>4%q(yKhmZMP;Mg~vyMKWtyWR<5(ZS~nw>%bc>cZXz-O&t;YVG> z5OM8Jjoh8X2P2^7n8-`x8P6lz-|7ApC=KP1ILRDit}7N(CxMH6*-{4?9jfdzXCPo> z`POo&05IW~txp7@m!aVDK+bsS{OTNA1ZhJ*k_lV_KTl8RMN>(RPSU*eIqUSIv2iNs z|I_?>lx~TRFb{80=~?XBa`8tf-S2O&q!B?1FU>2S0R3o% zp`3w?ZX6z<*U(?FzK5dxGVtGtek<$m1oqw(MuNu7NCeZ}Z9)oz{6xHHzVhd_chI8i z%|*QqI`zGcH&d$H*P(Ovvhfw4?EUaVL-;wN+_}BH3#fRC;cyJ6Ao*mBedz+64njn~ z-mjQd79_?;w>>LI#y&69ej@nGQ`hxr9!vdNcDR$C5R<|WWf%k5MP@q^2qcht5_;D7 z%BoWKaQIfn8Gas6r_EDYOIG~Y&oFt1J@b>CV~UNOxxg4Bo+%_Ojg6$_oS#~JNruSa z9&$R@GL6qfX**Eyf%m@-ztX*b;ZKEpC-BF?7M?iqwXN>5+J(fCcz;EN4Y%?`lG0C~ z`C??)oM)ClD|3!}!(Re*{dd9|Ux;5wyqm-NrllU7lEOie-Q`&LUbrm5LG>cOh0*>D zuf?C+b5;9HB=|ew!oh6}EtN!7j2NLo(32)vk8lrMiuCZ9W~8MhzQ>b~#zrw}`fGRk z9)<8%;eUzl=U)(bgIAlw7W$R6Qd#(a!wkH{3`>ZzZ~@_?ZEV}&)LQm zfdxwOf-(44%VyYWbY`47pKX$6QpHhfd&fpWxE`Q`ob~J0k(&*-Amkk8fKJWWig zWZ?1!N8w&8-1->1p^VtUz~JL1naqeW$7+#)9W#J<BTgO9-|pKzy}2Sb;T~ydICosM^E$pC<6+<s~D6dMIVX?ZD0lN_-20o}`QlhdZ&6^zT+}&=5HG_WIN!t*I=J z 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 ERNilR7XSbN literal 37120 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 T55kjsdj6D4_eD3g0zd!RQhC!q From c3b0f4a56d12971f612a522487219bc072dc003b Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Tue, 2 May 2023 23:54:41 -0500 Subject: [PATCH 063/118] Add files via upload --- apps/shadowclk/screenshot-1.png | Bin 0 -> 2704 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/shadowclk/screenshot-1.png diff --git a/apps/shadowclk/screenshot-1.png b/apps/shadowclk/screenshot-1.png new file mode 100644 index 0000000000000000000000000000000000000000..3f4e0870ee5c007bcc899b98dc9a65e4b58b45b9 GIT binary patch literal 2704 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 literal 0 HcmV?d00001 From e94cbcbf7497ef8d4ac08875d09a0f78deaa82a2 Mon Sep 17 00:00:00 2001 From: stweedo <108593831+stweedo@users.noreply.github.com> Date: Tue, 2 May 2023 23:58:52 -0500 Subject: [PATCH 064/118] Update metadata.json Added dark theme screenshot --- apps/shadowclk/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/shadowclk/metadata.json b/apps/shadowclk/metadata.json index db9382681..972f34ad6 100644 --- a/apps/shadowclk/metadata.json +++ b/apps/shadowclk/metadata.json @@ -4,7 +4,7 @@ "version": "0.01", "description": "A simple clock using the Londrina font with color and a shadowed outline. Based on the Anton Clock.", "icon": "app.png", - "screenshots": [{"url":"screenshot.png"}], + "screenshots": [{"url":"screenshot.png"},{"url":"screenshot-1.png"}], "type": "clock", "tags": "clock", "supports": ["BANGLEJS","BANGLEJS2"], From d57803e94b76d87c0f2e4a21a1468bfbf2e7d017 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 07:25:35 +0200 Subject: [PATCH 065/118] Add files via upload --- apps/polymath/screenshot.png | Bin 2088 -> 1749 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/polymath/screenshot.png b/apps/polymath/screenshot.png index 8ce1832d7d5bc0b5b4326d06aebaf67f8c609ff3..cda54aef66cf38c45886de6a35edc560a0de0377 100644 GIT binary patch delta 1577 zcmV+^2G;qg5Y-KkI64N0NklO zQ={+lR7(zNtj9y zO*Oo$P4Ca;Yq0We(MJ%6=e(%|QLmHMdtW7L*c5*zd3UZWW#kb=-5#{mAX(GHV@afD z-6oG9>ZBwqRoKSVhpg+}jGsghlHG%_-u3lus)mx`wO5cNA8s`Tu@!RI&znQcL_YUz zE@h(z83fTR)k}80^;_T#2M;qUxnbDy3o_>~qaoFYlizJN)v)>eIp)5vd_>9a)rj+W zSoMDjRZ=k;OHv^Tpt=t3qKVM}Z4znq$g zyL*tYRJkU4TS_$18}s7!YXo6u4~h=aTM4&nm^zpmyWi_&XV<=Y=V>=|^OVeP=tYrx zFQUS!q_RK| zm(+$U#ef)|XL+W(hilIv-f3cl)J^)V5riv;xJhM4rs+ft7JCT1!L=Y3I|RFj*lN&q z2+5g;?uaAw9rjsvy^!oHwfM-@fF^!1cclj1+MtP%)wNg<%k~hxYS7igKN*EutDMb`^hU;#*ZK1<^c%l2ipXX!^nV7+~eugS_7LmKH?T zk7zNA*_ey%VK!Z}{t~5{4ell|YLK5pEH2vAvz?1`O*Y(PRpfudQ&KbRLAb+}z*KL8 zL#QKd2gDnG7-0|WB2mLH0?q41+hHtQaLKTw`#<*P3hW}WhhXoV!y&93qRW33qQ9J} z8{*yel9HXH#U~@(g*kP=A?6vr*fUD@3b%8GjZ=Diko$p8SI}G&l33{l(Y%ukq=TtH zk04aT%VwDjvwrd@q2#9xdkBSERCWvs(btBsb%=LXnaLjZTcu4IYm2Bk8iLTInIM*- zAZ}$338YY_z#bw^DRm}d_Yx2NIZx$^YSCx+QWRCe`QH~ed@;d`_gf;g0s~)x|e*GsA`0=!6tR2(stZIU}ZlwLaD* z-lp=U8Wyuod|0XD5amy#j7jo*?@$l*vi2{#tjtP2_bscE^W=A}XeG|`ELA>}O3N}U zm1Qaqbr!)P0ePqz4Lp1L!_JzbD&mh&t7)_aJ7`+gik zuHbkMQT!mZB^=6wLx}V|%CZ(=vN;`zeGVZ9=d&daA*u@wA;N@1$T3A}i9?7gg+qui bnK{HiP1SLpd6G&900000NkvXXu0mjfaZdu$ delta 1928 zcmV;32Y2|@4X6;1I6Md1Nkl2z#jUDbs9nR!NDxQ^AND7^VsHP#v$_9PMJAN5ZJ?%a`^hn z62zo9C>udIHSpAr149rVL99RP&oh4DF$lukoXsbHKbpsT2lTm?r3j)=>0Yp{<2IjB z+M4cY{Q5kqKbLuz@YK^PMGzT`#>tuO5T?(bt@?=K^Ikz5?!wLfJK3q#C!#vBae~Xw zN>0+{O9f%th3CBq5kyEmA(gyQ5FzwK9HP+`_DXF(LE;55{*BV=#z_tltIMbpBwi39 z#+90XB(@X2Qe$h_XY*CHjC!3Q!aLzWuhg)lE$<)p`I)1ttRc&4H(!A>g(P>szBqgh zVqM+&?C066m0N2|i4Wqk=CfX5SUxMC&|ChA36-=gP~htm`61QNubWU`l%mYcK6HY)9nv zOv!A$)Zh7Fs)(bVxSnB|ZvC7`AJ`J9JX!MPS2EXkQHWDSejGq!ceDSnf1`%%>DD)Y z*~`v}-8u~0ud8LHcRIvodD(`M@w-8#k(X*{*+_~SO!)^AM7=qi7NE4GX8zQhB_L_i zlKD~-`YJY&mzm4#dj2p$!~)H53x!>{G88qmpi}beYFHu-+BwhLva0jUCV`)%QrN9y zOdK2MZJA41m!3b&A@nJ&ks)rOP}{$M25DEhIIopS-i>tvLDU<7o7#^P{`Ves-}gTA z`esp9WXe2^Aj;|P-m-2rZ2lU;1h)h$J#!z6%DPN7hutBi1oo{t-~5`)r8&^CDK~0lGFP7u%4tRYO~h)<7bXB`VhCnD^plCp%A=(t8>0r zH%he%$#qPwAhJEfr->+K=&Y5_y}}_j$TAG$&6+sZnXcCx9AZ6XtSnjtu{JRA-nZ|8 z&OO#AGSr~2B|fseh79=%EUt*v`du%eJ+qQQuV=W((FEa8gKl_AFWX~=>#?JtMp-y! zJRf51ie7*(fNu0`#8wYS8oVBYiWTkLvWK(p0*BZ?9=Xo<@8sa;fL?DTQf) zhr!A$C8m9@lMK1peWed22>HW$OBi&5uL0^6amP)`}a(&-4bFhGqJHhrUV;3#KOs zBJWszn;IS>2>}qOt?E1PJqW0k6PJ-}BAw&(Od7m`#;MV$>#2`}G zoEmTFXyY1#1<|5|SXXG|^4j4sf@stMQW!^n0fJ~zL+tM(#=$x|ZzaF)Djg}@MgDx= z-hw~}W9pz*)kzTOU~nDO@&fJ<<%Ry?g3-Y&I>>bhbTFL`;tOthtr1@h86lDXDU%%m z3V%o?@Vqw;c6u9rYFBPa{yZrZj4^M+zojKNPFmIQy!V&i`599;c9f|<5x^nL+IX-% zEG%;G5Qhit^K4es)D$0Xm*^1Z*RDxrv0l`qOE{Nr)*a%hmvGSx<_${`#AX{UJ88d} zP|TR3Nx4HDdTIH84va~Gsw#mLhfw%F@_ztU7Cv}PKS4bHIyQKx#qv4{;xTGyF}5jA z%pQU`RKxO*Qveb-mJ-$?CMADJOu8T*;|&#e?du~29V3WO+kJzqgq?dspmPkKs=#Ud zUe_3s=jT~!h|iR2HkPPtpij>yLfrMRD&Kndsp{&irKVQpTV2)V@K%jDhVtyKrdFlkN~L z4I6m_S+5I+97bMX;vJ$z6E7LtzO!)%n^Z>Li({G%4q;PRY%~rb@nl;|m{!-xK(oOi zbolX+IE2I$hmbJg5IUw=B5??*Qz Date: Wed, 3 May 2023 07:28:43 +0200 Subject: [PATCH 066/118] Add files via upload --- apps/polymath/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/polymath/app-icon.js b/apps/polymath/app-icon.js index a8798a5be..1798d0766 100644 --- a/apps/polymath/app-icon.js +++ b/apps/polymath/app-icon.js @@ -1 +1 @@ -atob("MDAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAAAAAAAAAAAAP/////wAAAAAADwAAAAAAAAAAAAAAAAAP/////wAAAAAADwAAAAAA/wAAAAAAAAD//////wAAD/AA/wAAD/AA//AAAAAAAAD/AAAADwAAAA//AAAAAAAAAA8AAAAAAAD/AAAAAAAAAA//AAAAAAAAAA/wAAAAAAD///AAAAAAAAAAAAAPAAAAAA/wAAAAAAD////wAAAA//AAAAAA/wAAAPAAAAAAAAD/////8AAA//AAAAAA//AAAPAAAAAAAAAP/////wAAD/AA8AAA//AAD/AAAAAAAAAAD////wAAAA//AAAAAA8AAA8AAAAAAAAAAA////AAAAAPAAAAAA//AAAAAAAAAAAAAAD///AAAAAPAAAAAA//AAAAAAAAAAAAAAD///AAAAAA/wAAAAAAAAAAAAAAAAAAAAD//wAAAAAA/wAAAAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAP//8AAAAA/wAAAAAAAAAAAAAAAAAAAA///wAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAP/wAAAAAAAAAADwAAAAAAAAAAAAAAAAAADwAAAAAAAAAADwAAAAAAAAAAAAAAAAAA8AAAAAAAAAAADwAAAAAAAAAAAAAAAA8P/wDwAAAAAAAAAAAAAAAADwAAAPAAAA8AAADwAAAAAAAAAAAAD/AA//AA//AAAA8AAADwAAAAAAAAAAAAD/AA//AA//AAAA8AAADwAAAAAAAAAAAAD/AA//AA//") +atob("MDAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAERAAAREBAAAQAAAAEAAAAAAAAAEVEREREREQARARAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREAAAAAAAAAAAAAAAAAAAAAAC////////8QAAAAAAAAAAAAAAAAAAAAAC////////MQAAAAAAAAAAAAAAAAAAAAAC////////IAFBQREAASIhAAAAAAAAAAAC///z8z//EAEiIiEAQiEiIAAAAAAAAAAC8gEBBRPyAABiIgABIQEiIQAAAAAAAAABMQAAAB81AAACIgAAAAAiIQAAAAAAAAAAAAAAAD8QAAACIQAAAAAiEAAAAAAAAAAAAAAAAfMAAAACIgAAAAEhAAAAAAAAAAAAAAAAA/EAAAACIgAAABIiEAAAAAAAAAAAAAAAHzAAAAACIgAAABEiIQAAAAAAAAAAAAAAPxAAAAASIgAAAAASIlAAAAAAAAAAAAAC8wAAAAEiIkEAAAACIhAAAAAAAAAAAAAD8QAAAAEREUEAAAACIgAAAAAAAAAAAAAvMAAAAAAAAAAAAAASIQAAAAAAAAAAAAH/EAAAAAAAAAAAABEiEAAAAAAAAAAAAALyAAAAAAAAAAAAESIQAAAAAAAAAAAAAB/xAAAAAAAAAAABIhAAAAAAAAAAAAAAAC8gAAAAAAAAAAAAUAAAAAAAAAAAAAAAAf8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAIzAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAATAAAAAAQwAAAAAAAAAAAAAAAAEAAAAQAjEBAAAAEgAAAQEAARAAARAAAAIAAAAgATERAAABEQAAEhEREhERETAAAAIAAAAgEiACAAABEAAAERERExERETAAAAIQAAAgFQARAAABEAAAEREREhEREfAAAAIAAAAgAAACAAABEAAAERUREhERET") \ No newline at end of file From ed7028d429228b6f32f780d7a455c03e1f795c5e Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 07:38:12 +0200 Subject: [PATCH 067/118] Add files via upload --- apps/polymath/app-icon.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/polymath/app-icon.js b/apps/polymath/app-icon.js index 1798d0766..260b57219 100644 --- a/apps/polymath/app-icon.js +++ b/apps/polymath/app-icon.js @@ -1 +1 @@ -atob("MDAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAERAAAREBAAAQAAAAEAAAAAAAAAEVEREREREQARARAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEREREREREAAAAAAAAAAAAAAAAAAAAAAC////////8QAAAAAAAAAAAAAAAAAAAAAC////////MQAAAAAAAAAAAAAAAAAAAAAC////////IAFBQREAASIhAAAAAAAAAAAC///z8z//EAEiIiEAQiEiIAAAAAAAAAAC8gEBBRPyAABiIgABIQEiIQAAAAAAAAABMQAAAB81AAACIgAAAAAiIQAAAAAAAAAAAAAAAD8QAAACIQAAAAAiEAAAAAAAAAAAAAAAAfMAAAACIgAAAAEhAAAAAAAAAAAAAAAAA/EAAAACIgAAABIiEAAAAAAAAAAAAAAAHzAAAAACIgAAABEiIQAAAAAAAAAAAAAAPxAAAAASIgAAAAASIlAAAAAAAAAAAAAC8wAAAAEiIkEAAAACIhAAAAAAAAAAAAAD8QAAAAEREUEAAAACIgAAAAAAAAAAAAAvMAAAAAAAAAAAAAASIQAAAAAAAAAAAAH/EAAAAAAAAAAAABEiEAAAAAAAAAAAAALyAAAAAAAAAAAAESIQAAAAAAAAAAAAAB/xAAAAAAAAAAABIhAAAAAAAAAAAAAAAC8gAAAAAAAAAAAAUAAAAAAAAAAAAAAAAf8QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAIzAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAATAAAAAAQwAAAAAAAAAAAAAAAAEAAAAQAjEBAAAAEgAAAQEAARAAARAAAAIAAAAgATERAAABEQAAEhEREhERETAAAAIAAAAgEiACAAABEAAAERERExERETAAAAIQAAAgFQARAAABEAAAEREREhEREfAAAAIAAAAgAAACAAABEAAAERUREhERET") \ No newline at end of file +atob("MDCEBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFEQEBEBEQAQEBAAAAAAAAABAAAAAAAAABEQAVEREWUBARYQAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEVFRERERAAAAAAAAAAAAAAAAAAAAAAAv////////AAAAAAAAAAAAAAAAAAAAAAAv////////UAAAAAAAAAAAAAAAAAAAAAAv///////yABIhIRAAEiIQAAAAAAAAAAAv/z//M//1ABEiIgABIiIiEAAAAAAAAAAvIQAAET8gAAEiIQARERIiEAAAAAAAAAATEAAAAfMAAAASIAAAAAIiEAAAAAAAAAAAAAAAA/IAAAAiQAAAAAIiAAAAAAAAAAAAAAAAHzAAAAAiIAAAABJAAAAAAAAAAAAAAAABPxAAAAAiEAAAASIWAAAAAAAAAAAAAAAB8wAAAAAiEAAAAUIiEAAAAAAAAAAAAAAD8QAAAAEiQAAAAAEiIAAAAAAAAAAAAAAvMAAAABIiIhAAAAAiIQAAAAAAAAAAAAE/EAAAABERERAAAAEiIAAAAAAAAAAAAALyAAAAAAAAAAAAAAEiEAAAAAAAAAAAAB8xAAAAAAAAAAAAARIhAAAAAAAAAAAAAD8gAAAAAAAAAAABIhEAAAAAAAAAAAAAAf8QAAAAAAAAAAASIRAAAAAAAAAAAAAAAvIAAAAAAAAAAAABAAAAAAAAAAAAAAAAHzEAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAACMwAAAAABMAAAAAAAAAAAAAAAAAAAAAAAEwAAAAAEMAAAAAAAAAAAAAAAABAAAAEAIxAQAAABIAABUQERERAAEQAAACAAAAIAExEgAAAREAABERERIREREwAAACAAAAIBIgFAAAARAAABERERIRERHwAAACAAAAIBEAEQAAARAAACIRERMRERHwAAACAAAAIAAAEQAAARAAABERERIQEREw==") \ No newline at end of file From e5f165e740092fe229251f2623dd3e6f2d40e131 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 08:05:25 +0200 Subject: [PATCH 068/118] Add files via upload --- apps/polymath/app.png | Bin 383 -> 1469 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/polymath/app.png b/apps/polymath/app.png index 6aebe036ff27a1fd033e651b52616b0036409b30..480f8a53942753ed2af6e8bbd582e8107c6a0edf 100644 GIT binary patch delta 1431 zcmV;I1!(&J0=)~6IDZ9iNklqn83rs z!{y~AvrkV?R#sN>-*4Z(egFQQDaOOX!g$}^-IeQk{`|R(jg4Z}{r$bIgM))HdoC_6 zM3{!apX+~yAW$S&0tAnw*3QmOZ2~mXS|KdJX)&nKYl>{6^S?@u*#ImHEeu!~kTdXC zwh*I5MMXY7K7VU#Yp18D8cdNAcXoDeZf<@#o65?XnwnZ)U;p*%*W24$4P(Fs`s(WH ze-20(_~YlJVGP8gGT7VOEBb}U$453JaxPQwO;SEPJENE|WpV@N^d3}<&dyG1larHE zety2Ux3|0`9UL5tj*bHN<;#~TDJh|$q1M*c7Z(?Mdw+Y=)6-C^4a+bfO6KwLv3fUj zbMEf$8yg$l-QB>VNKtydyu6@66eA2X%M@q|3ky9wJg%>=!HocZi5`yD~hler$ z>eZ{)uYX_TK3`won3x!SfHpTb7Zw(}y1F<-3P3qIIdO4u1afb0FQ-h*Vwt!@#FsfzIGTX8ES8DhgG$|Ait)j#@X4qsi_G{6iP)sm$w{O zS67k@)Drs;k2klsxAg&{BO@x+YY1K#Vy`13BY*0sga+}b7jnd+qM}?~UE%)2hYz?_ z8<4fhbBKVar)PC_H8|eAdv|hjqF$nANRo++jEs+uM}RyM9v%+9e+vj*(1TJAE$3NH zgYc9whL|F0F-t_}=H@0QCTe3c%@Ai5dN?wTjg4x02#(m;SlV1*@s4ZAI&uyc7Z>~c z`+q-w{tPAr($doW{QNXXG64wfm6esr$;sp6;}a7T3VO&x85tP~2?=bPDNUcyu>1S(eOTGjLNl8H(7v}&L&(F{G zxT347s>FMdP0wtuxPoF*kOP7Yf34e1w zsjut?dQ7G=gJy`Eh=>R(yu6;64=67$@5`4j@JvLTuf?pDhVu}Pr#g0YbeOD#W*ODL z2$xZVsPOuiT2@#X_`ex2(Jq+*j|xZzqN15>4hIAwi(U0zVxF*Rg)d6^bADJhAYC=D`qE}DNucSd`P7}qzFsvt>R8hH^R zCE6xl=mpRw+DI`Xvau2n_sfEU0&ZS%K!gr`K9(44Yiq+P6mzOK4U+;88h>$6OG}GX zQ{j?+2&>|XNU#eJ78e&!PELYJ8gX-TYiMZD5kn|q>t$tS+&#D>vqgh`!NAJOih4?7 zLhvO03Q6hGq5}}ia46qBxPam>V}J~z6rn9><3)huMX)7Cgn$k}Y~8#@7Ly!I+I#E? l2VtJ*VT4B-L5z_20mfMbEfAnMAyWVV002ovPDHLkV1iFIqLKgr delta 336 zcmV-W0k8hO3;zO;IDY{#Nkl&(ky${~4!nIQ{n zpd1=>guxi|W)~yV4?MqimD?*D5Hx7{hXi1Qq{gl4fRTR@2>$0~Qo*Qn&oZ7hICAt^`y;&QmnxVDP8J=ccb4Tfd iBY%wcvM*HJj?fES>bco7wV>hv0000 Date: Sat, 29 Apr 2023 10:29:51 +0100 Subject: [PATCH 069/118] Add AppInfo type --- typescript/types/info.d.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 typescript/types/info.d.ts diff --git a/typescript/types/info.d.ts b/typescript/types/info.d.ts new file mode 100644 index 000000000..41dec8578 --- /dev/null +++ b/typescript/types/info.d.ts @@ -0,0 +1,12 @@ +type AppInfo = { + src: string, + img: string, + icon: string, + name: string, + type: AppType, + sortorder?: number, +}; + +type AppType = "app" | "clock" | "widget" | "module" | "bootloader" | + "settings" | "clkinfo" | "RAM" | "launch" | "textinput" | "scheduler" | + "notify" | "locale"; From d4878be7fa95f3b1782961bacd36895e8e552b38 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Mon, 24 Apr 2023 22:29:17 +0100 Subject: [PATCH 070/118] popcon: initial launch-sortorder modification app --- apps/popconlaunch/ChangeLog | 1 + apps/popconlaunch/README.md | 9 +++++++ apps/popconlaunch/app.png | Bin 0 -> 899 bytes apps/popconlaunch/boot.ts | 43 ++++++++++++++++++++++++++++++++ apps/popconlaunch/metadata.json | 19 ++++++++++++++ 5 files changed, 72 insertions(+) create mode 100644 apps/popconlaunch/ChangeLog create mode 100644 apps/popconlaunch/README.md create mode 100644 apps/popconlaunch/app.png create mode 100644 apps/popconlaunch/boot.ts create mode 100644 apps/popconlaunch/metadata.json diff --git a/apps/popconlaunch/ChangeLog b/apps/popconlaunch/ChangeLog new file mode 100644 index 000000000..5560f00bc --- /dev/null +++ b/apps/popconlaunch/ChangeLog @@ -0,0 +1 @@ +0.01: New App! diff --git a/apps/popconlaunch/README.md b/apps/popconlaunch/README.md new file mode 100644 index 000000000..7804ebd73 --- /dev/null +++ b/apps/popconlaunch/README.md @@ -0,0 +1,9 @@ +Popcon +====== + +Display apps sorted by regular use. + +Settings +-------- + +- `Show Clocks` - Whether clocks are shown in the app list. Default `Yes`. diff --git a/apps/popconlaunch/app.png b/apps/popconlaunch/app.png new file mode 100644 index 0000000000000000000000000000000000000000..8b4e6caa2fe4720a32f492bd00c6e68751fabfbc GIT binary patch literal 899 zcmV-}1AP36P)EZi8a;XNfX0KK)EG5t2&jmXSR!CR3JOvSF^w(VT@Oq6O4&}^ElAua zX|l63`{wtXcjoO3*x1-CYovub^cOBY?cfcO1>;+VoWa;>Pk;!SG_WW*Es5gZ1-`R@ z4t>oKYJ)f#xYia)IV)#&xZ*BHYck+F1K9eED0&f|F;Lm{VL;rb?(c)W{8d& zzrH4`vJJ?>K!fln4K4LjpAx19%+|UjgL{LF?3gt^suTXG8HN@KQv>tY{cLjA%Q)j? zIX0ma_G_?6n>drF(WulAaitj}A^+b$v5k$*zr})O^uogfX;+bphn_9#OZ}pdk^!&c zqrUVgUd3m%o}@|o!cmyJiIaP-*BlK-1F7-kNoN^X5h5L~tnN`_& zI3(jUhvcNZU>jbg3|-gg8hTDln@m+>N(dP^vh_T*8x8>Qb*ytvU&Y#;lz3_Z*tBLl zEghFFmS~QUfhzCr>E}|Fxr&yKOBoXz4vqjF zlzKwtw{idZM95W(Tbb#rO0Wkqaj6$F@MWZp>h=2o=nr;LTzCQiH!$$4i=w<5W87%F zs6NXOGI0OH6?#VB0k9%#HO2Wg(|z6FTj}`r1kmXWJk5wmGlUFGsuA7}JOW^&y9!O$ zkR=&S*XaHEp1^o_Mn#&D^ig6k6`9rJMEHEc@fMjg8GR Z=Px>?AD_-bQjY)t002ovPDHLkV1j2qp7Q_z literal 0 HcmV?d00001 diff --git a/apps/popconlaunch/boot.ts b/apps/popconlaunch/boot.ts new file mode 100644 index 000000000..cb62ca643 --- /dev/null +++ b/apps/popconlaunch/boot.ts @@ -0,0 +1,43 @@ +// TODO: fastload +const oldRead = require("Storage").readJSON; +let cache; + +const ensureCache = () => { + if(!cache){ + cache = oldRead("popcon.cache.json", 1); + if(!cache) + cache = {}; + } +}; + +const saveCache = () => { + require("Storage").writeJSON("popcon.cache.json", cache); +}; + +const sortCache = () => { + // TODO +}; + +require("Storage").readJSON = (fname, skipExceptions) => { + const j = oldRead(fname, skipExceptions); + + if(fname.test(/\.info$/)){ + ensureCache(); + + if(j.src && cache[j.src]?.sortorder) + j.sortorder = cache[j.src].sortorder; + } + + return j; +} satisfies typeof oldRead; + +const oldLoad = load; +load = (src) => { + ensureCache(); + cache[src].pop++; + cache[src].last = Date.now(); + sortCache(); + saveCache(); + + return oldLoad(src); +}; diff --git a/apps/popconlaunch/metadata.json b/apps/popconlaunch/metadata.json new file mode 100644 index 000000000..906ad473a --- /dev/null +++ b/apps/popconlaunch/metadata.json @@ -0,0 +1,19 @@ +{ + "id": "popconlaunch", + "name": "Popcon Launcher", + "shortName": "Popcon", + "version": "0.01", + "description": "Launcher displaying your favourite (popular) apps first", + "readme": "README.md", + "icon": "TODO_app.png", + "type": "launch", + "tags": "tool,system,launcher", + "supports": ["BANGLEJS2"], + "storage": [ + {"name":"popcon.boot.js","url":"boot.js"} + ], + "data": [ + {"name":"popcon.cache.json"} + ], + "sortorder": -10 +} From 3b16c8557867f60cac62cb49e79cfccf8690410e Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Tue, 2 May 2023 22:31:47 +0100 Subject: [PATCH 071/118] popcon: change type --- apps/popconlaunch/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/popconlaunch/metadata.json b/apps/popconlaunch/metadata.json index 906ad473a..c20202c6e 100644 --- a/apps/popconlaunch/metadata.json +++ b/apps/popconlaunch/metadata.json @@ -6,7 +6,7 @@ "description": "Launcher displaying your favourite (popular) apps first", "readme": "README.md", "icon": "TODO_app.png", - "type": "launch", + "type": "bootloader", "tags": "tool,system,launcher", "supports": ["BANGLEJS2"], "storage": [ From fcfc33399dd56b919053f958c5467b004df6dc23 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Wed, 3 May 2023 07:50:43 +0100 Subject: [PATCH 072/118] popcon: app sorting (and debug logs) --- apps/popconlaunch/boot.ts | 97 +++++++++++++++++++++++++++++++-------- 1 file changed, 79 insertions(+), 18 deletions(-) diff --git a/apps/popconlaunch/boot.ts b/apps/popconlaunch/boot.ts index cb62ca643..323d9ca27 100644 --- a/apps/popconlaunch/boot.ts +++ b/apps/popconlaunch/boot.ts @@ -1,43 +1,104 @@ // TODO: fastload -const oldRead = require("Storage").readJSON; -let cache; +type Timestamp = number; -const ensureCache = () => { +const oldRead = require("Storage").readJSON; +const monthAgo = Date.now() - 1000 * 86400 * 28; +let cache: undefined | { + [key: string]: { + sortorder: number, + pop: number, // amount of launches + last: Timestamp, + } +}; +let orderchanged = false; + +const ensureCache = (): NonNull => { if(!cache){ - cache = oldRead("popcon.cache.json", 1); + cache = oldRead("popcon.cache.json", true); if(!cache) cache = {}; } + return cache; }; const saveCache = () => { require("Storage").writeJSON("popcon.cache.json", cache); + console.log("saved cache:" + JSON.stringify(cache, 0, 2)); + if(orderchanged){ + // wipe launcher cache + require("Storage") + .list(/launch.*cache/) + .forEach(f => require("Storage").erase(f)) + } }; const sortCache = () => { - // TODO + const ents = Object.values(cache); + + ents.sort((a, b) => { + // group the most recently launched apps in the last month, + // then sort by launch count + // then by name + let n; + + const am = (a.last > monthAgo) as unknown as number; + const bm = (b.last > monthAgo) as unknown as number; + n = bm - am; + if(n) return n; + + n = b.pop - a.pop; + if(n) return n; + + // pops are the same, sort by most recent + n = b.last - a.last; + if(n) return n; + + if(a.nameb.name) return 1; + return 0; + }); + + let i = 0; + for(const ent of ents){ + if(ent.sortorder !== i) orderchanged = true; + ent.sortorder = i++; + } }; -require("Storage").readJSON = (fname, skipExceptions) => { - const j = oldRead(fname, skipExceptions); +require("Storage").readJSON = ((fname, skipExceptions) => { + const j: AppInfo = oldRead(fname, skipExceptions); + // ^ technically only AppInfo if we're "*.info" - if(fname.test(/\.info$/)){ - ensureCache(); + if(/\.info$/.test(fname)){ + const cache = ensureCache(); + let so; - if(j.src && cache[j.src]?.sortorder) - j.sortorder = cache[j.src].sortorder; + if(j.src && (so = cache[j.src]?.sortorder) != null) + j.sortorder = so, + console.log("readJSON(), modifying " + fname + "'s sort order to " + j.sortorder); + else + j.sortorder = 99, + console.log("readJSON(), leaving " + fname + "'s sort order as 99"); } return j; -} satisfies typeof oldRead; +}) satisfies typeof oldRead; const oldLoad = load; -load = (src) => { - ensureCache(); - cache[src].pop++; - cache[src].last = Date.now(); - sortCache(); - saveCache(); +global.load = (src: string) => { + if(src){ + const cache = ensureCache(); + console.log("load(\"" + src + "\")"); + const ent = cache[src] ||= (console.log("new cache entry"), { + pop: 0, + last: 0, + sortorder: -10, + }); + ent.pop++; + ent.last = Date.now(); + sortCache(); + saveCache(); + } return oldLoad(src); }; From 7f528585e7f87ca1c85dbe7d1c488dc28bb6e350 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Tue, 2 May 2023 23:08:04 +0100 Subject: [PATCH 073/118] popcon: remove debug logs --- apps/popconlaunch/boot.ts | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/apps/popconlaunch/boot.ts b/apps/popconlaunch/boot.ts index 323d9ca27..8b2e9fe18 100644 --- a/apps/popconlaunch/boot.ts +++ b/apps/popconlaunch/boot.ts @@ -23,7 +23,6 @@ const ensureCache = (): NonNull => { const saveCache = () => { require("Storage").writeJSON("popcon.cache.json", cache); - console.log("saved cache:" + JSON.stringify(cache, 0, 2)); if(orderchanged){ // wipe launcher cache require("Storage") @@ -74,11 +73,9 @@ require("Storage").readJSON = ((fname, skipExceptions) => { let so; if(j.src && (so = cache[j.src]?.sortorder) != null) - j.sortorder = so, - console.log("readJSON(), modifying " + fname + "'s sort order to " + j.sortorder); + j.sortorder = so; else - j.sortorder = 99, - console.log("readJSON(), leaving " + fname + "'s sort order as 99"); + j.sortorder = 99; } return j; @@ -88,12 +85,11 @@ const oldLoad = load; global.load = (src: string) => { if(src){ const cache = ensureCache(); - console.log("load(\"" + src + "\")"); - const ent = cache[src] ||= (console.log("new cache entry"), { + const ent = cache[src] ||= { pop: 0, last: 0, sortorder: -10, - }); + }; ent.pop++; ent.last = Date.now(); sortCache(); From e6078df861b32512f8b2fac8e4af8c7c0d2fd6c9 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Tue, 2 May 2023 23:08:58 +0100 Subject: [PATCH 074/118] popcon: generate JS --- apps/popconlaunch/boot.js | 78 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 apps/popconlaunch/boot.js diff --git a/apps/popconlaunch/boot.js b/apps/popconlaunch/boot.js new file mode 100644 index 000000000..613cb3474 --- /dev/null +++ b/apps/popconlaunch/boot.js @@ -0,0 +1,78 @@ +var oldRead = require("Storage").readJSON; +var monthAgo = Date.now() - 1000 * 86400 * 28; +var cache; +var orderchanged = false; +var ensureCache = function () { + if (!cache) { + cache = oldRead("popcon.cache.json", true); + if (!cache) + cache = {}; + } + return cache; +}; +var saveCache = function () { + require("Storage").writeJSON("popcon.cache.json", cache); + if (orderchanged) { + require("Storage") + .list(/launch.*cache/) + .forEach(function (f) { return require("Storage").erase(f); }); + } +}; +var sortCache = function () { + var ents = Object.values(cache); + ents.sort(function (a, b) { + var n; + var am = (a.last > monthAgo); + var bm = (b.last > monthAgo); + n = bm - am; + if (n) + return n; + n = b.pop - a.pop; + if (n) + return n; + n = b.last - a.last; + if (n) + return n; + if (a.name < b.name) + return -1; + if (a.name > b.name) + return 1; + return 0; + }); + var i = 0; + for (var _i = 0, ents_1 = ents; _i < ents_1.length; _i++) { + var ent = ents_1[_i]; + if (ent.sortorder !== i) + orderchanged = true; + ent.sortorder = i++; + } +}; +require("Storage").readJSON = (function (fname, skipExceptions) { + var _a; + var j = oldRead(fname, skipExceptions); + if (/\.info$/.test(fname)) { + var cache_1 = ensureCache(); + var so = void 0; + if (j.src && (so = (_a = cache_1[j.src]) === null || _a === void 0 ? void 0 : _a.sortorder) != null) + j.sortorder = so; + else + j.sortorder = 99; + } + return j; +}); +var oldLoad = load; +global.load = function (src) { + if (src) { + var cache_2 = ensureCache(); + var ent = cache_2[src] || (cache_2[src] = { + pop: 0, + last: 0, + sortorder: -10, + }); + ent.pop++; + ent.last = Date.now(); + sortCache(); + saveCache(); + } + return oldLoad(src); +}; From a628124ac38a6d3c926af26585cb7c0fdb51f705 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Wed, 3 May 2023 08:03:49 +0100 Subject: [PATCH 075/118] popcon: icons --- apps/popconlaunch/app.png | Bin 899 -> 1455 bytes apps/popconlaunch/icon.js | 1 + apps/popconlaunch/metadata.json | 5 +++-- 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 apps/popconlaunch/icon.js diff --git a/apps/popconlaunch/app.png b/apps/popconlaunch/app.png index 8b4e6caa2fe4720a32f492bd00c6e68751fabfbc..d7cd295e417d88e4ec8b229f65acec47fe418b2b 100644 GIT binary patch delta 1437 zcmV;O1!DSx2d@i|B!3BTNLh0L01FcU01FcV0GgZ_000GHNklsPZhvwTGIQ?S@8_Iz?>!qV zmW{D7*4KcE;zv}OZBQk4Se2M)LSpZzGIIoOS|75k_W`3%KAe!*zJ$yI!TP{&eLNwt z?W)YqCM3q2klEIC1*Xbuqlx%Mn;<-Ez3)QjWcxN%V!uOCRAn}ikXVl@Gv6j;MqUK~ zH;M7yH{k%q4}Yo>)47_cxxZPMzh;B)+*txrm_AEJM z*D|3!AIOE&AGwgcVTZ&RV+uh%6I#uaB7QRu<_Byr-+ym|biZvuWWNpf8)5LQT*`su za2^pNE-|%K0W!y)ZV?noQmG&)lBm?5c9{P?7gB?E4H}StPY%reg=a#QnQK%5RGC$E z8+9xb(H<+LZrHWjN0CSMkKV221WIKBpzRI3jKWj_urpjj5zU3vukOMD_Utmxn6t!CLVw)X z)BzNcYsQa7ayxOa`eh8@UiB;FV|SL&Mu^W+MNKpwjDLU^J*Wpy9@Ur_hzBnkJ$dke#)F>J7&U4LsECqS zB49uY3Q`L(jV;|>4@>w;*-qOnNZcoBva>V$=J%U-=IspF*nik8Yovub^cOBY?cfcO z1>;+VoWa;>Pk;!SG_WW*Es5gZ1-`R@4t>oKYJ)f#xYia)IV)#&xZ*BHYck+F1K9eED0&f|F;Lm{VL;rb?(c)W{8d&zrH4`v=Yc(ki11mCgAi%s^z;OwY%W1?mqSG(dy!Ck-w2QlAp02F%vFB!hc{ zjO>^-KB^P`s2PS92~z{}*ZpjA*ULELWH~mW6ZUJcNPn9+lc&+B)DUr{86zS8-#@X9 zjm^Ksf@So=!vkqok&B0(E$d7DqL7jSui~S=^eA4%XSJTBN&3Q3n7fISd#>Yfkq`Y7oUZo6O*XSC0PE4CjRbxsB z891`_Jb$$t4gm0VtaDCZ#oC>ecxnOIv}QXk9hWVZXpWG9D(~*;=TgsBg26ZB$NCv_ z6jS1v>8o5s3^(92ez~L?D*iyLPXgC^Ss0rh= zETODzL{X|K%Bv>Fxr&yKOBoXz4vqjFlzKwtw{idZM95W(Tbb#rO0Wkqaj6$F z@MWZp>h=2o=nr;LTzCQiH!$$4i=w<5W87%Fs6NXOGI0OH6?#VB0k9%#HO2Wg(|z6F zTV?6^_5{%B3_Q((i7K)Fmx`$;#+_0- Date: Wed, 3 May 2023 19:30:53 +0200 Subject: [PATCH 076/118] Create app.js --- apps/3dclock/app.js | 69 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 apps/3dclock/app.js diff --git a/apps/3dclock/app.js b/apps/3dclock/app.js new file mode 100644 index 000000000..bed0f2b2e --- /dev/null +++ b/apps/3dclock/app.js @@ -0,0 +1,69 @@ +// 3d clock by gm / ainegil based on Anton Clock + + +{ // must be inside our own scope here so that when we are unloaded everything disappears + // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global +let drawTimeout; + + var moonimg = { + width : 176, height : 167, bpp : 3, + buffer : atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJJJJJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJJJJJJJJJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJJIJJIBIIJJJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIBJAJJJIJIJBJJJJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIJBJABJIIAIIBBBAIJJJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIBBAABABBBABIAJJIJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBAAABBBBAIAJIIBBBBIBJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAIJAAIBIIJIAABIJBJJJJIJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIIAAJAJIJABJJBBAAAIIIABAJAIJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJIJIJIBJABAJABIBBBABJJJIJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJABJBAIIJJJBJJJBJAAABBJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBIBIAAAAJIAAAIABIJIAABIABIBJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAIAIAAABAAAABABBBABIJAIAJIBAIIJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAJAAAAAAAAABAIJJBBBABIBJJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAJBIAAAAAAAAAAAAAAIAJJBABAIIJBJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABIABAAAAAAABAAABAAJBJIIIJABAIAJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAJJIJBJJAAAAAJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAJAJJAAIAJBAAJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIIJBABIAAJBAJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAJBJBIAJBBIAAAJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIABJJABBBIAIAIBJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAABABIIJJJJJJJBIAABJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAIAAAAAIAABJJJAIJJIBJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABJIBBJJJBIBAIIBJBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAABAAAIIJIJBAIBJJIBIIAJIIJIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAABABBBAAAJBJBBBBBAIAJIJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABABJIBJJJAAJAIBJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAJBAAAAAAAAAAAAAAAAAAAAAAAAAIAIJJJIBJBIBIABIJJAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAIAIAAAAAAAAAAAAAAAAIAAAAAIIABBJIIIJIAJJIIJJJIJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBJABBJJBBAJBBJBIBBJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIAAIJIBAAIAAIAABJAIABABIJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAJAAABAAAIIIIIAAAAABIBBBABJJIAJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAAIJIIBABAABAAIAIBAIBABJJJAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAIAAIAAAAAAAAAAIABAJABIIAAIAAIIBBBBBAJIAJAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIBBBAIABAAAAAABBAAABBAJJJJIAIAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAABAAAAABAAAAAAAAABAAABBBAIBIIABAAAAAAAAAAIIJJJJAABAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAABAAAAAAAAABAAAAABABIJJBBAIIBAAAAAAAAAABIAIJAIBJBAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAABAAAAAIAIIAAAAIAAAAABIAAAAAAAAIAAAAAAIBBAIJJJJAIIAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAABBBAAAAABAAAAAIAIAIAIBAAAABABAAAJIAIJBAJJIIAAAAAAAAAAAAAAAAAAAAAAAJIAAAAAAAAAAAAAAIAAAAAAAIABAABAAAAAAABJBAIJAAAAAAAAAAAJJIIBJJJIIJAAAAAAAAAAAAAAAAAAAAAAAIAIAAAAAAAAAAAAAAAAABJIAIAAAAABAAAAAAJBJJJIIAAAAAAAAAAIJAJJJJBIJJAAAAAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAABAAAAAIJBAIBIIBBIBBAAAABJBBIJAAAAAAAAIAAAAJJBJIJJJIIAAAAAAAAAAAAAAAAAAAAAJIAAAAAAAAAAAAAAIAAAAIJABBABBIIAAAAAIJIABBIAAAAAAAAAAAAAJJJIJBJJJJIAAAAAAAAAAAAAAAAAAAAAJJBAAAAAAAAAAAAAIAAAABAAAIBJAABIAIAABIAIBBIIAAAAAAAAAAAABIJJBBBAJBIAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAABIIAAABABBBIAABJIJAIBIIABJAIIAAAAAAAIAAAAJAJIIJIJJJBAAAAAAAAAAAAAAAAAAAAAJIJIAAAAAAAAAABBIBAAAAJAAABJBBAAAAABAJIABAAAAAAAAAIAAAAABJJBBIJJJJAAAAAAAAAAAAAAAAAAAAABJIAAAAAAAAAAAAABIIAAAAIAJIJIIAIIIAAAABBBABAAAAAAAAAAAAAABJIJBJIBJIJAAAAAAAAAAAAAAAAAAAABAIAAAAAAAAAAAABBAAIABAAJIJJJABJBAAAABAAIAAIAIAAAAAAAAAAAJJJJJJJIJJAIAAAAAAAAAAAAAAAAAAAIBIBAAAAAAAAAAAAAJAAAIAAIBJJIBAJIAABAAAAAABAIAIAAAAAAAAABABJJJBJJJIJAAAAAAAAAAAAAAAAAAAAAIJBAAAAAAAAAAAABIAAAAAAABJJBAAAABAAAAABAAAAAAAAAAAAAAAAAAAJJJIBJJJAIAAAAAAAAAAAAAAAAAABBJABAAAAAAAAAAAAAIAAAJIJAIBJBAAAIIAAAAAAAAAAAAIAAAAIAAAAAAAIJBBJAJBABAAAAAAAAAAAAAAAAAABIAJAAAAAAAAAAAAABAABABAAABIAAAJIABAAAAAAAAAABIIAAAAAAAAAAAJIJJJIJIBJJAAAAAAAAAAAAAAAAAAABIAIAAAAAAAAAAAAIAABAAAJAAIBAIAIIAAAAAAAAAAABIAIAIAAAAAAAAIIJBJIJABJJIAAAAAAAAAAAAAAAAAJIJIAAAAAAAAAAAAAAABAAAIIJAIIAAAAAAAAAAAAAAAAAJAAAJIAAAAABJJJJJJBIIBJAIAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAIBAABAAIIIAAAAIBBAAAAAIAAAIIIAAAAAAJIBJIAAJJJJIAAAAAAAAAAAAAAAAAIAJBIAAAAAAAAAAAAAAAAIABBBIAAAAAAAAAAIBBBBAAABBAAIBBBAAAAAAAIBIAJJBIJJBAAAAAAAAAAAAAAAAAIIJAAAAAAAAAAAAAAAAAIAABAAIAIAAAAAAAAIIIJAAAAAAAAAIIAAIAAAIIBBJJJJJJIAJAAAAAAAAAAAAAAAAAAAIAIAAAAAAAAAAAAAAAAAAAIIBIAAAAAAAAABBIJAIAAAAABBIAAAAAAAAAAAJJIJABIBJAAAAAAAAAAAAAAAABIIAABAAAAAAAAAAAAAAAAAIIBBBBBAAIAAAABBJBJIBIAAIAABAAAAAAAAAABAAJIIIAABJAAAAAAAAAAAAAAAABBAAAIAAAAAAAAAAAAAAAAAAAIABIAAABAAAAAAJIIJBAAIBJBJAAAAAAAAAAAABBIIIIAIBAAAAAAAAAAAAAAAAAJIABJAAAAAAAAAAAAAABAAIAAAAIAAAAAAAAAIBBIJAAIABJIBAAAAAAAAAAAAABJBAAAIBAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAIAAAAAJABAAAIAAAIJJIAJJABJJAAAAAAAAAAABAABJJJIIIAJAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAIAAAABABAAIAAAIAIAJBJJIBIIAIJAAAAAAAAAAAAIAJJAAABJIAAAAAAAAAAAAAAAABIAAJAAAAAAAAAAAAAAAAAAAAAABBAIAIABABAIBAJJBJIIJBIAAAAAIAAAAAABIBJIAAAAAAAAAAAAAAAAAAAAIBBAJAAAAAAAAAAAAAAAAIAAAAAJIABAAAJAIAABABIABJBIBAAAAAAAAAAAAAAAAJIAIAAAIAAAAAAAAAAAAAAABIAAIJAAAAAAAAAAAAAAAAJAAAABAAAABBBJJIAAAABBJBJIJBBAAAAAAAAAAAABBJIIAAAAIAAAAAAAAAAAAAAAAIJAJAAAAAAAAAAAAAAAJBAAABBBIJABBBIAAAIBBAIJJJJBIJAAAAAAAAAAAAAAJBJAAAAAJAAAAAAAAAAAAAAAAJIBAIIAAAAAAAAAAAAABJAAABABAAAJBIIJABAABBJBJJJJABAAAAAAAAAAAAAAJJJAAAABAAAAAAAAAAAAAAAAIIIJBBJAAAAAAAAAAAABABAAAAAAAIIAJJBJBAIJJJJJJJJJJIIAAAAAAAAAAAAAABJAAAAAIAAAAAAAAAAAAAAAABIIABIAAAAAAAAAAAAABIAAAABAAIABJJABIJIBIBJIJJJJJJIIAAAAAAAAAAAAABBBAAAAIAAAAAAAAAAAAAAABIIAABIIIAAAAAAAAAAAAAAAAAAAJBBABJBJJJBAABBJJJJJIJBAAAAAAAAAAAAABBIBAAAIIAAAAAAAAAAAAAAABAAAAAIIAAAAAABAAAAAAAAAAAABBIABJIJJJJJJJJIJJJJBJAIIAAAAAAAAAAABBBJIAAAIAAAAAAAAAAAAAAAAIIIIBBABBAIIABIAAAAAAAAAAAABJAAABIJJJJBBJJJJBBBBBAABAAAAAAAAAABIAJBJIAAIBAAAAAAAAAAAAAAAJBAAAAIAIAABABAIAAAAAAAAAAAIAIAABBIJIJJIJBJJIBBBJIAIAAAAAAAAAAAAIAJBIABBAAAAAAAAAAAAAAAAAIBAJAAAAAAAIABAAAAAAAAAAAAAJAAAABBAJIBIIJJJBBBIJJBIAAAAAAAAAAAABBBIIIJAIAAAAAAAAAAAAAAAAAAIIJAAAIIAAIBAIAAAAAAAAAAIJAAAAJBJABJBIJJJJJJBJIJJBAAAAIAAAAAAIAIBBIIJAAAAAAAAAAAAAAAAABBIJBABABAABIAAAAAAAAAAAAABAAIAAIJAJJJJJBJJBJJJJJIJJAAAAAIAAAIABABJIJIAAAAAAAAAAAAAAAAABBBIIAAAIIBAIIIAAAAAAABABAIAAABAIJBJJJAIIBJJJJBBJJJJBIAAAAIJAAAIBABJBABJIAAAAAAAAAAAAAAAABJBBJABBBBAAAAAAAAAAAAAAAAAIAAAIJBJBABIIJJJIJIJJJJJJIIBABJAAABBAAAJJIABAAAAAAAAAAAAAAAABAABJJJBBABJAAAAAAAAAIAAAAAAAAAAAIJBIABBJJJJJJJBBJJJJIAABBJABAIIAAAJIAIAAAAAAAAAAAAAAAAABAIJJABIAIIAAAAAAAAAABBAAAABAIAABABJAIJJIJJJJJIIJJJJIIAABBJIAABAAAAAIJAAAAAAAAAAAAAAAAAAAJABJJBIAAAAAAAAAAIIIBAAAAAAAAAIABBJAJJBBJJJBBJBJJJJIIAAJIIAIBAAAAAAABIIAAAAAAAAAAAAAAAABABJBIIAIBIAAAAAAAIIBAAAABAAAAAAAAJIBJIIIJJIJJJJJJJJIAAIJBAJJIAAAAABJAIBAAAAAAAAAAAAAAAAAAABJJJBAIIAAAAAAAJAIAABAAAABAABBBBJBIBBJJJIJJJIJJJAIABBBBIJJAAAAAAAAJIJAAAAAAAAAAAAAAAABAAABIBBAABAAAAAAAAAIAAIAIAAAAAAAJBAIBJJJBIBJBJJJJJIABIBAAAIIAAAAAAAABBAAAAAAAAAAAAAAAAAAIIIAJBAJIBAAAAAABAAAAAAAAAAAAAABJJIJAJBIJIJJBJJJJIJJBAABJJIIBAAAAAAABBBAAAAAAAAAAAAAAAAABABJIBABIAAAAAAAAABAAAIAAAAAAABJBAIJJJJIIBJJJJJJJJBJAAAIBJJJIAAAAAAAAABAAAAAAAAAAAAAAAAAAAABJJIBIJAAAAAAABAAAAAIAAAAAABJJJBBIJJJJJJJJJJJJJJBBABJAIAIBAAAAAABABBAAAAAAAAAAAAAAAAAABIABBBBBIIAAAAAAAAAIAAABAAAIAAJBIJJJJAJJJIBJJJBJJJJJAJJJJJAAAIAAAABABAAAAAAAAAAAAAAAAAABBBBBAJJIAAAAAAAAAAAAIAAAIAAAABIIJIJJIIIJIJJIJJJJJJIJBJJJJIIBAAAAAAAIAAAAAAAAAAAAAAAAAAAJBBABAAIJBJBAAAAAAJAAAAAAAAAABBJJBIIIJJBIJJJJJJJJJJJJIJBBJJJAAAAAAAIBIAAAAAAAAAAAAAAAAAAIBBBIAIIJJIIAAAAIAIAAIAAAAAAAAAIJBABJIJJJJJJJBIIJJBJIJABJJJBAAAAAAIAIIAAAAAAAAAAAAAAAAAABBIAIABABAJAAAAAAAIAAIAAAAAAAAAJBJIIJJJBAIJIJBBJJJJJIBAAABJBAAAAAAABAIAAAAAAAAAAAAAAAAAAABAIIBBIBBJAAAIAIIAAAAAAAAAAAABAJJBBBJJJIJJBJBJBJJJJBBAIAJJABAAAAAAIJBAAAAAAAAAAAAAAAAAAABBABBAJIJAIBAAIBAABABBAAAAAABIBJJJJJJIIJAIJJJJJJJJJIIIBAJJIBAAAAAAAAAAAAAAAAAAAAAAAAAAAABBJAAABAJIBAAAAJABAIJAAAAAAAABJJAAJJBBIJIIJJIJIJJJJJAABABJAAAAAABIIAAAAAAAAAAAAAAAAAAAAAJAABAIIIIIBIBBAAAAIJBAIAAAAAAJJJBJBJBJJBJBJJBJBJJJAIIBAIAJJABAAABIBBIAAAAAAAAAAAAAAAAAAABBBAIAIAIBABIIJAAAAABBIAAAIIABJJJJJIJBJJIJJBBJJBJJJJBAAABAAAAAAAJBBAAAAAAAAAAAAAAAAAAAAAAABIBBIIBAABABBAAAAABIJABAABJJJBJJIBIJJJIJBBJIJJJJIABAAIJJBIBAIBAIAIAAAAAAAAAAAAAAAAAAAAABAABJBAAAIAIIJIAJAAAJAIIAJJBJJJJJJBJBJJJJJJIIIJJIJIAAABAJBIBAAAJAAIAAAAAAAAAAAAAAAAAAAAAIIIAJIABAAAIBABAAAABJJJJJJJJJJBJJIJJJJBJJIIJJJIIJIAAAABJIBJJABBJJBIAAAAAAAAAAAAAAAAAAAAABIIABBBABIIAJAAIAIJJJJBIJJJJJJJJJJIJJJJBJJJBJJBIIJBAAABAABJBJAIIJIIAAAAAAAAAAAAAAAAAAAAABABBAABABBBIJIBIBIJJBJAJBJJJJJJJJJJJJJJJJBIJBBBJJAIABBJIJIBBABBJIIAAAAAAAAAAAAAAAAAAAAAAABIIBAIIIAAIJBJIIJJJAJJJJJJJJJJJJJJJJJIJAJJJJJJJBJAIAABJIAJAAAIJBBAAAAAAAAAAAAAAAAAAAAAAABIAIIAAIIJBJAIIIJJIIJJJJJJJJJJJJJJIJJJAIJBIJJJJIJIBABIBIIAAABBAIAAAAAAAAAAAAAAAAAAAAAAAAAIBBBAAJAIAJJIIIIJBJJBJJJJJJJJBJJJBIIBJBBJJJJJJIJJJJAJBAABAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIBAIBBJABBJJJJJJJJJJJJJJJJJBIIBIIJIJJJAIJIBIIAAIAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIABAAAAAJIAJJBIIJJJJJJJJJJJJJJJJJJIJJJJJJJJBJJJJJAJAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAJBJBJBAJJIJJJJJJJJJJJJJIJJAJJJJJJIIJIJJIAJABIBAAJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIAJBAIAAAIIJJJJJJJJJJJJJJJJJJJJJIJJJBJIIJIJIJJJBBJJBIBBJIJBAAAAAAAAAAAAAAAAAAAAAAAAAAAABIIIAAABAAJBJBJJAJJJJJJJJJJJJJJJJBJJJJIIJJBBJIIIABBAIIIAIABAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAIIIIBAIIJBJJIJBJIJJJJJJJJJJJJJJJJJJJIJAJJBABJJJJIAJIAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAIAABABJAJBBJJJJJJJJJJJJJJBJJJJJJJBJJJIJBBJIBJJJBIJJJAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIIBABIAABBJAJJBJJJJJJJJJJJJJJJJJJJJJIJBBJIIJBAAJAJJIBAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIBIAAJAABBJJJIJJJJJJJJJJJIIIJJIIIBJIIJIAIBJBJBJABIJBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIJAAIBJIBJBBJJJJJJJJJJJJJJBIJJJBBJJJJJJBJJJJJBJJJJIBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAIAIBBJBBJBJJJBBJJJJJJJJJJJJJJIBBJJBAIIIJJAJJBJJIIJAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABIIAIIABAIIJIJJJJJJJJJJJJJBIJJJJJABBIJABBIJAJJJBBIJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIBAIBBJIAIIJBJJJJJJJJJJJJBJJIJJIJJIJAJJBBJBJBJIJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIIABIABBIJAIJIJJJJJJJJJJJJJJJJBBJJJBJJAJJJJJJBJIJBAJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIIBJAAABJJJJIJJJJJJJJJJJJBBBJJJJJJIJJABAJJAJJJJJIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBAIAAABBIIBJJBJJJJJJJJJBJIJAJAJJBJAAIJJIJIBBJIJJABBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAJBAJIBJIIJJJJJJJJJJJJIBJBBJIBJJJBIJAAJAJJJJBBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBIIJJAIIIBJIBBJJJJJJJJJJJJJBJBIBJIIJJBJAJJBJJJJJIIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAJABAIJABIJJJJJJJJJJBJBJJIJJJJBJIJIJIIBIJABIJBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBJBJIJIJJJJJJJIJJJJJJJJJJBIAJBIJIJBJIJJIJJJBBIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBJAIIBBJJJJJJJJJBAJJBJJBJIBIAJJJBJJJJBBJAJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBABABIBIJJJJBJJIIJJJBIJJIJJJJAJJJJJJJIIJJBJIJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIJJJIAAJBJJJIJJJJJJJJBBIJJIJJIJJJIJIJIJJAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBBJBAAIBJJJJJJBBJIJJIJJIJBJJAIIJJJIJIAJABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAJBJJJBIJJJJBJBIBJBAAIJJIJJIJBJJJBJBJAAAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBJIBIBIJJJJJAJAJJJJIIIIJBBJJAJJBIAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJJAAJJJJJJJJBIIJJJBBJBBBBIJJIBAIAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJBIBIJJJBJIJIJJJBBJIIJBJIJBABIBBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAJAIJBIJIIJBJJJJBBIJIIJJJJJJBJBIJJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBJJJJBJJBBBBJJABIJIIJIJAIIIBBBIJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIAJIJJIBBJJBJIJJJBJIIJJJIIBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIJAJIBJBBBIJIJIIBJJJJJBAJBAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJIJJJAJJBIIJJIIIIIJJJBAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAIIJJJJJJJJIJABJIJIBJJIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIIIJJIJJAJBJAJJBAJJIJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAJJBIJJJJJIJBBBIIJIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJJIAJBIAIAJBIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJBAJJIIJBJJBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJIIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") +}; + +// Actually draw the watch face +let draw = function() { + var x = g.getWidth() / 2; + var y = g.getHeight() / 2; + var date = new Date(); + var hour = date.getHours(); + var minute = date.getMinutes(); + var second = date.getSeconds(); + var millisec = date.getMilliseconds(); + var depth = 600; + var startd = 60; + var focal = 350; + var basesize = 24; + var poszs = startd + depth * millisec / 1000; + var posys = -12; + var poszm = startd + depth-depth * second / 60; + var poszh = startd + startd + depth * minute / 180; + var scales = focal / poszs; + var scalem = focal / poszm; + var scaleh = focal / poszh; + var ys = posys * scales; + var fsizes = basesize * scales; + var fsizem = basesize * scalem; + var fsizeh = basesize * scaleh; + + g.drawImage(moonimg,0,0); + + // g.reset().clearRect(Bangle.appRect); // clear whole background (w/o widgets) + g.setColor(1,1,1); + g.setFontAlign(1, 0).setFont("Vector",fsizeh).drawString(hour, x, y); + g.setFontAlign(-1, 0).setFont("Vector",fsizem).drawString(minute, x, y); + g.setFontAlign(0,0).setFont("Vector",fsizes).drawString(second, x, y+ys); + + //g.setFontAlign(0, 0).setFont("6x8", 2).drawString("blahblah", x, y+48); + + // queue next draw + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = setTimeout(function() { + drawTimeout = undefined; + draw(); + }, 50 - (Date.now() % 50)); +}; + +// Show launcher when middle button pressed +Bangle.setUI({ + mode : "clock", + remove : function() { + // Called to unload all of the clock app + if (drawTimeout) clearTimeout(drawTimeout); + drawTimeout = undefined; + delete Graphics.prototype.setFontAnton; + }}); +// Load widgets +Bangle.loadWidgets(); +draw(); +setTimeout(Bangle.drawWidgets,0); +} From d94cdc99157aca84b4a9010f15c942e464cfde29 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 19:49:39 +0200 Subject: [PATCH 077/118] Add files via upload --- apps/3dclock/icon.png | Bin 0 -> 745 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/3dclock/icon.png diff --git a/apps/3dclock/icon.png b/apps/3dclock/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1926d5f5999f29c74b9921975667f88c7016e31f GIT binary patch literal 745 zcmV3Q2H#ZNz4z1xpDD+-FR49uwcbaIGh!x9?&?9Je3+={veG!!C zg-}kzx<0KGkQ$bn>~9p!&O{|yg@u`4XK zY;!w6&=Bj&GwGOoF^`DLBMXmyy_V5DpSA=CtbrYk7cI^0U|nD-C`j#E=*WtK-7RZS zTr|;k)Y}K;kKhEl)lfZVmIE_>6li0?8pwyOjg#v0=s#()Ej$?*8j-+`$ zaEMCZfGxcxM+|M|jS^O9MBvUL zJ0nvJZ}Mb8U}9Le1cbBOgyQb9f$+_C!@%UGEZq0*aVK$&dsj^e8~CYit!d-9cqbcDc52yep_NVP|)F8Q+EKbIyl> bf5pHLQnD2(0U96=00000NkvXXu0mjfa9>a# literal 0 HcmV?d00001 From 4e7b2492773292d7165b0df72fad94aa8de4ff99 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 19:50:40 +0200 Subject: [PATCH 078/118] Add files via upload --- apps/3dclock/app-icon.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 apps/3dclock/app-icon.js diff --git a/apps/3dclock/app-icon.js b/apps/3dclock/app-icon.js new file mode 100644 index 000000000..ac09d6113 --- /dev/null +++ b/apps/3dclock/app-icon.js @@ -0,0 +1 @@ +atob("MDAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJmZCZmZAAAAAAAAAAAAAAAAAAAAAAAAAACZAAkJkJAAAAAAAAAAAAAAAAAAAAAACQkJmZmQCZkAAAAAAAAAAAAAAAAAAAAACQAAAAAJmQmZAAAAAAAAAAAAAAAAAAAAAAAAAAAJkAAJkAAAAAAAAAAAAAAAAAAAAAAAAAAJCZkACQAAAAAAAAAAAAAAAJAAAAAAAAAACZAACZAAAAAAAAAAAAAAAAAAAAAAAAAAmZAJmZkAAAAAAAAAAAAAAAAAAAAACQmQkAmQAJmQAAAAAAAAAAAAAAAAAAAAmZAJkAAAkJmQAAAAAAAAAAAAAAAAkAAAAA///wAAAJmf///wAAAAmQAAAAAAAJAAD/////8AAJD/////AAAAAAAAAJAAAJCQD//////wCZ//////AAAJAAAAAJAAD//w//8AAP/wCf//kAD/AAAAkAAAAAAAD5CQ8J8AAP/wCZkJkAAPAAAJCQAAAAAJn//w//mQAP/wAAmQCQAPAAAAAAAA//CQ///w8J+ZAP/wAACQCQD/AAAACQAP//CQDw/58P/////wAACQAA//AAAJCQAAD/AAAP+QDwn///8AAAAAAP//AACQAAAAD/AAAP8JCZn////wAAmZ///wAAAACZAJD/AACfCQmZkJmf/wAAAP//8AAAAJkAkAD/AACfAJCQmZCf/wkJD//wAAAAAAAJAP//8ADwCQCZmZmf/wAA//8AAAAAAACQkAAJAJAACQ//mZmf/wAA//CQAAAAAAkAmQAACQAACQn//////5mf//////AAAAkACQAACQAACQn/////8AkP//////AAAAAJkACQAJAJkJAJ////AJmf//////AAAAmQAAAAmZCZmZmZkJmZkJAJCZAAAAAAAAAAAACZCZmZmZmQCZmQmQAJAAAAAAAAAACQkAAJmZmZmZmZmZmZkJmZkAAAAAAAAAAJkJCZkJmZmZmZmQkJCZmQAAAAAAAAAAAAAJAACZmZmZmZmQmZkJmZAAAAAAAAAAAACQkJmZmZmZmZmZmZCZkAAAAAAAAAAAAAAAAAkJmZmZmZkJmQkJkAAAAAAAAAAAAAAJmQmZCZmQCZmZmZAAAAAAAAAAAAAAAAAACQmZmZmZAJkJkJAAAAAAAAAAAAAAAAAAAJmQmZkJkACQkAAAAAAAAAAAAAAAAAAAAAAACZmZmQmZkAAAAAAAAAAAAAAAAAAAAAAAAJkAAJkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") \ No newline at end of file From fd40c6f28137ed6539aaad4bd731573c0ad58dfa Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 19:52:04 +0200 Subject: [PATCH 079/118] Add files via upload --- apps/3dclock/metadata.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 apps/3dclock/metadata.md diff --git a/apps/3dclock/metadata.md b/apps/3dclock/metadata.md new file mode 100644 index 000000000..016065caa --- /dev/null +++ b/apps/3dclock/metadata.md @@ -0,0 +1,16 @@ +{ "id": "3dclock", + "name": "Simple 3D Clock", + "shortName":"3DClock", + "icon": "app.png", + "version":"0.01", + "description": "This is a simple 3D scalig demo based on Anton Clock", + "screenshots" : [ { "url":"screenshot.png" }, { "url":"polymathclock.jpg" } ], + "type":"clock", + "tags": "clock", + "readme": "README.md", + "supports": ["BANGLEJS2"], + "storage": [ + {"name":"3dclock.app.js","url":"app.js"}, + {"name":"3dclock.img","url":"app-icon.js","evaluate":true} + ] +} \ No newline at end of file From eedc4799dd28b7c5dced97600135241caa1636bb Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 19:56:19 +0200 Subject: [PATCH 080/118] Add files via upload --- apps/3dclock/README.md | 5 +++++ apps/3dclock/screenshot .png | Bin 0 -> 6281 bytes 2 files changed, 5 insertions(+) create mode 100644 apps/3dclock/README.md create mode 100644 apps/3dclock/screenshot .png diff --git a/apps/3dclock/README.md b/apps/3dclock/README.md new file mode 100644 index 000000000..6f5ad93a3 --- /dev/null +++ b/apps/3dclock/README.md @@ -0,0 +1,5 @@ +A simple clock with perspective scaling. +Battery drainer, performance tester, show-off piece work-in-progress. + +Demo. + diff --git a/apps/3dclock/screenshot .png b/apps/3dclock/screenshot .png new file mode 100644 index 0000000000000000000000000000000000000000..ebe675d8f4a58a33c8611184ff454ab1845e59d2 GIT binary patch literal 6281 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 literal 0 HcmV?d00001 From 2dd9eeaf7af4f8d022f211d8c5d0bd859ea15e16 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 19:57:25 +0200 Subject: [PATCH 081/118] Add files via upload --- apps/3dclock/metadata.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 apps/3dclock/metadata.json diff --git a/apps/3dclock/metadata.json b/apps/3dclock/metadata.json new file mode 100644 index 000000000..016065caa --- /dev/null +++ b/apps/3dclock/metadata.json @@ -0,0 +1,16 @@ +{ "id": "3dclock", + "name": "Simple 3D Clock", + "shortName":"3DClock", + "icon": "app.png", + "version":"0.01", + "description": "This is a simple 3D scalig demo based on Anton Clock", + "screenshots" : [ { "url":"screenshot.png" }, { "url":"polymathclock.jpg" } ], + "type":"clock", + "tags": "clock", + "readme": "README.md", + "supports": ["BANGLEJS2"], + "storage": [ + {"name":"3dclock.app.js","url":"app.js"}, + {"name":"3dclock.img","url":"app-icon.js","evaluate":true} + ] +} \ No newline at end of file From 9abddfb2f9eb2df2a2e1feb71d8fab427c64eddd Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 19:58:10 +0200 Subject: [PATCH 082/118] Delete metadata.md --- apps/3dclock/metadata.md | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 apps/3dclock/metadata.md diff --git a/apps/3dclock/metadata.md b/apps/3dclock/metadata.md deleted file mode 100644 index 016065caa..000000000 --- a/apps/3dclock/metadata.md +++ /dev/null @@ -1,16 +0,0 @@ -{ "id": "3dclock", - "name": "Simple 3D Clock", - "shortName":"3DClock", - "icon": "app.png", - "version":"0.01", - "description": "This is a simple 3D scalig demo based on Anton Clock", - "screenshots" : [ { "url":"screenshot.png" }, { "url":"polymathclock.jpg" } ], - "type":"clock", - "tags": "clock", - "readme": "README.md", - "supports": ["BANGLEJS2"], - "storage": [ - {"name":"3dclock.app.js","url":"app.js"}, - {"name":"3dclock.img","url":"app-icon.js","evaluate":true} - ] -} \ No newline at end of file From b7f26dbb01120db1669ce5b86475f62528bc6475 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 20:00:52 +0200 Subject: [PATCH 083/118] Update metadata.json --- apps/3dclock/metadata.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/3dclock/metadata.json b/apps/3dclock/metadata.json index 016065caa..9bf0e5016 100644 --- a/apps/3dclock/metadata.json +++ b/apps/3dclock/metadata.json @@ -4,7 +4,7 @@ "icon": "app.png", "version":"0.01", "description": "This is a simple 3D scalig demo based on Anton Clock", - "screenshots" : [ { "url":"screenshot.png" }, { "url":"polymathclock.jpg" } ], + "screenshots" : [ { "url":"screenshot.png" }], "type":"clock", "tags": "clock", "readme": "README.md", @@ -13,4 +13,4 @@ {"name":"3dclock.app.js","url":"app.js"}, {"name":"3dclock.img","url":"app-icon.js","evaluate":true} ] -} \ No newline at end of file +} From 57254539b6b2ab1c6a406131175109f566958eba Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 20:06:20 +0200 Subject: [PATCH 084/118] Update README.md --- apps/3dclock/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/3dclock/README.md b/apps/3dclock/README.md index 6f5ad93a3..4efb43901 100644 --- a/apps/3dclock/README.md +++ b/apps/3dclock/README.md @@ -3,3 +3,4 @@ Battery drainer, performance tester, show-off piece work-in-progress. Demo. + From 7b418f7861419b7c59901c32005ed1baa206da1c Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 20:09:13 +0200 Subject: [PATCH 085/118] Update README.md --- apps/3dclock/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/3dclock/README.md b/apps/3dclock/README.md index 4efb43901..078d9c952 100644 --- a/apps/3dclock/README.md +++ b/apps/3dclock/README.md @@ -1,3 +1,4 @@ + A simple clock with perspective scaling. Battery drainer, performance tester, show-off piece work-in-progress. From f180c19541d6f79ebb53f0970f154f1a076c1a4e Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 20:25:56 +0200 Subject: [PATCH 086/118] Add files via upload --- apps/3dclock/app.png | Bin 0 -> 1469 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/3dclock/app.png diff --git a/apps/3dclock/app.png b/apps/3dclock/app.png new file mode 100644 index 0000000000000000000000000000000000000000..480f8a53942753ed2af6e8bbd582e8107c6a0edf GIT binary patch literal 1469 zcmV;u1w#6XP)i5Lk3 ze}oYd1F1@d5QG7dphQK&pbUs+K(x`PiU=hrr7KPSUhU+(^Uk^V+;{G)msf*(1~=#K zz4lt){?^)St$m)oc=6)dZ}r&P+WuB}EMQDAU=qn83rs!{y~A zvrkV?R#sN>-*4Z(egFQQDaOOX!g$}^-IeQk{`|R(jg4Z}{r$bIgM))HdoC_6M3{!a zpX+~yAW$S&0tAnw*3QmOZ2~mXS|KdJX)&nKYl>{6^S?@u*#ImHEeu!~kTdXCwh*I5 zMMXY7K5J`hr>CbHOpy|Ic6M%VZhkqN%F3FWnp$69|MlzF+uK_WW55Oa>gwu$4oDdI zZpJE>rMLQa(F7qnI#das%e{9#o9Z&Q5BRlao_^e!jQ2 zx4a}B92|^}jso}P%aGH*|CE?(Q2K z8{OUAz@kV|dcC~7pg|NP3^U6VXbKApJv=FE)r8)H*bQ*6Dwyxh^zk-uYOV;l(l6%rDH>=H|eJXYu3y{=Rk?DH&>SZ--U2zaYP+rpDRXxv8lMN)$>(J(sr}S65e(4Ac_) z5RW&vx3~2Hq9Y?J)oTb|7-Fv@BO~glga+}b7jnd+qM}?~UE%)2hYz?_8<4fhbBKVa zr)PC_H8|eAdv|hjqF$nANRo++jEs+uM}RyM9v%+9e+vj*(1TJAE$3NHgYc9whL|F0 zF-t_}=H@0QCTe3c%@Ai5dN?wTjg4x02#(m;SlV1*@s4ZAI&uyc7Z>~c`#*pF3?>B9 z($f6={4_{10SN7tm6gfK$>ZbW6B82(ddNc=85s!)32d4vQdCJvNmf>tyoqL&ruOY0^nWMFn~C?c2BNctkttXKQOqz61wJNkJMH=KvPZ&(HPcA-QVkDJ?DK z5;HhBNC2s~MR|Jv{=Kjy-GQ*JAQI*v67(G5+1XhTYcQm2KjfkW^1#3V#&E>U%*;PI zj|v$;1P2G>aeg8A97JNq{L63J^@RYhQA4OKB=$l26{}UGJ|G_ zn}~=AD!ja&m=7o~FYn8jFYru6o3F*Jm4@>Wj;A_ybaa@kg=QJmzX+F6gQ)QOms(a> z82G;#FwriV0gnnu2BM;wYz_@7H{B1(m(lfMjHIUll#iCRwY5@xC9fL%q-RWnj*FtG zZgkcZ`MSC~dM<-Xv$M02ls*lRsTD1oHtRYVqLTFW^^q;Pdzh?|X82kxQ8EO>IAwi( zU0zVxF*Rg)d6^bADJhAYC=D`qE}DNucSd`P7}qzFsvt>R8hH^RCE6xl=mpRw+DI`X zvau2n_sfEU0&ZS%K!gr`K9(44Yiq+P6mzOK4U+;88gWodON&%f;gWs`tKy1CunP|s z7Z*=XPJ&4qadUHPXlT$8LnvbFWo2dDJ-8#YMT369z{<*sdP-tK@Fe{TN$Jv}0}#t_ zDBnG}fZ{J>fDED(p)F|RMS$Z)uq8%>fDS-x-MmH?lN?Oid+Z4ZVV>w=ghv`djF9*N X##sa{pg18@00000NkvXXu0mjfRXn9C literal 0 HcmV?d00001 From 82a3f6dd6a3e95f797a4a0817ac023f7aad6d4ea Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 20:28:21 +0200 Subject: [PATCH 087/118] Add files via upload --- apps/3dclock/screenshot.png | Bin 0 -> 6281 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/3dclock/screenshot.png diff --git a/apps/3dclock/screenshot.png b/apps/3dclock/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..ebe675d8f4a58a33c8611184ff454ab1845e59d2 GIT binary patch literal 6281 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 literal 0 HcmV?d00001 From 46ac3d0f9c1e09d99c5af7eb1336a1da6afe677c Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 20:31:09 +0200 Subject: [PATCH 088/118] Delete screenshot .png --- apps/3dclock/screenshot .png | Bin 6281 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/3dclock/screenshot .png diff --git a/apps/3dclock/screenshot .png b/apps/3dclock/screenshot .png deleted file mode 100644 index ebe675d8f4a58a33c8611184ff454ab1845e59d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6281 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 From 1f40abaffd21aebe5a28fad206d2830149c6a7db Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 20:31:44 +0200 Subject: [PATCH 089/118] Update README.md --- apps/3dclock/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/3dclock/README.md b/apps/3dclock/README.md index 078d9c952..ab9706f89 100644 --- a/apps/3dclock/README.md +++ b/apps/3dclock/README.md @@ -1,5 +1,4 @@ - -A simple clock with perspective scaling. + A simple clock with perspective scaling. Battery drainer, performance tester, show-off piece work-in-progress. Demo. From 93c54cc1f6c10c1d310dbe917610960fae0298f4 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 20:33:31 +0200 Subject: [PATCH 090/118] Update README.md --- apps/3dclock/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/3dclock/README.md b/apps/3dclock/README.md index ab9706f89..4efb43901 100644 --- a/apps/3dclock/README.md +++ b/apps/3dclock/README.md @@ -1,4 +1,4 @@ - A simple clock with perspective scaling. +A simple clock with perspective scaling. Battery drainer, performance tester, show-off piece work-in-progress. Demo. From b923aa57e3d62aecd03d39790578e86f1291ea3c Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 20:48:34 +0200 Subject: [PATCH 091/118] Update metadata.json --- apps/3dclock/metadata.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/3dclock/metadata.json b/apps/3dclock/metadata.json index 9bf0e5016..266a1faa6 100644 --- a/apps/3dclock/metadata.json +++ b/apps/3dclock/metadata.json @@ -1,5 +1,5 @@ { "id": "3dclock", - "name": "Simple 3D Clock", + "name": "3D Clock", "shortName":"3DClock", "icon": "app.png", "version":"0.01", From abccdb00b4fc7c40a007742feebe683f55ae9ce3 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 21:13:31 +0200 Subject: [PATCH 092/118] Add files via upload --- apps/3dclock/app.png | Bin 1469 -> 391 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/apps/3dclock/app.png b/apps/3dclock/app.png index 480f8a53942753ed2af6e8bbd582e8107c6a0edf..934ffdaeabc50e3c3dbd7b59da33f1503f2730f0 100644 GIT binary patch delta 357 zcmV-r0h<233x@-c7#;!x0000gY!MUy000S4OjJbx00000|NsC0UD(MZks%j<0VGL8 zK~yMHt&uTq!!Qg*KMkovCmE13bnBMp6mnoMnJge&a)jKXK#`%RNPrBCPFYGy+{{G@ zc=-5FpTsxt*Wob#KDFfILs8GeVi6F+(+W=u2lTURmeG%*f65zp5&h`x@@Vfd-GxDy zVUGe>W#cBFP0lTC++qn83rs!{y~AvrkV?R#sN>-*4Z(egFQQ zDaOOX!g$}^-IeQk{`|R(jg4Z}{r$bIgM))HdoC_6M3{!apX+~yAW$S&0tAnw*3QmO zZ2~mXS|KdJX@4=O&})ipqw~K?kJ$h$3oQ&-7?3mYSGEwNMMXtEK0a$}Yp18D8cdNA zcXoDeZf<@#o65?XnwnZ)U;p*%*W24$4P(Fs`s(WHe-20(_~YlJVGP8gGT7VOEBb}U z$453JaxPQwO;SEPJENE|WpV@N^d3}<&dyG1larHEet&+xx3{;vBpnVNKtydyu6@6 z6eA2X%M@q|3ky9wJg%>=!Hods5)y*rhKGkS|LWDN*RNmWK3`won3x!SfHpTb z7Zw(}y1F<-3P3qIIdO4u1afb0FQ-h*Vwt!@#Fsf zzIGTX8ES8DhgG$|Ait)j#@X4qsi_G{6iP)smw&e$S65e(4Ac_)5RW&vx3~2Hq9Y?J z)oTb|7-Fv@BO~glga+}b7jnd+qM}?~UE%)2hYz?_8<4fhbBKVar)PC_H8|eAdv|hj zqF$nANRo++jEs+uM}RyM9v%+9e+vj*(1TJAE$3NHgYc9whL|F0F-t_}=H@0QCTe3c z&3_PQ6?!-_jg5_JdI*l#*jUUcyu>1S(eOTGjLNl8H(7k}pf7SGSm_2nVCYUn8~E#(q3I5xT347s>R(yu6;6 z4=67$@5`4j@JvLTuf?pDhVu}Pr#g0YbeOD#W*ODL2$xZVsPOuiT2@#X_`ex2(Jq+* zj|xZzqN15>4hIAwi(U0zVxF*Rg) zd6^bADJhAYC=D`qE}DNucSd`P7}qzFsvt>R8hH^RCE6xl=mpRw+DI`XvVXA>5ckW1 zf&y+{azKO*eLj{LY-?-7DHL<6Hw}{l5E^k%OG}GXQ{j?+2&>|XNU#eJ78e&!PELYJ z8gX-TYiMZD5kn|q>t$tS+&#D>vqgh`!NAJOih4?7LhvO03Q6hGq5}}ia46qBxPam> zV}J~z6rn9><3)huMX)7CgfM^(Ky2N-Mi!GCOxk Date: Wed, 3 May 2023 21:16:48 +0200 Subject: [PATCH 093/118] Update app.js --- apps/3dclock/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/3dclock/app.js b/apps/3dclock/app.js index bed0f2b2e..76998bcbc 100644 --- a/apps/3dclock/app.js +++ b/apps/3dclock/app.js @@ -9,7 +9,7 @@ let drawTimeout; width : 176, height : 167, bpp : 3, buffer : atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJJJJJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJJJJJJJJJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJJIJJIBIIJJJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIBJAJJJIJIJBJJJJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIJBJABJIIAIIBBBAIJJJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIBBAABABBBABIAJJIJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBAAABBBBAIAJIIBBBBIBJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAIJAAIBIIJIAABIJBJJJJIJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIIAAJAJIJABJJBBAAAIIIABAJAIJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJIJIJIBJABAJABIBBBABJJJIJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJABJBAIIJJJBJJJBJAAABBJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBIBIAAAAJIAAAIABIJIAABIABIBJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAIAIAAABAAAABABBBABIJAIAJIBAIIJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAJAAAAAAAAABAIJJBBBABIBJJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAJBIAAAAAAAAAAAAAAIAJJBABAIIJBJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABIABAAAAAAABAAABAAJBJIIIJABAIAJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAJJIJBJJAAAAAJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAJAJJAAIAJBAAJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIIJBABIAAJBAJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAJBJBIAJBBIAAAJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIABJJABBBIAIAIBJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAABABIIJJJJJJJBIAABJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAIAAAAAIAABJJJAIJJIBJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABJIBBJJJBIBAIIBJBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAABAAAIIJIJBAIBJJIBIIAJIIJIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAABABBBAAAJBJBBBBBAIAJIJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABABJIBJJJAAJAIBJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAJBAAAAAAAAAAAAAAAAAAAAAAAAAIAIJJJIBJBIBIABIJJAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAIAIAAAAAAAAAAAAAAAAIAAAAAIIABBJIIIJIAJJIIJJJIJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBJABBJJBBAJBBJBIBBJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIAAIJIBAAIAAIAABJAIABABIJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAJAAABAAAIIIIIAAAAABIBBBABJJIAJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAAIJIIBABAABAAIAIBAIBABJJJAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAIAAIAAAAAAAAAAIABAJABIIAAIAAIIBBBBBAJIAJAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIBBBAIABAAAAAABBAAABBAJJJJIAIAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAABAAAAABAAAAAAAAABAAABBBAIBIIABAAAAAAAAAAIIJJJJAABAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAABAAAAAAAAABAAAAABABIJJBBAIIBAAAAAAAAAABIAIJAIBJBAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAABAAAAAIAIIAAAAIAAAAABIAAAAAAAAIAAAAAAIBBAIJJJJAIIAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAABBBAAAAABAAAAAIAIAIAIBAAAABABAAAJIAIJBAJJIIAAAAAAAAAAAAAAAAAAAAAAAJIAAAAAAAAAAAAAAIAAAAAAAIABAABAAAAAAABJBAIJAAAAAAAAAAAJJIIBJJJIIJAAAAAAAAAAAAAAAAAAAAAAAIAIAAAAAAAAAAAAAAAAABJIAIAAAAABAAAAAAJBJJJIIAAAAAAAAAAIJAJJJJBIJJAAAAAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAABAAAAAIJBAIBIIBBIBBAAAABJBBIJAAAAAAAAIAAAAJJBJIJJJIIAAAAAAAAAAAAAAAAAAAAAJIAAAAAAAAAAAAAAIAAAAIJABBABBIIAAAAAIJIABBIAAAAAAAAAAAAAJJJIJBJJJJIAAAAAAAAAAAAAAAAAAAAAJJBAAAAAAAAAAAAAIAAAABAAAIBJAABIAIAABIAIBBIIAAAAAAAAAAAABIJJBBBAJBIAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAABIIAAABABBBIAABJIJAIBIIABJAIIAAAAAAAIAAAAJAJIIJIJJJBAAAAAAAAAAAAAAAAAAAAAJIJIAAAAAAAAAABBIBAAAAJAAABJBBAAAAABAJIABAAAAAAAAAIAAAAABJJBBIJJJJAAAAAAAAAAAAAAAAAAAAABJIAAAAAAAAAAAAABIIAAAAIAJIJIIAIIIAAAABBBABAAAAAAAAAAAAAABJIJBJIBJIJAAAAAAAAAAAAAAAAAAAABAIAAAAAAAAAAAABBAAIABAAJIJJJABJBAAAABAAIAAIAIAAAAAAAAAAAJJJJJJJIJJAIAAAAAAAAAAAAAAAAAAAIBIBAAAAAAAAAAAAAJAAAIAAIBJJIBAJIAABAAAAAABAIAIAAAAAAAAABABJJJBJJJIJAAAAAAAAAAAAAAAAAAAAAIJBAAAAAAAAAAAABIAAAAAAABJJBAAAABAAAAABAAAAAAAAAAAAAAAAAAAJJJIBJJJAIAAAAAAAAAAAAAAAAAABBJABAAAAAAAAAAAAAIAAAJIJAIBJBAAAIIAAAAAAAAAAAAIAAAAIAAAAAAAIJBBJAJBABAAAAAAAAAAAAAAAAAABIAJAAAAAAAAAAAAABAABABAAABIAAAJIABAAAAAAAAAABIIAAAAAAAAAAAJIJJJIJIBJJAAAAAAAAAAAAAAAAAAABIAIAAAAAAAAAAAAIAABAAAJAAIBAIAIIAAAAAAAAAAABIAIAIAAAAAAAAIIJBJIJABJJIAAAAAAAAAAAAAAAAAJIJIAAAAAAAAAAAAAAABAAAIIJAIIAAAAAAAAAAAAAAAAAJAAAJIAAAAABJJJJJJBIIBJAIAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAIBAABAAIIIAAAAIBBAAAAAIAAAIIIAAAAAAJIBJIAAJJJJIAAAAAAAAAAAAAAAAAIAJBIAAAAAAAAAAAAAAAAIABBBIAAAAAAAAAAIBBBBAAABBAAIBBBAAAAAAAIBIAJJBIJJBAAAAAAAAAAAAAAAAAIIJAAAAAAAAAAAAAAAAAIAABAAIAIAAAAAAAAIIIJAAAAAAAAAIIAAIAAAIIBBJJJJJJIAJAAAAAAAAAAAAAAAAAAAIAIAAAAAAAAAAAAAAAAAAAIIBIAAAAAAAAABBIJAIAAAAABBIAAAAAAAAAAAJJIJABIBJAAAAAAAAAAAAAAAABIIAABAAAAAAAAAAAAAAAAAIIBBBBBAAIAAAABBJBJIBIAAIAABAAAAAAAAAABAAJIIIAABJAAAAAAAAAAAAAAAABBAAAIAAAAAAAAAAAAAAAAAAAIABIAAABAAAAAAJIIJBAAIBJBJAAAAAAAAAAAABBIIIIAIBAAAAAAAAAAAAAAAAAJIABJAAAAAAAAAAAAAABAAIAAAAIAAAAAAAAAIBBIJAAIABJIBAAAAAAAAAAAAABJBAAAIBAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAIAAAAAJABAAAIAAAIJJIAJJABJJAAAAAAAAAAABAABJJJIIIAJAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAIAAAABABAAIAAAIAIAJBJJIBIIAIJAAAAAAAAAAAAIAJJAAABJIAAAAAAAAAAAAAAAABIAAJAAAAAAAAAAAAAAAAAAAAAABBAIAIABABAIBAJJBJIIJBIAAAAAIAAAAAABIBJIAAAAAAAAAAAAAAAAAAAAIBBAJAAAAAAAAAAAAAAAAIAAAAAJIABAAAJAIAABABIABJBIBAAAAAAAAAAAAAAAAJIAIAAAIAAAAAAAAAAAAAAABIAAIJAAAAAAAAAAAAAAAAJAAAABAAAABBBJJIAAAABBJBJIJBBAAAAAAAAAAAABBJIIAAAAIAAAAAAAAAAAAAAAAIJAJAAAAAAAAAAAAAAAJBAAABBBIJABBBIAAAIBBAIJJJJBIJAAAAAAAAAAAAAAJBJAAAAAJAAAAAAAAAAAAAAAAJIBAIIAAAAAAAAAAAAABJAAABABAAAJBIIJABAABBJBJJJJABAAAAAAAAAAAAAAJJJAAAABAAAAAAAAAAAAAAAAIIIJBBJAAAAAAAAAAAABABAAAAAAAIIAJJBJBAIJJJJJJJJJJIIAAAAAAAAAAAAAABJAAAAAIAAAAAAAAAAAAAAAABIIABIAAAAAAAAAAAAABIAAAABAAIABJJABIJIBIBJIJJJJJJIIAAAAAAAAAAAAABBBAAAAIAAAAAAAAAAAAAAABIIAABIIIAAAAAAAAAAAAAAAAAAAJBBABJBJJJBAABBJJJJJIJBAAAAAAAAAAAAABBIBAAAIIAAAAAAAAAAAAAAABAAAAAIIAAAAAABAAAAAAAAAAAABBIABJIJJJJJJJJIJJJJBJAIIAAAAAAAAAAABBBJIAAAIAAAAAAAAAAAAAAAAIIIIBBABBAIIABIAAAAAAAAAAAABJAAABIJJJJBBJJJJBBBBBAABAAAAAAAAAABIAJBJIAAIBAAAAAAAAAAAAAAAJBAAAAIAIAABABAIAAAAAAAAAAAIAIAABBIJIJJIJBJJIBBBJIAIAAAAAAAAAAAAIAJBIABBAAAAAAAAAAAAAAAAAIBAJAAAAAAAIABAAAAAAAAAAAAAJAAAABBAJIBIIJJJBBBIJJBIAAAAAAAAAAAABBBIIIJAIAAAAAAAAAAAAAAAAAAIIJAAAIIAAIBAIAAAAAAAAAAIJAAAAJBJABJBIJJJJJJBJIJJBAAAAIAAAAAAIAIBBIIJAAAAAAAAAAAAAAAAABBIJBABABAABIAAAAAAAAAAAAABAAIAAIJAJJJJJBJJBJJJJJIJJAAAAAIAAAIABABJIJIAAAAAAAAAAAAAAAAABBBIIAAAIIBAIIIAAAAAAABABAIAAABAIJBJJJAIIBJJJJBBJJJJBIAAAAIJAAAIBABJBABJIAAAAAAAAAAAAAAAABJBBJABBBBAAAAAAAAAAAAAAAAAIAAAIJBJBABIIJJJIJIJJJJJJIIBABJAAABBAAAJJIABAAAAAAAAAAAAAAAABAABJJJBBABJAAAAAAAAAIAAAAAAAAAAAIJBIABBJJJJJJJBBJJJJIAABBJABAIIAAAJIAIAAAAAAAAAAAAAAAAABAIJJABIAIIAAAAAAAAAABBAAAABAIAABABJAIJJIJJJJJIIJJJJIIAABBJIAABAAAAAIJAAAAAAAAAAAAAAAAAAAJABJJBIAAAAAAAAAAIIIBAAAAAAAAAIABBJAJJBBJJJBBJBJJJJIIAAJIIAIBAAAAAAABIIAAAAAAAAAAAAAAAABABJBIIAIBIAAAAAAAIIBAAAABAAAAAAAAJIBJIIIJJIJJJJJJJJIAAIJBAJJIAAAAABJAIBAAAAAAAAAAAAAAAAAAABJJJBAIIAAAAAAAJAIAABAAAABAABBBBJBIBBJJJIJJJIJJJAIABBBBIJJAAAAAAAAJIJAAAAAAAAAAAAAAAABAAABIBBAABAAAAAAAAAIAAIAIAAAAAAAJBAIBJJJBIBJBJJJJJIABIBAAAIIAAAAAAAABBAAAAAAAAAAAAAAAAAAIIIAJBAJIBAAAAAABAAAAAAAAAAAAAABJJIJAJBIJIJJBJJJJIJJBAABJJIIBAAAAAAABBBAAAAAAAAAAAAAAAAABABJIBABIAAAAAAAAABAAAIAAAAAAABJBAIJJJJIIBJJJJJJJJBJAAAIBJJJIAAAAAAAAABAAAAAAAAAAAAAAAAAAAABJJIBIJAAAAAAABAAAAAIAAAAAABJJJBBIJJJJJJJJJJJJJJBBABJAIAIBAAAAAABABBAAAAAAAAAAAAAAAAAABIABBBBBIIAAAAAAAAAIAAABAAAIAAJBIJJJJAJJJIBJJJBJJJJJAJJJJJAAAIAAAABABAAAAAAAAAAAAAAAAAABBBBBAJJIAAAAAAAAAAAAIAAAIAAAABIIJIJJIIIJIJJIJJJJJJIJBJJJJIIBAAAAAAAIAAAAAAAAAAAAAAAAAAAJBBABAAIJBJBAAAAAAJAAAAAAAAAABBJJBIIIJJBIJJJJJJJJJJJJIJBBJJJAAAAAAAIBIAAAAAAAAAAAAAAAAAAIBBBIAIIJJIIAAAAIAIAAIAAAAAAAAAIJBABJIJJJJJJJBIIJJBJIJABJJJBAAAAAAIAIIAAAAAAAAAAAAAAAAAABBIAIABABAJAAAAAAAIAAIAAAAAAAAAJBJIIJJJBAIJIJBBJJJJJIBAAABJBAAAAAAABAIAAAAAAAAAAAAAAAAAAABAIIBBIBBJAAAIAIIAAAAAAAAAAAABAJJBBBJJJIJJBJBJBJJJJBBAIAJJABAAAAAAIJBAAAAAAAAAAAAAAAAAAABBABBAJIJAIBAAIBAABABBAAAAAABIBJJJJJJIIJAIJJJJJJJJJIIIBAJJIBAAAAAAAAAAAAAAAAAAAAAAAAAAAABBJAAABAJIBAAAAJABAIJAAAAAAAABJJAAJJBBIJIIJJIJIJJJJJAABABJAAAAAABIIAAAAAAAAAAAAAAAAAAAAAJAABAIIIIIBIBBAAAAIJBAIAAAAAAJJJBJBJBJJBJBJJBJBJJJAIIBAIAJJABAAABIBBIAAAAAAAAAAAAAAAAAAABBBAIAIAIBABIIJAAAAABBIAAAIIABJJJJJIJBJJIJJBBJJBJJJJBAAABAAAAAAAJBBAAAAAAAAAAAAAAAAAAAAAAABIBBIIBAABABBAAAAABIJABAABJJJBJJIBIJJJIJBBJIJJJJIABAAIJJBIBAIBAIAIAAAAAAAAAAAAAAAAAAAAABAABJBAAAIAIIJIAJAAAJAIIAJJBJJJJJJBJBJJJJJJIIIJJIJIAAABAJBIBAAAJAAIAAAAAAAAAAAAAAAAAAAAAIIIAJIABAAAIBABAAAABJJJJJJJJJJBJJIJJJJBJJIIJJJIIJIAAAABJIBJJABBJJBIAAAAAAAAAAAAAAAAAAAAABIIABBBABIIAJAAIAIJJJJBIJJJJJJJJJJIJJJJBJJJBJJBIIJBAAABAABJBJAIIJIIAAAAAAAAAAAAAAAAAAAAABABBAABABBBIJIBIBIJJBJAJBJJJJJJJJJJJJJJJJBIJBBBJJAIABBJIJIBBABBJIIAAAAAAAAAAAAAAAAAAAAAAABIIBAIIIAAIJBJIIJJJAJJJJJJJJJJJJJJJJJIJAJJJJJJJBJAIAABJIAJAAAIJBBAAAAAAAAAAAAAAAAAAAAAAABIAIIAAIIJBJAIIIJJIIJJJJJJJJJJJJJJIJJJAIJBIJJJJIJIBABIBIIAAABBAIAAAAAAAAAAAAAAAAAAAAAAAAAIBBBAAJAIAJJIIIIJBJJBJJJJJJJJBJJJBIIBJBBJJJJJJIJJJJAJBAABAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIBAIBBJABBJJJJJJJJJJJJJJJJJBIIBIIJIJJJAIJIBIIAAIAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIABAAAAAJIAJJBIIJJJJJJJJJJJJJJJJJJIJJJJJJJJBJJJJJAJAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAJBJBJBAJJIJJJJJJJJJJJJJIJJAJJJJJJIIJIJJIAJABIBAAJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIAJBAIAAAIIJJJJJJJJJJJJJJJJJJJJJIJJJBJIIJIJIJJJBBJJBIBBJIJBAAAAAAAAAAAAAAAAAAAAAAAAAAAABIIIAAABAAJBJBJJAJJJJJJJJJJJJJJJJBJJJJIIJJBBJIIIABBAIIIAIABAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAIIIIBAIIJBJJIJBJIJJJJJJJJJJJJJJJJJJJIJAJJBABJJJJIAJIAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAIAABABJAJBBJJJJJJJJJJJJJJBJJJJJJJBJJJIJBBJIBJJJBIJJJAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIIBABIAABBJAJJBJJJJJJJJJJJJJJJJJJJJJIJBBJIIJBAAJAJJIBAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIBIAAJAABBJJJIJJJJJJJJJJJIIIJJIIIBJIIJIAIBJBJBJABIJBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIJAAIBJIBJBBJJJJJJJJJJJJJJBIJJJBBJJJJJJBJJJJJBJJJJIBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAIAIBBJBBJBJJJBBJJJJJJJJJJJJJJIBBJJBAIIIJJAJJBJJIIJAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABIIAIIABAIIJIJJJJJJJJJJJJJBIJJJJJABBIJABBIJAJJJBBIJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIBAIBBJIAIIJBJJJJJJJJJJJJBJJIJJIJJIJAJJBBJBJBJIJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIIABIABBIJAIJIJJJJJJJJJJJJJJJJBBJJJBJJAJJJJJJBJIJBAJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIIBJAAABJJJJIJJJJJJJJJJJJBBBJJJJJJIJJABAJJAJJJJJIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBAIAAABBIIBJJBJJJJJJJJJBJIJAJAJJBJAAIJJIJIBBJIJJABBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAJBAJIBJIIJJJJJJJJJJJJIBJBBJIBJJJBIJAAJAJJJJBBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBIIJJAIIIBJIBBJJJJJJJJJJJJJBJBIBJIIJJBJAJJBJJJJJIIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAJABAIJABIJJJJJJJJJJBJBJJIJJJJBJIJIJIIBIJABIJBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBJBJIJIJJJJJJJIJJJJJJJJJJBIAJBIJIJBJIJJIJJJBBIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBJAIIBBJJJJJJJJJBAJJBJJBJIBIAJJJBJJJJBBJAJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBABABIBIJJJJBJJIIJJJBIJJIJJJJAJJJJJJJIIJJBJIJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIJJJIAAJBJJJIJJJJJJJJBBIJJIJJIJJJIJIJIJJAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBBJBAAIBJJJJJJBBJIJJIJJIJBJJAIIJJJIJIAJABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAJBJJJBIJJJJBJBIBJBAAIJJIJJIJBJJJBJBJAAAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBJIBIBIJJJJJAJAJJJJIIIIJBBJJAJJBIAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJJAAJJJJJJJJBIIJJJBBJBBBBIJJIBAIAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJBIBIJJJBJIJIJJJBBJIIJBJIJBABIBBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAJAIJBIJIIJBJJJJBBIJIIJJJJJJBJBIJJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBJJJJBJJBBBBJJABIJIIJIJAIIIBBBIJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIAJIJJIBBJJBJIJJJBJIIJJJIIBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIJAJIBJBBBIJIJIIBJJJJJBAJBAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJIJJJAJJBIIJJIIIIIJJJBAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAIIJJJJJJJJIJABJIJIBJJIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIIIJJIJJAJBJAJJBAJJIJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAJJBIJJJJJIJBBBIIJIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJJIAJBIAIAJBIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJBAJJIIJBJJBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJIIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") }; - +g.reset().clearRect(Bangle.appRect); // clear whole background (w/o widgets) // Actually draw the watch face let draw = function() { var x = g.getWidth() / 2; From d36f4f3b563af2a1a6e1dbde30b34c461dcb6942 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 21:22:32 +0200 Subject: [PATCH 094/118] Update app.js --- apps/3dclock/app.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/3dclock/app.js b/apps/3dclock/app.js index 76998bcbc..3576920f2 100644 --- a/apps/3dclock/app.js +++ b/apps/3dclock/app.js @@ -36,7 +36,8 @@ let draw = function() { var fsizeh = basesize * scaleh; g.drawImage(moonimg,0,0); - + g.setColor(0,0,0); + g.fillRect(0,175-32,175,175); // g.reset().clearRect(Bangle.appRect); // clear whole background (w/o widgets) g.setColor(1,1,1); g.setFontAlign(1, 0).setFont("Vector",fsizeh).drawString(hour, x, y); From 943ce51852f1aa984208f6a6d76912f38db11889 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 21:28:54 +0200 Subject: [PATCH 095/118] Update app.js --- apps/3dclock/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/3dclock/app.js b/apps/3dclock/app.js index 3576920f2..89275c84f 100644 --- a/apps/3dclock/app.js +++ b/apps/3dclock/app.js @@ -9,7 +9,7 @@ let drawTimeout; width : 176, height : 167, bpp : 3, buffer : atob("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJJJJJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJJJJJJJJJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJJIJJIBIIJJJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIBJAJJJIJIJBJJJJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIJBJABJIIAIIBBBAIJJJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIBBAABABBBABIAJJIJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBAAABBBBAIAJIIBBBBIBJJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAIJAAIBIIJIAABIJBJJJJIJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIIAAJAJIJABJJBBAAAIIIABAJAIJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJIJIJIBJABAJABIBBBABJJJIJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJABJBAIIJJJBJJJBJAAABBJJJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBIBIAAAAJIAAAIABIJIAABIABIBJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAIAIAAABAAAABABBBABIJAIAJIBAIIJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAJAAAAAAAAABAIJJBBBABIBJJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAJBIAAAAAAAAAAAAAAIAJJBABAIIJBJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABABIABAAAAAAABAAABAAJBJIIIJABAIAJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAJJIJBJJAAAAAJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAJAJJAAIAJBAAJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIIJBABIAAJBAJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAJBJBIAJBBIAAAJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIABJJABBBIAIAIBJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAABABIIJJJJJJJBIAABJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAIAAAAAIAABJJJAIJJIBJJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABJIBBJJJBIBAIIBJBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAABAAAIIJIJBAIBJJIBIIAJIIJIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAABABBBAAAJBJBBBBBAIAJIJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABABJIBJJJAAJAIBJJJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAJBAAAAAAAAAAAAAAAAAAAAAAAAAIAIJJJIBJBIBIABIJJAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAIAIAAAAAAAAAAAAAAAAIAAAAAIIABBJIIIJIAJJIIJJJIJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBJABBJJBBAJBBJBIBBJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAIAAIJIBAAIAAIAABJAIABABIJJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAJAAABAAAIIIIIAAAAABIBBBABJJIAJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAAIJIIBABAABAAIAIBAIBABJJJAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAIAAIAAAAAAAAAAIABAJABIIAAIAAIIBBBBBAJIAJAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIBBBAIABAAAAAABBAAABBAJJJJIAIAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAABAAAAABAAAAAAAAABAAABBBAIBIIABAAAAAAAAAAIIJJJJAABAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAABAAAAAAAAABAAAAABABIJJBBAIIBAAAAAAAAAABIAIJAIBJBAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAABAAAAAIAIIAAAAIAAAAABIAAAAAAAAIAAAAAAIBBAIJJJJAIIAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAABAAAAABBBAAAAABAAAAAIAIAIAIBAAAABABAAAJIAIJBAJJIIAAAAAAAAAAAAAAAAAAAAAAAJIAAAAAAAAAAAAAAIAAAAAAAIABAABAAAAAAABJBAIJAAAAAAAAAAAJJIIBJJJIIJAAAAAAAAAAAAAAAAAAAAAAAIAIAAAAAAAAAAAAAAAAABJIAIAAAAABAAAAAAJBJJJIIAAAAAAAAAAIJAJJJJBIJJAAAAAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAABAAAAAIJBAIBIIBBIBBAAAABJBBIJAAAAAAAAIAAAAJJBJIJJJIIAAAAAAAAAAAAAAAAAAAAAJIAAAAAAAAAAAAAAIAAAAIJABBABBIIAAAAAIJIABBIAAAAAAAAAAAAAJJJIJBJJJJIAAAAAAAAAAAAAAAAAAAAAJJBAAAAAAAAAAAAAIAAAABAAAIBJAABIAIAABIAIBBIIAAAAAAAAAAAABIJJBBBAJBIAAAAAAAAAAAAAAAAAAAAABABAAAAAAAAAAAABIIAAABABBBIAABJIJAIBIIABJAIIAAAAAAAIAAAAJAJIIJIJJJBAAAAAAAAAAAAAAAAAAAAAJIJIAAAAAAAAAABBIBAAAAJAAABJBBAAAAABAJIABAAAAAAAAAIAAAAABJJBBIJJJJAAAAAAAAAAAAAAAAAAAAABJIAAAAAAAAAAAAABIIAAAAIAJIJIIAIIIAAAABBBABAAAAAAAAAAAAAABJIJBJIBJIJAAAAAAAAAAAAAAAAAAAABAIAAAAAAAAAAAABBAAIABAAJIJJJABJBAAAABAAIAAIAIAAAAAAAAAAAJJJJJJJIJJAIAAAAAAAAAAAAAAAAAAAIBIBAAAAAAAAAAAAAJAAAIAAIBJJIBAJIAABAAAAAABAIAIAAAAAAAAABABJJJBJJJIJAAAAAAAAAAAAAAAAAAAAAIJBAAAAAAAAAAAABIAAAAAAABJJBAAAABAAAAABAAAAAAAAAAAAAAAAAAAJJJIBJJJAIAAAAAAAAAAAAAAAAAABBJABAAAAAAAAAAAAAIAAAJIJAIBJBAAAIIAAAAAAAAAAAAIAAAAIAAAAAAAIJBBJAJBABAAAAAAAAAAAAAAAAAABIAJAAAAAAAAAAAAABAABABAAABIAAAJIABAAAAAAAAAABIIAAAAAAAAAAAJIJJJIJIBJJAAAAAAAAAAAAAAAAAAABIAIAAAAAAAAAAAAIAABAAAJAAIBAIAIIAAAAAAAAAAABIAIAIAAAAAAAAIIJBJIJABJJIAAAAAAAAAAAAAAAAAJIJIAAAAAAAAAAAAAAABAAAIIJAIIAAAAAAAAAAAAAAAAAJAAAJIAAAAABJJJJJJBIIBJAIAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAAAAAAAAAAAIBAABAAIIIAAAAIBBAAAAAIAAAIIIAAAAAAJIBJIAAJJJJIAAAAAAAAAAAAAAAAAIAJBIAAAAAAAAAAAAAAAAIABBBIAAAAAAAAAAIBBBBAAABBAAIBBBAAAAAAAIBIAJJBIJJBAAAAAAAAAAAAAAAAAIIJAAAAAAAAAAAAAAAAAIAABAAIAIAAAAAAAAIIIJAAAAAAAAAIIAAIAAAIIBBJJJJJJIAJAAAAAAAAAAAAAAAAAAAIAIAAAAAAAAAAAAAAAAAAAIIBIAAAAAAAAABBIJAIAAAAABBIAAAAAAAAAAAJJIJABIBJAAAAAAAAAAAAAAAABIIAABAAAAAAAAAAAAAAAAAIIBBBBBAAIAAAABBJBJIBIAAIAABAAAAAAAAAABAAJIIIAABJAAAAAAAAAAAAAAAABBAAAIAAAAAAAAAAAAAAAAAAAIABIAAABAAAAAAJIIJBAAIBJBJAAAAAAAAAAAABBIIIIAIBAAAAAAAAAAAAAAAAAJIABJAAAAAAAAAAAAAABAAIAAAAIAAAAAAAAAIBBIJAAIABJIBAAAAAAAAAAAAABJBAAAIBAAAAAAAAAAAAAAAABAAABAAAAAAAAAAAAAAAAAIAAAAAJABAAAIAAAIJJIAJJABJJAAAAAAAAAAABAABJJJIIIAJAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAIAAAABABAAIAAAIAIAJBJJIBIIAIJAAAAAAAAAAAAIAJJAAABJIAAAAAAAAAAAAAAAABIAAJAAAAAAAAAAAAAAAAAAAAAABBAIAIABABAIBAJJBJIIJBIAAAAAIAAAAAABIBJIAAAAAAAAAAAAAAAAAAAAIBBAJAAAAAAAAAAAAAAAAIAAAAAJIABAAAJAIAABABIABJBIBAAAAAAAAAAAAAAAAJIAIAAAIAAAAAAAAAAAAAAABIAAIJAAAAAAAAAAAAAAAAJAAAABAAAABBBJJIAAAABBJBJIJBBAAAAAAAAAAAABBJIIAAAAIAAAAAAAAAAAAAAAAIJAJAAAAAAAAAAAAAAAJBAAABBBIJABBBIAAAIBBAIJJJJBIJAAAAAAAAAAAAAAJBJAAAAAJAAAAAAAAAAAAAAAAJIBAIIAAAAAAAAAAAAABJAAABABAAAJBIIJABAABBJBJJJJABAAAAAAAAAAAAAAJJJAAAABAAAAAAAAAAAAAAAAIIIJBBJAAAAAAAAAAAABABAAAAAAAIIAJJBJBAIJJJJJJJJJJIIAAAAAAAAAAAAAABJAAAAAIAAAAAAAAAAAAAAAABIIABIAAAAAAAAAAAAABIAAAABAAIABJJABIJIBIBJIJJJJJJIIAAAAAAAAAAAAABBBAAAAIAAAAAAAAAAAAAAABIIAABIIIAAAAAAAAAAAAAAAAAAAJBBABJBJJJBAABBJJJJJIJBAAAAAAAAAAAAABBIBAAAIIAAAAAAAAAAAAAAABAAAAAIIAAAAAABAAAAAAAAAAAABBIABJIJJJJJJJJIJJJJBJAIIAAAAAAAAAAABBBJIAAAIAAAAAAAAAAAAAAAAIIIIBBABBAIIABIAAAAAAAAAAAABJAAABIJJJJBBJJJJBBBBBAABAAAAAAAAAABIAJBJIAAIBAAAAAAAAAAAAAAAJBAAAAIAIAABABAIAAAAAAAAAAAIAIAABBIJIJJIJBJJIBBBJIAIAAAAAAAAAAAAIAJBIABBAAAAAAAAAAAAAAAAAIBAJAAAAAAAIABAAAAAAAAAAAAAJAAAABBAJIBIIJJJBBBIJJBIAAAAAAAAAAAABBBIIIJAIAAAAAAAAAAAAAAAAAAIIJAAAIIAAIBAIAAAAAAAAAAIJAAAAJBJABJBIJJJJJJBJIJJBAAAAIAAAAAAIAIBBIIJAAAAAAAAAAAAAAAAABBIJBABABAABIAAAAAAAAAAAAABAAIAAIJAJJJJJBJJBJJJJJIJJAAAAAIAAAIABABJIJIAAAAAAAAAAAAAAAAABBBIIAAAIIBAIIIAAAAAAABABAIAAABAIJBJJJAIIBJJJJBBJJJJBIAAAAIJAAAIBABJBABJIAAAAAAAAAAAAAAAABJBBJABBBBAAAAAAAAAAAAAAAAAIAAAIJBJBABIIJJJIJIJJJJJJIIBABJAAABBAAAJJIABAAAAAAAAAAAAAAAABAABJJJBBABJAAAAAAAAAIAAAAAAAAAAAIJBIABBJJJJJJJBBJJJJIAABBJABAIIAAAJIAIAAAAAAAAAAAAAAAAABAIJJABIAIIAAAAAAAAAABBAAAABAIAABABJAIJJIJJJJJIIJJJJIIAABBJIAABAAAAAIJAAAAAAAAAAAAAAAAAAAJABJJBIAAAAAAAAAAIIIBAAAAAAAAAIABBJAJJBBJJJBBJBJJJJIIAAJIIAIBAAAAAAABIIAAAAAAAAAAAAAAAABABJBIIAIBIAAAAAAAIIBAAAABAAAAAAAAJIBJIIIJJIJJJJJJJJIAAIJBAJJIAAAAABJAIBAAAAAAAAAAAAAAAAAAABJJJBAIIAAAAAAAJAIAABAAAABAABBBBJBIBBJJJIJJJIJJJAIABBBBIJJAAAAAAAAJIJAAAAAAAAAAAAAAAABAAABIBBAABAAAAAAAAAIAAIAIAAAAAAAJBAIBJJJBIBJBJJJJJIABIBAAAIIAAAAAAAABBAAAAAAAAAAAAAAAAAAIIIAJBAJIBAAAAAABAAAAAAAAAAAAAABJJIJAJBIJIJJBJJJJIJJBAABJJIIBAAAAAAABBBAAAAAAAAAAAAAAAAABABJIBABIAAAAAAAAABAAAIAAAAAAABJBAIJJJJIIBJJJJJJJJBJAAAIBJJJIAAAAAAAAABAAAAAAAAAAAAAAAAAAAABJJIBIJAAAAAAABAAAAAIAAAAAABJJJBBIJJJJJJJJJJJJJJBBABJAIAIBAAAAAABABBAAAAAAAAAAAAAAAAAABIABBBBBIIAAAAAAAAAIAAABAAAIAAJBIJJJJAJJJIBJJJBJJJJJAJJJJJAAAIAAAABABAAAAAAAAAAAAAAAAAABBBBBAJJIAAAAAAAAAAAAIAAAIAAAABIIJIJJIIIJIJJIJJJJJJIJBJJJJIIBAAAAAAAIAAAAAAAAAAAAAAAAAAAJBBABAAIJBJBAAAAAAJAAAAAAAAAABBJJBIIIJJBIJJJJJJJJJJJJIJBBJJJAAAAAAAIBIAAAAAAAAAAAAAAAAAAIBBBIAIIJJIIAAAAIAIAAIAAAAAAAAAIJBABJIJJJJJJJBIIJJBJIJABJJJBAAAAAAIAIIAAAAAAAAAAAAAAAAAABBIAIABABAJAAAAAAAIAAIAAAAAAAAAJBJIIJJJBAIJIJBBJJJJJIBAAABJBAAAAAAABAIAAAAAAAAAAAAAAAAAAABAIIBBIBBJAAAIAIIAAAAAAAAAAAABAJJBBBJJJIJJBJBJBJJJJBBAIAJJABAAAAAAIJBAAAAAAAAAAAAAAAAAAABBABBAJIJAIBAAIBAABABBAAAAAABIBJJJJJJIIJAIJJJJJJJJJIIIBAJJIBAAAAAAAAAAAAAAAAAAAAAAAAAAAABBJAAABAJIBAAAAJABAIJAAAAAAAABJJAAJJBBIJIIJJIJIJJJJJAABABJAAAAAABIIAAAAAAAAAAAAAAAAAAAAAJAABAIIIIIBIBBAAAAIJBAIAAAAAAJJJBJBJBJJBJBJJBJBJJJAIIBAIAJJABAAABIBBIAAAAAAAAAAAAAAAAAAABBBAIAIAIBABIIJAAAAABBIAAAIIABJJJJJIJBJJIJJBBJJBJJJJBAAABAAAAAAAJBBAAAAAAAAAAAAAAAAAAAAAAABIBBIIBAABABBAAAAABIJABAABJJJBJJIBIJJJIJBBJIJJJJIABAAIJJBIBAIBAIAIAAAAAAAAAAAAAAAAAAAAABAABJBAAAIAIIJIAJAAAJAIIAJJBJJJJJJBJBJJJJJJIIIJJIJIAAABAJBIBAAAJAAIAAAAAAAAAAAAAAAAAAAAAIIIAJIABAAAIBABAAAABJJJJJJJJJJBJJIJJJJBJJIIJJJIIJIAAAABJIBJJABBJJBIAAAAAAAAAAAAAAAAAAAAABIIABBBABIIAJAAIAIJJJJBIJJJJJJJJJJIJJJJBJJJBJJBIIJBAAABAABJBJAIIJIIAAAAAAAAAAAAAAAAAAAAABABBAABABBBIJIBIBIJJBJAJBJJJJJJJJJJJJJJJJBIJBBBJJAIABBJIJIBBABBJIIAAAAAAAAAAAAAAAAAAAAAAABIIBAIIIAAIJBJIIJJJAJJJJJJJJJJJJJJJJJIJAJJJJJJJBJAIAABJIAJAAAIJBBAAAAAAAAAAAAAAAAAAAAAAABIAIIAAIIJBJAIIIJJIIJJJJJJJJJJJJJJIJJJAIJBIJJJJIJIBABIBIIAAABBAIAAAAAAAAAAAAAAAAAAAAAAAAAIBBBAAJAIAJJIIIIJBJJBJJJJJJJJBJJJBIIBJBBJJJJJJIJJJJAJBAABAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAIBAIBBJABBJJJJJJJJJJJJJJJJJBIIBIIJIJJJAIJIBIIAAIAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIABAAAAAJIAJJBIIJJJJJJJJJJJJJJJJJJIJJJJJJJJBJJJJJAJAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAJAAAJBJBJBAJJIJJJJJJJJJJJJJIJJAJJJJJJIIJIJJIAJABIBAAJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIAJBAIAAAIIJJJJJJJJJJJJJJJJJJJJJIJJJBJIIJIJIJJJBBJJBIBBJIJBAAAAAAAAAAAAAAAAAAAAAAAAAAAABIIIAAABAAJBJBJJAJJJJJJJJJJJJJJJJBJJJJIIJJBBJIIIABBAIIIAIABAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAIIIIBAIIJBJJIJBJIJJJJJJJJJJJJJJJJJJJIJAJJBABJJJJIAJIAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABAIAABABJAJBBJJJJJJJJJJJJJJBJJJJJJJBJJJIJBBJIBJJJBIJJJAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIIBABIAABBJAJJBJJJJJJJJJJJJJJJJJJJJJIJBBJIIJBAAJAJJIBAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAIBIAAJAABBJJJIJJJJJJJJJJJIIIJJIIIBJIIJIAIBJBJBJABIJBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIJAAIBJIBJBBJJJJJJJJJJJJJJBIJJJBBJJJJJJBJJJJJBJJJJIBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAAAIAIBBJBBJBJJJBBJJJJJJJJJJJJJJIBBJJBAIIIJJAJJBJJIIJAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIABIIAIIABAIIJIJJJJJJJJJJJJJBIJJJJJABBIJABBIJAJJJBBIJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIBAIBBJIAIIJBJJJJJJJJJJJJBJJIJJIJJIJAJJBBJBJBJIJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIIABIABBIJAIJIJJJJJJJJJJJJJJJJBBJJJBJJAJJJJJJBJIJBAJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIIBJAAABJJJJIJJJJJJJJJJJJBBBJJJJJJIJJABAJJAJJJJJIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBAIAAABBIIBJJBJJJJJJJJJBJIJAJAJJBJAAIJJIJIBBJIJJABBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAJBAJIBJIIJJJJJJJJJJJJIBJBBJIBJJJBIJAAJAJJJJBBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBIIJJAIIIBJIBBJJJJJJJJJJJJJBJBIBJIIJJBJAJJBJJJJJIIAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBAJABAIJABIJJJJJJJJJJBJBJJIJJJJBJIJIJIIBIJABIJBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBJBJIJIJJJJJJJIJJJJJJJJJJBIAJBIJIJBJIJJIJJJBBIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBJAIIBBJJJJJJJJJBAJJBJJBJIBIAJJJBJJJJBBJAJJJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBABABIBIJJJJBJJIIJJJBIJJIJJJJAJJJJJJJIIJJBJIJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIJJJIAAJBJJJIJJJJJJJJBBIJJIJJIJJJIJIJIJJAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBBJBAAIBJJJJJJBBJIJJIJJIJBJJAIIJJJIJIAJABABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAJBJJJBIJJJJBJBIBJBAAIJJIJJIJBJJJBJBJAAAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBJIBIBIJJJJJAJAJJJJIIIIJBBJJAJJBIAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJJAAJJJJJJJJBIIJJJBBJBBBBIJJIBAIAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJBIBIJJJBJIJIJJJBBJIIJBJIJBABIBBABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAJAIJBIJIIJBJJJJBBIJIIJJJJJJBJBIJJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBJJJJBJJBBBBJJABIJIIJIJAIIIBBBIJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIAJIJJIBBJJBJIJJJBJIIJJJIIBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAIJAJIBJBBBIJIJIIBJJJJJBAJBAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJIJJJAJJBIIJJIIIIIJJJBAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAIIJJJJJJJJIJABJIJIBJJIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIIIJJIJJAJBJAJJBAJJIJBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAJJBIJJJJJIJBBBIIJIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJJJIAJBIAIAJBIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJBAJJIIJBJJBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJIIIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA") }; -g.reset().clearRect(Bangle.appRect); // clear whole background (w/o widgets) +g.reset().clearRect(0,0,175,175); // clear whole background (w/o widgets) // Actually draw the watch face let draw = function() { var x = g.getWidth() / 2; From 056b273523c74b3bc120880832a1a9a5485d7f9a Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 21:38:58 +0200 Subject: [PATCH 096/118] Delete icon.png --- apps/3dclock/icon.png | Bin 745 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 apps/3dclock/icon.png diff --git a/apps/3dclock/icon.png b/apps/3dclock/icon.png deleted file mode 100644 index 1926d5f5999f29c74b9921975667f88c7016e31f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745 zcmV3Q2H#ZNz4z1xpDD+-FR49uwcbaIGh!x9?&?9Je3+={veG!!C zg-}kzx<0KGkQ$bn>~9p!&O{|yg@u`4XK zY;!w6&=Bj&GwGOoF^`DLBMXmyy_V5DpSA=CtbrYk7cI^0U|nD-C`j#E=*WtK-7RZS zTr|;k)Y}K;kKhEl)lfZVmIE_>6li0?8pwyOjg#v0=s#()Ej$?*8j-+`$ zaEMCZfGxcxM+|M|jS^O9MBvUL zJ0nvJZ}Mb8U}9Le1cbBOgyQb9f$+_C!@%UGEZq0*aVK$&dsj^e8~CYit!d-9cqbcDc52yep_NVP|)F8Q+EKbIyl> bf5pHLQnD2(0U96=00000NkvXXu0mjfa9>a# From 97bf76533a4d5ec32275ee6eb9696a2fd56a0806 Mon Sep 17 00:00:00 2001 From: ainegil <132382788+ainegil@users.noreply.github.com> Date: Wed, 3 May 2023 21:40:52 +0200 Subject: [PATCH 097/118] Delete polymath.app.js --- apps/polymath.app.js | 238 ------------------------------------------- 1 file changed, 238 deletions(-) delete mode 100644 apps/polymath.app.js diff --git a/apps/polymath.app.js b/apps/polymath.app.js deleted file mode 100644 index 153a72036..000000000 --- a/apps/polymath.app.js +++ /dev/null @@ -1,238 +0,0 @@ -// Clock with date day and moon based on the "Anton Clock" - -//require("Font4x4").add(Graphics); - - -Graphics.prototype.setFontmoonphases = function() { - // Actual height 23 (23 - 1) - return this.setFontCustom( - atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEACAH/nAH/nAAACAAAAAAAAAAAAAHwAAH4AAAAAAAAAAGAAAH4AAHgAAAAAAAAAAAQgAAQhAAQ/AA/4AH8gAGQgAAQjAAR/AA/4AH4gAEQgAAQgAAA4APg8APwMAY4EAQ4EB///AQcEAQcMAcP8AeP4AADwAAAAAB4AAD8AAHOAAECBAECDAGGGAH8cAD44AABgAAHAAAMAAAY+ABz/ADDDAGCBAECBAADnAAB+AAA8AAAAAAAAAAB8AAD+ADz/AH+DAGeBAEOBAEPBAELhAH5zADw6ABg+AAEeAAF/AAHnAAGDAAEBAAABAAAAAAAAAH4AAHwAAAAAAAAAAP/gA//4B8B8DgAOGAACEAADAAAAAAAAEAADGAACDgAOB8B8A//4AP/gAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAP8AAAAAAAAAAAAAAH4AAf+AB//gD//wD//wH//4H//8P//8P//8P//8P//8P//8P//8P//8H//4H//4D//wB//gA//AAf+AADwAAAABAAAxAAA+AAA8AAAAAAAAAAAAAABgAABgAABgAABgAABgAABgAAAAAAAAAAACAAAHAAAHAAACAAAAAAAHAAA8AAHwAA+AADwAAHAAAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAP8AAAAAAAAAAAAAABABADABACABAH//AH//AAABAAABAAABAAAAAAAAAAAAAHAHAHAHAEAPAEAbAEAzAGBjAHPDAD+DAD8DAAADAAAAAAAAADAPAHADAGABAEEBAEEBAEGBAGODAH7HAD7+AAh8AAAAAAA4AAB4AAHYAAMYAAYYABwYADgYAH//AH//AAAYAAAYAAAAAAAAAAAGAH8PAGEDAGEBAGEBAGEBAGGDAGGDAGD+AAD8AAAQAAAAAA/4AB/+ADyPAGGDAEEBAEEBAEGBAGHHAHD+AAB8AAAAAAAAAAAAAHgAAGABAGAHAGAeAGB4AGHgAGeAAH4AAHgAAEAAAAAAABx8AD7+AH/HAGOBAEEBAEEBAGODAH/HAD7+ABx8AAAAAAAAAB8GAD+HAHvBAGDBAEBBAEBBAGBDAHjOAD/8AB/4AAAAAAAAAAICAAcHAAcHAAICAAAAAAAAAAAAAAABAHAzAHA+AHA8AAAAAAAAAAAAAAGAAAHAAANAAANgAAZgAAYwAAwwAAwYAAgYABgIABAMAAAAAAAAAAAAABAMABgIAAgYAAwQAAQwAAYgAAJgAANgAAPAAAHAAAGAAAAAAAAAAAAAAHAAAGAAAEAHAED3AECHAGGAAH8AAD8AAAwAAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACQAACYAAGIAAEMAAMGAAYDAAwBgBgA8PAAH4AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA5nAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8F//oCf+QBjxgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+L//0N//sEf+ICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+b//2J//kMP8MEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+X//6Y//GIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+X//6QBgCYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+f//+f//+QAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f//+f//+fAA+YAAGQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8P//8f4H+eAAeYAAGQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH//4P//8PgB8eAAeYAAGQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD//wH8P4PAA8OAAcYAAGYAAGQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB//gD4HwHAA4OAAcMAAMYAAGYAAGQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAH4AA//AB4HgDgBwGAAYMAAMIAAEYAAGQAACQAACQAACQAACQAACQAACYAAGIAAEMAAMEAAICAAQBgBgA4HAAP8AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACQAACYAAGIAAEMAAMGAAYDgBwB4HgA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACYAAGYAAGMAAMOAAcHAA4D4HwB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACQAACYAAGcAAOOAAcPAA8H8P4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACYAAGYAAGeAAePgB8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACQAACYAAGeAAef4H+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACYAAGfgB+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQAACQAACQAACf//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEYAAGQH4CX//6f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMAAMIAAEY//GX//6f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEAAIMf+MJ//kf//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABgBgCAAQEf+IN//sL//0f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAP8AA4HABjxgCf+QF//oP//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAH4AAAAAAAAAAH4AA8PAB//gD//wH//4P//8P//8f//+f//+f//+f//+f//+f//+f//+f//+P//8P//8H//4D//wB//gA//AAP8AAAAAAAAAAAAAD///D///CAADCAADCAABAAAAAHAAAB4AAAfAAAD4AAAeAAADAAAAAAAACAABCAADCAADD///D///AAAAAAAA'), - 32, - atob("GAgKDAwUEwQICBgXBggGBxgMDAwMDAwMDAwHBw4ADgsYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgIBwg="), - 24|65536 - ); -} - -Graphics.prototype.setFontInknutAntiqua24 = function() { - // Actual height 24 (23 - 0) - return this.setFontCustom( - atob('AAAAAB4AAD4AAD4AAD4AABwAAAAAAAAAAAAAAAAPAAD/AA/4AP+AD/gAf4AAeAAAAAAAAAAAAYAAB/AAD/gAH/wAP/4APH4AcB4AcA4AcA4AcA4AeA4AfBwAf/wAP/gAH/AAD+AAA4AAAAAAAAAAIAYAcAYAcA4Af/4Af/4Af/4Af/4AcAYAYAYAAAQAAAAACAIAGAYAOA4AeB4AcD4AcH4AcP4Aef4Af94Af54APx4APh4ADH4AAH8AAAAAAAAACAAAGAAYOAAYeAA4cCAwcHBwefBwf/ngP//gPz/AHj+ACB8AAAwAAAAAAAwAABwAAHwAAPwAAfwAA8wABwwADgwAPBwAP//wf//wf//wf//gAAwAAAwAAAwAAAAAAHAGD/AOH/AMHvgMHngcHnwYHn44Hj/wHj/wfh/gfw/AAAeAAAAAAAAAAAAAAB8AAP/AAf/gA//wB//4D8D4HwB4HsA4POA4ePA4cPh44H/w4H/gAD/AAB+AAAYAAAAAAAAA/gAAfgAAeAAYeAB4eAHweAfAeB8AeHwAePAAe8AAf4AAfgAAeAAAYAAAAAAAAAAAAAeADg/APx/gP7/gf//w/+Dw4+Bw4fBw4fBw8fhw//zwf3/gfj/gPD/AAB+AAAYAAAAAAAAAA+AAD/AAH/gYH/wYP/w4OD5wcA5wcAzgeAPgfAfAP/+AP/8AH/4AD/wAB/AAAAAAAAAAAAAAHB4APj4APj4APj4APBwAAAAAAAAA'), - 46, - atob("CAkTDBANEQ8SEBISCA=="), - 24|65536 - ); -}; - -Graphics.prototype.setFontInknutAntiqua66 = function() { - // Actual height 66 (65 - 0) - return this.setFontCustom( - atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAAH/AAAAAAAAAP/AAAAAAAAAf/gAAAAAAAAf/gAAAAAAAA//wAAAAAAAA//wAAAAAAAA//wAAAAAAAB//gAAAAAAAA//gAAAAAAAA//gAAAAAAAA//AAAAAAAAAf+AAAAAAAAAP8AAAAAAAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAfAAAAAAAAAH/AAAAAAAAB//AAAAAAAAf//AAAAAAAH///AAAAAAB///8AAAAAA////AAAAAAP///wAAAAAD///8AAAAAA////AAAAAAP///wAAAAAD///8AAAAAA////AAAAAAf///gAAAAAH///4AAAAAAf//+AAAAAAAf//gAAAAAAAf/4AAAAAAAAf+AAAAAAAAAfgAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAAAAAAAf/gAAAAAAAB//8AAAAAAAH//+AAAAAAAP///gAAAAAAf///wAAAAAA////4AAAAAB////8AAAAAD////8AAAAAH////+AAAAAP/////AAAAAP/////AAAAAf/////AAAAAf+AH//gAAAA/wAA//gAAAA/gAAf/gAAAB/AAAH/gAAAB/AAAD/wAAAD/AAAB/wAAAD+AAAB/wAAAD+AAAB/wAAAD+AAAA/wAAAD+AAAA/wAAAD/AAAA/gAAAH/AAAA/gAAAH/AAAA/gAAAD/gAAA/gAAAD/gAAB/AAAAD/wAAB/AAAAD/8AAD/AAAAD//AAH+AAAAD//4A/+AAAAB/////8AAAAB/////8AAAAA/////4AAAAA/////wAAAAAf////gAAAAAP////gAAAAAP////AAAAAAH///+AAAAAAB///4AAAAAAA///wAAAAAAAP//AAAAAAAAD/8AAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAA4AAAAHgAAAD4AAAAPgAAAD8AAAAfgAAAD8AAAAfgAAAD8AAAA/gAAAD8AAAB/gAAAD+AAAD/gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD//////gAAAD/gAAA/gAAAD/AAAAfgAAAD+AAAAfgAAAD+AAAAfgAAAD8AAAAPgAAAD4AAAAPgAAADwAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAHgAAAAD8AAAPgAAAAD8AAAfgAAAAH4AAA/gAAAAP4AAB/gAAAAfwAAD/gAAAA/wAAD/gAAAA/wAAH/gAAAB/gAAP/gAAAD/gAAf/gAAAD/gAA//gAAAD/AAB//gAAAD/AAB//gAAAD/AAD//gAAAD/AAH//gAAAD/AAP//gAAAD/gAf//gAAAD/gB///gAAAD/wD///gAAAD/8P/f/gAAAD///+f/gAAAD///+f/gAAAD///8f/gAAAB///4f/gAAAB///wf/gAAAB///gf/gAAAA///Af/gAAAA//+Af/gAAAAf/8Af/gAAAAf/4Af/gAAAAP/wAf/gAAAAH/AA//gAAAAB8AH//gAAAAAAAP//wAAAAAAAP//wAAAAAAAP//wAAAAAAAP//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAADwAAAAAAcAAH4AAAAAAfAAH4AAAAAA/AAPwAAAAAA/AAfwAAAAAA/AA/gAAAAAB+AB/gAAAAAB+AB/AAAAAAD+AD/AAAAAAD8AH/AAAAAAH8AH+AAAAAAH4AH+AAHgAAP4AH+AAPwAAP4AH/AAfwAAfwAH/AA/4AAfwAH/gD/4AA/gAH/4P/8AB/gAH////+AD/AAD/////AH/AAD/////wf+AAD///////+AAB///v///8AAB///P///8AAA//+H///4AAA//8H///wAAAf/4D///wAAAP/wB///gAAAP/gB///AAAAD+AA//+AAAAA4AAf/8AAAAAAAAP/wAAAAAAAAH/AAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAB8AAAAAAAAAH8AAAAAAAAAP8AAAAAAAAAf8AAAAAAAAA/8AAAAAAAAB/8AAAAAAAAH/8AAAAAAAAP/8AAAAAAAAf/8AAAAAAAA//8AAAAAAAB/38AAAAAAAH/n8AAAAAAAP/H8AAAAAAAf+H8AAAAAAA/4H8AAAAAAD/wH8AAAAAAH/gH8AAAAAAP/AH8AAAAAAf8AH8AAAAAA/4AH8AAAAAD/wAH8AAAAAH/gAH8AAAAAP/AAH8AAAAAf8AAH8AAAAA////////8AA////////4AB////////4AB////////4AB////////wAD////////wAD////////wAD////////gAH////////gAH////////AAH////////AAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH8AAAAAAAAAH4AAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAH4AAAAPgAAAH4AAAH/gAAAH4AAD//wAAAPwAB///wAAAPwAf///wAAAPwA////4AAAfgA////4AAAfgA//D/8AAAfgA//D/8AAA/AA//D/8AAA/AA//B/+AAB/AA//B/+AAB+AA//A//AAD+AA//A//AAD+AA//A//gAH8AA//Af/wAP8AA//Af/wAP4AA//AP/4A/4AA//AP/+D/wAA//AH////wAA//AH////gAA//AD////gAA//AD////AAA//AB///+AAB//AB///+AAP//AA///8AAf//gAf//4AAf//gAP//wAAf//gAH//gAAf//gAD//AAAAAAAAB/8AAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8AAAAAAAB///gAAAAAAP///4AAAAAA////+AAAAAB/////AAAAAH/////gAAAAP/////wAAAAf/////4AAAA//////8AAAB//////8AAAD//////+AAAH//////+AAAP//4B///AAAf/+AAH//AAA//wAAB//AAB//AAAAf/AAD/+AAAAP/gAD/4AAAAH/gAH/wMAAAD/gAP/geAAAD/gAP+B+AAAB/gAf8B/AAAB/gA/4B/gAAB/AA/wB/gAAB/AB/wB/wAAB/AB/gB/4AAD/AD/AB/+AAD+AH+AA//gAP+AH8AA//8A/8AP8AA/////8AP4AAf////4AfwAAf////4AfgAAP////wAfgAAH////gAPAAAH////AACAAAD///+AAAAAAB///8AAAAAAA///4AAAAAAAf//wAAAAAAAH//AAAAAAAAB/8AAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//4AAAAAAAH//4AAAAAAAD//8AAAAAAAD//8AAAAAAAD//wAAAAAAAD//AAAAAACAD/8AAAAAAPAD/8AAAAAA/AD/8AAAAAD/gD/8AAAAAP/gD/8AAAAA//AD/8AAAAD/8AD/8AAAAP/wAD/8AAAAf/AAD/8AAAB/8AAD/8AAAH/wAAD/8AAAf/AAAD/8AAB/+AAAD/8AAH/4AAAD/8AAf/gAAAD/8AB/+AAAAD/8AD/4AAAAD/8AP/gAAAAD/8A/+AAAAAD/8D/4AAAAAD/8P/gAAAAAD/8//AAAAAAD///8AAAAAAD///wAAAAAAD///AAAAAAAD//8AAAAAAAD//wAAAAAAAD//AAAAAAAAD/8AAAAAAAAD/wAAAAAAAAD/gAAAAAAAAD+AAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAD/wAAAAAAAAH/8AAAAAAAAf/+AAAAf4AA///AAAB/+AB///gAAD//AB///wAAH//gD///4AAf//wH///4AAf//4P///8AA///8P///8AB///+f///+AD///+////+AD/////gD/+AH////+AA//AP////8AAP/AP+D//4AAH/AP4A//wAAD/AfwAf/4AAD/AfwAP/8AAB/gfgAH/8AAB/gfgAD/+AAA/g/gAD/+AAA/g/wAB//AAA/gfwAA//gAA/gf4AA//wAA/gf8AD//wAB/Af/AP//4AB/Af/////8AD/Af//////AH+AP///z//gf+AP///j////8AH///B////4AH//+B////4AD//8A////wAB//4Af///gAA//wAf///AAAf/AAP///AAAP8AAH//+AAAAgAAD//4AAAAAAAB//wAAAAAAAAf/gAAAAAAAAP+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf+AAAAAAAAD//gAAAAAAAH//4AAAAAAAf//8AAAAAAA///+AAAAAAB////AAAAAAD////gAAMAAH////gAAfAAP////wAA/gAP////4AA/AAf////4AB/AAf////8AD+AA/+A//8AD+AA/wAH/8AH8AB/gAB/+AP8AB/AAAf+Af4AD/AAAP+Af4AD+AAAH+A/wAD+AAAH+B/wAD+AAAD+D/gAD+AAAB+H/AAD/AAAB4P/AAH/AAAAwf+AAD/gAAAA/8AAD/wAAAD/8AAD/4AAAH/4AAD/8AAAf/wAAD//AAD//gAAD//8Af//gAAB///////AAAB//////+AAAA//////8AAAA//////4AAAAf/////wAAAAP/////gAAAAH/////AAAAAD////8AAAAAB////4AAAAAAf///gAAAAAAH//+AAAAAAAB//wAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAB8AAAAAD/AAH+AAAAAP/gAP/AAAAAP/gAf/gAAAAf/wAf/gAAAA//wA//wAAAA//wA//wAAAA//wA//wAAAA//wA//gAAAA//gA//gAAAA//gA//gAAAA//AA//AAAAAf/AAf+AAAAAP+AAP8AAAAAH4AAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='), - 46, - atob("FhczISslMCkyKzMyFg=="), - 66|65536 - ); -}; - -Graphics.prototype.setFontInknutAntiqua88 = function() { - // Actual height 88 (87 - 0) - return this.setFontCustom( - atob('AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAA/4AAAAAAAAAAAAH/wAAAAAAAAAAAA//gAAAAAAAAAAAH//AAAAAAAAAAAA//+AAAAAAAAAAAD//4AAAAAAAAAAAf//gAAAAAAAAAAB//+AAAAAAAAAAAH//4AAAAAAAAAAAf//gAAAAAAAAAAB//+AAAAAAAAAAAH//4AAAAAAAAAAAf//AAAAAAAAAAAB//8AAAAAAAAAAAH//gAAAAAAAAAAAP/8AAAAAAAAAAAAf/gAAAAAAAAAAAA/8AAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAP8AAAAAAAAAAAAP/wAAAAAAAAAAAf//AAAAAAAAAAAf//8AAAAAAAAAAf///wAAAAAAAAAf////AAAAAAAAAf////wAAAAAAAAf////wAAAAAAAAf////gAAAAAAAAf////gAAAAAAAAf////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAA/////gAAAAAAAAP////gAAAAAAAAA////AAAAAAAAAAD///AAAAAAAAAAAH//AAAAAAAAAAAAf/AAAAAAAAAAAAB/AAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAB//wAAAAAAAAAAAf//wAAAAAAAAAAH///wAAAAAAAAAB////wAAAAAAAAAP////gAAAAAAAAB/////gAAAAAAAAP/////AAAAAAAAB/////+AAAAAAAAP/////4AAAAAAAB//////wAAAAAAAP//////gAAAAAAB///////AAAAAAAP//////8AAAAAAA///////4AAAAAAH///////gAAAAAAf//////+AAAAAAD//AB///8AAAAAAf/gAAf//wAAAAAB/8AAAf//AAAAAAH/gAAAf/+AAAAAA/8AAAAf/4AAAAAD/gAAAA//gAAAAAf+AAAAD/+AAAAAB/wAAAAH/4AAAAAH/AAAAAP/gAAAAAf8AAAAA/+AAAAAD/wAAAAD/4AAAAAP/AAAAAH/gAAAAA/8AAAAAf+AAAAAD/wAAAAB/4AAAAAP/AAAAAH/gAAAAA/+AAAAAf+AAAAAD/4AAAAB/wAAAAAP/gAAAAH/AAAAAA//AAAAAf8AAAAAD/+AAAAD/gAAAAAP/8AAAAP+AAAAAA//4AAAB/4AAAAAD//wAAAP/AAAAAAH//wAAB/8AAAAAAf//4AAf/gAAAAAB////A//+AAAAAAD///////wAAAAAAP///////AAAAAAAf//////4AAAAAAB///////AAAAAAAD//////8AAAAAAAP//////gAAAAAAAf/////8AAAAAAAA//////gAAAAAAAB/////8AAAAAAAAD/////gAAAAAAAAH////8AAAAAAAAAP////gAAAAAAAAAP///4AAAAAAAAAAf//+AAAAAAAAAAAf//gAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAHgAAAAAB8AAAAAB+AAAAAAPwAAAAAP8AAAAAB/AAAAAA/wAAAAAP8AAAAAD/AAAAAA/wAAAAAP8AAAAAH/AAAAAA/4AAAAA/8AAAAAD/gAAAAH/wAAAAAP+AAAAA//AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA////////8AAAAAD////////wAAAAAP////////AAAAAA//AAAAAf8AAAAAD/4AAAAA/wAAAAAP/gAAAAD/AAAAAA/8AAAAAP8AAAAAD/gAAAAA/wAAAAAP8AAAAAB/AAAAAA/gAAAAAH8AAAAAD+AAAAAAfwAAAAAHwAAAAAA8AAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAB8AAAAAAAPgAAAAPwAAAAAAB/AAAAB/AAAAAAAP8AAAAP8AAAAAAB/wAAAB/wAAAAAAP+AAAAH/AAAAAAA/4AAAA/8AAAAAAH/AAAAH/wAAAAAA/8AAAA//AAAAAAH/gAAAH/8AAAAAA/+AAAAf/wAAAAAD/4AAAD//AAAAAAf/AAAAf/8AAAAAB/8AAAD//wAAAAAP/wAAAf//AAAAAA/+AAAD//8AAAAAD/4AAAf//wAAAAAP/gAAB///AAAAAA/+AAAP//8AAAAAD/4AAB///wAAAAAP/gAAP///AAAAAA//AAB///8AAAAAD/8AAP///wAAAAAP/wAB////AAAAAA//gAf///8AAAAAD//AD/9//wAAAAAP/+A//n//AAAAAA/////8f/8AAAAAD/////h//wAAAAAH////+H//AAAAAAf////wf/8AAAAAB////+B//wAAAAAH////wH//AAAAAAP///+Af/8AAAAAA////wB//wAAAAAD///+AH//AAAAAAH///wAf/8AAAAAAf//+AB//wAAAAAA///wAH//AAAAAAB//+AAf/8AAAAAAD//wAB//wAAAAAAP/8AAH//AAAAAAAP/gAB//8AAAAAAAf4AA///wAAAAAAAAAAP///gAAAAAAAAAB///+AAAAAAAAAAH///4AAAAAAAAAAP///gAAAAAAAAAA////AAAAAAAAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAB4AAAAAAAADgAAAP4AAAAAAAAP4AAA/gAAAAAAAA/gAAH+AAAAAAAAH+AAA/wAAAAAAAAf4AAH/AAAAAAAAB/AAA/4AAAAAAAAP8AAD/gAAAAAAAA/wAAf8AAAAAAAAH+AAD/wAAAAAAAAf4AAf+AAAAAAAAB/gAD/4AAAAAAAAP8AAP/gAAAAAAAA/wAA/+AAAAAAAAH/AAD/wAAAAAAAAf4AAP/AAAHwAAAD/gAB/8AAA/gAAAP8AAD/4AAH+AAAB/wAAP/gAA/8AAAH/AAA/+AAH/4AAA/4AAD/8AA//gAAH/gAAP/4AP//AAAf8AAA//8H//+AAD/wAAD//////8AAf+AAAP//////4AD/4AAAf//////wA//AAAB///////9//8AAAH//////////gAAAP///8/////+AAAA////j/////wAAAD///+H/////AAAAH///wf////4AAAAf//+A/////AAAAA///wD////4AAAAB//+AH////gAAAAD//wAf///8AAAAAH/+AA////gAAAAAP/gAB///8AAAAAAf8AAD///gAAAAAAOAAAP//8AAAAAAAAAAAf//AAAAAAAAAAAAf/wAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAAAAAAAAAAAAH8AAAAAAAAAAAAA/wAAAAAAAAAAAAH/AAAAAAAAAAAAA/8AAAAAAAAAAAAH/wAAAAAAAAAAAB//AAAAAAAAAAAAP/8AAAAAAAAAAAB//wAAAAAAAAAAAP//AAAAAAAAAAAB//8AAAAAAAAAAAf//wAAAAAAAAAAD///AAAAAAAAAAAf//8AAAAAAAAAAD/9/wAAAAAAAAAA//n/AAAAAAAAAAH/8f8AAAAAAAAAA//h/wAAAAAAAAAH/4H/AAAAAAAAAA//Af8AAAAAAAAAP/4B/wAAAAAAAAB//AH/AAAAAAAAAP/4Af8AAAAAAAAB/+AB/wAAAAAAAAP/wAH/AAAAAAAAD/+AAf8AAAAAAAAf/wAB/wAAAAAAAD/8AAH/AAAAAAAAf/gAAf8AAAAAAAD/8AAB/wAAAAAAA//gAAH/AAAAAAAH/8AAAf8AAAAAAA//AAAB/wAAAAAAH//////////+AAAf//////////4AAB///////////gAAP//////////8AAA///////////wAAD///////////AAAf//////////4AAB///////////gAAP//////////+AAA///////////wAAD///////////AAAf//////////8AAB///////////gAAH//////////+AAA///////////wAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB/wAAAAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB/wAAAAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB/wAAAAAAAAAAAAH/AAAAAAAAAAAAAf8AAAAAAAAAAAAB+AAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAfwAAAAAAfAAAAAB/gAAAAA/+AAAAAH8AAAAB//4AAAAA/wAAAD///gAAAAD/AAAH////AAAAAP4AAP////8AAAAB/gAD/////wAAAAH+AAP/////gAAAA/wAA/////+AAAAD/AAD//g//4AAAAP8AAP/+D//wAAAB/gAA//4H//AAAAH+AAD//gf/+AAAA/4AAP/+B//4AAAD/AAA//4D//wAAAP8AAD//gP//AAAB/wAAP/+A//+AAAH+AAA//4B//4AAA/4AAD//gH//wAAH/AAAP/+AP//AAAf8AAA//4A//+AAD/wAAD//gD//8AAf+AAAP/+AH//4AD/4AAA//4Af//wAf/AAAD//gA///gH/8AAAP/+AD//////gAAA//4AH/////+AAAD//gAf/////wAAAP/+AA//////AAAA//4AD/////4AAAD//gAH/////AAAAP/+AAf////8AAAD//4AA/////gAAA///gAB////8AAAf///AAH////gAAD///8AAP///+AAAP///wAAf///wAAAf///AAA///+AAAB///+AAB///gAAAH///4AAD//8AAAAAAAAAAAD//AAAAAAAAAAAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//8AAAAAAAAAAB///+AAAAAAAAAAf///+AAAAAAAAAP////+AAAAAAAAD/////+AAAAAAAAf/////8AAAAAAAH//////8AAAAAAA///////4AAAAAAP///////wAAAAAB////////gAAAAAP///////+AAAAAB////////8AAAAAP////////4AAAAB/////////gAAAAP/////////AAAAB/////////8AAAAP///8Af///wAAAB///4AAD///gAAAP//8AAAB//+AAAB///AAAAB//4AAAH//wAAAAD//wAAA//8AAAAAD//AAAH//gAAAAAH/8AAA//4AAAAAAP/wAAD//AGAAAAA//AAAf/4B4AAAAB/8AAD/+APwAAAAH/wAAP/wD/AAAAAf/AAB/+AP+AAAAA/8AAP/wA/8AAAAD/gAA/+AD/wAAAAP+AAH/4AP/gAAAA/4AAf/AA//AAAAH/gAD/4AD/+AAAAf8AAf/AAP/8AAAB/wAB/4AAf/8AAAP/AAP/AAB//8AAB/4AA/8AAH//8AAf/gAH/gAAP///gf/8AAf8AAA///////wAD/gAAD//////+AAP+AAAH//////4AB/wAAAf//////AAH+AAAA//////4AA/4AAAB//////AAA/AAAAH/////8AAA4AAAAP/////gAAAAAAAAf////8AAAAAAAAA/////gAAAAAAAAB////8AAAAAAAAAD////AAAAAAAAAAH///4AAAAAAAAAAH//+AAAAAAAAAAAH//gAAAAAAAAAAAH/4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB///8AAAAAAAAAAH///4AAAAAAAAAAP///gAAAAAAAAAA///+AAAAAAAAAAD///8AAAAAAAAAAP///gAAAAAAAAAA///wAAAAAAAAAAB//8AAAAAAAAGAAH//AAAAAAAAB8AAf/8AAAAAAAAPwAB//wAAAAAAAD/gAH//AAAAAAAA/+AAf/8AAAAAAAP/8AB//wAAAAAAD//gAH//AAAAAAA//4AAf/8AAAAAAP/+AAB//wAAAAAD//gAAH//AAAAAAf/8AAAf/8AAAAAH//AAAB//wAAAAB//wAAAH//AAAAAf/8AAAAf/8AAAAH//AAAAB//wAAAB//wAAAAH//AAAAf/8AAAAAf/8AAAD//AAAAAB//wAAA//4AAAAAH//AAAP/+AAAAAAf/8AAD//gAAAAAB//wAA//4AAAAAAH//AAP/+AAAAAAAf/8AD//gAAAAAAB//wA//4AAAAAAAH//AH/+AAAAAAAAf/8B//wAAAAAAAB//wf/8AAAAAAAAH//H//AAAAAAAAAf/9//wAAAAAAAAB////8AAAAAAAAAH////AAAAAAAAAAf///wAAAAAAAAAB///8AAAAAAAAAAH///gAAAAAAAAAAf//4AAAAAAAAAAB//+AAAAAAAAAAAH//gAAAAAAAAAAAf/4AAAAAAAAAAAB/+AAAAAAAAAAAAH/gAAAAAAAAAAAAf4AAAAAAAAAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAA//gAAAAAAAAAAAH//gAAAAAAAAAAA///AAAAAACAAAAP//+AAAAAD/wAAB///8AAAAA//wAAP///4AAAAH//wAA////wAAAA///gAH////gAAAH///AA/////AAAA///+AH////8AAAH///8A/////4AAA////4D/////gAAH////wf/////AAA/////D/////8AAH////+f/////4AAf////9//v///gAD///////AA//+AAf//////wAA//8AB//////+AAA//wAP//////wAAB//AA/+A///+AAAD/8AH/wA///wAAAH/4Af8AB///AAAAP/gB/wAB//+AAAA/+AP+AAD//4AAAB/4A/4AAP//wAAAH/gD/gAAf//AAAAP+AP+AAA//+AAAA/4A/4AAB//8AAAD/gD/gAAH//wAAAP+AP+AAAP//gAAA/4A/8AAAf//AAAD/gD/wAAB//8AAAP+AP/wAAf//4AAA/4A//gAH///wAAH/AD//gB////gAAf8AH////////AAD/wAf///////+AAf+AB/////3//+AH/4AD////+P//+B//AAP////w//////8AA////+B//////gAB////wH/////+AAD///+AP/////wAAP///wAf////+AAAf//+AB/////wAAA///wAD/////AAAB//+AAH////4AAAD//gAAP////AAAAH/8AAA////4AAAAD/AAAB////AAAAAAAAAAD///4AAAAAAAAAAD//+AAAAAAAAAAAH//wAAAAAAAAAAAP/8AAAAAAAAAAAAP/AAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAA//+AAAAAAAAAAAP//8AAAAAAAAAAD///8AAAAAAAAAAf///4AAAAAAAAAH////wAAAAAAAAA/////gAAAAAAAAH/////AAAAAAAAA/////+AAAAYAAAH/////8AAAD4AAA//////wAAAfwAAD//////gAAB/gAAf//////AAAP+AAD//////8AAB/wAAP//////4AAH/AAB///////gAA/4AAH/+Af//+AAH/gAA//AAH//8AAf8AAD/wAAD//wAD/wAAf+AAAD//AAf+AAB/wAAAH/+AD/4AAH/AAAAP/4Af/AAA/8AAAAf/gB/4AAD/gAAAA/+AP/gAAP+AAAAB/4B/8AAA/4AAAAD/gP/wAAH/gAAAAP+B/+AAAf/AAAAAf4P/4AAB/8AAAAB+B//AAAH/wAAAADgP/4AAAf/gAAAAMB//gAAB/+AAAAAAP/8AAAH/8AAAAAD//gAAAf/4AAAAAf/+AAAB//wAAAAH//wAAAD//wAAAB//+AAAAP//wAAAf//wAAAA///4AAP//+AAAAB////Af///4AAAAH/////////AAAAAf////////4AAAAA/////////AAAAAD////////4AAAAAH////////AAAAAAP///////4AAAAAA////////AAAAAAB///////4AAAAAAD//////+AAAAAAAH//////wAAAAAAAP/////+AAAAAAAAP/////gAAAAAAAAf////4AAAAAAAAAf///+AAAAAAAAAAP///AAAAAAAAAAAH//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAD/AAAAAAAA/8AAAf+AAAAAAAH/4AAD/8AAAAAAA//wAAf/4AAAAAAH//gAD//wAAAAAA//+AAf//AAAAAAD//4AB//8AAAAAAf//gAP//wAAAAAB//+AA///AAAAAAH//4AD//8AAAAAAf//gAP//wAAAAAB//+AA///AAAAAAH//4AD//8AAAAAAf//AAP//gAAAAAB//8AA//+AAAAAAD//gAB//wAAAAAAH/8AAD/+AAAAAAAf/gAAP/wAAAAAAAf8AAAP+AAAAAAAAfAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'), - 46, - atob("HR9FLTkxQDdDOkNDHQ=="), - 88|65536 - ); -}; - -{ // must be inside our own scope here so that when we are unloaded everything disappears - // we also define functions using 'let fn = function() {..}' for the same reason. function decls are global - -let drawStatusTimeout; - -let drawStatus = function(){ // battery and 24h line clock, remove if ou want to display wigets instead - -g.clearRect(0,22,175,22); -g.setColor(g.theme.fg); // draw battery -g.drawLine(0,2,E.getBattery()*1.75,2); - // draw line for 24 h clock - var x = g.getWidth() / 2; - var y = g.getHeight() / 2; - var ix; - var shade; - var w ; - var date = new Date(); - for ( ix = 0; ix < 176; ix=ix+4){ - shade = 2*Math.PI * ((date.getHours()-6)/24); - shade = Math.sin(2*Math.PI* ix/176 + shade ); - shade = shade * 0.5 + 0.5; - shade = 1- shade ; -g.setColor(shade,shade,shade); -g.drawLine(ix,18, ix+3,18); - } -g.setColor(g.theme.fg); // draw dots at noon / midnight -ix = x-(((date.getHours())%12)/24)*176; -g.drawLine(ix,16,ix+2,18); -g.drawLine(ix+2,18,ix, 20); -g.drawLine(ix,20,ix-2,18); -g.drawLine(ix-2,18,ix,16); - -ix = ix + 176/2; -g.drawLine(ix,16,ix+2,18); -g.drawLine(ix+2,18,ix, 20); -g.drawLine(ix,20,ix-2,18); -g.drawLine(ix-2,18,ix,16); - -// queue next drawStatus - if (drawStatusTimeout) clearTimeout(drawStatusTimeout); - drawStatusTimeout = setTimeout(function() { - drawStatusTimeout = undefined; - drawStatus(); - //draw(); - //drawWeek(); - }, 30*60000 - (Date.now() % 30*60000)); - -};//------------------<< status - - - -let drawWeekTimeout; - -let drawWeek = function() { - // date and day of week, moonphase, next quater moon - var date = new Date(); - var weekday = Math.abs(date.getDay() -1 % 7); - var dateStr = date.getDate() ; - - g.reset().clearRect(0,175-36,175,175-36); - g.setColor(g.theme.fg); - g.fillRect(0, 175-15, 175, 175); - var pos; - var d; - for ( d=0; d< 7; d++){ - pos = d * 25; - if (d < 5 ){ - g.setColor(g.theme.bg); - g.fillRect(pos, 175-15, pos+22, 175); - }else{ g.setColor(g.blendColor(g.theme.bg,g.theme.fg,0.25)); - g.fillRect(pos, 175-15, pos+22, 175); - } - - } -g.setColor(g.theme.fg); -g.setFontAlign(0, 0).setFont("InknutAntiqua24", 1).drawString(dateStr, weekday*(176/7)+11, g.getHeight() - 15); - -var mphaseq=-1; // moonphase 0-3 -var qday = -1; // day in week quater moon -var moonssince; // full moons since May 5th 2023 -var lundaymo; // lunation day monday -var tms = date.getTime();// -var weekdayms = weekday * 86400000 ;//seconds since monday -var startd = tms - weekdayms; // monday -var perc;// percent of cycle -tms = startd - 1683308000000 ;//may5th 1734h 2023; -moonssince = tms /2551442823.5;//div ms in a lunar month -perc = moonssince - Math.floor(moonssince); -lundaymo = perc * 29.530588235; -mphaseq =Math.round((lundaymo)/ 7.38264705875); - -qday = Math.round( 7.38264705875 - (lundaymo- (mphaseq* 7.38264705875))) % 7; // next quater phase day -mphaseq = (mphaseq+1) % 4; // set to next quater phase - - -g.setColor(0,0,0); // black moon bg -var yoffset = (qday == weekday )*24; -g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(48), qday*(176/7)+11, g.getHeight() - 22- yoffset); -g.setColor(1,1,1); // moonshape - //g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(65+mphaseq*26/4), qday*(176/7)+11, g.getHeight() - 26- yoffset); // next moon or : -g.setFontAlign(0, 0).setFont("moonphases", 1).drawString(String.fromCharCode(65+perc*26), qday*(176/7)+11, g.getHeight() - 22- yoffset); - -// queue next drawWeek - if (drawWeekTimeout) clearTimeout(drawWeekTimeout); - drawWeekTimeout = setTimeout(function() { - drawWeekTimeout = undefined; - draw(); - drawWeek(); - }, 180*60000 - (Date.now() % 180*60000)); - -};//-------------------<< week - -let drawTimeout; - -// draw clock -let draw = function() { - var x = g.getWidth() / 2; - var y = g.getHeight() / 2; - var xoffset =0; - var minute; - var hour; - var hour_old; - var date; - var digit1; - var digit2; - - g.reset().clearRect(0,25,175,175-36); // clear area - - date = new Date(); - hour_old = hour; - hour = date.getHours(); // hour - if (hour_old != hour){ // only draw if hour has changed - if (hour > 12) { - hour = hour % 12; - } - digit2 = hour % 10; - digit1 = hour - digit2; - if (digit1 > 0 ){ // draw hours, one or two digits - xoffset = -10; - g.setColor(g.theme.fg); - g.setFontAlign(1, 0).setFont("InknutAntiqua66",1).drawString(hour, x+xoffset, y); - } - else { - xoffset = -15; - g.setColor(g.theme.fg); - g.setFontAlign(1, 0).setFont("InknutAntiqua88",1).drawString(hour, x+xoffset, y); - } - } - minute = date.getMinutes(); // minutes - digit2 = minute % 10; - digit1 = Math.floor(minute / 10); - minute = digit1.toString() + digit2.toString(); - - g.setColor(g.blendColor(g.theme.bg,g.theme.fg,0.5)); - g.setFontAlign(-1, 0).setFont("InknutAntiqua66",1).drawString(minute, x+xoffset , y); - -// queue next draw - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = setTimeout(function() { - drawTimeout = undefined; - draw(); - }, 60000 - (Date.now() % 60000)); - -};//-----------------------<< clock - - -// Show launcher when middle button pressed -Bangle.setUI({ - mode : "clock", - remove : function() { - // Called to unload all of the clock app - if (drawStatusTimeout) clearTimeout(drawStatusTimeout); - drawStatusTimeout = undefined; - if (drawTimeout) clearTimeout(drawTimeout); - drawTimeout = undefined; - if (drawWeekTimeout) clearTimeout(drawWeekTimeout); - drawWeekTimeout = undefined; - delete Graphics.prototype.setFontmoonphases; - delete Graphics.prototype.setFontInknutAntiqua24; - delete Graphics.prototype.setFontInknutAntiqua66d; - delete Graphics.prototype.setFontInknutAntiqua88; - - - }}); -//Load widgets -//Bangle.loadWidgets(); -g.reset().clearRect(0,0,g.getWidth(),g.getHeight()); -draw(); -drawWeek(); -drawStatus(); // remove if ou want wigets to draw instead -// -//setTimeout(Bangle.drawWidgets,0); -} From f9710e75e1b87202f8b58fc029e2f62591a097b1 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Wed, 3 May 2023 08:08:58 +0100 Subject: [PATCH 098/118] popcon: update README & metadata --- apps/popconlaunch/README.md | 7 +------ apps/popconlaunch/metadata.json | 2 +- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/apps/popconlaunch/README.md b/apps/popconlaunch/README.md index 7804ebd73..416151751 100644 --- a/apps/popconlaunch/README.md +++ b/apps/popconlaunch/README.md @@ -1,9 +1,4 @@ Popcon ====== -Display apps sorted by regular use. - -Settings --------- - -- `Show Clocks` - Whether clocks are shown in the app list. Default `Yes`. +Display apps sorted by regular use. No config - install the app and all your launchers will sort apps by most popular, based off launch counts within the last month, and then sort them by the most recently launched app. diff --git a/apps/popconlaunch/metadata.json b/apps/popconlaunch/metadata.json index 5963cc44c..4088f8dc0 100644 --- a/apps/popconlaunch/metadata.json +++ b/apps/popconlaunch/metadata.json @@ -3,7 +3,7 @@ "name": "Popcon Launcher", "shortName": "Popcon", "version": "0.01", - "description": "Launcher displaying your favourite (popular) apps first", + "description": "Launcher modification - your launchers will display your favourite (popular) apps first", "readme": "README.md", "icon": "app.png", "type": "bootloader", From d888b80ea125b75939759ff2865aa66db2c90865 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Wed, 3 May 2023 22:03:07 +0100 Subject: [PATCH 099/118] Ratchet launch: bump version --- apps/powermanager/ChangeLog | 3 ++- apps/powermanager/metadata.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/powermanager/ChangeLog b/apps/powermanager/ChangeLog index ee31195b2..d1c288f97 100644 --- a/apps/powermanager/ChangeLog +++ b/apps/powermanager/ChangeLog @@ -8,4 +8,5 @@ Add widget for live monitoring of power use 0.07: Convert Yes/No On/Off in settings to checkboxes 0.08: Fix the wrapping of intervals/timeouts with parameters - Fix the widget drawing if widgets are hidden and Bangle.setLCDBrightness is called \ No newline at end of file + Fix the widget drawing if widgets are hidden and Bangle.setLCDBrightness is called +0.09: Cache the app-launch info \ No newline at end of file diff --git a/apps/powermanager/metadata.json b/apps/powermanager/metadata.json index 5487c2278..92c471fd6 100644 --- a/apps/powermanager/metadata.json +++ b/apps/powermanager/metadata.json @@ -2,7 +2,7 @@ "id": "powermanager", "name": "Power Manager", "shortName": "Power Manager", - "version": "0.08", + "version": "0.09", "description": "Allow configuration of warnings and thresholds for battery charging and display.", "icon": "app.png", "type": "bootloader", From 09c3445ac3d5608db4d2d8b39e0c5cf2aac5f370 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Wed, 3 May 2023 22:14:41 +0100 Subject: [PATCH 100/118] popcon: make orderChanged local --- apps/popconlaunch/boot.ts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/apps/popconlaunch/boot.ts b/apps/popconlaunch/boot.ts index 8b2e9fe18..ef522b9f1 100644 --- a/apps/popconlaunch/boot.ts +++ b/apps/popconlaunch/boot.ts @@ -10,7 +10,6 @@ let cache: undefined | { last: Timestamp, } }; -let orderchanged = false; const ensureCache = (): NonNull => { if(!cache){ @@ -21,7 +20,7 @@ const ensureCache = (): NonNull => { return cache; }; -const saveCache = () => { +const saveCache = (orderChanged: boolean) => { require("Storage").writeJSON("popcon.cache.json", cache); if(orderchanged){ // wipe launcher cache @@ -58,10 +57,12 @@ const sortCache = () => { }); let i = 0; + let orderChanged = false; for(const ent of ents){ - if(ent.sortorder !== i) orderchanged = true; + if(ent.sortorder !== i) orderChanged = true; ent.sortorder = i++; } + return orderChanged; }; require("Storage").readJSON = ((fname, skipExceptions) => { @@ -92,8 +93,8 @@ global.load = (src: string) => { }; ent.pop++; ent.last = Date.now(); - sortCache(); - saveCache(); + const orderChanged = sortCache(); + saveCache(orderChanged); } return oldLoad(src); From eb0af982c5f7006eba1f190f40d311f520c3aef1 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Wed, 3 May 2023 22:14:54 +0100 Subject: [PATCH 101/118] popcon: use own .info file to bust launcher cache --- apps/popconlaunch/boot.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/popconlaunch/boot.ts b/apps/popconlaunch/boot.ts index ef522b9f1..10ea38b61 100644 --- a/apps/popconlaunch/boot.ts +++ b/apps/popconlaunch/boot.ts @@ -22,11 +22,11 @@ const ensureCache = (): NonNull => { const saveCache = (orderChanged: boolean) => { require("Storage").writeJSON("popcon.cache.json", cache); - if(orderchanged){ - // wipe launcher cache - require("Storage") - .list(/launch.*cache/) - .forEach(f => require("Storage").erase(f)) + if(orderChanged){ + // ensure launchers reload their caches: + const info: AppInfo & { cacheBuster?: boolean } = oldRead("popcon.info", true); + info.cacheBuster = !info.cacheBuster; + require("Storage").writeJSON("popcon.info", info); } }; From 988945f0dcd6845807875606c8f1565987e9d3b1 Mon Sep 17 00:00:00 2001 From: Rob Pilling Date: Wed, 3 May 2023 22:16:29 +0100 Subject: [PATCH 102/118] popcon: regenerate JS --- apps/popconlaunch/boot.js | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/apps/popconlaunch/boot.js b/apps/popconlaunch/boot.js index 613cb3474..d7ba2e525 100644 --- a/apps/popconlaunch/boot.js +++ b/apps/popconlaunch/boot.js @@ -1,7 +1,6 @@ var oldRead = require("Storage").readJSON; var monthAgo = Date.now() - 1000 * 86400 * 28; var cache; -var orderchanged = false; var ensureCache = function () { if (!cache) { cache = oldRead("popcon.cache.json", true); @@ -10,12 +9,12 @@ var ensureCache = function () { } return cache; }; -var saveCache = function () { +var saveCache = function (orderChanged) { require("Storage").writeJSON("popcon.cache.json", cache); - if (orderchanged) { - require("Storage") - .list(/launch.*cache/) - .forEach(function (f) { return require("Storage").erase(f); }); + if (orderChanged) { + var info = oldRead("popcon.info", true); + info.cacheBuster = !info.cacheBuster; + require("Storage").writeJSON("popcon.info", info); } }; var sortCache = function () { @@ -40,12 +39,14 @@ var sortCache = function () { return 0; }); var i = 0; + var orderChanged = false; for (var _i = 0, ents_1 = ents; _i < ents_1.length; _i++) { var ent = ents_1[_i]; if (ent.sortorder !== i) - orderchanged = true; + orderChanged = true; ent.sortorder = i++; } + return orderChanged; }; require("Storage").readJSON = (function (fname, skipExceptions) { var _a; @@ -71,8 +72,8 @@ global.load = function (src) { }); ent.pop++; ent.last = Date.now(); - sortCache(); - saveCache(); + var orderChanged = sortCache(); + saveCache(orderChanged); } return oldLoad(src); }; From f1f590a3f5d6d47bf4feb97c4a736f594da8d4a2 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 4 May 2023 12:06:31 +0100 Subject: [PATCH 103/118] Allow installation of a backup without an erase --- backup.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/backup.js b/backup.js index 06d98a366..09f65af99 100644 --- a/backup.js +++ b/backup.js @@ -70,7 +70,7 @@ function bangleUpload() { var zip = new JSZip(); var cmds = ""; zip.loadAsync(data).then(function(zip) { - return showPrompt("Restore from ZIP","Are you sure? This will remove all existing apps"); + return showPrompt("Restore from ZIP","Are you sure? This will overwrite existing apps"); }).then(()=>{ Progress.show({title:`Reading ZIP`}); zip.forEach(function (path, file){ @@ -91,10 +91,15 @@ function bangleUpload() { }); return promise; }) - .then(() => { - Progress.hide({sticky:true}); - Progress.show({title:`Erasing...`}); - return Comms.removeAllApps(); }) + .then(()=>new Promise(resolve => { + showPrompt("Erase Storage","Erase Storage? If restoring a complete backup you should erase storage, but in some cases you may want to upload files from a ZIP while keeping your Bangle's existing data.").then(()=>resolve(true), ()=>resolve(false)); + })) + .then(eraseStorage => { + if (eraseStorage) { + Progress.hide({sticky:true}); + Progress.show({title:`Erasing...`}); + return Comms.removeAllApps(); + }}) .then(() => { Progress.hide({sticky:true}); Progress.show({title:`Restoring...`, sticky:true}); From bf82abd1045785daa4cb93d041c11d9418f20824 Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 4 May 2023 12:07:01 +0100 Subject: [PATCH 104/118] Add button to reset Bangle's settings --- index.html | 14 +++++++++----- loader.js | 11 ++++++++++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/index.html b/index.html index d7ca4169f..0808f31fa 100644 --- a/index.html +++ b/index.html @@ -133,14 +133,18 @@

Using Espruino, Icons from icons8.com

Utilities

-

+

+ -

-

-

+

+ + + + +

Settings

- +