diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog
index 398396c96..6f306f61a 100644
--- a/apps/alarm/ChangeLog
+++ b/apps/alarm/ChangeLog
@@ -41,3 +41,6 @@
0.38: Display date in locale
When switching 'repeat' from 'Workdays', 'Weekends' to 'Custom' preset Custom menu with previous selection
Display alarm label in delete prompt
+0.39: Dated event repeat option
+0.40: Use substring of message when it's longer than fits the designated menu entry.
+0.41: Fix a menu bug affecting alarms with empty messages.
diff --git a/apps/alarm/README.md b/apps/alarm/README.md
index 0298e0836..9da142dab 100644
--- a/apps/alarm/README.md
+++ b/apps/alarm/README.md
@@ -13,6 +13,7 @@ It uses the [`sched` library](https://github.com/espruino/BangleApps/blob/master
- `Repeat` → Select when the alarm will fire. You can select a predefined option (_Once_, _Every Day_, _Workdays_ or _Weekends_ or you can configure the days freely)
- `New Timer` → Configure a new timer (triggered based on amount of time elapsed in hours/minutes/seconds)
- `New Event` → Configure a new event (triggered based on time and date)
+ - `Repeat` → Alarm can be be fired only once or repeated (every X number of _days_, _weeks_, _months_ or _years_)
- `Advanced`
- `Scheduler settings` → Open the [Scheduler](https://github.com/espruino/BangleApps/tree/master/apps/sched) settings page, see its [README](https://github.com/espruino/BangleApps/blob/master/apps/sched/README.md) for details
- `Enable All` → Enable _all_ disabled alarms & timers
diff --git a/apps/alarm/app.js b/apps/alarm/app.js
index e97b61917..f8ed0322e 100644
--- a/apps/alarm/app.js
+++ b/apps/alarm/app.js
@@ -3,9 +3,11 @@ Bangle.drawWidgets();
// 0 = Sunday (default), 1 = Monday
const firstDayOfWeek = (require("Storage").readJSON("setting.json", true) || {}).firstDayOfWeek || 0;
-const WORKDAYS = 62
+const WORKDAYS = 62;
const WEEKEND = firstDayOfWeek ? 192 : 65;
const EVERY_DAY = firstDayOfWeek ? 254 : 127;
+const INTERVALS = ["day", "week", "month", "year"];
+const INTERVAL_LABELS = [/*LANG*/"Day", /*LANG*/"Week", /*LANG*/"Month", /*LANG*/"Year"];
const iconAlarmOn = "\0" + atob("GBiBAAAAAAAAAAYAYA4AcBx+ODn/nAP/wAf/4A/n8A/n8B/n+B/n+B/n+B/n+B/h+B/4+A/+8A//8Af/4AP/wAH/gAB+AAAAAAAAAA==");
const iconAlarmOff = "\0" + (g.theme.dark
@@ -44,8 +46,24 @@ function getLabel(e) {
const dateStr = e.date && require("locale").date(new Date(e.date), 1);
return (e.timer
? require("time_utils").formatDuration(e.timer)
- : (dateStr ? `${dateStr} ${require("time_utils").formatTime(e.t)}` : require("time_utils").formatTime(e.t) + (e.rp ? ` ${decodeDOW(e)}` : ""))
- ) + (e.msg ? " " + e.msg : "");
+ : (dateStr ? `${dateStr}${e.rp?"*":""} ${require("time_utils").formatTime(e.t)}` : require("time_utils").formatTime(e.t) + (e.rp ? ` ${decodeRepeat(e)}` : ""))
+ ) + (e.msg ? ` ${e.msg}` : "");
+}
+
+function trimLabel(label, maxLength) {
+ return (label.length > maxLength
+ ? label.substring(0,maxLength-3) + "..."
+ : label.substring(0,maxLength));
+}
+
+function formatAlarmMessage(msg) {
+ if (msg == null) {
+ return msg;
+ } else if (msg.length > 7) {
+ return msg.substring(0,6)+"...";
+ } else {
+ return msg.substring(0,7);
+ }
}
function showMainMenu() {
@@ -56,7 +74,7 @@ function showMainMenu() {
};
alarms.forEach((e, index) => {
- menu[getLabel(e)] = {
+ menu[trimLabel(getLabel(e),40)] = {
value: e.on ? (e.timer ? iconTimerOn : iconAlarmOn) : (e.timer ? iconTimerOff : iconAlarmOff),
onchange: () => setTimeout(e.timer ? showEditTimerMenu : showEditAlarmMenu, 10, e, index)
};
@@ -137,6 +155,7 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate) {
},
/*LANG*/"Message": {
value: alarm.msg,
+ format: formatAlarmMessage,
onchange: () => {
setTimeout(() => {
keyboard.input({text:alarm.msg}).then(result => {
@@ -152,8 +171,8 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate) {
onchange: v => alarm.on = v
},
/*LANG*/"Repeat": {
- value: decodeDOW(alarm),
- onchange: () => setTimeout(showEditRepeatMenu, 100, alarm.rp, alarm.dow, (repeat, dow) => {
+ value: decodeRepeat(alarm),
+ onchange: () => setTimeout(showEditRepeatMenu, 100, alarm.rp, date || alarm.dow, (repeat, dow) => {
alarm.rp = repeat;
alarm.dow = dow;
prepareAlarmForSave(alarm, alarmIndex, time, date, true);
@@ -178,9 +197,7 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate) {
};
if (!keyboard) delete menu[/*LANG*/"Message"];
- if (alarm.date || withDate) {
- delete menu[/*LANG*/"Repeat"];
- } else {
+ if (!alarm.date) {
delete menu[/*LANG*/"Day"];
delete menu[/*LANG*/"Month"];
delete menu[/*LANG*/"Year"];
@@ -229,49 +246,77 @@ function saveAndReload() {
alarms.filter(e => e.timer === undefined).forEach(a => a.dow = handleFirstDayOfWeek(a.dow));
}
-function decodeDOW(alarm) {
+function decodeRepeat(alarm) {
return alarm.rp
- ? require("date_utils")
- .dows(firstDayOfWeek, 2)
- .map((day, index) => alarm.dow & (1 << (index + firstDayOfWeek)) ? day : "_")
- .join("")
- .toLowerCase()
- : /*LANG*/"Once"
+ ? (alarm.date
+ ? `${alarm.rp.num}*${INTERVAL_LABELS[INTERVALS.indexOf(alarm.rp.interval)]}`
+ : require("date_utils")
+ .dows(firstDayOfWeek, 2)
+ .map((day, index) => alarm.dow & (1 << (index + firstDayOfWeek)) ? day : "_")
+ .join("")
+ .toLowerCase())
+ : /*LANG*/"Once";
}
-function showEditRepeatMenu(repeat, dow, dowChangeCallback) {
+function showEditRepeatMenu(repeat, day, dowChangeCallback) {
var originalRepeat = repeat;
- var originalDow = dow;
- var isCustom = repeat && dow != WORKDAYS && dow != WEEKEND && dow != EVERY_DAY;
+ var dow;
const menu = {
"": { "title": /*LANG*/"Repeat Alarm" },
"< Back": () => dowChangeCallback(repeat, dow),
- /*LANG*/"Once": {
+ /*LANG*/"Only Once": () => dowChangeCallback(false, EVERY_DAY)
// The alarm will fire once. Internally it will be saved
// as "fire every days" BUT the repeat flag is false so
// we avoid messing up with the scheduler.
- value: !repeat,
- onchange: () => dowChangeCallback(false, EVERY_DAY)
- },
- /*LANG*/"Workdays": {
- value: repeat && dow == WORKDAYS,
- onchange: () => dowChangeCallback(true, WORKDAYS)
- },
- /*LANG*/"Weekends": {
- value: repeat && dow == WEEKEND,
- onchange: () => dowChangeCallback(true, WEEKEND)
- },
- /*LANG*/"Every Day": {
- value: repeat && dow == EVERY_DAY,
- onchange: () => dowChangeCallback(true, EVERY_DAY)
- },
- /*LANG*/"Custom": {
- value: isCustom ? decodeDOW({ rp: true, dow: dow }) : false,
- onchange: () => setTimeout(showCustomDaysMenu, 10, dow, dowChangeCallback, originalRepeat, originalDow)
- }
};
+ let restOfMenu;
+ if (typeof day === "number") {
+ dow = day;
+ var originalDow = dow;
+ var isCustom = repeat && dow != WORKDAYS && dow != WEEKEND && dow != EVERY_DAY;
+
+ restOfMenu = {
+ /*LANG*/"Workdays": {
+ value: repeat && dow == WORKDAYS,
+ onchange: () => dowChangeCallback(true, WORKDAYS)
+ },
+ /*LANG*/"Weekends": {
+ value: repeat && dow == WEEKEND,
+ onchange: () => dowChangeCallback(true, WEEKEND)
+ },
+ /*LANG*/"Every Day": {
+ value: repeat && dow == EVERY_DAY,
+ onchange: () => dowChangeCallback(true, EVERY_DAY)
+ },
+ /*LANG*/"Custom": {
+ value: isCustom ? decodeRepeat({ rp: true, dow: dow }) : false,
+ onchange: () => setTimeout(showCustomDaysMenu, 10, dow, dowChangeCallback, originalRepeat, originalDow)
+ }
+ };
+ } else {
+ // var date = day; // eventually: detect day of date and configure a repeat e.g. 3rd Monday of Month
+ dow = EVERY_DAY;
+ repeat = repeat || {interval: "month", num: 1};
+
+ restOfMenu = {
+ /*LANG*/"Every": {
+ value: repeat.num,
+ min: 1,
+ onchange: v => repeat.num = v
+ },
+ /*LANG*/"Interval": {
+ value: INTERVALS.indexOf(repeat.interval),
+ format: v => INTERVAL_LABELS[v],
+ min: 0,
+ max: INTERVALS.length - 1,
+ onchange: v => repeat.interval = INTERVALS[v]
+ }
+ };
+ }
+
+ Object.assign(menu, restOfMenu);
E.showMenu(menu);
}
@@ -282,7 +327,7 @@ function showCustomDaysMenu(dow, dowChangeCallback, originalRepeat, originalDow)
// If the user unchecks all the days then we assume repeat = once
// and we force the dow to every day.
var repeat = dow > 0;
- dowChangeCallback(repeat, repeat ? dow : EVERY_DAY)
+ dowChangeCallback(repeat, repeat ? dow : EVERY_DAY);
}
};
@@ -293,7 +338,7 @@ function showCustomDaysMenu(dow, dowChangeCallback, originalRepeat, originalDow)
};
});
- menu[/*LANG*/"Cancel"] = () => setTimeout(showEditRepeatMenu, 10, originalRepeat, originalDow, dowChangeCallback)
+ menu[/*LANG*/"Cancel"] = () => setTimeout(showEditRepeatMenu, 10, originalRepeat, originalDow, dowChangeCallback);
E.showMenu(menu);
}
@@ -342,6 +387,7 @@ function showEditTimerMenu(selectedTimer, timerIndex) {
},
/*LANG*/"Message": {
value: timer.msg,
+ format: formatAlarmMessage,
onchange: () => {
setTimeout(() => {
keyboard.input({text:timer.msg}).then(result => {
@@ -383,7 +429,7 @@ function showEditTimerMenu(selectedTimer, timerIndex) {
showMainMenu();
} else {
timer.timer = require("time_utils").encodeTime(time);
- setTimeout(showEditTimerMenu, 10, timer, timerIndex)
+ setTimeout(showEditTimerMenu, 10, timer, timerIndex);
}
});
};
@@ -430,9 +476,9 @@ function enableAll(on) {
alarm.on = on;
if (on) {
if (alarm.timer) {
- prepareTimerForSave(alarm, i, require("time_utils").decodeTime(alarm.timer))
+ prepareTimerForSave(alarm, i, require("time_utils").decodeTime(alarm.timer));
} else {
- prepareAlarmForSave(alarm, i, require("time_utils").decodeTime(alarm.t))
+ prepareAlarmForSave(alarm, i, require("time_utils").decodeTime(alarm.t));
}
}
});
diff --git a/apps/alarm/metadata.json b/apps/alarm/metadata.json
index 28d48daab..b986512bc 100644
--- a/apps/alarm/metadata.json
+++ b/apps/alarm/metadata.json
@@ -2,7 +2,7 @@
"id": "alarm",
"name": "Alarms & Timers",
"shortName": "Alarms",
- "version": "0.38",
+ "version": "0.41",
"description": "Set alarms and timers on your Bangle",
"icon": "app.png",
"tags": "tool,alarm",
diff --git a/apps/backswipe/metadata.json b/apps/backswipe/metadata.json
index 0274ec8d7..c7cb2185f 100644
--- a/apps/backswipe/metadata.json
+++ b/apps/backswipe/metadata.json
@@ -6,6 +6,7 @@
"icon": "app.png",
"tags": "back,gesture,swipe",
"supports" : ["BANGLEJS2"],
+ "readme":"README.md",
"type": "bootloader",
"storage": [
{"name":"backswipe.boot.js","url":"boot.js"},
diff --git a/apps/btadv/app.ts b/apps/btadv/app.ts
index 15128e484..c66ba3449 100644
--- a/apps/btadv/app.ts
+++ b/apps/btadv/app.ts
@@ -1,7 +1,7 @@
// ts helpers:
const __assign = Object.assign;
-const Layout = require("Layout") as Layout_.Layout;
+const Layout = require("Layout");
Bangle.loadWidgets();
Bangle.drawWidgets();
diff --git a/apps/btadv/metadata.json b/apps/btadv/metadata.json
index 29ee65286..7028b2a95 100644
--- a/apps/btadv/metadata.json
+++ b/apps/btadv/metadata.json
@@ -7,6 +7,7 @@
"icon": "icon.png",
"tags": "health,tool,sensors,bluetooth",
"supports": ["BANGLEJS2"],
+ "readme":"README.md",
"storage": [
{"name":"btadv.app.js","url":"app.js"},
{"name":"btadv.img","url":"icon.js","evaluate":true}
diff --git a/apps/bwclklite/ChangeLog b/apps/bwclklite/ChangeLog
new file mode 100644
index 000000000..c728997da
--- /dev/null
+++ b/apps/bwclklite/ChangeLog
@@ -0,0 +1,36 @@
+0.01: New App.
+0.02: Use build in function for steps and other improvements.
+0.03: Adapt colors based on the theme of the user.
+0.04: Steps can be hidden now such that the time is even larger.
+0.05: Included icons for information.
+0.06: Design and usability improvements.
+0.07: Improved positioning.
+0.08: Select the color of widgets correctly. Additional settings to hide colon.
+0.09: Larger font size if colon is hidden to improve readability further.
+0.10: HomeAssistant integration if HomeAssistant is installed.
+0.11: Performance improvements.
+0.12: Implements a 2D menu.
+0.13: Clicks < 24px are for widgets, if fullscreen mode is disabled.
+0.14: Adds humidity to weather data.
+0.15: Added option for a dynamic mode to show widgets only if unlocked.
+0.16: You can now show your agenda if your calendar is synced with Gadgetbridge.
+0.17: Fix - Step count was no more shown in the menu.
+0.18: Set timer for an agenda entry by simply clicking in the middle of the screen. Only one timer can be set.
+0.19: Fix - Compatibility with "Digital clock widget"
+0.20: Better handling of async data such as getPressure.
+0.21: On the default menu the week of year can be shown.
+0.22: Use the new clkinfo module for the menu.
+0.23: Feedback of apps after run is now optional and decided by the corresponding clkinfo.
+0.24: Update clock_info to avoid a redraw
+0.25: Use Bangle.setUI({remove:...}) to allow loading the launcher without a full reset on fw2v16.
+ ClockInfo Fix: Use .get instead of .show as .show is not implemented for weather etc.
+0.26: Use clkinfo.addInteractive instead of a custom implementation
+0.27: Clean out some leftovers in the remove function after switching to
+clkinfo.addInteractive that would cause ReferenceError.
+0.28: Option to show (1) time only and (2) week of year.
+0.29: use setItem of clockInfoMenu to change the active item
+0.30: Use widget_utils
+0.31: Use clock_info module as an app
+0.32: Diverge from BW Clock. Change out the custom font for a standard bitmap one to speed up loading times.
+ Remove invertion of theme as this doesn'twork very well with fastloading.
+ Do an quick inital fillRect on theclock info area.
diff --git a/apps/bwclklite/README.md b/apps/bwclklite/README.md
new file mode 100644
index 000000000..1ad320894
--- /dev/null
+++ b/apps/bwclklite/README.md
@@ -0,0 +1,30 @@
+# BW Clock Lite
+This is a fork of a very minimalistic clock.
+
+
+
+## Features
+The BW clock implements features that are exposed by other apps through the `clkinfo` module.
+For example, if you install the Simple Timer app, this menu item will be shown if you first
+touch the bottom of the screen and then swipe left/right to the Simple Timer menu. To select
+sub-items simply swipe up/down. To run an action (e.g. add 5 min), simply select the clkinfo (border) and touch on the item again. See also the screenshot below:
+
+
+
+Note: Check out the settings to change different themes.
+
+## Settings
+- Screen: Normal (widgets shown), Dynamic (widgets shown if unlocked) or Full (widgets are hidden).
+- Enable/disable lock icon in the settings. Useful if fullscreen mode is on.
+- The colon (e.g. 7:35 = 735) can be hidden in the settings for an even larger time font to improve readability further.
+- Your bangle uses the sys color settings so you can change the color too.
+
+## Thanks to
+- Thanks to Gordon Williams not only for the great BangleJs, but specifically also for the implementation of `clkinfo` which simplified the BWClock a lot and moved complexety to the apps where it should be located.
+- Icons created by Flaticon
+
+## Creator
+[David Peer](https://github.com/peerdavid)
+
+## Contributors
+thyttan
diff --git a/apps/bwclklite/app-icon.js b/apps/bwclklite/app-icon.js
new file mode 100644
index 000000000..1df0fa6a5
--- /dev/null
+++ b/apps/bwclklite/app-icon.js
@@ -0,0 +1 @@
+require("heatshrink").decompress(atob("mEwgIcah0EgEB/H8iFsAoOY4kMBYMDhmGgXkAoUGiWkAoQQBoAFCjgnCAoM4hgFDuEI+wpC8EKyg1C/0eAoMAsEAiQvBAAeAApQAB/4Ao+P4v/wn0P8Pgn/wnkH4Pjv/j/nn9PH//n/nj/IFF4F88AXBAoM88EcAoPHj//jlDAoOf/+Y+YFHjnnjAjBEIIjD+BHDO9IALA=="))
diff --git a/apps/bwclklite/app.js b/apps/bwclklite/app.js
new file mode 100644
index 000000000..1008eae9c
--- /dev/null
+++ b/apps/bwclklite/app.js
@@ -0,0 +1,331 @@
+{ // must be inside our own scope here so that when we are unloaded everything disappears
+
+/************************************************
+ * Includes
+ */
+const locale = require('locale');
+const storage = require('Storage');
+const clock_info = require("clock_info");
+const widget_utils = require("widget_utils");
+
+/************************************************
+ * Globals
+ */
+const SETTINGS_FILE = "bwclklite.setting.json";
+const W = g.getWidth();
+const H = g.getHeight();
+
+/************************************************
+ * Settings
+ */
+let settings = {
+ screen: "Normal",
+ showLock: true,
+ hideColon: false,
+ menuPosX: 0,
+ menuPosY: 0,
+};
+
+let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings;
+for (const key in saved_settings) {
+ settings[key] = saved_settings[key];
+}
+
+let isFullscreen = function() {
+ let s = settings.screen.toLowerCase();
+ if(s == "dynamic"){
+ return Bangle.isLocked();
+ } else {
+ return s == "full";
+ }
+};
+
+let getLineY = function(){
+ return H/5*2 + (isFullscreen() ? 0 : 8);
+};
+
+/************************************************
+ * Assets
+ */
+let imgLock = function() {
+ return {
+ width : 16, height : 16, bpp : 1,
+ transparent : 0,
+ buffer : E.toArrayBuffer(atob("A8AH4A5wDDAYGBgYP/w//D/8Pnw+fD58Pnw//D/8P/w="))
+ };
+};
+
+
+/************************************************
+ * Clock Info
+ */
+let clockInfoItems = clock_info.load();
+
+// Add some custom clock-infos
+let weekOfYear = function() {
+ let date = new Date();
+ date.setHours(0, 0, 0, 0);
+ // Thursday in current week decides the year.
+ date.setDate(date.getDate() + 3 - (date.getDay() + 6) % 7);
+ // January 4 is always in week 1.
+ let week1 = new Date(date.getFullYear(), 0, 4);
+ // Adjust to Thursday in week 1 and count number of weeks from date to week1.
+ return 1 + Math.round(((date.getTime() - week1.getTime()) / 86400000
+ - 3 + (week1.getDay() + 6) % 7) / 7);
+};
+
+clockInfoItems[0].items.unshift({ name : "weekofyear",
+ get : function() { return { text : "Week " + weekOfYear(),
+ img : null};},
+ show : function() {},
+ hide : function() {},
+});
+
+// Empty for large time
+clockInfoItems[0].items.unshift({ name : "nop",
+ get : function() { return { text : null,
+ img : null};},
+ show : function() {},
+ hide : function() {},
+});
+
+
+
+let clockInfoMenu = clock_info.addInteractive(clockInfoItems, {
+ app: "bwclklite",
+ x : 0,
+ y: 135,
+ w: W,
+ h: H-135,
+ draw : (itm, info, options) => {
+ let hideClkInfo = info.text == null;
+
+ g.setColor(g.theme.fg);
+ g.fillRect(options.x, options.y, options.x+options.w, options.y+options.h);
+
+ g.setFontAlign(0,0);
+ g.setColor(g.theme.bg);
+
+ if (options.focus){
+ let y = hideClkInfo ? options.y+20 : options.y+2;
+ let h = hideClkInfo ? options.h-20 : options.h-2;
+ g.drawRect(options.x, y, options.x+options.w-2, y+h-1); // show if focused
+ g.drawRect(options.x+1, y+1, options.x+options.w-3, y+h-2); // show if focused
+ }
+
+ // In case we hide the clkinfo, we show the time again as the time should
+ // be drawn larger.
+ if(hideClkInfo){
+ drawTime();
+ return;
+ }
+
+ // Set text and font
+ let image = info.img;
+ let text = String(info.text);
+ if(text.split('\n').length > 1){
+ g.setFont("6x8"); //g.setMiniFont();
+ } else {
+ g.setFont("6x8:3"); //g.setSmallFont();
+ }
+
+ // Compute sizes
+ let strWidth = g.stringWidth(text);
+ let imgWidth = image == null ? 0 : 24;
+ let midx = options.x+options.w/2;
+
+ // Draw
+ if (image) {
+ let scale = imgWidth / image.width;
+ g.drawImage(image, midx-parseInt(imgWidth*1.3/2)-parseInt(strWidth/2), options.y+6, {scale: scale});
+ }
+ g.drawString(text, midx+parseInt(imgWidth*1.3/2), options.y+20);
+
+ // In case we are in focus and the focus box changes (fullscreen yes/no)
+ // we draw the time again. Otherwise it could happen that a while line is
+ // not cleared correctly.
+ if(options.focus) drawTime();
+ }
+});
+
+
+/************************************************
+ * Draw
+ */
+let draw = function() {
+ // Queue draw again
+ queueDraw();
+
+ // Draw clock
+ drawDate();
+ drawTime();
+ drawLock();
+ drawWidgets();
+};
+
+
+let drawDate = function() {
+ // Draw background
+ let y = getLineY();
+ g.reset().clearRect(0,0,W,y);
+
+ // Draw date
+ y = parseInt(y/2)+4;
+ y += isFullscreen() ? 0 : 8;
+ let date = new Date();
+ let dateStr = date.getDate();
+ dateStr = ("0" + dateStr).substr(-2);
+ g.setFont("6x8:4"); //g.setMediumFont(); // Needed to compute the width correctly
+ let dateW = g.stringWidth(dateStr);
+
+ g.setFont("6x8:3"); //g.setSmallFont();
+ let dayStr = locale.dow(date, true);
+ let monthStr = locale.month(date, 1);
+ let dayW = Math.max(g.stringWidth(dayStr), g.stringWidth(monthStr));
+ let fullDateW = dateW + 10 + dayW;
+
+ g.setFontAlign(-1,0);
+ g.drawString(dayStr, W/2 - fullDateW/2 + 10 + dateW, y-12);
+ g.drawString(monthStr, W/2 - fullDateW/2 + 10 + dateW, y+11);
+
+ g.setFont("6x8:4"); //g.setMediumFont();
+ g.setColor(g.theme.fg);
+ g.drawString(dateStr, W/2 - fullDateW / 2, y+2);
+};
+
+
+let drawTime = function() {
+ let hideClkInfo = clockInfoMenu.menuA == 0 && clockInfoMenu.menuB == 0;
+
+ // Draw background
+ let y1 = getLineY();
+ let y = y1;
+ let date = new Date();
+
+ let hours = String(date.getHours());
+ let minutes = date.getMinutes();
+ minutes = minutes < 10 ? String("0") + minutes : minutes;
+ let colon = settings.hideColon ? "" : ":";
+ let timeStr = hours + colon + minutes;
+
+ // Set y coordinates correctly
+ y += parseInt((H - y)/2) + 5;
+
+ if (hideClkInfo){
+ g.setFont("6x8:5"); //g.setLargeFont();
+ } else {
+ y -= 15;
+ g.setFont("6x8:4"); //g.setMediumFont();
+ }
+
+ // Clear region and draw time
+ g.setColor(g.theme.fg);
+ g.fillRect(0,y1,W,y+20 + (hideClkInfo ? 1 : 0) + (isFullscreen() ? 3 : 0));
+
+ g.setColor(g.theme.bg);
+ g.setFontAlign(0,0);
+ g.drawString(timeStr, W/2, y);
+};
+
+
+let drawLock = function() {
+ if(settings.showLock && Bangle.isLocked()){
+ g.setColor(g.theme.fg);
+ g.drawImage(imgLock(), W-16, 2);
+ }
+};
+
+
+let drawWidgets = function() {
+ if(isFullscreen()){
+ widget_utils.hide();
+ } else {
+ Bangle.drawWidgets();
+ }
+};
+
+
+/************************************************
+ * Listener
+ */
+// timeout used to update every minute
+let drawTimeout;
+
+// schedule a draw for the next minute
+let queueDraw = function() {
+ if (drawTimeout) clearTimeout(drawTimeout);
+ drawTimeout = setTimeout(function() {
+ drawTimeout = undefined;
+ draw();
+ }, 60000 - (Date.now() % 60000));
+};
+
+
+// Stop updates when LCD is off, restart when on
+let lcdListenerBw = function(on) {
+ if (on) {
+ draw(); // draw immediately, queue redraw
+ } else { // stop draw timer
+ if (drawTimeout) clearTimeout(drawTimeout);
+ drawTimeout = undefined;
+ }
+};
+Bangle.on('lcdPower', lcdListenerBw);
+
+let lockListenerBw = function(isLocked) {
+ if (drawTimeout) clearTimeout(drawTimeout);
+ drawTimeout = undefined;
+
+ if(!isLocked && settings.screen.toLowerCase() == "dynamic"){
+ // If we have to show the widgets again, we load it from our
+ // cache and not through Bangle.loadWidgets as its much faster!
+ widget_utils.show();
+ }
+
+ draw();
+};
+Bangle.on('lock', lockListenerBw);
+
+let charging = function(charging){
+ // Jump to battery
+ clockInfoMenu.setItem(0, 2);
+ drawTime();
+};
+Bangle.on('charging', charging);
+
+let kill = function(){
+ clockInfoMenu.remove();
+ delete clockInfoMenu;
+};
+E.on("kill", kill);
+
+/************************************************
+ * Startup Clock
+ */
+
+// Show launcher when middle button pressed
+Bangle.setUI({
+ mode : "clock",
+ remove : function() {
+ // Called to unload all of the clock app
+ Bangle.removeListener('lcdPower', lcdListenerBw);
+ Bangle.removeListener('lock', lockListenerBw);
+ Bangle.removeListener('charging', charging);
+ if (drawTimeout) clearTimeout(drawTimeout);
+ drawTimeout = undefined;
+ // save settings
+ kill();
+ E.removeListener("kill", kill);
+ Bangle.removeListener('charging', charging);
+ widget_utils.show();
+ }
+});
+
+// Load widgets and draw clock the first time
+Bangle.loadWidgets();
+
+// Draw first time
+g.setColor(g.theme.fg).fillRect(0,135,W,H); // Otherwise this rect will wait for clock_info before updating
+draw();
+
+} // End of app scope
diff --git a/apps/bwclklite/app.png b/apps/bwclklite/app.png
new file mode 100644
index 000000000..5073f0ed0
Binary files /dev/null and b/apps/bwclklite/app.png differ
diff --git a/apps/bwclklite/metadata.json b/apps/bwclklite/metadata.json
new file mode 100644
index 000000000..bab852623
--- /dev/null
+++ b/apps/bwclklite/metadata.json
@@ -0,0 +1,43 @@
+{
+ "id": "bwclklite",
+ "name": "BW Clock Lite",
+ "version": "0.32",
+ "description": "A very minimalistic clock. This version of BW Clock is quicker at the cost of the custom font.",
+ "readme": "README.md",
+ "icon": "app.png",
+ "screenshots": [
+ {
+ "url": "screenshot.png"
+ },
+ {
+ "url": "screenshot_2.png"
+ },
+ {
+ "url": "screenshot_3.png"
+ }
+ ],
+ "type": "clock",
+ "tags": "clock,clkinfo",
+ "supports": [
+ "BANGLEJS2"
+ ],
+ "dependencies": {
+ "clock_info": "module"
+ },
+ "allow_emulator": true,
+ "storage": [
+ {
+ "name": "bwclklite.app.js",
+ "url": "app.js"
+ },
+ {
+ "name": "bwclklite.img",
+ "url": "app-icon.js",
+ "evaluate": true
+ },
+ {
+ "name": "bwclklite.settings.js",
+ "url": "settings.js"
+ }
+ ]
+}
diff --git a/apps/bwclklite/screenshot.png b/apps/bwclklite/screenshot.png
new file mode 100644
index 000000000..28983c9c4
Binary files /dev/null and b/apps/bwclklite/screenshot.png differ
diff --git a/apps/bwclklite/screenshot_2.png b/apps/bwclklite/screenshot_2.png
new file mode 100644
index 000000000..8d2f1717f
Binary files /dev/null and b/apps/bwclklite/screenshot_2.png differ
diff --git a/apps/bwclklite/screenshot_3.png b/apps/bwclklite/screenshot_3.png
new file mode 100644
index 000000000..573675d28
Binary files /dev/null and b/apps/bwclklite/screenshot_3.png differ
diff --git a/apps/bwclklite/settings.js b/apps/bwclklite/settings.js
new file mode 100644
index 000000000..2d3916a3d
--- /dev/null
+++ b/apps/bwclklite/settings.js
@@ -0,0 +1,50 @@
+(function(back) {
+ const SETTINGS_FILE = "bwclklite.setting.json";
+
+ // initialize with default settings...
+ const storage = require('Storage')
+ let settings = {
+ screen: "Normal",
+ showLock: true,
+ hideColon: false,
+ };
+ let saved_settings = storage.readJSON(SETTINGS_FILE, 1) || settings;
+ for (const key in saved_settings) {
+ settings[key] = saved_settings[key]
+ }
+
+ function save() {
+ storage.write(SETTINGS_FILE, settings)
+ }
+
+ var screenOptions = ["Normal", "Dynamic", "Full"];
+ E.showMenu({
+ '': { 'title': 'BW Clock' },
+ '< Back': back,
+ 'Screen': {
+ value: 0 | screenOptions.indexOf(settings.screen),
+ min: 0, max: 2,
+ format: v => screenOptions[v],
+ onchange: v => {
+ settings.screen = screenOptions[v];
+ save();
+ },
+ },
+ 'Show Lock': {
+ value: settings.showLock,
+ format: () => (settings.showLock ? 'Yes' : 'No'),
+ onchange: () => {
+ settings.showLock = !settings.showLock;
+ save();
+ },
+ },
+ 'Hide Colon': {
+ value: settings.hideColon,
+ format: () => (settings.hideColon ? 'Yes' : 'No'),
+ onchange: () => {
+ settings.hideColon = !settings.hideColon;
+ save();
+ },
+ }
+ });
+ })
diff --git a/apps/chance/README.md b/apps/chance/README.md
new file mode 100644
index 000000000..3f8e15ed5
--- /dev/null
+++ b/apps/chance/README.md
@@ -0,0 +1,11 @@
+# Chance
+
+
+
+* Toss a coin just touch the screen
+* If you click in the dice button change to roll mode
+
+
+
+* Roll the dice just touch the screen
+* If you click in the coin button change to toss mode
diff --git a/apps/chance/chance-coin.png b/apps/chance/chance-coin.png
new file mode 100644
index 000000000..dd1a581eb
Binary files /dev/null and b/apps/chance/chance-coin.png differ
diff --git a/apps/chance/chance-dice.png b/apps/chance/chance-dice.png
new file mode 100644
index 000000000..45d12992f
Binary files /dev/null and b/apps/chance/chance-dice.png differ
diff --git a/apps/chance/chance.app.js b/apps/chance/chance.app.js
new file mode 100644
index 000000000..d6a0d1a40
--- /dev/null
+++ b/apps/chance/chance.app.js
@@ -0,0 +1,328 @@
+/*
+Chance
+by Michael Sillas
+*/
+
+
+var volinit = true;
+var aleatorio;
+var chance=false;
+var chanceforma='moneda';
+var ang = 0;
+var puntosale = 1;
+
+function inipinta(){
+g.clear();
+
+
+//color de fondo de default
+g.setBgColor('#2c04ac');
+
+
+//Pinta rec de fondo
+g.setColor('#2c04ac').fillRect(0, 0, g.getHeight(), g.getWidth());
+}
+
+
+Bangle.on('touch', function(zone,e) {
+ var cordenadas= Object.values(e);
+if(chanceforma=='moneda'){
+
+ if(chance==false){
+
+
+
+ if(cordenadas[0] > 85 && cordenadas[1] > 134)
+ {
+
+ chanceforma='dado';
+ chanceproc();
+ }
+
+ else
+ {
+
+ drawvolado();
+ }
+ }
+ }
+ else if(chanceforma=='dado'){
+ if(chance==false){
+ if(cordenadas[0] < 88 && cordenadas[1] > 134)
+ {
+
+ volinit=true;
+ chanceforma='moneda';
+ chanceproc();
+ }
+ else
+ {
+ drawavdado();
+ }
+
+ }
+ }
+ });
+
+
+function getImage(x){
+
+if (x==1) {
+ return require("heatshrink").decompress(atob("qFQwkBiIA/AH4A/AH4A/AGcAAAQllFMQmHFDwmJFDkQE5cBE0ooaExonYJxyhYDpIxGKCocGBZQnVNZgoFJzJCIE7wONE7AOYDBq4KE7CRDax4nUQzgn/E/7VTfxYn/OwgniEwaeIGgInlLLJ2NE7AmEDhANFPaYYLEowpTIBYmKE6AVFOwgmLE54VLBYwzCGIR1UJxLvHiB1YBYgJBfRJ1WJwYiCE6Z1LBgg6EE6DfHLZInVExgNDEIYnROpieHE6QmMTw4nROponYOowPME6YmOE65OFCRQncCBzvSJx4nWJyA5EE6zYRE6omMPA4nNJyI6HE8DaFE45sGOyLbHPgwnaKAoAHYy4oPE7YoLE5DGPFJiyKE6rvHE6I/LE6YAOE84dHDQKEKE6S6JE7zXTE87kFE+omTPBZHDBwROUAH4A/AH4Ar"));
+ }
+
+ else if(x==2) {
+ return require("heatshrink").decompress(atob("qFQwkBiIA/AD0QNAZlhSQ5MiFETkLJ0oobExrMZExpQZJ5xQ/KFInPKDB4/KD4nYKBwnYKBwnbKhgnYiBCCE8akOE/7yPE0wnaExjvaE/52cgIn/E84mNE7DFOYzAmOdzJQOY0wnXEZhaCYyxLNE7CbOBwROjgKeXdR52mE7AoNEYKeXFBsBYzDINGgR2WE5YiCE8iEEE84mXO5oNBE8QjDE8hQCE7KSBE8qgNE88QE80RAYYnjADLIIgIJCE8gEDKTh7oE5JQdE5RQcE+R4cE/4AOiAn/OzTwaJxgnaExgn/Ox7IZE84mOE65OPE/4mPE/x2QE/wmQgIcKA"));
+
+ }
+
+ else if(x==3) {
+ return require("heatshrink").decompress(atob("t1uwkEogA/AH4A/AH4A/AC1AgAAZGSwxaHTJnbABUEGug3PGs6nNNlA3NCQ8BiIAZGyJsEgMimc//4AbmciiDdNBocCGboAFkBuMBgcvGsQABN4ajLgQ1k//xUpQ2DNkpuEGw41CgI1m//wUpIJCh42nUoY2Jj42n/42MbU7cLGwU/G1EgG2swGxY1oGxNAG1nwGxUBG342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G342/G3420gA2pmA2Hog25n42okA21iA2Ll42oFgQ1FGwcPGs/zGxkCG0/xGxNABQQ2nmA2Nj7apgg2KUsyjDGw7cDgEvGsfziCjJGwsBn42iGoY2JUoYABkY0fmQ1EUZBuFOAURADg0ENhRuHAEo2KNww1vN1LZKG9Q1OU8w0QHMRpRAH4A/AH4A/AH4ADA=="));
+ }
+}
+
+
+function rotar(){
+ ang += 0.157;
+ g.clearRect(0, 0, g.getHeight(), 139);
+ g.drawImage(getImage(3),87,77, {rotate : ang});
+
+}
+
+//Volado Letras (Toss)
+function toss(){
+
+ if(chance==false)
+ {
+ g.setColor('#06f77b');
+ }
+
+ else
+
+ {
+ g.setColor('#D8D8D8');
+ }
+
+ g.setFontAlign(0,0); // center font
+ g.setFont("Vector",26); // bitmap font, 8x magnified
+ g.drawString("Toss",44,160);
+}
+
+
+
+//Roll dado Letras (Roll)
+function roll(){
+
+ if(chance==false)
+ {
+ g.setColor('#06f77b');
+ }
+
+ else
+
+ {
+ g.setColor('#D8D8D8');
+ }
+
+ g.setFontAlign(0,0); // center font
+ g.setFont("Vector",26); // bitmap font, 8x magnified
+ g.drawString("Roll",135,160);
+}
+
+
+
+function getRandomIntInclusive(min, max) {
+ min = Math.ceil(min);
+ max = Math.floor(max);
+ return Math.floor(Math.random() * (max - min + 1) + min); // The maximum is inclusive and the minimum is inclusive
+}
+
+
+function drawvolado()
+{
+
+
+ if(volinit==true){ //si es inicial el volado
+ aleatorio = 1;
+ g.drawImage(getImage(1),49,30);
+
+ }
+
+ else{
+ chance=true;
+ toss();
+ setInterval(function () {
+
+ if(aleatorio==1){
+ g.setColor('#D4AF37').fillCircle(g.getWidth()/2,73,50);
+ aleatorio=2;
+ }
+ else if(aleatorio==2){
+ g.setColor('#c0c0c0').fillCircle(g.getWidth()/2,73,50);
+ aleatorio=1;
+ }
+}, 500, aleatorio);
+
+
+ setTimeout(function () {
+ clearInterval();
+ aleatorio = getRandomIntInclusive(1,2);
+
+ if(aleatorio==1){
+
+ g.setColor('#c0c0c0');
+ g.fillCircle(g.getWidth()/2,73,50);
+
+ }
+ else if(aleatorio==2){
+
+
+ g.setColor('#D4AF37');
+ g.fillCircle(g.getWidth()/2,73,50);
+ }
+
+
+ g.drawImage(getImage(aleatorio),49,30);// Expected output: 1 or 2
+ chance=false;
+ toss();
+}, 2500);
+
+
+ }
+ volinit = false;
+}
+
+function drawavdado()
+{
+ chance=true;
+ roll();
+ setInterval(rotar,100);
+
+ setTimeout(function () {
+ clearInterval();
+
+ puntosale = getRandomIntInclusive(1,6);
+
+
+ g.clearRect(0, 0, g.getHeight(), 139);
+ g.drawImage(getImage(3),30,24);
+
+ switch (puntosale) {
+ case 1:
+ g.setColor('#000000').fillCircle(86,77,9);
+ break;
+ case 2:
+ g.setColor('#000000').fillCircle(68,63,9);
+ g.setColor('#000000').fillCircle(104,98,9);
+ break;
+ case 3:
+ g.setColor('#000000').fillCircle(65,55,9);
+ g.setColor('#000000').fillCircle(86,77,9);
+ g.setColor('#000000').fillCircle(108,100,9);
+ break;
+ case 4:
+ g.setColor('#000000').fillCircle(65,55,9);
+ g.setColor('#000000').fillCircle(107,55,9);
+ g.setColor('#000000').fillCircle(65,100,9);
+ g.setColor('#000000').fillCircle(107,100,9);
+ break;
+ case 5:
+ g.setColor('#000000').fillCircle(65,55,9);
+ g.setColor('#000000').fillCircle(107,55,9);
+ g.setColor('#000000').fillCircle(86,77,9);
+ g.setColor('#000000').fillCircle(65,100,9);
+ g.setColor('#000000').fillCircle(107,100,9);
+ break;
+ case 6:
+ g.setColor('#000000').fillCircle(65,55,9);
+ g.setColor('#000000').fillCircle(65,77,9);
+ g.setColor('#000000').fillCircle(65,100,9);
+ g.setColor('#000000').fillCircle(107,55,9);
+ g.setColor('#000000').fillCircle(107,77,9);
+ g.setColor('#000000').fillCircle(107,100,9);
+ break;
+ }
+
+ chance=false;
+ roll();
+}, 2000);
+}
+
+//##################### Inicia Volado
+
+
+
+function chanceproc()
+{
+
+
+ if(chanceforma=='moneda'){
+
+
+ inipinta();
+
+ //Pinta rec de boton
+ g.setColor('#06f77b').fillRect(g.getWidth()/2, 143, g.getWidth(), g.getWidth());
+
+
+ //Circulo concentrico externo moneda
+ g.setColor('#000000').fillCircle(g.getWidth()/2,73,55);
+
+ //Circulo concentrico interno moneda
+ g.setColor('#c0c0c0').fillCircle(g.getWidth()/2,73,50);
+
+
+ toss();
+
+ //####### Inicio dibuja dado boton
+ g.setColor('#000000');
+ g.fillRect(117, 145,147, 173);
+
+ g.setColor('#FFFFFF');
+ g.fillRect(119, 147,145, 171);
+
+ g.setColor('#000000');
+ g.fillCircle(132,159,4);
+ //####### Fin dibuja dado boton
+
+
+ drawvolado();
+
+ }//##### fin volado
+
+ else if(chanceforma=='dado'){
+
+ inipinta();
+
+ //Pinta rec de boton
+ g.setColor('#06f77b').fillRect(0, 143, g.getWidth()/2, g.getWidth());
+
+
+ roll();
+
+ //####### Inicio dibuja moneda boton
+
+ //Circulo icono externo moneda
+ g.setColor('#000000').fillCircle(43,159,15);
+
+ //Circulo icono interno moneda
+ g.setColor('#c0c0c0').fillCircle(43,159,12);
+
+ //####### Fin dibuja moneda boton
+
+ g.setFont("Vector",17); g.setColor('#000000'); g.drawString('2c',45,160);
+
+ //Uno
+
+ g.drawImage(getImage(3),30,24);
+
+
+ g.setColor('#000000').fillCircle(86,77,9);
+
+
+ }
+
+
+}
+
+chanceproc();
diff --git a/apps/chance/chance.img.js b/apps/chance/chance.img.js
new file mode 100644
index 000000000..019fac9c2
--- /dev/null
+++ b/apps/chance/chance.img.js
@@ -0,0 +1 @@
+require("heatshrink").decompress(atob("mEwwkEogAfFIgmQoBDHDJoWCgMRAAQYOCwczAAcyiAJBLZkSCwgACDBYuBCxAxDJJBEGAAsxGBAuBiYOBOgRJIGAwuDKwQ1HmQwGFwY8CAAUDDAsgC4wnCXwYwIEgJIEEwQhBCQQ/CMI4XFkZdCPIQdCBIJIJLwIICgQODmAdEJAgXDCYgXMNwJICQo5HKMAgkISgQhIC4YkHR4swBwZRBC4QkHSgJpCmUQZAIZBC5byCe4xwBSAYXHdwgDBkEjmQeDC5CMBNAQPBkZfEC5JACV4QcBO4qCBC450BIoQXBAgIvNIogdCSIIXNIogXOBAQHBIoZHJX4gICIwIuEB4SPFkEEC4SuBOoTEHX4MTX4UQC4VAFQQXId4wXELQUQLwpiEiUieIMAC4YrCHwMikMRAAMSMQZfCOwZgEHoZBFJILkEC4i0BBAIXIPohGCJAinBgJFBkURTQZ8EC4gwBEwwAHIwqRFABSNEJAo/FFxxICaw5dLSQxFJFxBJDDBBFBFxIYDgLnCAAMhFoIWLMQYABYQIECCxoxDAAgVOAH4ABA"))
diff --git a/apps/chance/chance.png b/apps/chance/chance.png
new file mode 100644
index 000000000..2e9edeef2
Binary files /dev/null and b/apps/chance/chance.png differ
diff --git a/apps/chance/metadata.json b/apps/chance/metadata.json
new file mode 100644
index 000000000..fd55e9d05
--- /dev/null
+++ b/apps/chance/metadata.json
@@ -0,0 +1,17 @@
+{ "id": "chance",
+ "name": "Chance",
+ "shortName":"Chance",
+ "version":"0.01",
+ "description": "Toss a coin or Roll the dice, chose your chance with this app.",
+ "icon": "chance.png",
+ "type":"app",
+ "tags": "tool",
+ "supports" : ["BANGLEJS2"],
+ "allow_emulator": true,
+ "readme": "README.md",
+ "storage": [
+ {"name":"chance.app.js","url":"chance.app.js"},
+ {"name":"chance.img","url":"chance.img.js","evaluate":true}
+ ],
+ "screenshots": [{"url":"chance-coin.png"},{"url":"chance-dice.png"}]
+}
diff --git a/apps/clkinfostopw/metadata.json b/apps/clkinfostopw/metadata.json
index c0821b8be..2cdf69495 100644
--- a/apps/clkinfostopw/metadata.json
+++ b/apps/clkinfostopw/metadata.json
@@ -7,6 +7,7 @@
"type": "clkinfo",
"tags": "clkinfo,timer",
"supports" : ["BANGLEJS2"],
+ "readme":"README.md",
"allow_emulator": true,
"storage": [
{"name":"stopw.clkinfo.js","url":"clkinfo.js"}
diff --git a/apps/clockcal/ChangeLog b/apps/clockcal/ChangeLog
index 4c8c13366..5657bf26d 100644
--- a/apps/clockcal/ChangeLog
+++ b/apps/clockcal/ChangeLog
@@ -5,3 +5,4 @@
0.05: Improved colors (connected vs disconnected)
0.06: Tell clock widgets to hide.
0.07: Convert Yes/No On/Off in settings to checkboxes
+0.08: Fixed typo in settings.js for DRAGDOWN to make option work
\ No newline at end of file
diff --git a/apps/clockcal/metadata.json b/apps/clockcal/metadata.json
index 03f5c3df2..998115827 100644
--- a/apps/clockcal/metadata.json
+++ b/apps/clockcal/metadata.json
@@ -1,7 +1,7 @@
{
"id": "clockcal",
"name": "Clock & Calendar",
- "version": "0.07",
+ "version": "0.08",
"description": "Clock with Calendar",
"readme":"README.md",
"icon": "app.png",
diff --git a/apps/clockcal/settings.js b/apps/clockcal/settings.js
index 4d8be6fbd..a406f3cf7 100644
--- a/apps/clockcal/settings.js
+++ b/apps/clockcal/settings.js
@@ -93,7 +93,7 @@
value: actions.indexOf(settings.DRAGDOWN),
format: v => actions[v],
onchange: v => {
- settings.DRGDOWN = actions[v];
+ settings.DRAGDOWN = actions[v];
writeSettings();
}
},
diff --git a/apps/draguboard/ChangeLog b/apps/draguboard/ChangeLog
new file mode 100644
index 000000000..a228aab54
--- /dev/null
+++ b/apps/draguboard/ChangeLog
@@ -0,0 +1 @@
+0.01: New App based on dragboard, but with a U shaped drag area
diff --git a/apps/draguboard/README.md b/apps/draguboard/README.md
new file mode 100644
index 000000000..2386c7658
--- /dev/null
+++ b/apps/draguboard/README.md
@@ -0,0 +1,8 @@
+Swipe along the drag bars and release to select a letter, number or punctuation.
+
+Tap on left for backspace or right for space.
+
+Settings:
+- ABC Color: color of the characters row
+- Num Color: color of the digits and symbols row
+- Highlight Color: color of the currently shown character
diff --git a/apps/draguboard/app.png b/apps/draguboard/app.png
new file mode 100644
index 000000000..ae7262b47
Binary files /dev/null and b/apps/draguboard/app.png differ
diff --git a/apps/draguboard/lib.js b/apps/draguboard/lib.js
new file mode 100644
index 000000000..258f8b02d
--- /dev/null
+++ b/apps/draguboard/lib.js
@@ -0,0 +1,156 @@
+exports.input = function(options) {
+ options = options||{};
+ var text = options.text;
+ if ("string"!=typeof text) text="";
+ let settings = require('Storage').readJSON('draguboard.json',1)||{};
+
+ var R;
+ const paramToColor = (param) => g.toColor(`#${settings[param].toString(16).padStart(3,0)}`);
+ var BGCOLOR = g.theme.bg;
+ var HLCOLOR = settings.Highlight ? paramToColor("Highlight") : g.theme.fg;
+ var ABCCOLOR = settings.ABC ? paramToColor("ABC") : g.toColor(1,0,0);//'#FF0000';
+ var NUMCOLOR = settings.Num ? paramToColor("Num") : g.toColor(0,1,0);//'#00FF00';
+ var BIGFONT = '6x8:3';
+ var SMALLFONT = '6x8:1';
+
+ var LEFT = "IJKLMNOPQ";
+ var MIDDLE = "ABCDEFGH";
+ var RIGHT = "RSTUVWXYZ";
+
+ var NUM = ' 1234567890!?,.-@';
+ var rectHeight = 40;
+ var vLength = LEFT.length;
+ var MIDPADDING;
+ var NUMPADDING;
+ var showCharY;
+ var middleWidth;
+ var middleStart;
+ var topStart;
+
+ function drawAbcRow() {
+ g.clear();
+ try { // Draw widgets if they are present in the current app.
+ if (WIDGETS) Bangle.drawWidgets();
+ } catch (_) {}
+ g.setColor(ABCCOLOR);
+ g.setFont('6x8:2x1');
+ g.setFontAlign(-1, -1, 0);
+ g.drawString(RIGHT.split("").join("\n\n"), R.x2-28, topStart);
+ g.drawString(LEFT.split("").join("\n\n"), R.x+22, topStart);
+ g.setFont('6x8:1x2');
+ var spaced = MIDDLE.split("").join(" ");
+ middleWidth = g.stringWidth(spaced);
+ middleStart = (R.x2-middleWidth)/2;
+ g.drawString(spaced, (R.x2-middleWidth)/2, (R.y2)/2);
+ g.fillRect(MIDPADDING, (R.y2)-26, (R.x2-MIDPADDING), (R.y2));
+ // Draw left and right drag rectangles
+ g.fillRect(R.x, R.y, 12, R.y2);
+ g.fillRect(R.x2, R.y, R.x2-12, R.y2);
+ }
+
+ function drawNumRow() {
+ g.setFont('6x8:1x2');
+ g.setColor(NUMCOLOR);
+ NUMPADDING = (R.x2-g.stringWidth(NUM))/2;
+ g.setFontAlign(-1, -1, 0);
+ g.drawString(NUM, NUMPADDING, (R.y2)/4);
+ g.drawString("<-", NUMPADDING+10, showCharY+5);
+ g.drawString("->", R.x2-(NUMPADDING+20), showCharY+5);
+
+ g.fillRect(NUMPADDING, (R.y2)-rectHeight*4/3, (R.x2)-NUMPADDING, (R.y2)-rectHeight*2/3);
+ }
+
+ function updateTopString() {
+ g.setFont(SMALLFONT);
+ g.setColor(BGCOLOR);
+ g.fillRect(R.x,R.y,R.x2,R.y+9);
+ var rectLen = text.length<27? text.length*6:27*6;
+ g.setColor(0.7,0,0);
+ //draw cursor at end of text
+ g.fillRect(R.x+rectLen+5,R.y,R.x+rectLen+10,R.y+9);
+ g.setColor(HLCOLOR);
+ g.setFontAlign(-1, -1, 0);
+ g.drawString(text.length<=27? text : '<- '+text.substr(-24,24), R.x+5, R.y+1);
+ }
+
+ function showChars(chars) {
+ "ram";
+
+ // clear large character
+ g.setColor(BGCOLOR);
+ g.fillRect(R.x+65,showCharY,R.x2-65,showCharY+28);
+
+ // show new large character
+ g.setColor(HLCOLOR);
+ g.setFont(BIGFONT);
+ g.setFontAlign(-1, -1, 0);
+ g.drawString(chars, (R.x2 - g.stringWidth(chars))/2, showCharY+4);
+ }
+
+ var charPos;
+ var char;
+ var prevChar;
+
+ function moveCharPos(list, select, posPixels) {
+ charPos = Math.min(list.length-1, Math.max(0, Math.floor(posPixels)));
+ char = list.charAt(charPos);
+
+ if (char != prevChar) showChars(char);
+ prevChar = char;
+
+ if (select) {
+ text += char;
+ updateTopString();
+ }
+ }
+
+ return new Promise((resolve,reject) => {
+ // Interpret touch input
+ Bangle.setUI({
+ mode: 'custom',
+ back: ()=>{
+ Bangle.setUI();
+ g.clearRect(Bangle.appRect);
+ resolve(text);
+ },
+ drag: function(event) {
+ "ram";
+
+ // drag on middle bottom rectangle
+ if (event.x > MIDPADDING - 2 && event.x < (R.x2-MIDPADDING + 2) && event.y >= ( (R.y2) - 12 )) {
+ moveCharPos(MIDDLE, event.b == 0, (event.x-middleStart)/(middleWidth/MIDDLE.length));
+ }
+ // drag on left or right rectangle
+ else if (event.y > R.y && (event.x < MIDPADDING-2 || event.x > (R.x2-MIDPADDING + 2))) {
+ moveCharPos(event.x ( (R.y2) - 52 ))) {
+ moveCharPos(NUM, event.b == 0, (event.x-NUMPADDING)/6);
+ }
+ // Make a space or backspace by tapping right or left on screen above green rectangle
+ else if (event.y > R.y && event.b == 0) {
+ if (event.x < (R.x2)/2) {
+ showChars('<-');
+ text = text.slice(0, -1);
+ } else {
+ //show space sign
+ showChars('->');
+ text += ' ';
+ }
+ prevChar = null;
+ updateTopString();
+ }
+ }
+ });
+
+ R = Bangle.appRect;
+ MIDPADDING = R.x + 35;
+ showCharY = (R.y2)/3;
+ topStart = R.y+12;
+
+ drawAbcRow();
+ drawNumRow();
+ updateTopString();
+ });
+};
diff --git a/apps/draguboard/metadata.json b/apps/draguboard/metadata.json
new file mode 100644
index 000000000..926e36807
--- /dev/null
+++ b/apps/draguboard/metadata.json
@@ -0,0 +1,15 @@
+{ "id": "draguboard",
+ "name": "DragUboard",
+ "version":"0.01",
+ "description": "A library for text input via swiping U-shaped keyboard.",
+ "icon": "app.png",
+ "type":"textinput",
+ "tags": "keyboard",
+ "supports" : ["BANGLEJS2"],
+ "screenshots": [{"url":"screenshot.png"}],
+ "readme": "README.md",
+ "storage": [
+ {"name":"textinput","url":"lib.js"},
+ {"name":"draguboard.settings.js","url":"settings.js"}
+ ]
+}
diff --git a/apps/draguboard/screenshot.png b/apps/draguboard/screenshot.png
new file mode 100644
index 000000000..f2cb91717
Binary files /dev/null and b/apps/draguboard/screenshot.png differ
diff --git a/apps/draguboard/settings.js b/apps/draguboard/settings.js
new file mode 100644
index 000000000..c94ebee70
--- /dev/null
+++ b/apps/draguboard/settings.js
@@ -0,0 +1,44 @@
+(function(back) {
+ let settings = require('Storage').readJSON('draguboard.json',1)||{};
+ const colors = {
+ 4095: /*LANG*/"White",
+ 4080: /*LANG*/"Yellow",
+ 3840: /*LANG*/"Red",
+ 3855: /*LANG*/"Magenta",
+ 255: /*LANG*/"Cyan",
+ 240: /*LANG*/"Green",
+ 15: /*LANG*/"Blue",
+ 0: /*LANG*/"Black",
+ '-1': /*LANG*/"Default"
+ };
+
+ const save = () => require('Storage').write('draguboard.json', settings);
+ function colorMenu(key) {
+ let menu = {'': {title: key}, '< Back': () => E.showMenu(appMenu)};
+ Object.keys(colors).forEach(color => {
+ var label = colors[color];
+ menu[label] = {
+ value: settings[key] == color,
+ onchange: () => {
+ if (color >= 0) {
+ settings[key] = color;
+ } else {
+ delete settings[key];
+ }
+ save();
+ setTimeout(E.showMenu, 10, appMenu);
+ }
+ };
+ });
+ return menu;
+ }
+
+ const appMenu = {
+ '': {title: 'draguboard'}, '< Back': back,
+ /*LANG*/'ABC Color': () => E.showMenu(colorMenu("ABC")),
+ /*LANG*/'Num Color': () => E.showMenu(colorMenu("Num")),
+ /*LANG*/'Highlight Color': () => E.showMenu(colorMenu("Highlight"))
+ };
+
+ E.showMenu(appMenu);
+});
\ No newline at end of file
diff --git a/apps/dtlaunch/ChangeLog b/apps/dtlaunch/ChangeLog
index e0bd76eb0..1155647ab 100644
--- a/apps/dtlaunch/ChangeLog
+++ b/apps/dtlaunch/ChangeLog
@@ -27,4 +27,5 @@ widgets would still be loaded when they weren't supposed to.
immediately follows the correct theme.
0.22: Bangle 2: Change to not automatically marking the first app on a page
when moving pages. Add caching for faster startups.
+0.23: Bangle 1: Fix issue with missing icons, added touch screen interactions
diff --git a/apps/dtlaunch/README.md b/apps/dtlaunch/README.md
index 1835bc842..ff562d9db 100644
--- a/apps/dtlaunch/README.md
+++ b/apps/dtlaunch/README.md
@@ -6,6 +6,10 @@ Bangle 1:
In the picture above, the Settings app is selected.
+
+
+
+
Bangle 2:

@@ -25,6 +29,12 @@ Bangle 2:
**Swipe Right** - move to previous page of app icons
+**Touch Left(1) area** - "Back" to Clock
+
+**Touch Right(2) area** - move forward through app icons
+
+**Touch Middle(1+2) area** - run the selected app
+
## Controls- Bangle 2
**Touch** - icon to select, second touch launches app
diff --git a/apps/dtlaunch/app-b1.js b/apps/dtlaunch/app-b1.js
index ed9cc778e..c7e78d671 100644
--- a/apps/dtlaunch/app-b1.js
+++ b/apps/dtlaunch/app-b1.js
@@ -13,13 +13,13 @@ function wdog(handle,timeout){
wdog.timeout = timeout;
}
if(wdog.timer){
- clearTimeout(wdog.timer)
+ clearTimeout(wdog.timer);
}
- wdog.timer = setTimeout(wdog.handle,wdog.timeout)
+ wdog.timer = setTimeout(wdog.handle,wdog.timeout);
}
// reset after two minutes of inactivity
-wdog(load,120000)
+wdog(load,120000);
var s = require("Storage");
var apps = s.list(/\.info$/).map(app=>{
@@ -49,7 +49,13 @@ function draw_icon(p,n,selected) {
var y = n>2?130:40;
(selected?g.setColor(0.3,0.3,0.3):g.setColor(0,0,0)).fillRect(x,y,x+79,y+89);
g.setColor(g.theme.fg);
- g.drawImage(s.read(apps[p*6+n].icon),x+10,y+10,{scale:1.25});
+ //bad g.drawImage(s.read(apps[p*6+n].icon),x+10,y+10,{scale:1.25});
+ if ((apps[p*6+n].icon)){
+ if (s.read(apps[p*6+n].icon)) //ensure that graph exist
+ g.drawImage(s.read(apps[p*6+n].icon),x+10,y+10,{scale:1.25});
+ else console.log("icon file NOT exist :"+apps[p*6+n].icon);
+ }
+ else console.log("icon property NOT exist");
g.setColor(-1).setFontAlign(0,-1,0).setFont("6x8",1);
var txt = apps[p*6+n].name.split(" ");
for (var i = 0; i < txt.length; i++) {
@@ -65,10 +71,31 @@ function drawPage(p){
if (!apps[p*6+i]) return i;
draw_icon(p,i,selected==i);
}
-}
+ }
+
+ // case was not working
+Bangle.on("touch", function(tzone){
+ //(tzone)=>{
+ //console.log("tzone"+tzone);
+ switch(tzone){
+ case 1: //left managed by
+ console.log("1, left or back to clock?");
+ load();//clock
+ //nextapp(-1);
+ break;
+ case 2: // right
+ nextapp(1);
+ break;
+ case 3: //center 1+2 no for emul
+ doselect();
+ break;
+ default:
+ console.log("no match");
+ }
+ });
Bangle.on("swipe",(dir)=>{
- wdog()
+ wdog();
selected = 0;
oldselected=-1;
if (dir<0){
diff --git a/apps/dtlaunch/metadata.json b/apps/dtlaunch/metadata.json
index b19d59e49..4262ebc26 100644
--- a/apps/dtlaunch/metadata.json
+++ b/apps/dtlaunch/metadata.json
@@ -1,7 +1,7 @@
{
"id": "dtlaunch",
"name": "Desktop Launcher",
- "version": "0.22",
+ "version": "0.23",
"description": "Desktop style App Launcher with six (four for Bangle 2) apps per page - fast access if you have lots of apps installed.",
"screenshots": [{"url":"shot1.png"},{"url":"shot2.png"},{"url":"shot3.png"}],
"icon": "icon.png",
diff --git a/apps/dtlaunch/sshot_e1.png b/apps/dtlaunch/sshot_e1.png
new file mode 100644
index 000000000..69f708c33
Binary files /dev/null and b/apps/dtlaunch/sshot_e1.png differ
diff --git a/apps/fwupdate/custom.html b/apps/fwupdate/custom.html
index de972b0e8..a648030c1 100644
--- a/apps/fwupdate/custom.html
+++ b/apps/fwupdate/custom.html
@@ -99,6 +99,7 @@ function onInit(device) {
if (crc==1038322422) version = "2v14";
if (crc==2560806221) version = "2v15";
if (crc==2886730689) version = "2v16";
+ if (crc==156320890) version = "2v17";
if (!ok) {
version += `(⚠ update required)`;
}
diff --git a/apps/helloworld/ChangeLog b/apps/helloworld/ChangeLog
index 777e555f1..6ffdb7f46 100644
--- a/apps/helloworld/ChangeLog
+++ b/apps/helloworld/ChangeLog
@@ -1,2 +1,3 @@
0.01: 1st version !
0.02: Supports bottom widgets and UI based in UI4swatch!
+0.03: Added compatibility with BJS2, improvements
diff --git a/apps/helloworld/README.md b/apps/helloworld/README.md
index 370ec349b..0617a9450 100644
--- a/apps/helloworld/README.md
+++ b/apps/helloworld/README.md
@@ -3,7 +3,6 @@
A cross cultural hello world!/hola mundo! app
The most common testing sentence in several languages ;)
-
## Pictures:
Launcher icon
@@ -14,6 +13,10 @@ Screen - Spanish

+Screenshot BJS2 emul
+
+
+
Screen - English

@@ -22,6 +25,10 @@ Screen - Japanese

+Screenshot BJS1 emul
+
+
+
## Usage
@@ -31,17 +38,32 @@ interact to change language, color or quit.
## Features
-Colours, all inputs , graph, widgets loaded
-Counter for Times Display
+ - Compatible Bangle.js1 Bangle.js2
+ - Bottom Widget compatible
+ - Change FG/BG colors,
+ - Usage of many input events
-## Controls
+## Pending/future Features
+- replace UI hardcoded colors for dynamic based on theme
+- BJS2 change BTN1 from quit to Change FG Color (conflict wit setUI?)
-finger swipe
-button 1,2 and 3
-touch screen left, center or right
+
+## Controls/UI
+ - Left area: Back/Exit/launcher
+ - BTN3 (long press)(BJS1): default Exit/kill app
+
+ - BTN1 (BJS2): Back/Exit/launcher
+ - BTN1 (BJS1): Change Language
+ - BTN2 (BJS1): Change FG Color
+ - BTN3 (BJS1): Quit
+
+ - Right area: Change BG Color
+ - Swipe left: Change Language
+ - Swipe right: Change Language
## Creator
-Daniel Perez
\ No newline at end of file
+This app is so basic that probably the easiest is to just edit the code
+Otherwise you can contact me [here](https://github.com/dapgo/my_espruino_smartwatch_things)
\ No newline at end of file
diff --git a/apps/helloworld/app.js b/apps/helloworld/helloworld.app.js
similarity index 56%
rename from apps/helloworld/app.js
rename to apps/helloworld/helloworld.app.js
index 4803fc423..1b6684f3f 100644
--- a/apps/helloworld/app.js
+++ b/apps/helloworld/helloworld.app.js
@@ -1,40 +1,62 @@
-//HolaMundo v202103
+//HolaMundo v202212
// place your const, vars, functions or classes here
{
var contador=1;
- var v_color_statictxt='#e56e06';
- var v_color_b_area='#111111'; //orange RGB format rrggbb //white,Orange,DarkGreen,Yellow,Maroon,Blue,green,Purple,cyan,olive,DarkCyan,pink
+ var v_mode_debug=0;
+ var v_model=process.env.BOARD;
+
+ var v_color_statictxt='#b30000';
+ //var v_color_b_area='#111111';
+ //orange RGB format rrggbb //white,Orange,DarkGreen,Yellow,Maroon,Blue,green,Purple,cyan,olive,DarkCyan,pink
var a_colors= Array(0xFFFF,0xFD20,0x03E0,0xFFE0,0x7800,0x001F,0x07E0,0x780F,0x07FF,0x7BE0,0x03EF,0xF81F);
+
+ var x_max_screen=g.getWidth();
+ var y_max_screen=g.getHeight();
+ var y_wg_bottom=g.getHeight()-25;
+ var y_wg_top=25;
+
+ //EMSCRIPTEN,EMSCRIPTEN2
+if (v_model=='BANGLEJS'||v_model=='EMSCRIPTEN') {
var v_color_lines=0xFFFF; //White hex format
- //new
- var v_color_text=0x07E0;
+ var v_color_text=0x07E0;
var v_font1size=10; //out of quotes
var v_font2size=12;
var v_font_banner_size=30;
var v_font3size=12;
+ var x_btn_area=215;
+ var x_max_usable_area=x_btn_area;//Pend! only for bangle.js
+ var y_btn2=124; //harcoded for bangle.js cuz it is not the half of display height
+ var graph_y=120;
+ var box_x2=195;
+ var box_y2=150;
+ }else{ //BJS2
+ //176x176
+ var v_color_lines="#000"; //White hex format
+ var v_color_text="#000";
+ var v_font1size=9; //out of quotes
+ var v_font2size=9;
+ var v_font_banner_size=16;
+ var v_font3size=8;
+ //g.setColor("#000"); //black or dark
+ x_max_usable_area=176;
+ var graph_y=60;
+ var box_x2=128;
+ var box_y2=104;
+ }
+ if (v_mode_debug>0) console.log("device="+v_model);
var v_arraypos=0;
- var v_acolorpos=0;
+ var v_acolorpos=0; //for fg
+ var v_aBGcolorPos=5; //for bg
var a_string1 = Array('hola', 'hello', 'saluton', 'ola','ciao', 'salut','czesc','konnichiwa');
var a_string2 = Array('mundo!', 'world!', 'mondo!','mundo!','mondo!','monde!','swiat!','sekai!');
- var mem=process.memory();
- var v_model=process.env.BOARD;
- console.log("device="+v_model);
-
- var x_max_screen=g.getWidth();//240;
- var y_max_screen=g.getHeight(); //240;
- var y_wg_bottom=g.getHeight()-25;
- var y_wg_top=25;
- if (v_model=='BANGLEJS') {
- var x_btn_area=215;
- var x_max_usable_area=x_btn_area;//Pend! only for bangle.js
- var y_btn2=124; //harcoded for bangle.js cuz it is not the half of display height
- } else x_max_usable_area=240;
+
+
}
-
- console.log("*** UI dimensions***");
- console.log("x="+x_max_screen);
- console.log("y_wg_bottom="+y_wg_bottom);
-
+ if (v_mode_debug>0) {
+ console.log("*** UI dimensions***");
+ console.log("x="+x_max_screen);
+ console.log("y_wg_bottom="+y_wg_bottom);
+ }
// special function to handle display switch on
Bangle.on('lcdPower', (on) => {
@@ -47,17 +69,15 @@
});
//Clear/fill dynamic area except widget area, right and bottom status line
- function ClearActiveArea(){
- g.setColor(v_color_b_area);
- //harcoded values to avoid clearing areas
- g.fillRect(0,y_wg_top,195,150);
+ function ClearActiveArea(){
+ g.setColor(a_colors[v_aBGcolorPos]); //dynamic color
+ g.fillRect(0,y_wg_top,box_x2,box_y2);
g.flip();
}
function DrawBangleButtons(){
g.setFontVector(v_font1size);
- g.setColor(v_color_lines);//White
-
+ g.setColor(v_color_lines);//White
g.drawString("Lang", x_max_screen-g.stringWidth("Lang"),y_wg_top+v_font1size+1);
//above Btn2
@@ -93,7 +113,7 @@ function DrawBottomInfoBanner(){
function PrintHelloWorld(){
ClearActiveArea(); //except widgets and bottom
- console.log("drawing a "+a_string1[v_arraypos]+" "+a_string2[v_arraypos]);
+ if (v_mode_debug>0) console.log("drawing a "+a_string1[v_arraypos]+" "+a_string2[v_arraypos]);
g.setColor(a_colors[v_acolorpos]); //dynamic color
g.setFont("Vector",v_font_banner_size);
@@ -106,55 +126,62 @@ function DrawBottomInfoBanner(){
g.drawString(a_string2[v_arraypos],5,85);
g.flip();
- g.setFont("Vector",v_font3size);
- g.setColor(0,0,1); //blue
- g.drawString("Display count: "+contador ,10,115);
- mem=process.memory();
- //console.log("Mem free/total: "+mem.free+"/"+mem.total);
- g.drawString("Free mem: "+mem.free+"/"+mem.total,10,135);
+ g.setFont("Vector",v_font3size);
+ g.setColor(v_color_statictxt);
+ g.drawString("Display on/off: "+contador ,10,box_y2+7);
+ //var mem=process.memory();
+ //if (v_mode_debug>0) console.log("Mem free/total: "+mem.free+"/"+mem.total);
g.flip();
}
function PrintMainStaticArea(){
g.setColor(v_color_statictxt);
g.setFont("Vector",v_font3size);
- g.drawString("#by DPG #bangle.js",10,170);
- g.drawString("#javascript #espruino",10,185);
+ g.drawString("#by DPG #bangle.js",10,box_y2+5+(v_font3size*2));
+ g.drawString("#javascript #espruino",10,box_y2+5+(v_font3size*3));
var img_obj_RedHi = {
width : 40, height : 40, bpp : 4,
transparent : 0,
buffer : require("heatshrink").decompress(atob("AFkM7vd4EAhoTNhvQhvcgHdAQIAL5oWCFIPdExo+CEoIZCABI0DhvADIZhJL4IXDHRkMEAQmOCYgmOAAIOBHwImNRQgmPHgYmCUIIXMJobfB3jgCWZJNDEga1JYQQQCMYZoJJAJNDBwgTICQPdCY7lDRQx4DVIwTIHYZzEHZATFBwblDCZRKEO5ITFWAbIJCYrHBAAImICYwEB5raKCYwAMCYXc5gADE5hLDAAgTIBJLkBBJAyKHw5hKBRJJKKJSuII5Q0IhqPKCbjRKCc4AgA=="))
}
- g.drawImage(img_obj_RedHi,155,160);
+ g.drawImage(img_obj_RedHi,box_x2+2,graph_y);
g.flip();
}
//inc var postion for text array
- function ChangeLang(){
- if (v_arraypos0) console.log("ChangeLang, dir, Prev pos: "+dir+" , "+v_arraypos);
+
+ if ((dir==1) && (v_arraypos0)) v_arraypos--;
+ else if ((dir== -1) && (v_arraypos==0)) v_arraypos=a_string1.length-1;
PrintHelloWorld();
}
//inc var postion for color array
function ChangeColor(){
- //console.log("ChangeColor, colpos: "+v_acolorpos);
+ //if (v_mode_debug>0) console.log("ChangeColor, colpos: "+v_acolorpos);
if (v_acolorpos {
- if(dir == 1) ChangeLang(); //func load() to quit
- else ChangeLang();
- });
+ } //touchscreen to quit
+ else setWatch(ChangeColor, BTN1, { repeat: true });//func to quit
+ Bangle.on('swipe', dir => {
+ if(dir == 1) ChangeLang(1); //right
+ else ChangeLang(-1); //left
+ });
}
- console.log("**************************");
- console.log("Log: *** hola mundo app");
+ if (v_mode_debug>0) console.log("**************************");
+ if (v_mode_debug>0) console.log("Log: *** hola mundo app");
g.clear();
Bangle.loadWidgets();
Bangle.drawWidgets();
- if (v_model=='BANGLEJS') DrawBangleButtons();
+ Bangle.setUI({
+ mode : "custom",
+ back : function() {load();}
+ });
+ if (v_model=='BANGLEJS'||v_model=='EMSCRIPTEN') DrawBangleButtons();
DrawBottomInfoBanner();
UserInput();
PrintMainStaticArea();
diff --git a/apps/helloworld/metadata.json b/apps/helloworld/metadata.json
index b8fe1b1e3..b9dec6b52 100644
--- a/apps/helloworld/metadata.json
+++ b/apps/helloworld/metadata.json
@@ -2,14 +2,15 @@
"id": "helloworld",
"name": "hello, world!",
"shortName": "hello world",
- "version": "0.02",
+ "version": "0.03",
"description": "A cross cultural hello world!/hola mundo! app with colors and languages",
"icon": "app.png",
"tags": "input,interface,buttons,touch",
- "supports": ["BANGLEJS"],
+ "screenshots": [{"url":"screenshot.png"}],
+ "supports": ["BANGLEJS","BANGLEJS2"],
"readme": "README.md",
"storage": [
- {"name":"helloworld.app.js","url":"app.js"},
+ {"name":"helloworld.app.js","url":"helloworld.app.js"},
{"name":"helloworld.img","url":"app-icon.js","evaluate":true}
]
}
diff --git a/apps/helloworld/screenshot.png b/apps/helloworld/screenshot.png
new file mode 100644
index 000000000..32cbd4ff3
Binary files /dev/null and b/apps/helloworld/screenshot.png differ
diff --git a/apps/helloworld/ss_emul_BJS1.png b/apps/helloworld/ss_emul_BJS1.png
new file mode 100644
index 000000000..32cbd4ff3
Binary files /dev/null and b/apps/helloworld/ss_emul_BJS1.png differ
diff --git a/apps/helloworld/ss_emul_BJS2.png b/apps/helloworld/ss_emul_BJS2.png
new file mode 100644
index 000000000..349703519
Binary files /dev/null and b/apps/helloworld/ss_emul_BJS2.png differ
diff --git a/apps/hrmmar/ChangeLog b/apps/hrmmar/ChangeLog
new file mode 100644
index 000000000..8c418c8fd
--- /dev/null
+++ b/apps/hrmmar/ChangeLog
@@ -0,0 +1,3 @@
+0.01: New App
+0.02: Disable when bthrm is active
+ Enable fft elim as default
diff --git a/apps/hrmmar/README.md b/apps/hrmmar/README.md
index ff90d9156..2d9612117 100644
--- a/apps/hrmmar/README.md
+++ b/apps/hrmmar/README.md
@@ -7,5 +7,5 @@ Measurements from the build in PPG-Sensor (Photoplethysmograph) is sensitive to
* **MA removal**
Select the algorithm to Remove Motion artifacts:
- - None: (default) No Motion Artifact removal.
- - fft elim: (*experimental*) Remove Motion Artifacts by cutting out the frequencies from the HRM frequency spectrum that are noisy in acceleration spectrum. Under motion this can report a heart rate that is closer to the real one but will fail if motion frequency and heart rate overlap.
+ - None: No Motion Artifact removal.
+ - fft elim: (default, *experimental*) Remove Motion Artifacts by cutting out the frequencies from the HRM frequency spectrum that are noisy in acceleration spectrum. Under motion this can report a heart rate that is closer to the real one but will fail if motion frequency and heart rate overlap.
diff --git a/apps/hrmmar/boot.js b/apps/hrmmar/boot.js
index 52d88c313..4c589bc03 100644
--- a/apps/hrmmar/boot.js
+++ b/apps/hrmmar/boot.js
@@ -5,8 +5,12 @@
bpm_corrected = bpm;
};
+ const isInternal = (hrm) => {
+ return !hrm.src || hrm.src === "int";
+ };
+
Bangle.on('HRM', (hrm) => {
- if (bpm_corrected > 0) {
+ if (isInternal(hrm) && bpm_corrected > 0) {
// replace bpm data in event
hrm.bpm_orig = hrm.bpm;
hrm.confidence_orig = hrm.confidence;
@@ -17,16 +21,16 @@
let run = () => {
const settings = Object.assign({
- mAremoval: 0
+ mAremoval: 1
}, require("Storage").readJSON("hrmmar.json", true) || {});
// select motion artifact removal algorithm
switch(settings.mAremoval) {
case 1:
- require("hrmfftelim").run(settings, updateHrm);
+ require("hrmfftelim").run(settings, updateHrm, isInternal);
break;
}
- }
+ };
// override setHRMPower so we can run our code on HRM enable
const oldSetHRMPower = Bangle.setHRMPower;
diff --git a/apps/hrmmar/fftelim.js b/apps/hrmmar/fftelim.js
index 98b7f33ad..f57489dda 100644
--- a/apps/hrmmar/fftelim.js
+++ b/apps/hrmmar/fftelim.js
@@ -1,4 +1,4 @@
-exports.run = (settings, updateHrm) => {
+exports.run = (settings, updateHrm, isInternal) => {
const SAMPLE_RATE = 12.5;
const NUM_POINTS = 256; // fft size
const ACC_PEAKS = 2; // remove this number of ACC peaks
@@ -147,7 +147,7 @@ exports.run = (settings, updateHrm) => {
});
Bangle.on('accel', (acc) => {
- if (hrmdata !== undefined) {
+ if (hrmdata !== undefined && isInternal(hrmdata)) {
hrmvalues[idx] = hrmdata.filt;
accvalues[idx] = acc.x*1000 + acc.y*1000 + acc.z*1000;
idx++;
diff --git a/apps/hrmmar/metadata.json b/apps/hrmmar/metadata.json
index 232ff64a7..fcb2fac5c 100644
--- a/apps/hrmmar/metadata.json
+++ b/apps/hrmmar/metadata.json
@@ -3,7 +3,7 @@
"name": "HRM Motion Artifacts removal",
"shortName":"HRM MA removal",
"icon": "app.png",
- "version":"0.01",
+ "version":"0.02",
"description": "Removes Motion Artifacts in Bangle.js's heart rate sensor data.",
"type": "bootloader",
"tags": "health",
diff --git a/apps/hrmmar/settings.js b/apps/hrmmar/settings.js
index 3c6e62c91..c391f6862 100644
--- a/apps/hrmmar/settings.js
+++ b/apps/hrmmar/settings.js
@@ -2,7 +2,7 @@
var FILE = "hrmmar.json";
// Load settings
var settings = Object.assign({
- mAremoval: 0,
+ mAremoval: 1,
}, require('Storage').readJSON(FILE, true) || {});
function writeSettings() {
diff --git a/apps/messages_light/ChangeLog b/apps/messages_light/ChangeLog
index 9c3acf0f2..23d9ba053 100644
--- a/apps/messages_light/ChangeLog
+++ b/apps/messages_light/ChangeLog
@@ -5,4 +5,5 @@
implemented use of the "messageicons" library
removed lib no longer used
1.3: icon changed
-1.4: new management of events implemented; removed code no longer used (from now the music will be managed by the Messagesgui app)
\ No newline at end of file
+1.4: new management of events implemented; removed code no longer used (from now the music will be managed by the Messagesgui app)
+1.5: Fix graphic bug; View via popup while there are other open apps
\ No newline at end of file
diff --git a/apps/messages_light/messages_light.app.js b/apps/messages_light/messages_light.app.js
index 94f619259..40f94dd0f 100644
--- a/apps/messages_light/messages_light.app.js
+++ b/apps/messages_light/messages_light.app.js
@@ -493,7 +493,7 @@ let main = function(){
Bangle.on('tap', doubleTapUnlock);
Bangle.on('touch', toushScroll);
- //quando apro quest'app, do per scontato che c'è un messaggio da leggere posto in un file particolare ( NewMessage.json )
+ //quando apro quest'app, do per scontato che c'è un messaggio da leggere posto in un file particolare ( messages_light.NewEvent.json )
let eventToShow = require('Storage').readJSON(settings.NewEventFileName, true);
require("Storage").erase(settings.NewEventFileName)
if( eventToShow!==undefined)
diff --git a/apps/messages_light/messages_light.listener.js b/apps/messages_light/messages_light.listener.js
index 9b1158b1c..2525a52bd 100644
--- a/apps/messages_light/messages_light.listener.js
+++ b/apps/messages_light/messages_light.listener.js
@@ -1,42 +1,121 @@
+
+let overlayTimeout=undefined;
exports.listener = function(type, event) {
- /*
+
//salva gli eventi che arrivano su file
- events=require("Storage").readJSON("events_log",true) || [];
+ /* events=require("Storage").readJSON("events_log",true) || [];
events.push ( event)
- require("Storage").writeJSON("events_log",events);*/
-
+ require("Storage").writeJSON("events_log",events);
+ */
//if (event.handled) return; // already handled/app open
- if( type=="music" || event.id=="music") return; //lo lascio gestire a qualcun altro
+ if( type=="clearAll" || type=="music" || event.id=="music") return; //lo lascio gestire a qualcun altro
//se arrivo qua gestisco io
//non mi preoccupo di salvare ( a meno di problemi a mantenere tanti messaggi in queue nella ram...)
event.handled=true;
+ if( Bangle.CLOCK || global.__FILE__ === undefined || global.__FILE__ === ".bootcde" || global.__FILE__.startsWith("messages_light."))
+ {
+ //se non ci sono app aperte ( clock oppure c'è messages_light)
+ //continuo con la visualizzazione dell messaggio
- let callApp;
- //se l'app non è aperta
- if ("undefined"==typeof manageEvent)
- {
- if(event.t=="remove") return; //l'app non è aperta, non c'è nessun messaggio da rimuovere dalla queue -> non lancio l'app
-
- //chiamo la load dell'app
- callApp=function(event){
- require("Storage").writeJSON("messages_light.NewEvent.json",event);
- load("messages_light.app.js");
+ let callApp;
+ //se l'app non è aperta
+ if ("undefined"==typeof manageEvent)
+ {
+ if(event.t=="remove") return; //l'app non è aperta, non c'è nessun messaggio da rimuovere dalla queue -> non lancio l'app
+
+ //chiamo la load dell'app
+ callApp=function(event){
+ require("Storage").writeJSON("messages_light.NewEvent.json",event);
+ load("messages_light.app.js");
+ }
}
- }
- else
- {
- //dico all'app di gestire l'evento
- callApp=function(event){
- manageEvent(event);
+ else
+ {
+ //dico all'app di gestire l'evento
+ callApp=function(event){
+ manageEvent(event);
+ }
}
- }
+
-
- callApp(event);
+ callApp(event);
+
+
+ }
+ else{
+ //TODO: BHOO!!!
+ //vibro e basta?
+ //faccio comparire un overlay veloce?
+ //uso l'overlay sempre? ( gestione di tutti gli eventi smadonnosa... )
+ //salvo lo stato dell'app attuale( NON SO COME ), lancio la mia app e alla chiusura torno allo stato precedente?
+
+ console.log(event);
+ let ovr=undefined;
+ let palette;
+ let timeout;
+
+ if(event.id=="call" && event.t!="remove")
+ {
+ let count=3;
+ let idInter= setInterval(()=>{
+ if(--count<=0)
+ clearInterval(idInter);
+
+ Bangle.buzz(100,1);
+ },200);
+
+ ovr = Graphics.createArrayBuffer(136,136,2,{msb:true});
+ ovr.setColor(1).fillRect({x:0,y:0,w:135,h:135,r:8});
+ ovr.setColor(2).setFont("Vector:30").setFontAlign(0,0).drawString("Call",68,20);
+ var lines=ovr.wrapString(event.title,136);
+ for(let i=0;i< lines.length;i++)
+ ovr.setColor(2).setFont("Vector:20").setFontAlign(0,0).drawString(lines[i],68,50+i*15);
+
+ palette=[0,g.toColor("#141"),g.toColor("#fff"),g.toColor("#FFF")];
+ timeout=4000;
+ }
+ else if(event.t=="add" || event.t=="modify")
+ {
+ Bangle.buzz();
+ ovr = Graphics.createArrayBuffer(136,136,2,{msb:true});
+ ovr.setColor(1).fillRect({x:0,y:0,w:135,h:135,r:8});
+ ovr.setColor(2).setFont("Vector:20").setFontAlign(0,0).drawString(event.src,68,15);
+ ovr.setColor(2).setFont("Vector:15").setFontAlign(0,0).drawString(event.title,68,35);
+ var lines=ovr.wrapString(event.body,136);
+ for(let i=0;i< lines.length;i++)
+ ovr.setColor(2).setFont("Vector:15").setFontAlign(0,0).drawString(lines[i],68,60+i*15);
+
+
+ palette=[0,g.toColor("#09c"),g.toColor("#fff"),g.toColor("#FFF")];
+ timeout=5000;
+ }
+
+
+ if(ovr===undefined)
+ return;
+
+
+ Bangle.setLCDPower(true);
+
+ Bangle.setLCDOverlay({
+ width:ovr.getWidth(), height:ovr.getHeight(),
+ bpp:2, transparent:0,
+ palette:new Uint16Array(palette),
+ buffer:ovr.buffer
+ },20,20);
+
+ Bangle.setLCDPower(true);
+
+ if(overlayTimeout) clearTimeout(overlayTimeout);
+ overlayTimeout=setTimeout(()=>{
+ Bangle.setLCDOverlay();
+ overlayTimeout=undefined;
+ },timeout);
+ }
}
diff --git a/apps/messages_light/metadata.json b/apps/messages_light/metadata.json
index 5ec1f5a37..eeab7d9f4 100644
--- a/apps/messages_light/metadata.json
+++ b/apps/messages_light/metadata.json
@@ -1,7 +1,7 @@
{
"id": "messages_light",
"name": "Messages Light",
- "version": "1.4",
+ "version": "1.5",
"description": "A light implementation of messages App (display notifications from iOS and Gadgetbridge/Android)",
"icon": "app.png",
"type": "app",
diff --git a/apps/messagesoverlay/metadata.json b/apps/messagesoverlay/metadata.json
index 6a3f953d8..be80150e7 100644
--- a/apps/messagesoverlay/metadata.json
+++ b/apps/messagesoverlay/metadata.json
@@ -6,30 +6,12 @@
"icon": "app.png",
"type": "bootloader",
"tags": "tool,system",
- "supports": [
- "BANGLEJS2"
- ],
- "dependencies": {
- "messageicons": "module",
- "messages": "app"
- },
+ "supports": ["BANGLEJS2"],
+ "dependencies" : { "messageicons":"module","messages":"app" },
"readme": "README.md",
"storage": [
- {
- "name": "messagesoverlay",
- "url": "lib.js"
- },
- {
- "name": "messagesoverlay.boot.js",
- "url": "boot.js"
- }
+ {"name":"messagesoverlay","url":"lib.js"},
+ {"name":"messagesoverlay.boot.js","url":"boot.js"}
],
- "screenshots": [
- {
- "url": "screen_call.png"
- },
- {
- "url": "screen_message.png"
- }
- ]
+ "screenshots": [{"url":"screen_call.png"} ,{"url":"screen_message.png"} ]
}
diff --git a/apps/nesclock/ChangeLog b/apps/nesclock/ChangeLog
new file mode 100644
index 000000000..66eaaa21a
--- /dev/null
+++ b/apps/nesclock/ChangeLog
@@ -0,0 +1,2 @@
+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.
diff --git a/apps/nesclock/README.md b/apps/nesclock/README.md
new file mode 100644
index 000000000..6b6ae9167
--- /dev/null
+++ b/apps/nesclock/README.md
@@ -0,0 +1,8 @@
+# NES Themed Clock
+
+NES Clock is a clock face that can display multiple themes based on a few NES(Nintendo Entertainment System) game title screens.
+
+This clock has the same base clock features as Anton Clock, but can be configured in settings to change the clock theme.
+
+## Compatibility
+This clock was built for Bangle.js 2. It was inteded to be run with widgets.
diff --git a/apps/nesclock/app-icon.js b/apps/nesclock/app-icon.js
new file mode 100644
index 000000000..d857ec7ee
--- /dev/null
+++ b/apps/nesclock/app-icon.js
@@ -0,0 +1 @@
+require("heatshrink").decompress(atob("mEwwhC/AH4A/AH4A4/4A/AA8zACn/+cRAAsSkQAEkIOGn4XfABwXDiUzmQvUichkYXVAIRHSkczC4MzE4IvFC5UxA4cxI6IXFF7DnFkJSBmRYBCQJfIifzmYLBAQMxifd6cj7oXEDAKpCAQPxAQIOBj4XDloXGU4gvJmYvHd4pfGBgRYBHwIXDAAqPQAAq/P/5UBAAv/AAgMGCwIAXgAA/AH4A/AH4A2"))
diff --git a/apps/nesclock/app.js b/apps/nesclock/app.js
new file mode 100644
index 000000000..c0cc3c0ce
--- /dev/null
+++ b/apps/nesclock/app.js
@@ -0,0 +1,245 @@
+Graphics.prototype.setFontMarioBrosDS = function() {
+ // Actual height 60 (59 - 0)
+ return this.setFontCustom(
+ E.toString(require('heatshrink').decompress(atob('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'))),
+ 32,
+ atob("ExMeMS01MQ8aGhcpDykXIi0aLSk1LTExMTEPDxomGjExLS0tLSktMS0aLSktNS0xMTUtMS0tNTUxMS0aIho="),
+ 60|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;
+
+var 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"))
+};
+
+var 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=="))
+};
+
+var bg_mario2 = {
+ width : 176, height : 165, bpp : 3,
+ transparent : 1,
+ buffer : require("heatshrink").decompress(atob("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"))
+};
+
+var bg_kirby = {
+ width : 176, height : 165, bpp : 3,
+ transparent : 2,
+ buffer : require("heatshrink").decompress(atob("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"))
+};
+
+var bg_zelda = {
+ width : 176, height : 165, bpp : 8,
+ transparent : 254,
+ buffer : require("heatshrink").decompress(atob("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"))
+};
+
+var settings = Object.assign({
+ currentFace : "Mario 3"
+}, require("Storage").readJSON("nesclock.json", true) || {});
+
+let currentFace = {};
+
+if (settings.currentFace == "Mario 3") {
+ currentFace = {'fontFace': "MarioBrosDS",
+ 'dateFontFace': "NES",
+ 'clockScale': 1,
+ '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};
+}
+
+// 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); // Hour and minute
+ 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;
+ 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;
+ currentFace = 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);
+}
+
diff --git a/apps/nesclock/app.png b/apps/nesclock/app.png
new file mode 100644
index 000000000..2c6857fe3
Binary files /dev/null and b/apps/nesclock/app.png differ
diff --git a/apps/nesclock/kirby-screenshot.png b/apps/nesclock/kirby-screenshot.png
new file mode 100644
index 000000000..74a199fe7
Binary files /dev/null and b/apps/nesclock/kirby-screenshot.png differ
diff --git a/apps/nesclock/mario1-screenshot.png b/apps/nesclock/mario1-screenshot.png
new file mode 100644
index 000000000..a8fc053b7
Binary files /dev/null and b/apps/nesclock/mario1-screenshot.png differ
diff --git a/apps/nesclock/mario2-screenshot.png b/apps/nesclock/mario2-screenshot.png
new file mode 100644
index 000000000..b3acf75af
Binary files /dev/null and b/apps/nesclock/mario2-screenshot.png differ
diff --git a/apps/nesclock/mario3-screenshot.png b/apps/nesclock/mario3-screenshot.png
new file mode 100644
index 000000000..65a29f260
Binary files /dev/null and b/apps/nesclock/mario3-screenshot.png differ
diff --git a/apps/nesclock/metadata.json b/apps/nesclock/metadata.json
new file mode 100644
index 000000000..bb7613677
--- /dev/null
+++ b/apps/nesclock/metadata.json
@@ -0,0 +1,20 @@
+{
+ "id": "nesclock",
+ "name": "NES Clock",
+ "shortName": "NES Clock",
+ "version": "0.02",
+ "description": "A clock themed after different NES title screens.",
+ "readme":"README.md",
+ "icon": "app.png",
+ "screenshots": [{"url":"mario3-screenshot.png"},{"url":"mario1-screenshot.png"},{"url":"mario2-screenshot.png"},{"url":"kirby-screenshot.png"},{"url":"zelda-screenshot.png"}],
+ "type": "clock",
+ "tags": "clock",
+ "supports": ["BANGLEJS2"],
+ "allow_emulator": false,
+ "storage": [
+ {"name":"nesclock.app.js","url":"app.js"},
+ {"name":"nesclock.settings.js","url":"settings.js"},
+ {"name":"nesclock.img","url":"app-icon.js","evaluate":true}
+ ],
+ "data": [{"name":"nesclock.json"}]
+}
diff --git a/apps/nesclock/settings.js b/apps/nesclock/settings.js
new file mode 100644
index 000000000..0bbecc2ce
--- /dev/null
+++ b/apps/nesclock/settings.js
@@ -0,0 +1,42 @@
+(function(back) {
+ var FILE = "nesclock.json";
+ var settings = Object.assign({
+ currentFace: "Mario 3",
+ }, require('Storage').readJSON(FILE, true) || {});
+
+ function writeSettings() {
+ require('Storage').writeJSON(FILE, settings);
+ }
+
+ // Helper method which uses int-based menu item for set of string values
+ function stringItems(startvalue, writer, values) {
+ return {
+ value: (startvalue === undefined ? 0 : values.indexOf(startvalue)),
+ format: v => values[v],
+ min: 0,
+ max: values.length - 1,
+ wrap: true,
+ step: 1,
+ onchange: v => {
+ writer(values[v]);
+ writeSettings();
+ }
+ };
+ }
+
+ // Helper method which breaks string set settings down to local settings object
+ function stringInSettings(name, values) {
+ return stringItems(settings[name], v => settings[name] = v, values);
+ }
+
+ var mainmenu = {
+ "": {
+ "title": "NES Clock"
+ },
+ "< Back": () => back(),
+ "Game Theme": stringInSettings("currentFace", ["Mario 3", "Mario 2", "Mario 1", "Kirby", "Zelda"]),
+ };
+
+ E.showMenu(mainmenu);
+
+});
diff --git a/apps/nesclock/zelda-screenshot.png b/apps/nesclock/zelda-screenshot.png
new file mode 100644
index 000000000..ab474f646
Binary files /dev/null and b/apps/nesclock/zelda-screenshot.png differ
diff --git a/apps/quicklaunch/ChangeLog b/apps/quicklaunch/ChangeLog
index 4b92be8cc..5d70e010b 100644
--- a/apps/quicklaunch/ChangeLog
+++ b/apps/quicklaunch/ChangeLog
@@ -9,3 +9,9 @@
0.09: Do not react if clkinfo is focused
0.10: Extend the functionality via a quicklaunch.app.js file that can be launched
with quicklaunch itself.
+0.11: Add hints to the extension app. Tweak remove function.
+0.12: Stackable extension screens. After updating, please visit the quicklaunch
+ settings page to prompt an automatic update of the quicklaunch.json settings file with
+ new key names.
+0.13: Touch and hold to pause the timeout to clock temporarily.
+0.14: Extension: Don't go down a path if nothing waits at the end. Revisit the current intersection instead.
diff --git a/apps/quicklaunch/README.md b/apps/quicklaunch/README.md
index dc4c50071..b5bffc4be 100644
--- a/apps/quicklaunch/README.md
+++ b/apps/quicklaunch/README.md
@@ -1,3 +1,24 @@
-Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. The Quick Launch Extension (included) can be chosen as one of the apps, in turn providing fast access to up to five additional apps. Configurations can be accessed through Settings->Apps.
+**PLEASE NOTE: With v0.12 of Quick Launch the keys of the settings file have been changed. Please just visit Settings->Apps->Quick Launch to prompt an automatic update. Quick Launch will not be responsive until this has been done. This is a consequence of how the new stackable extension screens are implemented.**
+
+Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. The extension (included) can be chosen as one of the apps, in turn providing fast access to up to five additional apps per extension screen - which can be stacked indefinitely. Configurations can be accessed through Settings->Apps.
+
+Below are extension screens where current apps have been set like so:
+- left swipe is "PA Remote",
+- right swipe is "Remote for Spotify" and
+- down swipe is another extension screen where new apps are accessible.
+
+
+
+*Extension screen.*
+
+
+*Extension screen when Fastload Utils is present.*
+
+## Contributors
+
+frigis1 (Creator),
+halemmerich,
+thyttan,
+glemco.
diff --git a/apps/quicklaunch/app.js b/apps/quicklaunch/app.js
index 7ae01ded6..2fc4910ab 100644
--- a/apps/quicklaunch/app.js
+++ b/apps/quicklaunch/app.js
@@ -8,35 +8,72 @@
storage.write("quicklaunch.json", settings);
};
+ let leaveTrace = function(trace) {
+ if (settings[trace+"app"].name != "") {
+ settings.trace = trace;
+ storage.writeJSON("quicklaunch.json", settings);
+ } else { trace = trace.substring(0, trace.length-1); }
+ return trace;
+ };
+
+ let launchApp = function(trace) {
+ if (settings[trace+"app"]) {
+ if (settings[trace+"app"].src){
+ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src);
+ }
+ }
+ };
+
+ let trace = settings.trace;
+
let touchHandler = (_,e) => {
+ if (e.type == 2) return;
let R = Bangle.appRect;
if (e.x < R.x || e.x > R.x2 || e.y < R.y || e.y > R.y2 ) return;
- if (settings.exttapapp.src){ if (settings.exttapapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.exttapapp.src)) reset("exttapapp"); else load(settings.exttapapp.src); }
+ trace = leaveTrace(trace+"t"); // t=tap.
+ launchApp(trace);
};
let swipeHandler = (lr,ud) => {
- if (lr == -1 && settings.extleftapp && settings.extleftapp.src){ if (settings.extleftapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.extleftapp.src)) reset("extleftapp"); else load(settings.extleftapp.src); }
- if (lr == 1 && settings.extrightapp && settings.extrightapp.src){ if (settings.extrightapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.extrightapp.src)) reset("extrightapp"); else load(settings.extrightapp.src); }
- if (ud == -1 && settings.extupapp && settings.extupapp.src){ if (settings.extupapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.extupapp.src)) reset("extupapp"); else load(settings.extupapp.src); }
- if (ud == 1 && settings.extdownapp && settings.extdownapp.src){ if (settings.extdownapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.extdownapp.src)) reset("extdownapp"); else load(settings.extdownapp.src); }
+ if (lr == -1) trace = leaveTrace(trace+"l"); // l=left,
+ if (lr == 1) trace = leaveTrace(trace+"r"); // r=right,
+ if (ud == -1) trace = leaveTrace(trace+"u"); // u=up,
+ if (ud == 1) trace = leaveTrace(trace+"d"); // d=down.
+ launchApp(trace);
+ };
+
+ let onLongTouchDoPause = (e)=>{
+ if (e.b == 1 && timeoutToClock) {clearTimeout(timeoutToClock); timeoutToClock = false;}
+ if (e.b == 0 && !timeoutToClock) updateTimeoutToClock();
};
Bangle.setUI({
- mode: "custom",
+ mode: "custom",
touch: touchHandler,
swipe : swipeHandler,
- remove: ()=>{if (timeoutToClock) clearTimeout(timeoutToClock);} // Compatability with Fastload Utils.
+ drag : onLongTouchDoPause,
+ remove: ()=>{if (timeoutToClock) clearTimeout(timeoutToClock);} // Compatibility with Fastload Utils.
});
g.clearRect(Bangle.appRect);
- Bangle.loadWidgets(); // Compatability with Fastload Utils.
+ "Bangle.loadWidgets()"; // Hack: Fool Fastload Utils that we call Bangle.loadWidgets(). This way we get the fastest possibe loading in whichever environment we find ourselves.
// taken from Icon Launcher with some alterations
let timeoutToClock;
const updateTimeoutToClock = function(){
- let time = 1000; // milliseconds
+ let time = 1500; // milliseconds
if (timeoutToClock) clearTimeout(timeoutToClock);
- timeoutToClock = setTimeout(load,time);
+ timeoutToClock = setTimeout(load,time);
};
updateTimeoutToClock();
+
+ let R = Bangle.appRect;
+
+ // Draw app hints
+ g.setFont("Vector", 11)
+ .setFontAlign(0,1,3).drawString(settings[trace+"lapp"].name, R.x2, R.y+R.h/2)
+ .setFontAlign(0,1,1).drawString(settings[trace+"rapp"].name, R.x, R.y+R.h/2)
+ .setFontAlign(0,1,0).drawString(settings[trace+"uapp"].name, R.x+R.w/2, R.y2)
+ .setFontAlign(0,-1,0).drawString(settings[trace+"dapp"].name, R.x+R.w/2, R.y)
+ .setFontAlign(0,0,0).drawString(settings[trace+"tapp"].name, R.x+R.w/2, R.y+R.h/2);
}
diff --git a/apps/quicklaunch/boot.js b/apps/quicklaunch/boot.js
index 946a14308..99a6f7175 100644
--- a/apps/quicklaunch/boot.js
+++ b/apps/quicklaunch/boot.js
@@ -8,21 +8,36 @@
storage.write("quicklaunch.json", settings);
};
+ let leaveTrace = function(trace) {
+ settings.trace = trace;
+ storage.writeJSON("quicklaunch.json", settings);
+ return trace;
+ };
+
+ let launchApp = function(trace) {
+ if (settings[trace+"app"].src){
+ if (settings[trace+"app"].name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings[trace+"app"].src)) reset(trace+"app"); else load(settings[trace+"app"].src);
+ }
+ }
+
+ let trace;
+
Bangle.on("touch", (_,e) => {
if (!Bangle.CLOCK) return;
if (Bangle.CLKINFO_FOCUS) return;
let R = Bangle.appRect;
if (e.x < R.x || e.x > R.x2 || e.y < R.y || e.y > R.y2 ) return;
- if (settings.tapapp.src){ if (settings.tapapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.tapapp.src)) reset("tapapp"); else load(settings.tapapp.src); }
+ trace = leaveTrace("t"); // t=tap
+ launchApp(trace);
});
Bangle.on("swipe", (lr,ud) => {
if (!Bangle.CLOCK) return;
if (Bangle.CLKINFO_FOCUS) return;
-
- if (lr == -1 && settings.leftapp && settings.leftapp.src){ if (settings.leftapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.leftapp.src)) reset("leftapp"); else load(settings.leftapp.src); }
- if (lr == 1 && settings.rightapp && settings.rightapp.src){ if (settings.rightapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.rightapp.src)) reset("rightapp"); else load(settings.rightapp.src); }
- if (ud == -1 && settings.upapp && settings.upapp.src){ if (settings.upapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.upapp.src)) reset("upapp"); else load(settings.upapp.src); }
- if (ud == 1 && settings.downapp && settings.downapp.src){ if (settings.downapp.name == "Show Launcher") Bangle.showLauncher(); else if (!storage.read(settings.downapp.src)) reset("downapp"); else load(settings.downapp.src); }
+ if (lr == -1) trace = leaveTrace("l"); // l=left,
+ if (lr == 1) trace = leaveTrace("r"); // r=right,
+ if (ud == -1) trace = leaveTrace("u"); // u=up,
+ if (ud == 1) trace = leaveTrace("d"); // d=down.
+ launchApp(trace);
});
}
diff --git a/apps/quicklaunch/metadata.json b/apps/quicklaunch/metadata.json
index e38d25d09..c2e3029f7 100644
--- a/apps/quicklaunch/metadata.json
+++ b/apps/quicklaunch/metadata.json
@@ -2,7 +2,7 @@
"id": "quicklaunch",
"name": "Quick Launch",
"icon": "app.png",
- "version": "0.10",
+ "version": "0.14",
"description": "Tap or swipe left/right/up/down on your clock face to launch up to five apps of your choice. Configurations can be accessed through Settings->Apps.",
"type": "bootloader",
"tags": "tools, system",
diff --git a/apps/quicklaunch/screenshot0.png b/apps/quicklaunch/screenshot0.png
new file mode 100644
index 000000000..98bb25b5c
Binary files /dev/null and b/apps/quicklaunch/screenshot0.png differ
diff --git a/apps/quicklaunch/screenshot1.png b/apps/quicklaunch/screenshot1.png
new file mode 100644
index 000000000..04ada13cd
Binary files /dev/null and b/apps/quicklaunch/screenshot1.png differ
diff --git a/apps/quicklaunch/settings.js b/apps/quicklaunch/settings.js
index 39c2a13d6..fc6149ac7 100644
--- a/apps/quicklaunch/settings.js
+++ b/apps/quicklaunch/settings.js
@@ -2,10 +2,38 @@
var storage = require("Storage");
var settings = Object.assign(storage.readJSON("quicklaunch.json", true) || {});
-for (let c of ["leftapp","rightapp","upapp","downapp","tapapp","extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){
- if (!settings[c]) settings[c] = {"name":"(none)"};
+// Add default settings if they haven't been configured before.
+for (let c of ["lapp","rapp","uapp","dapp","tapp"]){ // l=left, r=right, u=up, d=down, t=tap.
+ if (!settings[c]) settings[c] = {"name":""};
}
+// Convert settings object from before v0.12 to v0.12.
+for (let c of ["leftapp","rightapp","upapp","downapp","tapapp"]){
+ if (settings[c]) {
+ let cNew = c.substring(0,1)+"app";
+ settings[cNew] = settings[c];
+ delete settings[c];
+ if (settings[cNew].name=="(none)") settings[cNew].name = "";
+
+ if (settings[cNew].name=="Quick Launch Extension"){
+ settings[cNew].name = "Extension";
+ for (let d of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){
+ if (settings[d]) {
+ let dNew = cNew.substring(0,1)+d.substring(3,4)+"app";
+ settings[dNew] = settings[d];
+ delete settings[d];
+ if (settings[dNew].name=="(none)") settings[dNew].name = "";
+ }
+ }
+ }
+ storage.writeJSON("quicklaunch.json",settings);
+ }
+}
+for (let d of ["extleftapp","extrightapp","extupapp","extdownapp","exttapapp"]){
+ if (settings[d]) delete settings[d];
+}
+
+
var apps = storage.list(/\.info$/).map(app=>{var a=storage.readJSON(app,1);return a&&{name:a.name,type:a.type,sortorder:a.sortorder,src:a.src};}).filter(app=>app && (app.type=="app" || app.type=="launch" || app.type=="clock" || !app.type));
// Add psuedo app to trigger Bangle.showLauncher later
@@ -17,12 +45,13 @@ apps.push({
});
// Add the Quick Launch extension app
-apps.push({
- "name": "Quick Launch Extension",
+let extension = {
+ "name": "Extension",
"type": "app",
"sortorder": -11,
"src": "quicklaunch.app.js"
- });
+ };
+apps.push(extension);
apps.sort((a,b)=>{
var n=(0|a.sortorder)-(0|b.sortorder);
@@ -32,9 +61,28 @@ apps.sort((a,b)=>{
return 0;
});
+function findPath(key) {return key.substring(0, key.length-3);}
+
function save(key, value) {
+ let path = findPath(key);
+ // If changing from extension app (to something else) remove downstream settings entries.
+ if (settings[key].name == extension.name && value.name != extension.name) {
+ for (let c of [path+"lapp", path+"rapp", path+"uapp", path+"dapp", path+"tapp"]) {
+ delete settings[c];
+ }
+ }
+
+ // If changing to extension app (from something else) add downstream settings entries.
+ if (value.name == extension.name && settings[key].name != extension.name) {
+ for (let c of [path+"lapp", path+"rapp", path+"uapp", path+"dapp", path+"tapp"]) {
+ settings[c] = {"name":""};
+ storage.write("quicklaunch.json",settings);
+ }
+ }
+
+ // Now change the setting on the current level in the path.
settings[key] = value;
- storage.write("quicklaunch.json",settings);
+ storage.writeJSON("quicklaunch.json",settings);
}
function showMainMenu() {
@@ -44,203 +92,43 @@ function showMainMenu() {
"< Back" : ()=>{load();}
};
- //List all selected apps
- mainmenu["Left: "+settings.leftapp.name] = function() { E.showMenu(leftmenu); };
- mainmenu["Right: "+settings.rightapp.name] = function() { E.showMenu(rightmenu); };
- mainmenu["Up: "+settings.upapp.name] = function() { E.showMenu(upmenu); };
- mainmenu["Down: "+settings.downapp.name] = function() { E.showMenu(downmenu); };
- mainmenu["Tap: "+settings.tapapp.name] = function() { E.showMenu(tapmenu); };
- mainmenu["Extend Quick Launch"] = showExtMenu;
+ // List all selected apps.
+ for (let key of Object.keys(settings)) {
+ if (key == "trace") continue;
+ let keyCurrent = key;
+ let entry = findPath(key).toUpperCase();
+ if (entry=="L") entry = "Left";
+ if (entry=="R") entry = "Right";
+ if (entry=="U") entry = "Up";
+ if (entry=="D") entry = "Down";
+ if (entry=="T") entry = "Tap";
+ // If no app is selected the name is an empty string, but we want to display "(none)".
+ let appName = settings[key].name==""?"(none)":settings[key].name;
+ mainmenu[entry+ ": "+appName] = function() {showSubMenu(keyCurrent);};
+ }
return E.showMenu(mainmenu);
}
-//Left swipe menu
-var leftmenu = {
- "" : { "title" : "Left Swipe" },
- "< Back" : showMainMenu
-};
-
-leftmenu["(none)"] = function() {
- save("leftapp", {"name":"(none)"});
- showMainMenu();
-};
-apps.forEach((a)=>{
- leftmenu[a.name] = function() {
- save("leftapp", a);
- showMainMenu();
- };
-});
-
-//Right swipe menu
-var rightmenu = {
- "" : { "title" : "Right Swipe" },
- "< Back" : showMainMenu
-};
-
-rightmenu["(none)"] = function() {
- save("rightapp", {"name":"(none)"});
- showMainMenu();
-};
-apps.forEach((a)=>{
- rightmenu[a.name] = function() {
- save("rightapp", a);
- showMainMenu();
- };
-});
-
-//Up swipe menu
-var upmenu = {
- "" : { "title" : "Up Swipe" },
- "< Back" : showMainMenu
-};
-
-upmenu["(none)"] = function() {
- save("upapp", {"name":"(none)"});
- showMainMenu();
-};
-apps.forEach((a)=>{
- upmenu[a.name] = function() {
- save("upapp", a);
- showMainMenu();
- };
-});
-
-//Down swipe menu
-var downmenu = {
- "" : { "title" : "Down Swipe" },
- "< Back" : showMainMenu
-};
-
-downmenu["(none)"] = function() {
- save("downapp", {"name":"(none)"});
- showMainMenu();
-};
-apps.forEach((a)=>{
- downmenu[a.name] = function() {
- save("downapp", a);
- showMainMenu();
- };
-});
-
-//Tap menu
-var tapmenu = {
- "" : { "title" : "Tap" },
- "< Back" : showMainMenu
-};
-
-tapmenu["(none)"] = function() {
- save("tapapp", {"name":"(none)"});
- showMainMenu();
-};
-apps.forEach((a)=>{
- tapmenu[a.name] = function() {
- save("tapapp", a);
- showMainMenu();
- };
-});
-
-function showExtMenu() {
- // Extend Quick Launch menu
- var extmenu = {
- "" : { "title" : "Extend Quick Launch" },
- "< Back" : ()=>{showMainMenu();}
+function showSubMenu(key) {
+ var submenu = {
+ "" : { "title" : "Path: "+findPath(key).toUpperCase()},
+ "< Back" : showMainMenu
};
+
+ submenu["(none)"] = function() {
+ save(key, {"name":""});
+ showMainMenu();
+ };
+ apps.forEach((a)=>{
+ submenu[a.name] = function() {
+ save(key, a);
+ showMainMenu();
+ };
+ });
- //List all selected apps
- extmenu["Left: "+settings.extleftapp.name] = function() { E.showMenu(extleftmenu); };
- extmenu["Right: "+settings.extrightapp.name] = function() { E.showMenu(extrightmenu); };
- extmenu["Up: "+settings.extupapp.name] = function() { E.showMenu(extupmenu); };
- extmenu["Down: "+settings.extdownapp.name] = function() { E.showMenu(extdownmenu); };
- extmenu["Tap: "+settings.exttapapp.name] = function() { E.showMenu(exttapmenu); };
-
- return E.showMenu(extmenu);
+ return E.showMenu(submenu);
}
-//Extension Left swipe menu
-var extleftmenu = {
- "" : { "title" : "Extension Left Swipe" },
- "< Back" : showExtMenu
-};
-
-extleftmenu["(none)"] = function() {
- save("extleftapp", {"name":"(none)"});
- showExtMenu();
-};
-apps.forEach((a)=>{
- extleftmenu[a.name] = function() {
- save("extleftapp", a);
- showExtMenu();
- };
-});
-
-//Extension Right swipe menu
-var extrightmenu = {
- "" : { "title" : "Extension Right Swipe" },
- "< Back" : showExtMenu
-};
-
-extrightmenu["(none)"] = function() {
- save("extrightapp", {"name":"(none)"});
- showExtMenu();
-};
-apps.forEach((a)=>{
- extrightmenu[a.name] = function() {
- save("extrightapp", a);
- showExtMenu();
- };
-});
-
-//Extension Up swipe menu
-var extupmenu = {
- "" : { "title" : "Extension Up Swipe" },
- "< Back" : showExtMenu
-};
-
-extupmenu["(none)"] = function() {
- save("extupapp", {"name":"(none)"});
- showExtMenu();
-};
-apps.forEach((a)=>{
- extupmenu[a.name] = function() {
- save("extupapp", a);
- showExtMenu();
- };
-});
-
-//Extension Down swipe menu
-var extdownmenu = {
- "" : { "title" : "Extension Down Swipe" },
- "< Back" : showExtMenu
-};
-
-downmenu["(none)"] = function() {
- save("extdownapp", {"name":"(none)"});
- showExtMenu();
-};
-apps.forEach((a)=>{
- extdownmenu[a.name] = function() {
- save("extdownapp", a);
- showExtMenu();
- };
-});
-
-//Extension Tap menu
-var exttapmenu = {
- "" : { "title" : "Extension Tap" },
- "< Back" : showExtMenu
-};
-
-exttapmenu["(none)"] = function() {
- save("exttapapp", {"name":"(none)"});
- showExtMenu();
-};
-apps.forEach((a)=>{
- exttapmenu[a.name] = function() {
- save("exttapapp", a);
- showExtMenu();
- };
-});
-
showMainMenu();
})
diff --git a/apps/runplus/metadata.json b/apps/runplus/metadata.json
index c605c438d..60860dc07 100644
--- a/apps/runplus/metadata.json
+++ b/apps/runplus/metadata.json
@@ -5,37 +5,16 @@
"description": "Displays distance, time, steps, cadence, pace and more for runners. Based on the Run app, but extended with additional screen for heart rate interval training.",
"icon": "app.png",
"tags": "run,running,fitness,outdoors,gps,karvonen,karvonnen",
- "supports": [
- "BANGLEJS2"
- ],
- "screenshots": [
- {
- "url": "screenshot.png"
- }
- ],
+ "supports": ["BANGLEJS2"],
+ "screenshots": [{"url": "screenshot.png"}],
"readme": "README.md",
"storage": [
- {
- "name": "runplus.app.js",
- "url": "app.js"
- },
- {
- "name": "runplus.img",
- "url": "app-icon.js",
- "evaluate": true
- },
- {
- "name": "runplus.settings.js",
- "url": "settings.js"
- },
- {
- "name": "runplus_karvonen",
- "url": "karvonen.js"
- }
+ {"name": "runplus.app.js", "url": "app.js"},
+ {"name": "runplus.img", "url": "app-icon.js", "evaluate": true},
+ {"name": "runplus.settings.js", "url": "settings.js"},
+ {"name": "runplus_karvonen", "url": "karvonen.js"}
],
"data": [
- {
- "name": "runplus.json"
- }
+ {"name": "runplus.json"}
]
}
diff --git a/apps/sched/ChangeLog b/apps/sched/ChangeLog
index 634250d48..92b04fb32 100644
--- a/apps/sched/ChangeLog
+++ b/apps/sched/ChangeLog
@@ -22,3 +22,4 @@
0.19: Update clock_info to refresh periodically on active alarms/timers
0.20: Alarm dismiss and snooze events
0.21: Fix crash in clock_info
+0.22: Dated event repeat option
diff --git a/apps/sched/README.md b/apps/sched/README.md
index c874b5577..2fb201cee 100644
--- a/apps/sched/README.md
+++ b/apps/sched/README.md
@@ -45,7 +45,9 @@ Alarms are stored in an array in `sched.json`, and take the form:
// eg (new Date()).toISOString().substr(0,10)
msg : "Eat food", // message to display.
last : 0, // last day of the month we alarmed on - so we don't alarm twice in one day! (No change from 0 on timers)
- rp : true, // repeat the alarm every day?
+ rp : true, // repeat the alarm every day? If date is given, pass an object instead of a boolean,
+ // e.g. repeat every 2 months: { interval: "month", num: 2 }.
+ // Supported intervals: day, week, month, year
vibrate : "...", // OPTIONAL pattern of '.', '-' and ' ' to use for when buzzing out this alarm (defaults to '..' if not set)
hidden : false, // OPTIONAL if false, the widget should not show an icon for this alarm
as : false, // auto snooze
diff --git a/apps/sched/metadata.json b/apps/sched/metadata.json
index 42c3aaa12..1a4a64994 100644
--- a/apps/sched/metadata.json
+++ b/apps/sched/metadata.json
@@ -1,7 +1,7 @@
{
"id": "sched",
"name": "Scheduler",
- "version": "0.21",
+ "version": "0.22",
"description": "Scheduling library for alarms and timers",
"icon": "app.png",
"type": "scheduler",
diff --git a/apps/sched/sched.js b/apps/sched/sched.js
index f2f2644f9..3deb9d1f0 100644
--- a/apps/sched/sched.js
+++ b/apps/sched/sched.js
@@ -42,7 +42,9 @@ function showAlarm(alarm) {
if (del) {
alarms.splice(alarmIndex, 1);
} else {
- if (!alarm.timer) {
+ if (alarm.date && alarm.rp) {
+ setNextRepeatDate(alarm);
+ } else if (!alarm.timer) {
alarm.last = new Date().getDate();
}
if (alarm.ot !== undefined) {
@@ -78,6 +80,35 @@ function showAlarm(alarm) {
});
}
+ function setNextRepeatDate(alarm) {
+ let date = new Date(alarm.date);
+ let rp = alarm.rp;
+ if (rp===true) { // fallback in case rp is set wrong
+ date.setDate(date.getDate() + 1);
+ } else switch(rp.interval) { // rp is an object
+ case "day":
+ date.setDate(date.getDate() + rp.num);
+ break;
+ case "week":
+ date.setDate(date.getDate() + (rp.num * 7));
+ break;
+ case "month":
+ if (!alarm.od) alarm.od = date.getDate();
+ date = new Date(date.getFullYear(), date.getMonth() + rp.num, alarm.od);
+ if (date.getDate() != alarm.od) date.setDate(0);
+ break;
+ case "year":
+ if (!alarm.od) alarm.od = date.getDate();
+ date = new Date(date.getFullYear() + rp.num, date.getMonth(), alarm.od);
+ if (date.getDate() != alarm.od) date.setDate(0);
+ break;
+ default:
+ console.log(`sched: unknown repeat '${JSON.stringify(rp)}'`);
+ break;
+ }
+ alarm.date = date.toLocalISOString().slice(0,10);
+ }
+
if ((require("Storage").readJSON("setting.json", 1) || {}).quiet > 1)
return;
diff --git a/apps/torch/metadata.json b/apps/torch/metadata.json
index 4e8794663..6837dc904 100644
--- a/apps/torch/metadata.json
+++ b/apps/torch/metadata.json
@@ -7,6 +7,7 @@
"icon": "app.png",
"tags": "tool,torch",
"supports": ["BANGLEJS","BANGLEJS2"],
+ "readme":"README.md",
"storage": [
{"name":"torch.app.js","url":"app.js"},
{"name":"torch.wid.js","url":"widget.js","supports": ["BANGLEJS"]},
diff --git a/apps/waypoint_editor/ChangeLog b/apps/waypoint_editor/ChangeLog
new file mode 100644
index 000000000..5560f00bc
--- /dev/null
+++ b/apps/waypoint_editor/ChangeLog
@@ -0,0 +1 @@
+0.01: New App!
diff --git a/apps/waypoint_editor/README.md b/apps/waypoint_editor/README.md
new file mode 100644
index 000000000..f9c603a84
--- /dev/null
+++ b/apps/waypoint_editor/README.md
@@ -0,0 +1,3 @@
+# Waypoints
+
+Simple waypoint editor.
diff --git a/apps/waypoint_editor/app-icon.js b/apps/waypoint_editor/app-icon.js
new file mode 100644
index 000000000..49232b838
--- /dev/null
+++ b/apps/waypoint_editor/app-icon.js
@@ -0,0 +1 @@
+require("heatshrink").decompress(atob("mEwwJC/AH4A/AH4AgA=="))
diff --git a/apps/waypoint_editor/app.js b/apps/waypoint_editor/app.js
new file mode 100644
index 000000000..34b3d8ef4
--- /dev/null
+++ b/apps/waypoint_editor/app.js
@@ -0,0 +1,273 @@
+/* Thanks to pinsafe from BangleApps repository */
+
+var Layout = require("Layout");
+
+const W = g.getWidth();
+const H = g.getHeight();
+
+var wp = require('Storage').readJSON("waypoints.json", true) || [];
+// Use this with corrupted waypoints
+//var wp = [];
+/* 0 .. DD.ddddd
+ 1 .. DD MM.mmm'
+ 2 .. DD MM'ss"
+*/
+var mode = 1;
+
+function writeWP() {
+ require('Storage').writeJSON("waypoints.json", wp);
+}
+
+function mainMenu() {
+ var menu = {
+ "< Back" : Bangle.load
+ };
+ if (Object.keys(wp).length==0) Object.assign(menu, {"NO WPs":""});
+ else for (let id in wp) {
+ let i = id;
+ menu[wp[id]["name"]]=()=>{ decode(i); };
+ }
+ menu["Add"]=addCard;
+ menu["Remove"]=removeCard;
+ menu["Format"]=setFormat;
+ g.clear();
+ E.showMenu(menu);
+}
+
+function setFormat() {
+ var confirmRemove = new Layout (
+ {type:"v", c: [
+ {type:"txt", font:"15%", pad:1, fillx:1, filly:1, label:"Format"},
+ {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label: "DD.dddd", cb:l=>{ mode = 0; mainMenu(); }},
+ {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label: "DD MM.mmm'", cb:l=>{ mode = 1; mainMenu(); }},
+ {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label: "DD MM'ss"+'"', cb:l=>{ mode = 2; mainMenu(); }},
+ ], lazy:true});
+ g.clear();
+ confirmRemove.render();
+}
+
+function format(x) {
+ switch (mode) {
+ case 0:
+ return "" + x;
+ case 1:
+ d = Math.floor(x);
+ m = x - d;
+ m = m*60;
+ return "" + d + " " + m + "'";
+ case 2:
+ d = Math.floor(x);
+ m = x - d;
+ m = m*60;
+ mf = Math.floor(m);
+ s = m - mf;
+ s = s*60;
+ return "" + d + " " + mf + "'" + s + '"';
+ }
+}
+
+function lat(x) {
+ c = "N";
+ if (x<0) {
+ c = "S";
+ x = -x;
+ }
+ return c+format(x);
+}
+
+function lon(x) {
+ c = "E";
+ if (x<0) {
+ c = "W";
+ x = -x;
+ }
+ return c+format(x);
+}
+
+function decode(pin) {
+ print(pin);
+ var i = wp[pin];
+ var pinDecrypted=i["name"] + "\n" + lat(i["lat"]) + "\n" + lon(i["lon"]);
+ var showPin = new Layout ({
+ type:"v", c: [
+ {type:"txt", font:"10%", pad:1, fillx:1, filly:1, label: pinDecrypted},
+ {type:"btn", font:"10%", pad:1, fillx:1, filly:1, label:"OK", cb:l=>{mainMenu();}}
+ ], lazy:true});
+ g.clear();
+ showPin.render();
+}
+
+function showNumpad(text, key_, callback) {
+ key = key_;
+ E.showMenu();
+ function addDigit(digit) {
+ key+=digit;
+ if (1) {
+ l = text[key.length];
+ switch (l) {
+ case '.': case ' ': case "'":
+ key+=l;
+ break;
+ case 'd': case 'D': default:
+ break;
+ }
+ }
+ Bangle.buzz(20);
+ update();
+ }
+ function update() {
+ g.reset();
+ g.clearRect(0,0,g.getWidth(),23);
+ s = key + text.substr(key.length, 999);
+ g.setFont("Vector:24").setFontAlign(1,0).drawString(s,g.getWidth(),12);
+ }
+ ds="12%";
+ var numPad = new Layout ({
+ type:"v", c: [{
+ type:"v", c: [
+ {type:"", height:24},
+ {type:"h",filly:1, c: [
+ {type:"btn", font:ds, width:58, label:"7", cb:l=>{addDigit("7");}},
+ {type:"btn", font:ds, width:58, label:"8", cb:l=>{addDigit("8");}},
+ {type:"btn", font:ds, width:58, label:"9", cb:l=>{addDigit("9");}}
+ ]},
+ {type:"h",filly:1, c: [
+ {type:"btn", font:ds, width:58, label:"4", cb:l=>{addDigit("4");}},
+ {type:"btn", font:ds, width:58, label:"5", cb:l=>{addDigit("5");}},
+ {type:"btn", font:ds, width:58, label:"6", cb:l=>{addDigit("6");}}
+ ]},
+ {type:"h",filly:1, c: [
+ {type:"btn", font:ds, width:58, label:"1", cb:l=>{addDigit("1");}},
+ {type:"btn", font:ds, width:58, label:"2", cb:l=>{addDigit("2");}},
+ {type:"btn", font:ds, width:58, label:"3", cb:l=>{addDigit("3");}}
+ ]},
+ {type:"h",filly:1, c: [
+ {type:"btn", font:ds, width:58, label:"0", cb:l=>{addDigit("0");}},
+ {type:"btn", font:ds, width:58, label:"C", cb:l=>{key=key.slice(0,-1); update();}},
+ {type:"btn", font:ds, width:58, id:"OK", label:"OK", cb:callback}
+ ]}
+ ]}
+ ], lazy:true});
+ g.clear();
+ numPad.render();
+ update();
+}
+
+function removeCard() {
+ var menu = {
+ "" : {title : "select card"},
+ "< Back" : mainMenu
+ };
+ if (Object.keys(wp).length==0) Object.assign(menu, {"NO CARDS":""});
+ else for (let c in wp) {
+ let card=c;
+ menu[c]=()=>{
+ E.showMenu();
+ var confirmRemove = new Layout (
+ {type:"v", c: [
+ {type:"txt", font:"15%", pad:1, fillx:1, filly:1, label:"Delete"},
+ {type:"txt", font:"15%", pad:1, fillx:1, filly:1, label:card+"?"},
+ {type:"h", c: [
+ {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label: "YES", cb:l=>{
+ delete wp[card];
+ writeWP();
+ mainMenu();
+ }},
+ {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label: " NO", cb:l=>{mainMenu();}}
+ ]}
+ ], lazy:true});
+ g.clear();
+ confirmRemove.render();
+ };
+ }
+ E.showMenu(menu);
+}
+
+function ask01(t, cb) {
+ var confirmRemove = new Layout (
+ {type:"v", c: [
+ {type:"txt", font:"15%", pad:1, fillx:1, filly:1, label:"Format"},
+ {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label: t[0], cb:l=>{ cb(1); }},
+ {type:"btn", font:"15%", pad:1, fillx:1, filly:1, label: t[1], cb:l=>{ cb(-1); }},
+ ], lazy:true});
+ g.clear();
+ confirmRemove.render();
+}
+
+
+function askCoordinate(t1, t2, callback) {
+ let sign = 1;
+ ask01(t1, function(sign) {
+ switch (mode) {
+ case 0: s = "DDD.dddd"; break;
+ case 1: s = "DDD MM.mmm"; break;
+ case 2: s = "DDD MM'ss"+'"'; break;
+ }
+ showNumpad(s, t2, function() {
+ switch (mode) {
+ case 0:
+ res = parseFloat(key);
+ break;
+ case 1:
+ d = parseInt(key.substr(0, 3));
+ m = parseFloat(key.substr(3,99));
+ res = d + m/60.0;
+ break;
+ case 2:
+ d = parseInt(key.substr(0, 3));
+ m = parseInt(key.substr(4, 2));
+ s = parseInt(key.substr(7, 2));
+ res = d + m/60.0 + s/3600.0;
+ }
+ res = sign * res;
+ print("Coordinate", res);
+ callback(res);
+ });
+ });
+}
+
+function askPosition(callback) {
+ let full = "";
+ askCoordinate("NS", "0", function(lat) {
+ askCoordinate("EW", "", function(lon) {
+ callback(lat, lon);
+ });
+ });
+}
+
+function addCard() {
+ showNumpad("wpXX", "wp", function() {
+ result = key;
+ if (wp[result]!=undefined) {
+ E.showMenu();
+ var alreadyExists = new Layout (
+ {type:"v", c: [
+ {type:"txt", font:Math.min(15,100/result.length)+"%", pad:1, fillx:1, filly:1, label:result},
+ {type:"txt", font:"12%", pad:1, fillx:1, filly:1, label:"already exists."},
+ {type:"h", c: [
+ {type:"btn", font:"10%", pad:1, fillx:1, filly:1, label: "REPLACE", cb:l=>{encodeCard(result);}},
+ {type:"btn", font:"10%", pad:1, fillx:1, filly:1, label: "CANCEL", cb:l=>{mainMenu();}}
+ ]}
+ ], lazy:true});
+ g.clear();
+ alreadyExists.render();
+ }
+ g.clear();
+ askPosition(function(lat, lon) {
+ print("position -- ", lat, lon);
+ let n = {};
+ n["name"] = result;
+ n["lat"] = lat;
+ n["lon"] = lon;
+ wp.push(n);
+ print("add -- waypoints", wp);
+ writeWP();
+ mainMenu();
+ });
+ });
+}
+
+
+g.reset();
+Bangle.setUI();
+mainMenu();
diff --git a/apps/waypoint_editor/app.png b/apps/waypoint_editor/app.png
new file mode 100644
index 000000000..e97f1bb7b
Binary files /dev/null and b/apps/waypoint_editor/app.png differ
diff --git a/apps/waypoint_editor/metadata.json b/apps/waypoint_editor/metadata.json
new file mode 100644
index 000000000..f48721732
--- /dev/null
+++ b/apps/waypoint_editor/metadata.json
@@ -0,0 +1,13 @@
+{ "id": "waypoint_editor",
+ "name": "Waypoint editor",
+ "version":"0.01",
+ "description": "Allows editing waypoints on device",
+ "icon": "app.png",
+ "readme": "README.md",
+ "supports" : ["BANGLEJS2"],
+ "tags": "tool,outdoors,gps",
+ "storage": [
+ {"name":"waypoint_editor.app.js","url":"app.js"},
+ {"name":"waypoint_editor.img","url":"app-icon.js","evaluate":true}
+ ]
+}
diff --git a/apps/widChargingStatus/metadata.json b/apps/widChargingStatus/metadata.json
index 573c594e7..63a59fe41 100644
--- a/apps/widChargingStatus/metadata.json
+++ b/apps/widChargingStatus/metadata.json
@@ -6,7 +6,8 @@
"type": "widget",
"description": "A simple widget that shows a yellow lightning icon to indicate whenever the watch is charging. This way one can see the charging status at a glance, no matter which battery widget is being used.",
"tags": "widget",
- "supports": ["BANGLEJS","BANGLEJS2"],
+ "supports": ["BANGLEJS","BANGLEJS2"],
+ "readme":"README.md",
"storage": [
{"name":"widChargingStatus.wid.js","url":"widget.js"}
]
diff --git a/apps/widdevst/ChangeLog b/apps/widdevst/ChangeLog
index addaa5326..cee46ac6a 100644
--- a/apps/widdevst/ChangeLog
+++ b/apps/widdevst/ChangeLog
@@ -1,2 +1,3 @@
0.01: First version
0.02: Support for Bangle.js 2
+0.03: Update storage usage and perform GC every minute
diff --git a/apps/widdevst/metadata.json b/apps/widdevst/metadata.json
index 91d6265fe..f2be2bec8 100644
--- a/apps/widdevst/metadata.json
+++ b/apps/widdevst/metadata.json
@@ -1,6 +1,6 @@
{ "id": "widdevst",
"name": "Device Status Widget",
- "version": "0.02",
+ "version": "0.03",
"description": "Shows power status of Bluetooth, Compass, GPS and Heart Rate Monitor as well as storage and memory usage.",
"icon": "icon.png",
"type": "widget",
diff --git a/apps/widdevst/wid.js b/apps/widdevst/wid.js
index 06eb20cdd..3cd5758ab 100644
--- a/apps/widdevst/wid.js
+++ b/apps/widdevst/wid.js
@@ -1,22 +1,31 @@
(() => {
- WIDGETS.devst = {area: "tr", width: 21, draw: function() {
+ var stat = {date: 0};
+
+ WIDGETS.devst = {area: "tr", width: 22, draw: function() {
if (WIDGETS.devst._draw) return;
+ var d = new Date();
+ var t;
+ if ((d - stat.date) < 6e4) {
+ t = process.memory(false);
+ } else {
+ stat.date = d;
+ t = require('Storage').getStats();
+ stat.sto = t.fileBytes / t.totalBytes;
+ t = process.memory();
+ }
+ t = t.usage / t.total;
var x = this.x;
var y = this.y;
g.reset();
- g.clearRect(x, y, x + 20, y + 23);
- g.drawRect(x + 1, y + 1, x + 19, y + 22);
+ g.clearRect(x, y, x + 21, y + 23);
+ g.drawRect(x + 2, y + 1, x + 20, y + 21);
g.setFont('6x8', 1);
- if (NRF.getSecurityStatus().connected) g.drawString('B', x + 4, y + 3);
- if (Bangle.isCompassOn()) g.drawString('C', x + 12, y + 3);
- if (Bangle.isGPSOn()) g.drawString('G', x + 4, y + 13);
- if (Bangle.isHRMOn()) g.drawString('H', x + 12, y + 13);
- var t = require('Storage').getStats();
- var u = t.fileBytes / t.totalBytes;
- g.setColor(col(u)); g.drawRect(x + 1, y + 22, x + 1 + u * 18, y + 23);
- t = process.memory(false);
- u = t.usage / t.total;
- g.setColor(col(u)); g.drawRect(x, y + 22 - u * 21, x + 1, y + 22);
+ if (NRF.getSecurityStatus().connected) g.drawString('B', x + 5, y + 3);
+ if (Bangle.isCompassOn()) g.drawString('C', x + 13, y + 3);
+ if (Bangle.isGPSOn()) g.drawString('G', x + 5, y + 12);
+ if (Bangle.isHRMOn()) g.drawString('H', x + 13, y + 12);
+ g.setColor(col(stat.sto)); g.drawRect(x + 2, y + 21, x + 2 + stat.sto * 18, y + 22);
+ g.setColor(col(t)); g.drawRect(x + 1, y + 21 - t * 20, x + 2, y + 21);
}};
function col(p) {
diff --git a/bin/lib/apploader.js b/bin/lib/apploader.js
index 329ece7b7..c1aaa5389 100644
--- a/bin/lib/apploader.js
+++ b/bin/lib/apploader.js
@@ -26,8 +26,10 @@ var device = { id : DEVICEID, appsInstalled : [] };
// call with {DEVICEID:"BANGLEJS/BANGLEJS2"}
exports.init = function(options) {
- if (options.DEVICEID)
+ if (options.DEVICEID) {
DEVICEID = options.DEVICEID;
+ device.id = options.DEVICEID;
+ }
// Load app metadata
var dirs = require("fs").readdirSync(APPSDIR, {withFileTypes: true});
dirs.forEach(dir => {
diff --git a/bin/sanitycheck.js b/bin/sanitycheck.js
index 82b2896b8..b27e4e26d 100755
--- a/bin/sanitycheck.js
+++ b/bin/sanitycheck.js
@@ -162,7 +162,14 @@ apps.forEach((app,appIdx) => {
ERROR(`App ${app.id} screenshot file ${screenshot.url} not found`, {file:metadataFile});
});
}
- if (app.readme && !fs.existsSync(appDir+app.readme)) ERROR(`App ${app.id} README file doesn't exist`, {file:metadataFile});
+ if (app.readme) {
+ if (!fs.existsSync(appDir+app.readme))
+ ERROR(`App ${app.id} README file doesn't exist`, {file:metadataFile});
+ } else {
+ let readme = fs.readdirSync(appDir).find(f => f.toLowerCase().includes("readme"));
+ if (readme)
+ ERROR(`App ${app.id} has a README in the directory (${readme}) but it's not linked`, {file:metadataFile});
+ }
if (app.custom && !fs.existsSync(appDir+app.custom)) ERROR(`App ${app.id} custom HTML doesn't exist`, {file:metadataFile});
if (app.customConnect && !app.custom) ERROR(`App ${app.id} has customConnect but no customn HTML`, {file:metadataFile});
if (app.interface && !fs.existsSync(appDir+app.interface)) ERROR(`App ${app.id} interface HTML doesn't exist`, {file:metadataFile});
diff --git a/core b/core
index 0d02ff376..425c4a98a 160000
--- a/core
+++ b/core
@@ -1 +1 @@
-Subproject commit 0d02ff3763783d166ff84906af038420736aabfc
+Subproject commit 425c4a98aed7c4d9b640e37463b534a45a20def7
diff --git a/lang/ja_JA.json b/lang/ja_JA.json
index f0a1481f8..8caff782b 100644
--- a/lang/ja_JA.json
+++ b/lang/ja_JA.json
@@ -1,123 +1,123 @@
{
"// created with bin/language_render.js": "",
"GLOBAL": {
- "New Alarm": "\u0000]\u0010\u0000\u0010\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@#ü \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001fÞ\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000$HCà#\u0000\u0000\u0002\u0002$\u0001\"Aá\u0000à\u0000\u0000\u0000\u0010\n Ò\u0000\u0010\u00008\u0000\u0000\u0000ýøH\t\u0000@\u0000\u0000\b\u0001\t\u0004@0\u0003\b\u001f\u0000@\bH\"\u0014\u0001\u0000\u0000\u0010?\u0000\u0002CúB\b@\b\u0000\u0001\u0000\u0000\u0000!\u0002\u0012 @\u0000@\u0000\b\u0000\u0000\u0001\fTð\u0004\u0000\u0000\u0000\u0000S\u0010\u0000 \u0000\b\u0000\u0000\u0001àÄD\u0000\u0002\u0000\u0001\u0000\u0000\u0000\u0000¢#ÿø \u00000\u0000\u0000\u0000\u0000\u0002!\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
- "New Timer": "\u0000]\u0010\u0000\u0010\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@#ü \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001fÞ\u0004\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000$H\u0002\u0000\u0000@\u0000\u0000\u0000\u0002$\u0001\"@\u001f\u0000\u0004\u0002\u000f\u0000\u0000\n Ò\u0001\b\u0000@\u000f\u0000\u0003ýøH\b\f\u0000\u0000@\u0000\u0001\t\u0004@¤\u0001 \u0000\u0004\b\u001f\bH\"\u0014\bÀ0\u0000@?\u0003úB\b@\u0000\u0004\u0000d\u0000\u0000\u0002\u0012 @\u0000 \u0000 \u0000À\u0000\u0000Tð\u0002\u0000\u0001\u0000\u0001\u0000\u0000\u0004\u0010\u0000 \u0000\b\u0000\u0004\u0000\u0000DD\u0000\u0006\u0000\u0000@\u0000\u0000\u0000\u0000¢#ÿøÀ\u0000\u0002\u0000\u0000\u0000\u0000\u0002!\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
+ "New Alarm": "\u0000l\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\b\u0010\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\b\u0000Oð@\b|\u0004p\u0000\u0000\u0000@\u0004°\u0004\u0004\u001fx@8\u0000\u0000\u0000\u0004\u0000<\u0000\b\u0013ù\u0010\b\u0000\u001c\u0000\u0000\u0000@\u0001\u0000\u0000ÿ\u0004\t\u0000@\u0000\u0000\b\u0000\u0010È\u0000I\u0010`\u0007\u0004\u0010>\u0000\u0003Î\u0004\u0004\u0004\u0000\u0000@ü\u0000\t\u0000c\u0000OøI\u0010@\u0000\b\u0000\u0000\u0001\b\b`\u0004\u0004\u0000\u0000\u0000\u0000\u0010À\n\u0000H\bI\u0010\u0000\u0010\u0000\u0000\nr\u0001 \u0004ÿ\b\u0000\u0002\u0000\u0000\u0000x \u0000H\b\u0011\u0000\u0000À\u0000\u0000\u0000\u0000\u0002\u0000\n\u0000\b \u00000\u0000\u0000\u0000\u0000\u0000\u001f\u001fù)\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000!\u0000",
+ "New Timer": "\u0000l\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\b\u0010\u0004\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000Oð@\u0000@\u0000\b\u0000\u0000\u0000\u0000\u0004°\u0004\u0004\u001f\u0007À\u0001\u0000À\u0000\u0000<\u0000\b\u0013ù\u0010\u0000 \u0007Â\u0000\u0000\u0001\u0000\u0000ÿ\u0004\b\f\u0000\u0000@\u0000\u0000\u0010È\u0000I\u0011H\u0003@\u0000\b\u0010>\u0003Î\u0004\u0004#\u0000Â\u0000\u0001\u0000ü\u0000c\u0000OøI\u0014\u0010\u0000 \u0003 \u0000\u0000\b`\u0004\u0002\u0000\u0002\u0000\f\u0000\u0000\u0000\n\u0000H\bI\u0010@\u0000 \u0000 \u0000\u0000\u0001 \u0004ÿ\b\u0000\u0002\u0000\u0001\u0000\u0000\u0000 \u0000H\b\u0013\u0000\u0000 \u0000\u0000\u0000\u0000\u0002\u0000\n\u0000\bÀ\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u001f\u001fù)\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000!\u0000",
"Save": "\u0000\u001f\u0010\u0000\b\u0000\u0004\u0000\u0017ð\b\u0000(#ÿø@@\u0001 \u0006\u0002\f\u0010\u0004\u0004( \u0018\u0010üP@!Á/üE@A\u0000@\u0001DA\u0004\u0003\bB\b\u0004\u0010\u0004P\b \b@",
- "Keep Msgs": "\u0000F\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002 \u0000\u0000\u0000\u0002\u0010\u0000\u0010\t\u0007\fÇG¨!!1\u00003!\"!À\u0000´\u0003óò\u0010\u0002Ñ!\b\b\b@\bA\u0001¤ !\u0000!\u0001\u0010\u0001Ä\u0000x\u0011áâà\u0002\u0011â\u0011à\u0000\u0000\b\u0000\u0000\u0000\b@\u0000\u0000\u0000 \u0000\u0000\u0000\u001e\u0000",
- "circle count": "\u0000y\r\u0000\u0002\u0000\u0000\u0000\u0010\u0000\u0000\u0000\b\u0000\b\u0000\u0000\u0000 \u0010\u0000\u0000\u0004à\u0002\u0000\u0002\u0000\u0002\u0000\u0000\u0000\b\u0004@\u0000\u0000\u0003\b\u0001\u0000\u0001\u0000\u0018\u0000\u0004\u0002 \u0000\u0000\u0001\u0010\u0002@\u0010ø\u0000ø\u0002\u0004\u0002\t>\u0000\u0000\u0001\b\u0001 \u0007Ä\u000f\u0000\u0001\u0003è\b\u001f\u0000\u0000\u0000B\u0002\u0002\u0000\u0002\u0000àD\u0003ð\u0000\u0000H!\u0001\u0002\u0000\u0001\u0000L\"\u0000\u0000\u0000\u0000$!\u0000A\u0000\u0001\u0000!\u0011\u0000\u0000\u0000\u0002\u0000\"@\u0010!\u0000\u0001\u0000\u0010\u0001\u0000\u0000\u0000\u0002\u0000\u0011@\u0010@\u0000\u0001\u0000\b\u0000\u0000\u0000\u0002\u0000\u0010À\u0011@\u0000\u0013\u0000\u0004\u0000\u0000\u0000\u0002\u0000\u0010@\u0010`\u0000\u0006\u0000\u0002\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0001\u0000",
- "(repeat)": "\u0000J\u0010\u0000\u0000à\u0000\u0000\u0000@\u0000\u0000\u0000\"\b \u0000@x\u0000\u0000\u0000\u0010\u0004À\tà\b\u0000\u0000
?H\u0002@\u0001\u0000\u0004B@\u0000a\u0000\u0010\u0000@\u0000ç¼\u0018@\u0007ø\u0010\u0000(\t)\u0004\u0010y\u0002\u0004\u0000\u0006\u0004JA\u0004\u0002Q\u0001\u0000\u0001^ðA\u0000@\u0000að@\u0010@$@\u0010\u0000\u0018\u0005ÿ\u0000 \t(\u0004\u0004\u0006\u0000\u000e\u0000\b\u0002\u0001\u0002\u0001EE@\u0004\u0000¨ #\u0000RH\u0002\u0000P\u0000\u0007\u0000\"C\u0011\u0001\u0000#ÿ\u0000\u0000\u0010\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
+ "Keep Msgs": "\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u000bø\u0010 \u0001\u0000\u0000\u0000\u0010\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0002\u0000\u0002\u0004\b\u0000 \u00020\u0002\u0000\u0000\u0000@\u0000\u0000\u0000ÂA,\u0001 \u001fÄ\u000ft\u0000\u0000\u0000\u0010\u0000\u0000\u0000\bP<\u0000H#ðþ\u0000\u0002\u0000 \u0000\u0000\u0004x\u0000\u0000\u0000\u0010\u0004\u00003ø\u0010 \u0000\u0001\u0001\u0000\u0000\u0001b\u0000\u0000\u0006\u0000\u0001\b\f\u0010\u0004ÿà\u0000\u001c\u0000D\u0002a\u0004\u000f@ó
\u0004\u0001\u0000L\u0000|\u0001\u0000Hpü\u0000\u0000@c\u0002_ð` \u0011\u00000 \n \u0004@\u0000\u0000\u0000 !\u0010à3þ\u0003À\u0010\u0010$\u0002\u0010\u0001\u0000\u0000\u0000\u0000\u0010\u0000 \u0004T4\u0002\u0000\u0010\b\u0004\u0010\u0000\u0004\u0000@\u0000\u0000\u0000\b\u0000H\u0001$\b\b\u00009\b\u0000\u0002\u0000\b\u0000\u0000\u0000L\u0000 \u0000Q\u0010A \u0002\u0000\u0011\u0000\u0001\u0000\u0001ð\u0000\u0000\f\u0000\b\u0000\u0018B\u0010\b\u0001\u0000\u0004L\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001ø\u0004\u0010\u0014\n\u0000\u0000à\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0004\u0002\u0001\u0000\u0000\u0000\u0000",
+ "circle count": "\u0000]\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t$\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000* B\u0000\u0000\u0000\u0013\b\u0000\u001e\u0000Añ\u0010\u0000\u0000\u0000ä\u0002 \u0003H?Ñ\b\u0000\u0000\u0004@\t\u0000\" TO\u0000\u0000B\u0000H\u0001\u0010O |\u0002 \u0002D\u0011\u0004DR\u0011\u0000ü\u0000!\u0000\u0012 @ \u0000\u0000\u0002\u0010\u0000\u0004\u001fÅ\u0004@\u0000\u0000\u0000\b$\u0010\"\u0010\u0004\u0000\u0000\u0000\b\u0000E\u0001@\u0010 \u0000\u0000\u0000\u00040\u0004\u0018\u0019\n\u0002\u0000\u0000\u0000\b\u0000A\u0000\u0003\u00000P \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003D@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000aA",
+ "(repeat)": "\u0000J\r\u0000\u0000\u0002\u0000\u0001\u0000\u0000@\u0000\b\u0010@ \u0000\u0000\b\u0000D\u0002\u0010\u0004$\u0000\u0000\u0002\u0000\t\u0000\u0001\u0006\u0000\u0000\u0000\u0002!\u0000@\u0000\u0000\u0000 \u0000`\b@\u0011Àð\u000e\u0000\u0018\u0002\u0010\u0007\u001f\u0002`\u0006\u0000\u0001\u0000\u0000\u0000\u0000\u0001\u0002\u0000@\u0000\u0000\u0000 \u0000`\u0000\u0010\u0000\u0000\u0000\b\u0000\u0014\u0000@\u0002\u0000\u0000\u0000\u0002\u0000\t\u0000 \u0000~\u0000\u0000\u0000\u0002 \u0010\u0000\u0000\u0000\u0000\u0000 \u0001\u0000",
"music": "\u0000\u001f\u0010\u0000\u0002\u0000\u0001\u0000\u0002\u0000\bÿà \u0000\u0000¢\u0000D\u0000\u0002ú?ÿ\u0012\u0000\u0000b\"\u001fð\u0007À \u0002\u0000@Cÿøÿ*\u0001\u0001\u0000\u0002\u0002\u0006#\u0007ü0A\b\u0000",
"Auto snooze": "\u0000l\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0010\u0000CCÀ\u0000\u0000P\u0010\u0000\u0000\u0001\u0000\u0003È\u0003Ä\u0000\u0000\u0007à\u0000\u0000\u0010\u0000\u0001\u0000\u0000\u0000\u0000\u0002\u0007ð\u0000\u0000\u0001\u0000\u0000\u0010\u0000\b\u0000\u0000\u0000 \u0003\u0001\u0003à\u001c\u0000\u0002\u00009\u0001\u0003à\u0004\u0000P\u000fÀ\u00010\u0000 \u0000p\u000fÀ\u0000@\t\u0000\u0000\u0000\u0010\u0005\u0000\u0003\u0000\u0000\u0000\n\u0001\u0010\u0000\u0000\u0001\u0000\u0000\u0000H\u0000\u0000\u0001\u0010!\u0000\u0000\u0000\u0010\u00000@\b@\u0000\u0000`\u0010\u0000\u0000\u0001\u0000\f\u0004\u0003\u0004\u0000\u0000\u0018\b\u0003\u0000\u0000\u0000\u0010\u0000\u0000\u0000À\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
- "week": "\u0000:\r\u0000\b\u0000\u0000\u0000\u0000\u0000\u0010\u0001\u0000\u0000\u0000\u0000\u0000\u0002p@\u0000\u0000\u0000\u0000\u0000ä\u001f\u0000\u0002\u0000\u0000\u0000\"ø@\u0001\u0000\u0000\u0000\u0010\u0010\u0000@ø\u0004D\b\u0000à\u000fÀ\u0002\u0010\u0001È\u0000\u0000\u0001\b!\u0000\u0002\u0000\u0000\u0000\u0002\u0000@\u0000\u0000\u0000\u0001\u0000 \u0000 \u0000\u0000\u0000\u0010\u0000\b\u0000\u0000\u0000@\b\u0000\u0002\u0000\u0000\u0000 \u0000",
+ "week": "\u0000\u001d\u000f\u0000Gü|ù\"\"$I\u0011\u001f>\u000bè\u0010DGÏóþ \u0004\u0011?$¾\t%\u0014OÉ/¢BI\u0001\u0013òP\u0018\u0000\u0004\u0000Çÿ \u0014\u0000\u0001\u0000@",
"circle 1": "\u0000E\r\u0000\u0002\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0001\b\u0000\u0000\u0000N\u0000 \u0000\u0004@\u0000\u0000\u0003\b\b\"\u0000\u0000\u0000\u0011\u0000$\u0000É>\u0000\u0000\u0001\b\u0001 \n>ð\b\t\u0010\u0010D\u0003ð\u0000\u0000H \u0000\u0000\b@\u0002H\u0004\u0011\u0000\u0000\u0000\u0002\u0000\"@ \u0010\u0000\u0000\u0000 \u0001\u0014\u0001\u0000\u0000\u0000\u0002\u0000\u0010À\b\b\u0000\u0000\u0000 \u0001\u0004\u0001ð\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000",
"circle 3": "\u0000E\r\u0000\u0002\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0001\b\u0000\u0000\u0000N\u0000 \u0000\u0004@\u0000\u0000\u0003\b<\"\u0000\u0000\u0000\u0011\u0000$\u0002\u0019>\u0000\u0000\u0001\b\u0001 \u0010¾ð\b\t\u0010\u0004D\u0003ð\u0000\u0000H \u0000\u0000\b@\u0002H\u0001\u0011\u0000\u0000\u0000\u0002\u0000\"@\b\u0010\u0000\u0000\u0000 \u0001\u0014\b@\u0000\u0000\u0002\u0000\u0010ÀB\b\u0000\u0000\u0000 \u0001\u0004\u0001à\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000",
"circle 2": "\u0000E\r\u0000\u0002\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0001\b\u0000\u0000\u0000N\u0000 \u0000\u0004@\u0000\u0000\u0003\b<\"\u0000\u0000\u0000\u0011\u0000$\u0002\u0019>\u0000\u0000\u0001\b\u0001 \u0010¾ð\b\t\u0010\u0004D\u0003ð\u0000\u0000H \u0000\u0000\b@\u0002H\b\u0011\u0000\u0000\u0000\u0002\u0000\"@\u0010\u0000\u0000\u0000 \u0001\u0014\b\u0000\u0000\u0000\u0002\u0000\u0010À@\b\u0000\u0000\u0000 \u0001\u0004\u0003ð\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000",
- "show widgets": "\u0000^\r\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0004\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000@\u0010\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000@@\u0002\u0000\u001e.\u001e \u001d\u001d\u001e\b\u001eÄ\u0000\u0010ø\u0002\u0012\u0012H\u0002HB\u0012\"\u0010\u0006\bHI \t!\bHÂ\u0006\u0006!!$$!\u001c \b\u0006\u0004\u0000\u0010@ \u0006\u0012\u0012\u0012H\u0002HB1â\u0010\u0017GÀ\u0006ÇÇHG\u0000\u0000\u0000\u0000\u0000\u0000\u0000!\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000x\u0000\u0000\u0000",
+ "show widgets": "\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0007ÿ\u0002\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\b\u0000\u0002\u0000ü\u0000\u0000\b\u0000\u0000\u0000a \u0000\u0000\u0000\u0000 \u0000\u0000\b\u0000\u0000\u0000@\u0000\u0000\u0000
\u0000\u0000\u0000\u0000\u0001\u0000\u0003À\u0000@\u0000\u0000\u0003à\u0000@\u0000 \u0000\u0000\u0000\u0000\b\u0000\b\u0000ð\u0000\u0003á\u0000\u0004\u0001\u0000\u0000\u0000\u0000\u0000@\u0000B\u0000\u0010\u000fÿè\b\u0000@\u0002\u0004\u0000p\u0002 \u0003\u0007\u0000\u0000@\u000e\u0000\u0000@<\u0000H\u0013\u0000c\u0003ÿø\u0004\u0001\u0004\u0003\u0000\u0004\u0000 \u0001D\u0000\u00040\u0000 \u0002\"\b@\u0000\u0000@\u0001\u0000\b@\u0004\u0000\u0002\b\u0011\b\u0002\u0000\u0004\u0000\u0004\u0000\b\u0000\u0002\u0000 \u0000$\u0000Â\b \u0000 \u0004À\u0000x\u0000 \u0001\u0000\u0002\u0000\n\b\u0010@\u0000\u0001\u0000\u0018\u0000< \u0002\u0000\b\u0000\u0010\u00011\u0002\u0004 \u0000\b\u0000\u0000\u0000\u0000\u0000 \u0000@\u0000~\u0000 `P\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0001\u0000",
"heartrate": "\u0000/\u0010\u0000\u0000\u0000\u0010 \b \u0004\u0000 @@\u0004\u0000A\u0000¨\u0004\u0000àAð\b\u000fÐOô@\u0002
H\u0002\u0004A\u0012Q\u0012\u0002\nDR$\u0004\u0019ü\u0010(H\u0004b\tüQ\u0010\u000bD\u0010B \"\u0010A\u0001\u0010FB\u0002 \u0005\u0000ü\u0014\r\u0011\u0000\u0000\u0010aA",
"circle 4": "\u0000E\r\u0000\u0002\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0001\b\u0000\u0000\u0000N\u0000 \u0000\u0004@\u0000\u0000\u0003\b\u0004\"\u0000\u0000\u0000\u0011\u0000$\u0000i>\u0000\u0000\u0001\b\u0001 \u0005>ð\b\t\u0010HD\u0003ð\u0000\u0000HB \u0000\u0000\b@\u0002H\"\u0011\u0000\u0000\u0000\u0002\u0000\"Aø\u0010\u0000\u0000\u0000 \u0001\u0014\u0000\u0000\u0000\u0002\u0000\u0010À\u0004\b\u0000\u0000\u0000 \u0001\u0004\u0000 \u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000",
"battery warn": "\u0000n\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000H@\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007ù\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0004Â \u0000\u0012\u0000\u0000\bð\u0004\u0010\u0000\u0000?b\u000fü\u0000(\u0000\u0000\u001c\u0000\b@\u0000\u0001\u0004PB\u0000D\u0000\u0000\u0000\u0000!\u0000\u0000\u0003Ð\b\u0000\u0000\u0000\u0000\u000f\u0000\u0000\u0000\tE\u0000 \u0002\u0010\u0002 \u0011À\u0002\u0010 |=cÿ\u0010 $@9\u0000\b@~\u0000\n\u0000\u0000\u0000@Q\u0000\u0004\u0000!\u0000\u0000\u0007ÿð\u0000\u0002\u0001\u0001\b\u0000 \u0000\b\u0000\u0000\u0000\u0000\u0003þ\u0010\u0004\u0000 \u0000\u0000 \u0000\u0000\u001fü\b\b\u0010\u0001\u0000\u0004\u0000\u0001\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\b\u0000 \u0000\b\u0000\u0000\u0001ÿÀ\u0000\u0000@\u0001\u0000\u0000@\u0000\u0000\u0004\u0001\u0003þ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001fü\b\b",
"valid period": "\u0000=\u0010\u0000\u0002\u0000\u0010 \"\u0000\u0000\u0000\u0010\u0000A\u0001\u0013ãçÿÿ\b\u001fÑ\u0011\"\b\u0001þ@Dùð@\u0000\u000fÂ$DHø\u0012\u0012\u001f>>| A\b\u0011\u0000#\u0002\u0010$Hù/ð$$>DHJ@¡!\u0013â~b\u0004\u0002\t\b\u0012\u0012\u001fà(þ\u0002$@HD\b!B\u0011B \u0004!B\u0004¡\u0004Q\u0000¡\u0004\u0000B\u0010A\b\u0002",
"maximum": "\u0000\u001f\u0010\u0000\u001fð\u0001\u0000 \u0002\u0000À\u0004\u0000\b\u0001ÿ\u0000\u0010\u0000\u0000\u001fÿÿÿ@\u0011\u0000\u0000>ø\u0002E\u0010\u0005\u0000ú@\u0011\u0001\u0012\"\u0002ò\u0000\u001eJ\u0002\u0002\u0010¢\b\u0002\u0001`\u0003",
- "weather circle": "\u0000{\u000e\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000R\u0000\u0000\u0000@\u0000\u0000\u0002\u0000\u0000\u0000\u0010\u0000\u0000\u0000
@\u0000\u0000\u0000\u0000\u0000'\u0000\u0010\u0002\u0000\u0000\u0000\b \u0000\u0000\b\u0000\u0000\u0007 \u0011\u0000|\u0000\u0000\u0001\u0010\u0000\u0000\u0001\u0010\u0000\u0000\u0000\u0001!ð\u0000\u0001'À\u0000\u0001'À\u0000\u0000!\u0000$\u0010\u0010\u0000à\u001f@@ø\u001f@@ø\u0004@\u0004\u0004\u0001à\u0000\u0007à\u0000\u0007à\u0001\b\u0000 \u0004\u0000\u0011\u0000\u0000\u0000\u0011\u0000\u0000\u0000B\u0000\u0012D \u0000\u0002 \u0000\u0000\u0002 \u0000\u0000\u0000@\u0004H\u0004\u0000\u0010\u0000\b\u0000\u0000\u0000\b\u0000\u0000\u0000\u0010\u0000\u0001\u0000\u0003À\u0001\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0004\u0000!@\u0007\u0000@\u0000\u0000\u0000@\u0000\u0000\u0001\u0000\b \u0010\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0010\u0000\u0000\u0000@\u0000\u0000\u0000",
- "minimum": "\u0000:\r\u0000 \u0000\u0000\u0000\u0000\u0000\u0010\u0006\u0000\u0000\u0000\u0000\u0000\u0002\u0000`\u0000p\u0010x\u0000\u0004\u0003à\u0003á\u0000 @\u0000\u0000\u0000\u0000\u0010\f\u0000\u0000\u0000\u0000@\u0004\u0000À\u0000\u0000\u0000 \u0001 \b\u0000\u0000\u0001\u0000\u0000\u000f\u0018\u0000!\u0000|\u0010\u0001\u0000S\u0000\u0000\u0000 \u000f\u0004\u0018\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
- "step length": "\u0000M\u000f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000`?à\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0010à\u0011à\u0000\u0000#ä\u000fðy\u0000p\u0000\u0000\u0000âÀ@\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0010\u0003ü\u0000\u0000ð\u0000\u0000\u0001\u0000\u0010\u0000\b\u00028\u0000D\u0000\b\u000fÿà@\u000e@\t\u0010\u0000\t\u0000\u0005\u0000\u0002\u0000(\u0004\u0000D@D\u0000 \u0001\b\u0000@\u0002\u0014\f\u0010\u0001\u0000\u0000@\u0004\u0000\u0010A\u0010\u0000\u0004\u0000@\u0000\u0000\u0000\u0001\u0000\u0000@\u0004\u0000\u0005\u0006\u0000\u0000\u0010\u0000\u0004\u0000\u0000\u00000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000",
+ "weather circle": "\u0000]\u0010\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001ÿÀ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u000fÿ\u0000 \u0000\u0000\u0001\u0000\u0000\u0000\u0002\u0000@\u0000\u0010\u0000\u0000\u0004à\u0002\u0000\u0010\u0004ÿ\u0000D\u0000\u0000\u00009\u0000\u0000@\u0000\u0002 \u0000\u0000\u0001\u0010\u0002CÿøÿÀà\u0000\u0000\u0010\u0012\u0000 \u0000\u0002\u0003è\b\u001f\u0000\u0000\u0002\u0000\u0004@?\u0000\b@\u0004\u0014\u0001\"\u0000\u0000\u0000\u0000$\u0010\u0003D\u0001\u0010\u0000\u0000\u0000 \u0002$\b\u0004 \u0001\u0000\u0000\u0000\u0002\u0000\u0011@\u0000P \b\u0000\u0000\u0000 \u0001\f\b\b\fE\u0000\u0000\u0000\u0002\u0000\u0010@!\u0018\b\u0000\u0000\u0000 \u0000\u0000\u0018\u0000À\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
+ "minimum": "\u0000\u001f\u0010\u0000\u001fð\u0001\u0000 \u0002\u0000À\u0004\u0000\b\u0001ÿ\u0000\u0010\u0000\u0000\u0002\"?ÿB\u0011\u0000\b>ø!\u0004E\u0010B\u0004úA\u0004\t\u0012\b\u0012ò\u0000\u0010\u001eJ\u0000 \u0010¢\u0001@\u0001\u0001\u0000",
+ "step length": "\u0000\u001f\u0010\u0000\u0001\u0000\b\u0000\u0002\u0000\u0013øGà@\u0000\u0001\u0000\u0001\u0010\u0004\u0002 \u0001\u0000?ÿÿ\u0018\u0010\u0001\u0010P \"\u0011 @DP@\t \u0004\f\u0001\u0002\u0000`\u0002\u0004\u0007\u0000\u0004(p\u0000\b ",
"distance goal": "\u0000?\u0010\u0000\u0000\u0000\u0010(\u0000\u0000\u0010\u0000ûü\u0010Hð'ý\u0014\u0001ý\u0000 AB(\u0000£ñ\u0000@äP\u0004\u0000ÕO¿©\u0007ÿ\u0002*A\u0010_\u0002\f\b?¤\u0010\u0004\u001c\u0000]\u0004\bH \bUü¢\bþüð¨\u0001GñE \"Oú\u0002ªA\u0000@\u0005Ð\u0005Ô\u0000\n \b/Ä\u0001\u0002$P\u000fþ\u0004¨\u0000! \u0010\u0004\b ",
"Circle": "\u0000;\r\u0000\u0002\u0000\u0000\u0000\u0010\u0000\u0000\u0004 \u0000\u0000\u00018\u0000D\u0000\u0000\u00009\u0000\b\u0000\u0000\u0004@\t\t>\u0000\u0000\u0001\b\u0001 ú\u0002\u0007À\"\u0000$D@?\u0000\b@\u0004\u0000\u0000\u0002\u0010\u0000\u0011\u0000\u0000\u0000\u0002\u0000\"@@\u0000\u0000\u0000\u0004P\b\u0000\u0000\u0000 \u0001\f\u0002\u0000\u0000\u0000\b\u0000A\u0000\u0000\u0000\u0002\u0000\u0000\u0000",
- "min. confidence": "\u0000_\u0010\u0000\u001fð\b\b\u0000\u0000\u0000\u0000\u0001\u0000\b@ \u0010x÷ð\u0000\u0000\u0004\u0000\u0010@À/( \u0000\u0000\u0010\u0000/ø\u0002@\u001e\u0000ÿ\u0001ÿ\u0001\"\u0005?Ò\u0001\u0001\u0001\u0000\u0000\u0000\u0006D\fA\u0002\"\u0002\u0002\u0006?¿ÿ\u0014\u0004B\u0004\u0004\f\u0000\u0011\u0000)ÿ%ü\u0011\u0004\u000fø(\u0000>ø JD\"\b\u0010\u0010üE\u0010$ H\u0010 \u0000ú@HA¨À@À@\u0001\u0012\u0001@âò\u0001 ¤!\u0001\u0006\u0001\u0001\u0001\u0010^J\u0002QHQ\u00000\u0002\u0002\u0002 ¢\u0004ÉÁ\u0000\u0007ü\u0004\u0001\t\t!\u0000\u0000\u0000\b\b\b",
- "colorize icon": "\u0000\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0012\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0010\u0001\u001c\u0001\u001c\u0000\u0002\u0002\u001dB\u001f\u0000\u0002\u0000\u0000\u0000\u0000\u0002\u0000\u001c\u0000\u001c\u0000\u0000< < \u0000Cà0\b|\u0000\u001c\u0000\u001c\u0000 \u0000 \u0000\b\u0000 \u0007\u0001\u0002ø\u001c\u001c\u0018\u0000\u0004\u0000\u0012\u0000\u0018\u0000\u0000\u0010B\u0010\u001c\u0010\u001c\u0010\r\u0000\u0001\u0000\u0001\r\u0000\u0000\u0010\u0000\u0010B\u0000\u0002\u0000\u0002\u0006\u0010\u0000 \u0000 \u0006\u0010\u0000\u0002\u0000\u0002\u0010\u0000\u0000\u0002\u0000\n\u0000\u0004\u0000\u0002\u0000\u0000\u0000\u0010\u0000\u0010\u0000\u0010\u0000@\u0002 \u0000\u0000@\u0000\u0010\u0000 \u0000\u0004\u0000\u0004\u0000\b\u0001\u0000 \u0000\b\u0000>\u0000\b\"\u0001\u0000\u0001\u0000\u0001\u0000À@\u0004\u0000\u0001\u00008@&\b0\u0000À\u0000À\u0000 \u0000\u0000\u0001\u0000\u0000 \u0000\u0000\u0003\u0000\u0004\u0000`\u0000`\u0000\u0004\u0000\u0000\u0000@\u0000\u0004\u0000\u0000\u0000\u0000\u0000",
+ "min. confidence": "\u0000O\u0010\u0000\u001fð\u0001\u0000\u0000@\b@\u0001\u0000 \u0002\u0000\u0000\u0010@\u0001\u0000À\u0004\u0003ïø/øÿø\b\u0001\u0015\u0010\u0001\u0011\u0001ÿ\u0000\u0010\u0002\t\u0001\u0000\u0002\"\u0000\u0000\u0002\"\b?Æ?ÿ¿ÿB\u001eD\f\u0000\b\u0011\u0000\b%(\u0000\u0011\u0010>ø!\u0004Íþü#àE\u0010B\u0004 \u0000@\u0000úA\u0004\t$@@\u0000¿Á\u0012\b\u0012Oðá ò\u0000\u0010\u0007\u0001\u0010D\"\u001eJ\u0000 \t\"\u0002 8\u0010¢\u0001@\u0000!\u0001\u0001\u0000\u0000\b\u001c\u0007",
+ "colorize icon": "\u0000k\r\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\bà\u0000\u0000\u0010ø\u0000\u0010\u0000\u0000\u0000\u0000\u0010\u0000à\u0000\u0000\u0001á\u0000\u0004\u0002\u001f\u0001Cà\u0000à\u0000\u0000\u0000@\u0001\u0000< \b\u0017Ä\bä\u0000\u0000\u0000\u0000À\u0000\u0004\u0000\u0010à\u0007À\f\u0000h\u0000\u0000\u0000\u0010\u0000\u0010?\u0000\u0001\u00000\u0000\u0010\u0000\u0010\u0000\u0004\u0000\u0000\u0000 \u0000\u0010\u0000\u0004\u0000\u0004\u0010\u0000\u0000\u0000\u0004\u0000\u0002\u0000\u0000\u0001\u0004\u0010\u0000 \u0000\u0000\u0001\u0000\u0000@\u0001ð\u0000A\u0014\u0000\b\u0000\u0000\u0000 \u0000\b\u0001Â\u00010A\u0006\u0000\u0000\u0000\b\u0000\u0001\u0000\u0000\u0000\u0018\u0000 \u0003\u0000\u0000\u0000\u0002\u0000\u0000 \u0000\u0000\u0000\u0000",
"Heartrate": "\u0000/\u0010\u0000\u0000\u0000\u0010 \b \u0004\u0000 @@\u0004\u0000A\u0000¨\u0004\u0000àAð\b\u000fÐOô@\u0002
H\u0002\u0004A\u0012Q\u0012\u0002\nDR$\u0004\u0019ü\u0010(H\u0004b\tüQ\u0010\u000bD\u0010B \"\u0010A\u0001\u0010FB\u0002 \u0005\u0000ü\u0014\r\u0011\u0000\u0000\u0010aA",
"data": "\u0000*\u000e\u0000\u0000 \u0000\u0000\u0000\u0000$\u0000\u0000\u0002\u0004u\u0000\u0000\u0000@á\u0000\u0000\u0000\u001f\u0000\u0000\u0000\u0000\b`ð\u0000\u0000\u0002'À\u0010>\u0001H\b\u0003ð\u0000\u0002\u0000\u0000\u0000A\u0001\u0000\u0000\u0000\u0000@\u0000\u0000\u0000@ \u0000\u0000\u0000 \u0010\u0000\u0000\u00000\b\u0000\u0000\u00000\u0000",
- "Yes\ndefinitely": "\u0000H\u0011\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@@\u0000\u0000\u0000\u0000\u0000\u0000\u0000 @\u0000\u0000\u0000\u0000\u0000\u0000\u0000(p\u0000\u0000\u0000\u0000\u0000\u0000'À@À\u0000\u0000\u0000\u0000\u0000@@@ \u0000\u0000\u0000\u0000\u0000@@@\u0010\u0000\u0000\u0000\u0000\u0000@@D\u0010\u0018\u0000\u0000\u0000\u0000@@H0$\u0000\u0000\u0000\u0000SÀ(\u0010$\u0000\u0000\u0000\u0000$`0\u0000\u0018\u0000\u0000\u0000\u0000$P\u0010\u0000\u0000\u0000\u0000\u0000\u0000#\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ùð@\u0000\u0000\b\u0000\u0001",
+ "Yes\ndefinitely": "\u0000%\u0011\u0000\u0001\u0000\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0010 \u0000\u0000\u0000¡Â\u0000\u0000\u0004ø\b\u0018\u0000@@@ \u0002\u0002\u0002\u0000\u0010\u0010\u0011\u0004\u0006`M<\u0002\u0002R0\u0018\u0000\f@@\u0000\u0004p\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000",
"Launcher Settings": "\u0000m\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u001f\u0000 \u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0010þ\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0007ôB\u0000\u0013\u0006\u0000\u0007\u0000\u0000\u0000\u0000\u0000\" \u0001\u0000à\b\u0010\u0002\u0000\u0000\u0000\u0000\u0000ú\f\u0000\u00029\u0000 \u000f@\u0000\u0000\u0000 \u0003ÿ\b\u0000\b\u0011À\u00018 |>þ\u0000\u0000@\u0000@r\u0000\u000e@ü\u0000\u0002\u0010\u0004\u0000\u0004\u0000\u0004\u0000\u0010\u0003Ä\u0000\u0000\u000f \u0000 \u0000@\u0000\u0001@\u0000\u0000DH\u0011ø\u0002\u0000\u0004\u0000\b\u0000\b\u0000\u0000\u0002\"\u0000 \u0004À\u0000@\u0000 \u0000\u0000\u0011\b\u0004@\u0006\u0000\u0018\u0000\u0004\u0000\u0001\u0000\u0000\u0000ø R\u0000À\u0000\u0000\u0000@\u0000\b\u0000\u0000\u0004Hà\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001@\u0000",
- "TAP right top/bottom": "\u0000^\u0010\u0000\u0000\u0000\u0000\u0004\u0000\u0004\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0010\u0000\u0000\u0010\u0007ÿð\u0000\u0000\u0000@\u0000@\u0000\u0000@\u0000@\u0000\u0000\u0000ÿ\u0001\u0000\u0000ÿ\u0001\u0000þ0ø\b\u0000\u0004\u0000\u0004\b\u0000\u0004\u0000A\"\u0010 \u0000\u0010\u0000\u0010 \u0000\u0010\u0001\u0004A\u0000\u0000\u0000\u0000H\u0004!!\u0004\u0000\u0001\u0000\u0004\u0004\u0000\u0001\u0010\u0010ø?ð\u0004\u0000\u0010\u001fð\u0004 Cò\u0001@@\u0010\u0000\u0000\u0010A\bH\t\u0001\u0000@\u0002\u0002\u0010\u0000A\u0004! D\u0004\u0001\u0000\u0010\u0010@\u0001\u0000\u0010\u0010\u0010\u0004\u0000\u0000\u0004\u0000B\u0012\u0000@@\u0010\u0002\u0004\u0004\u0000\u0010\u0000\u0000\u0000\u0001ÿ\u001fÿÀ\u0007ÿÀ@\u0000\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0000\u0000\u0001\u0000",
+ "TAP right top/bottom": "\u0000u\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\b\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000@\u0000@\u0000\u0000@\u001fÿÂ\u0000\u0000\u0000\u0000$\u0002\u0000\u0002\u0000\u0000\u0002\u0000\u0002\u0000\b\u0000\u0000\u0001\u001f'ÿð\u0010\u0000\u0007ÿð\u0010\u0000|\u0000\u0000\u0007\u0016\u0001\u0000\u0000\u0000\u0000\u0000\u0004 \u0000\u0000\u0000\b\u0000\u0004\u0000\u0004\b\u0000\u0004\u0000\"\u0000\u0000\u0000\b\u0000\u0000?@@\u0000$\u0002\u0002 \u0000@\u0004\u0000\u0001\u0000\u0004\u0004\u0000\u0001\u0010#\u0000H\u0004\u0000à\b\u0000 ?à\bB\b\u0001D\u0000 \u0005\u0001\u0000@\u0002\u0002\u0010\u0000A\u0000\b@\u0002\u0000H\b\u0002\u0000\u0010\u0010\u0002\b\b\u0000\u0002\u0000 \u0004@@\u0010\u0001\u0001\u0004\u0000\u0010\u0000\u0000 \u0002\u0000\u0002\u0002\u0000\u0010\u0010 \u0000\u0018\u0000\u0002\u0000 \u0000\u0010\u0010\u0004\u0000\u0001\u0000\u0004\u0003\u0000\u0000 \u0000\u0000\u0000ÿÿà\u0003ÿà \u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0000\u0000\u0001\u0000",
"Font": "\u00008\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000 x\u0000\u0000À\u0000 \u0000\b\u0000 @ \u0001\u0000\u0004\u0000\u0010@ \u0001\u0000\u0000\u00008\u0002\u0000|\u0000\u0000&\u0002\u0000\f\u0000\u0001\u0000!\u0004\u0000\u0014\u0000\u0002\u0000 \b\u0000$\u0000\u0004\u0000 \u0010\u0000D\u0000\u0000 \u0000\u0000`\u0000 \u0000\u0000\u0004\u0000\u0000\u0000 ",
- "Mark Unread": "\u0000\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\b|\u0000\u0000\u0002\b\u0000\u0000\u0002\u0016\u000f\u0000\u0000\u00009\u0000\u0000\u0001á\u0001\u0000B\u0000\u0000\u0000| \u0000\u0000\b\u0000\u0000\u0000\u0010 \u0010\u0000\u0000 \u0000\u0010\u0000\u0000\u0004 \u0003\u0000\u0002@\u0002\b\u0004 \u0000\u0000\b\u0000\b\u0010>\u0001\u0010\u0001à\u0000`\u0000\u0004\u0001\b\u0010>\u0003\u0004\u0003ð\u0000\u0000x\u0000\u0010\u0000\u0001\u0000B\u0003ð\u00002\u0000\u0000\u0000B\u0000\f\u0000\u0004\u0000\u0000\u0010\u0000\u0000!\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000@\u0000@\u0000\u0000\b\u0000 \u0000\u0000\u0000@\u0000\u0000\u0000\u0000 \u0000\u0010\u0000\u0000\u0002\u0000\u0004\u0000\u0000\u0000 \u0000\u0000\u0000 \u00010\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0010\u00000\u0000\u0004\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\b\u0000\u0000\u0000\u0002\u0000\u0000\u0000\b\u0000",
+ "Mark Unread": "\u0000L\u0010\u0000\u0001\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0001\u0002\u0000\u0000\u0000\u0010\u0000\u0000\u0001\u0000\u0003þ \u0000\u0000\bÃÿÂ\u0001\u0000\u0004\u000ft\u0001\u0000\u0001ü\u0010ð?\u0000\u0010\u0007\u00011\b\u0000\u0010\u0001\u0000\u0003þ \u0003\u0002\u000fÿç \"\u0000\u0000L\u0000|\u0003\u0004\u0004 \u0000\u0004@\f T\u0007\u0002\u0000\u0000<\u0001\u0001\t H\"\u0000\u0000@ \u0011\u0011\u0004\u0002 \u0000\b\u00009!\bH\u0011ø\u0000\u0004l\u0010g!\u0000\u0000\u0010\u0000D\u0001\u0000I\u0012\u0010\u0000\u0002\u0000\u0003\u0010\u0000 à\u0000\u0000\u0000\u0000\u0000",
"start&lap/reset, BTN1: EXIT": "\u0000Æ\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000`\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002@\u0000\u0000\u0004\u0000\u0000\u0000\u00008\u0000@\u0000\u0000\u0001\u0000\u0000\u0000\u0004p\u0000\u0000\bù\u0000\u0000\u0002\b\u0001\u0000\u0000\u0000\u0001\u000f \u0001ð\u0000\u0000\u0004\u0000\u0007à\u000e\u0000\u0000\u0000\u001cX\u0007à\u0004 \u0004\u0000\u0000\u0000\u0004\u0001\u0000\b@\u0000\u0000\u0010\u0000``\u0001À\u0000\u0000\u0001\u0000``\u0010\u0011à\u0000\u0000\u0010\u0004\u0000\"\u0000\u0000\u0000@\u00019\u0000\u0000\u0000\b\u0001B\u0000X\u0000\u0000@ \u0001H\u0010>\u0001À\u0006\u0006\u0007\u0004\u0001\u0010\u0000 \u0006\u0006\u0001\b\t\u0001\u0010\u0001À\bÀ?\u0000\u0004À\u0007à\u0000\u0010\u0012 \u0001\u0000\u0007à\u0004 \u001c \u0012 \u0004\u0005\u0000A\u0000\u0000\u0000\u0010~\u0018\u0000(\u0004\u0000~\u0018\u0010\u0011\u0000(\u0010\"\u0000\b\u0000\u0000\u0000@\u0006\u0006`\u0002\u0000\u0000 \u0006\u0006`\u0004\u0000@\u0000\u0000C\u0004\u0000@\u0000\u0000\u0001\u0000\u0018\u0006\u0000\u0010\u0000\u0010\u0001\u0000\u0018\u0006\u0000\u0010\u0001\u0000\u0000\u0010\u00010\u0010\u0002\u0000\u0000\u0000\u0004\u0000`x\u0000\u0000\b\u0000`x\u0000\u0002\u0000\u0000\u0004\u0000\u00000\u0000\u0000\u0000\u0010\u0000~\u0018\f\u0000\u0004\u0000@\u0000~\u0018\u0004\u0000\u0007À\u0004\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0000@\u0000\u0000\u0000À\u0000 \u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000 \u0000@",
"App Source\nNot found": "\u0000Z\u0011\u0000\u0000\u0000\u0000`\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000$\u0000@\u0000 \u0000\u0000\u0000\b|\bù\u0002\b\u0004\u0004\u0000\u0000\u00049á\u0001ÅB\u0000\u0000\u0000\u0000ò\u0000\u0001\u0000\u0010\u0010@\u0000\u0000\u0001\u0002@\u0000\u0004 \u0004 \u0000\u0000\u0000@`\u0000 \u0001\b\u0001\b\u0010>\u0000 \u0010\u0000\u0010\u0000B\u0000\u0004\u0003ð\u0000\b\u0004\u0000\u0004\u0000\u0010\u0001\u0000\u0000\u0000\u0005\u0001\u0000\u0002\u0000\u0000@\u0000\u0000\u0000\u0002 \u0001\u0000\u0000\u0010\u0000 \u0000\u0000\u0003\u0004 \u0000\u0000\b\u0000\u0010\u0000\u0000\u0003\u0001\u0010\u0000@\u0000\u0004\u0000\b\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0002\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000À\u0000\u0000\u0000\u0000\b\u0000\u0010\u0000\u0000\u0000",
- "Show clocks": "\u0000N\u0010\u0000\u0000@@@\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\b\u0001ÿÏ\u0002\u0004\u0000\u0000\u000fÿ\u0000\"þ\u0010\u0001à\u0000\u0000\u0000@\u0000@\u001a@\u0002\u0000\u0000\u0002!\u0003á\u0000ÿÀ\u0000\bÿÀÂ!\u0000 \u001fÿþ\u0004>\u0010\u0011\u0004\u0000\u0000\u0010\u0000@D\u0011ÿü\u0002\u0002/óá\u0001 @(\u0000\b\u0004\u0001\u0011\u0002!\"D\"\u0010\u0014\b\f(\u0010ø@ ÀP@\u0006 Cá\u0000\f\u0006HÄ\b\u0010\u0005\b\u0000\u0000\u0001@À \u0000\b\u0000\u0010\u0000\u0000\u0006\u0000\u0001\u0000",
- "STEPS": "\u0000<\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000`\u0000\u0000\u0000\u0000\u0000\u0000\tCG\u0000\u0000È\u0003\u0000\u0000\u0007\u0016\u0001\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0010\u0000\u001e\u0000\u0000\u0000 \u0002\u0000\u0000\u0011\u0000\u0002\u0000 \u0007 \u0004\u0000@\u0005\u0000\u0002\u0000(\u0004\u0000\u0000@\u0002\u0010\u00000@\u0004\u0000\u0001\u0000\u0010\f\u0004\u0000\u0000 \u0002\u0000\u0000\u0000\u0010\u0000\u0004\u0000@\u0000\u0000\u0002\u0000\u0000\u0000\u0000",
+ "Show clocks": "\u0000k\u0010\u0000\u0000@@@\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0004\b\u0001\u0000\u0000@\u000fþ\u0000@\u0000\u0003á\u0000\u0000\u0010\u0003ÿà\u0000\u0000\u0004\u0000FEüþ \u0012À\u0001\u0000\u0000\u0000@ø\u0007H\u0000\u0004\u0001à\u0000 \u0000\u0000\u0007ð\u0000\u0011\u0010ð\u0010\u0000ÿà\u0000\u0000\u0002\u0000\u0004#ÿ\u0001ÿ\u0002\u0010\u0000ÿ\u0001À\u0001\u0007ÀÂ\u0000ó\u0010\u0000\u0010\u0000L\u0000|\u0010\u0000@1ÿü\u0002\u0000\b\u0018Q\b\b`\u0001@\u0004D\u0000ð\u0004\u0006 B!\u0000\u0014\u0000D@@\u0002\u0001\u0000ÄD \u0004\u0018P!\u0004\u0000\u0003\b\u0001\u0000\u0005\u0004\b @\u0010\u0000\u0010!ð \u0003$b\u0004\b\u0004\u0000\u0011\u0000\u0014\"\u0010\u0003ð\u0005\u0003\u0002\u0001\u0000\u0001À\u0001\u0000\u0002\u0000\u0000\u0000À\u0000 \u0000\u0000\u0000\u0000",
+ "STEPS": "\u0000\u001f\u0010\u0000\u0001\u0000\b \u0002\u0000@Gà¨\u0000Añ\u0010\u000fôB \u0005H¿ÿQ\u0000DR\u0001\u0010\u0010(\"\u0011üPDPA\t\"\u0010\f\u0006B`\u0003\u0005\u0007\u0000\r\u0011p\u0000aA",
"Vector font size": "\u0000½\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0002\u0000@\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0002\u0000\u0002@H\u00018\u0000\u0000\u0000\u0001à\bx\u0000\u0000\u0000\u0000\u0002\u0000\u0004 \u0000\u0010\u0010ê\u0001@\u000e@\u0007À\u0000\u00004<@\u0000\u0000`\u0000\u0010\u0000\u0011\u0000\u0001\u0000y@H\u0000D\u0000B\u0000\u0000\u0002\"\u0000\u0002\u0000 \u0000\u0000\u0000\u0000\u0010\u0000\u0010\u0005\u0000\u0004 \u0002 \u0000\u0000\u0011\b\u0000 \u0000\u0002\b\u0004\u0000$ø\u0003\u0000\u0000D\u0000\"\u0000)\u0002\u0007Á\u0010@\u0001\u0000\u0000\u00008\u0000ú\u0000h\u0000\b\f\u0010\u0002\u0010\u00020\u000fÀ\b\u0000\u0010\u0003à\u0000\u0004\u00010\u0001\u0010\f \u0000@\u0000`!\u0000 \u0000\u0000H\u0010\u0000\u0003\u0000\u0000@\b@\b\u0001\u0000\u0005\u0000\u0000À\b\u0000\b\u0000\u0000\u0002A\u0000\b\u0000(\u0000\u0004\u0000@\u0000D\u0000\b\u0000D\u0000\u0000\u0000\u0000\u0000\u0000\u0014\b\u0000\u0002@\u0000@\u0002\u0000\u0000@\u0000@\f\u0010\u0000\u0000\b\u0000\b\u0000\u0000\u0000A\b\u0000\"\u0000L\u0000\u0010\u0000\u0002\u0000\u0002\u0001\u0000\u0000\u0001\u0000\u0000\u00000\u0000\u00020\u0001\u0000\u0000 \u0000\u0010\u0000\u0000\u0000\u0000\b\u00000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0002\u0000\u0000\u0000\u0000",
"View Message": "\u0000z\u000f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000À\u0000\u0000@\u0000\u0000\b\u0000\u0000\u0000\u0000\b\u0002\u0000\u0010\u0010\bÀ\b\u0000\u0000\u0001\u0000\u0000\u0000\u0003\t\u0004°\u0004\u0004\u0001Ð\u0002\u0000\u0000\u0000@\u0000\u0000\u0000!@ð\u0001ÿ\u0000\b\u0000\u0000\u0000\u0011à\u0000\u0000\u0000@\u0010\u0000@@\u0004\u0006 \u0000\u0000\u0005\u0000\u0000\u0018\u0000\u0004 \u0010\u0010\u0002\u0000p\u0001\u0010\t\u0010>\u0001\u0002\u0003Î\u0007ü\u0001ð\u0004\u0001\"\u0001Â\u0003ð\u0000\u0001\u0001\u0001\u0001\u0000Â\u0002(\u0011\u0000\u0000\u0000\u0000\u0000@@@@\b@\u0004\u0000\u0000\u0000\u0000@\u0002\u001fð \u0010@\u0000\u0010\u0001\u0000\u0000\u0000\u0000 \u0001 \u0001\u0010\u0000ä \u0000\b\u0000 \u0000\u0000\u00010\u0000\u0000D\u0000F0\u0000\u0004\u0000\u0007À\u0000\u00000\u0000 \u0000!\b\u00110\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007à0B\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00000\u000f\u0000",
"Are you sure": "\u0000n\u0010\u0000\u0001\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0001\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0002D\u0004\u0000\u0000\u0000\u0000\u0000\u0000ð\u0000\u0000ü\t \u0010ð@\u0000@\u0000\r \u000fð\u000e\u0000\u0004\u0000L`D@À0T\u0007ÿ\u0002\u0002\u0001\u0002\u0001\u0001\u0010\u0000ÁP\u0000\u0002\b\u0000\b\u0002\b\u0002\b\u0000\u0003\t \u0000\b \u0000\"\b\"\b\"\b\u00000D@\u0000 \u0000`` \u0003\u0002\u0010ÿ \u0001@@A\u0000\f\u0013ù\u0000\u0002\n\u0006\u0000\u0006\u0000\n\u0004\u0000\u0000\u0002\u0000\b\u0011ø\b\u0000\b\u0000\u0010`\u0000À\u0004\u0000\u0000 @\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0003\u0000\u0010\u0007ÿ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
- "Bluetooth": "\u0000j\u000e\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000$\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\bõ\u0000@\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u00049Å\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000ò\u0001\u0000\u0012\u0000\u0000\u0000\u0010\u0000\b\u0000\u0000\u0000\u0001\u0000\u0004\u0000\u0000\u0004\u0000\u0001\u0000\u0000\u0000\u0000@ \u0001\"\u0010>\u0001À\u0000x\u0010>\u0000 \u0010\u0000Hð\u0000L\u0001â\u0003ð\u0000\b\u0004\u0000\u0012@\u0000\u0000\u0010 \u0000\u0000\u0005\u0002\u0000\b\u0000\u0000\u0004\u0000\b@\u0000\u0000\u0002!\u0000\u0002(\u0000\u0000\u0001\u0000\u0000\u0010\u0000\u0000\u0003\u0004\u0001\f\u0000\u0000\u0000@\u0000\b\u0000\u0000\u0003\u0001@\u0000\u0000\u0000\u0000\u0010\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0002\u0000\u0000\u0000\u0000\u0000",
+ "Bluetooth": "\u0000F\u000b\u0000\u00000\u0000\u0000\u0000\u0000\u0000\u0000à@\u0000\u0000\u0000\u0000\bA\u0000\u0000\u0002\u0000\u0000\u0002\b!\u0004!\u001e\b\u001e\u001e\b.\u0010øøÇàB\u0012\u0010\u0012\u0010\u0018A\bOÂ\bHB\ba\u0004! \b!!\b!\u0010 \u0010B2\u0010\u0012\u0010\u001fÇG@",
"Unread timer": "\u0000m\u0010\u0000\u0001\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000ÿ\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000ñø@\u0007\u0002\u0000\u0000@\u0000\u0000\u0000\u0000\u0010\u0000\u001fÀÒ\u0000\u001f\u0000\u0004\u0002\u000f\u0000\u0000\u0000<\u0000\b\u0001\b\u0000@\u000f\u0000\u0000\u0004\u0000\u000føD \b\f\u0000\u0000@\u0000\u001fÿÏ@DA\u0000¤\u0001 \u0000\u0004\b\u001f\u0003\u0004\u0004\"\b\bÀ0\u0000@?\u0000*\u0003Ä @\u0000\u0004\u0000d\u0000\u0000\u0002H\u0012$\t\u0004\u0000 \u0000 \u0000À\u0000\u0000\" P \u0002\u0000\u0001\u0000\u0001\u0000\u0000\u0002\u0010\u0001\u0006\u0000 \u0000\b\u0000\u0004\u0000\u0000`<\u0000À\u0006\u0000\u0000@\u0000\u0000\u0000\u0000\u0004\u0001$H\u0000\u0000À\u0000\u0002\u0000\u0000\u0000\u0000\u0000 \u0000AÀ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
- "Delete all messages": "\u0000¾\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\b\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002H#Â\u0000\u0010\u0000\u0000\u0000\u0007\u0000\u0000\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0005 \b |\u0000\b!à\u0001à\u0000\u0010\u0000\u0000\u0002\u0000\u0000\u0000\u0006\u0012\u0001à\u0015\u0012(P\u0000\u0000y\u0000\u001a@\u0000@\u0000\u0000\b\u0000\u0000\u0000\u0004(\u001a@\u0010H¢ \u0004\u00001\u0000\b\u0000\u0001\u0000\u0000\u0000#À\u0000\u0000\u0000ù#\u0010@p\u0001 \u0000 \u0002!\u0000Ä\u0000\u0000\u0000±\u0000\u0000\u0003\u0000\u0002!\b$¾Â`\b@\u0001\u0000\u0011\u0004\u0000à\u0002 \u0013\b |\u0002\u0004\u0011\u0004 $ \b@\u0004\u0000D\u0010\u0000$@8@~\u0000\u0000 D\u0010þH\u001e\u0000\u0001\u0010\u0001 @\u0005\u0000Q\u0000\"\u0000\u0000\u0000\u0001\u0001 B\t\"_à\b\u0000\u0001@\u0004\u0000\u0012\u0001\b\u0000\u0000\u0000\u0000\b\u0004\b$\b\u0000@\u0000\u0000\u0001\u0000\u0014\b\u0000\u0000 \u0002\u0000\u0000\u0000\u0000@\u0014\b?(¨\u0001\u0000\u0000\u0000\u0002\u0000 À\u0004\u0000\u0001\u0000\u0004\u0000\u0000\u0000&\u0000 À\b\b\u0000\u0000\u0000\u0007\u0000\f\u0000`\u0000\b\u0000\u000f\u0000\u0000`\u0000\f\u0002\b\"\" @\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b¢(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000!\u0004 @",
+ "Delete all messages": "\u0000Ç\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\b\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0001$\u0011á\u0000\u0004\u0004\u0000\u0000\u0000\u0001À\u0000\u0000\u0002\u0000\u0000\u0000@\u0000\u0000\u0000\u0000@\u0010\u0001H\"B\u0000\u0004\u000f\u0001\u0004<\u0000<\u0000\u0002\u0000\u0000\u0000@\u0000\u0000\u0000ÂA,\u0002¢E\n\u0004\u0007ð\u0000\t\u0007\u0001¤\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000Bà\u0001\u0004\"\u0007à \u0001\u0000@\u0004D\u0000\b\u0000\u0000\u0001\u001e\u0000\u0000\u0000\u0004\u0001\u0000\u001fÉ\u0018\u0000\u0001À\u0004\u0000\b\u0003\u0010\u0000\u0000\u0002Ä\u0000\u0000\f\u0000\u0002\u0010 *û\u0001À\u0010\u0002\u0000\"\b\u0001À\u0004@&\u0010@ø\u0004\b\u000f8A$H@\u0004\b@\u0004\u0000D\u0010\u0000$@8@~\u0000\u0000 1þH\b\u000f\u0000\u0000À\b\u0000 \u0002(\u0011\u0000\u0000\u0000\u0000\u0001\u0004/ð\f\u0002\u0000\u0000`\u0010\u0001 \u0004B\u0000 \u0000\u0000\u0000\u0002\u0000\u0014\u0002\t#B\u0000\u0000\b\u0000\u0000\u0000 \u0002\u0000\u0010\u0000\u0004\u0000@\u0000\u0000\u0000\b\u0000H\u0007òE\u0015\u0000\u0000\u0010\u0000\u0000\u0000 \u0002\f\u0000@\u0000\u0010\u0000@\u0000\u0000\u0002`\u0001\u0000\b I\u0000\u0000@\u0000\u0000\u00008\u0000`\u0003\u0000\u0000@\u0000|\u0000\u0000\u0003\u0000\u0002\u0000\u0010A\u0011\u0011\u0000A\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0018\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003ð\" ¢\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000B\b@\u0000",
"No Messages": "\u0000k\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000 \u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0004\u0001\u0000\b\u0000\u0002\u0000\u0000\u0000@\u0000\u0000\u0000Â@(\u0000\u0000@\u0000\u0000\b\u0000\u0000\u0000\u0004(~\u0000\u0010\u0000\b\u0000\u0000\u0001\u001e\u0000\u0000\u0000\u0004\u0001\u001c\u0002\u00001\u0000\u0000\u0000,@\u0000\u0000À\u0000@À@\u0001À\u0004@&\u0010@ø\u0004\b\b \b\u0000\b\u0002D\u0003\u0007à\u0000\u0002\u0002\b\u0001\u0000\u0002(\u0011\u0000\u0000\u0000\u0000A\u0000 \u0000H\u0004 \u0002\u0000\u0000\u0000\u0000 \u0010 \u0004\u0004\u0010\u0000\u0004\u0000@\u0000\u0000\u0000\b\u0000<\u0000\u0004\u0000\u0001\u0000\u0004\u0000\u0000\u0000&\u0000\bÀ\bÃ\u0000\u0000@\u0000|\u0000\u0000\u0003\u0000\u0001\u0014\u0000á\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001c\u0000\u0000\u0000",
- "Record Run": "\u0000j\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000! \u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0004(\u0000\u0000\bà\u0000\u0001\u0000\u0004>\u0000\u0000\u0001\b\u0000\u0000\u0001À\u0003\u0000@\u0000ð\u0000\u0000@\u0000\u0000\u0000\u0003 P\u0000\u0000 \u0000\u0000\u0010\u0000\u0006\u0000G \u0004\u0014\u0000\u0000\b |\u0007\u0000\u0003À\u000e\b\u0000\t\u0002\u0000\u0002\u0007à\u00010\u0000ð\u0000\u0002\u0000\u0002A\u0000\u0001\u0000\u0000\u0000B\u0000\u0018\u0000\u0001\u0000\u0001\u0010\u0000@\u0000\u0000\u0010\u0000\u0000\u0000\u0000@\u0000@\u0001ð\u0000\u0000\u0004\u0000\u0000\u0000\u0000 \u0000A`\u0003\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0010\u0002``\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0018\u0000`\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0018\u0000\u0000\u0000",
+ "Record Run": "\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0004\u0000\u0010\u0000\u0011ø\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\t\u0000\u0004?\n\u0002\u0000 \u00021\u001c\u0000\u0000\u0000\u0000\u0000\u0000\u0000MA,\u000fàB@\u000ft8\u0000`\u0000\u0003`\u0000\u001d@<\u0000\u0000\u0011\u0007àþ\u0000\u0002\u0000p\u0004\b\u001f\u0000\u0004\b\u0004@\u0004\u0000|\u0004¸\b\u0000\u0001\bä\u0000\u0000\u0000\u0000\u0002\u0010\u0001\b\u0000\u0001\u0004\u0002\u0000à\u0000Á\u0000\u0001\u0000\u0000\u0000\u0001\u0000\u0000óÏÁ?àL\u0000|\u0000@\u0000@\u0000\u0000\u0000@B\u0000c\u0000\u0002\u0013ð\u0011\u00000 \u0000 \u0000\u0000\u0000 !\u0000!|\u0012\"\u0003À\u0010\u0010\b\u0000\u0010\u0000|\u0000\u0010\u0000@\u0000 \u0011 %]\u0000\u0010\b\u0004\u0004\u0000\b\u0003à\b\u0000 \u0000H\u0004H\u0005\b\u00009\u0002\u0000L\u0000\u0000\u0000L\u0000\u0010\u0000 \u0001\u0012\tD\u0002\u0000\u0011\u0000\f\u0000\u0000\u0000\f\u0000\b\u0000\b\u0000|\u001e\"\u0001\u0000\u0004C\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0001ø\u0011\u001f¸(\u0000\u0000à\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0000",
"Apps": "\u0000)\u000e\u0000\u0000\u0000\u0000`\u0000\u0000\u0000\u0000H\u0000¡ð#ä\b/\b\u000e,\u0002\u0010\b\u0000\u0010\u0001\bH\u0000\u0010\u0000\u0018\u0000\b\u0000B\b\u0000\b\u0000!\u0004\u0000\u0004\u0000\u0010\u0000\u0004\u0000\u0000\u0000\u0004\u0000\u0000A\u0000\u0004\u0000\u0000A\u0000\u0004\u0000\u0000A\u0000\u0000\u0000\u0000@",
- "BTNs 1:startlap 2:exit 3:reset": "\u0000Ä\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u000fè@\u0000\u0001\u0000\u0000\u0002\u0000\u0000\u0002\u0001\u0000\u0000\u0000\u0007\u0000\u0000\u0001\u0002\u0000\u0007\u0010Ä\u0000\u00000\u0000\u0000 \u0000\u0000 \u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\bA\fG\u0005\u0003\u0007\u0007\u0001\u0007\bC\u0007C\u0002\u0000\bC\u0010¤\u0000\u00100øÄø\u0010Ä\u0000\u00040\u0010ø\u0000\u0004?\nH\u0000\u0001\u0000\b\u0002\u0000HB\u0001\u0000H@\u0001\bD\u0002\u0000\u0003\u0010`\u0000\u0010\u0000` | \u0010|\u0000 \u0000ü0\u0010 \u0000\u0004\bA\tA\u0001\u0000\u0001\bH\u0002\u0001\bH@\u0004\u0000\b\u0003\u0001\u0002\u0000\u0000@\u0010\u0004\u0000\u00100\u0004 \u0010\u00000H\u0010 \u00008A\bÈ@\u0001\u0003\bB\bÈ\u0002\u0001\bÌ@\b\u0003\bHA\u0002\u0000\bCø\u0010x\u0000|\u0000x\u0018t\u0018|t¸\u0000ü\u0000x|\u0018\u0000x\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
- "Delete All Messages": "\u0000\u0010\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0004\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\bð\n\u0000\u0001\u0000\u0000\u0000 \u0000\u0000\u0000\u0000 \u0000\u0000¤\u0011!\u0000\"\u0000\u0001\u0000\u0000\u0000 \u0000\u0000\u0000a \u001e\u0001Q\"
\u0000\u0000\u0002\u0000\u0000\u0000@\u0000\u0000\u0000!@Ò\u0000E\u0011\u0002\u0002\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0002\"\u000fäA\u000bú\u0001\u0000\u0000\u0001b\u0000\u0000\u0006\u0000\u0004B\u0010I\u0015}à\u0000à\u0002 \u0013\b |\u0002\u0004\u0011\u0004 $ \u0001\u0000\u0000@\u0012 \u001c ?\u0000\u0000\u0010\"\b$H@\u0002\u0000\u0001@\u0014@\b\u0000\u0000\u0000@H\u0010HøÀ\u0002@!\u0000\u0010\u0000\u0000\u0000\u0001\u0000A\u0004¡\u0000\b\u0000\b\u0000\u0002\u0000 \u0000\u0000\u0000\u0004\u0001@ù\"\u0010\u0000 \u0000\b\u0000 \u0000\u0000\u00010\u0001\u0006\u0004\u0010D$ \u0001\u0000 \u0000>\u0000\u0000\u0001\u00000\b ÿ\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0011E\u0010Q\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000!\u0004 @",
- "Vibration": "\u0000\u001e\u0010\u0000\u0010\u0000\u000f Oñà \u0000\u0004?èþø\b|H\u0001ü \u0004Eÿ\u001fÉ\u001a I$Êü*D¤\u001fÉ\u0012\bDR ?\u0015JOJ0B",
- "Utils": "\u0000«\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0004\u0012\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u001e\u0000\u0000\u0001\u001c\u0000\u0002\u0000A@\u0000\u0000À\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001c\u0000\u0000\u0000\u001c\u0000\u0000\b \u0000\u0000\u0004\u0000\u0000\u00000\u0004p\u0000\u0000\u0000\u0000\u0000\b\u0000\u001c\u0000 \u0001\u001e\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002r\u0000\u0000\u0000\u0003À\u0002\u0001\u001c\u0018\u0000,@\u0000\u0000À\u0000\u000f\u0000\u0010@@@ø#\u0000\u001c\u0010\r\u0000&\u0010@ø\u0004\b\u000e \u0000\u0010\u0010\u0007à\u0003\u0000p\u0000\u0002\u0006\u0010\u0003\u0007à\u0000\u0002\u0000\u0004\u0000\u0002\u0002\u0000\u0000\u0000\u0002\u0000r\u0000\u0000\u0002\u0000\u0011\u0000\u0000\u0000\u0000\u0007\u0000ø\u0000\u0000\u0000\u0000@\u0000\u0010\u0000@\u0002\u0000\u0000\u0000\u0000 \u0007 \u0000#à\u0000\u0000\u0010\u0000\b\u0000\u0004\u0000\b\u0000@\u0000\u0000\u0000\b\u0000\u0004\u0000\b\u0000\u0000\u0000\u0000\u0004\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0004\u0000\u0000\u0000&\u0000\u0003&\u0000\u0000\u0000\u0000\u0001\u0000\u0000 \u0000À\u0000 \u0000~\u0000\u0000\u0003\u0000\u0003\u0003\u0000\u0000\u0000\u0000\u0000@\u0000\u0004\u0000`\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
+ "BTNs 1:startlap 2:exit 3:reset": "\u0000Æ\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u001c\u0000 \u0000\u0000\u0000\u0000\u0000\u00028\u0000\u0000\u0004|\u0000>?¡\u0000\u0000\u0004\u0000\u0007\u0000ø\u0000\u0000\u0002\u0000\u0003ð\u0007\u0000\u0000\u0000\u000e,\u0000\u001e\u0010Ä\u0000\u00000\u0000\u0000\u0004 \u0000\u0000\b\u000000\u0000à\u0000\u0000\u0000\u0000\u0010C\u0011à\u0001@À\u0002\u0000\u0011\u0000\u0000\u0000 \u0000ÀÁ\u001c\u0000\u0000\u0004\u0000\u0002\u0018A\nH@\u0001\u0003\u0000\u0010\u0000¤\b\u001f\u0000à\u0003\u0003\u0003\u0000\u0000\u0010\u0000\u0000~\u0004) \u0000\u0004\u0000\u0000@\u0004`\u001f\u0002`\u0003ð\u0000\b\t\u0010\u0000\u0000\u0006\u0010`\u0000\u0010\u0000\u0002 \u0000\u0000\b@?\f\u0000@\u0014@\u0002\u0000\u0000\"\u0010BP`\u0000@\u0000\u0011\u0000\u0004\u0000\u0000\u0000 \u0003\u00030\u0001\u0000B\u0000\u0010\u0000\u0001\bA\bÀ@\u0001\u0003\u0001\u0000 \u0000\u0000\u0000\f\u0003\u0000\b\u0000\b\u0000\u0000\b!\u0004#!\u0000\u0004\f\u0018\b\u0001\u0000\u0000\u0000\u0002\u00000<\u0000@\u0000@\u0004\u0000\u0000 ø\u0010x\u0000|\u0000\u0000\u0000\u0018\u0000\u0000\u0000\b\u0000?\f\u0006\u0000\u0002\u0000 \u0000\u0000ü\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000 \u0000\u0000\u0000`\u0000\u0010\u0000\u0000\u0000\u0000\u0000",
+ "Delete All Messages": "\u0000Ç\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\b\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0001$\u0011á\u0000\u0004\u0004\u0000\u0000\u0000\u0001À\u0000\u0000\u0002\u0000\u0000\u0000@\u0000\u0000\u0000\u0000@\u0010\u0001H\"B\u0000\u0004\u000f\u0001\u0004<\u0000<\u0000\u0002\u0000\u0000\u0000@\u0000\u0000\u0000ÂA,\u0002¢E\n\u0004\u0007ð\u0000\t\u0007\u0001¤\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000Bà\u0001\u0004\"\u0007à \u0001\u0000@\u0004D\u0000\b\u0000\u0000\u0001\u001e\u0000\u0000\u0000\u0004\u0001\u0000\u001fÉ\u0018\u0000\u0001À\u0004\u0000\b\u0003\u0010\u0000\u0000\u0002Ä\u0000\u0000\f\u0000\u0002\u0010 *û\u0001À\u0010\u0002\u0000\"\b\u0001À\u0004@&\u0010@ø\u0004\b\u000f8A$H@\u0004\b@\u0004\u0000D\u0010\u0000$@8@~\u0000\u0000 1þH\b\u000f\u0000\u0000À\b\u0000 \u0002(\u0011\u0000\u0000\u0000\u0000\u0001\u0004/ð\f\u0002\u0000\u0000`\u0010\u0001 \u0004B\u0000 \u0000\u0000\u0000\u0002\u0000\u0014\u0002\t#B\u0000\u0000\b\u0000\u0000\u0000 \u0002\u0000\u0010\u0000\u0004\u0000@\u0000\u0000\u0000\b\u0000H\u0007òE\u0015\u0000\u0000\u0010\u0000\u0000\u0000 \u0002\f\u0000@\u0000\u0010\u0000@\u0000\u0000\u0002`\u0001\u0000\b I\u0000\u0000@\u0000\u0000\u00008\u0000`\u0003\u0000\u0000@\u0000|\u0000\u0000\u0003\u0000\u0002\u0000\u0010A\u0011\u0011\u0000A\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0018\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003ð\" ¢\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000B\b@\u0000",
+ "Vibration": "\u0000|\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0004\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000H\u0000@G¨\u0010\u0000\u0000\u0000\u0018\u0000\u0000\u0000\u0000\u0000\u0002\b\u0003\u0001\u0000\u0000\u0000\u0000@\u0000\u0000\u0003\u0000\u0011 \u0001\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0010\u0000`\u0000\u0010\u0001\u0000\u0000\u0000\u0003\u0000\u0000<\u0000A\b@\u001a\u0000\u0001\u0000\u0010\u0000ð\b\u0010\u001c@\u0000!\u0002\u0006\u0010\u0000 \u0001\u0002\u0007à\u0000\u0002\u0000\u0004\u0000\u0002\u0010 \u0001\u0000\u0002\u0000\u0010@\u0000\u0000\u0000@\u0003À\u0000B\u0001\u0000\u0010\u0000@\u0001\b\u0000\u0000\u0000\b\u0001È\u0000\b@\u0010\u0001\u0000\b\u0000\u0011\u0000\u0000\u0000\u0001\u0000\u0000\u0001\b\u0001\u0000\u0010\u0001\u0000\u0001`\u0000\u0000\u0002`\u00008\u0002`\u0000\u0000\u0001\u0000 \u0000\u0018\u0000\u0000\u0000\u0018\u0000\u001c@\u0018\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
+ "Utils": "\u0000{\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\bð\u0000\u0000\u0004\u0010\bð\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000à\u0000\u0000\u0000B\u0000à\u0000\u0000\u0000\u0000#\u0000\u0000\u0000\u0000\u0000@\b@\u0000\u0000\u0000@\u0000\u0003\u0000\u0000\u0000\u001e\u0000\u0010\u0001\b\u0000\u001e\u0000\u0010\u0000\u0000\u0002\u0002\u0007Á\u001c\u0000\u0004\u0000!\u0001\u001c\u0000\u0004\u0002\u0007À?\u0000\u001c\u0003\u0004 \u001c\u0003?\u0000\u0010\u0000\u0000\u0000\u0010\u0003\u0000\u0000\u0010\u0003\u0000\u0000\u0007À\u0000\u0000\u0004\u0000\u0002\u0000\u0001\u0000\u0004\u0000\u0002\u0000\u0000\u001f\u0004\u0000\u0000\u0000\u0000@\u0000 \u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\b\u0000\b\u0000 \u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0001\u0000\u0002\u0000\b\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000 \u0000\u0002\u0000\u0000 \u0000\u0000",
"Piezo": "\u0000+\u000e\u0000\u0000\u0000\u0000\u0000\u0000@0\u0000\u0000\u0000¦\t\u0000\u0000\u0004\n¡ \u0001ÀAD\u0018\u000fÀ\u0004 \u0000 \u0000\u0011À\u0002\u0000\u0010À\u0000@\u0000 @\u0000\b\u0000\u0004\b\u0000\u0001\u0000\u0001\u0001\u0000\u0000~\u0000 \u0010\u0000ð \b\u0001ø\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000",
"BLE": "\u0000\u0016\n\u0000øþ\u0012\u0002\bH\b! øú\u0012\u0002\bH\b! ãóð",
- "Make Connectable": "\u0000l\u0010\u0000\u0010\u0010 \u0000\u0000\u0010@\u0000\u0000\u0000\u0000\u0000\u0001\u0004\u0001\u0002\u0007ÿâD@\u0000\u0000\u0010\u0000\u0000\u0013ü#þ\u0000\u0010BH \u0000\u0000\bÁ\u0000\u0002\u0000\u0001\u000f÷\u0001\u0000\u0004\u000ftý\bIü\u001f\u0010\u0001@\u0010ð?\u0000\t\u000f\u0000\u0001\u0011\u0000\u0004!1\b\u0000\u0010\u0017þ\u0013þ\u0011\u0010~B \u0003\u0002\u0001\u0004\u0002 !\u0011\u0004#â\u0000\u0000L\u0000|\u0018@L\u0004\u0011\u0010B\u0000 \u0000\u0004@\f#ï\u0001\u0011\u0007äB\u0000\u0000<\u0001\u0001Ð\b\u001f\u0010BH\"\u0000\u0000@ \u0011\u0010\t\u0001\u0011\u0004'\u0002 \u0000\b\u00009\u0010¨\u0000\u0010~@\u0011ø\u0000\u0004a\u0006\n \u0001\u0004$!\u0000\u0000\u0010\u0000DQ\u0012\u0000PJB\u0010\u0000\u0002\u0000\u0003`@ à\u0002\u0004Cà\u0000\u0000\u0000\u0000\u0000",
+ "Make Connectable": "\u0000l\u0010\u0000\u0010 \u0001\u0000\u0000\u0000\u0010@\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0010\u0007ÿâD@\u0000\u0000\u0010\u0000\u0000\u0010P!\b\u0000\u0010BH \u0000\u0000\bÁ\b\u0010\u0001\u000f÷\u0001\u0000\u0004\u000ftý\u0004!\b\u001f\u0010\u0001@\u0010ð?\u0000/¢\u0010\u0011\u0000\u0004!1\b\u0000\u00100 ?ø\u0011\u0010~B \u0003\u0002\u0003\u0000\u0010\u0011\u0004#â\u0000\u0000L\u0000|Uü\u0001\u0000\u0011\u0010B\u0000 \u0000\u0004@\f%R@\u0010\u0001\u0011\u0007äB\u0000\u0000<\u0001\u0001$A\u0004\u001f\u0010BH\"\u0000\u0000@ \u0011\u001fÄ\u0010A\u0011\u0004'\u0002 \u0000\b\u00009\u0010PA\u0004\u0000\u0010~@\u0011ø\u0000\u0004a\b\u0010@\u0001\u0004$!\u0000\u0000\u0010\u0000D\u0011\u0004ü\u0000PJB\u0010\u0000\u0002\u0000\u0003 \u0000@\u0002\u0004Cà\u0000\u0000\u0000\u0000\u0000",
"HID": "\u0000\u0016\n\u0000|ò\u0010B(A\ba\u0004!ü\u0010\u0010B\u0018A\ba\u0004!\u0010\u0011óÀ",
- "Light BW": "\u0000=\r\u0000\u0000\u0000\u0000 \u0000\u0000\u00028\u0000\u0004\u0000\u0000\u0000\u000e\u0000\u0000@\u0004\u0000|B\u0003\u0004\u0000 \u0002\u0012\u0018ä\u0000À\u0001\u0000\u0010¸ \u001a\u0000\u000e\u0000\u0001\u0003\b\u0000L\u0007Å \u0010\u0000@\u0002\u0010!-\u0000\u0002\u0000\u0010\u0001\t\b\u0000\u0010\u0000\bLÀ\u0000\u0004\u0000BB\u0018\u0000\u0004\u0000 \u0003â\u0013\u0000\u0000 \u0001\u0000\u0000\u0000\u0000",
+ "Light BW": "\u0000M\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0007ÿ\u0000\u0000\u0000 \b\u0000\u0004\u0000!\b\u0000\u0001\u0000 \u0001ÿÁÿÃ\u0000\u0010\u0001\u0000\b\u0002\bB\u0000à\u0001\u0000\b\u0000@\u0010ò9\u00000\u0000@\u0002\u0000\u0010\u000e\b\u0006\u0003\u0010\u0004\u001fü\u0000@Â\u0000\u0013\u0000ÿà\u0004\u0000\u0004\u0000\u0010\u0000\u0004\u0001\u0000 \u0000 \u0000\u0004\u0000 \bÿþ\u0002\u0000\u0004\u0000 \u0001\u0000@\u0000\u0000 \u0000 \u0001\u0000\b\u0002\t\"\u0006\u0000\u0001\u0000\b\u0000@\u0010DÀ\u0000\b\u0000@\u0003ÿ$@\u0000\u0000\u0000\u0000\u0000\u0010\u0004@\u0002",
"LCD": "\u0000\u0016\n\u0000xò\u0002\u0012(\bH` !\u0002\u0002\u0018\b\b`!!ñãÀ",
"Background": "\u0000\u001f\u0010\u0000\u0004\u001fð\t0 !óÀ$ ÈAÿ\u001c \u0010\u0000?ÿø\u0000\u0000\u0010\u0010\u001fð?à @@@@ÿÿ\u0001\u0000\u0010\u0002\u0002\u0004!\u0004\u0014\u0011A\b\u0010\u0001\u0000",
- "Foreground": "\u0000y\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\b\u0000\u0000\u0000Baà\u0000\u0000Cà\t¨#\u0002\u0000\u0000\u0000\u0010¯\u0010\u0000\u0000\u001e\u0010\u0007P\u000e\u0000\u0001\u0000\u0018\u0000\b@\b\u0000\u0000\u0010\u0002 \u00008\u0000ø\u0002\u0004\u0004\u0000\b\u0000 \u0000\u0002\u0010\bä\u000f\u0000\u0002\u0000\u0004\u0002\u001c\u00000\u0001\u0010\u0003\u0002\u0002\u0000\u0002\u0001À\u0004\u0000ø\u0000\u0010\u0001\b\u0000\u0001\u0001\u0002\u0000\u0001\u0000\u0002\u0000\f\u0000\b\u0001\b\u0000\u0001\u0000A\u0000\u0001\u0000B\u0002\u0000\n\u0000\u0004\u0000\u0004\u0000\u0000!\u0000\u0001\u0000 \u0002\u0000\t\u0000\u0004\u0000\u0004\u0000\u0000\u0000\u0001\u0000\u0010\u0002\u0000\b\u0002\u0000\u0004\u0000\u0000\u0000\u0013\u0000\b\u0002\u0000\bÀ\u0002\u0000\u0004\u0000\u0001\u0000\u0006\u0000\u0004\u0000\u0000\u0000 \u0002\u0000\u0004\u0000\u0003\u0000\u0000\u0000\u0000\u0002\u0000",
+ "Foreground": "\u0000\u001f\u0010\u0000\u0010\u0010\u001fð\u0010 Çÿð\u0000\u0001ÿ\u0007Á\u0000 \b?ÿ$\u0000\u0000>H\u001fðD @Aò@ÿ \u0010\u0004A\u0004!\n\u0011A\u0012\b\u0001\u0000",
"Programmable": "\u0000m\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000A\u0000\u0003\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u000fÿÄ$\u0000\u0000\b$\u0000\u0000\u0002\u0000\u0000\u0010BI\u001f \u0000\u0000& \u0000\b\u0000\u0000û\u0016\b|\u0001Ô\u0003\u0000@\u0007Ä\u0000P\u0000< \b\u0000à\u0002\u0000\" \u0000\b\u0001\u0001\u0000\u00029\u0000 \u0001\u0011\u0007ä @\b\b\u0004@\u000e\b\u0001\u0000\b!\u001f\u0004\u0000 B\u0000\u0000@\t\u0000DA\b\u0000 \u0001\u0004\u0004 \u0000\u0004\u0000\u0002\"\u000fÈ\u0000\tà\u0001\u0000\u0000 \u00040\u001f\u0010BH \u0000p\u0010\u0000\u0002\u0001N@\u0013\u0000\u0002\u0000\u0001\u0000\u0000 \u0007\u0000\u0004\u001f \u0000\u0000\u0000\u0010\u0000\u0006\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0001\u0000\u0000À\u0000\u0000\u0000\u0005\u0004¤ \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\"\u001f",
"Customize": "\u0000\\\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\t\u0004\u0000C\u0004\u0000\u0000\u0000\u0000P@\u0003È\u0000|\b<\u0000\u0010\u0007À\u0001\u0000\b@| \u0002\u0000\u0002\u0007Ä\u0000\u0010\u0000\u0000\u0004\u0000À\u0000 \b@\u0002\u0000\u0014\u00004\u0000\u0004\u0000\u0000 \u00020\u0000\u0010\f \u0000@\u0010\u0005\u0000A\u00002\u0000\u0002\u0000\n\u0001\b\u0000\u0000 \u0000À\u0000 \u0001\u0010 0@\u0004\u0000\u0002\u0000\u0002\u0000`P\f\u0004\u0000\u0000\u0010\u0000 \u0018\b\u0000\u0000\u00000\u0000\u0000\u0000\u0002\u0000\u0000\u0000 \u0000\u0000\f\u0000\u0000\u0000\u0000 \u0000\u0000",
- "Dark BW": "\u0000>\u000e\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000! \u0000\u0000 \u0000\u0000\u0000B\u0000\u0000N\u0000\u0000\u0001ø\u0000\u0000\u0001È>!\b@\u0000\u0000\u0004@!\u0000\u0000\u0000!\u0002\u0012\u0011H\b\u001f\u0000\bHH \u001f\u0004 >-A\u0000\u0000\u0000!\u0000´\b\u0000\u0000\u0000\u0004\u0002\u00130@\u0000\u0000\u0000 \bLÂ\u0000\u0000\u0000\u0001\u0000!!0\u0000\u0000\u0000\b\u0000ø\u0000\u0000\u0000\u0000@\u0000\u0000\u0000",
+ "Dark BW": "\u0000N\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0010\u0001ÿÀ\u0000\u0000\u0000\u0004!\u0001\n\u0000\u0000\u00018\u001fü\u001fü\u0007à\u0000\u0000\u0007 @\u0010B\u0010!\u0000\u0000\u0000\u0011\u0001\u0000AÿÀ\u0000\u0000\u0000\u0004\u0001\u0000 \u0005 |\u0002 \u0010\u0004\u001fü\"~\u0000\u0010ð\u0002\u0001\u0004\u0000\u0000\u0000\u0001\u0000@\b\u0000 \u0000\u0000\u0000\u0010\u0004\u0001\u001fÿÁ\u0000\u0000\u0000\u0000\u0010\u0004\u0000\u0000\b\u0000\u0000\u0000\u0004\u0000@\u0010I\u0010À\u0000\u0000\u0000 \u0001\u0000A\u0012,\u0000\u0000\u0000\u0001\u0000\u0007ÿ\bH\u0000\u0000\u0000\u0000\u0000\u0010\u0004@\u0002",
"Background 2": "\u0000'\u0010\u0000\u0004\u001fð\u0000\t0 \u0001óÀ\u0000$ \u0001ÈAÿ\u0003Ü \bP\u0000?ÿø\u0000\u0000\u0001\u0010\u0010\u001fð\f?à @@@@ÿÿ\u0001\u0001\u0000\u0010\u0004\u0002\u0002\u0004!\u000fÄ\u0014\u0011A\u0000\b\u0010\u0001\u0000\u0000",
- "Quiet Mode": "\u0000\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000BDàCà\u0000@\u0000\u0000\u0000\u0000\b\u0000!À\u0000\u0000\u0010£\u001e\u0010\u0000@\u0000p\u0000\u0000\u0004\u0000\u000f\u0000\u0000\u0000\bA\u0010\b\b\u0000@\u000fÀ\u0000\u0000\u0002\u0000\u0001\u0000\u0000\u0000\u0004\u0001\b\u0002\u0004\u0000À\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0002\u0000\u0001\u0004\u0001 \u0000 \u0000\u0000à\u0004\b\u001f\u0001À\u0000\u0003\b\u0000\u0010\u0001\"\u0000L\u0001à\u0003ð\u0000\u0000\u0002\u0000\u0004\u0000\b\u0000Q\u0000!\u0000\u0010\u0000\u0000\u0000B\u0002\u0000\u0001\u0000\u0002\u0000\u0004\u0000!\u0000\u0010\u0000\b\u0000\u0000\u0000 \u0002\u0000\u0001\u0000\u0001\u0000\u0007à\u0000\b\u0000\u0004\u0000\u0000\u0000\u0010\u0002\u0000\u0001\u0000\u0000<\b\u0000\u0004\u0000\u0001ð\u0000\u0000\b\u0002\u0000\u0001\u0000\u0000@\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0004\u0002\u0000\u0001\u0000\u0000 \u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0002\u0000",
- "Highlight FG": "\u0000^\r\u0000\u0000\u0000\u0000@\u0000\u0000\u0000@\u0010\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0001\u0000 \u0000\u0000\u0000\u0000\u0000\b\u0001À\u0000\b\u0000\u000fÇ@\u0000@\u00008\u0000@\u0002\u0000 !\b\u0006\u0000G \u0006\u0000\b\u0000!\u0000h\u0000àh\u00008\u0002\u0002\u0001\u0002\u0006\u0010\u0000\u0002\u0006\u0010\u0000\u000f\u0004\b\u0000@\u0000\u0010\u0000@\u0002\u0010 ' \u0010\u0001\u0000\u0000@\u0001\u0000\b\u0000
\u0000@\u0004\u0000\u0002\u0000\u0004\u0000 \u0002\u0002\u0018\u0001\u0000\u0010\u0000\u0010\u0000\u0010\u0000\b\bÀ\u0000\u0000@\u0001\u0000@\u0002\u0000 \u001d\u0000\u0000\u0001\u0000\u0018\u0000\u0001\u0000\b\u0000\u0000\u0000",
- "Foreground 2": "\u0000\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0012\u0000\u0000\u0001\u0000\u0000\u0000\bH\u0000\u0000\u0001\u000f& \u0000\b\u0000\u0000\u0000B\u0007\u0000\u0000\u000f\b\u0003¨\u0007\u0000\u0000\f\u0000\u0004 \u001e\u0000\b\u0000\u0001\u0000\"\u0000\u0003\u000f @@\u0002\u0010\u0010\u0000@\u0001 \u0004 \u0011È\u001f\b\u0001\u0004\u0004\u0000!\u0001\u0000\u0000\f\u0000D\u0000à\u0000p\u0000\u0010 \u0007À\u0000\b@\u0000\b\b\u0010\u0000\b\u0004À\u0006\u0002\u0000\f\u0000\b\u0001\b\u0000\u0001\u0000A\u0000\u0001\u0000B\u0000@\u0001@\u0000\u0000\u0000\u0010\u0004 \u0000 \u0004\u0000\u0010\b\u0000$\u0000\u0010\u0000\u0010\u0000\u0002\u0000\u0002\u0000\u0004\u0000@\u0002\u0001\u0000\u0004@\u0001\u0000\u0002\u0000\u0000@\u0000@\t\u0004\u0000 \u0000\u0000 \u0000@\u0000\u0018\u0000\b\u0000`\u0000@\u0003ð\u0000\u0000@\u0004\u0000\b\u0000\u0006\u0000\u0001\u0000\u0000\u0000\u0004\u0000\u0000",
+ "Quiet Mode": "\u0000z\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0010\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0010\u0010\u0000\b\u0002\u0000\u0000\u0000\u0001\u0000\u00048\u0000\u0000\u0002\u0014D\u0000\u0004\u0000\u0001\u0000@\u0000ð\u0000\u0000\u0000\u0011\u0000\u0002\u0000 \u0000\u0010 \u0010\u0000\b\u0000\u0000\u0000 $ø\u0003\u0000\b\u0000\u0002\b\u0004\u0000\u0002\u0000\u0000\u0000\b\u0007Ð\u0003@\u0002\u0000\u0000\u0004\u0001À\bþ\u0010>\u0003D\u0003\b\u0000\u0000\u0001\u0000L\u0001à\u0003ð\u0000\u0011\u0000\u0002\u0000 \u0000\u0010\b\u0000\u0000\u0000!\u0004@\u0000\b@\u0000@\u0004\u0000\u0002\u0000\u0000\u0000\b\u0000 \u0000 \u0002 \u0000 \u0001\u0000\u0000\u0000\u0000\u0002\u0000\b\u0000\b\u0000°\u00010\u0000@\u0000\u001f\u0000\u0000\u0000\u0004\u0000\u0002\u00000\u00000\u0000\u0010\u0000\u0000\u0000\u0000\u0000 \u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\b\u0000",
+ "Highlight FG": "\u0000n\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 ?à\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0004\u0000\u0000\u0000\u0004\u0001\u0000\u0001\u0004\u0003þ\u0000\u0000\u0000\u0010\bà\u0000\u0010\u0002\u0000ÿ\b\b\u0000\u0000\u0000\u001c\u0000\u0000\b\u0000\u0000\u0000?àD\u0000\u0004\u0000\u0003\u0004\u0000 \u0001ð@\b\u0000\u0000`\u0004r\u0000`\u0000\u0004I\u001fÿÂ\u0010\u0006\u000e\b\u0006\u0003\u0011$\u0000\u0000\u0010 a\u0000\u0000 a\u0000\t|?à@\u0004\u0000\u0001\u0000\u0004\u0000!\u0001\u0012@\u0001\u0000\u0010\u0000\u0004\u0000\u0010\u0000\u0004I\u0002\u0002\u0010\u0004\u0000@\u0000 \u0000@\u0002\u0000\u001f$\u000fø\u0010\u0001\u0000\u0001\u0000\u0001\u0000\b\u0000D\u0010\u0002\u0000\u0000\u0000\u0004\u0000\u0018\u0000\u0004\u0000 \u0001\u0010A\b@\u0000\u0000\u0010\u0001\u0000\u0010\u0000\u0005E\b \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0012\b\u0001\u0000",
+ "Foreground 2": "\u0000'\u0010\u0000\u0010\u0010\u001fð\u0000\u0010 \u0000 À\u0007ÿð\u0000\u0000\u0001ÿ\u0003ÇÁ\u0000 \bH?ÿ$\u0000\u0000\u0001>H\u001fð\fD @@ò@ÿ\u0002 \u0010\u0004\u0004A\u0004!\u000fÊ\u0011A\u0000\u0012\b\u0001\u0000\u0000",
"Remove": "\u0000\u001e\u0010\u0000\u0010\b\u0000\u0002H#Â\u0005 \b\u0015\u0012(P\u0010H¢#ù#\u0010H$¾à$ þH\t\"_è$\b?(¨\b\b\"\"(¢(¡\u0004 @",
"Passkey BETA": "\u0000^\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003à\u0000\u0000\u0002\u0000\u0000\u0000\u0003ãóøÈ@\u0000\u0000\b\u0000\u0000\u0000\bH\u0001\u0004¡\u001e\u001e\u001e\"\u001e!\u0000! \u0004\u0012\u0000\u0010à\u0012\u0002\u0002\u0012\u0010\u0003ãàB\u0018\u0007Æ\u0006\f\u000fÈ@\bH\u0001\u000fà!\u0006\u0006( !\u0000! \u0004!\u0004\u0004L\u0000\u0010\u00022\u0012\u0012\"\u0010Ð\u0002\u0012\u0000B\u0018\u0007GG@\u000fÁ\b@\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000x\u0000\u0000\u0000\u0000\u0000",
"Add Device": "\u0000l\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0010\u0004\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000Oð@\u0004u\u0000\t\u0000\b\u00048\u0000ð\u0004\u0004\u001f8@\u0000P\u0001\u0000<4\b\u0013ù\u0010\u0000\u0002$\u0000 \u0000\u0010\u0004D\u0000ÿ\u0004À\u0011\u0000\f\u0000\u0001\u0000D#È\u0000I\u0017À\u0001\b\u0003@\u0000 \b\u0004\u0004\u0002\u0000 @Â\u0000\u0002\u0000 OøI\u0010 \u0002\u0004\u0000 \u0000P\t\u0002\u0004\u0004\u0000@ \u0002\u0000\b@H\bI\u0010@\b\u0002\u0000 \u0003\u0004\n\u0004\u0004ÿ\b\u0001\u0000 \u0002\u0000À@AH\b\u0011\u0000\u0000\u0000\u0000 \u0000\u0000\u0000`\n\u0000\b \u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0001\u001fù)\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000!\u0000",
- "LCD Timeout": "\u0000r\r\u0000\u0000\u0000\u0000\u0004\u0000\u0000@\u0004\u0000\u0000\u0000\u0004\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0010ø\u0000\u0002\b\u0007\u0000>\u0000\b\u0000 \u0003Â\u0000 \u0000\u0002\u0012 \u0010\u0004\u0000\b\u0000\u0001\u0000\u000f \u0004@\u0006\u0000\u0004\u0000\u0004| \b !\u0002\u0006\u0001\u0000\u0000À\b\b\u0003\b\bA\u0018\u0006\u0010\u0000H\u0000 \u0002\u0004\u0000\u0002\u0002\u0010\u0000\u0004\u0000!\u0000\b\u0000A\u0000!\u0001\u0000\u0001\u0000\b`\u0002\u0000\u0010\b !!\u0000\u0000@\u0014ä\u0001\u0000\u0000 \u0002\b\bH@\u0000\u0010\u0003Á\u0000@\u0000\u0010\u0000ñãÀ`\u0000\u0004\u0000\u0000\u0000 \u0000\b\u0000 \u0000\u0000\u0000`\u0000\u0001\u0000\u0000\u0000\u0010\u0000\u0004\u0000\b\u0000",
- "Highlight BG": "\u0000^\r\u0000\u0000\u0000\u0000@\u0000\u0000\u0000@\u0010\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0001\u0000 \u0000\u0000\u0000\u0000\u0000\b\u0001À\u0000\b\u0000\u000f@\u0000@\u00008\u0000@\u0002\u0000!!\b\u0006\u0000G \u0006\u0000\b\u0000!\u0000h\u0000àh\u00008\u0002\u0012\u0001\u0002\u0006\u0010\u0000\u0002\u0006\u0010\u0000\u000f\u0004\b\u0000@\u0000\u0010\u0000@\u0002\u0010!' \u0010\u0001\u0000\u0000@\u0001\u0000\b\u0000
\u0000@\u0004\u0000\u0002\u0000\u0004\u0000 \u0002\u0012\u0018\u0001\u0000\u0010\u0000\u0010\u0000\u0010\u0000\bHÀ\u0000\u0000@\u0001\u0000@\u0002\u0000>\u001d\u0000\u0000\u0001\u0000\u0018\u0000\u0001\u0000\b\u0000\u0000\u0000",
- "LCD Brightness": "\u0000¼\u0010\u0000\u0000\u000fà\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u000fÀ\u0000\u0000@\u0017þ\b \u0000$\u0000\u0000\u0000\u0000\u0000$\u0010\u0000\u0000 \u0000\u0000|\bÀ\u0002\u0001\u0012\u0000þ\u0001\u001d@\u0000\u0001\u000e\u0002>@\u0000\u0002\u0000<\u0004H@t\u0000\u0013 \b \u000e\u0010\u0000\u0000\u000f \u001cX\b\u0000\u0000@\r D\u0000!Ä#À\u0000\u0000\u0000\u0002\u0000\u0004\u0000\u0004\u0000\u0000\b\u0001\u0011\u0004OÀ\u0010\u0001èBD\u000fà ð\u0000@\u0000@\u0000\b\u0000\u0003\u0000\u0011\b|\u0002\u0000\u0000Af@\u0000\u0001ð\u0000\b\u0000\b\u0000\b\u0000\u0000Ð\u0002 H@|\u0000\u0004\u0012~ü\u0000\u0003\u0000\u0001\u0000\b\u00100\"\bD\f \u0007â4(@\b\u0001È\u0000\u0014\u0000\u0010\u0000\u0000\b\u0002@OÁ\u0001\u0000âHB\u0001\u0000\u0000\u0002 \u0002\u0000\b@\u0000$\u0010| \u0010\u0010\u0002#\u0007ïÀ\u0010\u0000\b\u0000Á\u0000@\u0000\u0000\b\u0002\u0004H@9\u0001\u0000\" B\u0002\u0000\u00000\u0010\b\u0000\u000b\u0000\u0000\u0010`\u0001\u0004\u0004`\f\u0002%\u0004(@@\u0000\b\u0000\u0000\u0001\u0000\u0000À\u0000\b\u0000\u0018\u0000\u0010@D\u0000<\"~ü\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0014\u0003\u0000\u00000d(@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000",
- "Connect device\nto add to\nwhitelist": "\u0000X\u0012\u0000\u0010\u0010 \u0011$\u0000\u0000\u0000\u0000\u0000\u0010@\u0010 \u0011$>|\u0000\u0000\u0000\u0013ü#þ\u0012ª\"D\u0000\u0000\u0000\u0010\u0000( \u0013®\"D\u0000\u0000\u0000ý\bIüù$>|\u0000\u0000\u0000\u0010ð\u0000\u0012ª\u0001 \u0000\u0000\u0000\u0017þ\u0013þ3®\u0001\u0010\u0000\u0000\u0000\u0010@\"\u00029$ÿþ\u0000\u0000\u0000\u0018@L\u0004Wþ\u0002\u0000\u0000\u00007þøQ\u0010\f`\u0000\u0000\u0000Ð\b\u00140\u0018\u0000\u0000\u0000\u0011\b\u0000\u0011\u0014À\u0006\u0000\u0000\u0000\u0010¨\u0012>|\u0000\u0000\u0000\u0010`©\u0012\u0012J\"D\u0000\u0000\u0000Q\u0012\u0012\u0016\"D\u0000\u0000\u0000&\u0004\u0002\u000e\u0014\">|\u0000\u0000\u0000\u0000\u0000\u0000 \u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 @\u0010\u0000\u0000\u0000\u0001\u0000\u0001",
- "Wake on BTN3": "\u0000^\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0010\u0002\u0000\u0000\u0000\u0000\u0000\u0003ãú\u0011è@\b\u0000\u0000\u0000\u0000\u0000\bA\fHa\u001e\"\u001e\u0000\u001e.\u0000!\u00041!\u0000Ä\u0000\u0010¤\u0006Ð\u0012\u0010\u0002\u0012\u0010\u0003àBëGÌ\u000fÀ\bH@\bA\t@s!( \u0000!!\u0000!\u0004%\u0001Ì\u0000\u0000\u0010\u00122\"\u0010\u0002\u0012\u0010\u0002\u0010B2\u0018GHG\u0007@\u000f\bG",
- "Wake on BTN2": "\u0000^\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0010\u0002\u0000\u0000\u0000\u0000\u0000\u0003ãú\u0011è@\b\u0000\u0000\u0000\u0000\u0000\bA\fHa\u001e\"\u001e\u0000\u001e.\u0000!\u00041!\u0000Ä\u0000\u0010¤\u0006Ð\u0012\u0010\u0002\u0012\u0010\u0003àBkGÌ\u000fÀ\bH@\bA\tB3!( \u0000!!\u0000!\u0004%\u0010Ì\u0000\u0000\u0010\u00122\"\u0010\u0002\u0012\u0010\u0002\u0010B2\bGHG\u0007@\u000f\bOÀ",
- "Time Zone": "\u0000[\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0001\u0000\u0000\u0010\u0001\u0000\u0000R\u0000\u0000\u0000\u0000\u0010\u0000\u0002\u0000\u0010\u0002\u0005@\u0000\u0000\u0000\u0003à\u0000\u0002\u0000 \u0000\u00000\u0000\u0000 \u0000@\u0002\u0010\u0000\u0000\u0001\u0002\u0011\u0000\u0018\u0000\u0010\u0000B\u0000\u0000\u0000\u0010E \r\u0000\u0002\u0000\b@@ø\u0000\u0011\u0018\u0006\u0010\u0000H\u0000\u0010\u0007à\u0000\u0002A\u0000\u0002\u0000\u0010\u0002\u0000\u0000\u0000\u0000@\u0000@\u0002\u0018\u0000\u0000\u0000\u0000 \u0010\u0000\b\u0002\u0010\u0000\u0000\u0000\b\u0004\u0000\u0001\u0000<\u0010\u0004\u0000\u0000\u0000&\u0003\u0000\u0000 \u0000\u0000\u0001\u0000\u0000\u0000\u0003\u0001\u0000\u0004\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000",
- "Wake on Touch": "\u0000\r\u0000\b\u0000\u0000\u0000\u0000\u0010\u0000\u0002\u0000\u0000\u0000\b\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0010\u00018\u0000 \u0000\u0000\u0000\u0000\u0000\u0000À\u0010\u0000\u0000\u0000\u0004\u00009\u0000\u0004\u0001\u0000\u001f\u0000\u0000\u0001à\u0003à\u0000\u0000\u0001\u0000\u0004@@ð\b\u0010\u0004 \u0000\u0000\u0002\u000f\u0000\u0000\u0000À\u0001\b\u0007ð\u0000\u0000\u0000\u0000\u0000>\u0007\u0000h\u0000\"\u0000\u0006\u0000\u0000)\u0000\"\u0001\u001c\u0010 \u000f\u00000\b@\u0001@\u0000\u0010\bÀ\u0012 \u001c\u0004\u0000 \u0000\u0010\u0002\u0010\u0000H\u0000\u0004\u0002\b\u0001D\u0000\u0010!\u0000\u0004\u0000\u0002\u0000\u0002\u0000\u0011\u0000\u0001\u0000\u0002\u0000!\u0000\u0002\u0000 \u0000\u0000@\u0000\u0004 \u0000@\u0000\u0000 \u0000\b\u0000\u001e\u0000\b\u0000 \u0001\u0004\u00010\u0000 \u0000\b\u0000\u0010\u0002\u0000< \u0001\u0000\b\u0000\u0001\u0018\u0000\u0018\u0000\u0002\u0000\u0004\u0000\u0000\u0000\u0000 \u0002\u0000\u0000\u0010\u0000\u0000\f\u0000\u0000\u0001\u0000",
+ "LCD Timeout": "\u0000?\u0010\u0000\u0000\u0000\u0000\u0000\u0000@\u0010\u0001ÿýÿüD \u0000\u0000\u0000\b\u0000E Oø\u0000\u0000\u0010\u0000\u0004þ@@\b\u0004\u0005B\t$ÿ\b\u000b\u0004\u0012I\t\u0012\u0012\u0014\b'ò\u0012$\u0005\u0004H\u0010I$'È\u0013ø\u0010 HH$\u0010 A$# @!>A\u001fÁA\u0004\u0000BD B\b\u0000\u0004A\b\u001fÿ\u000fþ\b\u0010(\u0000\u0002\u0010\u0004\u0001\b@ ",
+ "Highlight BG": "\u0000n\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000?à\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000$À\u0000\u0000\u0004\u0000\u0000\u0000\u0004\u0001\u0000\u000f\u0003þ\u0000\u0000\u0000\u0010\bà\u0000\u0010\u0002\u0000\u0002B\b\b\u0000\u0000\u0000\u001c\u0000\u0000\b\u00009\b?àD\u0000\u0004\u0000\u0003\u0004\u0000 \u0007#à\b\u0000\u0000`\u0004r\u0000`\u0000\b\u0000\u001fÿÂ\u0010\u0006\u000e\b\u0006\u0003\u000fø\u0000\u0000\u0010 a\u0000\u0000 a\u0000\t ?à@\u0004\u0000\u0001\u0000\u0004\u0000!\u0000ÿ\u0001\u0000\u0010\u0000\u0004\u0000\u0010\u0000\u0002\u0002\u0002\u0002\u0010\u0004\u0000@\u0000 \u0000@\u0002\u0000\u000fø\u000fø\u0010\u0001\u0000\u0001\u0000\u0001\u0000\b\u0000 \u0002\u0000\u0000\u0000\u0004\u0000\u0018\u0000\u0004\u0000 \u0000\b@\u0000\u0000\u0010\u0001\u0000\u0010\u0000\u0002\n\b \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0010\u0001\u0000",
+ "LCD Brightness": "\u0000l\u000f\u0000\u0001ø\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\u0018\u0000@\u0000\u0000\u0002\u0000\u0000\u0004\u0000\u0000\b\u000e\u0002`\u0007\u0010\u0000\u0001 \u0002\b\u0010\u00048\u0001¤\u0001\u0000\u0000\n\u0001\u0010ø\u0002\u0000=\u0000\" \u0010\u0000\u0004\t\u000f@\u0000\b\u0002!\u0001\u0000\u0000 \u0000\b\u000f\u0000D\u0010\u0010\u0000\u0000\t\u0018\u0000ü\u0004A\u0001\u0002\u0006\b\u0000ø \u0010@H\u0010\u0010@\u0000`\t/\u0002\u0002\u0000\u0004\u0001\b\u0000\u0001\u0012\b\u0007 \u0000P \u0011\u0000\u0000\u0000\u0011@ \u0001\u0002\f\u0001`\u0000\u0000\u0002\u0018\u0002\b\b\u0007\u0003\u0000\u0018\u0000\u0000\u0000A\u0000Bp\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
+ "Connect device\nto add to\nwhitelist": "\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000B\u0000@\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\b \b\u0010\u0000\u0000\u0000\u0000\u0002@\u0000\u0002\u0000\u0000\u0000 \u0001?Â?á\u0000\u0000\u0003£¨\u0000H\u0000@!À% \u0000P@\u0010\u0000\u0000\u0005\u0000\u0010\u0003È\u0003À?B\u0012\u0002\u0000\u000f \u0000\u0000D\u0004\u0000\u0002\u0000 \u0000\u0000@\u0000\b ð\u0004@\u0003\u0000\u0000@\u0004 \u0017þ\u0013þ\b\u0000\u0001\u0003à\u0000\u0001 \u0000\u0010\u0001ç\u0002\b\u0004@A\u0000\u0000@\u0002\u0000 @Â\u0000\u0002\u0000c\u0000a\u00010\u0010 \u0000\b\u0000@\u0004\b\u0000@\u0000 \u0010À\u001bÿ|H\u0004\u0000\u0001\u0000\u0010\u0001\u0000\b\u0000\"\u0000(\r\b\u0000 \u0002\u0000@\u0010\u0001\u0000\u0018 \t\u0000\"\u0010\u0001 \u0010 \u0004\u0000\u0010\u0002\u0000 \f\u0004\u0002\u0000\u0004$*$\u0001\u0018\u0000@ \u0000\u0000\u0000\u0004\u0000\u0000\u0000@\u0000\u0005H\u001c\u0000\u0007\b\u0000\u0000\u0000\u0000\u0000\u0000\u0007àQ\u0012\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004ÀAÀ\u0000\u0000\u0000",
+ "Wake on BTN3": "\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ÀãÂ\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0004\b\u0000\u0000\u0000\u0000\b\u0000\bp\u0004\u0010\u0000\u0000\u0011ò\u0012\u0012(Pøþx!à\u001e@\b@\u0000\u00008°¨¢\"\u0010C\u0012\u0010À\u0002\u0000!\u0000\u0000\u0000\u0002\u0005ôC\u0010HA\fHD\u0004\u0000\b\u0000\u0000\u0000\u0000\u0010\u0005B\n¾á\u0004)\u0001\u0010\u0000\u0000@\u0002\u0010 |\u0000@\u0015($ ø\u0010¤8@\u0000\u0001\u0000\b@~\u0000\u0002\u0000|ø\u0010BP\u0011\u0000\u0000\n\u0000!\u0000\u0000\u0000\b\u0001T_èA\t@D@\u0000D\u0000\b\u0000\u0000\u0000@\u0005B\r\b!\u0004#!\u0015\u0000\u0006\b\u0000 \u0000\u0000\u0002\u0000\u001f(¨\u0010#ð` \u0001\u0000\u0000\u0000\u0010\u0000T àB\u0011à\u0000\u0000\u0000\b\u0000\u0000\u0000\u0002P\" \u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\bB\b(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000C\b @",
+ "Wake on BTN2": "\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ÀãÂ\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0004\b\u0000\u0000\u0000\u0000\b\u0000\bp\u0004\u0010\u0000\u0000\u0011ò\u0012\u0012(Pøþx!à\u001e@\b@\u0000\u00008°¨¢\"\u0010C\u0012\u0010À\u0002\u0000!\u0000\u0000\u0000\u0002\u0005ôC\u0010HA\fHD\u0004\u0000\b\u0000\u0000\u0000\u0000\u0010\u0005B\n¾á\u0004)\u0001\u0010\u0000\u0000@\u0002\u0010 |\u0000@\u0015($ ø\u0010¤\u0018@\u0000\u0001\u0000\b@~\u0000\u0002\u0000|ø\u0010BP\u0000\u0000\n\u0000!\u0000\u0000\u0000\b\u0001T_èA\tD\u0004@\u0000D\u0000\b\u0000\u0000\u0000@\u0005B\r\b!\u0004# \u0015\u0000\u0006\b\u0000 \u0000\u0000\u0002\u0000\u001f(¨\u0010#ð` \u0001\u0000\u0000\u0000\u0010\u0000T àB\u0013ð\u0000\u0000\u0000\b\u0000\u0000\u0000\u0002P\" \u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\bB\b(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000C\b @",
+ "Time Zone": "\u0000.\u0010\u0000\u0000@\u0000\u0000\u0012@\u0001\u0003çÀI\u000f\b\u000fÿ¢þ>|\u0004@\u0010\u001fÂ!\u0003çÀ\u0000\bÿÈ\u0001\u000fÿþ\u0004'ä \u0010\u0002\n/ò~@ÿ\t\t\u0002\"\"D'ä\bø\"¢ B\u0000@\u0000\u0005\b\u0005\u0000 \u0000\b \b\u0000",
+ "Wake on Touch": "\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0002\u001f\b\u0002\u0000\u0000\u0000\u0000@ \u0000\u0000\u0000\u0000@\u0000\u0000\u0000$<$H@\b\u0000\u0000\u0000\f\u0000\u0000\u0000A\u0000\u0000\u0001\u001f!!\"
\u0000|\u0000\u0000\u0007\u0004<\u0003È\u0001\b\u0000\u0000\u0007\u0016\u0012\u0015\u0014D\u0004 \u0000\u0000\u0002\u0000&0\u0000\b@\u0000\u0000\u0000}\u0010Ä\u0010\"\u0000\u0000\u0000\u000f\u0002\u0000\u0004\u0000B\u0000\u0000\u0000\b\u0002¡\u0005_b\u0002 \u0011À\u0010\u0000\u0000@\u0002\u0010 |\u0000@\u0015($ #\u0000Hr\u0000\u0000\u0002\u0000\u0010ü\u0000\u0004\u0000ùñ!\u0002\b\u0001D\u0000\u0010\u0004\u0000\u0000(\u0000\u0000\u0000\u0000 \u0005R\t\b@\u0000\"\u0000\u0002 \u0000@\u0000\u0000\u0002\u0000*\u0010h@\b\u0000\u0002\u0000\b\u0001P\u0000`\u0002\u0000\u0000\u0000 \u0001÷ò\u0000 \u0000@\u0004~\f\u0004\u0000 \u0000\u0000\u0002\u0000\n\u0010\u0018\u0000\u0002\u0000\u0004\u0000 \u0000\u0000\u0000\u0002\u0000\u0000\u0000 \u0000 \u0000\u0000 \u0000@\u0001\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0004!\u0004\u0014@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000C\b @",
"Twist Timeout": "\u0000\r\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\b\u0000\u0000\b\u0000\u0000\u0000\b\u0000 \b \u0000@!À\b\u0000\u0002\u0000\u0000@\u0002\u0000Cà\u0002\u0000\b\"\b\u0000@\u000f \u0004\u0000\u0001ð\u0000@\u0001\u0000\u001e\u0010\u0001\u0000\u0004\b\u0000@\u0000 \u0002\u0000\u0001\b\u0000@\u0000\u0000\u0010\u0000ø\u0002\u0002D\u0000À\u0000\u0010\u0001\u0000\u0000\u0000À\u0000\u0000\u000f\u0001\u0001\u0002\u0001 \u0000\u0010\u0000à\u0000¤\u0001 \u0000@\u00000\u0002\u0002\u0000à\u0002\u0003\b\u0000\b\u0000L\u0000\u0003\b\u0000$\u0000\u0010\u0001\u0002\u0000L\u0001\u0000\u0004\u0000\n\u0000!\u0000\u0000\u0004\u0000!\u0000\b\u0000A\u0000!\u0001\u0000\u0002\u0000\b\u0010\u0000\u0002\u0000\u0002\u0000\u0010À\u0004\u0000!\u0000\u0010\u0001\u0000\u0001\u0000\u0018 \b\u0000\u0002\u0000\u0001\u0000S\u0004\u0000\u0000\b\u0001\u0000\u00000\u0010\u0004\u0000\u0002\u0000\u0000\u001e\b\u0002\u0000\u0000\u0004\u0001\u0000\u0000@\u0000\u0000\u0002\u0000\u0006\u0000\u0000@\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0000 \u0000\u0000\u0001\u0000\f\u0000\u0000 \u0000\u0000\u0002\u0000\u0000\u0001\u0000",
- "Wake on Twist": "\u0000\r\u0000\b\u0000\u0000\u0000\u0000\u0010\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0002\u0000\u0000\u0000\u0000@\u0004à\u0000\u0000\u0000\b \u0000@!À\b\u0001\u0000\u0000\u0000\u0000@\u0003\u0000@\u0018\u0000\"\b\u0000@\u000f \u0004\u0000ø\u0000\u0000\u0000@\u0001\u0010\u0010<\u0002\u0004\b\u0000@\u0000 \u0002\u000f\u0000\u0000\u0000À\u0001\b\u0007ð\u0000\u0002D\u0000À\u0000\u0010\u0001\u0002\u0002\u0000\u001c\u0001 \u0000\u0000\u0018\u0000\u0002\u0001\u0002\u0001 \u0000\u0010\u0000á\u0002\u0000ð\u0003\b\u0000\u0000\u0014\u0000\u0001\u0000\u0002\u0003\b\u0000\b\u0000LA\u0000\b\u0000\u0004\u0000\u0000\u0012\u0000\u0001\u0000\u0001\u0000\u0004\u0000\n\u0000!!\u0000\u0004\u0000\u0002\u0000\u0002\u0000\u0011\u0000\u0001\u0000\u0001\u0000\u0002\u0000\b\u0010\u0000\u0002\u0000\u0001\u0000\u0002\u0000\u0010\u0001\u0000\u0001\u0000\u0001\u0000\u0018 \b\u0000\u0001à\u0000\u0002\u0000\u0010@\u0013\u0000\u0001\u0000\u00000\u0010\u0004\u0000\u000f\b\u0000@\u0002\u0000\u0000`\u0006\u0000\u0001\u0000\u0000@\u0000\u0000\u0002\u0000\u0000\u0000\u0000 \u0002\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0001\u0000",
- "Wake on BTN1": "\u0000^\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0010\u0002\u0000\u0000\u0000\u0000\u0000\u0003ãú\u0010H@\b\u0000\u0000\u0000\u0000\u0000\bA\fC!\u001e\"\u001e\u0000\u001e.\u0000!\u00041\u0014\u0000Ä\u0000\u0010¤\u0012Ð\u0012\u0010\u0002\u0012\u0010\u0003àBKGÌ\u000fÀ\bH@\bA\tA3!( \u0000!!\u0000!\u0004%\u0004Ì\u0000\u0000\u0010\u0012\u00122\"\u0010\u0002\u0012\u0010\u0002\u0010B0HGHG\u0007@\u000f\bGÀ",
+ "Wake on Twist": "\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0002\u001f\b\u0000\u0000\u0000 \u0000\u0000\b\u0000 \u0000\u0000\u0000\u0000@\u0000\u0000\u0000$<$H@ \u0001\u0000\u0000 \u0000\u0000\u0000A\u0000\u0000\u0001\u001f!!\"
\b\u0000\u0010\u0003È\u0001\u0000\u0004<\u0003È\u0001\b\u0000\u0000\u0007\u0016\u0012\u0015\u0014D\"\u0010\u0001\u0000\u0000\b\u0000&0\u0000\b@\u0000\u0000\u0000}\u0010Ä\u0010\u00000\u0000\u0004\u0000@\u0002\u0002\u0000\u0004\u0000B\u0000\u0000\u0000\b\u0002¡\u0005_d\b\u0006\u0000@\u0003\u0010\u0000\u0000@\u0002\u0010 |\u0000@\u0015($ \u0000Â\u0000\u0002\u0000\u0013\u0000\u0000\u0002\u0000\u0010ü\u0000\u0004\u0000ùñ!\u0000\u0004\u0000\u0010\u0000(\u0000\u0004\u0000\u0000(\u0000\u0000\u0000\u0000 \u0005R\t@\u0000\u0002 \u0004\u0000\"\u0000\u0002 \u0000@\u0000\u0000\u0002\u0000*\u0010h@\u0004\u0000\u0004\u0000` \u0001P\u0000`\u0002\u0000\u0000\u0000 \u0001÷ò@\u0000 \f\u0004\u0001\u0000\u0004~\f\u0004\u0000 \u0000\u0000\u0002\u0000\n\u0010\u0004\u0000\u0001\u0000\u0000\u0000\b\u0000 \u0000\u0000\u0000\u0002\u0000\u0000\u0000 \u0000 \u0000\u0000\b\u0000\u0000\u0000@\u0001\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0004!\u0004\u0014@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000C\b @",
+ "Wake on BTN1": "\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ÀãÂ\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0004\b\u0000\u0000\u0000\u0000\b\u0000\bp\u0004\u0010\u0000\u0000\u0011ò\u0012\u0012(Pøþ\u0010!à\u001e@\b@\u0000\u00008°¨¢\"\u0010C\u0010ÀÀ\u0002\u0000!\u0000\u0000\u0000\u0002\u0005ôC\u0010HA\fE\u0004\u0004\u0000\b\u0000\u0000\u0000\u0000\u0010\u0005B\n¾á\u0004)\u0004\u0010\u0000\u0000@\u0002\u0010 |\u0000@\u0015($ ø\u0010¤\u0010@\u0000\u0001\u0000\b@~\u0000\u0002\u0000|ø\u0010BPA\u0000\u0000\n\u0000!\u0000\u0000\u0000\b\u0001T_èA\tA\u0004@\u0000D\u0000\b\u0000\u0000\u0000@\u0005B\r\b!\u0004#\u0004\u0015\u0000\u0006\b\u0000 \u0000\u0000\u0002\u0000\u001f(¨\u0010\u0010#ð` \u0001\u0000\u0000\u0000\u0010\u0000T àB\u0011ð\u0000\u0000\u0000\b\u0000\u0000\u0000\u0002P\" \u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\bB\b(\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000C\b @",
"Log": "\u0000\u001c\u000e\u0000\u0000\u0000\u0000 \u0000\u0002\t\u0000\u0000\u0013X|\u0001Ôx@\u0011\u0004\u0004\u0002\u0010@@\"\u0002\b\u0004 \u0002x\u0000@8@\b\u0002\u0000\u0001\u0000\u0000\u0000 \u0000\u0000\u0004\u0000",
- "Wake on FaceUp": "\u0000n\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0010\u0002\u0000\u0000\u0000\u0000\u0000\u0003ð\u0000\u0000\u0002\u0010\b@\b\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\b@!\u001e\"\u001e\u0000\u001e.\u0000 \u001e\u001e\u001e!.\u0000Ä\u0000ÆÐ\u0012\u0010\u0002\u0012\u0010\u0003à\u0012\u0002\u0012\u0012\u001bGÌ\u000fÀ\bH@\b\u0007È\u000fÈHs!( \u0000!!\u0000 ! !!Ì\u0000\u0000\u00122\"\u0010\u0002\u0012\u0010\u0002\u00022\u0012\u0012\u0013\u0018GHG\u0007@\b\u0007G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
- "Twist Max Y": "\u0000\r\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000A\u0000\u0002\u0001\u000e\u0000@\u0000\u0000\u0000\u0000\u0000'\u0001\u000e\u0000\b\u0000\u0010\u0003È\u0001\u0000\b<\u0000\u0000\u0000ä\u0003È\u0010Q\b\u0000\u0000@\u0004\u0000\u001f\b\u0000\u0000\u0002 \u0000@A$@\f\u0000\u0001\u0000\u0010\u0000\u0000@\u0000\u0000\u0010\u0001\u0000\u0000Ð\u0000\b\u0000p\u0000\u0002\u0000D\u0000D\u0000\b\u0002 \b\f \u0000 \u00010\u0000\u0010\u0004\u0002\u0010\u0000 \u0005\u0000 \u0000\u0001@\u0004 \f\n \u0010\u0001@\b\u0001\u0000\u0002\u0000\b\u0010\u0000\f\u0000!\u0000\u0002\u0000\b \b\u0000\b\u0000Á\u0000@\u0000\b\u0000\u0004\u0000\u0010\u0000Á\u0000@\u0000 \f\u0004\u0001\u0000\u0000\u0010\u0000 \u0000\f\u0004\u0002\u0002\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0001\u0000\u0004\u0000\u0000\u0000\b\u0000\u0000\u0002\u0000\u0000\u0000\u0010\u0000\u0000\u0000\b\u0000 \u0000\u0000\u0000\u0000",
+ "Wake on FaceUp": "\u0000¯\u0010\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0002\u0001ÿü\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00000!øðÿð\b\u0000\u0002\u0000#\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000ð!\u0000\b\u0000\u0010\u0002\u0007À:\u0000\u0000\u0000A\u0000\u0000\u0001\u001f!!\"
\u0001ÿ\u0000@\u0003ø\u0000\b\u0001\u000f\u0000ò\u0000B\u0000\u0000\u0001Å
E\u0011\u0002\u0002\u0007ÿ\u0000\u0010\u0000 \u0002c\u0000\b\u0000\u0000\u0000\u0000\b\u0017Ñ\fA\u0004\u0004\t\u0012\u0000à\u0000\b\b\u0000\u0010\u0001\b\u0000\u0000\u0000 \n\u0015}ø\u0012$\u0002`\u0003à\u0010\u0000\u0000@\u0002\u0010 |\u0000@\u0015($ \u0010\u0010'È\u0004@\f \u0000\u0000\u0004 ?\u0000\u0001\u0000>|H@?àH\u0007 @\u0000\u0002\b@\u0000\u0000\u0002\u0000U ø@@ \u0001\u0000@\u0000\b\u0001\u0000\u0000\u0000\b\u0000¨A¡\u0000ÿ>@\u0004\u0000\u001cP\u0000`\u0002\u0000\u0000\u0000 \u0001÷ò\u0001\u0002D\b\u0000F\u0001\u001f\u0001\u0000\b\u0000\u0000\u0000\u0002¡\u0004$\u0002\u0004\u0000 \u0000\u0002\u0000\u0000\u0000\u0000 \u0000\u0000\u0002\u0000\tB\b¿ÿþ\u0000\u0000à\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0010Q\u0000\u0000\u0010\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000C\b @",
+ "Twist Max Y": "\u0000W\u000f\u0000 \u0000\u0000\u0000\u0000\u0000÷ð?à\u0000 \u0000@@\u0001( D@\u0000@\u0000D@\u0002@\u0000\u0000\u0000\u0005?ÿ\u0004\u0019\u0001\u0000\u0001D\fA\u0002\"\b/Ä\u0002\u0000\u0007\b\u0014\u0004D\b\b\u0004\u00006\u0010%ü\u000fø\u0011\b\u0010\b\u0000\b JD\u0002\u00140 \u0010\u00000@\u0018À\u0010`@ `¨ÀÑ`!G@A\u0002\u0006\"0EF\u0004D!\u0000D\u0000\u001c\u0000p\u0003\u0003\bQ\u0001\b\u0001\u0000\u0000\u0000\u0000\u0002\u0000\u0010Á\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000!\u0000\b \u0000\u0000",
"Utilities": "\u0000{\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\bð\u0000\u0000\u0004\u0010\bð\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000à\u0000\u0000\u0000B\u0000à\u0000\u0000\u0000\u0000#\u0000\u0000\u0000\u0000\u0000@\b@\u0000\u0000\u0000@\u0000\u0003\u0000\u0000\u0000\u001e\u0000\u0010\u0001\b\u0000\u001e\u0000\u0010\u0000\u0000\u0002\u0002\u0007Á\u001c\u0000\u0004\u0000!\u0001\u001c\u0000\u0004\u0002\u0007À?\u0000\u001c\u0003\u0004 \u001c\u0003?\u0000\u0010\u0000\u0000\u0000\u0010\u0003\u0000\u0000\u0010\u0003\u0000\u0000\u0007À\u0000\u0000\u0004\u0000\u0002\u0000\u0001\u0000\u0004\u0000\u0002\u0000\u0000\u001f\u0004\u0000\u0000\u0000\u0000@\u0000 \u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\b\u0000\b\u0000 \u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0001\u0000\u0002\u0000\b\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000 \u0000\u0002\u0000\u0000 \u0000\u0000",
- "Clock Style": "\u0000z\r\u0000 \u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0010\u0000\u0001\u0000\u0000\u0004à\u0000\u0000\u0000\u0000\u0004à!À\u0002\u0000\u0000@\u0002\u0001È\u0010ø\u0000\u0000\u0001È\u0007\u0000ø\u0000 \u0004@D\u0003Â\u0000\u0000\u0000D\u0000\b\u0000B\u0000\u0010\u0000!\u0000\u0000\u0000!\u0000\u0002\u0000\u0011\u0000\u0018\u0000$\b \b\b\u0001\u0000\n@\u001a\u0000\t\u0014 \u0004\u0010\t\u0010\u0004 \u0000@\u0004`\u0018@\u0002F\u0010\u0001\u0004\u0001D\u0002\u0010\u0000(\u0002\b\u0000\u0010\u0000\u0004\u0000O\u0000B\u0000\u0004\u0000\u0011\u0000\u0004\u0000\u0004\u0000D\u0000\u001c \u0000\u0002\u0000\u0018 \u0002\u0000\u0001\u0000\u0011A\u0000\u0004\u0000\u0000@\u0001\u0000\u0018\b\u0001\u0000\u0000@\b`\u0000\u0000\u0000 \u0000\u0000\u0000\u0001\u0000\u0010\u0004\u0010@\u0000\u0000\u0000\u0010\u0000@\u0000\u0000\u0001\u0000\u0004\u0000\u0000\u0000",
+ "Clock Style": "\u0000l\u0010\u0000\u0000@@@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0002\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ø@ @\u0000\u0000\u0000\u0000\u0004\u0000\u0000@\u0000\b¿Ä\u0000x\u0002\u001c\u0000 \u0000\u0004\u0000 @\u0000@\u001a@\u001e@\u0003à\u0000\u0011\b\u000f\u0002\"\u0000\b\u0000B\u0000\u0010\u0000ü\u0007ü\"\u0010\u0000\u0004@\u0006\u0000\t\u000f\u000f\u0004A\u0000\u0010\u0000¤\u0001 \u0000\u0010\u0000@D\u0010\u0001\u0000\u0011a\u0000\t\u0018¿Ï\u0004\u0000(\u0002\b\u0000\u0010\u0000\u0010@H \u0004@\u0001\u0000\u0001\u0000\u0011(\b\u0005\u0002\u0001\u0000 \u0000\u0010\u0001\u0014ø@ À` \u0004\u0000\u0001\u0000!\u000f\u00000\u0000\u0000\u0001\u0000\u0010\u0004\u0010\u0000P@\u0000\u0000\u0000\u0000`\u0000\u0001\u0000\u0000\u0000\u0002\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
"Rewrite Settings": "\u0000[\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000!ð\u0002\u0000\u0010\u0000\u0000\u0000\b\u0002\u0000\u0004\"\u001fÿÁ\u0000\u0000\u0001\u0000 \u0007ôB\u0000\u0014 \u000e\u0000\u0000@\u0004\u0000\u0000\u0004\u0000\u000e\u0000\u0010\u0000\u000f À\u0000\u0010@\f\u0000\u0010\u0000\b\u0000ÿâ\u0010\u000e\b\u0006\u0003>þ\u0000B\u0000\u0001\u0003\b\u0000L\u0000\b@\u0010\b@\u0000@\u0001\u0000\b@ù\b\"\u0000\u0010\u0000\b\u0000 \u0001\u0000\u0011\u0012\u0004~\u0002\u0000\u0002\u0000\u0004\u0000 \u0002\"\u0000\u0000\u0000\u0004\u0000D \u0011\u0000 \u0000`\u0000\u0010\u0000\u000f\u0005 \b\u00000\u0000\u0002\u0000\u0010\u0001\u0012!\u001fø\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001@\u0000",
"Flatten Battery": "\u0000«\u000f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000ÿø\u0004\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000@\u0000@\b\u0000\u0000 \u00020\u0001 \u0000\u0000\u0000A\u0000\u0000\u0000\u0000\b\u0000\u000e\u0000\u0002\u0007À:\u0000\u0014\u0000\u0000\u000e\u0000\u0004 \u0000\u0000\u000f\u0000\u0011\u0010\u0006\u0000\u0010ð?\u0000\u0012\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\"\u0001\u0000\u0002c\u0000\u0010\u0000 \u0011\u0000\u0000\u0000\u0001à\u0010\u0000\u0000\u0010$ \u0000\u000e\u0000\b\u0002\u0010\u0002 \u0011À\u0002\u0010 |\u0007\u0000\u0004\u0000\u0010\u0000\u0002`\u0003à\u0001\"\u0001È\u0000B\u0003ð\u0001\u000fÿà\u0002\u0000\u0000D\u0000Â\u0010 \u0014@\u0001\u0000\b@\u0000\u0000C\u0000\u0002\u0000\u001c @\u0000\u0007 $\u0002\u0002\u0010\u0000@\u0000\u0010\u0000\u0000\u0000 \u0000@\u0002\u0004\b\u0000\u0010\b\u0005\u0000@\u0002\u0000\b\u0000\u0002\u0000\u0000\u0000$\u0000\b\u0000@P\u0000\u0004\u0000\u001cÀ\b\u0000\u0002\u0000\u0000\u0000\u0000\b\u0000\u0001\u0000\u0000 \u0011ø\u0000\u0004`\u0000\u0000 \u0000\u0000 \u0000\u0000\u0001\u0000\u0000 \u0000\u0018\u0002\u0000\u0000 \u0000\u0000\u0000\b\u0000 \u0000\b\u0000\u0000\u0000\u001f\u0004\u0000\f\u0000@\u0000\b\u0000\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
"Debug Info": "\u0000]\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@@\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0004\u0002\u001f$\u0000\b\u0000\u0000\b$\u0013þ| \u0001 \u0000\u0000& \u0000#\u0000\u0005\u0000\u0000\u0001Ô\u0014\u0004%\u0000\u0000\u0011 \u0000\u0000\b°Aý\u0012\u000f\u0000D\u0000\u0000\u0000\u0005ôH\u000f\u0002\u0010\u0002 \u0004@J\u0000\u0014~\u0002\u0000 @HB\u0000Gñò\u0010\u0001\u0002\u0001D\u0004 \u0002 \u0014\u0000\u0010\b\b@\u0001\u0000\u0011ü\u0010¨\b\u0001\u0000@\u0002\u0000\u0010\u0000'õ@\u0010\u0002\u0000 \u0001\u0000\u0004\u0004$\b\u0000\u0000\u0000\u0002\u0000\u0010\u0000\"\b!P\u0000\u0000\u0000 \u0001\u0000\u0001\u0011A\f@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\bA",
"Storage": "\u0000L\r\u0000\u0000\u0000 \u0000@\u0000\u0000\u0000\u0000$8\u0001\u0000\u0002\u0000\u0000\u0000\u0003\t<\u0010\u0000 \u0000\u0000\u0000\bP\u0010\u0001\u0000\u0002\u0000\u0000\u0000\u0000\u0004\u0001\u0000\u0010\u0000 \u0000\u0000\u0000`\u0000 \u0001À\u0002\u0000\u0010>\u0001\u0002\u0002\u0000\u0013\u0000 @ü\u0000\u0000@P\u0001\b\u0002\b\u0000\u0000\u0000\b\b\u0010\u0000!\u0000\u0000\u0000\u0001\u0003\u0004\u0001\u0000\u0002 \u0000\u0000\u0000 À@\u0010\u0000,\u0000\u0000\u0000L\u0000\u0000\u0001\u0000\u0003\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
- "Reset Settings": "\u0000k\u0010\u0000 \u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u001f\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000B!ÿø\u0000\u0000\u0001\u0000 \u0000\u0000\u0000 D \u0001\u0001à\u0004\u0010\u0002\u0000\u0000\u0000\u0002\u0000\b\u0000@Ò\u0000B\u0000@\u0000\u0000\u0000@ú\f\u0000\u0000\" \b@\bð\u0000\u0000\b\u0000\u000fþ\u0004B\u0001\b\u0001b\u0000\u0000\u0001\u0003ïà\b\u0001\u0010@!\u00010\"\u00008\u0000\u0001\u0000\"\b\u0004 \u001c \u0012 \u0004Ï \u0004\u0000\u0000\u0001D\u0000
\u0011 Gà@\u0001\u0000\u0010\u0000!\u0000\u0010\"(\b\u0014\b\u0000 \u0002\u0000\u0000 \u0002\u0004B\u0001\u0010\u0001\u0006\u0000\b\u0000 \u0000\b\u0000@ø R\u0000\u0003\u0000\u0002\u0000\u0003à\u0002\u0000\b\u0011\"\u0011ÿ\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u00184\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
- "Twist Threshold": "\u0000º\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0004\u0000\b\u00048\u0001\u0000\u0000\u0000\u00048\u0002\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000@\u0002\u0016 \u0004\u0000ò\u0000@\u0000\u0000\u0000ò\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000D \u0002\u0000\u0001\u0000\u0010\u0000\u0000\u0000\u0001\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0012\u0000 \t\u0010\u0003\u0000\u0000@\u0004\u0000\u0003\u0000\u0000@\b\u0000\u0000\u0000\u0018\u0000\u0001à\u0004\b\u0002\u0004\u0003@\u0000 \u0001À\u0001à\u0000 \u0002\u0000\u0001\u0010\u0001\u0002\u0003\u0001\"\u0003\u0002\u0003\b\u0000\b\u0000L\u0000x\u0000\b\u0000\u0001\"\u0000\u0001\u0000\u0002\u0000H\u0000\u0002\u0000\u0005\u0000\u0010\f\u0000\u0005\u0000 (\u0000\u0007\u0012@!\u0000@\u0000\u0002 \u0004\u0000\u0000\u0000\u0002 \b@\b@\u0000@\u000e@\b\b\u0000 \u0000 \u0003\u0004\u0001\u0000\u0000\u0000\u0003\u0004\u0002 \u0000\u0010\u0000 \u0000\u0010\u0002(\u0002\u0000\u0010\u0000\b\u0003\u0001\u0000@\u0000\u0000\u0003\u0001\u0000°\u0000\b\u00010\u0000\u001c\u0001\f\u0000\b\u0000\u0002\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u00000\u0000\u0004\u00000\u00008\u0000 \u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000",
+ "Reset Settings": "\u0000k\u0010\u0000 \u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u001f\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000B!ÿø\b\u0000\u0001\u0000 \u0000\u0000\u0000 D \u0001\t`\u0004\u0010\u0002\u0000\u0000\u0000\u0002\u0000\b\u0000@ð\u0000B\u0000@\u0000\u0000\u0000@ú\f\u0000\u0000\b\u0000\b@\bð\u0000\u0000\b\u0000\u000fþ\u0001\b\u0001\b\u0001b\u0000\u0000\u0001\u0003ïà\b\u0000yÀ!\u00010\"\u00008\u0000\u0001\u0000\u0018À\u0004 \u001c \u0012 \u0004Ï \u00040\u0000\u0000\u0001D\u0000
\u0011 Gà\n\u0000\u0001\u0000\u0010\u0000!\u0000\u0010\"(\b\u0002@\u0000 \u0002\u0000\u0000 \u0002\u0004B\u0001\u0010\u0000\u0000\b\u0000 \u0000\b\u0000@ø R\u0000\u0010\u0000\u0002\u0000\u0003à\u0002\u0000\b\u0011\"\u0011ÿø\u0000\u0000\u0000\u0000\u0001\u0000\u00184\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
+ "Twist Threshold": "\u0000N\u000f\u0000 \u0000\u0000\u0000\u0000\u0000÷ð?à@\u0000\u0000\u0002P@\u0000\u0001\u0012\u0001\u0000\nA\u0002\"\u0004\u0000\u0004 \u0004à)ü\u000føÀ\u0010\u0000\u0014@Ä\u0010\"!ø@\u0000á\u0002@\u0001\u0000\r\t\u0003þ\u0004\b\u0004\u0000\u0004\u0010%\"\u0001@0 \u0010\u00000@\u0018ÀÀ@@Á\u0003Q¢Å\u001e\u0001\u0002\u0005\u0004\nD\u0018ì\u00020$\u0012!\b\u0002 \u0011À\u0007\u000000
\u0010\u0010\u0000\u0000\u0000\u0000@\u0002\u00180B\u0000\u0000\u0000\u0000\u0000\u0000\b@\u0002\b\u0000",
"Turn Off": "\u0000<\u0010\u0000?ø\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0002à\u0000\u0000\u0000þ\u0014 \u0000\u0000\u0004\u0010!D\u0000\u0004\u0001\u000ft
ü\u0000@\u000f\u0010\u0010\u0004PB\u0007\u0001\u001dpEü\u001fÀ\u0000 \u0000\u0001P@\f\u0000\u0002?ø\u0015ü\u0001@\u0000B\u0010R@$\u0000\u0004?øä \u0004@\u0000\u0010J\u0000\u0010?ø)$\u0010@\u0002\u0000\u0010\"¢ \f\u0000@\u0001\u00020 \u0000@\u0000\u0000\u000fà\u0004\u0000\u0000\u0000\u0000",
"Compact Storage": "\u0000¬\u000e\u0000\u0000\u0000\u0000\u0000\u0000`\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0001\u0000\u0002\u0000\u0000\u0000\u0000\u0002\u0000\u0004\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\tÀ\u0010\u0000\n\u0000C\u0010\u0000 \u0000\u0000\u00000|\u0006\u0000\u0000\u0006\u0000ä\u0001\u0000\u000fÀ\u0003È\u0001\u0000\u0002\u0000\u0000\u0000\u0000
x@\u0010 \"\u0000\b\u0010\u0000\u0011À\u0001\u0000\u0010\u0000 \u0000\u0000\u0000\u0000@\u0004\u0000\u0001\u0010\u0001\b\u0001\u0000\u0002\u0006\u0000\u0010\u0001\u0000\u0002\u0000\u0000\u0000\u0006\u0000\u0000@\u0000@\u0010\u0011\u0000\u001c\u0000 \u0002\u0000\u001c\u0000 \u0001\u0003à\u0010 \u0004\u0000\u0004\u0002\u0004\u0002\u0010\u00010\u0004\u0010\u0000 \u00010\u0002\u0004\u000fÀ\u0000\u0004\u0000\u0000 @B\u0000\u0010A\u0000\u0005\u0000\u0010 \u0000\u0000\u0000\b\u0000\u0010\u0004\u0002\u0000 \u0001\u0000\b\u0010\u0000\u0001\u0000\u0002\u0010\u0000\u0000\u0000\u0010\u000f\u0002\u0000 \u0004\u0000\u0010\u0000\u000f\u00000@\u0010\u0000\"\u0000\u0000\u0000\u0002\u0007\b\u0004À\u0010\u0002\u0000\u0001\u0000\u0001\u0018\f\u0004\u0001\u0000\u0002À\u0000\u0000\u0004À\u0000\u00000\u0000\u0000\u0000\u0010\u0000\u0010\u0000\u0011@\u0000\u0000\u0010\u00000\u0000\u0000\u00000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0001\u0000\u0000à\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
- "Reset to Defaults": "\u0000\u0010\u0000 \u0000\"\u0000 \u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0004O\u001f\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007ñý\u0010B!ÿø\u0000\u0000\u0000\u0000\u0001\u0000 \u0000\u0000\u0000 ~\"\u0011\"D \u0001\u0000\u0000\u0001à\u0004\u0010\u0002\u0000\u0000\u0000\u0002\u0000B$@\b\u0000@\u0000\u0000Ò\u0000B\u0000@\u0000\u0000\u0000@ |øú\f\u0000\u0000\f\u0000\" \b@\bð\u0000\u0000\b\u0004\u0011\b\u0000\u000fþ\u0002@\u0004B\u0001\b\u0001b\u0000\u0000\u0001\u0001¢!\u0012#ïà\b\u0000\u0001\u0010@!\u00010\"\u00008XD>D\u0000\u0001\u0000 @\"\b\u0004 \u001c \u0012 \u0004ÒO \u0000\u0006\u0004\u0000\u0000\u0001D\u0000Q\u0010\u0011\u0011 Gà\u00000@\u0001\u0000\u0010\u0000!\u0000\u0010\bB¢\"(\b\u0000\u0000\u0014\b\u0000 \u0002\u0000\u0000 \u0002\u0001\b@HDB\u0001\u0010\u0000\u0000\u0001\u0006\u0000\b\u0000 \u0000\b\u0000@\"\bE\bø R\u0000\u0000\u0000\u0003\u0000\u0002\u0000\u0003à\u0002\u0000\b\u0004\u0010E\u0011\"\u0011ÿ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000 \u0010@\u00184\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
- "Second": "\u0000:\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0010\u0000\u0000@\u0000\u0000\u0002\u0014@\u0000\u0010\u0001\u0000\u0011àÀ\u0010 \u0005\u001f\u0010\u0002\b\b\t\u0000\u0000\u0004\u0003Â\u0000!\u0000\u0001\u0000\u0011\u0000\u0010\u0000!\u0004\u0000\u0004 \u0000@\b\u0001\u0000\u0002\b\u0000 \u0002\u0000 \u0001\u0014\u00010\u0000\u0007À\u00000\u0000 \u0000\u0000\u0000\u0000\u0000\b\u0000",
+ "Reset to Defaults": "\u0000\u0010\u0000 \u0000\"\u0000 \u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0004O\u001f\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007ñý\u0010B!ÿø\u0000\u0001\u0000 \u0000\u0000\u0000 ~\"\u0011\"D \u0001\b\u0000\u0004\u0010\u0002\u0000\u0000\u0000\u0002\u0000B$@\b\u0000A\u000f\u0000B\u0000@\u0000\u0000\u0000@ |øú\f\u0000\u0000&0\b@\bð\u0000\u0000\b\u0004\u0011\b\u0000\u000fþ\b\b\u0001\b\u0001b\u0000\u0000\u0001\u0001¢!\u0012#ïà\b\u0001\u0000\u0000!\u00010\"\u00008XD>D\u0000\u0001\u0000 \u0000\u0004 \u001c \u0012 \u0004ÒO \u0004\u0000\u0000\u0000\u0001D\u0000Q\u0010\u0011\u0011 Gà\u0000\u0001\u0000\u0010\u0000!\u0000\u0010\bB¢\"(\b\u0015\u0000\u0000 \u0002\u0000\u0000 \u0002\u0001\b@HDB\u0001\u0010\u0001\u001f\b\u0000 \u0000\b\u0000@\"\bE\bø R\u0000 \u0000\u0002\u0000\u0003à\u0002\u0000\b\u0004\u0010E\u0011\"\u0011ÿ\u0000\u0000\u0000\u0000\u0000\u0001\u0000 \u0010@\u00184\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
+ "Second": "\u0000\u000f\u0010\u0000\b 8CÀ
A\n_DH:$¨IP¤A\u0001\u0002\u0004\u00040\t",
"Compacting...\nTakes approx\n1 minute": "\u0000\u0011\u0000\u0000\u0000\u0000\u0000\u0000`\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0001\u0000\u0004\u0000\u0002\u0000\u0000\u0007\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000$\u0002p\u0004\u0000\u0010\u0000\b\u0000CÀ\u0000\u0000\u0000\u0001\u000fÀ\u0000\u0000À\u001c \u0000@\u0001ä\u0000\u0000\u0000\u0000\u0007\u0001\u0002\u0002 \u0000\u0001\u0000\u0004Æ\u0002\u0000\u0000@\u0000\u0000\u0000\u0000\u0000 \u0004\u0010\b\b@\b\u0000@@\u0010\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000B\u0000D\u0000p\u0002\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\b\u0000\b\u0004\b\u0004 \u0002`\u0010\u0000\u0004\u0000\u0001\u0000\u0000\u0000\u0000\u0006\u0000\u0000 @B\u0000\u0010\u0000 \u0000\b\u0000\u0000\u0000\u0000H\u0004\u0000\b\u0002\u0001\u0000\u0010\u0000\u0004@\u0001\u0001\u0000@\u0000\u0000\u0000\u0002Cà\u0000 \b\u0001\u0000\u0004\u0000*\u0000\b\u0010\u0002\u0000\u0000\u0000\u0000\fá\u0000\u0002\u0000@\u0010\u0000 \u0000À#\u0000\b\u0000ÀÀÀ\u0000\u0000\u0003\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0004\u0000\u0000à\u00008\u0006\u0006\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\b\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0004\u0000\u0000\u0000\u0010\u0000\u0000\b \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001cqÿð\u0000óàA\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
"Date": "\u0000\u001c\u0010\u0000\u0000\u0000@ø\u0004\b@\b\b\b¿ø\b\u0018\bø(\b\b\bH\b\b\b\b\b\bÿ\b\b\u0010",
"Minute": "\u0000\u000f\u0010\u0000\u0000@\b\u0010A\u0001\u0001\u0004\u0001\u0010\u0001Oñ\u0004 \b@\u0010A\u0000\u0002\u0004\bP @",
- "Connectable": "\u0000?\u0010\u0000\u0010\u0010 \u0000\u0000\u0010@ @ÿüHOðø\u0000A\t \u0001A\u0000\u0000ûÐÁñ\u0000\u0014\u0002\u0012\u001e\u0000\u0002\"\u0000\bEÿÿD\u001f \u0011\u0001\b!\u001f\u0018@L\u0004\u0011\u0010B\u0000oýñ \" üB \"@|A\t @\u0004\u0013\t\n\u0000\u0001\u0007ä\u0002\f\u0015\"@\u0002\bHTf D\u0014\u0012\u0002\u0001\u0007\u0000\u0010\"\u001f",
- "Stay Connectable": "\u0000~\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00000\u0001à\u0000\u0000\u0001à\u0000\u0000\u0000\u0000\u0000\u0002\u0000@\bB\u0000\u0000\u0000\b@\u0000\u0000\u0000\u0000\u0002\u0000\b\u0001\u0000!\b\u001e!\u0000!\u001e..\u001e\u001e\b\u001e.\u0004\u001eø\u0000ÄÄøÄ\u0010
\u0012\u0010\u0002\u0002\u0012\u0012\u0012\u0012\u0000\u0012\u0010B\u0011\u0007È@\b\bHHOÈ\u0002\u0007ÈA\u000fÁ\b!!\u0000 !!! \b!!\u0004 L\u0000 \u0010\u00100Ð\u0002\u0012\u0012\u0012\u0012\u0012\u00103\u0010B\u0017@@\u0007HGKÇ\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000x\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
+ "Connectable": "\u0000?\u0010\u0000\u0010 \u0001\u0000\u0000\u0000\u0010@ @\u0002\u0000ÿüHA@ \u0000A\t A\b@\u0000ûÐB\u0010ñ\u0000\u0014\u0002_D!\u0002\"\u0000\bL\b\u000fþ\u0004D\u001f\u0010\u0000\b!\u001fUü\u0001\u0000\u0011\u0010B\u0000ªH\u0002\u0000\" üD\u0004\u0010|A\t â\b \u0013\u0005\u0004\u0010@\u0001\u0007ä\u0002\u0011\b \u0002\bHDA\u001fÿ\u0000\u0014\u0012\u0001\u0000\u0002\u0000\u0010\"\u001f",
+ "Stay Connectable": "\u0000w\u0010\u0000\u0010 \u0001\u0000\u0000\u0000\u0010@\u0000\u0000\u0000\u0000\u0000\u0000\u0000 @\u0002\u0000ÿüH\u0000\u0000\u0002\u0000\u0002\u0000\u0000A@ \u0000A\t \u0000\u0000\u0002\u0000\u0002\u0000\u0000A\b@\u0000û\u001e\u0000\u000fÐB\u0010ñ\u0000\u0014\u0000Ò\u0000ø\u0000ø\u0003Â_D!\u0002\"\u0000\bB\"\u0000\u0010\u0000\u0010\bL\b\u000fþ\u0004D\u001fB\u00048\u00048\u0010\u0010\u0000\b!\u001f\u0011\u0004\u0007À\u0007À\u0001Uü\u0001\u0000\u0011\u0010B\u0000\"\b\u0000\u0000\u0004ªH\u0002\u0000\" üH\u0010\u0001\u0000\u0001\u0000\u0012D\u0004\u0010|A\t @>\u0000>\u0000 â\b \u0013@\u0000\u0000\u0001\u0005\u0004\u0010@\u0001\u0007ä\u0001\u0006\u0001\t\u0001\t\u0000\u0011\b \u0002\bH@0\u0001à\u0001à\u0001\u0004A\u001fÿ\u0000\u0014\u0012\u0000\u0000\u0000\u0000\u0000\u0000\t\u0001\u0000\u0002\u0000\u0010\"\u001f\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
"Hour": "\u0000\u001c\u0010\u0000\u0000@\u0000\u0000\u0004\u000fø@\u0018¿@\u0018\u000fü\u001f\tù\u0010¿Éù\u0010\tùø\b\u0001\u0000PP\u0002\b\u0002",
- "No Clocks Found": "\u0000n\u000b\u0000\u0000\u0000\u0000\u00000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0010\u0000\u0001à@\u0000\u0002\u0000\u0003ð\u0000\u0000\u0000\u001c@\u0000\bA\u0000\u0000\b\u0000\b\u0000\u0000\u0000\u0000q\u001e\u0000!\u0004\u001e\u001e\"\u0000 \u001e!.\u001d¤\u0000\u0010\u0000Ä\u0010\u0002\u0000B\u0012\u0002\u0003â\u0012\u0012\u0012\u0019H@\b\u0001\bH\f\u0000\b\bHHHe!\u0000 \u0004! (\u0000 !!!!\u0000\u0010\u00002\u0010\u0002\u0010B\u0012\u0012 \u0002\u0002\u00122\u00128G\u0007Ç@\b\u0007HG@",
+ "No Clocks Found": "\u0000\u0010\u0000\u0000@@@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0002\u0004\u0000\u0001\u0003þ\u0000\u0000\u0000\u0000\u0002\u0000\u0000 \u0000\u0000\u0000@ø@ @\u0010H \u0000\u0000\u0010\u0000\u0013\u0000\u0001\u0000\u0001\u0000\u0002\b¿Ä\u0000\u0002\u0002\u0000\u0000\u0000\u0001H\u0002\u001e\u0002\b\u0000 @\u0000@\b?à\u0007À\bÀ\u0018@\u001f\u0000\u0010\u0004\b\u000f\bä\u0002\u0002\t\bâ\u0001\u0000\u0010\u0001\u000f\u0000@ü\u0007üy `\u0010y\u0010\u0010@!À\b\u000f\u000f\u0001\u0011\u0003þ\u0000\u0001\u0001\u0013\u0001\u0004\u0001ð\u0007\u0000\u0010\u0000@\u00110 \u0000\u0010\u0011\u0000\u0010@\u0001\u0000\u0010\u001e\b¿Ï\u0001\u0010\u0002\u0002\u0000\u0001\u0001\u0010\u0001\u0004\u0000\u0010\u0001\b\u0001\u0010\u0010@!\u0000?à\u0000 !\u0000\u0000\u001f\u0000\u0011!\b\b\u0002 \u0000\u0000\f\u0002 \u0000\b\u0002\u001c\u0001\b\u0002\u0011ø@J\u0000\b\u0007\u0000J\u0000\u0001\u0000! \b\u0000A(\u000f\u0004@\u0001\b@\u0000\u0004@\u0000 \u0001à\u0000|\u0004\f\u0000P@\u0000\u0000`\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0004\u0000\u0000\u0018\u0007À\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
"App Settings": "\u0000]\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0002\u001f\u0000 \u0000\u0000\u0000$\u0000@\u0000\u0000\u0010ÿ\u000f\u001f A\u0000\u001e\u0007ôB\u0000\u0017\u0007\u0016\u0001\b\u0003H\u0000\" \u0001\u0000@\u0000\b@\" ú\f\u0000\u0000$\u0000\b\u0000B\u0001\u0010 \u0003ÿÀ\u0000@\u0002\u0010\u0011\u0004>þ\u0000\u0004\u0000\u0004\u0000\u0010 \u0002\u0010\u0004\u0000 \u0000 \u0000\u0004\u000f \u0001\u0000\u0002\u0000\u0000@$\u0010DH\u0011ø\u0010\u0000 \u0000\u0002\u0001@\"\u0000\u0002\u0000\u0000 \u0004\u0018\u0011\b\u0004@\b\u0000 \u0000\u0002\u0000\u0003\u0000ø R\u0000\u0000\u0000\u0000 \u0000\u0000\u0004Hà\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001@\u0000",
- "Flattening battery - this can take hours.\nLong-press button to cancel": "\u0000½\u0012\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0011\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0004B\u0000\u0000\u0000\u0000\u0000G \u0000\u0000\u000f\u0000CÀG\u0000\u0000\u0000\u0010\u0000B \u0000\u0000\u0002\u0000\u0001À\u0000\u0000\u0000\u0001¤\u0001â\u0001À\u0000\u0000\u0000\u0002\u0012\u0000\u0000\b\u0000\u0000\u0000\u0000\u0004 \u0000\u0000\u0011\u0010\u0000\u0010\u0000p\u0000\u0000\u0004\u00000 \u0000\u0000\"\u0000\u0000\u0000\u0003À!\u0000\u0000\u0000@\u0001\u0001\u001c\u0000\u0000 \u0001\u0000\u0000\u0001\b\u0001\u0010\bà\u0001\b\u0010>\b\u0000\b\u0007\u0004\u0001\u0010\u0001À\u0014 \u0000\u0000\u0010 $@9\u0000\b@~\u0000D\u0010\u0000\u0000 $@\t#\u0000\u0000\u0000\u0000¢\u0000\b\u0000B\u0000\u0000\u0002@\u0004\u0000\u0002\u0000¢\u0000B\u0001(\u0000\u0003È\u0004\u0004 \u0000\u0000 \u0000\u0000\u0012\b\u0000@\u0000\u0010\u0004 \u0002\u0000\n@\u0000\u0000 \u0001\u0000\u0004\u0000\u0001\u0000\u0000\u0000 @\u0004\u0000\u0001\u0000\u0001\u0000\u0010\u0000B\b\u0000\b\u0001\u0000\u0010\u0000@\u0000\u0010\u0000\u0000\u0002\f\u0000@\u0000\u0010\u0000\u0010\u0000\u0002\u0010@\u0000\u0000\u0000\u0001\u0000\u0004\u0000\u0001\u0000\u0000\u0000\u0001\u0004\u0000\u0003\u0000\u0001\u0000\u0004\u0000\u0010\u0000\u0000\u0000\u0000\u0010\u0000@\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000`\u0000\u0010\u0000 \u0000ð\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ÿ\u001fÀ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "\u0000½\u0011\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000ÿø\u0004\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000 \u0000\u0010\u0000\u0010\u0002\u0000\u0000\b\u0000\u0000\u0000\u0000\u0012\u0000\u0000\bð\u0004\u0010\u0000\u0000\t`\u0000\u0000à\b\u0000 |\u0003 \u0000\u0000\u0000P\u0000\u00008\u0000\u0010\u0000\u0000<\u0000D@\u0018\u0000CÀþ\u0000\u0002\u0000\u0000\u0001\u0012\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\"\u0001\u0000\u0002c\u0000\u0010\u0000 \u0000\u0000\u0004@\u0000\u0000\u0000x\u0004 \u0000\u0000\u0004 \t \b\u0000 \u0003\u0002\u0000\u0000\u0000!\u0000\"\u0001\u001c\u0000!\u0002\u0007ÀyÀ\b\u0000@\u0001\u0000\u0000&\u0000>\u0000\u0000\u0002\u0004\u0004\u0007 \u0001\b\u000fÀ\u00060?ÿx\b\u0000\u0001\u0010\u0003\b\u0000\u0000\u0010 \u0014@\u0001\u0000\b@\u0000\u0000C\u0000\u0002\u0000\u001c @\u0000\u0007 \u0000y\u0000\u0000\u0010\u0000\u0004\u0000\u0000\u0000(\u0000\u0010\u0000\u0002 \u0000\u0004\u0002\u0001\u0000\u0000\u0010\u0004\u0000 \u0000\u0000 \u0000\u0000\u0002@\u0000\u0004\b\u0015\u0000\u0000@\u0001È\u0000\u0001\u0000 \u0002\u0000\b\u0000\u0002\u0000\u0000\u0000 \u0000\u0004\u0000\u0000Gà\u0002\u0000\u0011\u0000\u0000\u0000\u0000 \u0000\u0000 \u0000\u0000\u0001\u0000\u0000 \u0000\u0018\u0002\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0002\u0000\b\u0000\u0002\u0000\u0000\u0000\u0007à\u0001\u0000\u0003\u0000\u0010\u0000\u0002\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u001fð#ø\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
"Month": "\u0000\f\u0010\u0000\u001fñ\u0001\u0010\u0011\u0001\u0010\u0011ÿ\u0010\u0011\u0001\u0010\u0011ÿ\u0010\u0011\u0001 \u0012\u0001@X\u0002",
"OFF": "\u0000\u0016\n\u0000xüþ\u0012\u0002\bH\b! øú\u0012\u0002\bH\b! â\u0002\u0000",
"Right": "\u0000\u000f\u0010\u0000\u0002\u0000\u0004\u0000\b\u0007ÿð@\u0000\u0002\u0000\u0004\u0000\u001føP\u0011 $@@\u0001\u0003þ\u0004\u0004",
"Widgets": "\u0000Y\r\u0000\b\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000 \u0002\u0000\u0000\u0000\u0018H\u0000\u0000\u0000\u0000\b\u0001\u0000\u0000\u0000\u0002\u0014\u0000\u0000\u0000\u0000\u0004\u0000ø\u0000\u0010\u0000\b\u0000\u0000\u0000\u0000\u0002\u000f\u0000\u0010\u0006\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0010\u0000\u0000\u001c\u0000\u0000á\u0002\u00008\u0000\u0001\u0000ð\u0001\"\u0000LA\u0000ä\u0000\u0001\u0000\b\u0000Q\u0000!!\u0000\u0002\u0000\u0001\u0000\u0004\u0000!\u0000\u0010\u0000\u0001\u0000\u0001\u0000\u0002\u0000\u0000\b\u0000\u0000\u0013\u0000\u0001à\u0000\u0004\u0000\u0000@\u0006\u0000\u000f\b\u0000\u0002\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0001\u0000",
"Left": "\u0000\u000f\u000f\u0000\u0002\u0000\u0004\u0000\b\u0007ÿð@\u0000\u0001\u0000\u0004\u0000\u000fø!\u0000B\u0001\u0004\u0004\b\u0010\u0010\u000fÿ",
- "Sort Order": "\u0000=\u0010\u0000\u0010\u0010\u0000\u0000\b \u0000\u0000A\u0000\u0000@A\u0000 \u0001\u0010\u0000\u0011\u001f¿\u0000àÿø\b \u0010@\u0000\u0000D\u0003Âïà\u0000\u0002 \u0004\u0010\n(\bà\u0011\u0000 À :\b\u0005\b À $D\u0010 ð\u0002\u0000¢@\u0000 \u0005\u0014\u0004\u0010\u0004\u0004\u0003\b ?à\"\u0000D\u0000\u0001\u0001\u0002\u0010\u0002 \u0003\b\b\u0010ÿø\u0000\u0000À\u0000\u0000\u0000\u0000\u0000\u0002\u0002\u0000\u0000",
+ "Sort Order": "\u0000O\u0010\u0000\u0010\u0010\u0000\u0000\b \u0000\u0000\u0004\u0000\u0010@\u0000\u0000\u0010@\b\u0000ü\u0011\u0000\u0000\u0001ûð\u000e\u0001Pÿà\u0000A\u0000\u0000\u0002¢\u0000D\u0000\u0004ïà\u0000\u0005_À\u0000Ä\u0002\u00028\n \u0010\u0002@\b¢\u0003 \u0015A\"\"\b@ \u0000*þ$D @ð\u0002\u0000U\u0004(\u0000` \b\u0000«øQ@\u00000@@8\u0001T\u0010\"\u0000\u0000\u0000ÿ\u0002¨ D\u0000\u0000\u0001\u0001\u0002\u0010\u0005_À\u0000\u0000\u0002\u0002\u0004\u001f\n?ÿ\u0000\u0007ü\u0000\u0000!A\u0000\u0000\u0000\u0000\b\b\u0000\u0000\u0003\u0001",
"Side": "\u0000*\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0010\u0010\u0000\b\u0002\u0014D\u0000\u0004\u0000\u0011\u0000\u0002\u0000 $ø\u0003\u0000\b\u0007Ð\u0003@\u0003D\u0003\b\u0000\u0011\u0000\u0002\u0000!\u0004@\u0000\b\u0000 \u0000 \u0002\u0000\b\u0000\b\u0000\u0004\u0000\u0002\u0000 \u0002\u0000\u0000\b\u0000",
- "No app has settings": "\u0000{\u0010\u0000 \u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u001f\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000B!ÿø\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0001D \u0001\u0001à\u0001@\u0000\u0000\u0010ø\u0011ò\u0004\u0010\b\u0000@Ò\u0003ð\u0004\u0000\u0001á\u0001ÅBú\f\u0000\u0000\" \bà@À\u0000@\u0000\b@\u000fþ\u0004B\u0002\u0006\b\u0004\u0000\u0000 \u0001\u000bïà\b\u0001\u0010@A\u0001\u0000@\f\u0000\u0004\u0000!\u0000\u0001\u0000\"\b\u0010@\"\b\u0001\u0000\u0001\u0000\u0004/ \u0004\u0002\b\u0004\u0000 \u0000 \u0000
\u0011 Gà@\u0000P \u0004\u0000\b\u0000\u0001\"(\b\u0014\b\u0001à\f\u0000\u0001\u0000\u0002\u0000\u0000$B\u0001\u0010\u0001\u0006\u0000F\u0000\u0000 \u0000\u0000\bø R\u0000\u0003\u0000\b \u0000\u0000\b\u0000 \u0000\u0002\u0011\"\u0011ÿ\u0000\u0000à\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u00184\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
- "Sleep Phase Alarm": "\u0000»\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000`\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0012\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0012\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u000e\u0000\u0000\u0000\u0002>A\u000f\u0000\u0000\u0000\u0000\u0002\u001dB\u001f\u0001\u001c\u0000\u0000\u0000\u0010\u001e@\b@\u0000\u00008°\u001e \u0000\u0000\u0000\u0000< < \u001c\u0000\u0000\u0000\u0002\u0000\u0010\u0001\b\u0000\u0000\u0000\u0010\u0000\u0004\u0000\u0000\u0000\u0000\u0000 \u0000\b\u0000\u001c\u0000\u0000\u0000@\u0002\u0000!\u0000\u0000\u0000\u0004\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0012\u0001\u001c\u0000\u0000\u0010\u0000\u0004 @ø\u0000\u0000 \u0000à@ø\u0001\u0000\u0001\u001c\u0010@ø\u0002\u0000\u0010\u0000\u0007à\u0000 \u0000\b\u0001à\u0007à\u0000 \u0000 \u0000\u0002\u0007à\u0000H\u0005\u0000\u0010\u0000\u0000\u0004\u0000\u0001\u0000\u0004\u0000\u0000\u0000\n\u0000\u0004\u0000\u0000\u0000\u0000\u0010\u0010\u0000 \u0000\u0000\u0001\u0000\u0000@\u0000\u0000\u0000\u0002 \u0000\u0000\u0010\u0000\u0000\u0002\u0018Á\u0000\u0004\u0000\u0000\u0000@\u0000\u0010\u0000\u0010\u0000\u0000\u0001\u0000 \u0000\u0004\u0000\u0000\u0002à \u0001\u0000\u0000\u0000\u0010\u0000\u0004\u0000\u0003À\u0000\u0000À@\u0004\u0000\u0001\u0000\u0000\u0000<\u0010\u0000\u0000@\u0000\u0000\u0004\u0000\u0001\u0000\u0007\u0000\u0000\u0000\u0000\u0001\u0000\u0000À\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000`\u0000\u0000\u0000\u0000\u0000",
+ "No app has settings": "\u0000{\u0010\u0000 \u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u001f\u0000 \u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000B!ÿø \b\u0000\u0000\u0000\u0000\u0000\u0000\u0001D \u0001\u0002\b\u0001@\u0000\u0000\u0010ø\u0011ò\u0004\u0010\b\u0000@D\u0003ð\u0004\u0000\u0001á\u0001ÅBú\f\u0000\u0000@\bà@À\u0000@\u0000\b@\u000fþ\u000f$\u0002\u0006\b\u0004\u0000\u0000 \u0001\u000bïà\b\u0000D@A\u0001\u0000@\f\u0000\u0004\u0000!\u0000\u0001\u0000\b\u0010@\"\b\u0001\u0000\u0001\u0000\u0004/ \u0001\u0010\u0002\b\u0004\u0000 \u0000 \u0000
\u0011 GàB\u0000\u0000P \u0004\u0000\b\u0000\u0001\"(\b\b\u0001à\f\u0000\u0001\u0000\u0002\u0000\u0000$B\u0001\u0010\u0002P\u0000F\u0000\u0000 \u0000\u0000\bø R\u0000D\u0000\b \u0000\u0000\b\u0000 \u0000\u0002\u0011\"\u0011ÿ\u0000\u0000à\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u00184\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
+ "Sleep Phase Alarm": "\u0000»\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000`\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0012\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0012\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u000e\u0000\u0000\u0000\u0002>A\u000f\u0000\u0000\u0000\u0002\u0002\u001dB\u001f\u0001\u001c\u0000\u0000\u0000\u0010\u001e@\b@\u0000\u00008°\u001e \u0000\u0000\u0000< < \u001c\u0000\u0000\u0000\u0002\u0000\u0010\u0001\b\u0000\u0000\u0000\u0010\u0000\u0004\u0000\u0000\u0000 \u0000 \u0000\b\u0000\u001c\u0000\u0000\u0000@\u0002\u0000!\u0000\u0000\u0000\u0004\u0000\u0001\u0000\u0000\u0000\u0018\u0000\u0004\u0000\u0012\u0001\u001c\u0000\u0000\u0010\u0000\u0004 @ø\u0000\u0000 \u0000à\r\u0000\u0001\u0000\u0001\u001c\u0010@ø\u0002\u0000\u0010\u0000\u0007à\u0000 \u0000\b\u0001à\u0006\u0010\u0000 \u0000 \u0000\u0002\u0007à\u0000H\u0005\u0000\u0010\u0000\u0000\u0004\u0000\u0001\u0000\u0004\u0000\u0002\u0000\n\u0000\u0004\u0000\u0000\u0000\u0000\u0010\u0010\u0000 \u0000\u0000\u0001\u0000\u0000@\u0000\u0000@\u0002 \u0000\u0000\u0010\u0000\u0000\u0002\u0018Á\u0000\u0004\u0000\u0000\u0000@\u0000\u0010\u0000\u0010\u0000\b\u0001\u0000 \u0000\u0004\u0000\u0000\u0002à \u0001\u0000\u0000\u0000\u0010\u0000\u0004\u0000\u0003À\u0001\u0000À@\u0004\u0000\u0001\u0000\u0000\u0000<\u0010\u0000\u0000@\u0000\u0000\u0004\u0000\u0001\u0000\u0007\u0000 \u0000\u0000\u0001\u0000\u0000À\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000@\u0000`\u0000\u0000\u0000\u0000\u0000",
"Invalid settings": "\u0000O\u0010\u0000\u0010\u0000\u0010 \u0000\u0000 \u0000\u0002\u0000 \u0000\u0010@\b\u0000!ð\u0002\u0000ð\u0000\b\u0000B!ÿùU\u0007ù\u0000\u0014\u0007ôB\u0000\u0014ª\u0000\u000fÃð\u0000\b\u0000AT\u0004\u000f À\u0000\u001fÿ\u0010\u0002\u0006\u0000\u000fþ\u0005P@\u0004\u0010>þ\u0000\n $$\u0010@\u0000\u0001\u0000\u0015@(H ù\b\"\u0001ÿð \u0001\u0011 Gà\u0000\u0000¢ \u001e\u0002\"\u0002H$@F\u0004B\u0001\u0010\u0004HP\u000f\u0005 \u0010 J\u0000à\u0011\"\u0011ÿÀ\u0002\u0001\b\u0000\u0000\u0001@\u0000",
- "TIMER": "\u0000&\n\u0000þ|üø@B\u0012\u0002\u0011\u0001\fÈ\bD\u00043 !\u0010\u0010´øø@BÒ\u0002A\u0001\bH\b\u0004! \"\u0010\u0010Aò\u0013ò\u0010",
+ "TIMER": "\u0000;\r\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u001f\u0000\u0004\u0002\u000f\u0000\u0000\u0004 \u0001\u0000>\u0010\u0000\u0000\u0000À\u0000\u0004\u0000\u0000)\u0000h\u0000\u0001\u0002\u0007ÈÀ0\u0000@?\u0002\b\u0000\u0010\u0001\u0000\u0000\u0002\u0000\u0002\u0000\f\u0000\u0000\u0000\u0000@\u0000@\u0000\u0000 \u0000\b\u0000\u0004\u0000\u0000\u0018\u0000\u0001\u0000\u0000\u0000\u0000\f\u0000\u0000 \u0000\u0000\u0000\u0000",
"Reset All": "\u0000z\u000e\u0000\u0002\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u001c\u0001\u0000\u0000 \u0004\u0000\u0000\u0000\u0004\b\u001f\u0000\u0002\bx\u0002X\u0001\u0004\u0000\u0000\u0000\u0000ü\u0000\u0002Aä\u0000x\u0000!\u0000 \u0000\u0000\u0000 \u0001\u0000\f@\u0002\u0000\b\u0000\b@\bð\u0000\u0000\b\u0001À\u0004\u0000\u0002\u0010\u0002\u0010\u0002Ä\u0000\u0000\u0002\u0000\u0002\u0010\u0000@\u0001ç\u0000\u0004Â\u0000\u0000à\"\u0001\u0002\u0000\u0010\u0000Æ\u0000!\u0000á\u0000\u0000&\u0007\u0000`\u0004\u0000C\u0000\b@\b\u0014@\b@ \u0000\u0006\u0001\u0000\u0001@\u0000 \u0002\u0000\u0004 \u0002\u0000\u0010\u0000\u0000\u0000@\u0000\u0000\b\u0000\u0000\b\u0000\u0004\u0000\u0000\u0000\b\u0000@\u0000\u0004\u0000\u0010\u0000\u0004\u0000 \u0002\u0000\u0000\u0000\u0001À\u0010\u0000\u0002\u0000\u0003à\u0002\u0000\b\u0001\u0000\u0000\u0000\u0000\u0000\u0003ð\u0001\u0000\u0000\u0000\u0001\u0000\u0002\u0000",
"This will remove everything": "\u0000Æ\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000@\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0001\u0000\u0002\u0000\u0000\u0010\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0003\u0000\u0000\u0010\u0000\u0000\u0000ø\u0002\u0000\u0004\u0000\u0000@\u0002\u0000\u0000\u0010>\u0000\u0004\u0010ð\u0000ð\u0004@\u0000ð\u0001\u0000\tÀ\u0010ð\u00010\f \u0000\u0000?\u0000H<\r \u000e\u0000\r \u0004\u0004\u0000(L`\u0007\u00000\u0000\u0000\u0002\u0000\u0018\u0004\u0000D@\u000e\u0000DA\u001c\u0000\u0001Â\u0002\u0002\u0000\u0010\u0000\u0000\u0000\u00008\u0000\u0000\u0010\u0001\u0010 \u0001\u0010À\u0000\u001b\b\b\u0000\u0000@\u0002\b\u0004\u0000\u00010\u0004 \u0000\b\t\b\b\u0002\u0000\u0000\b \u0000\u0001\u0000\b \f\u0000\u0004@ @\u0002\u0000\"\b\u001c \"\b\b\u0000\u0000`\u0000\u0004\u0000 \u0018\u0000\u000f\u0000\u0000À\b\u0000 \u001c@ \"\u0000\u0001\u0002 \u0001ø\u0000\u0004\u0000 \u0000\u0004\u0000\u0000À \u0002A\u0000A\u0002A\u0001\b\u0000\n\b\n\bX\u0000\u0010\u0000\u0000\u0000 \u0000\u0000\u0000\n\u0004\u0001\u0004\n\u0004\u0004P\u0010H$\u0011ø!\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0010`\u0004\u0010\u0010`%?``@\u0000x\u0000\u0004\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0003\u0006\u0000\b\u0006\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000 \u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001c\u0000\u0000\u0000\u0000",
"Alarm": "\u0000;\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0010ø\bà\u0000\u0000\u0000á\u0000à\u0000\u0000\u0000\u0010\u0000@\u0000à\u0000\u0000\u0002\u0000\bä\u0000\u0000\u0000\f\u0000à\u0007À\u0010\u0001\u0000\u0000\u0010?\u0000\u0002@ \u0000\u0004\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0010Á\u0000\u0000 \u0000\u0000\u0014ä \u0000\b\u0000\u0000\u0001à\u0000\u0006\u0000\u0000\u0000\u0000\u0002\u0000\u0003\u0000\u0000\u0000\u0000\u0000",
- "on": "\u0000\r\f\u0000\u0000t<\u001eD\u0004\"\u0002\u0000\u0010\u0000\u0004\u0000 \u0000\u0003",
+ "on": "\u0000\u000e\b\u0000xº\u0013\u0018Ha!\u0012\u0018H^!",
"Minutes": "\u0000\u000f\u0010\u0000\u0000@\b\u0010A\u0001\u0001\u0004\u0001\u0010\u0001Oñ\u0004 \b@\u0010A\u0000\u0002\u0004\bP @",
"Reset all widgets": "\u0000»\u000f\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\b\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0001\u0000 \u0000\u0000\u0000 \u0002 \u0000\u0000\u0000\u0006\u0012\u0000\u0000\u0000\u0000\u0002\u0000\u0001à\u0004\u0010\u0002\u0000\u0000\u0000\u0002\u0000\u0000\u0010\u0000\u0000\u0000!@\u0000\u0000\u0000\u0000@\u0000Ò\u0000B\u0000@\u0000\u0000\u0000@ \u0003à\u0000@\u0000 \u0000\u0000\u0000\u0000\b\u0000\" \b@\bð\u0000\u0000\b\u000bú\u000f\u0000\u0010\u0006\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0004B\u0001\b\u0001b\u0000\u0000\u0001\u0006\b0\u0004\u0000 @\u0007\u0000\"\u00008\u0001\u0010@!\u00010\"\u00008\u0001\u0000\u0010 \u0003\u0000\u0010\u000f\u0000\u0012 \u0004À\"\b\u0004 \u001c \u0012 \u0004À \u0001\u0004\u0003\u0000\u0004\u0000 \u0001D\u0000\u0004\u0000\u0000\u0001D\u0000À!\u0000\u0002\u0000\u0001\u0000\u0004\u0000!\u0000\u0010\u0000@\u0001\u0000\u0010\u0000!\u0000\u0010\u0000\u0000 \u0000@\u0000@\u0000\u0000 \u0002\u0000\u0014\b\u0000 \u0002\u0000\u0000 \u0002\u0000\u0010\u0000\b\u0000\b\u00010\u0000\u001e\u0000\b\u0000@\u0001\u0006\u0000\b\u0000 \u0000\b\u0000@\u0002\u0000\u0002\u0000\u0001\u0000\u0018\u0000< \u0002\u0000\b\u0000\u0003\u0000\u0002\u0000\u0003à\u0002\u0000\b\u001fÿ\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000",
"Hours": "\u0000\u001c\u0010\u0000\u0000@\u0000\u0000\u0004\u000fø@\u0018¿@\u0018\u000fü\u001f\tù\u0010¿Éù\u0010\tùø\b\u0001\u0000PP\u0002\b\u0002",
@@ -129,33 +129,33 @@
"Beep": "\u0000+\r\u0000\u0000\u0000\u0000\u0000\u0000À\u0010\u0000\u0000\u0000&\t\u0000\u0000\u0004| \u0000\u0000qd\u0010\u0000\u0000\u0000 \u0000\u0000\u0000\b\u0011Àð\u0001\u0003À\u000fÀ\u0000@@\u0000\u0000\u0000\b\b\u0000\u0000\u0000\u0002\u0001\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000 \u0001ø\u0000\u0000\b\u0000",
"Message": "\u0000L\r\u0000\u0001\u0000\u0000\u0000 \u0000\u0000\u0000\u0000 \b\u0000\u0000\u0001\u0000\u0000\u0000\u0003\t\u0000\u0000\u0000\u0010\u0000\u0000\u0000\bP\b\u0000\u0000\u0001\u001e\u0000\u0000\u0000\u0004\u0018\u0000\u0000\u0016 \u0000\u0000`\u0000p\u0001\u0010\t\u0010>\u0001\u0002\u0001\u0000Hpü\u0000\u0000@(\u0002\u0001\u0010\u0000\u0000\u0000\b\u0002@!\u0000\u0010\u0000\u0000\u0000\u0001\u0000@\u0000\u0010\u0001\u0000\u0000\u0000\u0000 \b\u0000\u0002\u0000\b\u0000\u0000\u0000L\u0003\u0000\u0000@\u0000|\u0000\u0000\u0003\u0000À\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
"System": "\u0000:\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0018\u0000!À#À\u0002\u0001\u0000\u0007\u0007\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000 À\u0000\u0002\u0000\u0003À\u0010\b\u0010\u0001\u0000G\u0000\u0004\u0000\b\u0000@\u000e@\u0001 \u0004\u0000(\u0000\u0010\u0000\u0002\u0000\u0011\u0000\b\u0000!\u0000\u0018 \u0002\u0000S\u0018\b\u0001\u0000\u000f\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000",
- "Select Clock": "\u0000z\r\u0000 \u0000@\u0000\u0010\u0000 \u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0010\u0004\u0000\b\u0000\u0002p\u0004\u0000\u0002p\u0000\u0000\u0000\u0000\u0002q\u0000\u0002\u0000\u0000ä\u0001\u0000\u0000ä\b|\u0000\u0000\u0000äG\u0000\"\u0000@\u0000\"\u0001á\u0000\u0000\u0000\"\u0016 \u0000\u0010\u0010\u0000\u0010@@\u0000\u0000\u0010¦\u0010\b\u0000\u0004@\u0007\u0000\u0004@\u0010\u0010\u0004@\u0004G\b\u0002\u0004\u0002\u0010\u00010\u0002\u0010\u0002\b\u0004\u0002\u0010D\u0000\u0001\b\u0000B\u0001\b\u0000\u0000¢\u0001\b\u0010\u0000!\u0000\u0002\u0000\u0010\u0000\u0002\u0000'!\u0000\u0002\u0004\u0000\b\u0001\u0000\u0004\u0000\u0001\u0000\u000e\u0010\u0000@\u0001\u0000\u0002À\u0000\u0001\u0000\u0000\u0002\u0000\u0000 \u0000\u001f\u0000À\u0000@\u0000@\u0000@\u0000\u0000\u0000\u0010\u0000@\u0000\u0000\u0000\u0000 \u0000\u0010\u0000 \u0000\u0000\u0000\b\u0000 \u0000",
- "Locale": "\u0000;\r\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u001f\u0000@\u0000\u0000\u0000< \bp\u0000\u0000\t\u0004\u0004\u0003ð\u0000\u0000\u0001 H\u0002\u0007À$H \u0010?\u0000\u0004\u0004\u0004\u0010\u0000\u0000\u0000'\u0002\u0000\u0000\u0000\"G\b\u0000\u0000\u0000\u0004P\u0000\u0010\u0000\u0000\u0001\f\u0000\u0000\u0004\u0000\u0000\u0000A\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000",
- "Vibrate": "\u0000\u001e\u0010\u0000\u0010\u0000\u000f Oñà \u0000\u0004?èþø\b|H\u0001ü \u0004Eÿ\u001fÉ\u001a I$Êü*D¤\u001fÉ\u0012\bDR ?\u0015JOJ0B",
+ "Select Clock": "\u0000k\u0010\u0000\u0000@@@\u0000\u0000\u001ex \u0000\u0000\u0000\u0000\u0000\b\u0004\b\u0001\u0000\u0012I\u0004\u0000@\u0000\u0003á\u0000\u0000\u0010\u0001yà \u0004\u0000FEüþ \u0012À(¢\u0011\u0004@ø\u0007H\u0000\u0004\u0001à\u0000óß ð\u0000\u0011\u0010ð\u0010\u0000\u0004@D\u0010\u0002\u0000\u0004#ÿ\u0001ÿ\u0002\u0010sþ\bþ\u0001À\u0001\u0007ÀÂ\u0000ó\u0011\u0001R@L\u0000|\u0010\u0000@1B 2@\b\u0018Q\b\b`\u000bÿH\u0000ð\u0004\u0006 B!\u0000\u0014\u0001\b\u0002\u0001\u0000ÄD \u0004\"\b\u0011\u0010\u0000\u0003\b\u0001\u0000\u0004A\u0000\u0010\u0000\u0010!ð \u0001@\u0000H \u0004\u0000\u0011\u0000\u0014\"\u0010\u0003ðGÿ*\u0002\u0001\u0000\u0001À\u0001\u0000\u0002\u0000\u0000\u0000\u0000\u0002 \u0000\u0000\u0000",
+ "Locale": "\u0000\u001f\u0010\u0000\u0010 \u0014 @@$@@\u0001?ñ\u0012Â\u0001\u001f¦\u0002\u0004Y\bôÒ\u0011)\u0011$\"R\"hD¨D Pé\u0011ÀN\u0012.\u000e¨ Hã@?\u0000\u0000!",
+ "Vibrate": "\u0000|\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0004\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000H\u0000@G¨\u0010\u0000\u0000\u0000\u0018\u0000\u0000\u0000\u0000\u0000\u0002\b\u0003\u0001\u0000\u0000\u0000\u0000@\u0000\u0000\u0003\u0000\u0011 \u0001\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0010\u0000`\u0000\u0010\u0001\u0000\u0000\u0000\u0003\u0000\u0000<\u0000A\b@\u001a\u0000\u0001\u0000\u0010\u0000ð\b\u0010\u001c@\u0000!\u0002\u0006\u0010\u0000 \u0001\u0002\u0007à\u0000\u0002\u0000\u0004\u0000\u0002\u0010 \u0001\u0000\u0002\u0000\u0010@\u0000\u0000\u0000@\u0003À\u0000B\u0001\u0000\u0010\u0000@\u0001\b\u0000\u0000\u0000\b\u0001È\u0000\b@\u0010\u0001\u0000\b\u0000\u0011\u0000\u0000\u0000\u0001\u0000\u0000\u0001\b\u0001\u0000\u0010\u0001\u0000\u0001`\u0000\u0000\u0002`\u00008\u0002`\u0000\u0000\u0001\u0000 \u0000\u0018\u0000\u0000\u0000\u0018\u0000\u001c@\u0018\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
"Alerts": "\u00009\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000 Cà#\u0000\u0000\b\u001e\u0010\u000e\u0000\u0000\u0000\u0004\u0000\u0010\u00008\u0000\u0000\u0002\u0000\bä\u0000\u0000\u0001\u00000\u0003\b\u001f\u0000à\u0010\u0000\u0001\u0003ð\u0000L\b\u0000\u0001\u0000\u0000\u0000!\u0004\u0000\u0000\u0000\u0000\u0010\u0004\u0000\u0000\u0000\u0000\b\u0002\u0000\u0000\u0000\u0000\u0004\u0002\u0000\u0001\u0000\u0000\u0002\u0002\u0000\u0003\u0000\u0000\u0000\u0001\u0000",
"Whitelist": "\u0000i\r\u0000\b\u0000\u0000\u0000\u0000 \u0000\u0001\u0000\u0000\u0000 \u0002\u0000Cà\u0000@\b\u0000\u0010@!À\b\u0001\u0000\u001e\u0010\u0000@\u0004\u0000\u0004 \u000f \u0004\u0010ø\b\b\u0000@\u0002\u0000\u0002\u0010\u0000 \u0002\u0007À\u0002\u0004\u0000À\u0001\u0000\u0001\b\u0000\u0010\u0001\u0000 \u0001\u0004\u0001 \u0000à\u0000\u0000\u0010\u0000à\u0014\u0000\u0003\b\u0000L\u0000B\u0000\b\u0000LI\u0000\u0002\u0000\u0004\u0000!\u0000!\u0000\n\u0000!$@\u0001\u0000\u0002\u0000\u0010\u0000\u0001\u0000\b\u0010\" \u0001\u0000\u0001\u0000\b\u0000\u0000\u0018 \b!\u0000\u0001\u0000\u0000\u0004\u0000\u00000\u0010\u0004\u0001\u0001\u0000\u0000@\u0002\u0000\u0000\u0000\u0000\u0002\u0000@\u0001\u0000\u0000 \u0001\u0000\u0000\u0000\u0000\u0001\u0000",
- "Set Time": "\u0000K\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010>|\u0000\u0000\u0000\u0007Â\u0004H\u0000\u0000\u0000\b\u0000øùñ\u0000\u0000\u0000\u0001\u0000\u0011\b\u0011\"#À\u0000\u0000 \u0002!\u0003çÅ\u0000\u0000\u0004\u0000Gþ@\fÂ\u0000\u0000à\u000f\tùpH\u0013\u0001\u0010!!\" \u0005\u0010\u0002\u0010\"ÿ'ä@\u0000\u0000@\u0004@\u0000\u0000\b\u0000\u0010\u0000 \u0001\u0000\u001f\u0012\u0012\u0012\u000f\b\u0000 \u0002 B\u0000@\u0000\u0002\u0000\u0004\u0000\u0000(@(\u0000\u0000\u0000\u0000\u0000\u0000\u0002\b\u0002",
- "Disable": "\u00006\u000b\u0000\u0000\u0010\u0000\u00000\u0003À@\u0000\u0002\u0000@\b\u0000\u0000\b\u0001\u0000!\f\u001e\u001e.\u0004\u001e\u0010Ä\u0010\u0010B\u0000\u0012\u0010B\u0018A\u0006\u0007ÈA\u000fá\u0004\u0006!!\u0004 \u0010\u0004\u0010 B\u00123\u0010B\u001f\u0007ÇKÇ",
+ "Set Time": "\u0000k\u0010\u0000\u0000@\u0000\u0000\u0000\u0000@\u0000\u0004\u0000\u0000\u0000\u0000\u0000\b\u001f>\u0001\u0000\u0004>\u0000@\u0000@\u0000\u0003á\u0002$@\u0010\u0000Cÿð\u0004\u0000FEü|ø\u0012Àþ@\u0002@ø\u0007H\b\u0001à\u0000\u0011\u0010\u0000ð\u0000\u0011\u0010óà\u0010\u0001ô\u0018\u0000\u0000\u0002\u0000\u0004#ÿ \u0004\u0002\u0010\u0001\u0000\u001fü\u0001À\u0001\u0007ÀüóßÀ\u0010\u0000L\u0000|\u00101\u0001\b\u0002\u0000\b\u0018Qò\b`\u001f!\u0004@\u0000ð\u0004\u0006 BB@\u0014\u0002\"@À\u0002\u0001\u0000ÄOÈ\u0004DP\u0011\u0000\u0000\u0003\t\t\u0001\u0000\b\u0002 \u0000\u0010\u0000\u0010!\u0000 \u0001ñ@¤\u0000\u0004\u0000\u0011\u0000\u0014 \u0014\u0003ð\"D#ÿ\u0001\u0000\u0001À\u0001\u0004\u0001\u0000\u0000\u00000h\u0000\u0000\u0000\u0000\u0000",
+ "Disable": "\u0000\u001e\u0010\u0000\u0010\u0000\u0010 @\u0000 ÿÀ\u0002\n¨?ÈJ \u0000ü*ÿÄ\"B¨ I\n $$*PÿÀ@\u0000\u0005\u0011$\"D\u0011\n\u0014$H\u0012 \u0001\u0000",
"BACK": "\u0000\u001e\n\u0000ø0x\u0011\"\u0012(DI!! (øÂ\u0013ò\u0003\bHH\n!!!$â\u0011â\u0010",
"ALARM": "\u0000&\n\u000000ø
\"\u0001\"\u0012\u0014\u0004Lá !!3ø·ò\u0003òBØH\bHa !\"!\u0013ò\u0012\u0012\u0010",
"Timer": "\u0000;\r\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u001f\u0000\u0004\u0002\u000f\u0000\u0000\u0004 \u0001\u0000>\u0010\u0000\u0000\u0000À\u0000\u0004\u0000\u0000)\u0000h\u0000\u0001\u0002\u0007ÈÀ0\u0000@?\u0002\b\u0000\u0010\u0001\u0000\u0000\u0002\u0000\u0002\u0000\f\u0000\u0000\u0000\u0000@\u0000@\u0000\u0000 \u0000\b\u0000\u0004\u0000\u0000\u0018\u0000\u0001\u0000\u0000\u0000\u0000\f\u0000\u0000 \u0000\u0000\u0000\u0000",
"Error in settings": "\u0000]\u0010\u0000 \u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000À\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\"\u001fÿ\u0000\u0000\u0000\u0000\u0000\u0000\u0001ý\u0010\u0004\u0007\u0000\u0000#\u0000\u0000\b\u0000@Ò\u0000\u0007\u0000à\u0000\u0000>\u0000\u0000\b\u000fÀ\u00008\u0000\u0000\b\u0000ÿàD \b\u0000@\u0000\u000f¿ \u0004A\u0000 \u0003\b\u001f\u0000\u0001\u0000\"\b\u0001\u0000\u0000\u0010?\u0003ä \u0001 @\b\u0000\u0001\u0000\u0000\u0011\u0012\u0004~\t\u0004\u0000@\u0000\b\u0000\u0000 \"\u0000P \u0007à\u0000\u0000\u0004B\u0001\u0010\u0001\u0006\u0003À\b\u0000\u0000>(\u0014\u0000À\u0000\u0000\u0001\u0000\u0001\u0012!\u001fø\u0000\u0000\u0000\u00000\u0000\u0000\u0000`Ð\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
"Factory Reset": "\u0000\r\u0000\u0000\u0000\u0000\u0000 \u0000@\u0000\u0002\u0000\u0000\u0000\u0002\u0000@\u0000\u0000\u0000@\u0000\u0000\u0013 \u0000A\u0000\u0000\u0000A\u0000 \u0000\u0000\u0000 x\u0000\u0000\u001c \u0000!\u0000\u0000\u0000!\u0000 \u0000\u0000\u0000 \u0000\u0000\u0000\u0011\u0000 \u0000!\u0000\u0000\u0000!\u0000#À\u0000\u0000 \u0001\u0000\u0000\u0000!\u0000 \u0000!\u0000\u0000\u0000!\u0000,@\u0000\u0000 \u0001\u0001\u000f\u0000\"\u00008\u0000!\u0002\u0007À!\u00010\"\u00008\u0002\u0000ñ\u0000B\u0000&\u0000!\u0001ø\u0000!\u0000á\u0000\u0000&\u0002\u0000\u0012\u0000\u0000!\u0000!\u0000\u0000\u0000!\u0000\"\u0000Q\u0000!\u0004\u0000\f\u0000\u0004\u0000 \u0000\u0002\u0000\u0000\u0000\u0002\u0000 \u0000B\u0000 \b\u0000\b\u0000\b\u0000 \u0000\u0002\u0000\u0000\u0000\u0002\u0000 \u0000\u0002\u0000 \u0010\u0000\b\u0000\u0010\u0000 \u0000\u0004\u0000\u0000\u0000\u0004\u0000\u0010\u0000\u0004\u0000 \u0000\u0010\u0000 \u0000 \u0000\b\u0000\u0000\u0000\b\u0000\u000f\b\u0000 \u0000\u0000 \u0000@\u0000 \u0000\u0010\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0010\u0000 ",
"Sleep": "\u0000\u001f\u0010\u0000\u0000\u0010\u0000\u0000\u0000ð\u0003ûÏ\u0001ô\u0014\u0002()\u0004\u0004P^ÿ¿¤\u0011HI$\"÷þ}ÿ$BI!\u0014¿â(\u0004\u0007Ñ2\b\b©Aÿ\u0000a\u0000\u0000",
- "Connected": "\u0000Z\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000@\u0000\u0004x\u0000\u0000\u0002\u0016\u001f\u0000\u001e\u00009\u0000à\u0000\u0000\u0000x@x\b\u0000\u0000\u0000\u0000 \u0000\u0010\u0000@\u0004 \u0000x\u0000\u0000\b\u0000\u0004\u0000 \u0001\u0010\bà\u0001\u0010\u0003\u0001\u0000\u0010\u0000\u0001È\u0001\"\u0000\u0000\r\u0000B\u0000\u0002\u0000(!\u0000 \r0\u0000\u0001\u0000\b@\b\u0000ø\fB\u0000@\u0000@\u0000\u0010\u0002\u0001Â\u0000\u0010\u0000 \u0000 \u0000\b\u0000\u0000\u0000\u0004\u0000\u0010\u0000\u0010\u0000\u0004\u0000 \u0000\u0000\u0001\u0000\b\u0000\b\u0000\u0002\u0000\b\u0000",
+ "Connected": "\u0000]\u0010\u0000\u0001\u0000\u0010\u0010\u0010 \u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001fÿ\u0004ÿ\u0004ÿ\bÿ\u0000\u0002\u0000\u0002\u0000 \u0000 \u0000P@\u0010\u0000\t\u0001ÿ\u000fÐÐÀ\u0000p\b\b\bH\bHx\u0000\u0004\u0000\u001e\u0000@@_ø_øOø \u0000#Ãþ\u0002\b\u0002\b\u0004@A\u0000\u0001\u0003\u0010\u0010\u0018@\u0018@L\u0004\b\u0000\b ÿ¿ñ¿÷Ä@\u0000\u0004\u00044\"4\"\u0002$\u0002\u0002\u0004\u0000?à\"\u0010\"\u0010\u0001 \u0010 \"\u0001\u0001\u0001\t\u0001\t\n\u0000F\u0002\u0010\b\b\b0\b0T\u0001À\u0010ÿùFaFb\u0004H\u0000\u0000\u0000\u0000\u0000\u0004ÀÀAÀ\u0000\u0000\u0000",
"Messages": "\u0000L\r\u0000\u0001\u0000\u0000\u0000 \u0000\u0000\u0000\u0000 \b\u0000\u0000\u0001\u0000\u0000\u0000\u0003\t\u0000\u0000\u0000\u0010\u0000\u0000\u0000\bP\b\u0000\u0000\u0001\u001e\u0000\u0000\u0000\u0004\u0018\u0000\u0000\u0016 \u0000\u0000`\u0000p\u0001\u0010\t\u0010>\u0001\u0002\u0001\u0000Hpü\u0000\u0000@(\u0002\u0001\u0010\u0000\u0000\u0000\b\u0002@!\u0000\u0010\u0000\u0000\u0000\u0001\u0000@\u0000\u0010\u0001\u0000\u0000\u0000\u0000 \b\u0000\u0002\u0000\b\u0000\u0000\u0000L\u0003\u0000\u0000@\u0000|\u0000\u0000\u0003\u0000À\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
"Hide": "\u0000\u001c\u0010\u0000\u0000\u0010\u0000\u000f \u0001\t\b\u001fH\n\u0015\u0000\u0010ø\u0007\t\u0000ø\bxø\u0000\b\u0000\u0010¡H\u0001\bU@
\u0014\u0004\b\u0000\u0000",
- "Show": "\u0000*\u000b\u0000`\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000<\u0000\u0000 @q\u0002\u0007À \u0000@~\u0000\u0010\u0000ð\u0000\u0000\b\u0001È\u0000\u0000\u0004\u0000\u0002\u0000\u0000&\u0000\u0003\u0000\u0006\u0000\u0007\u0010\u0000\u0000",
+ "Show": "\u0000\u001d\u0010\u0000\u0001\u0000\u0000\u0000\b\u0000\b\u001fÿ\u0000 \u0002\u0000ð\u0010\u0003ø\u001fü\u0000@\u0004\u0000\u000e\u0000 \u0000ÿþ\u0004@(\u0000\u001e\u0002\"\u0000\u00100 \u0001\u0002\u0000\bd\u0000(\u0018\b\u0001\u0000\u0000",
"On": "\u0000\u001b\r\u0000\u0002\u0000\u0000\u0000 \u0000\u0000\u0004\u0001@ð\b\u0017ð\u0000\u0006\u0000\u0000@\u0000\u0010H\u0000\u0004\u0011\u0000\u0001\u0004 \u0000A\u0004\u00010\u0001\u0018\u0000\u0010\u0000\u0000",
"Ok": "\u0000\u000e\n\u0000x\u0012(I!(Â\u0013\bJ!$â\u0010",
"No": "\u0000,\r\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000p\u0000\u0000\u0000\u0000\u0000\b\u0000\b\u0000\u0000\u0000@À@À#\u0002\u0004\u0002\u0001Ð@\u0010@\u0010\u0002\u0004A\u0004A\u0000@H0H0\b\u0002\u0002\u0001À0\u00000\u0000\"\u0001\u0000\u0001\u0000\u0004 \u0000\u0000\u0000\u0000Að",
"Settings": "\u0000\u001f\u0010\u0000 \u0000\u0002\u0000!ð\u0002\u0000B!ÿÿôB\u0000\u0010\b\u0000O À\u0000\u0000\u000fþ>þ\u0000\u0000\u0001\u0000ù\b\"\u0001\u0011 Gâ\"\u0004B\u0001\u0010\u000f\u0005 \u0011\"\u0011ÿ@\u0000",
- "steps": "\u0000<\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000`\u0000\u0000\u0000\u0000\u0000\u0000\tCG\u0000\u0000È\u0003\u0000\u0000\u0007\u0016\u0001\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0010\u0000\u001e\u0000\u0000\u0000 \u0002\u0000\u0000\u0011\u0000\u0002\u0000 \u0007 \u0004\u0000@\u0005\u0000\u0002\u0000(\u0004\u0000\u0000@\u0002\u0010\u00000@\u0004\u0000\u0001\u0000\u0010\f\u0004\u0000\u0000 \u0002\u0000\u0000\u0000\u0010\u0000\u0004\u0000@\u0000\u0000\u0002\u0000\u0000\u0000\u0000",
+ "steps": "\u0000\u001f\u0010\u0000\u0001\u0000\b \u0002\u0000@Gà¨\u0000Añ\u0010\u000fôB \u0005H¿ÿQ\u0000DR\u0001\u0010\u0010(\"\u0011üPDPA\t\"\u0010\f\u0006B`\u0003\u0005\u0007\u0000\r\u0011p\u0000aA",
"back": "\u0000+\r\u0000\u0000\u0010\u0000\u0000\b\u0000\t\u0000\u0000\u0000\u0000 \u0000\u0000\u001c\u0000\u0000\u0002 \u0000\u0000\u0000\u0010\u0011\u0000\u0011\u0004\b\t\u0010\u0004 \u0000¢\u0001\b \u0010\u0010\u0001\b\u0002\u0000\u0010\u0000B\u0000@\u0004\u0000\u0010\u0000\u0000\u0001\u0000\u0004\u0000\u0000\u0000@\u0001\u0000",
- "Steps": "\u0000<\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000`\u0000\u0000\u0000\u0000\u0000\u0000\tCG\u0000\u0000È\u0003\u0000\u0000\u0007\u0016\u0001\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0010\u0000\u001e\u0000\u0000\u0000 \u0002\u0000\u0000\u0011\u0000\u0002\u0000 \u0007 \u0004\u0000@\u0005\u0000\u0002\u0000(\u0004\u0000\u0000@\u0002\u0010\u00000@\u0004\u0000\u0001\u0000\u0010\f\u0004\u0000\u0000 \u0002\u0000\u0000\u0000\u0010\u0000\u0004\u0000@\u0000\u0000\u0002\u0000\u0000\u0000\u0000",
+ "Steps": "\u0000\u001f\u0010\u0000\u0001\u0000\b \u0002\u0000@Gà¨\u0000Añ\u0010\u000fôB \u0005H¿ÿQ\u0000DR\u0001\u0010\u0010(\"\u0011üPDPA\t\"\u0010\f\u0006B`\u0003\u0005\u0007\u0000\r\u0011p\u0000aA",
"Year": "\u0000\u000f\u0010\u0000\u0010\u0000 \u0000ñ\u0004\u0002\b\b\u0010\u0007þ\b@\u0010!\u0003ÿø\u0004\u0000\b\u0000\u0010\u0000 \u0000@",
- "Yes": "\u0000%\r\u0000\u0001\u0000\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0010 \u0000\u0000\u0000¡Â\u0000\u0000\u0004ø\b\u0018\u0000@@@ \u0002\u0002\u0002\u0000\u0010\u0010\u0011\u0004\u0006`M<\u0002\u0002R0\u0018\u0000\f@@\u0000\u0004p\u0000\u0000\u0000\u0000",
- "Loading": "\u0000\\\u000e\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0002\t\u0000\u0000\u0000\u0000GP\u0000\u0000\u0000\u0000\u0013X|\u0000\u0000\u0003\u0000\u0000\u0006\u0000\u0001Ôx@\u0000\u0000\u0000\u0000\u0000\u0010 \u0011\u0004\u0004\u0000\u0000\b<\u0000\u0010\u0000\u0002\u0010@A\u0003à|\u0000\u0002\u0000\u0000@\"\u0002\b\u000fÀ\u0000 \u0000à\u0000\u0004\u0004 \u0000\u0000\u0002\u0000r\u0000\u0000\u0002x\u0000\u0000\u0000@\u0000 \u0000\u0010\u0000@8@\u0000\u0000\u0004\u0000\u0002\u0000\u0002\u0000\b\u0002\u0000\u0000\u0000\u0000\u0000 \u0004À\u0001\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0002\u00000\u0000 \u0000\u0000\u0000\u0000\u0002\u0000\u0000 \u0000\u0000\u0004\u0000",
+ "Yes": "\u0000\u001b\r\u0000\u0001\u0000\u0000\u0010\u0010\u0000\u0001\u0002\u0000\u0000(p\u0004ø\b\u0019\u0001\u0001\u0000 \f\u0004\u0004Atð\n\u0005#\u0001$P\u0010\u0004p\u0000\u0000",
+ "Loading": "\u0000M\u0010\u0000 \u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\b\u0000\u0000\u0000\b\u0000ÿ \u0004 \u0002 \u0000Aø@\u000f\u0000 \u000f\u0000\u0002\u0000\u001fÀ\u0010\u0000\u0004\u0000\u0010\u0003ÿ¼\u0000\u0000\u0000P\u0000\u0010\u000fø\bÂ\b/@@B\u0002\"\u0000B\u0004!\u0004\u0004\u000fð\u0011\u0010\u000fð!\u000bÄ ÀA Á\bR$\u0011\t\u0005\u0001\u0011\t\u000fþ @0\u0004@B\u0014\u0003\u0004\u0001\u0000\u0003\u0004\u0000\u0010<\u0000@\u0014\u0000\u0000@\u0000$H\u0000\u0001\u001fø\u0000\u0000\u0004\u0000AÀ\u0000\u0000\u0000\u0000\u0000\u0000 ",
"Music": "\u0000\u001f\u0010\u0000\u0002\u0000\u0001\u0000\u0002\u0000\bÿà \u0000\u0000¢\u0000D\u0000\u0002ú?ÿ\u0012\u0000\u0000b\"\u001fð\u0007À \u0002\u0000@Cÿøÿ*\u0001\u0001\u0000\u0002\u0002\u0006#\u0007ü0A\b\u0000",
"color": "\u0000+\r\u0000\b\u0000\u0000\u0000\u0000\u0000\bà\u0000\u0000\u0010\u0000à\u0000\u0000Cà\u0000à\u0000\u0007Ä\bä\u0000\u0000\u0010à\u0007Â\u0010\u0000\u0010?\u0000\u0000\u0004\u0000\u0000\u0010\u0000\u0000\u0004\u0010\u0000 \u0000\u0001\u0014\u0000\b\u0000\u0000A\u0006\u0000\u0000\u0000 \u0003\u0000\u0000\u0000",
"off": "\u0000\u001a\r\u0000\u0002\u0000\u0000\u0000@\u0010ð\u0010\u0003Æ\u0007\u0001\u0000\u0000À\u0000 P\u0000\u0010$\u0000\u0004\u0011\u0000\u0002\b@\u0001\u0004\u0010\u0000\f\u0000@\u0001\u0000\u0000\u0000",
diff --git a/lang/unicode-based/ja_JA.json b/lang/unicode-based/ja_JA.json
index 2852fd9e3..f8c16c9ce 100644
--- a/lang/unicode-based/ja_JA.json
+++ b/lang/unicode-based/ja_JA.json
@@ -2,123 +2,123 @@
"//": "Japanese language translations",
"GLOBAL": {
"//": "Translations that apply for all apps",
- "New Alarm": "新型アラーム",
- "New Timer": "新型タイマー",
+ "New Alarm": "アラームを追加",
+ "New Timer": "タイマーを追加",
"Save": "保存",
- "Keep Msgs": "Keep Msgs",
- "circle count": "サークルカウント",
- "(repeat)": "(繰り返し)",
+ "Keep Msgs": "メッセージを保持する",
+ "circle count": "サークルの数",
+ "(repeat)": "(リピート)",
"music": "音楽",
"Auto snooze": "オートスヌーズ",
- "week": "ウィーク",
+ "week": "週間",
"circle 1": "サークル1",
"circle 3": "サークル3",
"circle 2": "サークル2",
- "show widgets": "show widgets",
+ "show widgets": "ウィジェットを表示",
"heartrate": "心拍数",
"circle 4": "サークル4",
"battery warn": "バッテリー警告",
"valid period": "有効期間",
"maximum": "最大",
- "weather circle": "ウェザーサークル",
- "minimum": "ミニマム",
- "step length": "ステップ長",
+ "weather circle": "天気サークル",
+ "minimum": "最小",
+ "step length": "歩行",
"distance goal": "距離目標",
"Circle": "サークル",
- "min. confidence": "最低限の自信",
- "colorize icon": "カラライズアイコン",
+ "min. confidence": "最小確信度",
+ "colorize icon": "カラーアイコン",
"Heartrate": "心拍数",
"data": "データ",
- "Yes\ndefinitely": "はい。\n間違いなく",
+ "Yes\ndefinitely": "はい。\n確かに",
"Launcher Settings": "ランチャー設定",
- "TAP right top/bottom": "TAP右上/左下",
+ "TAP right top/bottom": "タップ右上/左下",
"Font": "フォント",
- "Mark Unread": "マーク・アンリード",
- "start&lap/reset, BTN1: EXIT": "スタート&ラップ&リセット、BTN1:EXIT",
+ "Mark Unread": "未読にする",
+ "start&lap/reset, BTN1: EXIT": "スタート&ラップ&リセット、BTN1:終了",
"App Source\nNot found": "アプリソース\n見つからない",
- "Show clocks": "時計の表示",
- "STEPS": "ステップ",
+ "Show clocks": "時計を表示する",
+ "STEPS": "歩数",
"Vector font size": "ベクターのフォントサイズ",
"View Message": "メッセージを見る",
"Are you sure": "本当にいいの?",
- "Bluetooth": "ブルートゥース",
+ "Bluetooth": "Bluetooth",
"Unread timer": "未読のタイマー",
- "Delete all messages": "すべてのメッセージの削除",
+ "Delete all messages": "すべてのメッセージを削除する",
"No Messages": "メッセージなし",
- "Record Run": "レコード・ラン",
+ "Record Run": "ランニングを記録する",
"Apps": "アプリ",
- "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:startlap 2:exit 3:reset",
- "Delete All Messages": "全メッセージの削除",
- "Vibration": "振動",
- "Utils": "ユーティライゼーション",
+ "BTNs 1:startlap 2:exit 3:reset": "BTNs 1:スタート&ラップ 2:終了 3:リセット",
+ "Delete All Messages": "すべてのメッセージを削除する",
+ "Vibration": "バイブレーション",
+ "Utils": "ユーティリティー",
"Piezo": "ピエゾ",
"BLE": "BLE",
- "Make Connectable": "接続可能にする",
+ "Make Connectable": "検出可能にする",
"HID": "HID",
- "Light BW": "ライトBW",
+ "Light BW": "ライト白黒",
"LCD": "LCD",
"Background": "背景",
- "Foreground": "フォアグラウンド",
+ "Foreground": "前景",
"Programmable": "プログラム可能",
"Customize": "カスタマイズ",
- "Dark BW": "ダークBW",
+ "Dark BW": "ダーク白黒",
"Background 2": "背景2",
- "Quiet Mode": "クワイエットモード",
- "Highlight FG": "ハイライトFG",
- "Foreground 2": "フォアグラウンド2",
+ "Quiet Mode": "サイレントモード",
+ "Highlight FG": "ハイライト前景",
+ "Foreground 2": "前景2",
"Remove": "削除",
"Passkey BETA": "Passkey BETA",
"Add Device": "デバイスの追加",
- "LCD Timeout": "LCDタイムアウト",
- "Highlight BG": "ハイライトBG",
- "LCD Brightness": "液晶ディスプレイの明るさ",
- "Connect device\nto add to\nwhitelist": "接続機器\nに追加します。\nホワイトリスト",
- "Wake on BTN3": "Wake on BTN3",
- "Wake on BTN2": "Wake on BTN2",
- "Time Zone": "タイムゾーン",
- "Wake on Touch": "ウェイクオンタッチ",
+ "LCD Timeout": "画面消灯",
+ "Highlight BG": "ハイライト背景",
+ "LCD Brightness": "明るさのレベル",
+ "Connect device\nto add to\nwhitelist": "デバイスを接続して\nホワイトリストに\n追加する",
+ "Wake on BTN3": "BTN3にスリープ解除",
+ "Wake on BTN2": "BTN2にスリープ解除",
+ "Time Zone": "時間帯",
+ "Wake on Touch": "タッチにスリープ解除",
"Twist Timeout": "ツイストタイムアウト",
- "Wake on Twist": "ウェイクオンツイスト",
- "Wake on BTN1": "Wake on BTN1",
+ "Wake on Twist": "ツイストにスリープ解除",
+ "Wake on BTN1": "BTN1にスリープ解除",
"Log": "ログ",
- "Wake on FaceUp": "Wake on FaceUp",
- "Twist Max Y": "ツイストマックスY",
+ "Wake on FaceUp": "直面するにスリープ解除",
+ "Twist Max Y": "ねじれ限界Y",
"Utilities": "ユーティリティー",
- "Clock Style": "クロックスタイル",
+ "Clock Style": "時計のスタイル",
"Rewrite Settings": "リライト設定",
"Flatten Battery": "バッテリーを平らにする",
"Debug Info": "デバッグ情報",
"Storage": "ストレージ",
- "Reset Settings": "設定のリセット",
- "Twist Threshold": "ツイスト・スレッショルド",
+ "Reset Settings": "設定をリセット",
+ "Twist Threshold": "ねじれ限界",
"Turn Off": "電源オフ",
"Compact Storage": "コンパクトなストレージ",
- "Reset to Defaults": "初期設定へのリセット",
- "Second": "セカンド",
+ "Reset to Defaults": "初期設定にリセット",
+ "Second": "秒",
"Compacting...\nTakes approx\n1 minute": "コンパクトにして...。\n所要時間約\n1分",
"Date": "日付",
"Minute": "分",
- "Connectable": "接続可能",
- "Stay Connectable": "Stay Connectable",
+ "Connectable": "検出可能",
+ "Stay Connectable": "検出可能のまま?",
"Hour": "時間",
- "No Clocks Found": "No Clock Found",
+ "No Clocks Found": "時計が見つかりません",
"App Settings": "アプリの設定",
- "Flattening battery - this can take hours.\nLong-press button to cancel": "バッテリーのフラット化 - これには数時間かかります。\nボタンの長押しでキャンセル",
+ "Flattening battery - this can take hours.\nLong-press button to cancel": "バッテリーを平らにする - これには数時間かかります。\nボタンの長押しでキャンセル",
"Month": "月",
"OFF": "OFF",
"Right": "右",
"Widgets": "ウィジェット",
"Left": "左",
- "Sort Order": "並び替え",
+ "Sort Order": "並べ替え順",
"Side": "サイド",
- "No app has settings": "設定のないアプリ",
- "Sleep Phase Alarm": "スリープフェーズアラーム",
+ "No app has settings": "設定がないアプリ",
+ "Sleep Phase Alarm": "スリープフェイズアラーム",
"Invalid settings": "無効な設定",
- "TIMER": "TIMER",
+ "TIMER": "タイマー",
"Reset All": "すべてをリセット",
"This will remove everything": "これにより、すべてのものが削除されます。",
"Alarm": "アラーム",
- "on": "で",
+ "on": "on",
"Minutes": "分",
"Reset all widgets": "全ウィジェットのリセット",
"Hours": "時間",
@@ -130,33 +130,33 @@
"Beep": "ビープ",
"Message": "メッセージ",
"System": "システム",
- "Select Clock": "セレクトクロック",
- "Locale": "ロケール",
- "Vibrate": "振動",
+ "Select Clock": "時計を選択する",
+ "Locale": "地域",
+ "Vibrate": "バイブレーション",
"Alerts": "アラート",
"Whitelist": "ホワイトリスト",
- "Set Time": "セット時間",
- "Disable": "Disable",
+ "Set Time": "時間を設定する",
+ "Disable": "無効",
"BACK": "BACK",
"ALARM": "ALARM",
"Timer": "タイマー",
"Error in settings": "設定のエラー",
"Factory Reset": "ファクトリーリセット",
"Sleep": "睡眠",
- "Connected": "コネクテッド",
+ "Connected": "直接接続した",
"Messages": "メッセージ",
"Hide": "隠す",
- "Show": "ショー",
+ "Show": "表す",
"On": "オン",
"Ok": "OK",
"No": "いいえ",
"Settings": "設定",
- "steps": "ステップ",
+ "steps": "歩数",
"back": "バック",
- "Steps": "ステップ",
+ "Steps": "歩数",
"Year": "年",
- "Yes": "はい。",
- "Loading": "ローディング",
+ "Yes": "はい",
+ "Loading": "読み込み中",
"Music": "音楽",
"color": "カラー",
"off": "オフ",
diff --git a/tsconfig.json b/tsconfig.json
index 7f6a96fef..a383f7346 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -7,6 +7,10 @@
"module": "commonjs",
+ // toggle these to check everything (and optionally change the include below to "apps/myapp/*.js")
+ // "checkJs": true,
+ // "noEmit": true,
+
// code-gen
"declaration": false,
"emitDeclarationOnly": false,
@@ -45,6 +49,7 @@
},
"include": [
"*/*/*.ts",
+ "apps/*/*.js", // with checkJs: true
"*/*/*.d.ts",
"modules/*.d.ts",
"typescript/types/*.d.ts"
diff --git a/typescript/types/locale.d.ts b/typescript/types/locale.d.ts
new file mode 100644
index 000000000..3fc914e10
--- /dev/null
+++ b/typescript/types/locale.d.ts
@@ -0,0 +1,19 @@
+declare module Locale {
+ type ShortBoolean = 0 | 1 | boolean;
+
+ type Locale = {
+ name: string,
+ currencySym: string,
+ dow(date: Date, short?: ShortBoolean): string,
+ month(date: Date, short?: ShortBoolean): string,
+ number(n: number): string,
+ currency(c: number): string,
+ distance(d: number): string,
+ speed(s: number): string,
+ temp(t: number): string,
+ translate(s: string): string,
+ date(date: Date, short?: ShortBoolean): string,
+ time(date: Date, short?: ShortBoolean): string,
+ meridian(date: Date): string,
+ }
+}
diff --git a/typescript/types/modules.d.ts b/typescript/types/modules.d.ts
new file mode 100644
index 000000000..5c65548fc
--- /dev/null
+++ b/typescript/types/modules.d.ts
@@ -0,0 +1,7 @@
+// locally declared modules
+declare function require(moduleName: "locale"): Locale.Locale;
+declare function require(moduleName: "sched"): typeof Sched;
+
+declare function require(moduleName: "ClockFace"): typeof ClockFace_.ClockFace;
+declare function require(moduleName: "clock_info"): typeof ClockInfo;
+declare function require(moduleName: "Layout"): typeof Layout_.Layout;
diff --git a/typescript/types/sched.d.ts b/typescript/types/sched.d.ts
new file mode 100644
index 000000000..6dd25e666
--- /dev/null
+++ b/typescript/types/sched.d.ts
@@ -0,0 +1,81 @@
+declare module Sched {
+ const enum Dow {
+ SUN = 1,
+ MON = 2,
+ TUE = 4,
+ WED = 8,
+ THU = 16,
+ FRI = 32,
+ SAT = 64,
+ }
+
+ type VibratePattern = "." | "," | "-" | ":" | ";" | "=";
+
+ type Sched = {
+ id?: string,
+ appid?: string,
+ on: boolean,
+ dow?: number,
+ msg: string,
+ last: number,
+ vibrate?: VibratePattern,
+ hidden?: boolean,
+ as?: boolean, // auto snooze
+ del?: boolean,
+ js?: string,
+ data?: unknown,
+ } & (
+ {
+ t: number, // time of day since midnight (in ms, set automatically when timer starts)
+ } | {
+ timer: number, // this is a timer - the time in ms
+ }
+ ) & (
+ {
+ date: `${number}-${number}-${number}`,
+ rp?: Repeat,
+ } | {
+ date: undefined,
+ rp: boolean,
+ }
+ );
+
+ type Repeat = {
+ num: number,
+ interval: "day" | "week" | "month" | "year",
+ };
+
+ type SchedSettings = {
+ unlockAtBuzz: boolean,
+ defaultSnoozeMillis: number,
+ defaultAutoSnooze: boolean,
+ defaultDeleteExpiredTimers: boolean,
+ buzzCount: number,
+ buzzIntervalMillis: number,
+ defaultAlarmPattern: string,
+ defaultTimerPattern: string,
+ };
+
+ function getAlarms(): Sched[];
+
+ function setAlarms(alarms: readonly Sched[]): void;
+
+ function getAlarm(id: string): Sched | undefined;
+
+ function getActiveAlarms (alarms: Sched[], time?: Date): Sched[];
+
+ function setAlarm(id: string, alarm?: Sched): void;
+
+ function getTimeToAlarm(alarm: Sched, time?: Date): number | undefined;
+ function getTimeToAlarm(alarm?: undefined | null, time?: Date): undefined;
+
+ function reload(): void;
+
+ function newDefaultAlarm(): Sched;
+
+ function newDefaultTimer(): Sched;
+
+ function getSettings(): SchedSettings;
+
+ function setSettings(settings: SchedSettings): void;
+}