From bbc8b271fba54f5217bd277ef4808487d98056e4 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 11:22:23 -0500 Subject: [PATCH 01/34] feat(debug): PoC live device screen mirror + remote D-pad (Mirror tab) Consumes the DisplayFrame PoC protobufs (2.99.0-screen-mirror-poc-SNAPSHOT from mavenLocal, useMavenLocal committed on this branch): DisplayMirrorManager reassembles FromRadio.display_frame chunks into MirrorFrame snapshots, AdminController gains setDisplayMirror + sendInputEvent, and the Debug panel gains a Mirror tab rendering the device's 1bpp framebuffer live with a D-pad driving the firmware InputBroker. PoC: tab strings deliberately unlocalized. --- .../data/manager/DisplayMirrorManagerImpl.kt | 79 ++++++++++ .../manager/FromRadioPacketHandlerImpl.kt | 8 + .../core/repository/AdminController.kt | 12 ++ .../core/repository/DisplayMirrorManager.kt | 58 +++++++ .../core/service/AdminControllerImpl.kt | 18 +++ .../feature/settings/debugging/Debug.kt | 10 ++ .../settings/debugging/DisplayMirror.kt | 149 ++++++++++++++++++ gradle.properties | 3 + gradle/libs.versions.toml | 5 +- 9 files changed, 341 insertions(+), 1 deletion(-) create mode 100644 core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt create mode 100644 core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt create mode 100644 feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt new file mode 100644 index 00000000000..6c273a2cafa --- /dev/null +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.core.data.manager + +import co.touchlab.kermit.Logger +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import org.koin.core.annotation.Single +import org.meshtastic.core.repository.DisplayMirrorManager +import org.meshtastic.core.repository.MirrorFrame +import org.meshtastic.proto.DisplayFrame + +/** + * Display frame reassembly state machine. + * + * Chunks arrive in offset order within a frame (the firmware drains one snapshot before capturing the next), so a + * chunk with a new `frame_id` or `offset == 0` starts a new frame and an out-of-sequence chunk drops the partial + * frame. Called sequentially from [FromRadioPacketHandlerImpl] on a single IO coroutine. + */ +@Single +class DisplayMirrorManagerImpl : DisplayMirrorManager { + + private val _frame = MutableStateFlow(null) + override val frame = _frame.asStateFlow() + + private var buffer: ByteArray? = null + private var frameId = 0 + private var received = 0 + + override fun handleIncomingFrame(chunk: DisplayFrame) { + val data = chunk.data_.toByteArray() + val total = chunk.total_size + + if (total <= 0 || total > MAX_FRAME_BYTES || chunk.offset + data.size > total) { + Logger.w { "DisplayMirror: dropping malformed chunk (offset=${chunk.offset} size=${data.size} total=$total)" } + return + } + + if (chunk.offset == 0) { + buffer = ByteArray(total) + frameId = chunk.frame_id + received = 0 + } + + val buf = buffer + if (buf == null || chunk.frame_id != frameId || chunk.offset != received || buf.size != total) { + Logger.w { "DisplayMirror: out-of-sequence chunk (frame=${chunk.frame_id}/$frameId offset=${chunk.offset}/$received)" } + buffer = null + return + } + + data.copyInto(buf, chunk.offset) + received += data.size + + if (received == total) { + _frame.value = MirrorFrame(width = chunk.width, height = chunk.height, frameId = frameId, pixels = buf) + buffer = null + } + } + + private companion object { + // Generous sanity cap: 320x240 at 1bpp is 9600 bytes. + const val MAX_FRAME_BYTES = 16384 + } +} diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt index 0253f8f9063..47ad420eb03 100644 --- a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt @@ -22,6 +22,7 @@ import kotlinx.coroutines.SupervisorJob import org.koin.core.annotation.Single import org.meshtastic.core.common.util.ioDispatcher import org.meshtastic.core.model.util.isOtaStatusNotification +import org.meshtastic.core.repository.DisplayMirrorManager import org.meshtastic.core.repository.FirmwareUpdateStatusRepository import org.meshtastic.core.repository.FromRadioPacketHandler import org.meshtastic.core.repository.LockdownCoordinator @@ -54,6 +55,7 @@ class FromRadioPacketHandlerImpl( private val configFlowManager: Lazy, private val configHandler: Lazy, private val xmodemManager: Lazy, + private val displayMirrorManager: Lazy, private val mqttManager: MqttManager, private val packetHandler: PacketHandler, private val serviceNotifications: MeshNotificationManager, @@ -83,6 +85,7 @@ class FromRadioPacketHandlerImpl( val regionPresets = proto.region_presets val xmodemPacket = proto.xmodemPacket val lockdownStatus = proto.lockdown_status + val displayFrame = proto.display_frame when { myInfo != null -> configFlowManager.value.handleMyInfo(myInfo, session) @@ -130,6 +133,11 @@ class FromRadioPacketHandlerImpl( xmodemPacket != null -> runIfSessionActive(session, "XModem packet") { xmodemManager.value.handleIncomingXModem(xmodemPacket) } + displayFrame != null -> + runIfSessionActive(session, "display frame") { + displayMirrorManager.value.handleIncomingFrame(displayFrame) + } + lockdownStatus != null -> runIfSessionActive(session, "lockdown status") { lockdownCoordinator.handleLockdownStatus(lockdownStatus) diff --git a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AdminController.kt b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AdminController.kt index 9e4adf7fee5..bf3f4af42d3 100644 --- a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AdminController.kt +++ b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AdminController.kt @@ -51,6 +51,18 @@ interface AdminController { /** Updates a local radio channel. Same fire-and-forget contract as [setLocalConfig]. */ suspend fun setLocalChannel(channel: Channel) + /** + * Enables or disables live display mirroring on the locally connected node. While enabled, the device streams its + * framebuffer as `FromRadio.display_frame` chunks — collect them via [DisplayMirrorManager]. + */ + suspend fun setDisplayMirror(enabled: Boolean) + + /** + * Injects a physical input event (button/key/touch) into the locally connected node's UI via the firmware + * InputBroker. Event codes are the firmware's `input_broker_event` values. + */ + suspend fun sendInputEvent(eventCode: Int, kbChar: Int = 0, touchX: Int = 0, touchY: Int = 0) + // ── Remote configuration ──────────────────────────────────────────────── /** Updates the owner (user info) on a remote node. */ diff --git a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt new file mode 100644 index 00000000000..aaabf8a87e6 --- /dev/null +++ b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.core.repository + +import kotlinx.coroutines.flow.StateFlow +import org.meshtastic.proto.DisplayFrame + +/** + * Reassembles the chunked [DisplayFrame] stream from the connected device into complete framebuffer snapshots. + * + * The device streams its 1bpp framebuffer as `FromRadio.display_frame` chunks while display mirroring is enabled + * (see `AdminMessage.set_display_mirror`). Chunks of one frame share a `frame_id`; a frame is complete when + * `offset + data.size == total_size`. + */ +interface DisplayMirrorManager { + /** Latest completely reassembled frame, or null before the first one arrives. */ + val frame: StateFlow + + /** Routes an incoming display frame chunk from the device to the reassembly state machine. */ + fun handleIncomingFrame(chunk: DisplayFrame) +} + +/** + * One complete device framebuffer snapshot. + * + * [pixels] is MONO_VLSB: 1 bit per pixel in vertical LSB-first pages — byte index = `x + (y / 8) * width`, + * bit index = `y % 8`. + */ +data class MirrorFrame(val width: Int, val height: Int, val frameId: Int, val pixels: ByteArray) { + override fun equals(other: Any?): Boolean = + other is MirrorFrame && + other.width == width && + other.height == height && + other.frameId == frameId && + other.pixels.contentEquals(pixels) + + override fun hashCode(): Int { + var result = width + result = 31 * result + height + result = 31 * result + frameId + result = 31 * result + pixels.contentHashCode() + return result + } +} diff --git a/core/service/src/commonMain/kotlin/org/meshtastic/core/service/AdminControllerImpl.kt b/core/service/src/commonMain/kotlin/org/meshtastic/core/service/AdminControllerImpl.kt index d47c3fdfb79..48a6d24f088 100644 --- a/core/service/src/commonMain/kotlin/org/meshtastic/core/service/AdminControllerImpl.kt +++ b/core/service/src/commonMain/kotlin/org/meshtastic/core/service/AdminControllerImpl.kt @@ -139,6 +139,24 @@ internal class AdminControllerImpl( scope.handledLaunch { radioConfigRepository.setLocalConfig(config) } } + override suspend fun setDisplayMirror(enabled: Boolean) { + commandSender.sendAdmin(myNodeNum) { AdminMessage(set_display_mirror = enabled) } + } + + override suspend fun sendInputEvent(eventCode: Int, kbChar: Int, touchX: Int, touchY: Int) { + commandSender.sendAdmin(myNodeNum) { + AdminMessage( + send_input_event = + AdminMessage.InputEvent( + event_code = eventCode, + kb_char = kbChar, + touch_x = touchX, + touch_y = touchY, + ), + ) + } + } + override suspend fun setConfig(destNum: Int, config: Config, packetId: Int) { commandSender.sendAdmin(destNum, packetId) { AdminMessage.Builder().also { wb -> wb.set_config = config }.build() diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/Debug.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/Debug.kt index 5af74080756..cf581fae895 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/Debug.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/Debug.kt @@ -185,11 +185,21 @@ fun DebugScreen(onNavigateUp: () -> Unit, viewModel: DebugViewModel) { onClick = { selectedTab = 1 }, text = { Text(stringResource(Res.string.debug_tab_app_logs)) }, ) + Tab( + selected = selectedTab == 2, + onClick = { selectedTab = 2 }, + // PoC tab; deliberately unlocalized. + text = { Text("Mirror") }, + ) } if (selectedTab == 1) { LogcatContent(modifier = Modifier.fillMaxSize()) return@Column } + if (selectedTab == 2) { + DisplayMirrorContent(modifier = Modifier.fillMaxSize()) + return@Column + } LazyColumn(modifier = Modifier.fillMaxSize(), state = listState) { stickyHeader { val animatedAlpha by diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt new file mode 100644 index 00000000000..f3774f0f0a9 --- /dev/null +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.settings.debugging + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.FilledTonalButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import androidx.lifecycle.ViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import org.koin.compose.viewmodel.koinViewModel +import org.koin.core.annotation.KoinViewModel +import org.meshtastic.core.repository.DisplayMirrorManager +import org.meshtastic.core.repository.MirrorFrame +import org.meshtastic.core.repository.RadioController + +// Firmware input_broker_event codes (src/input/InputBroker.h). +private const val INPUT_SELECT = 10 +private const val INPUT_UP = 17 +private const val INPUT_DOWN = 18 +private const val INPUT_LEFT = 19 +private const val INPUT_RIGHT = 20 +private const val INPUT_BACK = 27 + +@KoinViewModel +class DisplayMirrorViewModel( + displayMirrorManager: DisplayMirrorManager, + private val radioController: RadioController, +) : ViewModel() { + + val frame: StateFlow = displayMirrorManager.frame + + private val _mirroring = MutableStateFlow(false) + val mirroring: StateFlow = _mirroring.asStateFlow() + + fun setMirror(enabled: Boolean) { + viewModelScope.launch { + radioController.setDisplayMirror(enabled) + _mirroring.value = enabled + } + } + + fun sendKey(eventCode: Int) { + viewModelScope.launch { radioController.sendInputEvent(eventCode) } + } +} + +/** PoC live view of the connected device's screen, with remote D-pad control. Strings are deliberately unlocalized. */ +@Composable +fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirrorViewModel = koinViewModel()) { + val frame by viewModel.frame.collectAsStateWithLifecycle() + val mirroring by viewModel.mirroring.collectAsStateWithLifecycle() + + Column( + modifier = modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(12.dp), + ) { + Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp)) { + Switch(checked = mirroring, onCheckedChange = viewModel::setMirror) + Text(text = if (mirroring) "Mirroring" else "Mirror off", style = MaterialTheme.typography.titleMedium) + } + + val currentFrame = frame + if (currentFrame != null) { + MirrorFrameCanvas(currentFrame) + Text( + text = "${currentFrame.width}x${currentFrame.height} frame #${currentFrame.frameId}", + style = MaterialTheme.typography.labelSmall, + ) + } else { + Text(text = "No frame received yet — enable mirroring above.") + } + + // Remote D-pad + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + FilledTonalButton(onClick = { viewModel.sendKey(INPUT_UP) }) { Text("Up") } + } + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + FilledTonalButton(onClick = { viewModel.sendKey(INPUT_LEFT) }) { Text("Left") } + FilledTonalButton(onClick = { viewModel.sendKey(INPUT_SELECT) }) { Text("OK") } + FilledTonalButton(onClick = { viewModel.sendKey(INPUT_RIGHT) }) { Text("Right") } + } + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + FilledTonalButton(onClick = { viewModel.sendKey(INPUT_DOWN) }) { Text("Down") } + } + Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { + FilledTonalButton(onClick = { viewModel.sendKey(INPUT_BACK) }) { Text("Back") } + } + } +} + +/** Draws a MONO_VLSB 1bpp framebuffer scaled to the available width, one filled rect per lit pixel. */ +@Composable +private fun MirrorFrameCanvas(frame: MirrorFrame) { + val aspect = frame.width.toFloat() / frame.height.toFloat() + Canvas(modifier = Modifier.fillMaxWidth().aspectRatio(aspect).background(Color.Black)) { + val scale = size.width / frame.width + val pixel = Size(scale, scale) + for (y in 0 until frame.height) { + val page = (y / 8) * frame.width + val bit = 1 shl (y % 8) + for (x in 0 until frame.width) { + val index = page + x + if (index < frame.pixels.size && frame.pixels[index].toInt() and bit != 0) { + drawRect(color = Color.White, topLeft = Offset(x * scale, y * scale), size = pixel) + } + } + } + } +} diff --git a/gradle.properties b/gradle.properties index d2a21957fe6..59fcb23b693 100644 --- a/gradle.properties +++ b/gradle.properties @@ -40,3 +40,6 @@ org.gradle.priority=low # stays parallel if Isolated Projects is ever off. org.gradle.tooling.parallel=true org.gradle.welcome=never + +# PoC: resolve org.meshtastic:protobufs 2.99.0-screen-mirror-poc-SNAPSHOT from mavenLocal +useMavenLocal=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0d69db90b53..d63010b182a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -109,7 +109,10 @@ jmdns = "3.6.4" dbus-java = "5.2.2" qrcode-kotlin = "4.5.0" takpacket-sdk = "0.9.3" -meshtastic-protobufs = "2.8.1.11-g28f4f5f-SNAPSHOT" +# PoC: DisplayFrame screen mirroring, locally published from protobufs@screen-mirror-poc. +# Revert to main's pin once protobufs#1054 lands. main pins 2.8.1.11-g28f4f5f-SNAPSHOT. +# (requires -PuseMavenLocal or the gradle.properties flag on this branch) +meshtastic-protobufs = "2.99.0-screen-mirror-poc-SNAPSHOT" # Gradle Plugins ccud = "2.8.0" From b90146f7af4c00953506b8dfc277e591522c965c Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 11:34:34 -0500 Subject: [PATCH 02/34] fix(debug): keep the Mirror tab's D-pad above the fold Cap the mirror canvas at 512.dp (4x for a 128px OLED) instead of filling the window width, fold the frame info into the toggle row, and pair Down/Back so the controls fit without scrolling on desktop. --- .../settings/debugging/DisplayMirror.kt | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index f3774f0f0a9..6428e860408 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -25,6 +25,7 @@ import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.FilledTonalButton @@ -52,6 +53,9 @@ import org.meshtastic.core.repository.DisplayMirrorManager import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.core.repository.RadioController +// 4x scale for the common 128px-wide OLED; caps the canvas so the D-pad stays above the fold on desktop. +private val MAX_CANVAS_WIDTH = 512.dp + // Firmware input_broker_event codes (src/input/InputBroker.h). private const val INPUT_SELECT = 10 private const val INPUT_UP = 17 @@ -94,18 +98,20 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(12.dp), ) { + val currentFrame = frame Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp)) { Switch(checked = mirroring, onCheckedChange = viewModel::setMirror) Text(text = if (mirroring) "Mirroring" else "Mirror off", style = MaterialTheme.typography.titleMedium) + if (currentFrame != null) { + Text( + text = "${currentFrame.width}x${currentFrame.height} frame #${currentFrame.frameId}", + style = MaterialTheme.typography.labelSmall, + ) + } } - val currentFrame = frame if (currentFrame != null) { MirrorFrameCanvas(currentFrame) - Text( - text = "${currentFrame.width}x${currentFrame.height} frame #${currentFrame.frameId}", - style = MaterialTheme.typography.labelSmall, - ) } else { Text(text = "No frame received yet — enable mirroring above.") } @@ -121,18 +127,18 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror } Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { FilledTonalButton(onClick = { viewModel.sendKey(INPUT_DOWN) }) { Text("Down") } - } - Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { FilledTonalButton(onClick = { viewModel.sendKey(INPUT_BACK) }) { Text("Back") } } } } -/** Draws a MONO_VLSB 1bpp framebuffer scaled to the available width, one filled rect per lit pixel. */ +/** Draws a MONO_VLSB 1bpp framebuffer scaled up, one filled rect per lit pixel. Width-capped so the controls stay in view on desktop. */ @Composable private fun MirrorFrameCanvas(frame: MirrorFrame) { val aspect = frame.width.toFloat() / frame.height.toFloat() - Canvas(modifier = Modifier.fillMaxWidth().aspectRatio(aspect).background(Color.Black)) { + Canvas( + modifier = Modifier.widthIn(max = MAX_CANVAS_WIDTH).fillMaxWidth().aspectRatio(aspect).background(Color.Black), + ) { val scale = size.width / frame.width val pixel = Size(scale, scale) for (y in 0 until frame.height) { From 3e5987eb1e88840ec05400110585df535f837e0e Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 12:21:57 -0500 Subject: [PATCH 03/34] refactor(debug): harden screen mirror from adversarial review Manager: validate format (MONO_VLSB only) and geometry (width/height must describe exactly total_size bytes) so malformed device input can't reach aspectRatio and crash; unit tests for reassembly, drops, restarts. AdminController: setDisplayMirror/sendInputEvent become non-suspend immediate sends (teardown-safe, input never queues behind bulk admin) and gain requestDisplayFrame. Mirror tab: render each frame once into a 1:1 ImageBitmap scaled with FilterQuality.None (kills the fractional-scale seams), gate controls on connection state, reset the toggle on disconnect, stop the stream on tab dispose and ViewModel clear, add a one-shot Refresh, inject AdminController/ConnectionStateProvider instead of RadioController. Dispatch: display_frame test coverage incl. revoked-session. --- .../data/manager/DisplayMirrorManagerImpl.kt | 39 +++-- .../manager/FromRadioPacketHandlerImpl.kt | 9 +- .../manager/DisplayMirrorManagerImplTest.kt | 134 ++++++++++++++++++ .../DisplayMirrorManagerImplTest.kt.bak | 134 ++++++++++++++++++ .../manager/FromRadioPacketHandlerImplTest.kt | 15 ++ .../core/repository/AdminController.kt | 13 +- .../core/repository/DisplayMirrorManager.kt | 21 ++- .../core/service/AdminControllerImpl.kt | 24 ++-- .../core/testing/FakeRadioController.kt | 6 + .../settings/debugging/DisplayMirror.kt | 124 +++++++++++----- 10 files changed, 447 insertions(+), 72 deletions(-) create mode 100644 core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt create mode 100644 core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt.bak diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt index 6c273a2cafa..edb51a8da9e 100644 --- a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt @@ -27,9 +27,9 @@ import org.meshtastic.proto.DisplayFrame /** * Display frame reassembly state machine. * - * Chunks arrive in offset order within a frame (the firmware drains one snapshot before capturing the next), so a - * chunk with a new `frame_id` or `offset == 0` starts a new frame and an out-of-sequence chunk drops the partial - * frame. Called sequentially from [FromRadioPacketHandlerImpl] on a single IO coroutine. + * Chunks of one frame arrive contiguously and in offset order (FromRadio is a reliable ordered stream), so a chunk with + * a new `frame_id` or `offset == 0` starts a new frame and an out-of-sequence chunk drops the partial frame. Calls are + * serialized by the single receive-loop collector in MeshServiceOrchestrator (recreated per session). */ @Single class DisplayMirrorManagerImpl : DisplayMirrorManager { @@ -45,10 +45,7 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { val data = chunk.data_.toByteArray() val total = chunk.total_size - if (total <= 0 || total > MAX_FRAME_BYTES || chunk.offset + data.size > total) { - Logger.w { "DisplayMirror: dropping malformed chunk (offset=${chunk.offset} size=${data.size} total=$total)" } - return - } + if (!isAcceptableChunk(chunk, data.size)) return if (chunk.offset == 0) { buffer = ByteArray(total) @@ -58,7 +55,7 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { val buf = buffer if (buf == null || chunk.frame_id != frameId || chunk.offset != received || buf.size != total) { - Logger.w { "DisplayMirror: out-of-sequence chunk (frame=${chunk.frame_id}/$frameId offset=${chunk.offset}/$received)" } + Logger.w { "DisplayMirror: bad chunk ${chunk.frame_id}@${chunk.offset}, expected $frameId@$received" } buffer = null return } @@ -72,8 +69,34 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { } } + /** + * Format must be MONO_VLSB and width/height must describe exactly total_size bytes; a zero or lying dimension would + * otherwise reach the renderer (aspectRatio requires > 0). + */ + private fun isAcceptableChunk(chunk: DisplayFrame, dataSize: Int): Boolean { + val total = chunk.total_size + val expectedSize = chunk.width * ((chunk.height + PIXELS_PER_PAGE - 1) / PIXELS_PER_PAGE) + val acceptable = + chunk.format == DisplayFrame.Format.MONO_VLSB && + chunk.width > 0 && + chunk.height > 0 && + expectedSize == total && + total <= MAX_FRAME_BYTES && + chunk.offset + dataSize <= total + if (!acceptable) { + Logger.w { + "DisplayMirror: dropping bad chunk (format=${chunk.format} ${chunk.width}x${chunk.height} " + + "offset=${chunk.offset} size=$dataSize total=$total)" + } + } + return acceptable + } + private companion object { // Generous sanity cap: 320x240 at 1bpp is 9600 bytes. const val MAX_FRAME_BYTES = 16384 + + // MONO_VLSB packs 8 vertically adjacent pixels per byte (one "page" row). + const val PIXELS_PER_PAGE = 8 } } diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt index 47ad420eb03..799b8e4dfff 100644 --- a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt @@ -45,6 +45,7 @@ import org.meshtastic.core.resources.key_verification_request_title import org.meshtastic.core.resources.key_verification_title import org.meshtastic.core.resources.low_entropy_key_title import org.meshtastic.proto.ClientNotification +import org.meshtastic.proto.DisplayFrame import org.meshtastic.proto.FromRadio /** Implementation of [FromRadioPacketHandler] that dispatches [FromRadio] variants to specialized handlers. */ @@ -133,10 +134,7 @@ class FromRadioPacketHandlerImpl( xmodemPacket != null -> runIfSessionActive(session, "XModem packet") { xmodemManager.value.handleIncomingXModem(xmodemPacket) } - displayFrame != null -> - runIfSessionActive(session, "display frame") { - displayMirrorManager.value.handleIncomingFrame(displayFrame) - } + displayFrame != null -> handleDisplayFrame(displayFrame, session) lockdownStatus != null -> runIfSessionActive(session, "lockdown status") { @@ -154,6 +152,9 @@ class FromRadioPacketHandlerImpl( } } + private fun handleDisplayFrame(frame: DisplayFrame, session: RadioSessionContext) = + runIfSessionActive(session, "display frame") { displayMirrorManager.value.handleIncomingFrame(frame) } + private fun runIfSessionActive(session: RadioSessionContext, operation: String, block: () -> Unit) { if (!radioInterfaceService.runIfSessionActive(session, block)) { Logger.d { "Discarding $operation from stale transport session" } diff --git a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt new file mode 100644 index 00000000000..d50da08a2f3 --- /dev/null +++ b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.core.data.manager + +import okio.ByteString.Companion.toByteString +import org.meshtastic.proto.DisplayFrame +import kotlin.test.Test +import kotlin.test.assertContentEquals +import kotlin.test.assertEquals +import kotlin.test.assertNull + +class DisplayMirrorManagerImplTest { + + private val manager = DisplayMirrorManagerImpl() + + // 128x64 MONO_VLSB frame = 1024 bytes; the firmware chunks at 384. + private fun chunk( + frameId: Int = 1, + offset: Int = 0, + data: ByteArray, + total: Int = FRAME_BYTES, + width: Int = WIDTH, + height: Int = HEIGHT, + format: DisplayFrame.Format = DisplayFrame.Format.MONO_VLSB, + ) = DisplayFrame( + width = width, + height = height, + format = format, + frame_id = frameId, + offset = offset, + total_size = total, + data_ = data.toByteString(), + ) + + private fun bytes(size: Int, fill: Int) = ByteArray(size) { fill.toByte() } + + @Test + fun `reassembles a three-chunk frame in order`() { + manager.handleIncomingFrame(chunk(offset = 0, data = bytes(384, 1))) + manager.handleIncomingFrame(chunk(offset = 384, data = bytes(384, 2))) + assertNull(manager.frame.value) + + manager.handleIncomingFrame(chunk(offset = 768, data = bytes(256, 3))) + + val frame = manager.frame.value!! + assertEquals(WIDTH, frame.width) + assertEquals(HEIGHT, frame.height) + assertEquals(1, frame.frameId) + assertContentEquals(bytes(384, 1) + bytes(384, 2) + bytes(256, 3), frame.pixels) + } + + @Test + fun `single-chunk frame completes immediately`() { + // 64x32 = 256 bytes fits one chunk + manager.handleIncomingFrame(chunk(width = 64, height = 32, total = 256, data = bytes(256, 7))) + + assertEquals(256, manager.frame.value?.pixels?.size) + } + + @Test + fun `out-of-sequence chunk drops the partial frame`() { + manager.handleIncomingFrame(chunk(offset = 0, data = bytes(384, 1))) + manager.handleIncomingFrame(chunk(offset = 768, data = bytes(256, 3))) // gap: 384 missing + + manager.handleIncomingFrame(chunk(offset = 384, data = bytes(384, 2))) // too late + assertNull(manager.frame.value) + } + + @Test + fun `offset zero restarts mid-frame on device reboot or torn capture`() { + manager.handleIncomingFrame(chunk(frameId = 5, offset = 0, data = bytes(384, 1))) + + // New frame id starting over at offset 0 wins + manager.handleIncomingFrame(chunk(frameId = 6, offset = 0, data = bytes(384, 4))) + manager.handleIncomingFrame(chunk(frameId = 6, offset = 384, data = bytes(384, 5))) + manager.handleIncomingFrame(chunk(frameId = 6, offset = 768, data = bytes(256, 6))) + + assertEquals(6, manager.frame.value?.frameId) + } + + @Test + fun `frame id change mid-frame without offset zero is dropped`() { + manager.handleIncomingFrame(chunk(frameId = 1, offset = 0, data = bytes(384, 1))) + manager.handleIncomingFrame(chunk(frameId = 2, offset = 384, data = bytes(384, 2))) + + assertNull(manager.frame.value) + } + + @Test + fun `rejects geometry that does not match total size`() { + manager.handleIncomingFrame( + chunk(width = 64, height = 64, total = 256, data = bytes(256, 1)), + ) // 64x64 needs 512 + manager.handleIncomingFrame(chunk(width = 0, height = 64, total = 0, data = ByteArray(0))) + manager.handleIncomingFrame(chunk(width = 128, height = 0, total = 0, data = ByteArray(0))) + + assertNull(manager.frame.value) + } + + @Test + fun `rejects unsupported format`() { + manager.handleIncomingFrame( + chunk( + width = 64, + height = 32, + total = 256, + data = bytes(256, 1), + format = DisplayFrame.Format.FORMAT_UNSPECIFIED, + ), + ) + + assertNull(manager.frame.value) + } + + private companion object { + const val WIDTH = 128 + const val HEIGHT = 64 + const val FRAME_BYTES = 1024 + } +} diff --git a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt.bak b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt.bak new file mode 100644 index 00000000000..f3fe7f4a66d --- /dev/null +++ b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt.bak @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.core.data.manager + +import okio.ByteString.Companion.toByteString +import org.meshtastic.proto.DisplayFrame +import kotlin.test.Test +import kotlin.test.assertContentEquals +import kotlin.test.assertEquals +import kotlin.test.assertNull + +class DisplayMirrorManagerImplTest { + + private val manager = DisplayMirrorManagerImpl() + + // 128x64 MONO_VLSB frame = 1024 bytes; the firmware chunks at 384. + private fun chunk( + frameId: Int = 1, + offset: Int = 0, + data: ByteArray, + total: Int = FRAME_BYTES, + width: Int = WIDTH, + height: Int = HEIGHT, + format: DisplayFrame.Format = DisplayFrame.Format.MONO_VLSB, + ) = DisplayFrame( + width = width, + height = height, + format = format, + frame_id = frameId, + offset = offset, + total_size = total, + data_ = data.toByteString(), + ) + + private fun bytes(size: Int, fill: Int) = ByteArray(size) { fill.toByte() } + + @Test + fun `reassembles a three-chunk frame in order`() { + manager.handleIncomingFrame(chunk(offset = 0, data = bytes(384, 1))) + manager.handleIncomingFrame(chunk(offset = 384, data = bytes(384, 2))) + assertNull(manager.frame.value) + + manager.handleIncomingFrame(chunk(offset = 768, data = bytes(256, 3))) + + val frame = manager.frame.value!! + assertEquals(WIDTH, frame.width) + assertEquals(HEIGHT, frame.height) + assertEquals(1, frame.frameId) + assertContentEquals(bytes(384, 1) + bytes(384, 2) + bytes(256, 3), frame.pixels) + } + + @Test + fun `single-chunk frame completes immediately`() { + // 64x32 = 256 bytes fits one chunk + manager.handleIncomingFrame(chunk(width = 64, height = 32, total = 256, data = bytes(256, 7))) + + assertEquals(256, manager.frame.value?.pixels?.size) + } + + @Test + fun `out-of-sequence chunk drops the partial frame`() { + manager.handleIncomingFrame(chunk(offset = 0, data = bytes(384, 1))) + manager.handleIncomingFrame(chunk(offset = 768, data = bytes(256, 3))) // gap: 384 missing + + manager.handleIncomingFrame(chunk(offset = 384, data = bytes(384, 2))) // too late + assertNull(manager.frame.value) + } + + @Test + fun `offset zero restarts mid-frame (device reboot or torn capture)`() { + manager.handleIncomingFrame(chunk(frameId = 5, offset = 0, data = bytes(384, 1))) + + // New frame id starting over at offset 0 wins + manager.handleIncomingFrame(chunk(frameId = 6, offset = 0, data = bytes(384, 4))) + manager.handleIncomingFrame(chunk(frameId = 6, offset = 384, data = bytes(384, 5))) + manager.handleIncomingFrame(chunk(frameId = 6, offset = 768, data = bytes(256, 6))) + + assertEquals(6, manager.frame.value?.frameId) + } + + @Test + fun `frame id change mid-frame without offset zero is dropped`() { + manager.handleIncomingFrame(chunk(frameId = 1, offset = 0, data = bytes(384, 1))) + manager.handleIncomingFrame(chunk(frameId = 2, offset = 384, data = bytes(384, 2))) + + assertNull(manager.frame.value) + } + + @Test + fun `rejects geometry that does not match total size`() { + manager.handleIncomingFrame( + chunk(width = 64, height = 64, total = 256, data = bytes(256, 1)), + ) // 64x64 needs 512 + manager.handleIncomingFrame(chunk(width = 0, height = 64, total = 0, data = ByteArray(0))) + manager.handleIncomingFrame(chunk(width = 128, height = 0, total = 0, data = ByteArray(0))) + + assertNull(manager.frame.value) + } + + @Test + fun `rejects unsupported format`() { + manager.handleIncomingFrame( + chunk( + width = 64, + height = 32, + total = 256, + data = bytes(256, 1), + format = DisplayFrame.Format.FORMAT_UNSPECIFIED, + ), + ) + + assertNull(manager.frame.value) + } + + private companion object { + const val WIDTH = 128 + const val HEIGHT = 64 + const val FRAME_BYTES = 1024 + } +} diff --git a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt index 18644aade4c..dbd196b775b 100644 --- a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt +++ b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt @@ -27,6 +27,7 @@ import dev.mokkery.verify import dev.mokkery.verify.VerifyMode import dev.mokkery.verifySuspend import org.meshtastic.core.model.util.isOtaStatusNotification +import org.meshtastic.core.repository.DisplayMirrorManager import org.meshtastic.core.repository.FirmwareUpdateStatusRepository import org.meshtastic.core.repository.MeshConfigFlowManager import org.meshtastic.core.repository.MeshConfigHandler @@ -43,6 +44,7 @@ import org.meshtastic.proto.Channel import org.meshtastic.proto.ClientNotification import org.meshtastic.proto.Config import org.meshtastic.proto.DeviceMetadata +import org.meshtastic.proto.DisplayFrame import org.meshtastic.proto.FromRadio import org.meshtastic.proto.LoRaRegionPresetMap import org.meshtastic.proto.LockdownStatus @@ -68,6 +70,7 @@ class FromRadioPacketHandlerImplTest { private val configFlowManager: MeshConfigFlowManager = mock(MockMode.autofill) private val configHandler: MeshConfigHandler = mock(MockMode.autofill) private val xmodemManager: XModemManager = mock(MockMode.autofill) + private val displayMirrorManager: DisplayMirrorManager = mock(MockMode.autofill) private val lockdownCoordinator = FakeLockdownCoordinator() private val firmwareUpdateStatusRepository = FirmwareUpdateStatusRepository() private val radioInterfaceService: RadioInterfaceService = mock(MockMode.autofill) @@ -105,6 +108,7 @@ class FromRadioPacketHandlerImplTest { lazy { configFlowManager }, lazy { configHandler }, lazy { xmodemManager }, + lazy { displayMirrorManager }, mqttManager, packetHandler, serviceNotifications, @@ -220,13 +224,24 @@ class FromRadioPacketHandlerImplTest { handle(FromRadio.Builder().also { wb -> wb.queueStatus = queueStatus }.build()) handle(FromRadio.Builder().also { wb -> wb.xmodemPacket = xmodemPacket }.build()) handle(FromRadio.Builder().also { wb -> wb.lockdown_status = lockdownStatus }.build()) + handle(FromRadio(display_frame = DisplayFrame(width = 128, height = 64))) verify(mode = VerifyMode.exactly(0)) { mqttManager.handleMqttProxyMessage(any()) } verify(mode = VerifyMode.exactly(0)) { packetHandler.handleQueueStatus(any()) } verify(mode = VerifyMode.exactly(0)) { xmodemManager.handleIncomingXModem(any()) } + verify(mode = VerifyMode.exactly(0)) { displayMirrorManager.handleIncomingFrame(any()) } assertEquals(null, lockdownCoordinator.lastStatus) } + @Test + fun `handleFromRadio routes DISPLAY_FRAME to displayMirrorManager`() { + val frame = DisplayFrame(width = 128, height = 64, frame_id = 1, total_size = 1024) + + handle(FromRadio(display_frame = frame)) + + verify { displayMirrorManager.handleIncomingFrame(frame) } + } + @Test fun `handleFromRadio routes LOCKDOWN_STATUS to lockdownCoordinator`() { val lockdownStatus = diff --git a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AdminController.kt b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AdminController.kt index bf3f4af42d3..f94c5b717c5 100644 --- a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AdminController.kt +++ b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/AdminController.kt @@ -53,15 +53,20 @@ interface AdminController { /** * Enables or disables live display mirroring on the locally connected node. While enabled, the device streams its - * framebuffer as `FromRadio.display_frame` chunks — collect them via [DisplayMirrorManager]. + * framebuffer as `FromRadio.display_frame` chunks — collect them via [DisplayMirrorManager]. Non-suspend (immediate + * send, bypassing the outbound FIFO) so lifecycle teardown can reliably disable the stream. */ - suspend fun setDisplayMirror(enabled: Boolean) + fun setDisplayMirror(enabled: Boolean) + + /** Requests a single framebuffer frame from the locally connected node, delivered like mirrored frames. */ + fun requestDisplayFrame() /** * Injects a physical input event (button/key/touch) into the locally connected node's UI via the firmware - * InputBroker. Event codes are the firmware's `input_broker_event` values. + * InputBroker. Event codes are the firmware's `input_broker_event` values. Non-suspend immediate send: input must + * not queue behind bulk admin traffic. */ - suspend fun sendInputEvent(eventCode: Int, kbChar: Int = 0, touchX: Int = 0, touchY: Int = 0) + fun sendInputEvent(eventCode: Int, kbChar: Int = 0, touchX: Int = 0, touchY: Int = 0) // ── Remote configuration ──────────────────────────────────────────────── diff --git a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt index aaabf8a87e6..3cd303118d4 100644 --- a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt +++ b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt @@ -22,9 +22,9 @@ import org.meshtastic.proto.DisplayFrame /** * Reassembles the chunked [DisplayFrame] stream from the connected device into complete framebuffer snapshots. * - * The device streams its 1bpp framebuffer as `FromRadio.display_frame` chunks while display mirroring is enabled - * (see `AdminMessage.set_display_mirror`). Chunks of one frame share a `frame_id`; a frame is complete when - * `offset + data.size == total_size`. + * The device streams its 1bpp framebuffer as `FromRadio.display_frame` chunks while display mirroring is enabled (see + * `AdminMessage.set_display_mirror`). Chunks of one frame share a `frame_id`; a frame is complete when `offset + + * data.size == total_size`. */ interface DisplayMirrorManager { /** Latest completely reassembled frame, or null before the first one arrives. */ @@ -37,16 +37,15 @@ interface DisplayMirrorManager { /** * One complete device framebuffer snapshot. * - * [pixels] is MONO_VLSB: 1 bit per pixel in vertical LSB-first pages — byte index = `x + (y / 8) * width`, - * bit index = `y % 8`. + * [pixels] is MONO_VLSB: 1 bit per pixel in vertical LSB-first pages — byte index = `x + (y / 8) * width`, bit index = + * `y % 8`. */ data class MirrorFrame(val width: Int, val height: Int, val frameId: Int, val pixels: ByteArray) { - override fun equals(other: Any?): Boolean = - other is MirrorFrame && - other.width == width && - other.height == height && - other.frameId == frameId && - other.pixels.contentEquals(pixels) + override fun equals(other: Any?): Boolean = other is MirrorFrame && + other.width == width && + other.height == height && + other.frameId == frameId && + other.pixels.contentEquals(pixels) override fun hashCode(): Int { var result = width diff --git a/core/service/src/commonMain/kotlin/org/meshtastic/core/service/AdminControllerImpl.kt b/core/service/src/commonMain/kotlin/org/meshtastic/core/service/AdminControllerImpl.kt index 48a6d24f088..c35fa077260 100644 --- a/core/service/src/commonMain/kotlin/org/meshtastic/core/service/AdminControllerImpl.kt +++ b/core/service/src/commonMain/kotlin/org/meshtastic/core/service/AdminControllerImpl.kt @@ -139,20 +139,24 @@ internal class AdminControllerImpl( scope.handledLaunch { radioConfigRepository.setLocalConfig(config) } } - override suspend fun setDisplayMirror(enabled: Boolean) { - commandSender.sendAdmin(myNodeNum) { AdminMessage(set_display_mirror = enabled) } + override fun setDisplayMirror(enabled: Boolean) { + commandSender.sendAdminImmediate(myNodeNum) { AdminMessage(set_display_mirror = enabled) } } - override suspend fun sendInputEvent(eventCode: Int, kbChar: Int, touchX: Int, touchY: Int) { - commandSender.sendAdmin(myNodeNum) { + override fun requestDisplayFrame() { + commandSender.sendAdminImmediate(myNodeNum) { AdminMessage(get_display_frame_request = true) } + } + + override fun sendInputEvent(eventCode: Int, kbChar: Int, touchX: Int, touchY: Int) { + commandSender.sendAdminImmediate(myNodeNum) { AdminMessage( send_input_event = - AdminMessage.InputEvent( - event_code = eventCode, - kb_char = kbChar, - touch_x = touchX, - touch_y = touchY, - ), + AdminMessage.InputEvent( + event_code = eventCode, + kb_char = kbChar, + touch_x = touchX, + touch_y = touchY, + ), ) } } diff --git a/core/testing/src/commonMain/kotlin/org/meshtastic/core/testing/FakeRadioController.kt b/core/testing/src/commonMain/kotlin/org/meshtastic/core/testing/FakeRadioController.kt index 691d88e05db..0089f6b3333 100644 --- a/core/testing/src/commonMain/kotlin/org/meshtastic/core/testing/FakeRadioController.kt +++ b/core/testing/src/commonMain/kotlin/org/meshtastic/core/testing/FakeRadioController.kt @@ -276,6 +276,12 @@ class FakeRadioController : override suspend fun refreshMetadata(destNum: Int) {} + override fun setDisplayMirror(enabled: Boolean) {} + + override fun requestDisplayFrame() {} + + override fun sendInputEvent(eventCode: Int, kbChar: Int, touchX: Int, touchY: Int) {} + override suspend fun setLocalConfig(config: Config) { if (throwOnSetLocalConfig) error("Fake local config write failure") if (rejectLocalConfigWritesRemaining > 0) { diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index 6428e860408..7436852f629 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -16,8 +16,7 @@ */ package org.meshtastic.feature.settings.debugging -import androidx.compose.foundation.Canvas -import androidx.compose.foundation.background +import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -30,32 +29,49 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Canvas import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.FilterQuality +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.drawscope.CanvasDrawScope +import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.lifecycle.ViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewModelScope import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import org.koin.compose.viewmodel.koinViewModel import org.koin.core.annotation.KoinViewModel +import org.meshtastic.core.model.ConnectionState +import org.meshtastic.core.repository.AdminController +import org.meshtastic.core.repository.ConnectionStateProvider import org.meshtastic.core.repository.DisplayMirrorManager import org.meshtastic.core.repository.MirrorFrame -import org.meshtastic.core.repository.RadioController -// 4x scale for the common 128px-wide OLED; caps the canvas so the D-pad stays above the fold on desktop. +// 4x scale for the common 128px-wide OLED; caps the image so the D-pad stays above the fold on desktop. private val MAX_CANVAS_WIDTH = 512.dp +// MONO_VLSB packs 8 vertically adjacent pixels per byte (one "page" row). +private const val PIXELS_PER_PAGE = 8 + // Firmware input_broker_event codes (src/input/InputBroker.h). private const val INPUT_SELECT = 10 private const val INPUT_UP = 17 @@ -67,24 +83,41 @@ private const val INPUT_BACK = 27 @KoinViewModel class DisplayMirrorViewModel( displayMirrorManager: DisplayMirrorManager, - private val radioController: RadioController, + connectionStateProvider: ConnectionStateProvider, + private val adminController: AdminController, ) : ViewModel() { val frame: StateFlow = displayMirrorManager.frame + val connected: StateFlow = + connectionStateProvider.connectionState + .map { it is ConnectionState.Connected } + .stateIn(viewModelScope, SharingStarted.Eagerly, false) + private val _mirroring = MutableStateFlow(false) val mirroring: StateFlow = _mirroring.asStateFlow() + init { + // The device forgets the (non-persisted) mirror setting on disconnect/reboot; + // mirror the reset locally so the toggle never claims a dead stream is live. + viewModelScope.launch { connected.collect { if (!it) _mirroring.value = false } } + } + fun setMirror(enabled: Boolean) { - viewModelScope.launch { - radioController.setDisplayMirror(enabled) - _mirroring.value = enabled - } + adminController.setDisplayMirror(enabled) + _mirroring.value = enabled } - fun sendKey(eventCode: Int) { - viewModelScope.launch { radioController.sendInputEvent(eventCode) } + fun requestFrame() = adminController.requestDisplayFrame() + + fun sendKey(eventCode: Int) = adminController.sendInputEvent(eventCode) + + /** Stops a live stream when the mirror UI goes away; safe to call redundantly. */ + fun stopMirroring() { + if (_mirroring.value) setMirror(false) } + + override fun onCleared() = stopMirroring() } /** PoC live view of the connected device's screen, with remote D-pad control. Strings are deliberately unlocalized. */ @@ -92,6 +125,10 @@ class DisplayMirrorViewModel( fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirrorViewModel = koinViewModel()) { val frame by viewModel.frame.collectAsStateWithLifecycle() val mirroring by viewModel.mirroring.collectAsStateWithLifecycle() + val connected by viewModel.connected.collectAsStateWithLifecycle() + + // Don't leave the device streaming to a hidden tab or abandoned screen. + DisposableEffect(Unit) { onDispose { viewModel.stopMirroring() } } Column( modifier = modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(16.dp), @@ -100,8 +137,9 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror ) { val currentFrame = frame Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp)) { - Switch(checked = mirroring, onCheckedChange = viewModel::setMirror) + Switch(checked = mirroring, onCheckedChange = viewModel::setMirror, enabled = connected) Text(text = if (mirroring) "Mirroring" else "Mirror off", style = MaterialTheme.typography.titleMedium) + OutlinedButton(onClick = viewModel::requestFrame, enabled = connected) { Text("Refresh") } if (currentFrame != null) { Text( text = "${currentFrame.width}x${currentFrame.height} frame #${currentFrame.frameId}", @@ -110,46 +148,62 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror } } - if (currentFrame != null) { - MirrorFrameCanvas(currentFrame) - } else { - Text(text = "No frame received yet — enable mirroring above.") + when { + !connected -> Text(text = "Not connected to a device.") + currentFrame != null -> MirrorFrameImage(currentFrame) + else -> Text(text = "No frame received yet — enable mirroring or tap Refresh.") } // Remote D-pad Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { - FilledTonalButton(onClick = { viewModel.sendKey(INPUT_UP) }) { Text("Up") } + FilledTonalButton(onClick = { viewModel.sendKey(INPUT_UP) }, enabled = connected) { Text("Up") } } Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { - FilledTonalButton(onClick = { viewModel.sendKey(INPUT_LEFT) }) { Text("Left") } - FilledTonalButton(onClick = { viewModel.sendKey(INPUT_SELECT) }) { Text("OK") } - FilledTonalButton(onClick = { viewModel.sendKey(INPUT_RIGHT) }) { Text("Right") } + FilledTonalButton(onClick = { viewModel.sendKey(INPUT_LEFT) }, enabled = connected) { Text("Left") } + FilledTonalButton(onClick = { viewModel.sendKey(INPUT_SELECT) }, enabled = connected) { Text("OK") } + FilledTonalButton(onClick = { viewModel.sendKey(INPUT_RIGHT) }, enabled = connected) { Text("Right") } } Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { - FilledTonalButton(onClick = { viewModel.sendKey(INPUT_DOWN) }) { Text("Down") } - FilledTonalButton(onClick = { viewModel.sendKey(INPUT_BACK) }) { Text("Back") } + FilledTonalButton(onClick = { viewModel.sendKey(INPUT_DOWN) }, enabled = connected) { Text("Down") } + FilledTonalButton(onClick = { viewModel.sendKey(INPUT_BACK) }, enabled = connected) { Text("Back") } } } } -/** Draws a MONO_VLSB 1bpp framebuffer scaled up, one filled rect per lit pixel. Width-capped so the controls stay in view on desktop. */ +/** + * Renders a MONO_VLSB 1bpp framebuffer once per frame into a 1:1 [ImageBitmap] and scales it up with nearest-neighbor + * filtering — crisp device pixels, no fractional-scale seams, one pixel walk per frame instead of per recomposition. + */ @Composable -private fun MirrorFrameCanvas(frame: MirrorFrame) { - val aspect = frame.width.toFloat() / frame.height.toFloat() - Canvas( - modifier = Modifier.widthIn(max = MAX_CANVAS_WIDTH).fillMaxWidth().aspectRatio(aspect).background(Color.Black), - ) { - val scale = size.width / frame.width - val pixel = Size(scale, scale) +private fun MirrorFrameImage(frame: MirrorFrame, modifier: Modifier = Modifier) { + val bitmap = remember(frame) { renderFrame(frame) } + Image( + bitmap = bitmap, + contentDescription = "Device screen", + modifier = + modifier + .widthIn(max = MAX_CANVAS_WIDTH) + .fillMaxWidth() + .aspectRatio(frame.width.toFloat() / frame.height.toFloat()), + filterQuality = FilterQuality.None, + ) +} + +private fun renderFrame(frame: MirrorFrame): ImageBitmap { + val bitmap = ImageBitmap(frame.width, frame.height) + val size = Size(frame.width.toFloat(), frame.height.toFloat()) + CanvasDrawScope().draw(Density(1f), LayoutDirection.Ltr, Canvas(bitmap), size) { + drawRect(color = Color.Black) + val pixel = Size(1f, 1f) for (y in 0 until frame.height) { - val page = (y / 8) * frame.width - val bit = 1 shl (y % 8) + val page = (y / PIXELS_PER_PAGE) * frame.width + val bit = 1 shl (y % PIXELS_PER_PAGE) for (x in 0 until frame.width) { - val index = page + x - if (index < frame.pixels.size && frame.pixels[index].toInt() and bit != 0) { - drawRect(color = Color.White, topLeft = Offset(x * scale, y * scale), size = pixel) + if (frame.pixels[page + x].toInt() and bit != 0) { + drawRect(color = Color.White, topLeft = Offset(x.toFloat(), y.toFloat()), size = pixel) } } } } + return bitmap } From 42a1fa4ad8198a0ca97e077a28a6b88dc0f464b3 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 12:34:37 -0500 Subject: [PATCH 04/34] feat(metadata): describe the display in DeviceMetadata.display MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Populates the new DisplayInfo during the handshake — dimensions from the live display device, MONO_VLSB frame format, PanelClass from the panel defines (EINK/HUB75/TFT/LCD/OLED), has_touch from HAS_TOUCHSCREEN — so clients can gate mirroring UI and adapt to the panel. Absent on display-less builds. Regenerates protos (DisplayInfo, DisplayFrame rect fields reserved for dirty-rect streaming). --- .../drawable/ic_keyboard_arrow_left.xml | 9 + .../drawable/ic_keyboard_arrow_right.xml | 9 + .../org/meshtastic/core/ui/icon/Navigation.kt | 6 + .../settings/debugging/DisplayMirror.kt | 260 +++++++++++++++++- 4 files changed, 270 insertions(+), 14 deletions(-) create mode 100644 core/resources/src/commonMain/composeResources/drawable/ic_keyboard_arrow_left.xml create mode 100644 core/resources/src/commonMain/composeResources/drawable/ic_keyboard_arrow_right.xml diff --git a/core/resources/src/commonMain/composeResources/drawable/ic_keyboard_arrow_left.xml b/core/resources/src/commonMain/composeResources/drawable/ic_keyboard_arrow_left.xml new file mode 100644 index 00000000000..2d023ab1074 --- /dev/null +++ b/core/resources/src/commonMain/composeResources/drawable/ic_keyboard_arrow_left.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/resources/src/commonMain/composeResources/drawable/ic_keyboard_arrow_right.xml b/core/resources/src/commonMain/composeResources/drawable/ic_keyboard_arrow_right.xml new file mode 100644 index 00000000000..30d777e4324 --- /dev/null +++ b/core/resources/src/commonMain/composeResources/drawable/ic_keyboard_arrow_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Navigation.kt b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Navigation.kt index 0fa667bfa3d..afbb17d7594 100644 --- a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Navigation.kt +++ b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Navigation.kt @@ -26,6 +26,8 @@ import org.meshtastic.core.resources.ic_chevron_right import org.meshtastic.core.resources.ic_expand_less import org.meshtastic.core.resources.ic_expand_more import org.meshtastic.core.resources.ic_keyboard_arrow_down +import org.meshtastic.core.resources.ic_keyboard_arrow_left +import org.meshtastic.core.resources.ic_keyboard_arrow_right import org.meshtastic.core.resources.ic_keyboard_arrow_up val MeshtasticIcons.ArrowBack: ImageVector @@ -36,6 +38,10 @@ val MeshtasticIcons.KeyboardArrowDown: ImageVector @Composable get() = vectorResource(Res.drawable.ic_keyboard_arrow_down) val MeshtasticIcons.KeyboardArrowUp: ImageVector @Composable get() = vectorResource(Res.drawable.ic_keyboard_arrow_up) +val MeshtasticIcons.KeyboardArrowLeft: ImageVector + @Composable get() = vectorResource(Res.drawable.ic_keyboard_arrow_left) +val MeshtasticIcons.KeyboardArrowRight: ImageVector + @Composable get() = vectorResource(Res.drawable.ic_keyboard_arrow_right) val MeshtasticIcons.ArrowDownward: ImageVector @Composable get() = vectorResource(Res.drawable.ic_arrow_downward) val MeshtasticIcons.ExpandMore: ImageVector diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index 7436852f629..ab7a77ee064 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -16,18 +16,28 @@ */ package org.meshtastic.feature.settings.debugging +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.focusable +import androidx.compose.foundation.gestures.detectDragGestures +import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.FilledTonalButton +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Switch @@ -35,9 +45,15 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Canvas @@ -45,18 +61,28 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.FilterQuality import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.drawscope.CanvasDrawScope +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.input.key.Key +import androidx.compose.ui.input.key.KeyEventType +import androidx.compose.ui.input.key.key +import androidx.compose.ui.input.key.onPreviewKeyEvent +import androidx.compose.ui.input.key.type +import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.lifecycle.ViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import org.koin.compose.viewmodel.koinViewModel import org.koin.core.annotation.KoinViewModel @@ -65,15 +91,34 @@ import org.meshtastic.core.repository.AdminController import org.meshtastic.core.repository.ConnectionStateProvider import org.meshtastic.core.repository.DisplayMirrorManager import org.meshtastic.core.repository.MirrorFrame +import org.meshtastic.core.repository.NodeRepository +import org.meshtastic.core.ui.icon.KeyboardArrowDown +import org.meshtastic.core.ui.icon.KeyboardArrowLeft +import org.meshtastic.core.ui.icon.KeyboardArrowRight +import org.meshtastic.core.ui.icon.KeyboardArrowUp +import org.meshtastic.core.ui.icon.MeshtasticIcons +import org.meshtastic.proto.DisplayInfo // 4x scale for the common 128px-wide OLED; caps the image so the D-pad stays above the fold on desktop. private val MAX_CANVAS_WIDTH = 512.dp +// M3 comfortable target for remote-control keys (48dp minimum + breathing room). +private val DPAD_KEY_SIZE = 56.dp +private val DPAD_GAP = 8.dp + +// OS-typematic-style auto-repeat, slowed to what a LoRa radio UI can render. +private const val REPEAT_INITIAL_DELAY_MS = 500L +private const val REPEAT_INTERVAL_MS = 100L + +// Swipes on the mirror shorter than this are ignored as accidental. +private val SWIPE_THRESHOLD = 48.dp + // MONO_VLSB packs 8 vertically adjacent pixels per byte (one "page" row). private const val PIXELS_PER_PAGE = 8 // Firmware input_broker_event codes (src/input/InputBroker.h). private const val INPUT_SELECT = 10 +private const val INPUT_SELECT_LONG = 11 private const val INPUT_UP = 17 private const val INPUT_DOWN = 18 private const val INPUT_LEFT = 19 @@ -84,6 +129,7 @@ private const val INPUT_BACK = 27 class DisplayMirrorViewModel( displayMirrorManager: DisplayMirrorManager, connectionStateProvider: ConnectionStateProvider, + nodeRepository: NodeRepository, private val adminController: AdminController, ) : ViewModel() { @@ -94,6 +140,12 @@ class DisplayMirrorViewModel( .map { it is ConnectionState.Connected } .stateIn(viewModelScope, SharingStarted.Eagerly, false) + /** Panel description from the connect handshake; null on display-less nodes and pre-DisplayInfo firmware. */ + val displayInfo: StateFlow = + nodeRepository.ourNodeInfo + .map { it?.metadata?.display } + .stateIn(viewModelScope, SharingStarted.Eagerly, null) + private val _mirroring = MutableStateFlow(false) val mirroring: StateFlow = _mirroring.asStateFlow() @@ -126,6 +178,7 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror val frame by viewModel.frame.collectAsStateWithLifecycle() val mirroring by viewModel.mirroring.collectAsStateWithLifecycle() val connected by viewModel.connected.collectAsStateWithLifecycle() + val displayInfo by viewModel.displayInfo.collectAsStateWithLifecycle() // Don't leave the device streaming to a hidden tab or abandoned screen. DisposableEffect(Unit) { onDispose { viewModel.stopMirroring() } } @@ -148,31 +201,210 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror } } + if (displayInfo?.panel_class == DisplayInfo.PanelClass.EINK) { + Text( + text = "E-ink display: refresh is slow — prefer one-shot Refresh over continuous mirroring.", + style = MaterialTheme.typography.labelSmall, + ) + } + when { !connected -> Text(text = "Not connected to a device.") - currentFrame != null -> MirrorFrameImage(currentFrame) + currentFrame != null -> MirrorSurface(currentFrame, onEvent = viewModel::sendKey) else -> Text(text = "No frame received yet — enable mirroring or tap Refresh.") } - // Remote D-pad - Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { - FilledTonalButton(onClick = { viewModel.sendKey(INPUT_UP) }, enabled = connected) { Text("Up") } + DpadCluster(enabled = connected, onEvent = viewModel::sendKey) + } +} + +/** + * The live mirror plus its direct input affordances: click to focus (keyboard capture — arrows, Enter/Space = OK, + * Esc/Backspace = Back), swipe in a cardinal direction for a single direction event. + */ +@Composable +private fun MirrorSurface(frame: MirrorFrame, onEvent: (Int) -> Unit, modifier: Modifier = Modifier) { + val focusRequester = remember { FocusRequester() } + var focused by remember { mutableStateOf(false) } + val focusColor = MaterialTheme.colorScheme.primary + + Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(4.dp)) { + Box( + modifier = + modifier + .focusRequester(focusRequester) + .onFocusChanged { focused = it.isFocused } + .focusable() + .onPreviewKeyEvent { event -> + if (event.type != KeyEventType.KeyDown) return@onPreviewKeyEvent false + keyToInputEvent(event.key)?.let { + onEvent(it) + true + } ?: false + } + .pointerInput(Unit) { detectTapGestures(onTap = { focusRequester.requestFocus() }) } + .swipeToDirection(onEvent) + .border(width = 2.dp, color = if (focused) focusColor else Color.Transparent), + ) { + MirrorFrameImage(frame) } - Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { - FilledTonalButton(onClick = { viewModel.sendKey(INPUT_LEFT) }, enabled = connected) { Text("Left") } - FilledTonalButton(onClick = { viewModel.sendKey(INPUT_SELECT) }, enabled = connected) { Text("OK") } - FilledTonalButton(onClick = { viewModel.sendKey(INPUT_RIGHT) }, enabled = connected) { Text("Right") } + Text( + text = + if (focused) { + "Keyboard active: arrows navigate · Enter selects · Esc goes back" + } else { + "Click the screen for keyboard control, or swipe it to navigate" + }, + style = MaterialTheme.typography.labelSmall, + ) + } +} + +private fun keyToInputEvent(key: Key): Int? = when (key) { + Key.DirectionUp -> INPUT_UP + Key.DirectionDown -> INPUT_DOWN + Key.DirectionLeft -> INPUT_LEFT + Key.DirectionRight -> INPUT_RIGHT + Key.Enter, Key.NumPadEnter, Key.Spacebar -> INPUT_SELECT + Key.Escape, Key.Backspace -> INPUT_BACK + else -> null +} + +/** Converts a completed drag into one direction event along its dominant axis, ignoring short accidental swipes. */ +private fun Modifier.swipeToDirection(onEvent: (Int) -> Unit): Modifier = pointerInput(Unit) { + val threshold = SWIPE_THRESHOLD.toPx() + var drag = Offset.Zero + detectDragGestures( + onDragStart = { drag = Offset.Zero }, + onDrag = { change, amount -> + change.consume() + drag += amount + }, + onDragEnd = { + val horizontal = drag.x + val vertical = drag.y + when { + kotlin.math.abs(horizontal) < threshold && kotlin.math.abs(vertical) < threshold -> Unit + kotlin.math.abs(horizontal) >= kotlin.math.abs(vertical) -> + onEvent(if (horizontal > 0) INPUT_RIGHT else INPUT_LEFT) + else -> onEvent(if (vertical > 0) INPUT_DOWN else INPUT_UP) + } + }, + ) +} + +/** + * Cross-shaped 5-way cluster with Back below-left, following the TV-remote convention: directions auto-repeat on + * hold (500ms delay, then 10Hz — slow enough for the radio to render), OK long-press sends the firmware's + * SELECT_LONG. + */ +@Composable +private fun DpadCluster(enabled: Boolean, onEvent: (Int) -> Unit, modifier: Modifier = Modifier) { + Column(modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(DPAD_GAP)) { + RepeatingKey(MeshtasticIcons.KeyboardArrowUp, "Up", enabled) { onEvent(INPUT_UP) } + Row(horizontalArrangement = Arrangement.spacedBy(DPAD_GAP)) { + RepeatingKey(MeshtasticIcons.KeyboardArrowLeft, "Left", enabled) { onEvent(INPUT_LEFT) } + OkKey(enabled = enabled, onSelect = { onEvent(INPUT_SELECT) }, onSelectLong = { onEvent(INPUT_SELECT_LONG) }) + RepeatingKey(MeshtasticIcons.KeyboardArrowRight, "Right", enabled) { onEvent(INPUT_RIGHT) } + } + RepeatingKey(MeshtasticIcons.KeyboardArrowDown, "Down", enabled) { onEvent(INPUT_DOWN) } + Row(modifier = Modifier.widthIn(min = DPAD_KEY_SIZE * 3 + DPAD_GAP * 2)) { + BackKey(enabled = enabled) { onEvent(INPUT_BACK) } } - Row(horizontalArrangement = Arrangement.spacedBy(8.dp)) { - FilledTonalButton(onClick = { viewModel.sendKey(INPUT_DOWN) }, enabled = connected) { Text("Down") } - FilledTonalButton(onClick = { viewModel.sendKey(INPUT_BACK) }, enabled = connected) { Text("Back") } + } +} + +/** A direction key: fires on press, then auto-repeats while held. */ +@Composable +private fun RepeatingKey(icon: ImageVector, label: String, enabled: Boolean, onEvent: () -> Unit) { + var pressed by remember { mutableStateOf(false) } + val background = + when { + !enabled -> MaterialTheme.colorScheme.surfaceVariant + pressed -> MaterialTheme.colorScheme.primaryContainer + else -> MaterialTheme.colorScheme.secondaryContainer } + Box( + contentAlignment = Alignment.Center, + modifier = + Modifier + .size(DPAD_KEY_SIZE) + .clip(CircleShape) + .background(background) + .pointerInput(enabled) { + if (!enabled) return@pointerInput + coroutineScope { + detectTapGestures( + onPress = { + pressed = true + onEvent() + val repeater = launch { + delay(REPEAT_INITIAL_DELAY_MS) + while (isActive) { + onEvent() + delay(REPEAT_INTERVAL_MS) + } + } + tryAwaitRelease() + repeater.cancel() + pressed = false + }, + ) + } + }, + ) { + Icon(imageVector = icon, contentDescription = label, tint = contentColorFor(enabled)) + } +} + +/** Center OK: tap selects, long-press sends SELECT_LONG. */ +@OptIn(ExperimentalFoundationApi::class) +@Composable +private fun OkKey(enabled: Boolean, onSelect: () -> Unit, onSelectLong: () -> Unit) { + Box( + contentAlignment = Alignment.Center, + modifier = + Modifier + .size(DPAD_KEY_SIZE) + .clip(CircleShape) + .background( + if (enabled) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.surfaceVariant, + ) + .combinedClickable(enabled = enabled, onLongClick = onSelectLong, onClick = onSelect), + ) { + Text( + text = "OK", + style = MaterialTheme.typography.titleSmall, + color = if (enabled) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurfaceVariant, + ) + } +} + +@Composable +private fun BackKey(enabled: Boolean, onBack: () -> Unit) { + Box( + contentAlignment = Alignment.Center, + modifier = + Modifier + .size(DPAD_KEY_SIZE) + .clip(CircleShape) + .background( + if (enabled) MaterialTheme.colorScheme.secondaryContainer else MaterialTheme.colorScheme.surfaceVariant, + ) + .combinedClickable(enabled = enabled, onClick = onBack), + ) { + Text(text = "Back", style = MaterialTheme.typography.labelMedium, color = contentColorFor(enabled)) } } +@Composable +private fun contentColorFor(enabled: Boolean): Color = + if (enabled) MaterialTheme.colorScheme.onSecondaryContainer else MaterialTheme.colorScheme.onSurfaceVariant + /** - * Renders a MONO_VLSB 1bpp framebuffer once per frame into a 1:1 [ImageBitmap] and scales it up with nearest-neighbor - * filtering — crisp device pixels, no fractional-scale seams, one pixel walk per frame instead of per recomposition. + * Renders a MONO_VLSB 1bpp framebuffer once per frame into a 1:1 [ImageBitmap] and scales it up with + * nearest-neighbor filtering — crisp device pixels, no fractional-scale seams, one pixel walk per frame + * instead of per recomposition. */ @Composable private fun MirrorFrameImage(frame: MirrorFrame, modifier: Modifier = Modifier) { From f67252661179f30d3172d618a38b5752c57d977d Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 12:40:55 -0500 Subject: [PATCH 05/34] feat(debug): TV-remote-grade mirror controls and DisplayInfo awareness MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the flat button stack with the researched control surface: cross-shaped 5-way cluster (56dp circular keys, 8dp gaps, Material Symbols chevrons with contentDescriptions), directions auto-repeat on hold (500ms then 10Hz — slow enough for the radio to render), OK long-press sends SELECT_LONG, Back sits below per TV-remote convention. The mirror itself becomes an input surface: click to capture the keyboard (arrows / Enter / Esc, with a visible focus ring and hint) and swipe in a cardinal direction to navigate. Consumes the new DeviceMetadata.display: shows an e-ink hint steering toward one-shot Refresh. Adds keyboard_arrow_left/right icons (Material Symbols rounded, transposed from the existing up glyph). --- .../settings/debugging/DisplayMirror.kt | 108 ++++++++++-------- 1 file changed, 63 insertions(+), 45 deletions(-) diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index ab7a77ee064..2f603685b81 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -142,9 +142,7 @@ class DisplayMirrorViewModel( /** Panel description from the connect handshake; null on display-less nodes and pre-DisplayInfo firmware. */ val displayInfo: StateFlow = - nodeRepository.ourNodeInfo - .map { it?.metadata?.display } - .stateIn(viewModelScope, SharingStarted.Eagerly, null) + nodeRepository.ourNodeInfo.map { it?.metadata?.display }.stateIn(viewModelScope, SharingStarted.Eagerly, null) private val _mirroring = MutableStateFlow(false) val mirroring: StateFlow = _mirroring.asStateFlow() @@ -228,11 +226,14 @@ private fun MirrorSurface(frame: MirrorFrame, onEvent: (Int) -> Unit, modifier: var focused by remember { mutableStateOf(false) } val focusColor = MaterialTheme.colorScheme.primary - Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(4.dp)) { + Column( + modifier = modifier, + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(4.dp), + ) { Box( modifier = - modifier - .focusRequester(focusRequester) + Modifier.focusRequester(focusRequester) .onFocusChanged { focused = it.isFocused } .focusable() .onPreviewKeyEvent { event -> @@ -262,11 +263,22 @@ private fun MirrorSurface(frame: MirrorFrame, onEvent: (Int) -> Unit, modifier: private fun keyToInputEvent(key: Key): Int? = when (key) { Key.DirectionUp -> INPUT_UP + Key.DirectionDown -> INPUT_DOWN + Key.DirectionLeft -> INPUT_LEFT + Key.DirectionRight -> INPUT_RIGHT - Key.Enter, Key.NumPadEnter, Key.Spacebar -> INPUT_SELECT - Key.Escape, Key.Backspace -> INPUT_BACK + + Key.Enter, + Key.NumPadEnter, + Key.Spacebar, + -> INPUT_SELECT + + Key.Escape, + Key.Backspace, + -> INPUT_BACK + else -> null } @@ -285,8 +297,10 @@ private fun Modifier.swipeToDirection(onEvent: (Int) -> Unit): Modifier = pointe val vertical = drag.y when { kotlin.math.abs(horizontal) < threshold && kotlin.math.abs(vertical) < threshold -> Unit + kotlin.math.abs(horizontal) >= kotlin.math.abs(vertical) -> onEvent(if (horizontal > 0) INPUT_RIGHT else INPUT_LEFT) + else -> onEvent(if (vertical > 0) INPUT_DOWN else INPUT_UP) } }, @@ -294,17 +308,24 @@ private fun Modifier.swipeToDirection(onEvent: (Int) -> Unit): Modifier = pointe } /** - * Cross-shaped 5-way cluster with Back below-left, following the TV-remote convention: directions auto-repeat on - * hold (500ms delay, then 10Hz — slow enough for the radio to render), OK long-press sends the firmware's - * SELECT_LONG. + * Cross-shaped 5-way cluster with Back below-left, following the TV-remote convention: directions auto-repeat on hold + * (500ms delay, then 10Hz — slow enough for the radio to render), OK long-press sends the firmware's SELECT_LONG. */ @Composable private fun DpadCluster(enabled: Boolean, onEvent: (Int) -> Unit, modifier: Modifier = Modifier) { - Column(modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(DPAD_GAP)) { + Column( + modifier = modifier, + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(DPAD_GAP), + ) { RepeatingKey(MeshtasticIcons.KeyboardArrowUp, "Up", enabled) { onEvent(INPUT_UP) } Row(horizontalArrangement = Arrangement.spacedBy(DPAD_GAP)) { RepeatingKey(MeshtasticIcons.KeyboardArrowLeft, "Left", enabled) { onEvent(INPUT_LEFT) } - OkKey(enabled = enabled, onSelect = { onEvent(INPUT_SELECT) }, onSelectLong = { onEvent(INPUT_SELECT_LONG) }) + OkKey( + enabled = enabled, + onSelect = { onEvent(INPUT_SELECT) }, + onSelectLong = { onEvent(INPUT_SELECT_LONG) }, + ) RepeatingKey(MeshtasticIcons.KeyboardArrowRight, "Right", enabled) { onEvent(INPUT_RIGHT) } } RepeatingKey(MeshtasticIcons.KeyboardArrowDown, "Down", enabled) { onEvent(INPUT_DOWN) } @@ -327,31 +348,27 @@ private fun RepeatingKey(icon: ImageVector, label: String, enabled: Boolean, onE Box( contentAlignment = Alignment.Center, modifier = - Modifier - .size(DPAD_KEY_SIZE) - .clip(CircleShape) - .background(background) - .pointerInput(enabled) { - if (!enabled) return@pointerInput - coroutineScope { - detectTapGestures( - onPress = { - pressed = true - onEvent() - val repeater = launch { - delay(REPEAT_INITIAL_DELAY_MS) - while (isActive) { - onEvent() - delay(REPEAT_INTERVAL_MS) - } + Modifier.size(DPAD_KEY_SIZE).clip(CircleShape).background(background).pointerInput(enabled) { + if (!enabled) return@pointerInput + coroutineScope { + detectTapGestures( + onPress = { + pressed = true + onEvent() + val repeater = launch { + delay(REPEAT_INITIAL_DELAY_MS) + while (isActive) { + onEvent() + delay(REPEAT_INTERVAL_MS) } - tryAwaitRelease() - repeater.cancel() - pressed = false - }, - ) - } - }, + } + tryAwaitRelease() + repeater.cancel() + pressed = false + }, + ) + } + }, ) { Icon(imageVector = icon, contentDescription = label, tint = contentColorFor(enabled)) } @@ -364,8 +381,7 @@ private fun OkKey(enabled: Boolean, onSelect: () -> Unit, onSelectLong: () -> Un Box( contentAlignment = Alignment.Center, modifier = - Modifier - .size(DPAD_KEY_SIZE) + Modifier.size(DPAD_KEY_SIZE) .clip(CircleShape) .background( if (enabled) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.surfaceVariant, @@ -385,11 +401,14 @@ private fun BackKey(enabled: Boolean, onBack: () -> Unit) { Box( contentAlignment = Alignment.Center, modifier = - Modifier - .size(DPAD_KEY_SIZE) + Modifier.size(DPAD_KEY_SIZE) .clip(CircleShape) .background( - if (enabled) MaterialTheme.colorScheme.secondaryContainer else MaterialTheme.colorScheme.surfaceVariant, + if (enabled) { + MaterialTheme.colorScheme.secondaryContainer + } else { + MaterialTheme.colorScheme.surfaceVariant + }, ) .combinedClickable(enabled = enabled, onClick = onBack), ) { @@ -402,9 +421,8 @@ private fun contentColorFor(enabled: Boolean): Color = if (enabled) MaterialTheme.colorScheme.onSecondaryContainer else MaterialTheme.colorScheme.onSurfaceVariant /** - * Renders a MONO_VLSB 1bpp framebuffer once per frame into a 1:1 [ImageBitmap] and scales it up with - * nearest-neighbor filtering — crisp device pixels, no fractional-scale seams, one pixel walk per frame - * instead of per recomposition. + * Renders a MONO_VLSB 1bpp framebuffer once per frame into a 1:1 [ImageBitmap] and scales it up with nearest-neighbor + * filtering — crisp device pixels, no fractional-scale seams, one pixel walk per frame instead of per recomposition. */ @Composable private fun MirrorFrameImage(frame: MirrorFrame, modifier: Modifier = Modifier) { From 68ae85f1d74b4dc0611c007f027d1f9e9b887b9e Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 13:02:02 -0500 Subject: [PATCH 06/34] feat(debug): color-accurate mirror via DisplayPalette DisplayMirrorManager reassembles FromRadio.display_palette chunks (signature-keyed, defaults captured on the offset-0 chunk) into a MirrorPalette; frames carry palette_signature and the renderer resolves each pixel through the region table (last overlapping region wins, matching firmware precedence) with RGB565 conversion, falling back to monochrome when the referenced palette hasn't arrived. Renderer split into MirrorFrameRenderer.kt. --- .../data/manager/DisplayMirrorManagerImpl.kt | 49 ++++++- .../manager/FromRadioPacketHandlerImpl.kt | 7 + .../manager/DisplayMirrorManagerImplTest.kt | 45 +++++++ .../core/repository/DisplayMirrorManager.kt | 28 +++- .../settings/debugging/DisplayMirror.kt | 69 ++-------- .../settings/debugging/MirrorFrameRenderer.kt | 123 ++++++++++++++++++ 6 files changed, 262 insertions(+), 59 deletions(-) create mode 100644 feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt index edb51a8da9e..e100865cb29 100644 --- a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt @@ -22,7 +22,9 @@ import kotlinx.coroutines.flow.asStateFlow import org.koin.core.annotation.Single import org.meshtastic.core.repository.DisplayMirrorManager import org.meshtastic.core.repository.MirrorFrame +import org.meshtastic.core.repository.MirrorPalette import org.meshtastic.proto.DisplayFrame +import org.meshtastic.proto.DisplayPalette /** * Display frame reassembly state machine. @@ -37,10 +39,19 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { private val _frame = MutableStateFlow(null) override val frame = _frame.asStateFlow() + private val _palette = MutableStateFlow(null) + override val palette = _palette.asStateFlow() + private var buffer: ByteArray? = null private var frameId = 0 private var received = 0 + private var paletteRegions = mutableListOf() + private var paletteSignature = 0 + private var paletteReceived = 0 + private var paletteDefaultOn = 0 + private var paletteDefaultOff = 0 + override fun handleIncomingFrame(chunk: DisplayFrame) { val data = chunk.data_.toByteArray() val total = chunk.total_size @@ -64,11 +75,47 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { received += data.size if (received == total) { - _frame.value = MirrorFrame(width = chunk.width, height = chunk.height, frameId = frameId, pixels = buf) + _frame.value = + MirrorFrame( + width = chunk.width, + height = chunk.height, + frameId = frameId, + paletteSignature = chunk.palette_signature, + pixels = buf, + ) buffer = null } } + override fun handleIncomingPalette(chunk: DisplayPalette) { + if (chunk.region_offset == 0) { + paletteRegions = mutableListOf() + paletteSignature = chunk.signature + paletteReceived = 0 + // Defaults are authoritative on the first chunk; later chunks may omit them. + paletteDefaultOn = chunk.default_on_color + paletteDefaultOff = chunk.default_off_color + } + if (chunk.signature != paletteSignature || chunk.region_offset != paletteReceived) { + Logger.w { "DisplayMirror: bad palette chunk ${chunk.signature}@${chunk.region_offset}" } + paletteRegions.clear() + paletteReceived = -1 // poison until the next offset-0 chunk restarts + return + } + paletteRegions.addAll(chunk.regions) + paletteReceived += chunk.regions.size + + if (paletteReceived >= chunk.region_total) { + _palette.value = + MirrorPalette( + signature = chunk.signature, + defaultOnColor = paletteDefaultOn, + defaultOffColor = paletteDefaultOff, + regions = paletteRegions.toList(), + ) + } + } + /** * Format must be MONO_VLSB and width/height must describe exactly total_size bytes; a zero or lying dimension would * otherwise reach the renderer (aspectRatio requires > 0). diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt index 799b8e4dfff..2ce393781a0 100644 --- a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImpl.kt @@ -46,6 +46,7 @@ import org.meshtastic.core.resources.key_verification_title import org.meshtastic.core.resources.low_entropy_key_title import org.meshtastic.proto.ClientNotification import org.meshtastic.proto.DisplayFrame +import org.meshtastic.proto.DisplayPalette import org.meshtastic.proto.FromRadio /** Implementation of [FromRadioPacketHandler] that dispatches [FromRadio] variants to specialized handlers. */ @@ -87,6 +88,7 @@ class FromRadioPacketHandlerImpl( val xmodemPacket = proto.xmodemPacket val lockdownStatus = proto.lockdown_status val displayFrame = proto.display_frame + val displayPalette = proto.display_palette when { myInfo != null -> configFlowManager.value.handleMyInfo(myInfo, session) @@ -136,6 +138,8 @@ class FromRadioPacketHandlerImpl( displayFrame != null -> handleDisplayFrame(displayFrame, session) + displayPalette != null -> handleDisplayPalette(displayPalette, session) + lockdownStatus != null -> runIfSessionActive(session, "lockdown status") { lockdownCoordinator.handleLockdownStatus(lockdownStatus) @@ -155,6 +159,9 @@ class FromRadioPacketHandlerImpl( private fun handleDisplayFrame(frame: DisplayFrame, session: RadioSessionContext) = runIfSessionActive(session, "display frame") { displayMirrorManager.value.handleIncomingFrame(frame) } + private fun handleDisplayPalette(palette: DisplayPalette, session: RadioSessionContext) = + runIfSessionActive(session, "display palette") { displayMirrorManager.value.handleIncomingPalette(palette) } + private fun runIfSessionActive(session: RadioSessionContext, operation: String, block: () -> Unit) { if (!radioInterfaceService.runIfSessionActive(session, block)) { Logger.d { "Discarding $operation from stale transport session" } diff --git a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt index d50da08a2f3..1af13b31cc8 100644 --- a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt +++ b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt @@ -18,6 +18,7 @@ package org.meshtastic.core.data.manager import okio.ByteString.Companion.toByteString import org.meshtastic.proto.DisplayFrame +import org.meshtastic.proto.DisplayPalette import kotlin.test.Test import kotlin.test.assertContentEquals import kotlin.test.assertEquals @@ -126,6 +127,50 @@ class DisplayMirrorManagerImplTest { assertNull(manager.frame.value) } + @Test + fun `reassembles a two-chunk palette and tags frames with its signature`() { + val region = + DisplayPalette.ColorRegion(x = 0, y = 0, width = 128, height = 16, on_color = 0xF800, off_color = 0) + manager.handleIncomingPalette( + DisplayPalette( + signature = 42, + default_on_color = 0xFFFF, + default_off_color = 0, + region_offset = 0, + region_total = 3, + regions = listOf(region, region), + ), + ) + assertNull(manager.palette.value) + + manager.handleIncomingPalette( + DisplayPalette(signature = 42, region_offset = 2, region_total = 3, regions = listOf(region)), + ) + + val palette = manager.palette.value!! + assertEquals(42, palette.signature) + assertEquals(0xFFFF, palette.defaultOnColor) + assertEquals(3, palette.regions.size) + } + + @Test + fun `out-of-sequence palette chunk is dropped until a restart`() { + val region = DisplayPalette.ColorRegion(x = 0, y = 0, width = 8, height = 8) + manager.handleIncomingPalette( + DisplayPalette(signature = 7, region_offset = 0, region_total = 2, regions = listOf(region)), + ) + manager.handleIncomingPalette( + DisplayPalette(signature = 7, region_offset = 5, region_total = 2, regions = listOf(region)), + ) + assertNull(manager.palette.value) + + // A fresh offset-0 chunk recovers + manager.handleIncomingPalette( + DisplayPalette(signature = 8, region_offset = 0, region_total = 1, regions = listOf(region)), + ) + assertEquals(8, manager.palette.value?.signature) + } + private companion object { const val WIDTH = 128 const val HEIGHT = 64 diff --git a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt index 3cd303118d4..058802d9d58 100644 --- a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt +++ b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt @@ -18,6 +18,7 @@ package org.meshtastic.core.repository import kotlinx.coroutines.flow.StateFlow import org.meshtastic.proto.DisplayFrame +import org.meshtastic.proto.DisplayPalette /** * Reassembles the chunked [DisplayFrame] stream from the connected device into complete framebuffer snapshots. @@ -30,27 +31,52 @@ interface DisplayMirrorManager { /** Latest completely reassembled frame, or null before the first one arrives. */ val frame: StateFlow + /** Latest completely reassembled color palette, or null when the device renders monochrome. */ + val palette: StateFlow + /** Routes an incoming display frame chunk from the device to the reassembly state machine. */ fun handleIncomingFrame(chunk: DisplayFrame) + + /** Routes an incoming palette chunk from the device to the reassembly state machine. */ + fun handleIncomingPalette(chunk: DisplayPalette) } +/** + * A complete color palette for [MirrorFrame]s whose `paletteSignature` matches [signature]: per-region RGB565 on/off + * colors (later regions override earlier ones where they overlap) plus defaults for pixels outside all regions. + */ +data class MirrorPalette( + val signature: Int, + val defaultOnColor: Int, + val defaultOffColor: Int, + val regions: List, +) + /** * One complete device framebuffer snapshot. * * [pixels] is MONO_VLSB: 1 bit per pixel in vertical LSB-first pages — byte index = `x + (y / 8) * width`, bit index = * `y % 8`. */ -data class MirrorFrame(val width: Int, val height: Int, val frameId: Int, val pixels: ByteArray) { +data class MirrorFrame( + val width: Int, + val height: Int, + val frameId: Int, + val paletteSignature: Int, + val pixels: ByteArray, +) { override fun equals(other: Any?): Boolean = other is MirrorFrame && other.width == width && other.height == height && other.frameId == frameId && + other.paletteSignature == paletteSignature && other.pixels.contentEquals(pixels) override fun hashCode(): Int { var result = width result = 31 * result + height result = 31 * result + frameId + result = 31 * result + paletteSignature result = 31 * result + pixels.contentHashCode() return result } diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index 2f603685b81..58d4b19d98c 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -17,7 +17,6 @@ package org.meshtastic.feature.settings.debugging import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.combinedClickable @@ -28,9 +27,7 @@ import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.widthIn @@ -55,12 +52,7 @@ import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.geometry.Size -import androidx.compose.ui.graphics.Canvas import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.FilterQuality -import androidx.compose.ui.graphics.ImageBitmap -import androidx.compose.ui.graphics.drawscope.CanvasDrawScope import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.input.key.Key import androidx.compose.ui.input.key.KeyEventType @@ -68,8 +60,6 @@ import androidx.compose.ui.input.key.key import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.type import androidx.compose.ui.input.pointer.pointerInput -import androidx.compose.ui.unit.Density -import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.lifecycle.ViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -91,6 +81,7 @@ import org.meshtastic.core.repository.AdminController import org.meshtastic.core.repository.ConnectionStateProvider import org.meshtastic.core.repository.DisplayMirrorManager import org.meshtastic.core.repository.MirrorFrame +import org.meshtastic.core.repository.MirrorPalette import org.meshtastic.core.repository.NodeRepository import org.meshtastic.core.ui.icon.KeyboardArrowDown import org.meshtastic.core.ui.icon.KeyboardArrowLeft @@ -99,9 +90,6 @@ import org.meshtastic.core.ui.icon.KeyboardArrowUp import org.meshtastic.core.ui.icon.MeshtasticIcons import org.meshtastic.proto.DisplayInfo -// 4x scale for the common 128px-wide OLED; caps the image so the D-pad stays above the fold on desktop. -private val MAX_CANVAS_WIDTH = 512.dp - // M3 comfortable target for remote-control keys (48dp minimum + breathing room). private val DPAD_KEY_SIZE = 56.dp private val DPAD_GAP = 8.dp @@ -113,9 +101,6 @@ private const val REPEAT_INTERVAL_MS = 100L // Swipes on the mirror shorter than this are ignored as accidental. private val SWIPE_THRESHOLD = 48.dp -// MONO_VLSB packs 8 vertically adjacent pixels per byte (one "page" row). -private const val PIXELS_PER_PAGE = 8 - // Firmware input_broker_event codes (src/input/InputBroker.h). private const val INPUT_SELECT = 10 private const val INPUT_SELECT_LONG = 11 @@ -135,6 +120,8 @@ class DisplayMirrorViewModel( val frame: StateFlow = displayMirrorManager.frame + val palette: StateFlow = displayMirrorManager.palette + val connected: StateFlow = connectionStateProvider.connectionState .map { it is ConnectionState.Connected } @@ -174,6 +161,7 @@ class DisplayMirrorViewModel( @Composable fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirrorViewModel = koinViewModel()) { val frame by viewModel.frame.collectAsStateWithLifecycle() + val palette by viewModel.palette.collectAsStateWithLifecycle() val mirroring by viewModel.mirroring.collectAsStateWithLifecycle() val connected by viewModel.connected.collectAsStateWithLifecycle() val displayInfo by viewModel.displayInfo.collectAsStateWithLifecycle() @@ -208,7 +196,7 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror when { !connected -> Text(text = "Not connected to a device.") - currentFrame != null -> MirrorSurface(currentFrame, onEvent = viewModel::sendKey) + currentFrame != null -> MirrorSurface(currentFrame, palette, onEvent = viewModel::sendKey) else -> Text(text = "No frame received yet — enable mirroring or tap Refresh.") } @@ -221,7 +209,12 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror * Esc/Backspace = Back), swipe in a cardinal direction for a single direction event. */ @Composable -private fun MirrorSurface(frame: MirrorFrame, onEvent: (Int) -> Unit, modifier: Modifier = Modifier) { +private fun MirrorSurface( + frame: MirrorFrame, + palette: MirrorPalette?, + onEvent: (Int) -> Unit, + modifier: Modifier = Modifier, +) { val focusRequester = remember { FocusRequester() } var focused by remember { mutableStateOf(false) } val focusColor = MaterialTheme.colorScheme.primary @@ -247,7 +240,7 @@ private fun MirrorSurface(frame: MirrorFrame, onEvent: (Int) -> Unit, modifier: .swipeToDirection(onEvent) .border(width = 2.dp, color = if (focused) focusColor else Color.Transparent), ) { - MirrorFrameImage(frame) + MirrorFrameImage(frame, palette) } Text( text = @@ -419,41 +412,3 @@ private fun BackKey(enabled: Boolean, onBack: () -> Unit) { @Composable private fun contentColorFor(enabled: Boolean): Color = if (enabled) MaterialTheme.colorScheme.onSecondaryContainer else MaterialTheme.colorScheme.onSurfaceVariant - -/** - * Renders a MONO_VLSB 1bpp framebuffer once per frame into a 1:1 [ImageBitmap] and scales it up with nearest-neighbor - * filtering — crisp device pixels, no fractional-scale seams, one pixel walk per frame instead of per recomposition. - */ -@Composable -private fun MirrorFrameImage(frame: MirrorFrame, modifier: Modifier = Modifier) { - val bitmap = remember(frame) { renderFrame(frame) } - Image( - bitmap = bitmap, - contentDescription = "Device screen", - modifier = - modifier - .widthIn(max = MAX_CANVAS_WIDTH) - .fillMaxWidth() - .aspectRatio(frame.width.toFloat() / frame.height.toFloat()), - filterQuality = FilterQuality.None, - ) -} - -private fun renderFrame(frame: MirrorFrame): ImageBitmap { - val bitmap = ImageBitmap(frame.width, frame.height) - val size = Size(frame.width.toFloat(), frame.height.toFloat()) - CanvasDrawScope().draw(Density(1f), LayoutDirection.Ltr, Canvas(bitmap), size) { - drawRect(color = Color.Black) - val pixel = Size(1f, 1f) - for (y in 0 until frame.height) { - val page = (y / PIXELS_PER_PAGE) * frame.width - val bit = 1 shl (y % PIXELS_PER_PAGE) - for (x in 0 until frame.width) { - if (frame.pixels[page + x].toInt() and bit != 0) { - drawRect(color = Color.White, topLeft = Offset(x.toFloat(), y.toFloat()), size = pixel) - } - } - } - } - return bitmap -} diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt new file mode 100644 index 00000000000..7bff3ef7182 --- /dev/null +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.settings.debugging + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.widthIn +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Canvas +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.FilterQuality +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.drawscope.CanvasDrawScope +import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.LayoutDirection +import androidx.compose.ui.unit.dp +import org.meshtastic.core.repository.MirrorFrame +import org.meshtastic.core.repository.MirrorPalette + +// 4x scale for the common 128px-wide OLED; caps the image so the D-pad stays above the fold on desktop. +private val MAX_CANVAS_WIDTH = 512.dp + +// MONO_VLSB packs 8 vertically adjacent pixels per byte (one "page" row). +private const val PIXELS_PER_PAGE = 8 + +/** + * Renders a MONO_VLSB 1bpp framebuffer once per frame into a 1:1 [ImageBitmap] and scales it up with nearest-neighbor + * filtering — crisp device pixels, no fractional-scale seams, one pixel walk per frame instead of per recomposition. + */ +@Composable +internal fun MirrorFrameImage(frame: MirrorFrame, palette: MirrorPalette?, modifier: Modifier = Modifier) { + // A palette only applies when the frame references it; otherwise render monochrome. + val activePalette = palette?.takeIf { frame.paletteSignature != 0 && it.signature == frame.paletteSignature } + val bitmap = remember(frame, activePalette) { renderFrame(frame, activePalette) } + Image( + bitmap = bitmap, + contentDescription = "Device screen", + modifier = + modifier + .widthIn(max = MAX_CANVAS_WIDTH) + .fillMaxWidth() + .aspectRatio(frame.width.toFloat() / frame.height.toFloat()), + filterQuality = FilterQuality.None, + ) +} + +private class ResolvedRegion( + val left: Int, + val top: Int, + val right: Int, + val bottom: Int, + val on: Color, + val off: Color, +) + +private fun rgb565ToColor(v: Int): Color = Color( + red = ((v ushr 11) and 0x1F) * 255 / 31, + green = ((v ushr 5) and 0x3F) * 255 / 63, + blue = (v and 0x1F) * 255 / 31, +) + +private fun renderFrame(frame: MirrorFrame, palette: MirrorPalette?): ImageBitmap { + val defaultOn = palette?.let { rgb565ToColor(it.defaultOnColor) } ?: Color.White + val defaultOff = palette?.let { rgb565ToColor(it.defaultOffColor) } ?: Color.Black + val regions = + palette?.regions.orEmpty().map { + ResolvedRegion( + left = it.x, + top = it.y, + right = it.x + it.width, + bottom = it.y + it.height, + on = rgb565ToColor(it.on_color), + off = rgb565ToColor(it.off_color), + ) + } + + val bitmap = ImageBitmap(frame.width, frame.height) + val size = Size(frame.width.toFloat(), frame.height.toFloat()) + CanvasDrawScope().draw(Density(1f), LayoutDirection.Ltr, Canvas(bitmap), size) { + drawRect(color = defaultOff) + val pixel = Size(1f, 1f) + for (y in 0 until frame.height) { + val page = (y / PIXELS_PER_PAGE) * frame.width + val bit = 1 shl (y % PIXELS_PER_PAGE) + // Cull to the regions overlapping this row; the last matching region wins, + // matching the firmware's precedence. + val rowRegions = regions.filter { y >= it.top && y < it.bottom } + for (x in 0 until frame.width) { + val set = frame.pixels[page + x].toInt() and bit != 0 + val region = rowRegions.lastOrNull { x >= it.left && x < it.right } + val color = + when { + region != null -> if (set) region.on else region.off + set -> defaultOn + else -> defaultOff + } + if (color != defaultOff) { + drawRect(color = color, topLeft = Offset(x.toFloat(), y.toFloat()), size = pixel) + } + } + } + } + return bitmap +} From cff81edfe8ac3cf980899b9e1332a1cf0ff5a8e5 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 13:19:56 -0500 Subject: [PATCH 07/34] feat(debug): adaptive mirror layout and keyboard-capture exit Controls sit beside the mirror when the content width allows (>=760dp, BoxWithConstraints) and stack below it otherwise; tapping the mirror now toggles keyboard capture instead of only acquiring it, with the hint text naming the way out. --- .../settings/debugging/DisplayMirror.kt | 60 +++++++++++++++++-- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index 58d4b19d98c..e715d32aa0b 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -25,9 +25,11 @@ import androidx.compose.foundation.gestures.detectDragGestures import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.widthIn @@ -44,6 +46,7 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -60,6 +63,7 @@ import androidx.compose.ui.input.key.key import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.type import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.unit.dp import androidx.lifecycle.ViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -101,6 +105,9 @@ private const val REPEAT_INTERVAL_MS = 100L // Swipes on the mirror shorter than this are ignored as accidental. private val SWIPE_THRESHOLD = 48.dp +// Mirror + D-pad fit comfortably side by side above this content width. +private val SIDE_BY_SIDE_MIN_WIDTH = 760.dp + // Firmware input_broker_event codes (src/input/InputBroker.h). private const val INPUT_SELECT = 10 private const val INPUT_SELECT_LONG = 11 @@ -195,12 +202,44 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror } when { - !connected -> Text(text = "Not connected to a device.") - currentFrame != null -> MirrorSurface(currentFrame, palette, onEvent = viewModel::sendKey) - else -> Text(text = "No frame received yet — enable mirroring or tap Refresh.") + !connected -> { + Text(text = "Not connected to a device.") + DpadCluster(enabled = false, onEvent = viewModel::sendKey) + } + + currentFrame == null -> { + Text(text = "No frame received yet — enable mirroring or tap Refresh.") + DpadCluster(enabled = connected, onEvent = viewModel::sendKey) + } + + else -> MirrorWithControls(currentFrame, palette, enabled = connected, onEvent = viewModel::sendKey) } + } +} - DpadCluster(enabled = connected, onEvent = viewModel::sendKey) +/** Controls sit beside the mirror when the window is wide enough, below it otherwise. */ +@Composable +private fun MirrorWithControls(frame: MirrorFrame, palette: MirrorPalette?, enabled: Boolean, onEvent: (Int) -> Unit) { + BoxWithConstraints(modifier = Modifier.fillMaxWidth()) { + if (maxWidth >= SIDE_BY_SIDE_MIN_WIDTH) { + Row( + horizontalArrangement = Arrangement.spacedBy(24.dp, Alignment.CenterHorizontally), + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxWidth(), + ) { + MirrorSurface(frame, palette, onEvent = onEvent, modifier = Modifier.weight(1f, fill = false)) + DpadCluster(enabled = enabled, onEvent = onEvent) + } + } else { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(12.dp), + modifier = Modifier.fillMaxWidth(), + ) { + MirrorSurface(frame, palette, onEvent = onEvent) + DpadCluster(enabled = enabled, onEvent = onEvent) + } + } } } @@ -216,7 +255,9 @@ private fun MirrorSurface( modifier: Modifier = Modifier, ) { val focusRequester = remember { FocusRequester() } + val focusManager = LocalFocusManager.current var focused by remember { mutableStateOf(false) } + val isFocused by rememberUpdatedState(focused) val focusColor = MaterialTheme.colorScheme.primary Column( @@ -236,7 +277,14 @@ private fun MirrorSurface( true } ?: false } - .pointerInput(Unit) { detectTapGestures(onTap = { focusRequester.requestFocus() }) } + .pointerInput(Unit) { + detectTapGestures( + onTap = { + // Tap toggles keyboard control so there is always a way out of capture. + if (isFocused) focusManager.clearFocus() else focusRequester.requestFocus() + }, + ) + } .swipeToDirection(onEvent) .border(width = 2.dp, color = if (focused) focusColor else Color.Transparent), ) { @@ -245,7 +293,7 @@ private fun MirrorSurface( Text( text = if (focused) { - "Keyboard active: arrows navigate · Enter selects · Esc goes back" + "Keyboard active: arrows · Enter = OK · Esc = back — click the screen again to exit" } else { "Click the screen for keyboard control, or swipe it to navigate" }, From 107631397a3fbfd05b5ce42e607a605734825cf4 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 14:01:37 -0500 Subject: [PATCH 08/34] refactor(debug): pre-PR review fixes for the mirror Circular D-pad ring replaces the cross cluster (wedge hit-testing with a radial dead band, hold-to-repeat, per-wedge semantics, haptics), keyboard capture becomes an explicit chip with tap-to-toggle, and taps on touch devices forward real panel coordinates (long-press = SELECT, matching the physical touch driver). Manager gains reset() (wired to ViewModel creation and disconnect), a palette region cap, and first-chunk geometry pinning; renderer uses bit-replicated RGB565 and run-length row drawing with the pixel resolver extracted pure and tested; KeyUp of captured keys is consumed; ViewModel moved to its own file; all strings localized; the stray .bak test file is gone. --- .skills/compose-ui/strings-index.txt | 19 + .../data/manager/DisplayMirrorManagerImpl.kt | 50 ++- .../manager/DisplayMirrorManagerImplTest.kt | 33 ++ .../DisplayMirrorManagerImplTest.kt.bak | 134 ------- .../manager/FromRadioPacketHandlerImplTest.kt | 12 + .../core/repository/DisplayMirrorManager.kt | 6 + .../composeResources/values/strings.xml | 19 + .../feature/settings/debugging/Debug.kt | 4 +- .../settings/debugging/DisplayMirror.kt | 347 ++++++++---------- .../debugging/DisplayMirrorViewModel.kt | 95 +++++ .../feature/settings/debugging/DpadRing.kt | 276 ++++++++++++++ .../settings/debugging/MirrorFrameRenderer.kt | 99 +++-- .../debugging/MirrorColorResolverTest.kt | 87 +++++ 13 files changed, 809 insertions(+), 372 deletions(-) delete mode 100644 core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt.bak create mode 100644 feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorViewModel.kt create mode 100644 feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DpadRing.kt create mode 100644 feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/debugging/MirrorColorResolverTest.kt diff --git a/.skills/compose-ui/strings-index.txt b/.skills/compose-ui/strings-index.txt index ed13dd5a814..c14d26f9972 100644 --- a/.skills/compose-ui/strings-index.txt +++ b/.skills/compose-ui/strings-index.txt @@ -341,6 +341,7 @@ debug_search_prev debug_store_logs_summary debug_store_logs_title debug_tab_app_logs +debug_tab_mirror debug_tab_packets deep_link_connect_message deep_link_connect_title @@ -1177,6 +1178,24 @@ metric_channel_label micrograms_per_cubic_meter min minimum_wake_time_seconds +### MIRROR ### +mirror_active +mirror_back +mirror_device_screen +mirror_eink_hint +mirror_frame_info +mirror_hint_keyboard_active +mirror_hint_tap_keyboard +mirror_hint_tap_touch +mirror_key_down +mirror_key_left +mirror_key_ok +mirror_key_right +mirror_key_up +mirror_keyboard +mirror_no_frame +mirror_not_connected +mirror_off modem_preset module_settings modules_already_unlocked diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt index e100865cb29..61be808a117 100644 --- a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt @@ -31,7 +31,8 @@ import org.meshtastic.proto.DisplayPalette * * Chunks of one frame arrive contiguously and in offset order (FromRadio is a reliable ordered stream), so a chunk with * a new `frame_id` or `offset == 0` starts a new frame and an out-of-sequence chunk drops the partial frame. Calls are - * serialized by the single receive-loop collector in MeshServiceOrchestrator (recreated per session). + * serialized by the single receive-loop collector in MeshServiceOrchestrator; this singleton's state outlives a + * session, so [reset] must be called when one ends. */ @Single class DisplayMirrorManagerImpl : DisplayMirrorManager { @@ -45,6 +46,8 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { private var buffer: ByteArray? = null private var frameId = 0 private var received = 0 + private var frameWidth = 0 + private var frameHeight = 0 private var paletteRegions = mutableListOf() private var paletteSignature = 0 @@ -62,10 +65,13 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { buffer = ByteArray(total) frameId = chunk.frame_id received = 0 + // Geometry is authoritative on the first chunk; a later chunk may not transpose it. + frameWidth = chunk.width + frameHeight = chunk.height } val buf = buffer - if (buf == null || chunk.frame_id != frameId || chunk.offset != received || buf.size != total) { + if (buf == null || !matchesCurrentFrame(chunk, buf.size)) { Logger.w { "DisplayMirror: bad chunk ${chunk.frame_id}@${chunk.offset}, expected $frameId@$received" } buffer = null return @@ -77,8 +83,8 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { if (received == total) { _frame.value = MirrorFrame( - width = chunk.width, - height = chunk.height, + width = frameWidth, + height = frameHeight, frameId = frameId, paletteSignature = chunk.palette_signature, pixels = buf, @@ -96,8 +102,7 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { paletteDefaultOn = chunk.default_on_color paletteDefaultOff = chunk.default_off_color } - if (chunk.signature != paletteSignature || chunk.region_offset != paletteReceived) { - Logger.w { "DisplayMirror: bad palette chunk ${chunk.signature}@${chunk.region_offset}" } + if (!isAcceptablePaletteChunk(chunk)) { paletteRegions.clear() paletteReceived = -1 // poison until the next offset-0 chunk restarts return @@ -116,6 +121,26 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { } } + private fun matchesCurrentFrame(chunk: DisplayFrame, bufSize: Int): Boolean { + val inSequence = chunk.frame_id == frameId && chunk.offset == received && bufSize == chunk.total_size + val geometryStable = chunk.width == frameWidth && chunk.height == frameHeight + return inSequence && geometryStable + } + + /** Sequenced continuation of the current palette, within the region cap; logs and rejects anything else. */ + private fun isAcceptablePaletteChunk(chunk: DisplayPalette): Boolean { + val withinCap = + chunk.region_total <= MAX_PALETTE_REGIONS && + paletteReceived >= 0 && + paletteReceived + chunk.regions.size <= MAX_PALETTE_REGIONS + val inSequence = chunk.signature == paletteSignature && chunk.region_offset == paletteReceived + val acceptable = withinCap && inSequence + if (!acceptable) { + Logger.w { "DisplayMirror: bad palette chunk ${chunk.signature}@${chunk.region_offset}" } + } + return acceptable + } + /** * Format must be MONO_VLSB and width/height must describe exactly total_size bytes; a zero or lying dimension would * otherwise reach the renderer (aspectRatio requires > 0). @@ -139,10 +164,23 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { return acceptable } + override fun reset() { + buffer = null + received = 0 + paletteRegions = mutableListOf() + paletteReceived = 0 + paletteSignature = 0 + _frame.value = null + _palette.value = null + } + private companion object { // Generous sanity cap: 320x240 at 1bpp is 9600 bytes. const val MAX_FRAME_BYTES = 16384 + // The firmware's region table caps at 48; anything past this is a bug or an attack. + const val MAX_PALETTE_REGIONS = 512 + // MONO_VLSB packs 8 vertically adjacent pixels per byte (one "page" row). const val PIXELS_PER_PAGE = 8 } diff --git a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt index 1af13b31cc8..652b89a4424 100644 --- a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt +++ b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt @@ -171,6 +171,39 @@ class DisplayMirrorManagerImplTest { assertEquals(8, manager.palette.value?.signature) } + @Test + fun `reset clears frames palettes and partial state`() { + manager.handleIncomingFrame(chunk(width = 64, height = 32, total = 256, data = bytes(256, 7))) + manager.handleIncomingPalette( + DisplayPalette(signature = 9, region_offset = 0, region_total = 0, regions = emptyList()), + ) + + manager.reset() + + assertNull(manager.frame.value) + assertNull(manager.palette.value) + } + + @Test + fun `rejects palettes past the region cap`() { + val region = DisplayPalette.ColorRegion(x = 0, y = 0, width = 8, height = 8) + manager.handleIncomingPalette( + DisplayPalette(signature = 3, region_offset = 0, region_total = 100_000, regions = listOf(region)), + ) + + assertNull(manager.palette.value) + } + + @Test + fun `chunk that changes geometry mid-frame is dropped`() { + manager.handleIncomingFrame(chunk(offset = 0, data = bytes(384, 1))) + // Transposed geometry with the same total size must not complete the frame + manager.handleIncomingFrame(chunk(width = 64, height = 128, offset = 384, data = bytes(384, 2))) + manager.handleIncomingFrame(chunk(offset = 768, data = bytes(256, 3))) + + assertNull(manager.frame.value) + } + private companion object { const val WIDTH = 128 const val HEIGHT = 64 diff --git a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt.bak b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt.bak deleted file mode 100644 index f3fe7f4a66d..00000000000 --- a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt.bak +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2026 Meshtastic LLC - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.meshtastic.core.data.manager - -import okio.ByteString.Companion.toByteString -import org.meshtastic.proto.DisplayFrame -import kotlin.test.Test -import kotlin.test.assertContentEquals -import kotlin.test.assertEquals -import kotlin.test.assertNull - -class DisplayMirrorManagerImplTest { - - private val manager = DisplayMirrorManagerImpl() - - // 128x64 MONO_VLSB frame = 1024 bytes; the firmware chunks at 384. - private fun chunk( - frameId: Int = 1, - offset: Int = 0, - data: ByteArray, - total: Int = FRAME_BYTES, - width: Int = WIDTH, - height: Int = HEIGHT, - format: DisplayFrame.Format = DisplayFrame.Format.MONO_VLSB, - ) = DisplayFrame( - width = width, - height = height, - format = format, - frame_id = frameId, - offset = offset, - total_size = total, - data_ = data.toByteString(), - ) - - private fun bytes(size: Int, fill: Int) = ByteArray(size) { fill.toByte() } - - @Test - fun `reassembles a three-chunk frame in order`() { - manager.handleIncomingFrame(chunk(offset = 0, data = bytes(384, 1))) - manager.handleIncomingFrame(chunk(offset = 384, data = bytes(384, 2))) - assertNull(manager.frame.value) - - manager.handleIncomingFrame(chunk(offset = 768, data = bytes(256, 3))) - - val frame = manager.frame.value!! - assertEquals(WIDTH, frame.width) - assertEquals(HEIGHT, frame.height) - assertEquals(1, frame.frameId) - assertContentEquals(bytes(384, 1) + bytes(384, 2) + bytes(256, 3), frame.pixels) - } - - @Test - fun `single-chunk frame completes immediately`() { - // 64x32 = 256 bytes fits one chunk - manager.handleIncomingFrame(chunk(width = 64, height = 32, total = 256, data = bytes(256, 7))) - - assertEquals(256, manager.frame.value?.pixels?.size) - } - - @Test - fun `out-of-sequence chunk drops the partial frame`() { - manager.handleIncomingFrame(chunk(offset = 0, data = bytes(384, 1))) - manager.handleIncomingFrame(chunk(offset = 768, data = bytes(256, 3))) // gap: 384 missing - - manager.handleIncomingFrame(chunk(offset = 384, data = bytes(384, 2))) // too late - assertNull(manager.frame.value) - } - - @Test - fun `offset zero restarts mid-frame (device reboot or torn capture)`() { - manager.handleIncomingFrame(chunk(frameId = 5, offset = 0, data = bytes(384, 1))) - - // New frame id starting over at offset 0 wins - manager.handleIncomingFrame(chunk(frameId = 6, offset = 0, data = bytes(384, 4))) - manager.handleIncomingFrame(chunk(frameId = 6, offset = 384, data = bytes(384, 5))) - manager.handleIncomingFrame(chunk(frameId = 6, offset = 768, data = bytes(256, 6))) - - assertEquals(6, manager.frame.value?.frameId) - } - - @Test - fun `frame id change mid-frame without offset zero is dropped`() { - manager.handleIncomingFrame(chunk(frameId = 1, offset = 0, data = bytes(384, 1))) - manager.handleIncomingFrame(chunk(frameId = 2, offset = 384, data = bytes(384, 2))) - - assertNull(manager.frame.value) - } - - @Test - fun `rejects geometry that does not match total size`() { - manager.handleIncomingFrame( - chunk(width = 64, height = 64, total = 256, data = bytes(256, 1)), - ) // 64x64 needs 512 - manager.handleIncomingFrame(chunk(width = 0, height = 64, total = 0, data = ByteArray(0))) - manager.handleIncomingFrame(chunk(width = 128, height = 0, total = 0, data = ByteArray(0))) - - assertNull(manager.frame.value) - } - - @Test - fun `rejects unsupported format`() { - manager.handleIncomingFrame( - chunk( - width = 64, - height = 32, - total = 256, - data = bytes(256, 1), - format = DisplayFrame.Format.FORMAT_UNSPECIFIED, - ), - ) - - assertNull(manager.frame.value) - } - - private companion object { - const val WIDTH = 128 - const val HEIGHT = 64 - const val FRAME_BYTES = 1024 - } -} diff --git a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt index dbd196b775b..2eb779d3482 100644 --- a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt +++ b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt @@ -45,6 +45,7 @@ import org.meshtastic.proto.ClientNotification import org.meshtastic.proto.Config import org.meshtastic.proto.DeviceMetadata import org.meshtastic.proto.DisplayFrame +import org.meshtastic.proto.DisplayPalette import org.meshtastic.proto.FromRadio import org.meshtastic.proto.LoRaRegionPresetMap import org.meshtastic.proto.LockdownStatus @@ -225,11 +226,13 @@ class FromRadioPacketHandlerImplTest { handle(FromRadio.Builder().also { wb -> wb.xmodemPacket = xmodemPacket }.build()) handle(FromRadio.Builder().also { wb -> wb.lockdown_status = lockdownStatus }.build()) handle(FromRadio(display_frame = DisplayFrame(width = 128, height = 64))) + handle(FromRadio(display_palette = DisplayPalette(signature = 1))) verify(mode = VerifyMode.exactly(0)) { mqttManager.handleMqttProxyMessage(any()) } verify(mode = VerifyMode.exactly(0)) { packetHandler.handleQueueStatus(any()) } verify(mode = VerifyMode.exactly(0)) { xmodemManager.handleIncomingXModem(any()) } verify(mode = VerifyMode.exactly(0)) { displayMirrorManager.handleIncomingFrame(any()) } + verify(mode = VerifyMode.exactly(0)) { displayMirrorManager.handleIncomingPalette(any()) } assertEquals(null, lockdownCoordinator.lastStatus) } @@ -242,6 +245,15 @@ class FromRadioPacketHandlerImplTest { verify { displayMirrorManager.handleIncomingFrame(frame) } } + @Test + fun `handleFromRadio routes DISPLAY_PALETTE to displayMirrorManager`() { + val palette = DisplayPalette(signature = 7, region_total = 0) + + handle(FromRadio(display_palette = palette)) + + verify { displayMirrorManager.handleIncomingPalette(palette) } + } + @Test fun `handleFromRadio routes LOCKDOWN_STATUS to lockdownCoordinator`() { val lockdownStatus = diff --git a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt index 058802d9d58..7f075df2935 100644 --- a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt +++ b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt @@ -39,6 +39,12 @@ interface DisplayMirrorManager { /** Routes an incoming palette chunk from the device to the reassembly state machine. */ fun handleIncomingPalette(chunk: DisplayPalette) + + /** + * Clears all held state — latest frame, latest palette, and partial reassembly buffers. Call when a session ends or + * a fresh mirror UI opens, so a previous device's final screen is never shown as if live. + */ + fun reset() } /** diff --git a/core/resources/src/commonMain/composeResources/values/strings.xml b/core/resources/src/commonMain/composeResources/values/strings.xml index e0cb031919b..a315669226b 100644 --- a/core/resources/src/commonMain/composeResources/values/strings.xml +++ b/core/resources/src/commonMain/composeResources/values/strings.xml @@ -371,6 +371,7 @@ Disable to skip writing mesh logs to disk Store mesh logs App logs + Mirror Packets A link is asking this app to connect to the device at %1$s. Only continue if you trust where the link came from. Connect to this device? @@ -1219,6 +1220,24 @@ µg/m³ Min Minimum wake time + + Mirroring + Back + Device screen + E-ink display: refresh is slow — prefer one-shot Refresh over continuous mirroring. + %1$d×%2$d · frame #%3$d + Arrows · Enter = OK · Esc = back + Click the screen for keyboard control, or swipe it to navigate + Tap the screen to touch the device, or swipe to navigate + Down + Left + OK + Right + Up + Keyboard + No frame received yet — enable mirroring or tap Refresh. + Not connected to a device. + Mirror off Presets Module configuration Modules already unlocked diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/Debug.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/Debug.kt index cf581fae895..66390eeb52a 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/Debug.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/Debug.kt @@ -77,6 +77,7 @@ import org.meshtastic.core.resources.debug_panel import org.meshtastic.core.resources.debug_store_logs_summary import org.meshtastic.core.resources.debug_store_logs_title import org.meshtastic.core.resources.debug_tab_app_logs +import org.meshtastic.core.resources.debug_tab_mirror import org.meshtastic.core.resources.debug_tab_packets import org.meshtastic.core.resources.log_retention_days import org.meshtastic.core.resources.log_retention_days_quantity @@ -188,8 +189,7 @@ fun DebugScreen(onNavigateUp: () -> Unit, viewModel: DebugViewModel) { Tab( selected = selectedTab == 2, onClick = { selectedTab = 2 }, - // PoC tab; deliberately unlocalized. - text = { Text("Mirror") }, + text = { Text(stringResource(Res.string.debug_tab_mirror)) }, ) } if (selectedTab == 1) { diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index e715d32aa0b..fc57d1a7df4 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -16,7 +16,6 @@ */ package org.meshtastic.feature.settings.debugging -import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.combinedClickable @@ -32,11 +31,10 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.verticalScroll -import androidx.compose.material3.Icon +import androidx.compose.material3.FilterChip import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Switch @@ -56,7 +54,7 @@ import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color -import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.input.key.Key import androidx.compose.ui.input.key.KeyEventType import androidx.compose.ui.input.key.key @@ -64,43 +62,34 @@ import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.type import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.unit.dp -import androidx.lifecycle.ViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.lifecycle.viewModelScope -import kotlinx.coroutines.coroutineScope -import kotlinx.coroutines.delay -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.SharingStarted -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.asStateFlow -import kotlinx.coroutines.flow.map -import kotlinx.coroutines.flow.stateIn -import kotlinx.coroutines.isActive -import kotlinx.coroutines.launch +import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel -import org.koin.core.annotation.KoinViewModel -import org.meshtastic.core.model.ConnectionState -import org.meshtastic.core.repository.AdminController -import org.meshtastic.core.repository.ConnectionStateProvider -import org.meshtastic.core.repository.DisplayMirrorManager import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.core.repository.MirrorPalette -import org.meshtastic.core.repository.NodeRepository -import org.meshtastic.core.ui.icon.KeyboardArrowDown -import org.meshtastic.core.ui.icon.KeyboardArrowLeft -import org.meshtastic.core.ui.icon.KeyboardArrowRight -import org.meshtastic.core.ui.icon.KeyboardArrowUp -import org.meshtastic.core.ui.icon.MeshtasticIcons +import org.meshtastic.core.resources.Res +import org.meshtastic.core.resources.mirror_active +import org.meshtastic.core.resources.mirror_back +import org.meshtastic.core.resources.mirror_eink_hint +import org.meshtastic.core.resources.mirror_frame_info +import org.meshtastic.core.resources.mirror_hint_keyboard_active +import org.meshtastic.core.resources.mirror_hint_tap_keyboard +import org.meshtastic.core.resources.mirror_hint_tap_touch +import org.meshtastic.core.resources.mirror_keyboard +import org.meshtastic.core.resources.mirror_no_frame +import org.meshtastic.core.resources.mirror_not_connected +import org.meshtastic.core.resources.mirror_off +import org.meshtastic.core.resources.refresh import org.meshtastic.proto.DisplayInfo // M3 comfortable target for remote-control keys (48dp minimum + breathing room). private val DPAD_KEY_SIZE = 56.dp -private val DPAD_GAP = 8.dp // OS-typematic-style auto-repeat, slowed to what a LoRa radio UI can render. -private const val REPEAT_INITIAL_DELAY_MS = 500L -private const val REPEAT_INTERVAL_MS = 100L +internal const val REPEAT_INITIAL_DELAY_MS = 500L +internal const val REPEAT_INTERVAL_MS = 100L // Swipes on the mirror shorter than this are ignored as accidental. private val SWIPE_THRESHOLD = 48.dp @@ -108,63 +97,18 @@ private val SWIPE_THRESHOLD = 48.dp // Mirror + D-pad fit comfortably side by side above this content width. private val SIDE_BY_SIDE_MIN_WIDTH = 760.dp -// Firmware input_broker_event codes (src/input/InputBroker.h). -private const val INPUT_SELECT = 10 -private const val INPUT_SELECT_LONG = 11 -private const val INPUT_UP = 17 -private const val INPUT_DOWN = 18 -private const val INPUT_LEFT = 19 -private const val INPUT_RIGHT = 20 -private const val INPUT_BACK = 27 - -@KoinViewModel -class DisplayMirrorViewModel( - displayMirrorManager: DisplayMirrorManager, - connectionStateProvider: ConnectionStateProvider, - nodeRepository: NodeRepository, - private val adminController: AdminController, -) : ViewModel() { - - val frame: StateFlow = displayMirrorManager.frame - - val palette: StateFlow = displayMirrorManager.palette - - val connected: StateFlow = - connectionStateProvider.connectionState - .map { it is ConnectionState.Connected } - .stateIn(viewModelScope, SharingStarted.Eagerly, false) - - /** Panel description from the connect handshake; null on display-less nodes and pre-DisplayInfo firmware. */ - val displayInfo: StateFlow = - nodeRepository.ourNodeInfo.map { it?.metadata?.display }.stateIn(viewModelScope, SharingStarted.Eagerly, null) - - private val _mirroring = MutableStateFlow(false) - val mirroring: StateFlow = _mirroring.asStateFlow() - - init { - // The device forgets the (non-persisted) mirror setting on disconnect/reboot; - // mirror the reset locally so the toggle never claims a dead stream is live. - viewModelScope.launch { connected.collect { if (!it) _mirroring.value = false } } - } - - fun setMirror(enabled: Boolean) { - adminController.setDisplayMirror(enabled) - _mirroring.value = enabled - } - - fun requestFrame() = adminController.requestDisplayFrame() - - fun sendKey(eventCode: Int) = adminController.sendInputEvent(eventCode) - - /** Stops a live stream when the mirror UI goes away; safe to call redundantly. */ - fun stopMirroring() { - if (_mirroring.value) setMirror(false) - } - - override fun onCleared() = stopMirroring() -} - -/** PoC live view of the connected device's screen, with remote D-pad control. Strings are deliberately unlocalized. */ +// Firmware input_broker_event codes (src/input/InputBroker.h). USER_PRESS is +// what physical touch drivers emit for a tap, with touch coordinates attached. +internal const val INPUT_SELECT = 10 +internal const val INPUT_SELECT_LONG = 11 +internal const val INPUT_UP = 17 +internal const val INPUT_DOWN = 18 +internal const val INPUT_LEFT = 19 +internal const val INPUT_RIGHT = 20 +internal const val INPUT_BACK = 27 +internal const val INPUT_USER_PRESS = 28 + +/** Live view of the connected device's screen, with remote D-pad, keyboard, and touch control. */ @Composable fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirrorViewModel = koinViewModel()) { val frame by viewModel.frame.collectAsStateWithLifecycle() @@ -184,42 +128,66 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror val currentFrame = frame Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp)) { Switch(checked = mirroring, onCheckedChange = viewModel::setMirror, enabled = connected) - Text(text = if (mirroring) "Mirroring" else "Mirror off", style = MaterialTheme.typography.titleMedium) - OutlinedButton(onClick = viewModel::requestFrame, enabled = connected) { Text("Refresh") } + Text( + text = stringResource(if (mirroring) Res.string.mirror_active else Res.string.mirror_off), + style = MaterialTheme.typography.titleMedium, + ) + OutlinedButton(onClick = viewModel::requestFrame, enabled = connected) { + Text(stringResource(Res.string.refresh)) + } if (currentFrame != null) { Text( - text = "${currentFrame.width}x${currentFrame.height} frame #${currentFrame.frameId}", + text = + stringResource( + Res.string.mirror_frame_info, + currentFrame.width, + currentFrame.height, + currentFrame.frameId, + ), style = MaterialTheme.typography.labelSmall, ) } } if (displayInfo?.panel_class == DisplayInfo.PanelClass.EINK) { - Text( - text = "E-ink display: refresh is slow — prefer one-shot Refresh over continuous mirroring.", - style = MaterialTheme.typography.labelSmall, - ) + Text(text = stringResource(Res.string.mirror_eink_hint), style = MaterialTheme.typography.labelSmall) } when { !connected -> { - Text(text = "Not connected to a device.") + Text(text = stringResource(Res.string.mirror_not_connected)) DpadCluster(enabled = false, onEvent = viewModel::sendKey) } currentFrame == null -> { - Text(text = "No frame received yet — enable mirroring or tap Refresh.") + Text(text = stringResource(Res.string.mirror_no_frame)) DpadCluster(enabled = connected, onEvent = viewModel::sendKey) } - else -> MirrorWithControls(currentFrame, palette, enabled = connected, onEvent = viewModel::sendKey) + else -> + MirrorWithControls( + currentFrame, + palette, + enabled = connected, + hasTouch = displayInfo?.has_touch == true, + onEvent = viewModel::sendKey, + onTouch = viewModel::sendTouch, + ) } } } /** Controls sit beside the mirror when the window is wide enough, below it otherwise. */ +@Suppress("LongParameterList") @Composable -private fun MirrorWithControls(frame: MirrorFrame, palette: MirrorPalette?, enabled: Boolean, onEvent: (Int) -> Unit) { +private fun MirrorWithControls( + frame: MirrorFrame, + palette: MirrorPalette?, + enabled: Boolean, + hasTouch: Boolean, + onEvent: (Int) -> Unit, + onTouch: (Int, Int, Int) -> Unit, +) { BoxWithConstraints(modifier = Modifier.fillMaxWidth()) { if (maxWidth >= SIDE_BY_SIDE_MIN_WIDTH) { Row( @@ -227,7 +195,7 @@ private fun MirrorWithControls(frame: MirrorFrame, palette: MirrorPalette?, enab verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxWidth(), ) { - MirrorSurface(frame, palette, onEvent = onEvent, modifier = Modifier.weight(1f, fill = false)) + MirrorSurface(frame, palette, hasTouch, onEvent, onTouch, modifier = Modifier.weight(1f, fill = false)) DpadCluster(enabled = enabled, onEvent = onEvent) } } else { @@ -236,7 +204,7 @@ private fun MirrorWithControls(frame: MirrorFrame, palette: MirrorPalette?, enab verticalArrangement = Arrangement.spacedBy(12.dp), modifier = Modifier.fillMaxWidth(), ) { - MirrorSurface(frame, palette, onEvent = onEvent) + MirrorSurface(frame, palette, hasTouch, onEvent, onTouch) DpadCluster(enabled = enabled, onEvent = onEvent) } } @@ -244,22 +212,28 @@ private fun MirrorWithControls(frame: MirrorFrame, palette: MirrorPalette?, enab } /** - * The live mirror plus its direct input affordances: click to focus (keyboard capture — arrows, Enter/Space = OK, - * Esc/Backspace = Back), swipe in a cardinal direction for a single direction event. + * The live mirror plus its direct input affordances: a Keyboard chip toggles key capture (arrows, Enter/Space = OK, + * Esc/Backspace = Back), swiping in a cardinal direction sends one direction event, and on touch-capable devices + * tapping or long-pressing the image forwards real touch coordinates; elsewhere a tap toggles capture. */ @Composable +@Suppress("LongParameterList") private fun MirrorSurface( frame: MirrorFrame, palette: MirrorPalette?, + hasTouch: Boolean, onEvent: (Int) -> Unit, + onTouch: (Int, Int, Int) -> Unit, modifier: Modifier = Modifier, ) { val focusRequester = remember { FocusRequester() } val focusManager = LocalFocusManager.current var focused by remember { mutableStateOf(false) } - val isFocused by rememberUpdatedState(focused) + val currentFrame by rememberUpdatedState(frame) val focusColor = MaterialTheme.colorScheme.primary + fun toggleKeyboard() = if (focused) focusManager.clearFocus() else focusRequester.requestFocus() + Column( modifier = modifier, horizontalAlignment = Alignment.CenterHorizontally, @@ -271,17 +245,34 @@ private fun MirrorSurface( .onFocusChanged { focused = it.isFocused } .focusable() .onPreviewKeyEvent { event -> - if (event.type != KeyEventType.KeyDown) return@onPreviewKeyEvent false - keyToInputEvent(event.key)?.let { - onEvent(it) - true - } ?: false + val mapped = keyToInputEvent(event.key) ?: return@onPreviewKeyEvent false + // Consume KeyUp of mapped keys too, or Space/arrows leak to the scroll container. + if (event.type == KeyEventType.KeyDown) onEvent(mapped) + true } - .pointerInput(Unit) { + .pointerInput(hasTouch) { detectTapGestures( - onTap = { - // Tap toggles keyboard control so there is always a way out of capture. - if (isFocused) focusManager.clearFocus() else focusRequester.requestFocus() + onTap = { offset -> + if (hasTouch) { + onTouch( + INPUT_USER_PRESS, + offset.toDeviceX(size.width, currentFrame), + offset.toDeviceY(size.height, currentFrame), + ) + } else { + // Tap toggles keyboard control so there is always a way out of capture. + toggleKeyboard() + } + }, + onLongPress = { offset -> + // Physical touch drivers map a long-press to SELECT with coordinates. + if (hasTouch) { + onTouch( + INPUT_SELECT, + offset.toDeviceX(size.width, currentFrame), + offset.toDeviceY(size.height, currentFrame), + ) + } }, ) } @@ -290,18 +281,39 @@ private fun MirrorSurface( ) { MirrorFrameImage(frame, palette) } + MirrorControlHints(focused = focused, hasTouch = hasTouch, onToggleKeyboard = { toggleKeyboard() }) + } +} + +@Composable +private fun MirrorControlHints(focused: Boolean, hasTouch: Boolean, onToggleKeyboard: () -> Unit) { + Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp)) { + FilterChip( + selected = focused, + onClick = onToggleKeyboard, + label = { Text(stringResource(Res.string.mirror_keyboard)) }, + ) Text( text = - if (focused) { - "Keyboard active: arrows · Enter = OK · Esc = back — click the screen again to exit" - } else { - "Click the screen for keyboard control, or swipe it to navigate" - }, + stringResource( + when { + focused -> Res.string.mirror_hint_keyboard_active + hasTouch -> Res.string.mirror_hint_tap_touch + else -> Res.string.mirror_hint_tap_keyboard + }, + ), style = MaterialTheme.typography.labelSmall, ) } } +/** Scales a tap position on the scaled-up mirror image back to panel pixel coordinates. */ +private fun Offset.toDeviceX(boxWidthPx: Int, frame: MirrorFrame): Int = + (x / boxWidthPx * frame.width).toInt().coerceIn(0, frame.width - 1) + +private fun Offset.toDeviceY(boxHeightPx: Int, frame: MirrorFrame): Int = + (y / boxHeightPx * frame.height).toInt().coerceIn(0, frame.height - 1) + private fun keyToInputEvent(key: Key): Int? = when (key) { Key.DirectionUp -> INPUT_UP @@ -348,97 +360,27 @@ private fun Modifier.swipeToDirection(onEvent: (Int) -> Unit): Modifier = pointe ) } -/** - * Cross-shaped 5-way cluster with Back below-left, following the TV-remote convention: directions auto-repeat on hold - * (500ms delay, then 10Hz — slow enough for the radio to render), OK long-press sends the firmware's SELECT_LONG. - */ +/** The remote cluster: circular 5-way ring (see [DpadRing]) with Back below-left, per TV-remote convention. */ @Composable private fun DpadCluster(enabled: Boolean, onEvent: (Int) -> Unit, modifier: Modifier = Modifier) { Column( modifier = modifier, - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(DPAD_GAP), - ) { - RepeatingKey(MeshtasticIcons.KeyboardArrowUp, "Up", enabled) { onEvent(INPUT_UP) } - Row(horizontalArrangement = Arrangement.spacedBy(DPAD_GAP)) { - RepeatingKey(MeshtasticIcons.KeyboardArrowLeft, "Left", enabled) { onEvent(INPUT_LEFT) } - OkKey( - enabled = enabled, - onSelect = { onEvent(INPUT_SELECT) }, - onSelectLong = { onEvent(INPUT_SELECT_LONG) }, - ) - RepeatingKey(MeshtasticIcons.KeyboardArrowRight, "Right", enabled) { onEvent(INPUT_RIGHT) } - } - RepeatingKey(MeshtasticIcons.KeyboardArrowDown, "Down", enabled) { onEvent(INPUT_DOWN) } - Row(modifier = Modifier.widthIn(min = DPAD_KEY_SIZE * 3 + DPAD_GAP * 2)) { - BackKey(enabled = enabled) { onEvent(INPUT_BACK) } - } - } -} - -/** A direction key: fires on press, then auto-repeats while held. */ -@Composable -private fun RepeatingKey(icon: ImageVector, label: String, enabled: Boolean, onEvent: () -> Unit) { - var pressed by remember { mutableStateOf(false) } - val background = - when { - !enabled -> MaterialTheme.colorScheme.surfaceVariant - pressed -> MaterialTheme.colorScheme.primaryContainer - else -> MaterialTheme.colorScheme.secondaryContainer - } - Box( - contentAlignment = Alignment.Center, - modifier = - Modifier.size(DPAD_KEY_SIZE).clip(CircleShape).background(background).pointerInput(enabled) { - if (!enabled) return@pointerInput - coroutineScope { - detectTapGestures( - onPress = { - pressed = true - onEvent() - val repeater = launch { - delay(REPEAT_INITIAL_DELAY_MS) - while (isActive) { - onEvent() - delay(REPEAT_INTERVAL_MS) - } - } - tryAwaitRelease() - repeater.cancel() - pressed = false - }, - ) - } - }, - ) { - Icon(imageVector = icon, contentDescription = label, tint = contentColorFor(enabled)) - } -} - -/** Center OK: tap selects, long-press sends SELECT_LONG. */ -@OptIn(ExperimentalFoundationApi::class) -@Composable -private fun OkKey(enabled: Boolean, onSelect: () -> Unit, onSelectLong: () -> Unit) { - Box( - contentAlignment = Alignment.Center, - modifier = - Modifier.size(DPAD_KEY_SIZE) - .clip(CircleShape) - .background( - if (enabled) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.surfaceVariant, - ) - .combinedClickable(enabled = enabled, onLongClick = onSelectLong, onClick = onSelect), + horizontalAlignment = Alignment.Start, + verticalArrangement = Arrangement.spacedBy(12.dp), ) { - Text( - text = "OK", - style = MaterialTheme.typography.titleSmall, - color = if (enabled) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurfaceVariant, + DpadRing( + enabled = enabled, + onEvent = onEvent, + onSelect = { onEvent(INPUT_SELECT) }, + onSelectLong = { onEvent(INPUT_SELECT_LONG) }, ) + BackKey(enabled = enabled) { onEvent(INPUT_BACK) } } } @Composable private fun BackKey(enabled: Boolean, onBack: () -> Unit) { + val haptics = LocalHapticFeedback.current Box( contentAlignment = Alignment.Center, modifier = @@ -451,9 +393,16 @@ private fun BackKey(enabled: Boolean, onBack: () -> Unit) { MaterialTheme.colorScheme.surfaceVariant }, ) - .combinedClickable(enabled = enabled, onClick = onBack), + .combinedClickable(enabled = enabled) { + haptics.performHapticFeedback(HapticFeedbackType.VirtualKey) + onBack() + }, ) { - Text(text = "Back", style = MaterialTheme.typography.labelMedium, color = contentColorFor(enabled)) + Text( + text = stringResource(Res.string.mirror_back), + style = MaterialTheme.typography.labelMedium, + color = contentColorFor(enabled), + ) } } diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorViewModel.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorViewModel.kt new file mode 100644 index 00000000000..cc1e72c8465 --- /dev/null +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorViewModel.kt @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.settings.debugging + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.launch +import org.koin.core.annotation.KoinViewModel +import org.meshtastic.core.model.ConnectionState +import org.meshtastic.core.repository.AdminController +import org.meshtastic.core.repository.ConnectionStateProvider +import org.meshtastic.core.repository.DisplayMirrorManager +import org.meshtastic.core.repository.MirrorFrame +import org.meshtastic.core.repository.MirrorPalette +import org.meshtastic.core.repository.NodeRepository +import org.meshtastic.proto.DisplayInfo + +@KoinViewModel +class DisplayMirrorViewModel( + private val displayMirrorManager: DisplayMirrorManager, + connectionStateProvider: ConnectionStateProvider, + nodeRepository: NodeRepository, + private val adminController: AdminController, +) : ViewModel() { + + val frame: StateFlow = displayMirrorManager.frame + + val palette: StateFlow = displayMirrorManager.palette + + val connected: StateFlow = + connectionStateProvider.connectionState + .map { it is ConnectionState.Connected } + .stateIn(viewModelScope, SharingStarted.Eagerly, false) + + /** Panel description from the connect handshake; null on display-less nodes and pre-DisplayInfo firmware. */ + val displayInfo: StateFlow = + nodeRepository.ourNodeInfo.map { it?.metadata?.display }.stateIn(viewModelScope, SharingStarted.Eagerly, null) + + private val _mirroring = MutableStateFlow(false) + val mirroring: StateFlow = _mirroring.asStateFlow() + + init { + // A fresh mirror UI must never show a previous device's final screen as if live. + displayMirrorManager.reset() + // The device forgets the (non-persisted) mirror setting on disconnect/reboot; + // mirror the reset locally so the toggle never claims a dead stream is live. + viewModelScope.launch { + connected.collect { + if (!it) { + _mirroring.value = false + displayMirrorManager.reset() + } + } + } + } + + fun setMirror(enabled: Boolean) { + adminController.setDisplayMirror(enabled) + _mirroring.value = enabled + } + + fun requestFrame() = adminController.requestDisplayFrame() + + fun sendKey(eventCode: Int) = adminController.sendInputEvent(eventCode) + + /** Forwards a tap/long-press on the mirrored image as a device touch event with panel coordinates. */ + fun sendTouch(eventCode: Int, x: Int, y: Int) = adminController.sendInputEvent(eventCode, touchX = x, touchY = y) + + /** Stops a live stream when the mirror UI goes away; safe to call redundantly. */ + fun stopMirroring() { + if (_mirroring.value) setMirror(false) + } + + override fun onCleared() = stopMirroring() +} diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DpadRing.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DpadRing.kt new file mode 100644 index 00000000000..3895d7650d0 --- /dev/null +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DpadRing.kt @@ -0,0 +1,276 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.settings.debugging + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background +import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.gestures.awaitEachGesture +import androidx.compose.foundation.gestures.awaitFirstDown +import androidx.compose.foundation.gestures.waitForUpOrCancellation +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.drawscope.DrawScope +import androidx.compose.ui.graphics.drawscope.Stroke +import androidx.compose.ui.hapticfeedback.HapticFeedback +import androidx.compose.ui.hapticfeedback.HapticFeedbackType +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.platform.LocalHapticFeedback +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.onClick +import androidx.compose.ui.semantics.role +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch +import org.jetbrains.compose.resources.StringResource +import org.jetbrains.compose.resources.stringResource +import org.meshtastic.core.resources.Res +import org.meshtastic.core.resources.mirror_key_down +import org.meshtastic.core.resources.mirror_key_left +import org.meshtastic.core.resources.mirror_key_ok +import org.meshtastic.core.resources.mirror_key_right +import org.meshtastic.core.resources.mirror_key_up +import org.meshtastic.core.ui.icon.KeyboardArrowDown +import org.meshtastic.core.ui.icon.KeyboardArrowLeft +import org.meshtastic.core.ui.icon.KeyboardArrowRight +import org.meshtastic.core.ui.icon.KeyboardArrowUp +import org.meshtastic.core.ui.icon.MeshtasticIcons +import kotlin.math.PI +import kotlin.math.atan2 +import kotlin.math.hypot + +// Geometry per the TV-remote research: ~220dp ring, 72-80dp center disc, +// a radial dead band between disc and ring so ambiguous presses do nothing. +private val RING_DIAMETER = 220.dp +private val OK_DISC_DIAMETER = 76.dp +private val DEAD_ZONE = 12.dp + +private const val WEDGE_SWEEP_DEG = 90f +private const val FULL_CIRCLE_DEG = 360f +private const val RAD_TO_DEG = (180.0 / PI).toFloat() + +// Minimum comfortable assistive-tech target (M3). +private val SEMANTICS_TARGET = 48.dp + +// One direction wedge of the ring: hit-test bounds, highlight arc, icon placement. +private class Wedge( + val eventCode: Int, + val label: StringResource, + val startAngleDeg: Float, + val iconOffsetX: Dp, + val iconOffsetY: Dp, +) + +@Suppress("MagicNumber") +private fun buildWedges(iconRadius: Dp): List = listOf( + Wedge(INPUT_RIGHT, Res.string.mirror_key_right, -45f, iconRadius, 0.dp), + Wedge(INPUT_DOWN, Res.string.mirror_key_down, 45f, 0.dp, iconRadius), + Wedge(INPUT_LEFT, Res.string.mirror_key_left, 135f, -iconRadius, 0.dp), + Wedge(INPUT_UP, Res.string.mirror_key_up, 225f, 0.dp, -iconRadius), +) + +@Composable +private fun wedgeIcon(eventCode: Int) = when (eventCode) { + INPUT_UP -> MeshtasticIcons.KeyboardArrowUp + INPUT_DOWN -> MeshtasticIcons.KeyboardArrowDown + INPUT_LEFT -> MeshtasticIcons.KeyboardArrowLeft + else -> MeshtasticIcons.KeyboardArrowRight +} + +private fun List.at(angleDeg: Float): Wedge = first { wedge -> + val start = (wedge.startAngleDeg + FULL_CIRCLE_DEG) % FULL_CIRCLE_DEG + val normalized = if (angleDeg < start) angleDeg + FULL_CIRCLE_DEG else angleDeg + normalized >= start && normalized < start + WEDGE_SWEEP_DEG +} + +/** + * Circular 5-way remote cluster: four direction wedges around a center OK disc, the layout every TV remote converged + * on. Directions fire on press and auto-repeat while held; OK taps SELECT and long-presses SELECT_LONG. Wedge + * hit-testing is by angle with a dead band around the disc; each wedge also carries its own semantics node so screen + * readers see four buttons, not one blob. + */ +@Composable +internal fun DpadRing( + enabled: Boolean, + onEvent: (Int) -> Unit, + onSelect: () -> Unit, + onSelectLong: () -> Unit, + modifier: Modifier = Modifier, +) { + val haptics = LocalHapticFeedback.current + var pressedWedge by remember { mutableStateOf(null) } + // Icons and semantics targets sit on the ring stroke's center line. + val wedges = remember { buildWedges((RING_DIAMETER / 2 + OK_DISC_DIAMETER / 2 + DEAD_ZONE) / 2) } + + val ringColor = + if (enabled) MaterialTheme.colorScheme.secondaryContainer else MaterialTheme.colorScheme.surfaceVariant + val pressedColor = MaterialTheme.colorScheme.primaryContainer + + Box(modifier = modifier.size(RING_DIAMETER), contentAlignment = Alignment.Center) { + Canvas( + modifier = + Modifier.size(RING_DIAMETER) + .ringPresses(enabled, wedges, haptics, onPressChange = { pressedWedge = it }, onEvent = onEvent), + ) { + drawRing(ringColor, pressedColor, wedges, pressedWedge) + } + WedgeDecorations(wedges = wedges, enabled = enabled, onEvent = onEvent) + OkDisc(enabled = enabled, haptics = haptics, onSelect = onSelect, onSelectLong = onSelectLong) + } +} + +/** Press handling for the ring: angle hit-testing outside the dead band, then fire + auto-repeat until release. */ +private fun Modifier.ringPresses( + enabled: Boolean, + wedges: List, + haptics: HapticFeedback, + onPressChange: (Int?) -> Unit, + onEvent: (Int) -> Unit, +): Modifier = pointerInput(enabled) { + if (!enabled) return@pointerInput + val outerR = size.width / 2f + val innerR = (OK_DISC_DIAMETER.toPx() / 2f) + DEAD_ZONE.toPx() + val center = Offset(outerR, outerR) + coroutineScope { + awaitEachGesture { + val down = awaitFirstDown() + val d = down.position - center + val r = hypot(d.x, d.y) + if (r < innerR || r > outerR) return@awaitEachGesture + down.consume() + val angle = (atan2(d.y, d.x) * RAD_TO_DEG + FULL_CIRCLE_DEG) % FULL_CIRCLE_DEG + val wedge = wedges.at(angle) + onPressChange(wedge.eventCode) + haptics.performHapticFeedback(HapticFeedbackType.VirtualKey) + onEvent(wedge.eventCode) + val repeater = launch { + delay(REPEAT_INITIAL_DELAY_MS) + while (isActive) { + haptics.performHapticFeedback(HapticFeedbackType.SegmentFrequentTick) + onEvent(wedge.eventCode) + delay(REPEAT_INTERVAL_MS) + } + } + try { + waitForUpOrCancellation() + } finally { + // The pointerInput coroutine can be cancelled mid-press (enabled + // flip, node removal); never leave a wedge stuck highlighted. + repeater.cancel() + onPressChange(null) + } + } + } +} + +private fun DrawScope.drawRing(ringColor: Color, pressedColor: Color, wedges: List, pressedWedge: Int?) { + val outerR = size.width / 2f + val visualInnerR = (OK_DISC_DIAMETER.toPx() / 2f) + DEAD_ZONE.toPx() + val strokeWidth = outerR - visualInnerR + val strokeRadius = (outerR + visualInnerR) / 2f + drawCircle(color = ringColor, radius = strokeRadius, style = Stroke(width = strokeWidth)) + pressedWedge?.let { pressed -> + val wedge = wedges.first { it.eventCode == pressed } + drawArc( + color = pressedColor, + startAngle = wedge.startAngleDeg, + sweepAngle = WEDGE_SWEEP_DEG, + useCenter = false, + topLeft = Offset(outerR - strokeRadius, outerR - strokeRadius), + size = Size(strokeRadius * 2f, strokeRadius * 2f), + style = Stroke(width = strokeWidth), + ) + } +} + +/** Chevron icons plus one invisible semantics button per wedge so assistive tech sees four discrete controls. */ +@Composable +private fun WedgeDecorations(wedges: List, enabled: Boolean, onEvent: (Int) -> Unit) { + val iconColor = + if (enabled) MaterialTheme.colorScheme.onSecondaryContainer else MaterialTheme.colorScheme.onSurfaceVariant + wedges.forEach { wedge -> + val label = stringResource(wedge.label) + Icon( + imageVector = wedgeIcon(wedge.eventCode), + contentDescription = null, + tint = iconColor, + modifier = Modifier.offset(x = wedge.iconOffsetX, y = wedge.iconOffsetY), + ) + Box( + modifier = + Modifier.offset(x = wedge.iconOffsetX, y = wedge.iconOffsetY).size(SEMANTICS_TARGET).semantics { + role = Role.Button + contentDescription = label + onClick(label = label) { + if (enabled) onEvent(wedge.eventCode) + enabled + } + }, + ) + } +} + +@OptIn(ExperimentalFoundationApi::class) +@Composable +private fun OkDisc(enabled: Boolean, haptics: HapticFeedback, onSelect: () -> Unit, onSelectLong: () -> Unit) { + Box( + contentAlignment = Alignment.Center, + modifier = + Modifier.size(OK_DISC_DIAMETER) + .clip(CircleShape) + .background( + if (enabled) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.surfaceVariant, + ) + .combinedClickable( + enabled = enabled, + onLongClick = onSelectLong, + onClick = { + haptics.performHapticFeedback(HapticFeedbackType.VirtualKey) + onSelect() + }, + ), + ) { + val okColor = if (enabled) MaterialTheme.colorScheme.onPrimary else MaterialTheme.colorScheme.onSurfaceVariant + Text( + text = stringResource(Res.string.mirror_key_ok), + style = MaterialTheme.typography.titleMedium, + color = okColor, + ) + } +} diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt index 7bff3ef7182..14272d637da 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt @@ -33,8 +33,11 @@ import androidx.compose.ui.graphics.drawscope.CanvasDrawScope import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp +import org.jetbrains.compose.resources.stringResource import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.core.repository.MirrorPalette +import org.meshtastic.core.resources.Res +import org.meshtastic.core.resources.mirror_device_screen // 4x scale for the common 128px-wide OLED; caps the image so the D-pad stays above the fold on desktop. private val MAX_CANVAS_WIDTH = 512.dp @@ -53,7 +56,7 @@ internal fun MirrorFrameImage(frame: MirrorFrame, palette: MirrorPalette?, modif val bitmap = remember(frame, activePalette) { renderFrame(frame, activePalette) } Image( bitmap = bitmap, - contentDescription = "Device screen", + contentDescription = stringResource(Res.string.mirror_device_screen), modifier = modifier .widthIn(max = MAX_CANVAS_WIDTH) @@ -63,7 +66,8 @@ internal fun MirrorFrameImage(frame: MirrorFrame, palette: MirrorPalette?, modif ) } -private class ResolvedRegion( +/** One colorized rectangle with palette colors pre-resolved to Compose colors. */ +internal class ResolvedRegion( val left: Int, val top: Int, val right: Int, @@ -72,51 +76,84 @@ private class ResolvedRegion( val off: Color, ) -private fun rgb565ToColor(v: Int): Color = Color( - red = ((v ushr 11) and 0x1F) * 255 / 31, - green = ((v ushr 5) and 0x3F) * 255 / 63, - blue = (v and 0x1F) * 255 / 31, -) +/** Expands RGB565 to 8-bit channels by bit replication (the canonical expansion; plain scaling floors). */ +@Suppress("MagicNumber") +internal fun rgb565ToColor(v: Int): Color { + val r5 = (v ushr 11) and 0x1F + val g6 = (v ushr 5) and 0x3F + val b5 = v and 0x1F + return Color(red = (r5 shl 3) or (r5 ushr 2), green = (g6 shl 2) or (g6 ushr 4), blue = (b5 shl 3) or (b5 ushr 2)) +} + +/** + * Resolves one pixel against the regions overlapping its row, highest table index winning — the firmware's precedence. + * [rowRegions] must already be culled to the pixel's row. + */ +internal fun resolvePixelColor( + x: Int, + set: Boolean, + rowRegions: List, + defaultOn: Color, + defaultOff: Color, +): Color { + for (i in rowRegions.indices.reversed()) { + val region = rowRegions[i] + if (x >= region.left && x < region.right) return if (set) region.on else region.off + } + return if (set) defaultOn else defaultOff +} + +internal fun MirrorPalette.resolveRegions(): List = regions.map { + ResolvedRegion( + left = it.x, + top = it.y, + right = it.x + it.width, + bottom = it.y + it.height, + on = rgb565ToColor(it.on_color), + off = rgb565ToColor(it.off_color), + ) +} private fun renderFrame(frame: MirrorFrame, palette: MirrorPalette?): ImageBitmap { val defaultOn = palette?.let { rgb565ToColor(it.defaultOnColor) } ?: Color.White val defaultOff = palette?.let { rgb565ToColor(it.defaultOffColor) } ?: Color.Black - val regions = - palette?.regions.orEmpty().map { - ResolvedRegion( - left = it.x, - top = it.y, - right = it.x + it.width, - bottom = it.y + it.height, - on = rgb565ToColor(it.on_color), - off = rgb565ToColor(it.off_color), - ) - } + val regions = palette?.resolveRegions().orEmpty() val bitmap = ImageBitmap(frame.width, frame.height) val size = Size(frame.width.toFloat(), frame.height.toFloat()) CanvasDrawScope().draw(Density(1f), LayoutDirection.Ltr, Canvas(bitmap), size) { drawRect(color = defaultOff) - val pixel = Size(1f, 1f) + val rowRegions = ArrayList(regions.size) for (y in 0 until frame.height) { + rowRegions.clear() + for (region in regions) if (y >= region.top && y < region.bottom) rowRegions.add(region) + val page = (y / PIXELS_PER_PAGE) * frame.width val bit = 1 shl (y % PIXELS_PER_PAGE) - // Cull to the regions overlapping this row; the last matching region wins, - // matching the firmware's precedence. - val rowRegions = regions.filter { y >= it.top && y < it.bottom } + // Emit horizontal runs of identical color; framebuffers are run-heavy, + // and one draw per run beats one draw per pixel by orders of magnitude. + var runStart = 0 + var runColor: Color? = null + fun flush(endExclusive: Int) { + val color = runColor + if (color != null && color != defaultOff) { + drawRect( + color = color, + topLeft = Offset(runStart.toFloat(), y.toFloat()), + size = Size((endExclusive - runStart).toFloat(), 1f), + ) + } + } for (x in 0 until frame.width) { val set = frame.pixels[page + x].toInt() and bit != 0 - val region = rowRegions.lastOrNull { x >= it.left && x < it.right } - val color = - when { - region != null -> if (set) region.on else region.off - set -> defaultOn - else -> defaultOff - } - if (color != defaultOff) { - drawRect(color = color, topLeft = Offset(x.toFloat(), y.toFloat()), size = pixel) + val color = resolvePixelColor(x, set, rowRegions, defaultOn, defaultOff) + if (color != runColor) { + flush(x) + runStart = x + runColor = color } } + flush(frame.width) } } return bitmap diff --git a/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/debugging/MirrorColorResolverTest.kt b/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/debugging/MirrorColorResolverTest.kt new file mode 100644 index 00000000000..0561e5da7ef --- /dev/null +++ b/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/debugging/MirrorColorResolverTest.kt @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.settings.debugging + +import androidx.compose.ui.graphics.Color +import kotlin.test.Test +import kotlin.test.assertEquals + +class MirrorColorResolverTest { + + @Test + fun `rgb565 expands by bit replication`() { + assertEquals(Color(255, 255, 255), rgb565ToColor(0xFFFF)) + assertEquals(Color(0, 0, 0), rgb565ToColor(0x0000)) + assertEquals(Color(255, 0, 0), rgb565ToColor(0xF800)) + assertEquals(Color(0, 255, 0), rgb565ToColor(0x07E0)) + assertEquals(Color(0, 0, 255), rgb565ToColor(0x001F)) + // 5-bit 16 replicates to 10000100b = 132, where plain scaling floors to 131 + assertEquals(132, (rgb565ToColor(16 shl 11).red * 255).toInt()) + } + + @Test + fun `highest-index region wins where regions overlap`() { + val under = ResolvedRegion(left = 0, top = 0, right = 100, bottom = 10, on = Color.Red, off = Color.Black) + val over = ResolvedRegion(left = 50, top = 0, right = 100, bottom = 10, on = Color.Green, off = Color.Blue) + val rows = listOf(under, over) + + assertEquals( + Color.Red, + resolvePixelColor(x = 10, set = true, rowRegions = rows, defaultOn = Color.White, defaultOff = Color.Black), + ) + assertEquals( + Color.Green, + resolvePixelColor(x = 60, set = true, rowRegions = rows, defaultOn = Color.White, defaultOff = Color.Black), + ) + assertEquals( + Color.Blue, + resolvePixelColor( + x = 60, + set = false, + rowRegions = rows, + defaultOn = Color.White, + defaultOff = Color.Black, + ), + ) + } + + @Test + fun `pixels outside all regions use the defaults`() { + val region = ResolvedRegion(left = 0, top = 0, right = 10, bottom = 10, on = Color.Red, off = Color.Black) + + assertEquals( + Color.White, + resolvePixelColor( + x = 50, + set = true, + rowRegions = listOf(region), + defaultOn = Color.White, + defaultOff = Color.Gray, + ), + ) + assertEquals( + Color.Gray, + resolvePixelColor( + x = 50, + set = false, + rowRegions = listOf(region), + defaultOn = Color.White, + defaultOff = Color.Gray, + ), + ) + } +} From b92c950232d567a06872890f2950eff02da47b88 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:02:29 -0500 Subject: [PATCH 09/34] feat(debug): render MUI dirty-rect streams (Format.RGB565) DisplayMirrorManager reassembles RGB565 rect chunks (sequence, geometry, and panel-bound validation) and composites them into a persistent little-endian RGB565 canvas emitted per completed rect; the renderer gains a true-color branch using the same run-length row drawing. Mono frames are untouched. --- .../data/manager/DisplayMirrorManagerImpl.kt | 95 +++++++++++++++++++ .../core/repository/DisplayMirrorManager.kt | 18 ++-- .../settings/debugging/MirrorFrameRenderer.kt | 47 ++++++++- 3 files changed, 153 insertions(+), 7 deletions(-) diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt index 61be808a117..7a5e4bdbd64 100644 --- a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt @@ -21,6 +21,7 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import org.koin.core.annotation.Single import org.meshtastic.core.repository.DisplayMirrorManager +import org.meshtastic.core.repository.MirrorFormat import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.core.repository.MirrorPalette import org.meshtastic.proto.DisplayFrame @@ -56,6 +57,14 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { private var paletteDefaultOff = 0 override fun handleIncomingFrame(chunk: DisplayFrame) { + if (chunk.format == DisplayFrame.Format.RGB565 && chunk.rect_width > 0) { + handleRectChunk(chunk) + } else { + handleMonoChunk(chunk) + } + } + + private fun handleMonoChunk(chunk: DisplayFrame) { val data = chunk.data_.toByteArray() val total = chunk.total_size @@ -164,9 +173,92 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { return acceptable } + // ── RGB565 dirty-rect stream (LVGL/MUI devices) ───────────────────────── + // Rects composite into a persistent little-endian RGB565 canvas; frames + // are emitted coalesced so a burst of rects costs one canvas copy. + + private var canvas: ByteArray? = null + private var canvasWidth = 0 + private var canvasHeight = 0 + private var rectBuffer: ByteArray? = null + private var rectReceived = 0 + private var rectFrameId = 0 + + private fun handleRectChunk(chunk: DisplayFrame) { + val data = chunk.data_.toByteArray() + if (chunk.offset == 0) { + rectBuffer = ByteArray(chunk.total_size) + rectFrameId = chunk.frame_id + rectReceived = 0 + } + if (!isAcceptableRectChunk(chunk, data.size)) { + rectBuffer = null + return + } + val buf = rectBuffer ?: return + data.copyInto(buf, chunk.offset) + rectReceived += data.size + if (rectReceived == chunk.total_size) { + compositeRect(chunk, buf) + rectBuffer = null + } + } + + private fun isAcceptableRectChunk(chunk: DisplayFrame, dataSize: Int): Boolean { + val bytes = chunk.rect_width * chunk.rect_height * 2 + val withinPanel = + chunk.width in 1..MAX_PANEL_EDGE && + chunk.height in 1..MAX_PANEL_EDGE && + chunk.rect_x + chunk.rect_width <= chunk.width && + chunk.rect_y + chunk.rect_height <= chunk.height + val inSequence = rectBuffer != null && chunk.frame_id == rectFrameId && chunk.offset == rectReceived + val acceptable = + withinPanel && inSequence && bytes == chunk.total_size && chunk.offset + dataSize <= chunk.total_size + if (!acceptable) { + Logger.w { + "DisplayMirror: dropping bad rect ${chunk.rect_width}x${chunk.rect_height} total=${chunk.total_size}" + } + } + return acceptable + } + + private fun compositeRect(chunk: DisplayFrame, rect: ByteArray) { + if (canvas == null || canvasWidth != chunk.width || canvasHeight != chunk.height) { + canvas = ByteArray(chunk.width * chunk.height * 2) + canvasWidth = chunk.width + canvasHeight = chunk.height + } + val target = canvas ?: return + val rowBytes = chunk.rect_width * 2 + for (row in 0 until chunk.rect_height) { + val src = row * rowBytes + val dst = ((chunk.rect_y + row) * canvasWidth + chunk.rect_x) * 2 + rect.copyInto(target, dst, src, src + rowBytes) + } + // One emission per completed rect: rects are already flush-coalesced + // device-side, and StateFlow conflates under a slow collector. + emitCanvas(chunk.frame_id) + } + + private fun emitCanvas(frameId: Int) { + val target = canvas ?: return + _frame.value = + MirrorFrame( + width = canvasWidth, + height = canvasHeight, + frameId = frameId, + paletteSignature = 0, + pixels = target.copyOf(), + format = MirrorFormat.RGB565, + ) + } + override fun reset() { buffer = null received = 0 + canvas = null + rectBuffer = null + rectReceived = 0 paletteRegions = mutableListOf() paletteReceived = 0 paletteSignature = 0 @@ -181,6 +273,9 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { // The firmware's region table caps at 48; anything past this is a bug or an attack. const val MAX_PALETTE_REGIONS = 512 + // Sanity bound for RGB565 panels (largest realistic is 800x480). + const val MAX_PANEL_EDGE = 1024 + // MONO_VLSB packs 8 vertically adjacent pixels per byte (one "page" row). const val PIXELS_PER_PAGE = 8 } diff --git a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt index 7f075df2935..cdfd971b718 100644 --- a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt +++ b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt @@ -58,24 +58,30 @@ data class MirrorPalette( val regions: List, ) -/** - * One complete device framebuffer snapshot. - * - * [pixels] is MONO_VLSB: 1 bit per pixel in vertical LSB-first pages — byte index = `x + (y / 8) * width`, bit index = - * `y % 8`. - */ +/** Pixel encodings a [MirrorFrame] can carry. */ +enum class MirrorFormat { + /** 1 bit per pixel, vertical LSB-first pages — byte index `x + (y / 8) * width`, bit index `y % 8`. */ + MONO_VLSB, + + /** 16 bits per pixel, little-endian RGB565, rows tightly packed. */ + RGB565, +} + +/** One complete device framebuffer snapshot in [format]. */ data class MirrorFrame( val width: Int, val height: Int, val frameId: Int, val paletteSignature: Int, val pixels: ByteArray, + val format: MirrorFormat = MirrorFormat.MONO_VLSB, ) { override fun equals(other: Any?): Boolean = other is MirrorFrame && other.width == width && other.height == height && other.frameId == frameId && other.paletteSignature == paletteSignature && + other.format == format && other.pixels.contentEquals(pixels) override fun hashCode(): Int { diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt index 14272d637da..0c69d608f1d 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt @@ -34,6 +34,7 @@ import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import org.jetbrains.compose.resources.stringResource +import org.meshtastic.core.repository.MirrorFormat import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.core.repository.MirrorPalette import org.meshtastic.core.resources.Res @@ -76,6 +77,11 @@ internal class ResolvedRegion( val off: Color, ) +/** Reads one little-endian RGB565 value from a packed pixel row. */ +@Suppress("MagicNumber") +private fun leRgb565At(pixels: ByteArray, index: Int): Int = + (pixels[index].toInt() and 0xFF) or ((pixels[index + 1].toInt() and 0xFF) shl 8) + /** Expands RGB565 to 8-bit channels by bit replication (the canonical expansion; plain scaling floors). */ @Suppress("MagicNumber") internal fun rgb565ToColor(v: Int): Color { @@ -114,7 +120,46 @@ internal fun MirrorPalette.resolveRegions(): List = regions.map ) } -private fun renderFrame(frame: MirrorFrame, palette: MirrorPalette?): ImageBitmap { +private fun renderFrame(frame: MirrorFrame, palette: MirrorPalette?): ImageBitmap = when (frame.format) { + MirrorFormat.RGB565 -> renderRgb565Frame(frame) + MirrorFormat.MONO_VLSB -> renderMonoFrame(frame, palette) +} + +/** True-color frames (LVGL/MUI devices): little-endian RGB565, drawn as horizontal same-color runs. */ +private fun renderRgb565Frame(frame: MirrorFrame): ImageBitmap { + val bitmap = ImageBitmap(frame.width, frame.height) + val size = Size(frame.width.toFloat(), frame.height.toFloat()) + CanvasDrawScope().draw(Density(1f), LayoutDirection.Ltr, Canvas(bitmap), size) { + drawRect(color = Color.Black) + for (y in 0 until frame.height) { + val rowBase = y * frame.width * 2 + var runStart = 0 + var runColor: Color? = null + fun flush(endExclusive: Int) { + val color = runColor + if (color != null && color != Color.Black) { + drawRect( + color = color, + topLeft = Offset(runStart.toFloat(), y.toFloat()), + size = Size((endExclusive - runStart).toFloat(), 1f), + ) + } + } + for (x in 0 until frame.width) { + val color = rgb565ToColor(leRgb565At(frame.pixels, rowBase + x * 2)) + if (color != runColor) { + flush(x) + runStart = x + runColor = color + } + } + flush(frame.width) + } + } + return bitmap +} + +private fun renderMonoFrame(frame: MirrorFrame, palette: MirrorPalette?): ImageBitmap { val defaultOn = palette?.let { rgb565ToColor(it.defaultOnColor) } ?: Color.White val defaultOff = palette?.let { rgb565ToColor(it.defaultOffColor) } ?: Color.Black val regions = palette?.resolveRegions().orEmpty() From c774e474f98feda1cc03bcb251ede442c8c1bff7 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:26:15 -0500 Subject: [PATCH 10/34] feat(debug): view-only mirror treatment for MUI devices MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RGB565 frames identify LVGL/MUI devices, whose UIs read their own input drivers rather than the InputBroker remote events inject into — so the mirror hides the D-pad, keyboard, swipe, and touch affordances and says so, until an input-injection path exists. Utility helpers and the input codes move to DisplayMirrorUtils.kt. --- .skills/compose-ui/strings-index.txt | 1 + .../composeResources/values/strings.xml | 1 + .../settings/debugging/DisplayMirror.kt | 73 +++++++------------ .../settings/debugging/DisplayMirrorUtils.kt | 67 +++++++++++++++++ 4 files changed, 95 insertions(+), 47 deletions(-) create mode 100644 feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt diff --git a/.skills/compose-ui/strings-index.txt b/.skills/compose-ui/strings-index.txt index c14d26f9972..8e00682eb3a 100644 --- a/.skills/compose-ui/strings-index.txt +++ b/.skills/compose-ui/strings-index.txt @@ -1196,6 +1196,7 @@ mirror_keyboard mirror_no_frame mirror_not_connected mirror_off +mirror_view_only modem_preset module_settings modules_already_unlocked diff --git a/core/resources/src/commonMain/composeResources/values/strings.xml b/core/resources/src/commonMain/composeResources/values/strings.xml index a315669226b..f053696e080 100644 --- a/core/resources/src/commonMain/composeResources/values/strings.xml +++ b/core/resources/src/commonMain/composeResources/values/strings.xml @@ -1238,6 +1238,7 @@ No frame received yet — enable mirroring or tap Refresh. Not connected to a device. Mirror off + Mirror only: remote input is not supported for this device UI yet. Presets Module configuration Modules already unlocked diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index fc57d1a7df4..d5f2a744740 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -55,7 +55,6 @@ import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.hapticfeedback.HapticFeedbackType -import androidx.compose.ui.input.key.Key import androidx.compose.ui.input.key.KeyEventType import androidx.compose.ui.input.key.key import androidx.compose.ui.input.key.onPreviewKeyEvent @@ -67,6 +66,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel +import org.meshtastic.core.repository.MirrorFormat import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.core.repository.MirrorPalette import org.meshtastic.core.resources.Res @@ -81,6 +81,7 @@ import org.meshtastic.core.resources.mirror_keyboard import org.meshtastic.core.resources.mirror_no_frame import org.meshtastic.core.resources.mirror_not_connected import org.meshtastic.core.resources.mirror_off +import org.meshtastic.core.resources.mirror_view_only import org.meshtastic.core.resources.refresh import org.meshtastic.proto.DisplayInfo @@ -97,17 +98,6 @@ private val SWIPE_THRESHOLD = 48.dp // Mirror + D-pad fit comfortably side by side above this content width. private val SIDE_BY_SIDE_MIN_WIDTH = 760.dp -// Firmware input_broker_event codes (src/input/InputBroker.h). USER_PRESS is -// what physical touch drivers emit for a tap, with touch coordinates attached. -internal const val INPUT_SELECT = 10 -internal const val INPUT_SELECT_LONG = 11 -internal const val INPUT_UP = 17 -internal const val INPUT_DOWN = 18 -internal const val INPUT_LEFT = 19 -internal const val INPUT_RIGHT = 20 -internal const val INPUT_BACK = 27 -internal const val INPUT_USER_PRESS = 28 - /** Live view of the connected device's screen, with remote D-pad, keyboard, and touch control. */ @Composable fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirrorViewModel = koinViewModel()) { @@ -169,6 +159,9 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror currentFrame, palette, enabled = connected, + // MUI (RGB565) devices read their own input drivers, not the + // InputBroker remote events inject into — mirror-only for now. + inputSupported = currentFrame.format != MirrorFormat.RGB565, hasTouch = displayInfo?.has_touch == true, onEvent = viewModel::sendKey, onTouch = viewModel::sendTouch, @@ -184,12 +177,13 @@ private fun MirrorWithControls( frame: MirrorFrame, palette: MirrorPalette?, enabled: Boolean, + inputSupported: Boolean, hasTouch: Boolean, onEvent: (Int) -> Unit, onTouch: (Int, Int, Int) -> Unit, ) { BoxWithConstraints(modifier = Modifier.fillMaxWidth()) { - if (maxWidth >= SIDE_BY_SIDE_MIN_WIDTH) { + if (maxWidth >= SIDE_BY_SIDE_MIN_WIDTH && inputSupported) { Row( horizontalArrangement = Arrangement.spacedBy(24.dp, Alignment.CenterHorizontally), verticalAlignment = Alignment.CenterVertically, @@ -204,13 +198,30 @@ private fun MirrorWithControls( verticalArrangement = Arrangement.spacedBy(12.dp), modifier = Modifier.fillMaxWidth(), ) { - MirrorSurface(frame, palette, hasTouch, onEvent, onTouch) - DpadCluster(enabled = enabled, onEvent = onEvent) + if (inputSupported) { + MirrorSurface(frame, palette, hasTouch, onEvent, onTouch) + DpadCluster(enabled = enabled, onEvent = onEvent) + } else { + ViewOnlyMirror(frame, palette) + } } } } } +/** Mirror without any input affordances, for device UIs that do not accept remote input yet. */ +@Composable +private fun ViewOnlyMirror(frame: MirrorFrame, palette: MirrorPalette?, modifier: Modifier = Modifier) { + Column( + modifier = modifier, + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(4.dp), + ) { + MirrorFrameImage(frame, palette) + Text(text = stringResource(Res.string.mirror_view_only), style = MaterialTheme.typography.labelSmall) + } +} + /** * The live mirror plus its direct input affordances: a Keyboard chip toggles key capture (arrows, Enter/Space = OK, * Esc/Backspace = Back), swiping in a cardinal direction sends one direction event, and on touch-capable devices @@ -307,34 +318,6 @@ private fun MirrorControlHints(focused: Boolean, hasTouch: Boolean, onToggleKeyb } } -/** Scales a tap position on the scaled-up mirror image back to panel pixel coordinates. */ -private fun Offset.toDeviceX(boxWidthPx: Int, frame: MirrorFrame): Int = - (x / boxWidthPx * frame.width).toInt().coerceIn(0, frame.width - 1) - -private fun Offset.toDeviceY(boxHeightPx: Int, frame: MirrorFrame): Int = - (y / boxHeightPx * frame.height).toInt().coerceIn(0, frame.height - 1) - -private fun keyToInputEvent(key: Key): Int? = when (key) { - Key.DirectionUp -> INPUT_UP - - Key.DirectionDown -> INPUT_DOWN - - Key.DirectionLeft -> INPUT_LEFT - - Key.DirectionRight -> INPUT_RIGHT - - Key.Enter, - Key.NumPadEnter, - Key.Spacebar, - -> INPUT_SELECT - - Key.Escape, - Key.Backspace, - -> INPUT_BACK - - else -> null -} - /** Converts a completed drag into one direction event along its dominant axis, ignoring short accidental swipes. */ private fun Modifier.swipeToDirection(onEvent: (Int) -> Unit): Modifier = pointerInput(Unit) { val threshold = SWIPE_THRESHOLD.toPx() @@ -405,7 +388,3 @@ private fun BackKey(enabled: Boolean, onBack: () -> Unit) { ) } } - -@Composable -private fun contentColorFor(enabled: Boolean): Color = - if (enabled) MaterialTheme.colorScheme.onSecondaryContainer else MaterialTheme.colorScheme.onSurfaceVariant diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt new file mode 100644 index 00000000000..c23e21b4b60 --- /dev/null +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.settings.debugging + +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.key.Key +import org.meshtastic.core.repository.MirrorFrame + +// Firmware input_broker_event codes (src/input/InputBroker.h). USER_PRESS is +// what physical touch drivers emit for a tap, with touch coordinates attached. +internal const val INPUT_SELECT = 10 +internal const val INPUT_SELECT_LONG = 11 +internal const val INPUT_UP = 17 +internal const val INPUT_DOWN = 18 +internal const val INPUT_LEFT = 19 +internal const val INPUT_RIGHT = 20 +internal const val INPUT_BACK = 27 +internal const val INPUT_USER_PRESS = 28 + +/** Scales a tap position on the scaled-up mirror image back to panel pixel coordinates. */ +internal fun Offset.toDeviceX(boxWidthPx: Int, frame: MirrorFrame): Int = + (x / boxWidthPx * frame.width).toInt().coerceIn(0, frame.width - 1) + +internal fun Offset.toDeviceY(boxHeightPx: Int, frame: MirrorFrame): Int = + (y / boxHeightPx * frame.height).toInt().coerceIn(0, frame.height - 1) + +internal fun keyToInputEvent(key: Key): Int? = when (key) { + Key.DirectionUp -> INPUT_UP + + Key.DirectionDown -> INPUT_DOWN + + Key.DirectionLeft -> INPUT_LEFT + + Key.DirectionRight -> INPUT_RIGHT + + Key.Enter, + Key.NumPadEnter, + Key.Spacebar, + -> INPUT_SELECT + + Key.Escape, + Key.Backspace, + -> INPUT_BACK + + else -> null +} + +@Composable +internal fun contentColorFor(enabled: Boolean): Color = + if (enabled) MaterialTheme.colorScheme.onSecondaryContainer else MaterialTheme.colorScheme.onSurfaceVariant From bd2fbd99d0707fc8c57f6e6ac607cb3c2268453e Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 16:37:11 -0500 Subject: [PATCH 11/34] feat(debug): re-enable remote controls for MUI mirrors device-ui now accepts injected input (virtual LVGL pointer + group-attached keypad bridged from the InputBroker), so the view-only treatment goes away: the D-pad navigates MUI widgets, taps forward panel coordinates, and the keyboard types. The mirror_view_only string stays for the future capability-flag path. --- .../settings/debugging/DisplayMirror.kt | 29 ++----------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index d5f2a744740..2cdbcb5a6f3 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -66,7 +66,6 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel -import org.meshtastic.core.repository.MirrorFormat import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.core.repository.MirrorPalette import org.meshtastic.core.resources.Res @@ -81,7 +80,6 @@ import org.meshtastic.core.resources.mirror_keyboard import org.meshtastic.core.resources.mirror_no_frame import org.meshtastic.core.resources.mirror_not_connected import org.meshtastic.core.resources.mirror_off -import org.meshtastic.core.resources.mirror_view_only import org.meshtastic.core.resources.refresh import org.meshtastic.proto.DisplayInfo @@ -159,9 +157,6 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror currentFrame, palette, enabled = connected, - // MUI (RGB565) devices read their own input drivers, not the - // InputBroker remote events inject into — mirror-only for now. - inputSupported = currentFrame.format != MirrorFormat.RGB565, hasTouch = displayInfo?.has_touch == true, onEvent = viewModel::sendKey, onTouch = viewModel::sendTouch, @@ -177,13 +172,12 @@ private fun MirrorWithControls( frame: MirrorFrame, palette: MirrorPalette?, enabled: Boolean, - inputSupported: Boolean, hasTouch: Boolean, onEvent: (Int) -> Unit, onTouch: (Int, Int, Int) -> Unit, ) { BoxWithConstraints(modifier = Modifier.fillMaxWidth()) { - if (maxWidth >= SIDE_BY_SIDE_MIN_WIDTH && inputSupported) { + if (maxWidth >= SIDE_BY_SIDE_MIN_WIDTH) { Row( horizontalArrangement = Arrangement.spacedBy(24.dp, Alignment.CenterHorizontally), verticalAlignment = Alignment.CenterVertically, @@ -198,30 +192,13 @@ private fun MirrorWithControls( verticalArrangement = Arrangement.spacedBy(12.dp), modifier = Modifier.fillMaxWidth(), ) { - if (inputSupported) { - MirrorSurface(frame, palette, hasTouch, onEvent, onTouch) - DpadCluster(enabled = enabled, onEvent = onEvent) - } else { - ViewOnlyMirror(frame, palette) - } + MirrorSurface(frame, palette, hasTouch, onEvent, onTouch) + DpadCluster(enabled = enabled, onEvent = onEvent) } } } } -/** Mirror without any input affordances, for device UIs that do not accept remote input yet. */ -@Composable -private fun ViewOnlyMirror(frame: MirrorFrame, palette: MirrorPalette?, modifier: Modifier = Modifier) { - Column( - modifier = modifier, - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(4.dp), - ) { - MirrorFrameImage(frame, palette) - Text(text = stringResource(Res.string.mirror_view_only), style = MaterialTheme.typography.labelSmall) - } -} - /** * The live mirror plus its direct input affordances: a Keyboard chip toggles key capture (arrows, Enter/Space = OK, * Esc/Backspace = Back), swiping in a cardinal direction sends one direction event, and on touch-capable devices From f15f4390d58fe1054b5b98f74397f02637183e16 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 17:58:28 -0500 Subject: [PATCH 12/34] fix(debug): send typed characters to the mirrored device The mirror's keyboard capture only mapped navigation keys and silently dropped everything else, so text entry did nothing: printable characters never left the client even though the firmware already injects kb_char. Characters now go out as ANYKEY with the code point, Backspace goes as a character (so text fields delete rather than navigating back, which stays Esc's job), and the handling moves into a Modifier.remoteKeyInput extension. --- .../settings/debugging/DisplayMirror.kt | 53 ++++++++++++++++--- .../settings/debugging/DisplayMirrorUtils.kt | 14 +++-- .../debugging/DisplayMirrorViewModel.kt | 3 ++ 3 files changed, 59 insertions(+), 11 deletions(-) diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index 2cdbcb5a6f3..be49f3f9383 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -55,10 +55,12 @@ import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.hapticfeedback.HapticFeedbackType +import androidx.compose.ui.input.key.Key import androidx.compose.ui.input.key.KeyEventType import androidx.compose.ui.input.key.key import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.type +import androidx.compose.ui.input.key.utf16CodePoint import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalHapticFeedback @@ -160,6 +162,7 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror hasTouch = displayInfo?.has_touch == true, onEvent = viewModel::sendKey, onTouch = viewModel::sendTouch, + onChar = viewModel::sendChar, ) } } @@ -175,6 +178,7 @@ private fun MirrorWithControls( hasTouch: Boolean, onEvent: (Int) -> Unit, onTouch: (Int, Int, Int) -> Unit, + onChar: (Int) -> Unit, ) { BoxWithConstraints(modifier = Modifier.fillMaxWidth()) { if (maxWidth >= SIDE_BY_SIDE_MIN_WIDTH) { @@ -183,7 +187,15 @@ private fun MirrorWithControls( verticalAlignment = Alignment.CenterVertically, modifier = Modifier.fillMaxWidth(), ) { - MirrorSurface(frame, palette, hasTouch, onEvent, onTouch, modifier = Modifier.weight(1f, fill = false)) + MirrorSurface( + frame, + palette, + hasTouch, + onEvent, + onTouch, + onChar, + modifier = Modifier.weight(1f, fill = false), + ) DpadCluster(enabled = enabled, onEvent = onEvent) } } else { @@ -192,7 +204,7 @@ private fun MirrorWithControls( verticalArrangement = Arrangement.spacedBy(12.dp), modifier = Modifier.fillMaxWidth(), ) { - MirrorSurface(frame, palette, hasTouch, onEvent, onTouch) + MirrorSurface(frame, palette, hasTouch, onEvent, onTouch, onChar) DpadCluster(enabled = enabled, onEvent = onEvent) } } @@ -212,6 +224,7 @@ private fun MirrorSurface( hasTouch: Boolean, onEvent: (Int) -> Unit, onTouch: (Int, Int, Int) -> Unit, + onChar: (Int) -> Unit, modifier: Modifier = Modifier, ) { val focusRequester = remember { FocusRequester() } @@ -232,12 +245,7 @@ private fun MirrorSurface( Modifier.focusRequester(focusRequester) .onFocusChanged { focused = it.isFocused } .focusable() - .onPreviewKeyEvent { event -> - val mapped = keyToInputEvent(event.key) ?: return@onPreviewKeyEvent false - // Consume KeyUp of mapped keys too, or Space/arrows leak to the scroll container. - if (event.type == KeyEventType.KeyDown) onEvent(mapped) - true - } + .remoteKeyInput(onEvent, onChar) .pointerInput(hasTouch) { detectTapGestures( onTap = { offset -> @@ -295,6 +303,35 @@ private fun MirrorControlHints(focused: Boolean, hasTouch: Boolean, onToggleKeyb } } +/** + * Sends captured key presses to the device: mapped navigation keys as input events, Backspace and printable characters + * as typed characters. Handled keys are consumed on both down and up so nothing leaks into the surrounding scroll + * container. + */ +private fun Modifier.remoteKeyInput(onEvent: (Int) -> Unit, onChar: (Int) -> Unit): Modifier = + onPreviewKeyEvent { event -> + val down = event.type == KeyEventType.KeyDown + val mapped = keyToInputEvent(event.key) + when { + mapped != null -> { + if (down) onEvent(mapped) + true + } + + event.key == Key.Backspace -> { + if (down) onChar(CHAR_BACKSPACE) + true + } + + event.utf16CodePoint >= FIRST_PRINTABLE_CHAR -> { + if (down) onChar(event.utf16CodePoint) + true + } + + else -> false + } + } + /** Converts a completed drag into one direction event along its dominant axis, ignoring short accidental swipes. */ private fun Modifier.swipeToDirection(onEvent: (Int) -> Unit): Modifier = pointerInput(Unit) { val threshold = SWIPE_THRESHOLD.toPx() diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt index c23e21b4b60..11098aa140a 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt @@ -34,6 +34,16 @@ internal const val INPUT_RIGHT = 20 internal const val INPUT_BACK = 27 internal const val INPUT_USER_PRESS = 28 +// ANYKEY carries a character in kb_char rather than a navigation code. +internal const val INPUT_ANYKEY = 0xFF + +// LVGL's backspace key value; typed as a character so text fields delete +// rather than navigating back (which is what Esc is for). +internal const val CHAR_BACKSPACE = 8 + +// Below this, key events are control codes rather than typable text. +internal const val FIRST_PRINTABLE_CHAR = 32 + /** Scales a tap position on the scaled-up mirror image back to panel pixel coordinates. */ internal fun Offset.toDeviceX(boxWidthPx: Int, frame: MirrorFrame): Int = (x / boxWidthPx * frame.width).toInt().coerceIn(0, frame.width - 1) @@ -55,9 +65,7 @@ internal fun keyToInputEvent(key: Key): Int? = when (key) { Key.Spacebar, -> INPUT_SELECT - Key.Escape, - Key.Backspace, - -> INPUT_BACK + Key.Escape -> INPUT_BACK else -> null } diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorViewModel.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorViewModel.kt index cc1e72c8465..699adc37fd5 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorViewModel.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorViewModel.kt @@ -83,6 +83,9 @@ class DisplayMirrorViewModel( fun sendKey(eventCode: Int) = adminController.sendInputEvent(eventCode) + /** Forwards a typed character; the device UI receives it as a key press rather than a navigation event. */ + fun sendChar(codePoint: Int) = adminController.sendInputEvent(INPUT_ANYKEY, kbChar = codePoint) + /** Forwards a tap/long-press on the mirrored image as a device touch event with panel coordinates. */ fun sendTouch(eventCode: Int, x: Int, y: Int) = adminController.sendInputEvent(eventCode, touchX = x, touchY = y) From 33d93cd987f1d9f754625e4d904ae71befab8f8f Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Mon, 31 Aug 2026 19:05:54 -0500 Subject: [PATCH 13/34] refactor(mirror): harden rect reassembly and extract the compositor Third adversarial review pass over the client side. Rect reassembly moves out of DisplayMirrorManagerImpl into MirrorRectCompositor: the manager was carrying two unrelated state machines and 14 methods. Every rect field is now validated before anything is allocated (total_size is device-controlled), geometry is latched from the chunk at offset 0 so a later chunk cannot transpose the blit, continuations must match the buffer that was actually allocated rather than their own claim, and bounds use the subtraction form because rect_x + rect_width overflows for hostile values. A rect that omits width or height covers the full panel in that axis. remoteKeyInput no longer swallows modified keys, so Cmd+Q, Ctrl+C and Alt+Tab stay with the desktop instead of being forwarded to the device. MirrorFrameRenderer tracks colorized runs as a raw Int with a sentinel rather than a boxed Color?, and MirrorFrame.hashCode includes the format so a mono and an RGB565 frame of the same size cannot collide. Drops mirror_view_only, orphaned since MUI gained remote input. --- .skills/compose-ui/strings-index.txt | 1 - .../data/manager/DisplayMirrorManagerImpl.kt | 92 ++---------- .../core/data/manager/MirrorRectCompositor.kt | 140 ++++++++++++++++++ .../manager/DisplayMirrorManagerImplTest.kt | 77 ++++++++++ .../core/repository/DisplayMirrorManager.kt | 1 + .../composeResources/values/strings.xml | 1 - .../settings/debugging/DisplayMirror.kt | 8 +- .../settings/debugging/DisplayMirrorUtils.kt | 2 +- .../settings/debugging/MirrorFrameRenderer.kt | 23 +-- 9 files changed, 251 insertions(+), 94 deletions(-) create mode 100644 core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/MirrorRectCompositor.kt diff --git a/.skills/compose-ui/strings-index.txt b/.skills/compose-ui/strings-index.txt index 8e00682eb3a..c14d26f9972 100644 --- a/.skills/compose-ui/strings-index.txt +++ b/.skills/compose-ui/strings-index.txt @@ -1196,7 +1196,6 @@ mirror_keyboard mirror_no_frame mirror_not_connected mirror_off -mirror_view_only modem_preset module_settings modules_already_unlocked diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt index 7a5e4bdbd64..2c6d29cdf97 100644 --- a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt @@ -50,6 +50,8 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { private var frameWidth = 0 private var frameHeight = 0 + private val rects = MirrorRectCompositor() + private var paletteRegions = mutableListOf() private var paletteSignature = 0 private var paletteReceived = 0 @@ -57,8 +59,8 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { private var paletteDefaultOff = 0 override fun handleIncomingFrame(chunk: DisplayFrame) { - if (chunk.format == DisplayFrame.Format.RGB565 && chunk.rect_width > 0) { - handleRectChunk(chunk) + if (chunk.format == DisplayFrame.Format.RGB565) { + if (rects.handle(chunk)) emitRectFrame(chunk) } else { handleMonoChunk(chunk) } @@ -173,82 +175,15 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { return acceptable } - // ── RGB565 dirty-rect stream (LVGL/MUI devices) ───────────────────────── - // Rects composite into a persistent little-endian RGB565 canvas; frames - // are emitted coalesced so a burst of rects costs one canvas copy. - - private var canvas: ByteArray? = null - private var canvasWidth = 0 - private var canvasHeight = 0 - private var rectBuffer: ByteArray? = null - private var rectReceived = 0 - private var rectFrameId = 0 - - private fun handleRectChunk(chunk: DisplayFrame) { - val data = chunk.data_.toByteArray() - if (chunk.offset == 0) { - rectBuffer = ByteArray(chunk.total_size) - rectFrameId = chunk.frame_id - rectReceived = 0 - } - if (!isAcceptableRectChunk(chunk, data.size)) { - rectBuffer = null - return - } - val buf = rectBuffer ?: return - data.copyInto(buf, chunk.offset) - rectReceived += data.size - if (rectReceived == chunk.total_size) { - compositeRect(chunk, buf) - rectBuffer = null - } - } - - private fun isAcceptableRectChunk(chunk: DisplayFrame, dataSize: Int): Boolean { - val bytes = chunk.rect_width * chunk.rect_height * 2 - val withinPanel = - chunk.width in 1..MAX_PANEL_EDGE && - chunk.height in 1..MAX_PANEL_EDGE && - chunk.rect_x + chunk.rect_width <= chunk.width && - chunk.rect_y + chunk.rect_height <= chunk.height - val inSequence = rectBuffer != null && chunk.frame_id == rectFrameId && chunk.offset == rectReceived - val acceptable = - withinPanel && inSequence && bytes == chunk.total_size && chunk.offset + dataSize <= chunk.total_size - if (!acceptable) { - Logger.w { - "DisplayMirror: dropping bad rect ${chunk.rect_width}x${chunk.rect_height} total=${chunk.total_size}" - } - } - return acceptable - } - - private fun compositeRect(chunk: DisplayFrame, rect: ByteArray) { - if (canvas == null || canvasWidth != chunk.width || canvasHeight != chunk.height) { - canvas = ByteArray(chunk.width * chunk.height * 2) - canvasWidth = chunk.width - canvasHeight = chunk.height - } - val target = canvas ?: return - val rowBytes = chunk.rect_width * 2 - for (row in 0 until chunk.rect_height) { - val src = row * rowBytes - val dst = ((chunk.rect_y + row) * canvasWidth + chunk.rect_x) * 2 - rect.copyInto(target, dst, src, src + rowBytes) - } - // One emission per completed rect: rects are already flush-coalesced - // device-side, and StateFlow conflates under a slow collector. - emitCanvas(chunk.frame_id) - } - - private fun emitCanvas(frameId: Int) { - val target = canvas ?: return + private fun emitRectFrame(chunk: DisplayFrame) { + val pixels = rects.snapshot() ?: return _frame.value = MirrorFrame( - width = canvasWidth, - height = canvasHeight, - frameId = frameId, + width = rects.width, + height = rects.height, + frameId = chunk.frame_id, paletteSignature = 0, - pixels = target.copyOf(), + pixels = pixels, format = MirrorFormat.RGB565, ) } @@ -256,9 +191,7 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { override fun reset() { buffer = null received = 0 - canvas = null - rectBuffer = null - rectReceived = 0 + rects.reset() paletteRegions = mutableListOf() paletteReceived = 0 paletteSignature = 0 @@ -273,9 +206,6 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { // The firmware's region table caps at 48; anything past this is a bug or an attack. const val MAX_PALETTE_REGIONS = 512 - // Sanity bound for RGB565 panels (largest realistic is 800x480). - const val MAX_PANEL_EDGE = 1024 - // MONO_VLSB packs 8 vertically adjacent pixels per byte (one "page" row). const val PIXELS_PER_PAGE = 8 } diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/MirrorRectCompositor.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/MirrorRectCompositor.kt new file mode 100644 index 00000000000..af3d9f77e0f --- /dev/null +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/MirrorRectCompositor.kt @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.core.data.manager + +import co.touchlab.kermit.Logger +import org.meshtastic.proto.DisplayFrame + +private data class RectArea(val x: Int, val y: Int, val width: Int, val height: Int) + +/** + * Reassembles RGB565 dirty-rect chunks (LVGL-based device UIs) and composites them into a persistent little-endian + * RGB565 canvas. Rect geometry is latched from the chunk at offset 0 so a later chunk cannot transpose the blit, and + * every field is validated before anything is allocated — `total_size` is device-controlled. + */ +internal class MirrorRectCompositor { + + var width = 0 + private set + + var height = 0 + private set + + private var canvas: ByteArray? = null + private var buffer: ByteArray? = null + private var received = 0 + private var frameId = 0 + private var area: RectArea? = null + + /** Feeds one chunk; returns true when it completed a rect and the canvas changed. */ + fun handle(chunk: DisplayFrame): Boolean { + val data = chunk.data_.toByteArray() + if (!isAcceptable(chunk, data.size)) { + buffer = null + return false + } + if (chunk.offset == 0) { + buffer = ByteArray(chunk.total_size) + frameId = chunk.frame_id + received = 0 + area = RectArea(chunk.rect_x, chunk.rect_y, rectWidth(chunk), rectHeight(chunk)) + } + return accumulate(chunk, data) + } + + private fun accumulate(chunk: DisplayFrame, data: ByteArray): Boolean { + val buf = buffer ?: return false + data.copyInto(buf, chunk.offset) + received += data.size + val complete = received >= buf.size + if (complete) { + composite(chunk, buf) + buffer = null + } + return complete + } + + /** Snapshot of the composited canvas, or null before the first completed rect. */ + fun snapshot(): ByteArray? = canvas?.copyOf() + + fun reset() { + canvas = null + buffer = null + received = 0 + frameId = 0 + width = 0 + height = 0 + area = null + } + + /** A rect that omits width or height covers the full panel in that axis. */ + private fun rectWidth(chunk: DisplayFrame) = if (chunk.rect_width > 0) chunk.rect_width else chunk.width + + private fun rectHeight(chunk: DisplayFrame) = if (chunk.rect_height > 0) chunk.rect_height else chunk.height + + private fun isAcceptable(chunk: DisplayFrame, dataSize: Int): Boolean { + val expected = if (withinPanel(chunk)) rectWidth(chunk) * rectHeight(chunk) * 2 else -1 + val sized = expected == chunk.total_size && chunk.total_size in 1..MAX_RECT_BYTES + // Continuations must match the buffer allocated at offset 0, not merely their own claim. + val inSequence = + chunk.offset == 0 || + (buffer?.size == chunk.total_size && chunk.frame_id == frameId && chunk.offset == received) + val acceptable = sized && inSequence && chunk.offset + dataSize <= chunk.total_size + if (!acceptable) { + Logger.w { + "DisplayMirror: dropping bad rect ${chunk.rect_width}x${chunk.rect_height} total=${chunk.total_size}" + } + } + return acceptable + } + + /** Subtraction form throughout: `rect_x + rect_width` overflows for hostile values. */ + private fun withinPanel(chunk: DisplayFrame): Boolean { + val w = rectWidth(chunk) + val h = rectHeight(chunk) + return chunk.width in 1..MAX_PANEL_EDGE && + chunk.height in 1..MAX_PANEL_EDGE && + w in 1..chunk.width && + h in 1..chunk.height && + chunk.rect_x in 0..(chunk.width - w) && + chunk.rect_y in 0..(chunk.height - h) + } + + private fun composite(chunk: DisplayFrame, rect: ByteArray) { + if (canvas == null || width != chunk.width || height != chunk.height) { + canvas = ByteArray(chunk.width * chunk.height * 2) + width = chunk.width + height = chunk.height + } + val target = canvas ?: return + val blit = area ?: return + val rowBytes = blit.width * 2 + for (row in 0 until blit.height) { + val src = row * rowBytes + val dst = ((blit.y + row) * width + blit.x) * 2 + rect.copyInto(target, dst, src, src + rowBytes) + } + } + + private companion object { + // Sanity bound for RGB565 panels (largest realistic is 800x480). + const val MAX_PANEL_EDGE = 1024 + + // A single rect can at most cover the largest panel we accept. + const val MAX_RECT_BYTES = MAX_PANEL_EDGE * MAX_PANEL_EDGE * 2 + } +} diff --git a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt index 652b89a4424..cf01109776e 100644 --- a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt +++ b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt @@ -17,6 +17,7 @@ package org.meshtastic.core.data.manager import okio.ByteString.Companion.toByteString +import org.meshtastic.core.repository.MirrorFormat import org.meshtastic.proto.DisplayFrame import org.meshtastic.proto.DisplayPalette import kotlin.test.Test @@ -204,6 +205,82 @@ class DisplayMirrorManagerImplTest { assertNull(manager.frame.value) } + // ── RGB565 dirty-rect path ────────────────────────────────────────────── + + private fun rectChunk( + frameId: Int = 1, + offset: Int = 0, + data: ByteArray, + total: Int = 200, + width: Int = WIDTH, + height: Int = HEIGHT, + rectX: Int = 0, + rectY: Int = 0, + rectW: Int = 10, + rectH: Int = 10, + ) = DisplayFrame( + width = width, + height = height, + format = DisplayFrame.Format.RGB565, + frame_id = frameId, + offset = offset, + total_size = total, + rect_x = rectX, + rect_y = rectY, + rect_width = rectW, + rect_height = rectH, + data_ = data.toByteString(), + ) + + @Test + fun `composites a completed rect into an RGB565 frame`() { + manager.handleIncomingFrame(rectChunk(data = bytes(200, 0x11))) + + val frame = manager.frame.value!! + assertEquals(MirrorFormat.RGB565, frame.format) + assertEquals(WIDTH * HEIGHT * 2, frame.pixels.size) + } + + @Test + fun `rejects a rect whose total size does not match its geometry`() { + manager.handleIncomingFrame(rectChunk(total = 999, data = bytes(200, 1))) + + assertNull(manager.frame.value) + } + + @Test + fun `rejects a rect that would overflow the panel`() { + manager.handleIncomingFrame(rectChunk(rectX = WIDTH - 2, data = bytes(200, 1))) + manager.handleIncomingFrame(rectChunk(rectY = Int.MAX_VALUE, data = bytes(200, 1))) + + assertNull(manager.frame.value) + } + + @Test + fun `rejects an oversized rect without allocating`() { + manager.handleIncomingFrame( + rectChunk( + width = 4000, + height = 4000, + rectW = 4000, + rectH = 4000, + total = Int.MAX_VALUE, + data = bytes(8, 1), + ), + ) + + assertNull(manager.frame.value) + } + + @Test + fun `continuation chunk cannot grow the rect buffer`() { + manager.handleIncomingFrame(rectChunk(offset = 0, total = 200, data = bytes(100, 1))) + // Same geometry claim, larger total: must not write past the allocation. + manager.handleIncomingFrame(rectChunk(offset = 100, total = 800, rectW = 20, rectH = 20, data = bytes(100, 2))) + + assertNull(manager.frame.value) + } + private companion object { const val WIDTH = 128 const val HEIGHT = 64 diff --git a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt index cdfd971b718..ba9bb59bb10 100644 --- a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt +++ b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DisplayMirrorManager.kt @@ -89,6 +89,7 @@ data class MirrorFrame( result = 31 * result + height result = 31 * result + frameId result = 31 * result + paletteSignature + result = 31 * result + format.ordinal result = 31 * result + pixels.contentHashCode() return result } diff --git a/core/resources/src/commonMain/composeResources/values/strings.xml b/core/resources/src/commonMain/composeResources/values/strings.xml index f053696e080..a315669226b 100644 --- a/core/resources/src/commonMain/composeResources/values/strings.xml +++ b/core/resources/src/commonMain/composeResources/values/strings.xml @@ -1238,7 +1238,6 @@ No frame received yet — enable mirroring or tap Refresh. Not connected to a device. Mirror off - Mirror only: remote input is not supported for this device UI yet. Presets Module configuration Modules already unlocked diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index be49f3f9383..42b3f949388 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -57,6 +57,9 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.input.key.Key import androidx.compose.ui.input.key.KeyEventType +import androidx.compose.ui.input.key.isAltPressed +import androidx.compose.ui.input.key.isCtrlPressed +import androidx.compose.ui.input.key.isMetaPressed import androidx.compose.ui.input.key.key import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.type @@ -310,6 +313,9 @@ private fun MirrorControlHints(focused: Boolean, hasTouch: Boolean, onToggleKeyb */ private fun Modifier.remoteKeyInput(onEvent: (Int) -> Unit, onChar: (Int) -> Unit): Modifier = onPreviewKeyEvent { event -> + // Never swallow host shortcuts (Cmd+Q, Ctrl+C, Alt+Tab): those belong to + // the desktop, not the mirrored device. + if (event.isCtrlPressed || event.isMetaPressed || event.isAltPressed) return@onPreviewKeyEvent false val down = event.type == KeyEventType.KeyDown val mapped = keyToInputEvent(event.key) when { @@ -398,7 +404,7 @@ private fun BackKey(enabled: Boolean, onBack: () -> Unit) { Text( text = stringResource(Res.string.mirror_back), style = MaterialTheme.typography.labelMedium, - color = contentColorFor(enabled), + color = dpadContentColor(enabled), ) } } diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt index 11098aa140a..1616dd83a66 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt @@ -71,5 +71,5 @@ internal fun keyToInputEvent(key: Key): Int? = when (key) { } @Composable -internal fun contentColorFor(enabled: Boolean): Color = +internal fun dpadContentColor(enabled: Boolean): Color = if (enabled) MaterialTheme.colorScheme.onSecondaryContainer else MaterialTheme.colorScheme.onSurfaceVariant diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt index 0c69d608f1d..4260ebec363 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt @@ -47,8 +47,9 @@ private val MAX_CANVAS_WIDTH = 512.dp private const val PIXELS_PER_PAGE = 8 /** - * Renders a MONO_VLSB 1bpp framebuffer once per frame into a 1:1 [ImageBitmap] and scales it up with nearest-neighbor - * filtering — crisp device pixels, no fractional-scale seams, one pixel walk per frame instead of per recomposition. + * Renders a device frame — 1bpp MONO_VLSB or RGB565 — once per frame into a 1:1 [ImageBitmap] and scales it up with + * nearest-neighbor filtering — crisp device pixels, no fractional-scale seams, one pixel walk per frame instead of per + * recomposition. */ @Composable internal fun MirrorFrameImage(frame: MirrorFrame, palette: MirrorPalette?, modifier: Modifier = Modifier) { @@ -77,6 +78,9 @@ internal class ResolvedRegion( val off: Color, ) +// Sentinel for "no run started"; 0 is black, which is the skipped background. +private const val NO_RUN = -1 + /** Reads one little-endian RGB565 value from a packed pixel row. */ @Suppress("MagicNumber") private fun leRgb565At(pixels: ByteArray, index: Int): Int = @@ -134,23 +138,24 @@ private fun renderRgb565Frame(frame: MirrorFrame): ImageBitmap { for (y in 0 until frame.height) { val rowBase = y * frame.width * 2 var runStart = 0 - var runColor: Color? = null + // Track the raw RGB565 value: Color is a value class, so a nullable + // one would box on every pixel comparison. + var runValue = NO_RUN fun flush(endExclusive: Int) { - val color = runColor - if (color != null && color != Color.Black) { + if (runValue > 0) { drawRect( - color = color, + color = rgb565ToColor(runValue), topLeft = Offset(runStart.toFloat(), y.toFloat()), size = Size((endExclusive - runStart).toFloat(), 1f), ) } } for (x in 0 until frame.width) { - val color = rgb565ToColor(leRgb565At(frame.pixels, rowBase + x * 2)) - if (color != runColor) { + val value = leRgb565At(frame.pixels, rowBase + x * 2) + if (value != runValue) { flush(x) runStart = x - runColor = color + runValue = value } } flush(frame.width) From a84ec27d9e0d0d2ce64711ce4ebd109f5e7e3696 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Tue, 8 Sep 2026 17:42:34 -0500 Subject: [PATCH 14/34] fix(mirror): honour managed mode on the Debug Panel route The Debug Panel is the one Settings route deliberately exempt from the `connected && !isManaged` gate every sibling carries, justified by a comment saying it "reads app-local logs only". The Mirror tab put an admin write (set_display_mirror) and arbitrary input injection on that route, so managed mode - which exists to lock a device out of configuration - was bypassed entirely. Enforced in the ViewModel, because the route will not do it: arming, one-shot frame requests, key, character and touch sends are all refused while managed. Disarming still goes through, so a stream already running is torn down when managed mode arrives mid-session. The UI gates on `active = connected && !managed` rather than offering controls that silently do nothing, and the RadioConfig comment now says what the route actually guarantees, since its old wording is what let this through. MirrorHeaderRow is split out of DisplayMirrorContent, which was at detekt's LongMethod limit and could not absorb another line. --- .../settings/debugging/DisplayMirror.kt | 59 +++++++++++-------- .../debugging/DisplayMirrorViewModel.kt | 36 +++++++++-- .../feature/settings/radio/RadioConfig.kt | 4 +- 3 files changed, 69 insertions(+), 30 deletions(-) diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index 42b3f949388..322fa8639a5 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -101,6 +101,31 @@ private val SWIPE_THRESHOLD = 48.dp // Mirror + D-pad fit comfortably side by side above this content width. private val SIDE_BY_SIDE_MIN_WIDTH = 760.dp +/** Toggle, one-shot refresh, and the live frame's geometry. Split out to keep [DisplayMirrorContent] readable. */ +@Composable +private fun MirrorHeaderRow( + mirroring: Boolean, + active: Boolean, + frame: MirrorFrame?, + onToggle: (Boolean) -> Unit, + onRefresh: () -> Unit, +) { + Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp)) { + Switch(checked = mirroring, onCheckedChange = onToggle, enabled = active) + Text( + text = stringResource(if (mirroring) Res.string.mirror_active else Res.string.mirror_off), + style = MaterialTheme.typography.titleMedium, + ) + OutlinedButton(onClick = onRefresh, enabled = active) { Text(stringResource(Res.string.refresh)) } + if (frame != null) { + Text( + text = stringResource(Res.string.mirror_frame_info, frame.width, frame.height, frame.frameId), + style = MaterialTheme.typography.labelSmall, + ) + } + } +} + /** Live view of the connected device's screen, with remote D-pad, keyboard, and touch control. */ @Composable fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirrorViewModel = koinViewModel()) { @@ -109,6 +134,7 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror val mirroring by viewModel.mirroring.collectAsStateWithLifecycle() val connected by viewModel.connected.collectAsStateWithLifecycle() val displayInfo by viewModel.displayInfo.collectAsStateWithLifecycle() + val active = connected && !viewModel.managed.collectAsStateWithLifecycle().value // Don't leave the device streaming to a hidden tab or abandoned screen. DisposableEffect(Unit) { onDispose { viewModel.stopMirroring() } } @@ -119,28 +145,13 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror verticalArrangement = Arrangement.spacedBy(12.dp), ) { val currentFrame = frame - Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(8.dp)) { - Switch(checked = mirroring, onCheckedChange = viewModel::setMirror, enabled = connected) - Text( - text = stringResource(if (mirroring) Res.string.mirror_active else Res.string.mirror_off), - style = MaterialTheme.typography.titleMedium, - ) - OutlinedButton(onClick = viewModel::requestFrame, enabled = connected) { - Text(stringResource(Res.string.refresh)) - } - if (currentFrame != null) { - Text( - text = - stringResource( - Res.string.mirror_frame_info, - currentFrame.width, - currentFrame.height, - currentFrame.frameId, - ), - style = MaterialTheme.typography.labelSmall, - ) - } - } + MirrorHeaderRow( + mirroring = mirroring, + active = active, + frame = currentFrame, + onToggle = viewModel::setMirror, + onRefresh = viewModel::requestFrame, + ) if (displayInfo?.panel_class == DisplayInfo.PanelClass.EINK) { Text(text = stringResource(Res.string.mirror_eink_hint), style = MaterialTheme.typography.labelSmall) @@ -154,14 +165,14 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror currentFrame == null -> { Text(text = stringResource(Res.string.mirror_no_frame)) - DpadCluster(enabled = connected, onEvent = viewModel::sendKey) + DpadCluster(enabled = active, onEvent = viewModel::sendKey) } else -> MirrorWithControls( currentFrame, palette, - enabled = connected, + enabled = active, hasTouch = displayInfo?.has_touch == true, onEvent = viewModel::sendKey, onTouch = viewModel::sendTouch, diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorViewModel.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorViewModel.kt index 699adc37fd5..b3ae14090b6 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorViewModel.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorViewModel.kt @@ -33,6 +33,7 @@ import org.meshtastic.core.repository.DisplayMirrorManager import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.core.repository.MirrorPalette import org.meshtastic.core.repository.NodeRepository +import org.meshtastic.core.repository.RadioConfigRepository import org.meshtastic.proto.DisplayInfo @KoinViewModel @@ -41,6 +42,7 @@ class DisplayMirrorViewModel( connectionStateProvider: ConnectionStateProvider, nodeRepository: NodeRepository, private val adminController: AdminController, + radioConfigRepository: RadioConfigRepository, ) : ViewModel() { val frame: StateFlow = displayMirrorManager.frame @@ -56,6 +58,16 @@ class DisplayMirrorViewModel( val displayInfo: StateFlow = nodeRepository.ourNodeInfo.map { it?.metadata?.display }.stateIn(viewModelScope, SharingStarted.Eagerly, null) + /** + * Managed mode locks the device out of configuration, and the mirror is not a read-only view: arming it is an admin + * write and the controls inject input. The Debug Panel route it lives on is deliberately exempt from the gate every + * other settings route carries, so the restriction has to be enforced here. + */ + val managed: StateFlow = + radioConfigRepository.localConfigFlow + .map { it.security?.is_managed == true } + .stateIn(viewModelScope, SharingStarted.Eagerly, false) + private val _mirroring = MutableStateFlow(false) val mirroring: StateFlow = _mirroring.asStateFlow() @@ -72,22 +84,38 @@ class DisplayMirrorViewModel( } } } + // Managed mode can arrive mid-session with a stream already live; tear it down when it does. + viewModelScope.launch { managed.collect { if (it && _mirroring.value) setMirror(false) } } } fun setMirror(enabled: Boolean) { + // Disarming is always allowed - it is how a live stream is torn down when managed mode arrives. + if (enabled && managed.value) return adminController.setDisplayMirror(enabled) _mirroring.value = enabled } - fun requestFrame() = adminController.requestDisplayFrame() + fun requestFrame() { + if (managed.value) return + adminController.requestDisplayFrame() + } - fun sendKey(eventCode: Int) = adminController.sendInputEvent(eventCode) + fun sendKey(eventCode: Int) { + if (managed.value) return + adminController.sendInputEvent(eventCode) + } /** Forwards a typed character; the device UI receives it as a key press rather than a navigation event. */ - fun sendChar(codePoint: Int) = adminController.sendInputEvent(INPUT_ANYKEY, kbChar = codePoint) + fun sendChar(codePoint: Int) { + if (managed.value) return + adminController.sendInputEvent(INPUT_ANYKEY, kbChar = codePoint) + } /** Forwards a tap/long-press on the mirrored image as a device touch event with panel coordinates. */ - fun sendTouch(eventCode: Int, x: Int, y: Int) = adminController.sendInputEvent(eventCode, touchX = x, touchY = y) + fun sendTouch(eventCode: Int, x: Int, y: Int) { + if (managed.value) return + adminController.sendInputEvent(eventCode, touchX = x, touchY = y) + } /** Stops a live stream when the mirror UI goes away; safe to call redundantly. */ fun stopMirroring() { diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/RadioConfig.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/RadioConfig.kt index b0036a16917..6550f061be6 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/RadioConfig.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/radio/RadioConfig.kt @@ -274,8 +274,8 @@ private fun AdvancedSection(isManaged: Boolean, isOtaCapable: Boolean, enabled: onClick = { onNavigate(DiscoveryRoute.DiscoveryGraph) }, ) - // Always enabled: the Debug Panel reads app-local logs only — no radio connection, - // pending config response, or managed-mode restriction applies to it. + // Always enabled so logs stay reachable with no radio attached. Anything on this route that + // is NOT read-only must gate itself: it does not inherit `enabled` (see DisplayMirrorViewModel). ListItem( text = stringResource(Res.string.debug_panel), leadingIcon = MeshtasticIcons.BugReport, From 484a5cc61378203a4213138170e23fec09345344 Mon Sep 17 00:00:00 2001 From: James Rich Date: Sat, 19 Sep 2026 17:03:00 -0500 Subject: [PATCH 15/34] fix(mirror): follow main after merge --- .../manager/DisplayMirrorManagerImplTest.kt | 119 ++++++++++++------ .../core/service/AdminControllerImpl.kt | 27 ++-- 2 files changed, 96 insertions(+), 50 deletions(-) diff --git a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt index cf01109776e..3ed9bdc1dc1 100644 --- a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt +++ b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt @@ -38,18 +38,30 @@ class DisplayMirrorManagerImplTest { width: Int = WIDTH, height: Int = HEIGHT, format: DisplayFrame.Format = DisplayFrame.Format.MONO_VLSB, - ) = DisplayFrame( - width = width, - height = height, - format = format, - frame_id = frameId, - offset = offset, - total_size = total, - data_ = data.toByteString(), - ) + ) = DisplayFrame.Builder() + .also { wb -> + wb.width = width + wb.height = height + wb.format = format + wb.frame_id = frameId + wb.offset = offset + wb.total_size = total + wb.data_ = data.toByteString() + } + .build() private fun bytes(size: Int, fill: Int) = ByteArray(size) { fill.toByte() } + private fun palette(signature: Int, regionOffset: Int, regionTotal: Int, regions: List) = + DisplayPalette.Builder() + .also { wb -> + wb.signature = signature + wb.region_offset = regionOffset + wb.region_total = regionTotal + wb.regions = regions + } + .build() + @Test fun `reassembles a three-chunk frame in order`() { manager.handleIncomingFrame(chunk(offset = 0, data = bytes(384, 1))) @@ -131,21 +143,32 @@ class DisplayMirrorManagerImplTest { @Test fun `reassembles a two-chunk palette and tags frames with its signature`() { val region = - DisplayPalette.ColorRegion(x = 0, y = 0, width = 128, height = 16, on_color = 0xF800, off_color = 0) + DisplayPalette.ColorRegion.Builder() + .also { wb -> + wb.x = 0 + wb.y = 0 + wb.width = 128 + wb.height = 16 + wb.on_color = 0xF800 + wb.off_color = 0 + } + .build() manager.handleIncomingPalette( - DisplayPalette( - signature = 42, - default_on_color = 0xFFFF, - default_off_color = 0, - region_offset = 0, - region_total = 3, - regions = listOf(region, region), - ), + DisplayPalette.Builder() + .also { wb -> + wb.signature = 42 + wb.default_on_color = 0xFFFF + wb.default_off_color = 0 + wb.region_offset = 0 + wb.region_total = 3 + wb.regions = listOf(region, region) + } + .build(), ) assertNull(manager.palette.value) manager.handleIncomingPalette( - DisplayPalette(signature = 42, region_offset = 2, region_total = 3, regions = listOf(region)), + palette(signature = 42, regionOffset = 2, regionTotal = 3, regions = listOf(region)), ) val palette = manager.palette.value!! @@ -156,18 +179,26 @@ class DisplayMirrorManagerImplTest { @Test fun `out-of-sequence palette chunk is dropped until a restart`() { - val region = DisplayPalette.ColorRegion(x = 0, y = 0, width = 8, height = 8) + val region = + DisplayPalette.ColorRegion.Builder() + .also { wb -> + wb.x = 0 + wb.y = 0 + wb.width = 8 + wb.height = 8 + } + .build() manager.handleIncomingPalette( - DisplayPalette(signature = 7, region_offset = 0, region_total = 2, regions = listOf(region)), + palette(signature = 7, regionOffset = 0, regionTotal = 2, regions = listOf(region)), ) manager.handleIncomingPalette( - DisplayPalette(signature = 7, region_offset = 5, region_total = 2, regions = listOf(region)), + palette(signature = 7, regionOffset = 5, regionTotal = 2, regions = listOf(region)), ) assertNull(manager.palette.value) // A fresh offset-0 chunk recovers manager.handleIncomingPalette( - DisplayPalette(signature = 8, region_offset = 0, region_total = 1, regions = listOf(region)), + palette(signature = 8, regionOffset = 0, regionTotal = 1, regions = listOf(region)), ) assertEquals(8, manager.palette.value?.signature) } @@ -176,7 +207,7 @@ class DisplayMirrorManagerImplTest { fun `reset clears frames palettes and partial state`() { manager.handleIncomingFrame(chunk(width = 64, height = 32, total = 256, data = bytes(256, 7))) manager.handleIncomingPalette( - DisplayPalette(signature = 9, region_offset = 0, region_total = 0, regions = emptyList()), + palette(signature = 9, regionOffset = 0, regionTotal = 0, regions = emptyList()), ) manager.reset() @@ -187,9 +218,17 @@ class DisplayMirrorManagerImplTest { @Test fun `rejects palettes past the region cap`() { - val region = DisplayPalette.ColorRegion(x = 0, y = 0, width = 8, height = 8) + val region = + DisplayPalette.ColorRegion.Builder() + .also { wb -> + wb.x = 0 + wb.y = 0 + wb.width = 8 + wb.height = 8 + } + .build() manager.handleIncomingPalette( - DisplayPalette(signature = 3, region_offset = 0, region_total = 100_000, regions = listOf(region)), + palette(signature = 3, regionOffset = 0, regionTotal = 100_000, regions = listOf(region)), ) assertNull(manager.palette.value) @@ -218,19 +257,21 @@ class DisplayMirrorManagerImplTest { rectY: Int = 0, rectW: Int = 10, rectH: Int = 10, - ) = DisplayFrame( - width = width, - height = height, - format = DisplayFrame.Format.RGB565, - frame_id = frameId, - offset = offset, - total_size = total, - rect_x = rectX, - rect_y = rectY, - rect_width = rectW, - rect_height = rectH, - data_ = data.toByteString(), - ) + ) = DisplayFrame.Builder() + .also { wb -> + wb.width = width + wb.height = height + wb.format = DisplayFrame.Format.RGB565 + wb.frame_id = frameId + wb.offset = offset + wb.total_size = total + wb.rect_x = rectX + wb.rect_y = rectY + wb.rect_width = rectW + wb.rect_height = rectH + wb.data_ = data.toByteString() + } + .build() @Test fun `composites a completed rect into an RGB565 frame`() { diff --git a/core/service/src/commonMain/kotlin/org/meshtastic/core/service/AdminControllerImpl.kt b/core/service/src/commonMain/kotlin/org/meshtastic/core/service/AdminControllerImpl.kt index c35fa077260..883d0d76ce7 100644 --- a/core/service/src/commonMain/kotlin/org/meshtastic/core/service/AdminControllerImpl.kt +++ b/core/service/src/commonMain/kotlin/org/meshtastic/core/service/AdminControllerImpl.kt @@ -140,24 +140,29 @@ internal class AdminControllerImpl( } override fun setDisplayMirror(enabled: Boolean) { - commandSender.sendAdminImmediate(myNodeNum) { AdminMessage(set_display_mirror = enabled) } + commandSender.sendAdminImmediate(myNodeNum) { + AdminMessage.Builder().also { wb -> wb.set_display_mirror = enabled }.build() + } } override fun requestDisplayFrame() { - commandSender.sendAdminImmediate(myNodeNum) { AdminMessage(get_display_frame_request = true) } + commandSender.sendAdminImmediate(myNodeNum) { + AdminMessage.Builder().also { wb -> wb.get_display_frame_request = true }.build() + } } override fun sendInputEvent(eventCode: Int, kbChar: Int, touchX: Int, touchY: Int) { + val inputEvent = + AdminMessage.InputEvent.Builder() + .also { wb -> + wb.event_code = eventCode + wb.kb_char = kbChar + wb.touch_x = touchX + wb.touch_y = touchY + } + .build() commandSender.sendAdminImmediate(myNodeNum) { - AdminMessage( - send_input_event = - AdminMessage.InputEvent( - event_code = eventCode, - kb_char = kbChar, - touch_x = touchX, - touch_y = touchY, - ), - ) + AdminMessage.Builder().also { wb -> wb.send_input_event = inputEvent }.build() } } From 78b020cdd789f1b13ae41a4eaba8b0615c7aa93f Mon Sep 17 00:00:00 2001 From: James Rich Date: Fri, 2 Oct 2026 13:16:06 -0500 Subject: [PATCH 16/34] style(mirror): apply spotless to the mirror manager test --- .../manager/DisplayMirrorManagerImplTest.kt | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt index 3ed9bdc1dc1..3275a82e9da 100644 --- a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt +++ b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt @@ -52,15 +52,19 @@ class DisplayMirrorManagerImplTest { private fun bytes(size: Int, fill: Int) = ByteArray(size) { fill.toByte() } - private fun palette(signature: Int, regionOffset: Int, regionTotal: Int, regions: List) = - DisplayPalette.Builder() - .also { wb -> - wb.signature = signature - wb.region_offset = regionOffset - wb.region_total = regionTotal - wb.regions = regions - } - .build() + private fun palette( + signature: Int, + regionOffset: Int, + regionTotal: Int, + regions: List, + ) = DisplayPalette.Builder() + .also { wb -> + wb.signature = signature + wb.region_offset = regionOffset + wb.region_total = regionTotal + wb.regions = regions + } + .build() @Test fun `reassembles a three-chunk frame in order`() { @@ -206,9 +210,7 @@ class DisplayMirrorManagerImplTest { @Test fun `reset clears frames palettes and partial state`() { manager.handleIncomingFrame(chunk(width = 64, height = 32, total = 256, data = bytes(256, 7))) - manager.handleIncomingPalette( - palette(signature = 9, regionOffset = 0, regionTotal = 0, regions = emptyList()), - ) + manager.handleIncomingPalette(palette(signature = 9, regionOffset = 0, regionTotal = 0, regions = emptyList())) manager.reset() From f10b7b940478105f3cac37b69a355de7b8348f21 Mon Sep 17 00:00:00 2001 From: James Rich Date: Fri, 2 Oct 2026 19:16:09 -0500 Subject: [PATCH 17/34] feat(mirror): type on the device through the shared keyboard sink The mirror's key capture was a focusable box, so it could never raise the soft keyboard. It now uses core/ui's RemoteKeyboardSink: the Keyboard chip raises the IME, typed text reaches the device one code point per kb_char (emoji included), Enter is OK, Esc is Back, Backspace and Tab are typed characters, and Ctrl/Alt chords stay with the host. The scroll column pads for the IME so the D-pad stays visible. Space now types a space instead of meaning OK. --- .../settings/debugging/DisplayMirror.kt | 75 +++++++------------ .../settings/debugging/DisplayMirrorUtils.kt | 50 ++++++++----- .../debugging/DisplayMirrorInputTest.kt | 61 +++++++++++++++ 3 files changed, 119 insertions(+), 67 deletions(-) create mode 100644 feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorInputTest.kt diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index 322fa8639a5..a6dcc4be76b 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -19,7 +19,6 @@ package org.meshtastic.feature.settings.debugging import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.combinedClickable -import androidx.compose.foundation.focusable import androidx.compose.foundation.gestures.detectDragGestures import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.layout.Arrangement @@ -28,6 +27,7 @@ import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size @@ -50,20 +50,10 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.hapticfeedback.HapticFeedbackType -import androidx.compose.ui.input.key.Key -import androidx.compose.ui.input.key.KeyEventType -import androidx.compose.ui.input.key.isAltPressed -import androidx.compose.ui.input.key.isCtrlPressed -import androidx.compose.ui.input.key.isMetaPressed -import androidx.compose.ui.input.key.key -import androidx.compose.ui.input.key.onPreviewKeyEvent -import androidx.compose.ui.input.key.type -import androidx.compose.ui.input.key.utf16CodePoint import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalHapticFeedback @@ -86,6 +76,9 @@ import org.meshtastic.core.resources.mirror_no_frame import org.meshtastic.core.resources.mirror_not_connected import org.meshtastic.core.resources.mirror_off import org.meshtastic.core.resources.refresh +import org.meshtastic.core.ui.input.RemoteKey +import org.meshtastic.core.ui.input.RemoteKeyHandler +import org.meshtastic.core.ui.input.RemoteKeyboardSink import org.meshtastic.proto.DisplayInfo // M3 comfortable target for remote-control keys (48dp minimum + breathing room). @@ -140,7 +133,7 @@ fun DisplayMirrorContent(modifier: Modifier = Modifier, viewModel: DisplayMirror DisposableEffect(Unit) { onDispose { viewModel.stopMirroring() } } Column( - modifier = modifier.fillMaxSize().verticalScroll(rememberScrollState()).padding(16.dp), + modifier = modifier.fillMaxSize().imePadding().verticalScroll(rememberScrollState()).padding(16.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(12.dp), ) { @@ -226,9 +219,10 @@ private fun MirrorWithControls( } /** - * The live mirror plus its direct input affordances: a Keyboard chip toggles key capture (arrows, Enter/Space = OK, - * Esc/Backspace = Back), swiping in a cardinal direction sends one direction event, and on touch-capable devices - * tapping or long-pressing the image forwards real touch coordinates; elsewhere a tap toggles capture. + * The live mirror plus its direct input affordances: a Keyboard chip toggles key capture, which raises the soft + * keyboard (arrows navigate, Enter = OK, Esc = Back, typed text reaches the device as characters), swiping in a + * cardinal direction sends one direction event, and on touch-capable devices tapping or long-pressing the image + * forwards real touch coordinates; elsewhere a tap toggles capture. */ @Composable @Suppress("LongParameterList") @@ -256,11 +250,7 @@ private fun MirrorSurface( ) { Box( modifier = - Modifier.focusRequester(focusRequester) - .onFocusChanged { focused = it.isFocused } - .focusable() - .remoteKeyInput(onEvent, onChar) - .pointerInput(hasTouch) { + Modifier.pointerInput(hasTouch) { detectTapGestures( onTap = { offset -> if (hasTouch) { @@ -290,6 +280,11 @@ private fun MirrorSurface( .border(width = 2.dp, color = if (focused) focusColor else Color.Transparent), ) { MirrorFrameImage(frame, palette) + RemoteKeyboardSink( + focusRequester = focusRequester, + handler = mirrorKeyHandler(onEvent, onChar), + modifier = Modifier.onFocusChanged { focused = it.isFocused }, + ) } MirrorControlHints(focused = focused, hasTouch = hasTouch, onToggleKeyboard = { toggleKeyboard() }) } @@ -318,36 +313,20 @@ private fun MirrorControlHints(focused: Boolean, hasTouch: Boolean, onToggleKeyb } /** - * Sends captured key presses to the device: mapped navigation keys as input events, Backspace and printable characters - * as typed characters. Handled keys are consumed on both down and up so nothing leaks into the surrounding scroll - * container. + * Maps the keyboard sink onto device input: navigation keys become input events, typed text and Backspace/Tab become + * characters. Ctrl/Alt chords are left to the host, so desktop shortcuts never reach the device. */ -private fun Modifier.remoteKeyInput(onEvent: (Int) -> Unit, onChar: (Int) -> Unit): Modifier = - onPreviewKeyEvent { event -> - // Never swallow host shortcuts (Cmd+Q, Ctrl+C, Alt+Tab): those belong to - // the desktop, not the mirrored device. - if (event.isCtrlPressed || event.isMetaPressed || event.isAltPressed) return@onPreviewKeyEvent false - val down = event.type == KeyEventType.KeyDown - val mapped = keyToInputEvent(event.key) - when { - mapped != null -> { - if (down) onEvent(mapped) - true - } - - event.key == Key.Backspace -> { - if (down) onChar(CHAR_BACKSPACE) - true - } - - event.utf16CodePoint >= FIRST_PRINTABLE_CHAR -> { - if (down) onChar(event.utf16CodePoint) - true - } - - else -> false +private fun mirrorKeyHandler(onEvent: (Int) -> Unit, onChar: (Int) -> Unit) = RemoteKeyHandler( + onText = { text -> forEachCodePoint(text, onChar) }, + onEnter = { onEvent(INPUT_SELECT) }, + onBackspace = { onChar(CHAR_BACKSPACE) }, + onKey = { key -> + when (key) { + RemoteKey.TAB -> onChar(CHAR_TAB) + else -> key.toInputEvent()?.let(onEvent) } - } + }, +) /** Converts a completed drag into one direction event along its dominant axis, ignoring short accidental swipes. */ private fun Modifier.swipeToDirection(onEvent: (Int) -> Unit): Modifier = pointerInput(Unit) { diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt index 1616dd83a66..c0f67ebb7b6 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt @@ -20,8 +20,8 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color -import androidx.compose.ui.input.key.Key import org.meshtastic.core.repository.MirrorFrame +import org.meshtastic.core.ui.input.RemoteKey // Firmware input_broker_event codes (src/input/InputBroker.h). USER_PRESS is // what physical touch drivers emit for a tap, with touch coordinates attached. @@ -41,8 +41,8 @@ internal const val INPUT_ANYKEY = 0xFF // rather than navigating back (which is what Esc is for). internal const val CHAR_BACKSPACE = 8 -// Below this, key events are control codes rather than typable text. -internal const val FIRST_PRINTABLE_CHAR = 32 +// LVGL's next-focus key value, typed as a character like Backspace. +internal const val CHAR_TAB = 9 /** Scales a tap position on the scaled-up mirror image back to panel pixel coordinates. */ internal fun Offset.toDeviceX(boxWidthPx: Int, frame: MirrorFrame): Int = @@ -51,25 +51,37 @@ internal fun Offset.toDeviceX(boxWidthPx: Int, frame: MirrorFrame): Int = internal fun Offset.toDeviceY(boxHeightPx: Int, frame: MirrorFrame): Int = (y / boxHeightPx * frame.height).toInt().coerceIn(0, frame.height - 1) -internal fun keyToInputEvent(key: Key): Int? = when (key) { - Key.DirectionUp -> INPUT_UP - - Key.DirectionDown -> INPUT_DOWN - - Key.DirectionLeft -> INPUT_LEFT - - Key.DirectionRight -> INPUT_RIGHT - - Key.Enter, - Key.NumPadEnter, - Key.Spacebar, - -> INPUT_SELECT - - Key.Escape -> INPUT_BACK - +/** The device navigation event for a key the mirror forwards; null for keys a device UI has no use for. */ +internal fun RemoteKey.toInputEvent(): Int? = when (this) { + RemoteKey.UP -> INPUT_UP + RemoteKey.DOWN -> INPUT_DOWN + RemoteKey.LEFT -> INPUT_LEFT + RemoteKey.RIGHT -> INPUT_RIGHT + RemoteKey.ESCAPE -> INPUT_BACK else -> null } +/** Calls [action] with each Unicode code point of [text], joining surrogate pairs so one character is one kb_char. */ +internal fun forEachCodePoint(text: String, action: (Int) -> Unit) { + var i = 0 + while (i < text.length) { + val c = text[i] + val next = text.getOrNull(i + 1) + if (c.isHighSurrogate() && next != null && next.isLowSurrogate()) { + action(SUPPLEMENTARY_BASE + ((c.code - HIGH_SURROGATE_BASE) shl SURROGATE_SHIFT) + (next.code - LOW_SURROGATE_BASE)) + i += 2 + } else { + action(c.code) + i++ + } + } +} + +private const val SUPPLEMENTARY_BASE = 0x10000 +private const val HIGH_SURROGATE_BASE = 0xD800 +private const val LOW_SURROGATE_BASE = 0xDC00 +private const val SURROGATE_SHIFT = 10 + @Composable internal fun dpadContentColor(enabled: Boolean): Color = if (enabled) MaterialTheme.colorScheme.onSecondaryContainer else MaterialTheme.colorScheme.onSurfaceVariant diff --git a/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorInputTest.kt b/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorInputTest.kt new file mode 100644 index 00000000000..70d71b76fa0 --- /dev/null +++ b/feature/settings/src/commonTest/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorInputTest.kt @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.settings.debugging + +import org.meshtastic.core.ui.input.RemoteKey +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull + +class DisplayMirrorInputTest { + + private fun codePoints(text: String): List = mutableListOf().also { out -> + forEachCodePoint(text) { out += it } + } + + @Test + fun plainTextIsOneCodePointPerCharacter() { + assertEquals(listOf('h'.code, 'i'.code, ' '.code), codePoints("hi ")) + } + + @Test + fun aSurrogatePairIsOneCodePoint() { + assertEquals(listOf(0x1F600), codePoints("😀")) + assertEquals(listOf('a'.code, 0x1F600, 'b'.code), codePoints("a😀b")) + } + + @Test + fun aLoneSurrogatePassesThroughUnchanged() { + assertEquals(listOf(0xD83D, 'x'.code), codePoints("\uD83Dx")) + } + + @Test + fun navigationKeysMapToDeviceEvents() { + assertEquals(INPUT_UP, RemoteKey.UP.toInputEvent()) + assertEquals(INPUT_DOWN, RemoteKey.DOWN.toInputEvent()) + assertEquals(INPUT_LEFT, RemoteKey.LEFT.toInputEvent()) + assertEquals(INPUT_RIGHT, RemoteKey.RIGHT.toInputEvent()) + assertEquals(INPUT_BACK, RemoteKey.ESCAPE.toInputEvent()) + } + + @Test + fun terminalOnlyKeysMapToNothing() { + assertNull(RemoteKey.HOME.toInputEvent()) + assertNull(RemoteKey.PAGE_DOWN.toInputEvent()) + assertNull(RemoteKey.DELETE.toInputEvent()) + } +} From 55cf8a7d968e23797b320abc0daa084c5f72db59 Mon Sep 17 00:00:00 2001 From: James Rich Date: Fri, 2 Oct 2026 19:25:23 -0500 Subject: [PATCH 18/34] fix(mirror): keep the palette region list a val for type-resolved detekt --- .../data/manager/DisplayMirrorManagerImpl.kt | 6 +-- .../settings/debugging/DisplayMirror.kt | 52 +++++++++---------- .../settings/debugging/DisplayMirrorUtils.kt | 6 ++- 3 files changed, 34 insertions(+), 30 deletions(-) diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt index 2c6d29cdf97..46bb27e5df3 100644 --- a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt @@ -52,7 +52,7 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { private val rects = MirrorRectCompositor() - private var paletteRegions = mutableListOf() + private val paletteRegions = mutableListOf() private var paletteSignature = 0 private var paletteReceived = 0 private var paletteDefaultOn = 0 @@ -106,7 +106,7 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { override fun handleIncomingPalette(chunk: DisplayPalette) { if (chunk.region_offset == 0) { - paletteRegions = mutableListOf() + paletteRegions.clear() paletteSignature = chunk.signature paletteReceived = 0 // Defaults are authoritative on the first chunk; later chunks may omit them. @@ -192,7 +192,7 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { buffer = null received = 0 rects.reset() - paletteRegions = mutableListOf() + paletteRegions.clear() paletteReceived = 0 paletteSignature = 0 _frame.value = null diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt index a6dcc4be76b..2006bbaafb8 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirror.kt @@ -27,8 +27,8 @@ import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState @@ -251,31 +251,31 @@ private fun MirrorSurface( Box( modifier = Modifier.pointerInput(hasTouch) { - detectTapGestures( - onTap = { offset -> - if (hasTouch) { - onTouch( - INPUT_USER_PRESS, - offset.toDeviceX(size.width, currentFrame), - offset.toDeviceY(size.height, currentFrame), - ) - } else { - // Tap toggles keyboard control so there is always a way out of capture. - toggleKeyboard() - } - }, - onLongPress = { offset -> - // Physical touch drivers map a long-press to SELECT with coordinates. - if (hasTouch) { - onTouch( - INPUT_SELECT, - offset.toDeviceX(size.width, currentFrame), - offset.toDeviceY(size.height, currentFrame), - ) - } - }, - ) - } + detectTapGestures( + onTap = { offset -> + if (hasTouch) { + onTouch( + INPUT_USER_PRESS, + offset.toDeviceX(size.width, currentFrame), + offset.toDeviceY(size.height, currentFrame), + ) + } else { + // Tap toggles keyboard control so there is always a way out of capture. + toggleKeyboard() + } + }, + onLongPress = { offset -> + // Physical touch drivers map a long-press to SELECT with coordinates. + if (hasTouch) { + onTouch( + INPUT_SELECT, + offset.toDeviceX(size.width, currentFrame), + offset.toDeviceY(size.height, currentFrame), + ) + } + }, + ) + } .swipeToDirection(onEvent) .border(width = 2.dp, color = if (focused) focusColor else Color.Transparent), ) { diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt index c0f67ebb7b6..b03f88ea663 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt @@ -68,7 +68,11 @@ internal fun forEachCodePoint(text: String, action: (Int) -> Unit) { val c = text[i] val next = text.getOrNull(i + 1) if (c.isHighSurrogate() && next != null && next.isLowSurrogate()) { - action(SUPPLEMENTARY_BASE + ((c.code - HIGH_SURROGATE_BASE) shl SURROGATE_SHIFT) + (next.code - LOW_SURROGATE_BASE)) + action( + SUPPLEMENTARY_BASE + + ((c.code - HIGH_SURROGATE_BASE) shl SURROGATE_SHIFT) + + (next.code - LOW_SURROGATE_BASE), + ) i += 2 } else { action(c.code) From c898e0494d4d50641dc6b543315f79af9dc7fbf8 Mon Sep 17 00:00:00 2001 From: James Rich Date: Fri, 2 Oct 2026 19:45:12 -0500 Subject: [PATCH 19/34] fix(mirror): mark the D-pad colour helper ReadOnlyComposable --- .../meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt index b03f88ea663..bcfa1e1b700 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/DisplayMirrorUtils.kt @@ -18,6 +18,7 @@ package org.meshtastic.feature.settings.debugging import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable +import androidx.compose.runtime.ReadOnlyComposable import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import org.meshtastic.core.repository.MirrorFrame @@ -87,5 +88,6 @@ private const val LOW_SURROGATE_BASE = 0xDC00 private const val SURROGATE_SHIFT = 10 @Composable +@ReadOnlyComposable internal fun dpadContentColor(enabled: Boolean): Color = if (enabled) MaterialTheme.colorScheme.onSecondaryContainer else MaterialTheme.colorScheme.onSurfaceVariant From 14b2f58aadaefc9ae04a4924b81c28089dbda363 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Wed, 7 Oct 2026 12:29:50 -0500 Subject: [PATCH 20/34] refactor(mirror): build display protos through Builder --- .../manager/FromRadioPacketHandlerImplTest.kt | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt index 2eb779d3482..8ae93b41e0a 100644 --- a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt +++ b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/FromRadioPacketHandlerImplTest.kt @@ -221,12 +221,21 @@ class FromRadioPacketHandlerImplTest { val xmodemPacket = XModem.Builder().build() val lockdownStatus = LockdownStatus.Builder().also { wb -> wb.state = LockdownStatus.State.LOCKED }.build() + val displayFrame = + DisplayFrame.Builder() + .also { wb -> + wb.width = 128 + wb.height = 64 + } + .build() + val displayPalette = DisplayPalette.Builder().also { wb -> wb.signature = 1 }.build() + handle(FromRadio.Builder().also { wb -> wb.mqttClientProxyMessage = proxyMessage }.build()) handle(FromRadio.Builder().also { wb -> wb.queueStatus = queueStatus }.build()) handle(FromRadio.Builder().also { wb -> wb.xmodemPacket = xmodemPacket }.build()) handle(FromRadio.Builder().also { wb -> wb.lockdown_status = lockdownStatus }.build()) - handle(FromRadio(display_frame = DisplayFrame(width = 128, height = 64))) - handle(FromRadio(display_palette = DisplayPalette(signature = 1))) + handle(FromRadio.Builder().also { wb -> wb.display_frame = displayFrame }.build()) + handle(FromRadio.Builder().also { wb -> wb.display_palette = displayPalette }.build()) verify(mode = VerifyMode.exactly(0)) { mqttManager.handleMqttProxyMessage(any()) } verify(mode = VerifyMode.exactly(0)) { packetHandler.handleQueueStatus(any()) } @@ -238,18 +247,32 @@ class FromRadioPacketHandlerImplTest { @Test fun `handleFromRadio routes DISPLAY_FRAME to displayMirrorManager`() { - val frame = DisplayFrame(width = 128, height = 64, frame_id = 1, total_size = 1024) + val frame = + DisplayFrame.Builder() + .also { wb -> + wb.width = 128 + wb.height = 64 + wb.frame_id = 1 + wb.total_size = 1024 + } + .build() - handle(FromRadio(display_frame = frame)) + handle(FromRadio.Builder().also { wb -> wb.display_frame = frame }.build()) verify { displayMirrorManager.handleIncomingFrame(frame) } } @Test fun `handleFromRadio routes DISPLAY_PALETTE to displayMirrorManager`() { - val palette = DisplayPalette(signature = 7, region_total = 0) + val palette = + DisplayPalette.Builder() + .also { wb -> + wb.signature = 7 + wb.region_total = 0 + } + .build() - handle(FromRadio(display_palette = palette)) + handle(FromRadio.Builder().also { wb -> wb.display_palette = palette }.build()) verify { displayMirrorManager.handleIncomingPalette(palette) } } From 05411f4abe9821e9e725dfdb433e816ab0688f2c Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Thu, 15 Oct 2026 12:04:51 -0500 Subject: [PATCH 21/34] feat(node): view a device's 3D model, and place it in AR on the google flavor The flasher serves a real-size GLB beside each device illustration that has one. Node detail's hero avatar shows a 3D badge when the model exists and opens it full screen, orbitable and lit by a bundled CC0 studio light probe over the theme background, with the illustration as the fallback. On the google flavor an AR action places the model on a real surface at real size through ARCore; the fdroid flavor and desktop have no AR and never show it. --- .skills/compose-ui/strings-index.txt | 3 + androidApp/build.gradle.kts | 4 + .../app/node/DeviceModelArViewer.kt | 22 ++ .../app/node/DeviceModelArViewer.kt | 268 ++++++++++++++++++ androidApp/src/main/AndroidManifest.xml | 12 + .../kotlin/org/meshtastic/app/MainActivity.kt | 3 + .../meshtastic/app/SceneViewManifestTest.kt | 64 +++++ .../repository/DeviceModelRepositoryImpl.kt | 45 +++ .../meshtastic/core/model/DeviceHardware.kt | 7 + .../network/DeviceModelRemoteDataSource.kt | 62 ++++ .../core/network/HttpClientDefaults.kt | 3 + .../DeviceModelRemoteDataSourceTest.kt | 79 ++++++ .../core/repository/DeviceModelRepository.kt | 29 ++ .../drawable/ic_view_in_ar.xml | 10 + .../files/environments/studio_small_09.hdr | Bin 0 -> 1615248 bytes .../composeResources/values/strings.xml | 3 + .../org/meshtastic/core/ui/icon/Hardware.kt | 5 + .../core/ui/util/LocalDeviceModelArViewer.kt | 33 +++ feature/node/build.gradle.kts | 16 +- .../component/SceneViewerPlatform.android.kt | 87 ++++++ .../node/component/DeviceDetailsSection.kt | 56 +++- .../node/component/DeviceModelDialog.kt | 146 ++++++++++ .../node/component/DeviceModelViewModel.kt | 75 +++++ .../node/component/NodeDetailsSection.kt | 4 + .../node/component/SceneViewerPlatform.kt | 87 ++++++ .../feature/node/detail/NodeDetailContent.kt | 2 + .../feature/node/detail/NodeDetailScreens.kt | 9 + .../usecase/CommonGetNodeDetailsUseCase.kt | 17 +- .../feature/node/model/GlbBounds.kt | 114 ++++++++ .../feature/node/model/MetricsState.kt | 2 + .../feature/node/model/NodeDetailAction.kt | 4 + .../feature/node/model/GlbBoundsTest.kt | 90 ++++++ .../node/component/SceneViewerPlatform.ios.kt | 25 ++ .../node/component/SceneViewerPlatform.jvm.kt | 25 ++ gradle/libs.versions.toml | 1 + 35 files changed, 1394 insertions(+), 18 deletions(-) create mode 100644 androidApp/src/fdroid/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt create mode 100644 androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt create mode 100644 androidApp/src/test/kotlin/org/meshtastic/app/SceneViewManifestTest.kt create mode 100644 core/data/src/commonMain/kotlin/org/meshtastic/core/data/repository/DeviceModelRepositoryImpl.kt create mode 100644 core/network/src/commonMain/kotlin/org/meshtastic/core/network/DeviceModelRemoteDataSource.kt create mode 100644 core/network/src/commonTest/kotlin/org/meshtastic/core/network/DeviceModelRemoteDataSourceTest.kt create mode 100644 core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DeviceModelRepository.kt create mode 100644 core/resources/src/commonMain/composeResources/drawable/ic_view_in_ar.xml create mode 100644 core/resources/src/commonMain/composeResources/files/environments/studio_small_09.hdr create mode 100644 core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/util/LocalDeviceModelArViewer.kt create mode 100644 feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt create mode 100644 feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt create mode 100644 feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelViewModel.kt create mode 100644 feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.kt create mode 100644 feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/GlbBounds.kt create mode 100644 feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/model/GlbBoundsTest.kt create mode 100644 feature/node/src/iosMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.ios.kt create mode 100644 feature/node/src/jvmMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.jvm.kt diff --git a/.skills/compose-ui/strings-index.txt b/.skills/compose-ui/strings-index.txt index ed13dd5a814..c747f1ede91 100644 --- a/.skills/compose-ui/strings-index.txt +++ b/.skills/compose-ui/strings-index.txt @@ -391,6 +391,9 @@ device_metrics_log device_metrics_numeric_value device_metrics_percent_value device_metrics_voltage_value +device_model_load_failed +device_model_view +device_model_view_in_space device_sleeping device_storage_ui_title device_theme_language diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts index 0e4ed76cf46..f6f1bce6bed 100644 --- a/androidApp/build.gradle.kts +++ b/androidApp/build.gradle.kts @@ -270,6 +270,10 @@ dependencies { googleImplementation(libs.location.services) googleImplementation(libs.play.services.maps) + // ARCore for the device model viewer; proprietary, so google only. Same exclusions as feature/node's sceneview. + googleImplementation("io.github.sceneview:arsceneview:${libs.versions.sceneview.get()}") { + exclude(group = "org.jetbrains.kotlin", module = "kotlin-android-extensions-runtime") + } googleImplementation(libs.maps.compose) googleImplementation(libs.maps.compose.utils) googleImplementation(libs.maps.compose.widgets) diff --git a/androidApp/src/fdroid/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt b/androidApp/src/fdroid/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt new file mode 100644 index 00000000000..f89456e2a5f --- /dev/null +++ b/androidApp/src/fdroid/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.app.node + +import org.meshtastic.core.ui.util.DeviceModelArViewer + +/** ARCore is proprietary, so the fdroid flavor has no AR viewer and the action never shows. */ +val deviceModelArViewer: DeviceModelArViewer? = null diff --git a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt new file mode 100644 index 00000000000..55092bb4afb --- /dev/null +++ b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt @@ -0,0 +1,268 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.app.node + +import android.Manifest +import android.content.pm.PackageManager +import androidx.activity.compose.BackHandler +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.safeDrawingPadding +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.hapticfeedback.HapticFeedbackType +import androidx.compose.ui.layout.onSizeChanged +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalHapticFeedback +import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.unit.dp +import androidx.core.content.ContextCompat +import com.google.ar.core.Anchor +import com.google.ar.core.ArCoreApk +import com.google.ar.core.Config +import com.google.ar.core.Frame +import com.google.ar.core.Plane +import com.google.ar.core.Session +import com.google.ar.core.TrackingFailureReason +import com.google.ar.core.TrackingState +import io.github.sceneview.ar.ARCoachingOverlay +import io.github.sceneview.ar.ARSceneView +import io.github.sceneview.ar.PlacementReticleVisual +import io.github.sceneview.ar.ReticlePhase +import io.github.sceneview.ar.arcore.rememberDetectedPlanes +import io.github.sceneview.ar.placementHit +import io.github.sceneview.ar.rememberArGuidanceState +import io.github.sceneview.ar.reticlePhaseFor +import io.github.sceneview.ar.scene.SceneUnderstanding +import io.github.sceneview.model.model +import io.github.sceneview.rememberEngine +import io.github.sceneview.rememberMaterialLoader +import io.github.sceneview.rememberModelLoader +import io.github.sceneview.rememberOnGestureListener +import org.jetbrains.compose.resources.stringResource +import org.meshtastic.core.resources.Res +import org.meshtastic.core.resources.close +import org.meshtastic.core.ui.icon.Close +import org.meshtastic.core.ui.icon.MeshtasticIcons +import org.meshtastic.core.ui.util.DeviceModelArViewer +import java.nio.ByteBuffer + +private const val SCRIM_ALPHA = 0.4f + +val deviceModelArViewer: DeviceModelArViewer? = GoogleDeviceModelArViewer + +/** + * The google flavor's AR viewer. A phone ARCore is still checking, or that only lacks the ARCore app, counts as + * available: the viewer's own overlay offers the install. + */ +private object GoogleDeviceModelArViewer : DeviceModelArViewer { + @Composable + override fun isAvailable(): Boolean { + val context = LocalContext.current + return remember(context) { !ArCoreApk.getInstance().checkAvailability(context).isUnsupported } + } + + @Composable + override fun Content(glb: ByteArray, title: String, notice: String?, onDismiss: () -> Unit) = + DeviceModelAr(glb, title, notice, onDismiss) +} + +/** + * Tap a surface to stand the device on it at real size: the models are in meters and ARCore works in meters, so nothing + * is scaled. A later tap moves it rather than adding another, and a twist turns it. + */ +@Composable +private fun DeviceModelAr(glb: ByteArray, title: String, notice: String?, onDismiss: () -> Unit) { + BackHandler(onBack = onDismiss) + // Asked here rather than left to the AR view, whose own request never appears from inside a dialog. + val context = LocalContext.current + var cameraGranted by remember { + mutableStateOf( + ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED, + ) + } + val requestCamera = + rememberLauncherForActivityResult(ActivityResultContracts.RequestPermission()) { granted -> + if (granted) cameraGranted = true else onDismiss() + } + var asked by rememberSaveable { mutableStateOf(false) } + SideEffect { + if (!cameraGranted && !asked) { + asked = true + requestCamera.launch(Manifest.permission.CAMERA) + } + } + Box(modifier = Modifier.fillMaxSize()) { + if (cameraGranted) DeviceModelArScene(glb) + ArHeader(title, notice, onDismiss) + } +} + +/** + * ARSceneView rather than SceneView's PlacementScene, which as of 4.56.0 does not pass depth occlusion through. This + * keeps its tap-to-place, reticle, coaching and single-shadow-receiver behavior, built from the same public pieces. + */ +@Composable +@Suppress("LongMethod") +private fun DeviceModelArScene(glb: ByteArray) { + val engine = rememberEngine() + val modelLoader = rememberModelLoader(engine) + val materialLoader = rememberMaterialLoader(engine) + val haptic = LocalHapticFeedback.current + var anchor by remember { mutableStateOf(null) } + var latestFrame by remember { mutableStateOf(null) } + var session by remember { mutableStateOf(null) } + var viewport by remember { mutableStateOf(IntSize.Zero) } + var reticlePhase by remember { mutableStateOf(ReticlePhase.SEARCHING) } + var cameraReady by remember { mutableStateOf(false) } + var isTracking by remember { mutableStateOf(false) } + var surfaceFound by remember { mutableStateOf(false) } + var trackingFailure by remember { mutableStateOf(null) } + val placed = anchor != null + Box(modifier = Modifier.fillMaxSize()) { + ARSceneView( + modifier = Modifier.fillMaxSize().onSizeChanged { viewport = it }, + engine = engine, + modelLoader = modelLoader, + materialLoader = materialLoader, + instantPlacementMode = Config.InstantPlacementMode.LOCAL_Y_UP, + sessionConfiguration = { arSession, config -> + // Real objects in front of the model hide it; phones without depth just skip it. + if (arSession.isDepthModeSupported(Config.DepthMode.AUTOMATIC)) { + config.depthMode = Config.DepthMode.AUTOMATIC + } + }, + // The grid shows surfaces until the device stands on one, then gets out of the way. + sceneUnderstanding = SceneUnderstanding(occlusion = true, planeVisualization = !placed), + onSessionUpdated = { updated, frame -> + latestFrame = frame + if (session !== updated) session = updated + cameraReady = true + isTracking = frame.camera.trackingState == TrackingState.TRACKING + if (!surfaceFound) { + surfaceFound = + updated.getAllTrackables(Plane::class.java).any { it.trackingState == TrackingState.TRACKING } + } + }, + onTrackingFailureChanged = { trackingFailure = it }, + onGestureListener = + rememberOnGestureListener( + onSingleTapConfirmed = { event, node -> + // A tap on the model is a gesture on it, not a new placement. + val frame = latestFrame + if (node == null && frame != null) { + placementHit(frame, event.x, event.y, instantPlacement = true)?.let { hit -> + anchor?.detach() + anchor = hit.createAnchor() + haptic.performHapticFeedback(HapticFeedbackType.LongPress) + } + } + }, + ), + ) { + if (!placed && isTracking && viewport != IntSize.Zero) { + PlacementReticle( + xPx = viewport.width / 2f, + yPx = viewport.height / 2f, + onHitResultChanged = { hit -> reticlePhase = reticlePhaseFor(hasHit = hit != null) }, + ) { + PlacementReticleVisual(materialLoader = materialLoader, phase = reticlePhase) + } + } + // The plane grid carries its own shadow receiver while it shows; one per plane once it is hidden. + if (placed) { + val planes by rememberDetectedPlanes(session) + planes.forEach { plane -> key(plane) { ShadowReceiverPlane(plane = plane) } } + } + anchor?.let { placedAnchor -> + key(placedAnchor) { + val instance = remember(modelLoader) { modelLoader.createModelInstance(ByteBuffer.wrap(glb)) } + DisposableEffect(instance) { onDispose { modelLoader.destroyModel(instance.model) } } + AnchorNode(anchor = placedAnchor) { + ModelNode( + modelInstance = instance, + isEditable = true, + apply = { + // Turn only: moving is a new tap, and scaling would break real size. + isPositionEditable = false + isScaleEditable = false + isRotationEditable = true + }, + ) + } + } + } + } + val guidance = + rememberArGuidanceState( + cameraReady = cameraReady, + isTracking = isTracking, + surfaceFound = surfaceFound, + trackingFailureReason = trackingFailure, + ) + ARCoachingOverlay(guidance) + } +} + +@Composable +private fun ArHeader(title: String, notice: String?, onDismiss: () -> Unit) { + Column( + modifier = + Modifier.fillMaxWidth().background(Color.Black.copy(alpha = SCRIM_ALPHA)).safeDrawingPadding().padding(4.dp), + ) { + Row(verticalAlignment = Alignment.CenterVertically) { + IconButton(onClick = onDismiss) { + Icon(MeshtasticIcons.Close, contentDescription = stringResource(Res.string.close), tint = Color.White) + } + Text( + text = title, + style = MaterialTheme.typography.titleLarge, + color = Color.White, + modifier = Modifier.padding(start = 8.dp), + ) + } + notice?.let { + Text( + text = it, + style = MaterialTheme.typography.labelSmall, + color = Color.White.copy(alpha = 0.8f), + modifier = Modifier.padding(horizontal = 12.dp, vertical = 4.dp), + ) + } + } +} diff --git a/androidApp/src/main/AndroidManifest.xml b/androidApp/src/main/AndroidManifest.xml index 11fcb5165a2..97af8afea68 100644 --- a/androidApp/src/main/AndroidManifest.xml +++ b/androidApp/src/main/AndroidManifest.xml @@ -28,6 +28,18 @@ android:name="android.hardware.location.gps" android:required="false" /> + + + + diff --git a/androidApp/src/main/kotlin/org/meshtastic/app/MainActivity.kt b/androidApp/src/main/kotlin/org/meshtastic/app/MainActivity.kt index 827e1125935..b2e77b4f15e 100644 --- a/androidApp/src/main/kotlin/org/meshtastic/app/MainActivity.kt +++ b/androidApp/src/main/kotlin/org/meshtastic/app/MainActivity.kt @@ -57,6 +57,7 @@ import org.koin.compose.viewmodel.koinViewModel import org.meshtastic.app.intro.AnalyticsIntro import org.meshtastic.app.map.getMapViewProvider import org.meshtastic.app.node.component.InlineMap +import org.meshtastic.app.node.deviceModelArViewer import org.meshtastic.app.node.metrics.getTracerouteMapOverlayInsets import org.meshtastic.app.ui.MainScreen import org.meshtastic.core.barcode.rememberBarcodeScanner @@ -86,6 +87,7 @@ import org.meshtastic.core.ui.theme.MODE_DYNAMIC import org.meshtastic.core.ui.util.LocalAnalyticsIntroProvider import org.meshtastic.core.ui.util.LocalBarcodeScannerProvider import org.meshtastic.core.ui.util.LocalBarcodeScannerSupported +import org.meshtastic.core.ui.util.LocalDeviceModelArViewer import org.meshtastic.core.ui.util.LocalDiscoveryMapProvider import org.meshtastic.core.ui.util.LocalEventBranding import org.meshtastic.core.ui.util.LocalInlineMapProvider @@ -268,6 +270,7 @@ class MainActivity : AppCompatActivity() { packageManager.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION), LocalAnalyticsIntroProvider provides { AnalyticsIntro() }, LocalMapViewProvider provides getMapViewProvider(), + LocalDeviceModelArViewer provides deviceModelArViewer, LocalSitePlannerAvailable provides true, LocalInlineMapProvider provides { node, modifier -> InlineMap(node, modifier) }, LocalNodeTrackMapProvider provides diff --git a/androidApp/src/test/kotlin/org/meshtastic/app/SceneViewManifestTest.kt b/androidApp/src/test/kotlin/org/meshtastic/app/SceneViewManifestTest.kt new file mode 100644 index 00000000000..18d24a22f98 --- /dev/null +++ b/androidApp/src/test/kotlin/org/meshtastic/app/SceneViewManifestTest.kt @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.app + +import android.app.Application +import android.content.Context +import android.content.pm.FeatureInfo +import android.content.pm.PackageManager +import androidx.test.core.app.ApplicationProvider +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import kotlin.test.Test +import kotlin.test.assertFalse +import kotlin.test.assertNotNull + +/** + * The SceneView AAR's manifest marks GLES 3.0 as a required feature and requests VIBRATE. The 3D viewer is optional, so + * the app manifest neutralizes both; these assertions read the merged manifest and fail if either override is dropped. + */ +@RunWith(RobolectricTestRunner::class) +@Config(application = Application::class, sdk = [34]) +class SceneViewManifestTest { + + private val context: Context = ApplicationProvider.getApplicationContext() + + @Test + fun `gles 3 is declared but not required`() { + val features = + context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_CONFIGURATIONS).reqFeatures + val gles = assertNotNull(features?.firstOrNull { it.reqGlEsVersion == GLES_3_0 }, "no GLES 3.0 uses-feature") + assertFalse( + gles.flags and FeatureInfo.FLAG_REQUIRED != 0, + "GLES 3.0 is required; the viewer must stay optional", + ) + } + + @Test + fun `vibrate is not requested`() { + val permissions = + context.packageManager + .getPackageInfo(context.packageName, PackageManager.GET_PERMISSIONS) + .requestedPermissions + assertFalse(permissions.orEmpty().contains(android.Manifest.permission.VIBRATE)) + } + + private companion object { + const val GLES_3_0 = 0x00030000 + } +} diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/repository/DeviceModelRepositoryImpl.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/repository/DeviceModelRepositoryImpl.kt new file mode 100644 index 00000000000..f735bb00cee --- /dev/null +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/repository/DeviceModelRepositoryImpl.kt @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.core.data.repository + +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import org.koin.core.annotation.Single +import org.meshtastic.core.network.DeviceModelRemoteDataSource +import org.meshtastic.core.repository.DeviceModelRepository + +/** + * Memoizes per image name for the process lifetime: a model is a few hundred KB to a few MB and the hero re-asks on + * every node detail open. A failed fetch is not cached, so a later open retries. + */ +@Single +class DeviceModelRepositoryImpl(private val remote: DeviceModelRemoteDataSource) : DeviceModelRepository { + private val lock = Mutex() + private val existing = mutableSetOf() + private val models = mutableMapOf() + + override suspend fun hasModel(imageFile: String): Boolean = lock.withLock { imageFile in existing } || + remote.exists(imageFile).also { exists -> if (exists) lock.withLock { existing += imageFile } } + + override suspend fun getModel(imageFile: String): ByteArray? = lock.withLock { models[imageFile] } + ?: remote.fetch(imageFile)?.also { bytes -> + lock.withLock { + models[imageFile] = bytes + existing += imageFile + } + } +} diff --git a/core/model/src/commonMain/kotlin/org/meshtastic/core/model/DeviceHardware.kt b/core/model/src/commonMain/kotlin/org/meshtastic/core/model/DeviceHardware.kt index a3877e277c4..94d7dd79e3b 100644 --- a/core/model/src/commonMain/kotlin/org/meshtastic/core/model/DeviceHardware.kt +++ b/core/model/src/commonMain/kotlin/org/meshtastic/core/model/DeviceHardware.kt @@ -70,3 +70,10 @@ data class DeviceHardware( val isDiy: Boolean get() = tags.orEmpty().contains("DIY") } + +/** + * The illustration the apps show for this hardware: the cased variant when the registry lists one (index 1), else the + * bare board. The flasher's 3D model, when there is one, is named after the same file. + */ +val DeviceHardware.heroImageFile: String? + get() = images?.getOrNull(1) ?: images?.getOrNull(0) diff --git a/core/network/src/commonMain/kotlin/org/meshtastic/core/network/DeviceModelRemoteDataSource.kt b/core/network/src/commonMain/kotlin/org/meshtastic/core/network/DeviceModelRemoteDataSource.kt new file mode 100644 index 00000000000..d673e563261 --- /dev/null +++ b/core/network/src/commonMain/kotlin/org/meshtastic/core/network/DeviceModelRemoteDataSource.kt @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.core.network + +import io.ktor.client.HttpClient +import io.ktor.client.request.get +import io.ktor.client.request.head +import io.ktor.client.statement.HttpResponse +import io.ktor.client.statement.readRawBytes +import io.ktor.http.ContentType +import io.ktor.http.contentType +import io.ktor.http.isSuccess +import kotlinx.coroutines.withContext +import org.koin.core.annotation.Single +import org.meshtastic.core.common.util.safeCatching +import org.meshtastic.core.di.CoroutineDispatchers + +/** Fetches the flasher's GLB device models; the URL is the illustration's with the extension swapped. */ +@Single +class DeviceModelRemoteDataSource(private val client: HttpClient, private val dispatchers: CoroutineDispatchers) { + + /** + * True when the model is served. The flasher is a single-page app that answers a missing path with 200 and its HTML + * shell, so only the GLB content type counts. + */ + suspend fun exists(imageFile: String): Boolean = withContext(dispatchers.io) { + safeCatching { client.head(modelUrl(imageFile)).isGlb() }.getOrDefault(false) + } + + /** The model bytes, or null when absent or the fetch failed. */ + suspend fun fetch(imageFile: String): ByteArray? = withContext(dispatchers.io) { + safeCatching { + val response = client.get(modelUrl(imageFile)) + if (response.isGlb()) response.readRawBytes() else null + } + .getOrNull() + } + + private fun HttpResponse.isGlb(): Boolean = + status.isSuccess() && contentType()?.withoutParameters() == GLB_CONTENT_TYPE + + companion object { + private val GLB_CONTENT_TYPE = ContentType("model", "gltf-binary") + + fun modelUrl(imageFile: String): String = + "${HttpClientDefaults.DEVICE_MODEL_BASE_URL}/${imageFile.substringBeforeLast('.')}.glb" + } +} diff --git a/core/network/src/commonMain/kotlin/org/meshtastic/core/network/HttpClientDefaults.kt b/core/network/src/commonMain/kotlin/org/meshtastic/core/network/HttpClientDefaults.kt index 6e1e2a0bb90..38790a5f4e4 100644 --- a/core/network/src/commonMain/kotlin/org/meshtastic/core/network/HttpClientDefaults.kt +++ b/core/network/src/commonMain/kotlin/org/meshtastic/core/network/HttpClientDefaults.kt @@ -66,6 +66,9 @@ object HttpClientDefaults { * those fall back to the release zip named by the API's `zip_url`, which is a GitHub release asset and unaffected. */ const val RELEASE_BASE_URL = "https://release.meshtastic.org" + + /** The flasher's device models, `.glb` beside the `img/devices/.svg` illustrations the apps show. */ + const val DEVICE_MODEL_BASE_URL = "https://flasher.meshtastic.org/models/devices" } /** diff --git a/core/network/src/commonTest/kotlin/org/meshtastic/core/network/DeviceModelRemoteDataSourceTest.kt b/core/network/src/commonTest/kotlin/org/meshtastic/core/network/DeviceModelRemoteDataSourceTest.kt new file mode 100644 index 00000000000..b15cafd5725 --- /dev/null +++ b/core/network/src/commonTest/kotlin/org/meshtastic/core/network/DeviceModelRemoteDataSourceTest.kt @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.core.network + +import io.ktor.client.HttpClient +import io.ktor.client.engine.mock.MockEngine +import io.ktor.client.engine.mock.respond +import io.ktor.http.HttpHeaders +import io.ktor.http.headersOf +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.test.runTest +import org.meshtastic.core.di.CoroutineDispatchers +import kotlin.test.Test +import kotlin.test.assertContentEquals +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNull +import kotlin.test.assertTrue + +class DeviceModelRemoteDataSourceTest { + private val dispatchers = + CoroutineDispatchers(io = Dispatchers.Default, main = Dispatchers.Default, default = Dispatchers.Default) + + @Test + fun modelUrlSwapsTheIllustrationExtension() { + assertEquals( + "https://flasher.meshtastic.org/models/devices/rak4631_case.glb", + DeviceModelRemoteDataSource.modelUrl("rak4631_case.svg"), + ) + } + + @Test + fun aServedGlbExistsAndIsFetched() = runTest { + val glb = byteArrayOf(0x67, 0x6C, 0x54, 0x46) + withSource(respondWith = glb, contentType = "model/gltf-binary") { source -> + assertTrue(source.exists("tracker-t1000-e.svg")) + assertContentEquals(glb, source.fetch("tracker-t1000-e.svg")) + } + } + + @Test + fun theFlashersHtmlShellForAMissingModelIsNotAModel() = runTest { + withSource( + respondWith = "".encodeToByteArray(), + contentType = "text/html;charset=utf-8", + ) { source -> + assertFalse(source.exists("t-deck.svg")) + assertNull(source.fetch("t-deck.svg")) + } + } + + private suspend fun withSource( + respondWith: ByteArray, + contentType: String, + block: suspend (DeviceModelRemoteDataSource) -> Unit, + ) { + val client = + HttpClient(MockEngine { respond(respondWith, headers = headersOf(HttpHeaders.ContentType, contentType)) }) + try { + block(DeviceModelRemoteDataSource(client, dispatchers)) + } finally { + client.close() + } + } +} diff --git a/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DeviceModelRepository.kt b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DeviceModelRepository.kt new file mode 100644 index 00000000000..219f293b57e --- /dev/null +++ b/core/repository/src/commonMain/kotlin/org/meshtastic/core/repository/DeviceModelRepository.kt @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.core.repository + +/** + * The flasher's real-size 3D device models (`/models/devices/.glb`), one per device illustration. A hardware + * entry's image file names its model by extension swap, and only some illustrations have one. + */ +interface DeviceModelRepository { + /** Whether a model exists for [imageFile] (an entry of `DeviceHardware.images`). False on any network failure. */ + suspend fun hasModel(imageFile: String): Boolean + + /** The GLB bytes for [imageFile], or null when there is no model or it could not be fetched. */ + suspend fun getModel(imageFile: String): ByteArray? +} diff --git a/core/resources/src/commonMain/composeResources/drawable/ic_view_in_ar.xml b/core/resources/src/commonMain/composeResources/drawable/ic_view_in_ar.xml new file mode 100644 index 00000000000..d2d37ed3317 --- /dev/null +++ b/core/resources/src/commonMain/composeResources/drawable/ic_view_in_ar.xml @@ -0,0 +1,10 @@ + + + + diff --git a/core/resources/src/commonMain/composeResources/files/environments/studio_small_09.hdr b/core/resources/src/commonMain/composeResources/files/environments/studio_small_09.hdr new file mode 100644 index 0000000000000000000000000000000000000000..e9a2d2272ceee33041dbfefaff72f510d86a164c GIT binary patch literal 1615248 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�}(EopQq7C2^Z*lg8_mtL2{ErQC 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

71Rmg11Ry9BFKm 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 #AF(z6{T~s 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

dCGKj7Rf2~v{Aq0aO1{LGU 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%0A1&0~E#U0AmosN`AX0Rkn5v?l; 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

    6l-RsFZ>tbnTWU`3%*^f|oUD?$S5JAb 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

  1. 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

    1OgJ4a1z%bHL^a>yD2kwXw{LVOQiP<}#kAxQY zeN|oV)fg$hr=rYv#?v)2z4{}`vYc6#EMazOAv1Ggkz~aSj93}juVBZ#HlYFbT*;64 zJJpU0W7LmJX`Ge!g00fSV=}NCSysZer)$&YS*Yu!jI7(hV-N=4&mQ!+e=ptt7F!){ zUQ9_h%aguqq&HXvI*`zY)!FI5cEbX!!u9_P-wZFia`p0Ms2+MeYd1EhNCH{0mn}44 z#A*L}`qXjcz(_t~L)i;MPDpmV8-apIXWMqZ(5l#=uxYbSm^!O1JB@(x!|KR|^?zhR z`0}8LQ=cLV`*+RtB})vjeN=C zK1fAZO$lCDgu)VjPsm+QdiJ!JU72@luD>o!qDb6B25{8lLYKdlBnW@Ho<&y7 zTFl1R5L)B@zXu^=>DG+2Jlz(3V<>*u;a&aVvL{2Niw%M4)^<2 z>z3VuPa#|yRz{7*=gF2f>GP+kkf+V*)vMR8aSH;8j$&o#kW*)mOPymb6)yJR(3|#` zI@%aHR4TP975FHmC-u)!J#BEgbEi2I@QCfg{v2HpAH3K3M1inhWJ?PO1)}sHYijb? zxDA`RUAKDurmb`cU5hV9*C38ftNY-Cqtqg#V3`iX8>8#&8sQX5 zS>!1zXT6j5Q(C6P=vfV({V*tj%n5MWoSkPtSdk6iw+evIEFaDZF{O@dE|3pHSW)<*qlZFfjZPz!wXipISr_K0cuQg+&fgY6cdNCSOJ7C#-R z$QyY57+Sn`5jPK1NCi#Di`NJWrfJQ-`qFFo^NX$x3Q}jv>0#seBAp zS?Q zj=hmKQ(xg0uO1@+XL;=O%U&s^#3HxHPa+s${4v&@Y+UPLyFe!m#SM`tnu`WDwe5uq zh4#NQBcYMAGDYQ5R)+%W1Csrx>=uL_$(+(b)nfkD z+?<*ogClPs^CL`~wjwTBQ?r`F#gBi;?eAbpb;Z(P#EZ@B0LyNqE=ObnsX0~`i`60B zSZxHW?g$F3qMpp4<$8MeIo9Dj7Fj4FN6N=qQIM)b1*wd)J2$!;^*yx2MWY_=G!`(@ zKwy>on#cb&pkm{$6fc)Y2%9b?h~{^&*aM-K^|${V~a_BCWw>lSYphdmcCW$pv4f!CZOvheg3gzeR= zF;*FYE3MKd_QSU#I1xzXSWVNbXF`mvUj(kH@yAvrqdk$Dh1Hl8hZaW>43a~h>)F)Z zI1Vd}zumf(xyBwhr!Bo<##^_u&5z3DorT?H1WbE2b<4$8RJ6i~XTpe=2P3Y;+7p#u zOqc#A79^hylgD|%ROV4}edD^U7~#|S9Qp?%Mj?jLaDfeT|79>@jS@B3U!#r>9U&-{ z|ERQo0+u2m4Z!8d;w2uu$|8WYx)@&dj$6I~7RS@swH_i{886y!it~7RIlabKg4g=N zgc(R|o{5P!kcmrqA$$GN*CG!Xe#vQNH%H(2p6l#-cb5XtB|B!sx~^RA z>U1o-96Wd}^scKb>tq8wBN@)sG9dZxl|EgBA6>l7_c8W;aHsqp$Tnfht@@jfu!vd3 z1ln}Jg9po|vQfX()#zyWV{shbLK#@T;S&hFCd5HRZX%%VsdTtIBRd)%_d@*#qB%UH$q4Ez0fCaNxAx-vOko9u|zX6D19a|D;?8&Ywg} z8Uqx_Z>sIZx{&~xaLCxqQZ4&s4+xi`Y1qFV`Z)x6=;x@LTq8s!LUs2nk-j@1E!mcDQ^dF#=SnXkODoo|-?9Z@icN|utUKn5T+T;iYpcNM3b-!; zYg+QxxLWMHT_BBJjbmZOOP3H~akF>{0F5%o1@yF`n$fHd5T&GX7G0?#ox{0UQy(Xx zBS7Dzkdb6Ygsn1SQ2GrmVRytKLYXFcaUTD$)SdA{-TykMoT$%FZlRLvhnNpo1 zsY7RZWBm96pTLtP#^CBU99|rW9vJhcfs-)j{y11K&Xu8Lo#K`u#TPGS7klB7ak2Q= ztfO2nM7`;g`d4O+HOucOoE5*cViLHCO+S@NX7J&}8Q4&Rzl*3&s}mjvmqNS+9cDia z5xgNRZZ>xQ*vMO+t9v z&YgQunD$D4_o56}AXe<*u#(+r@4)D(1^xXbQhWxwf5*W~+)0O{1UXuK96EBGRAA`D z2Eia*Xp7qO=OG&^>nufL3Rxia6u)Bg9#v1kHH{b`y~HI6Snvu9uCJ>W8u^rAyC{`O z{UpnNQ*Wl(HKHx%7EMN6LUfs@^orF6xlDbmfzd;NAH$b_Ns9H=Tn&WA07oy%IN=h1`v_I*lYVGqmtgbkNiVK_3fKbz&Zs49|X-;BX#|1CWeY$dmTeRK1A z@;%5+@~t%%T&($+NEW>VUuvcY{MIk|Ggl7aUG_D2g)OMf{VMIK76x!xY`+8VoLR`q z)612c!0t0s2xq&UE1l5*FPtVgGK|Nz15d@Ev%GWRK{>*~e+b?0{r{m0c3CgOzlJWj zp<3|P4Uh|PGy4BLCA6@Js7PR!@pXeNgDX}!)~PyB%hny%Woql!ehwGILRBFM(3S&N zj>&4T8+qu(?d^>i~$7b*5Aj@MZt7RF7hdQIG--czI25Vtx?zg`_PZV+r4E9YhWSjLN|6uOQZ3}Su8 zP54}&(LZ_o5G^8aeYMD~53O2ueZ5wgkX|1E!|@q1Gq>JnbX#W=5CXCamVb!`pwLh? zdNd1kom5cxltJz8*3}1o`DJLE~N?T6qlK1c5 z56(aN6s2nC&K=vg_1eC*dFAGot(!Jxn_t|txkVmLT47V9j>sED(FLj%p_Kr)mMVQv z`(awiIqL!Wm4#LRRt6n=yXDitp(W6{v!>(%nA^6Q6^VPEHJkR#+4KsFsf2jncT5_w z(*St0ZMPl*-H&PLo-R#lLq_qp1n994AjP({EbMpSJB@mV#png&@%^WA&E)B;`6YniKFg+;-pL^8Cj78h8EQKo166XfcA=`cQ1EoyF> z_k?{46rmL9KLo4l$7|O)32Ea$kdPIi0C8vB8oYi&JVen`t|HTH^(e8DO{AT9wP6lr zf;XcgpRlwTc6^%i)(q`o$LD`|=;%>0w7ivmath3pbwZmJPEMagO+jA4f1H6ho2`by z1e#OlBi3<(>ab-1MqN za~I|tBHbq_bk3*ishJ?3+b|ekT-U&&;6g@C2r{(fj{=O@xW3Z4um-{F63`Tp`h?L1 zYb^qx!Q@#xT$m|r4duwAYDe4SXJje-nWNtH#$4dgm1u7q&-z8-^XI=HPP!SZ%C#fo z!ymI=t_VcZf}|w+h0zQ5!Am-Wf3{=?3f=CABE3MJWzHmUDRHz*0nPtunPkrrw`Cos z@3&>BPVAoDgu1(>(MGvjHgEiZ((?@%ZgyQ;g}z~9w&4jBN(prChSifPi3%LPpO*Ju z76J*2Y2`|(^@{YtH_ZqMPrik34l*s1e($~ajCIB7yt!#k)of$k?%Zw#V%0mGN;IYN z?c5!wiIo%bV-nK%+Q_QeFB`D3Wf{Hy8|Vm*vBJmKDx30J2-$YXkm72(qK{5cj;I0P-fm?i1+#+#F;s36nRXGq>p zc@BPd{(PLQiQ3Sk(CkZBe7Guo^zW@fCBCt{6nz~xZ{B3oOS2mCKg334^f-Y<1(}Np zzCFzK9%ejV`gGr?NF6MJPgw~EenIUNr(n@U zvM$|53|k0Z_S0-x!|NQPB=6Ws%13>XisTI+tZ&-1er>klMdf6ITm#+czD$72f*^hh zfKsx!LKJ4p`ViS_?7=70Is0I6yiSYilWy!>_4~5SKFXmzWqg-2ST|?T&FRZ%HGb0i%NS zW^A_A?18A<_Fw7hx|A;0u|K(jZ3O@?T`C22i5IGa_68hDr}cLKN)Q!bn_aAMIZCJd z!>UEH5QZUNVc%@OFsu|CGnq&h(S>Hj@FFKpyA*26!)B-2pSnQv6r@On%msmaP51i7 zYZHj`-O!VtLju#FMuqW$ddy+$8XM=O`TuFbf(78#wie4Vg!v?Vke62|Mz|;5LPm)2 zR`@Wyc)Q%#Q!Jp$Eukwzn76b42W}h(eQyWVoZ~m@!Kg8A_=e)uT!9ylg%^Juy!aPw z#Q7I6XNWCf*@y|G9jGwayz2-$!fABBP#G~_qxFvNg8ja%m&u1AyAt5JtcHhNSRcwa;LeUASBULvuU6;Z z=AHJxC=UvpUay7#YYe$kmpsS<3@xM!44hjz#s9`0A^^^xQh@eU0_^a((ex1t;AM1O z4{QuI0Hw@mR@0ktQt*Vi-TR7G!9)Now=eG8h6+otIDF>Tw_^JbgA#mB3dZt?7{Xx6 zZ7oz7Q|S29yg(0VcSN=Vy^7=Phw)Thq2b z*xItW$zz9_?VjF@(cTonubCkQE0By{1&WcX(#n1`w8^bJJ*ikU>7(ihfpx$up~%qW z6$6O61iFq^1atD={2ucfvpJ8?o;8~W%LZ-Jh<3S#qWlg!h{#Y1;XR(BW>6x|gOz6vfd@m5D}JBGU>3CeKQhg-R2J73p}nBJ$~U zrm|Z^t|B~QFCJW&y?Z}k+prtok&ub-A#BiLWKfGf&$pgeqeEh`b48dh!m!jiNF?K5 z&DB0slF@mpB9M0^A{wl(t8`3A(z0h2>lyCZLRZGE=#S^+${#Oy08_{~ZzNtp#p%Y{v zy1rS2nTA(}ems=TJ%9VfP%V-2F}D#?fjyRp>=!=(!7^Zir^&s7_hQX`+8vfcJ}#mq z<7=&GtaKw8UN@cnV+NSI6Dez7$GX|)so{VZ(6Ye;gY>1*{Xr=C|QY*{g60STfbsO z;r&uba9Y-X=@L9FlGLI_^B2sUH?J|x?J;L|HuG_v>$}#xziX=2!V0t~wg#lPdMZO9 z2e7TV5+evQUo8-#ma?p~SD(ceng-DDF~N>HS0}#?Nr%H{YyLp~i*LoT-o6cz7)=Es z6%kx3m=lK3;4bv2@~h@;Q)ew@5Pc|u(oGV2G2Hsv&P&D4^2??$3YSZn1PMg{u)tqj5mX8_sT66(fKl*Z4H$O< zNc=v}Jm!-Mh@4pljIncm;|W7Yv1itOK6VjwJC^WZ=oae5m~Y~Z0c*OAyG)QxS z|AGH6;92Tjom)MvbBezxFq+3rEF2b3ad_!4(OF9Don9FbwEku&#hfIGLXoaNEe#f$ z0`nr09awo24vPWqDPM% zCN?z$Ne6#sE*4#%AQkUPqjOmBc9lc;5?+&waxrl#K@T^Q;Efx#-ckFsW(^&oDsYn| zUek(~OuK$yX)At{OODh$SL>2mPMoR(O-swDuUL}3*LTq($lE;hBukNJr&-^cIWxej zBmEs%K`WZlTa%QPfa~k@9iVH$K$$R%M{@IOj@4pe;J=2`Qliu};xA>tB(zcEfF^D+ zXTW$xunI~8jF&sF7-vXvb4w__gW`hL)cHafMvbH2_o}_jpEx%>N}b=1dGg0E(-ArT zCwLC_R_K}6T6_ovBKB}y#6{l9%9ysws%t^PE&s&$H+TD zg@?@@?7~Hh2wkoBUP8oyQ2+i1ObW3Gt@_x0N5B%LFia%Kg%h=;Z9}BN@Zha@U#`sh zHZ)`R!57>h0IEM}2^L&@$bvtI1s7n!Yk~#;)A?3b92_l1<6?&vixw4EFn`jI_~=v& zNP)3jdYs$v7f$T+jsuP@J4WQoTPN4J6GFTQ!a-rZOqdEh@3|=;8ubNu5p@RDHEj^? zGNdCc9m_$ojH(Pok#ongiEbQRxiIc2$g!9BhCdUlMk3(WYzr5LR^QOMS-lR*!RRH2iUU*Pv3_Y!>G7YVC^cr zL%FfSrkBF4KDc8E8DRr{Io){v`mLLG0u0(lmWTz)TGA8Xh)rd%!RPw{aiU%JVE}M; zaVrI$QW`uS!UDecfalI3K9CB^cD=+zQ+Ax^f}DQ&>oCKH zA0r;CskzUH8c5xRud<+E#Oe00klxYU8B1EEFn+8=k$!`e8?hN9>^Bq_;KV-8J*qK@ zUX@wEvARxqX7dReVmMb(PvM$n#eVgblWCBn#}U0we1F}Ei`CU?v{o2fBflrX19WMr zN;Drw5dd5x*dWF@-GxB*y+!PCkGw2{O)3ui8l>1R2AE&sR<_@fvDuA6u|sN%v)$`X zci^d}bdZ7?+NDa5$+#j9A3KJ6eC+sR;ZcuSSWHPGrNn9@sKEb->-GDzsyszr;W)Jy zXKbaMSKwKZ%scfXZEdZsIA80I!`5Nm2zSFW0`#sc6k6b|qMQ+;IdZUVu~_m92?eMQ zjK*y=!}Dm&9NbCos(t1b@MML-Jfd)wvGZH;IyZ?@^I~yqeFa_@h^68{!REl`Qk1T@ z9!H#wDTAOh>ZWEkd=VSBI_lqt%MoKjkB7*K2Wlh8lw#lt1)Yb`yDDX z{z6*C)Uys;1g;;yIOnJ93dBtJfO!jhfAL}zG-~iEK_OogE}6|grf*wYTVv=L$}`3t zXWZ$-V3Vz7nDA)uj7{EL#o* z8B>m2VJ zpUugzuA0e!UT0mEJi*aGk)CHqGSnNagK4+^0bVBa_HEs5WMhjYA$x&T)|Y0R(=x)% zN{;2m{iMdEVc*WhCQc$i7oIT_Wo~w($}j=!dsc`p!?C6h{)ylNR`cNpcvsjld32(d zwUT3|Dhz3p^teUux`T=+DSK@!4kg$&ta@_ z;#do!Mk&|Jl)*zHN0N;ys1?hN!D*<)pjAJXJG26i_>SMmJiZ}iz43UMx_l5B%WR-d zFaq8HsG~ZDR1JUxk=$hURXWPxIQ-@wb!jY}d-;{MgY&;5&mlmCov9IYQ!E#faAAsy z`TNr=wJ&EkDxBEsH?r%MvNcp9wnZDV;}0)hyx5Ul{6B&WpSN5+27z8NZ7N4X(GpqQ zq=imr2`TL4X?Ou1O{ifDg(KrFAXSr?5hnt_>10I_g<@d~q`1)BbJJ#Ii;WvMrKXpF zBHc)$SL*LWGS`LOmg6E>xw7z4KZ4nZRTV59meBX0%F9jL*e(@GX(@55pj=E(3qaWj zC}+){HH$0WG)*fHKxXegY5@BVJn(IB`PM|5Rs<-s2?GJ9+h+rd-qXMKwMq{k0hA4e zGR*UEOOX$GayZ?a`1(bm2G&VK@%mo%WY0lnb^D$$%ggqAzgOCqbDb}x9 zv*x3Z5ca?+ExY79Y={lPNqlk&+mH~2QU7(cyFe@b6)ArEqk-Tm@z z`mz*Om^~;5o7DZ)RRjtdj9Nfd3wWLpM)FP36{sRMpqhUyly@vAci7Y^8)pTBgx9M6 zYNRAWRc3z7n8LUsZ|SYP6mNh67iq)>Gtus)@fC0_o)qI8YS?jMOl@qw*01`%dguQy zf(zwg7Bme5OaWssLJGm#qyAD9F{tm5jsBwp_5t4Or*M;nnE z9^Z!6AqoCCTixTMRRwyRmk{0lHHcjr!4(QHdjjyDAXTgaR*Twn<46^yxCv~g2x zm9w7s7~=m?n~z9kAyxRt6DQ%hr%lM8$L>F(2F!Pkcyv+jHcw?9qYysy)M+a;n`Ol?jjIw}w3%V0aEWYq8d)4==lQZ270NR)Uwy)Vb~9K^SS=G* zZH`s`s^N_~BKBrQp<;A!lm3=r?{K7*InX%fw#Z3af{v66BC*KJiecA9s^(b>hqX?jNXlxX7H!yYkI7@kv(HOe0_o;AKBtWTItNyuDS_<)LU9 za2PPA{e3=#*5(OuPVGtC9@`4B1&9%K#=MKijZMXkKi)un68d5{sg3$1xs~YDehX0r z3?PXoh3~FXV8W5ENR&pTWo6*w>pO!V%8zN_8AcQF6Z}z zBZb$xTgM}ACs=~l-MMnY8?0jpE^RI+JnFYVCbTxJUj!pYq`iS?sncph|jFU1aI+p*4v=%x9;Qwt%x^&r&aM~+bUaOB8QxR**W zck~j9;-x5CvWAJwJ)vmpdA z7kA==5dxubABildQgiw%BL%GRVB=CH8E8k&>S13T)Xja36~u6OK$4&h;Qj)FV}eCw3Jd?8Q9tmwT1gbaxr^eqo1|mCgc{=m=CXmd+^}F!v_wy z_vYY1RiS;RWu&-t0wFK6ee2`Fa9g%wi>(v}n_v`Y*_2V6R9N=|E0YK~Biv+hs160W z0-P|c0H+m80nU{~q=om(6?;*8pIc&mKh)Nc6L_Nd{!4gP1w26~=WI>w2fh70baGf} zFOPe011#I1z8yLd*o56urdc2gp%-*MP1sw`B@1wZ3c-0N8~%KN^Wnx<1WBBsF=*5# zC17ExwnJjKA=BfR`Uh?wmJB1oSFLfm#Lhl`UWTAa9qAbu7OqAq3pratI`f@ zfu$aJ8@R-6HXp%nQRh&2zl!tmBrXr+xa4EPVKOY*D}7rk_ILgO6tJo{dy3Xu+fYBI zR|CG#2&REf4>We^1L@VSg&1p|4whSt!`_~g|;?X$}{tzJuh;Gq}xQTw*w0)*pWN*5}N{ zZMtGV3rS{yZ>{ZuGV8ss8VEqpYcM)cfW# zSDuV{>n;4KKozN;ZwE@*862e!3r)eW*-0O|%939q3Tnrc?wU4dTfW!Qg7yv%+JTs> z;U!$j52@URP=q}OlAqdtn7KZfj#O*Ib&#xr?D(KC>F`-f+Tglp*k<0=R!fin{-4=w z!U9y(+|#hLbm9rrqWr*))4B(09;kWu{E+U?Uw_-1Tw2lXrI8>c#DwYX$ zs|zJ6Abd0xPnFnk!%n;MVFMZpA=t4nv=NW+JN>P)Eo5j1+n3Miyu7+QZ0$FI^PTo z)xS&W_(D0-!bNFu$$~V$bYA1!Y|b}kqa4kmurT6LvoRLWL4KjWlf~nti4(Io|CyCM zX%e0%y{3+FCk5{4he)ld?6 zGT!|HtoR39ru#*T*Pp&hUJzRAg`|x2UijLsE{r5pH=~(LEyl7G>zUoEh35Xbp(;S< z$md~qIHN*|(8*`|bs#|2Wr4$oxUsHSJmCen8Jk}HiS2~s3?@+Hm|1x*@>!H8MaNNS05055ZMTEFj*FfdZ2<&3%izESsH}PWt_A79g%1jZ#En3a|I$&T_7UccM`7#& z#DU!2a%0UOFM(N5&Ty7XqWE?pRRDDG8=LFc0Ly9son&PkZbPFyJPI40(IiM`ijwtz z`zzzub}ticiIe4b`-2mciZO)Qy@!)Xw|>`DX|rCHS_p_055Q~4L~)C6Sc+X-@?)hXFSam!NRUHfnmKpg0_pKW zLfA!%NT_lS*|L5Pu$ylTVgYjc_^-66P7{$VJD0V)roOq@NCJ|)GbhQ?)vi&5liqN*6EE z;1quXca~2xngkB|B*!b*3rt4yc{|C~G0|NSu%G;HmpCuzRsr4*e2Z z#;4`}OLh)=j7NV(Ob3IIDuyJx-rq3Im-3-vF?RL3!byS=8fO>&JqD6YtI3^nXV0Jz zpSBq-Y=|q)nf+47u(zbs$g$ZvX8*qZp;PSK2?5)=V+RB}kBzprq~=~ZjRxdtQzb&N zzIk+0$)>Ei1h+jHGoT#+_&I}Kt4f?aWs9)a?Q~Dco~?>7Q@C^qVJ`%lhS+i!*c_N!p3bfO^gLTO)>UX4*@5E)wl*xrDC6m*X!Mq@smOA5%75>L_itV_^ z;LgmaYze=|h-=fa@)?JqYVM0QKYDPV?Qk4DdbOTmV z4HjY5(&PZ_yYB{3o;!E$yv8)|e*ml`YnCkI@CCF4lc;Or#6h>RqAn51V0S4C-U?UV z4jQR!jev<)E9owIX!^L#59L1)t9n$j;)ef`IE;Eo?vUQ=|9{=PxpYZ zI!>m~etJ^57?+Ef8Oc>%J|%@d&o&Z>b==^64bwW@F(;M@gq3IziPPop!(D~ zf_3VJb;3DocGU+>3QLDbhXO?xf~pXrg0|T7ROSMX1+(Z0V$EaRExK_r>!0I1-oraV zTTuWy==pI2)%=*yyv2_D;}jX zL@VGCELx&MREz7y#ag`W+O@@X|6?9wZEPaD6IbFc{IbqhBA2ViD_5=z=PN#eXNXeoSuw2VSdceF zZJgUUcW#>V!fd?ojG1|aD|hyETHuHe29U&mlO|7s49*3obunJXsC_#VN4>O{c9pgWOGP5HQH_5XzPPd+fYv1x`!7+>(z6@*TfuS5{e0+favG{F9B;Lqw?4f*2K67AWu9wRrjg=NfHFqfvzLtPp6#C;I1Cq~n(64# zpP~^P_VO6}eVnz!!eL7+`Gq6I!^*|S;zVtPVvFBSpE+aZ2aqGDw6&(T?}kbYIg~K7 zJ|)b*g(<_Dxr;K}h;$8dvk@5w69QVw{H;m=IYF97)i76a$?Bd9Sjmy`YT?=R!Cpll zH!1bCR>GI^Hx$W}=GX?cA#DlX60U%rAA*j>TlryrUvTAASIT`xirzH>xfni_KWikb zB}XiPOJpp%$RzZ5Kt{pmGCuE13<&SZNvgn0Vz<$LSid}=HfiR_#E3ANM!~xw7y={ zJLe?c2BS+O~P;-cOlyR4VG$;KVl` zRtG<*nOJiGB5Z~5-dsO!MQlnP&%t%s+n~^df~=P?$BGYSb*h_RFWmU1BZ=9PnB;^- zUUCn%$U)vgT;L$ts2&_+h6E)lff{BkWgHVMzNA8!H06m@d^#diY%b;v8z=ik#mh;s zM@jZ;fc`q9+&i>sOdZ$KhS9N=mFN~i!%8-K;EjF^bnyZrG@qGFm5BU-85F``zXT%;%wfVbHckSYnBFYcE<#OdUZaw04t zcKej4KOYjv(BXai_U_#)wc07G3Qd_?>Lt)P5}Y?}{^9RXyg8Uzv+!;~%EF}QKH8lE zxLsu|^SH!W#KM)UR>F!`eNb4Dz5fjxwdIsp{4OF=TR`QGc_83Rj&}OA8EIzKEcB`f zci+vZ^XW0|-3)&G^i;eMvdvT-@Kj{x5R&m$v;?Ie-uQmhAb^SJSPUDkD^el+Y!Dxf zD0V!k>z7d3uk7W=fZzKnyI)P0U|vGFzx!pn^CU|Qatt-5t^!7kHq87WLUYL;OsFa2 zw?wgA1v48KzcR6Bl|_&mzE8XaE@8g0n-5TSmv-ntBUFVvOsBQ*oW{m^jg5r`FWVSm z2?}vUr<}n~)o*~WN#={?gz2HSVdNHv5?aSFK9vB6^koAt_Tq!o<<2-A~@Gu3`zcUF~ z&gkVAfX_WU=8ik&XxIO!MIeR6$u{uR0)CBpw3f6*z={ z{$sp}FFAH^&?of5t7ew|;@n5oAQMLeQz%z&wWnd=4Dvg)IP9^Zx3tHYc8&Ut8_-_W zjO*F87gQ$YzL0)QS59&-cJRfsxJ4;5!zD|x-5RU=D&AzBY zxPs$SZ^1Dtj~RHyg-LZ{E&PQuCEQVB36{d?TzIth(_Uk|G2{Mupq6bmkG{^~uaMq6 z1516xRKit0{`5bJYJEK^;KgD=e%)s-c0*ipmjs>^Y479JtGTXSjphffNgMhg*@w)u zk!{GE)0XeI$c>0(cOV!8;GH{m?^amCkA6a}VKji*x9@=EGZZ-;dvQN!(?Ne#hKZY` zV<7niU0~q7su~*egXy%md* zS{)zuhCbme5FJV|L&ypa>=}*>+MwE6BE~=vt=@5DGTVq=| z>NhYH)#99Eb`XwfLMrTeS3Pf$-3-w(U>-EjDrlkV`$vGx(qSIhTorW^AWx#3hJOE* zSFXRJCo~8m6tz%7LJ=m(+o(*vbjk7%ns}vl&Lx4?mbGEcviASPn8<%QG~zrQ7Y9k? zA4ZVv!3e`AEMr0@I_j7coO(8(;=N>-M^Ut5Iq+`F(oESgmB_-`mS+%zRE33S6ttl$ z;s)v9uOlS+I>0{R>&?Gzz(ev@4m~Sr&Nf%^EFij;mZk$Gye=dzk%3)7ioa|LZX#PU zI1su}zKgres}1MQO|#3p0a`9Vr=_Vq-kFjn*G2h0dIEd9r2>3~ znzEa>9>JCZSbFWyw33H#++oF`y&sAs2qtjeI0?r|Pf=wUuEWKX3PGwMQ(EP4y01}|KQ47_+TXvKg)_Zu7Qv3#ftYSRqVBtoDWWS@uIY_ zS75qv?%X-`vnyD=GiJ>wPJ0PJ&zLa-<%uhgrs0PrzwZKb=AZAW+vsmO}ZNsQX;5yRS;IS+ec<}uKZ1xF+VFn+C7nXZprW*wLE8aP# zW*p>gG${rnm{?Z^S6c7l6HL4TRPHwMn-PG5$cZ6*O`iM?9G$vn{%Vj&(eHu<3(~?W zB6g?-2&8~|!22s!;wEj!LZqqLOj~-wY+7VFSxXsXyfxc4&;i~?WC8eu+$VcJDSp}) zmK*ZDMZg?Qb>wl}AT!Dhlos-O-eezh-}d8Znue!5b?TJF%bpK5Du}%OSqbm?Ry{yu z3ULSQ6<&!h&qBQjNs+7y3|FHa@UkkH z4^HJ<6dW3(11UMKH>sm7cy}+&`Yk!*3!!tP2Gw#$s%P8l43Kff(opkIax403N zL_0M6sPX20bY3ODZa2EaZ8cfT--$MOE>R?45=(eT?$&RRMJZ0KgG=!u-;RYt1j=gR z2ejHCl-vPan0Hx<=vGzPE;WcBq~(;#vBhTj^1`wzHoh&+-Dz6T*V6s@jg52XP`Wc~ zX2Xm>B1(%0({&90V=V)^xDbEpZCv3pT{hmlG2u0w=x9&TCi;xVNP0*U}T%!5eUlBdvEig7&pzX{2auHu-guaGvjads|^qc$B4sxa_QHNlhBrJN|3wEnF%MuSJUQp950aFT~rIi?8&j{sCeu5-Eit*37#84EIK~9YHsV zcFYrf&tUl-)C*#@NUyjtrnRlLRT%EBvr$ zcJg(ET42>5Hx3`l_CL079}bZTVzQXE9c&WEAh&GEnyWw-^cHk&N*n)YOG`1`%)No7 z)k)Mo_#%ryA8DKlC`0g%aP)Ve1eNeD>mPDdu7H*;@5bda()E2GB6HC~nQk_}Un8p# zVTe67GxR8F#!sdPJl_cvcEb~)Q-uB=Jf}i>h3D(9;i+8warH2=9HW#kiP3CSZw+{e z0e~svFcVfp;fo*B$5*fpzfD1e0c9`~4q%7r^7T3S6ywujA@*{k^nqPvDidu;D)P{i z2AW}QU49^zO=BY?2JO`yOp&GoqrG!-tD;MPg7KBF8%@^K8jon6SSeJu<23fhe{S^D1a(R zckSApb`G%9gVF;o7Kq|!KSl47E{wX?T@*a2rXG2xmg`$&k?P^MH-g_j6Wt$B9o2W; zFrz+1q1R;|Q&pEPRdz{fITPmkVAeL-tD6@;Cyqec)#}me{B~co&o95cd*|-G5afyv zqjeBgiv(1PBP?)~TWmZHrwQJQ6b{yo9u12{qpcsP24vF=_^M=;OR=FpY$boGel+}d zG(S;_T$GJ2v!bm4#jTd|`Xl^I!nsnONTgb&GY&URG~4H)gcXLikT>X$k>LP2=xk56 zWuf7I#V)>bcJtl3QMgmV2m9gSzG)^QPV zW8FINxEBy{ThFJneV{Ps*bsq6hiOd5tH^4ffbxLobfgk6ON!E`|7-?kHx1l(ajffh zgodpm7>kU96qpg7f>OZD3*1P$l$W-tNbKAZDRwBAFOaFjw+8M}oG|lg?I4^g2f^Y} zSLss?qiFZ?;o~&)fB$`ujGAPnL!?tpHe~b4K=0ga&NH*weltB^!!udLv#67$P}Uj< zldHw){qVTZTQK|Po1Q|KULQT-8QCoI5%c&ktO!n2rdzreUb$rn$t_3ca)1WSTZdLd(H&+$^cuMPL$HMKp`N)>CzXXIaWF9Fk#cJ(!ub46Mi z->4jjuk9de-wfw0-xKN#v6c*_4FW(Lq>Z{KRspr>(mc487 z9yFJ20#Bh3;X7qfQ5+sVly5?$Kx%3!X-+MDB*gCGi0HDg;SYH~QKd`_7)DgN zVg(6!lt}U_dV;7oBGzItF3J}6oR3~K4-lp~C9~74G_#CAlASd@!=vCz)68o8>I~Zg z<3ZEZ?;2U6sZ4o0_QVN6h@&YDx0LgQ{0d?bG)G1Mr68WHfhfa{l`-P3^ruXWwvvPl_fp*E9Xkas>d@{eL^2@?aLI@w z;S%z|vxtJ8Qpx3^$DRkLCCg%M?`I(RRCc28aho}ib77TnNvHdqJAVwEq84HQI|>&D z!1h>~JaN5J!a!SxGRqhWFPEX>4lNApF?_^mC`NzAEqDtf>Bvz4Oe{)dU^c8e#G+b_ zC(pYB#v%`DrMOW|7=A8iCj_Th#xhZwagrRP9v!vGTBe$(x_PX135G8K4vxc(T(&T* zc4*<19@k$U{mS#OSqgQj+Ko%s#S8EP6kB3yzeppc&S%5fX^kuvircm}qI67}Jhm-s zuMVrFV0->tI{nNkA_BsLQ>Vym9Y5;u9zA@F0xudj965X-?XRLNf%uZ!{n@7#pK!>z z+hqO-Hrv9iZAH3?NYUuBN$nNKMnuW25hFp3(IfM|VMA*APLSCxSZrh0mg+37cPR+(l|d4Hp#Bc&SnjO*G58I1A9I+=wKtqS!wyuEnK@$Sc zS?Lc5DfYEs!F&rx_}wlOfEoLnhuKRnW;7s~MwBzla@d|DM;J=Ey^>l^{+n1^g<94L z2YeT6=+`h7rp+a+1y)0`)^HQYIf<)!^wg==P~q*dL6kMa24-S_X3c4&st7Nd?>I8_ zH2Cxu;Y?bKH-*w#60&+VaR=s-Y0|egZRT+Ejcg%r{`ThPjRc|0mhdD5C0Du|L%e%8 zwMJ-2fHTDW0|#NX=ZMV4b~D?z+3*IL8(FNW8(GhG!J3-UW{hCC_j3ieqs=UzL8e6u ztX}GC^4tR|3AsSDBFb#8D}uA;t$}twV7fiv&K-_WyNy~7Ayng}J5>cKW>mHY={2$~ zeA0o;4clMnKb3m8;06PKx^b?7gBe!qgs{{kxi1^IK96^bsO{0_Cu-7MUHtCXdxds^;9;GX%6sb{NjHZac?J9zTLYz_xSszZ2Mj zumDK9Bv6%>qOFb-&k}%HwY0Qsfo6$eed%TbT24w~p;%DpYpfWhi|y$9#T_r^)Y%oZ z9WEU2@Mkm^$V=<;rVt+$S5-!;W)+Pg{yQ~Z&>zt((k?uhYQlv8p7NwdmNq_^qcZSB ztoK=S@I+jAjXkg=T=_0Mc>1(7{fDYe)22T`tT;l;N zu6xkdV@$AxEer zb$8?mN&ruw@YBwrEsl8nU$x6MrdLSy8hz3+;8S|(_U0C9FzH;{70&G$^!QhQ$f^&@g&dqBjOBy`v?8nlcU3{i=plog8z;HqNYeeysV=8qWW zi5OFJH#Iy8xa#w~6nL76uv&+nS@2<*->Ub34WbZ0n5zicsBicSJdTY25(D5AMox24u0j81Di&EKHPiocL%Ho#DBPZ065QxxseAcw%?B>oZQ_b@eKGG>}Y z?*CNbmvfZ&QNOF|%XKfRFU^u*OSnv`%~H#AxowszW3i>m@GVvWEZMcNVO`qLm%DCM zLb~{wDu}XNnI*#Nz_5!;egQcg)#Bd=CJe7&F7P2N^HO};x1>c+#qm;&^XAUYT_w=# zM&*ndco{)C3)uxwvY-Q$pfW&d^ctZ2y~vfo^=nY(rnXo+psp@vG$tRIsmc#<%7En1 z&&dbGJf`8*w;^rOKM<92SefxohUU=A$z^)gjC=Cl_(|LVtE)eg@5*vDbtezB^Cg8; zq$PatGdVKdWnb%S_3i`(U%aXN2-q`EK||zZXjPM@mv9{%r#R+L)q?wF%goE94@y4F zJ}AYlrVoF)0vaMS4q}X$un}Txd=gesv4?Pm z1jIPf7IB~hX<@z=L5|1P6h-rJuu<|U1ep}Ssdzx_FF7e zL6Uh1;!Vj!zj!RSmWXpr<^BcSKc8C&tptA~Q_W=K)~W5~A(Yr1ZdN$3bC2?dd-p;f z{*sUU1<}CW+g6vVgK$gn3?Dsm3OPkqvn$;*( zq#!JhTa~SRbk#~UD^@R<#|zUwjcu8`Jz}rO#9( z&YlTtoKf!wV?8Ij$;lpQ1r&0&e*2;Qe;hg4_q*mSrox^{e$B&Rjy$Ga9_QL?X#bMOp zZlk(;o{%&xD8O^nW;n}0}DC+?3Blqkg_pnb4>n&52m^h zlY8I@ZWyUBiVX3`?t#J+bKOngnr;7YFkQW=$ZFzrxM0TCH*h8A%G%MxHc87^E}>Jo zWupbKlDy%2E+oxAoLWb&(52FaBhC{!CS#3avkz-2&3V+aLr;=p^J;{!P~-*k=cjo+ z8t0_BeWj1Hh+$^{$Jw*foEK-ax*?N9vT{o{-Atbj*9?TdgNSU65)o_~|C}hH_Hg`o zaAUqr8>>Zij=6(o^&r}*sm%ErfmCnY40D;=*KFhf9kXn1gq0KAv&<^=(pI`;qk6d> zxYUj+8rB*Blc|rRgMq&^8Qf;|FR;l2)Vg{0;f8XFa;{H>Hbr0kN7SVt%h3;Q?p!`u z<^4wvp%kAy@!8Mw8h#7;j~;Ua7VH?hOsGYq8)w~| zIeX^pS=12fZh-Q6*dH|kmPD{7S(F@*(Ow-ZQM%mTkzMND`RiX(222$&brC7bnTAm{ z{h|Y_u9s`@@?@@52Q%CTvW_xe^~AF=%DKnOr>yQLyp|&}V96}xGod@=D(IPwd~*CP z`K0#eR~Yp^%hUY0HcP~C*(nZ9xTefb&hd#lcw~bBE zG3c_w@*3c`j&u(P2&RocZi-4^nndGaBTvg6PWK^fx1djnU?_A*%~4bsu=TL2aug>w zoA<((ppgRGwCu6pp%%|cs-qEKic?Lqp98itX93$ebNSLM<+z>m5VzU8f2?1%uqj9F zt8i2zN*rr9Y#~k{NpGr-p<^{ISLqxxb!o&)wtaURSuU|ee8|j{Pi6zG5y5L4q zp*FUrl%GLZM8in6gD~i>C2cvs9SZ@q%Zh#LO~&eSrOoi>XYsho zy9qYagl~?jPpI=|UP)V?fIYMC90kLZ(xK10_wL6HA3S{c_z^yiy4yaE1dbtKjpzJ% z7yS8mtogC?=PlQPGGFM3hH97dlw_gv-ytni7~pbNf1#-weTsBT$o7(CI&;XI@1iNo z8==yQtat4Ufu>ADN;cd8HXS4BSZT5;ROTvWKR|=xWzDTNk-^0VbESPt&}Y?UEHms0 z1|>&Mqx&-KvK?NI??i(MW~2zWs^$KhEC=Z^zl3F>ndMtv{rxTz{!Er z0;`ZlJ)tS#;iv}^em7mQBMaU59&K&!f9KwV`%-6KwM6yaU4-R3^ec$%A#P`m_9RHj zHwY-w^%AcCRSnBC_i)*AlWW(yv;c4wxUxRE6(iV6<0f{*Auyaf*Lv0#iDw`{a;8(j z9p4Oxf<7HPOc!v-m0p<|MZo<@+VewNS{g1<)&^mwLRc3oPg6)XuEOuO5CcQkumCL> zd~}f=Y5PFzJkLxRN}4UIN-aI{>EVsjh6(~>OhUG{r(Rj{C4JOOcLLBqB*yDagq(MG zdhb0#(MxoKjB=z*ea8_s_v%&9j#`a9tL8 zZEpy8`yu76GARr3!Ml>6>lK_CdefXXS8eJh(akMs+usPo6|YMnpb~lZ7c;goE2vQa;y? z$K}cCGiTd$xR7QjGMW@C4!wpTm_FbJYWQN=bSLZ)PsL`km!Gz*LeeZ_&M)@mcgqbH zGu8AS>8qGX4QRd@U2htW^dY_(|Hq-nIVBd-hNj#&Ck?gbno?zFk~UG#$jm;(A1~V< zM2^%y3@(o~*!ubUnt#^g%dxcG3Lg0%IAWN&Keoz!K_-Xn79lB;@ik~Ofh%?h0|kMW zJVT?o@_l);KG_>SzC#cvi!vmr>NWH-weg|OnK5GgF6xpnjp$b!F!CEWejm>a zZx+LlWRfF@8=tG=J3tUAiODU>VqT3iJK?}tA&qC1FR)Pwq?ktxRp{0q0;gp z)EP^jY5B4c_6&cXhY!XJ&#j+R9t%9pdpwt&=lPVh5T5znseZB1bs(Uf#3njJT1hi^ zY5ccHs!E(S)f!u^tTXQX*D-re84V0-UT_`_jl9HTR+V$fYz7spA*)%a>77qFKgOF_ z4K5Zy-2=DI6U{XdFKdbm`>L_&qM83(KRhnI`j|NG_Q950=z>LZVd`L^43G&2fH4-T z(MvY}NlX+v^KvQ`Rpbph+<2q8qjOFv4mf@E%hk5#S7lV{Z-O{)!K$M4bJvXd+^R(l zQ3Q#ZswtYj{9M|6in#2= zNl(Nf9BzXmv-DVj6xgyF@y)D7qPX+us|3fqz`E_c{F~q8`{>}$oJ>LNo7m4}7c*mA z;F3mE4~MM|rEMZ4It?ErltNIH{00G5c9!q-bArMtGhIv=jM@^l3ZYJ9Jc_QAyg!iI zjeLH<>E+8r-gkY#OU$g(ufdRQIor@JuaIc#Gx+gIYpiP&=a=wICN?OY;|COZOCjJO1^; z_#fl-#4N56u!1R|q>&Dz?Nrv}b0#vKYC#ARnNW@yb=5eT+JA}@M)aV1cw}$h$SYiV z|L8beOm|>*DPKof3Y7!^V;!V-*bDxD{qWdqTsi#NPQ(9ULZpa(2i>>detXK4NaKbl z=A+G+IdjI0nX_iinhlsq6m@T;L%t%5M#K@p2lbyYXf@~;Aki{tF8b$?o|%D7noy?# z%bK>N&CerBG&4&r+fWgA@7|*TZG{d|uxD89+kfa7^!ZRXX_hb_3Yq!8oH;|2Q`&FHm8vHHI{E z__DPPTptuiRWb*18s@65uSr-S-a{8Y6fRBk_y#{B=Wbsx}nR%v>m*HxB~$Qde7RZ!)st`1dQ-ELRg zRc^PlSNAxz?e>};$2GHTk3GxFGo=J|CH?=o%0dznK>-O6D3C-F2m~lz<%k3V0m?Zi zf)t(tpN;o;es7_1+jF`a*9YXGa-?z>~M z(hIUVr00ToPEm3Rjo=C&JB-;AqqHCiDF=Mz_`2P{jG$oDA+1K-P{vbvIxo!0os{SF zC^45zMb{$CYV^Mq@@97z%s);=RepVRJiY~2eA@u_VLdZu`yZ8RNd7h7j2HsQPNLBAKfFvlyTxCDBJ^Nz6 z9N4#e&w-R|aAXX*D8ZvAQhQ+_x=gDD1Y|7QQzs9^>N!&n>Q~B=k?i2J)sQ}P^q?Us z9y?5vf3+RyW!A)oMfEh3C7$de%P?u61#nTy&VGVCN5;wOpF+6#4_=pZnjTlqEtK4= zJdV42=Y5>(VZU!SE|Ym=R?g+u=5NTK;7$?H<-#AF(qsf|v2S($=VbFoAEf~h`}u5^ z{GK~^x^y`#78h$vMTU$|iZV+4kc-3^vEqGK^1Wz3T%POc~3(N&lMP2)idDtsdSM-IO>+AF6Frt<&1MN2hL1`~ZAuE^T!O!ZAVa^$TDB0g4%Ba42Xl*qh9!qtO4 z=x6)QeLDm^OC%gTgR{v=0!#y^vb_~xFBD=t-^W^FHIa)Jb-eP=q<$C6v9SvjY6whT zD_?P{W=ynYPR$&uO_xBubWKb@zdc-2<1H0c#ve4t)(V`%*HrZpN^$?8qj|sc%^DrB$zA0RugHTRlQ+*rb2gLy7;YR&u3 z6F_WmJ3lsO_E+#4v+98qIZNi&_x8ZEI&JkYePal%4tlBT=nYU{R;J@Rr8uf@1XJCO zf=Wn~?mn4>bC4b4s$GO-95~L+F}El?%Tz{<=w-IA5pY@Pm0O8$JH9=Vo`X;}bD`US zRBpGJRf62I_NRX6p6SyWRu<=ra}x&e(q{*-*te|8drG4B>C|aJYExGQsnEJ8YB`~A zvf<)hSdH=bM!xn$DNaj4)@|9k60wwC6bWIZ-(zQ4XAmc{@8;xwGX&mkAFo#9i(#vW zO@@KSY0l-FMKoW(d-vXbL0yS#4}~?39IlT1y)dlejN`O&R-L7;Ada*6FBF7;vf*vy zqmpHppSl@?M{!1kXUZA;j;K!Cg4s&7ATi%_asnf|N76{x%IjD@;DM_8M!sK@pt;bj zNbR%)L@_da+a)wodeOJs&%LVE-^=skMUr+MF(5oqW>QMIynjdCGwRZ zsv&c6#oqD<7#dj)Uj_h6jiqc4iSiLHx4!t7mW5sV^mA(YQ-b+(4my9?E^4V)c6|Z1 zIa}(K&&AY2%qP#fkcZw5P;^2a0O3O}3v9Kb#sAe645+p%#XD0*MFv!MP9OUvtEvE=0 zuE;vmI?0v^KI6nRpzeMBy6emXiKWf=8B%XXJJ(BlnFM5`>@Tf$=N7L-Y5Eg!Y2 za(Qw!sozA(xs*xjTHG;qxc1RHi)c!24EQksy0tp$k$nx50&mB&e>1ncG>SAfa8X84 z-MT5Gp*T__la@$+qBJk9Y`5Hd9JNd|=XU>brVv2B_g)yTru+c}M>RLHIUCba&3JYW zgKDn)(1HfGFq`<6aMu1`U6rY>cSl?rcRhL&wZ%;H6$QFA)UwaOp zq%Kz7Ty5zAsavW|S425y-iF(1`wee%ogcJ!N}Hb`RIt z3$k{bp0+?}??E(i=wN;54-WF46?V|eqG17B_(tN$4S6KdnD$pH>+P>>A`R$=FHq#Df@4L1zj3>yR;FV8Mj~N){t;8 z-!nJVV8mMXf2wOqO(={! z%v)A1MUbG~{YQL{`}W(PIZF!^Ozx>Z{LgU$<1y1Y@5%RuWh0I=(Qc!SlAmW*IJ6rA zOGQ%x+Vz_tGZnA!33!>KV^%J23@1wqmYLJVRZTHZg4c|d=;UhoT_NRF22ET|7lN*g zBL6ju15-U9xJ_f@Hg!~YQOGa7&0=;ICsb59Ek#(_=S=+UFTlle9?t<+(ei(Aph z36siW3}?r(8uqmej=0Ma#>N58ZEr+bRGI1DR1C;HGGkY*;XvC4CldT@@B z0mV8c=*6~u+m7!>ER$ra>0}|^jwF6p?Nx?PN;80VZ)W{H)xPW8ux^_$K5#%ObB3W- z+21-GqHsQRKo(g3qdd;V`u_~!U;N^va^}{+?n;B}!B+rlKoMuT8rn;|tBklBdfVL% zfMf5ba-zA&_peSo8Q>ywb?}LyIx)>PVZWGHv^+!#|{m{Tw8R<$ru>ZtvfJ@PLc`dq8&2p1s`V{fq=Z zA6D=GXJ5O(Hs*us7>A=PT}vKq-I`>do~8(NBUiZ;HLGr3vu6Fq_2QnQkaOG%0znV% za!Q=Kw3s0!yfsdY7Pv&8K-^wH*9_w+tQ!z1+*RA0<~0?`6g}x2OCLertAU6q%WU zaP!`+>vGGv!Eh=f$6JMaQ=^$DO$vag+@FQGg>$R278mJ0JbTvc>d_ksg{-N-y#m|P zlsKxnde&BfxVL)oUl#IxsT8NNm_@o-(DCvsS@!3PR-fvqc{O2X*!<0H0gobC0)?%3 zQ5v=to91*(Q#a4WT)lXa>q;;a&mVvKiSmU{E`D^Lc2=cf`JZ~=>Wi!5;dTWiL2RXZ z%{OfV4XsMF`{EnbQ*#T;teeT0G%9C@mHXU1-@N&BlzaT-@|@!nRn*ZzX7`J`QT~HT z+%}iq)Ku(WZ4R!liY(7zH9AbyLLz@eGX(r$b^G7T(1^%yzx;*TjL+E1moC{y;faF%B5{!&fdy#W@W{mCr@aVGiP&|Mg!IH zKN6Ib$uMq#IpJWqS<($N@7=S9>>-C>{Oz}N3=#tGw1v{!JCZQ6a)Dj3#jR@7e~erX zBa>h8n%8NqnT058>E_jJj&(d_=5wb3!>2Ok$KEV@t#g&vc*WYanI<-%_5{-2AS{5D zk+=b6YB0_a2jN`SBrS<|rD5Z(VVAB<(u-tcbTijE0B=2YGjTi*meUjhOFi|p5&mRO z)ssCTJe%qL@bSkVpQCp2QI0d;YDSv6*@J6x2ypVG$(S%s(YP=poLA%9##Li_u%2x~ zs+3V?34hAT2KAsAs&)$S%b~AodozWy8{uqlB)l4Vr70qmOEzcDsN{u)j~!*l@Y39G zOf{}YiX&T-dX~Vqy8pk#YevG;)ijqfjU;ykyJhjvllfRB*7fnz;ZDr^90q1dy_$Z; z>}C_AB?9)mx!qX1&be-E-mbYc zt)znLByyQgesFD24dA)Wt?1>3J00@B?&pbM9uh|mx7IJOac-}E*)O%zMO~?oYZJ|; zE(AB@d%3|BTK_kkOdPPzid_}23QZ6BNMjg@D%RMg%>09D z*IgC?zH7CCs^+)EK@OlAXKZYZ5pbs4t=Tv&hkhseYF($$RuD@=Q^AR7JK-)#B98{L zovZjFON(Q*tX}?mnby??Ff9onbqd*iK&B*5C&?o<@U^LTnrsJgdWFU-yj^TZC^vf`*c_$eV zULYpUYeTl#4-wKwU7cCJP;r3lw^ieMk1v6))qmHRKkk#+ZI&WD1h>_UKkve=aJRG{ zw;Z8-JX;dYn`>rD%bJDiGDH@lj3S|93&f;)6_OXbuy(8T`daeZ8-;NlA4g*4s(R&* zih_=0_VuSm!!aontOJvyV@5RyY@H>TBAAmF`koPy)kZrSH1DLIop-uW>7yh=zDPPr zsa3V_T5ZeJUxDxb0|)kJX@b)G-^$2DAV#KPX>=y{5!~XGU;N_4$zLdMwoD z06l!9IM`wHY7bU--=R(_Z%$d||CF*Skj+Gq-{HAxX#etx{59s3kwbo1%E1N?I!8ti zqLocX3}&JNG)+R-(}Nxo^qx6+x;puzXpZB`n_(0}eH%xkP?8fWUq_r}Hx5KPr)bS| z*Kwd{G3o2Q|2QiIQ_!|2KK^@3%|*WNrtDD~*Am@rTQ{c*^;QMW6w}r%_VZY~ft#UE z>N@taBZ_C&u3EJMK*N#&UEO)B@YTTZSV)szmVihVz?(~#SIfR1jka_tqXyDsFAogu#GYG%rj3t72wVfNP}DXpt-Gi z-GspluJagG4a@0fUZf`6UYF$1jNq0vH96H)T4~(-mm{Dj1gvr8su_?X740^NEv%etqxiowOcmgDt1T4Qe`l}oVO z_{-thU*WZycGdJS?ZY6OCaRA-Qa|=L=R7WUpYzz<%t$5ReKuY@t&!FkAS>#nkewF2 zobWf$Wm~;cXx9-SU+Cg$S8GKygS=p*`(^ZdzY4Cbo+o8);~cjfm6UCp=bI^T3A$(HZAOU8Co{Y|T;(?;di zb@&F0zi+Ex#9w8M2}qnOOZ(nrzE*XMWme=ajomwd7C zs9Um2SLVQ%KhZTy71%3Zwf2nrLx|YoOaJr!Ka?8=Bb=~Ja9l|@-AWG zQm8RyN;UZk&e5deA5FTqo_I4>ww0CGcpP{ahZwLSupad_K<~nNl=H|4Vw_4C8w;@7 z(;(>R(B^7XUw}0wczLR)C~-Z=$Bg?wy=C6EajcRdnw&)L{Y{D}D|q#|DF*YSk390o zV^UwtDxpAE81U?~&xvwFwz<%(5z#J|3YQI{m&uldxaQBL^|EUd&}J3pis+t|4#k>k z?a#ASw68sfD~efU%W~ehMSL5JIVQ6k+XyfsEIhkYw?G47SGou8<|h9kwoOOu_Y9LA zv98`vtzOorVO|<8W;0b6*?i!DQMD&KOebS`@W>H$&3DGr0qR_3gmx_yOlfmCH#@je z%~krDhTjH{qmZx+7N)A%*|CmUZijk@1ZoGNi(ZVys|qZ ztoE^-Q%&%ziuWoMqH1uC2fbG%v%emPa+IF$N z@L!dTUHGz$IZ(vCRszChLV6ICrQ08EDR%>nmRJWtRR(BdIt5&IwG=6@{2U#BD*=xz_Rd{w~;7wg>k~YzM}cA1Y>{qAc-jL^hqVk5z9m(RMfqaZuxnU3vpQzg7tVN5s#Eo7DB+6obkWEiwH|T#kF8NXK|I|*3Ftgx zG63$eV`E(P^ao6`=iTqdxYBs_!KS{d;o@10XG~lI-^UXA>Qse_eQqb;L$&bQM87Wx zEf8_I7zejr`7<$aP;G_Bk|nP#(Z8C95H9v@J67h%9I3=R4viyW{#=uDXL1Q5BW?uo zykTRKgPS*REo~rG0Q~M-iZpC~x8p5C#myZmY~Rt>L1}zY{_ZY;aUx&^S$4ND!mMdv zM)!y1gGUi_DypiZUvqiv81D8%Jp!@1jI0ejae{`f241b=frd_Fjls?l(QPc>?3Z(o z>Igs^syyQ-2}HpMreh>p!_dg&Nad*CBzo=+F5L-|o9F9xF)+x=#&>IX!EH_$ZIWi5cO zqAq{RsC1l_Ljh}ODZ zs6ntLdjz)ixT|rcZgdGx2`!KtUEdOZ|BJJHYTGte+DR!2oZcl7|63bf2-C0`F=Ujo{Rh^}XS4*^?(|HR`@ zI6W>(C=$BFyo3h@ZS7={(A7)zqN}2u8TZbMU)I{XdgJ>J!t%IQ<5SG<6UtQ~M)H#8WX8 zf9OgtQW0&iDp`VQPw;09Uxa)5bXoO!`ZT9mna0P}#c$+_=gfrVHGlHyXQ|G>e>tlP z{$f;nU#PR^96Pr)tUJamJLkFnQZM%rxVSq)jB-r<1eWUe~IxG70CX6=`&cl*MZ!)X5E z3pO*yyp)-IOevQJ(Yfo!dDhiMRLx*^dGVuj$uK1u9JNe9pE;eIY43Vk2Ff>Pi`p0j zzBR!|3@vkAS)vc~i28_nG&;=+3+l0p|*xM{}F@ z(`OQGWHRMr)uM34i`lgIcd>k-m9}y!sR}1TBe)#m0p!*D3M$J!)k%fmm z9p}c6hU@@-0rkvrt{%G$qjh!Dux`N;L1y!$a#kxb`Bpb4PP%tu$~FS=Yzf<}8MKXf z&#`02jTze-b4`5b@FGz>r5IP>bC~ru6UKK;=sO;Ey~X%( zqsRYFxIdBjLyY{86Sk~hUv22MejR7SX2W0K7?I^j6J9%< z-rB*o+?IN~w{_Oom6qE^has|i-@ZT2x}uB{l8v}#o+Rp$sK_G1hI&7YVMRWxFDMn! z0rz3_a_}I%m?3$rKK|QL&)7;n^f+YG%xR}_7Vk!NmcAM(JoIz!++bU~V&Cq_u)h2I z9Hz3?CzoABDLE?>+!c$KtKv^}z?PLGwRV5K3*}1hlvWFg=*_()@6$!rjrSE2?;y&1 zg^|;n_q)kH$I_yesrXzEwUZMDz8JBZ+UP3oDSPCV zLTq&MBagNoyTUZ%&sQnX!^4O3)jj9KOxB1im7TSG7m5S=ud@-~(@t zN`7(?spBiJR{h3GidmY##48+ffH$mNE2E$3RCS~f7>2XPH(vAG*SJ~2s8V{heaH5< z>zzN=Mg84(8pHWLD-+E7iFid~;N1kiyIrxGi-&dC&^%Hd`;EkS)UrW);&>_1IHgPj zubha}{H51?>g2#**ea+lN_jva0v{2`L(~-aDQ++DwC=g3v}bMt;RL1;$W35et94eQ z(cZK4QmBXZ96lVXN67^>F9Au_7+#zip!7X2TZ#AuVCk0)mJ1p(v>I~7`NmQnGUWW3 zYVZ%v3B>i8J9pN0vEo;7%&dbbk2h9xfNJp+VCu=-W^Vcy^ao7x@lwbgS2@NWgyPJk z(-;GL_PE^bqHCtxyKm3?rafgEd&rqRA7=TkZl^g2t5=#|`7N0o*Re1_@7{eoP-HHx#!jbJLfYU8q$?-1jED#kj>~ zF22<()vLWlxG49{j%95ehn~sQA>FShf-%K9RGq}JVk^j9S(X-IVG63B@F-p+uVZI4 z>M(TVTxrVO3xP!?4trF2^GL$c@;n^&Yx}ub6?oU~-3JfsHRKGv-Fv&l^ua?&1ZKl5 z#|UV#?(u&R=^W>VV#H0XoO7w~RoCpIp`{FU1&H$JkY@arp}me*T5e z;EB&a%QMl_pJ<}-EAROu3-!;WJfj%TGQ)~B+^Np~hcofJPUq4Lp}Wq>qbG_5oucL@ zz2@tTQ^0^uCQh7!ybt9Y*M^ebp{933f0pj2hfc8=;hz!xwkSDqaTFFAU2Xcw#!@M( z6RgA%)YHYKRwo9u30`hVz4I!lHEOW*%2lgCcvaQ;V-FR0uc4pK7omWVy*L{q*phQy zCJ~cHW{rf-g6?{GZ;T$AuHN__j?O83gP~I?sLw`*cO*5zEVlyJPd!~fb4xTd<}N|v z^UpoIP}QZ`ApHH*Z75oCQ0)RUKVx7B_pe&tD~&T ziu{QaV@6Nan)%16c7AADV&PyMyiH2kIH*z5B7uT#^P34SZnV5_>!n_Ltou%?#lM4! z&5f@)(=~6JR+BSgLabW8+yU_2MoF)>L~z4;2hge7cy&=;oA}X=shNFCy|s_tW-&x| zD0UCW?;kd|wsTJOU7sO)e z)Ke}+28qH_)*Ml{^v!zNcY%@C#tdj$^+!VDz~6upJm(_j*76mt<-J&2#CZK?{rVpQ zZRsEzbEa6*5}v}~vR;8D-6gP}3L7to>P$TRG=dICSI_<>UNt_?lM5Dvsk5qXjxiBt3Nhlu4uR9X_GsUMm(R#+RNjUgqb9@ngn>s(%GgcWj!fe`r?!wnp{|19wDX zOCwU#t&U#I5!zX~vnNREYE(65ctYXPqvJuVXc68wGgu#WX5ru+;z}GqGrKrOyPVsF{ z4m^4CWD(VhvId@FKnsye$GX#}t*<+EIv5^2q-V+FR6}kbJec5({sk;I^00yqU~{U6 z_H`L2*&4!oY+QCvUw6af!+>}sFkdq)ohgd|hfMQ8?C1Q4sP?GLKAp%Pbtamiud(N`){&o= zsZ0$^t|g21gY5qOAME8#?JIRv@^NlBS*(CyOYO#on*OEPt66e)wX0{Q)px3$?aHop za-@YiAWLH-TobYqj$%1Eplcn~HJxkMx{lH=x*9}RbkQu)260K+vXl)K&J)N|%9;J6 znwJ&eHn`<(HMlL@U2uCN@I$s25r5K71@UP2^?np$Z0T2(b1eSNgvNm{_l7AgCIsIi zw2fs#yI8b_cY*IS&(zQU;D3eQB!Pq8nKKdZbj6b*V=P-u=u-$1rm6`eobMXXu1XGf zTm!z*B3h6vI8445a-+Vhj((5}y>whv)m;mYg6XSj@Xm92(k<%{e-#&Z_ung}9X|tT z50*4DItOci1geg|6;3YNTd14`NDrpdMrb*U2xrY^a6S5H_1L!{d+ywMbT>m_ezL`x zxl)=HkGep+dZ}9U{bZN8(=Yob7pGlap=ifzdHK?P@8!GCF{qYZlK@KKJnVlf=F7&fY%T+I zkJwMqky^`x2M;U%AR5cKKgswxF4VO376OA37w|)NQsF84_*f|f8=DOG^NGE#t;r)^ znb^)1v741dZuI43fBppk`%BYA$3B})6ZT39p&HRcOF~k*HR86aR=(rl`6+(28+pQ! z?x67ZSZ)){? z=~Co)Qy-nm4@&&=%UM|%8D4$X=h9~a429Cwh1<@aQ`&V_Q5T)!%Q%;CBvXgjygGAz zioGJct>tRAD$_ixI`&UR=f{raOFb5XKYHvidN1oG4j^;U&;Cpgj(`gj!-tuAcS%&S z$Z&Z|?f98niot18*n-2?uivz>-t^-Q8`hc%qUX#G)`u5)*HEx=gBP5N=fcPC)Jn^S z==J&^Y}h~w7(09yW~wVnz?@Rzc(I<>;&AVUR;m>@m^w@>jZgNv0h_5n{dDh)<3)>J ztX~>HfD_+l0gkl|Lxx-A{`X2|#@s-jrfc*<&uAKr^g`jyMoKj8?Af+Z5@}B>bs$qg zEpRJU)TyN|p>H**mm6xn>IruSm9fsokEfu?=(2c%dln`(N4TXlWaQXBZh3C}_>n^P zYQoi!JaOX0@!lh-o-kq5xHeCf;JQTCSsi?T_2733al>~4YnofF^kZ`#r@KYeO#z7b zp;|b=rwU`s8Jh!>crqovim6io;#|G)+e=?h%mUUX=YV>Zcqm7ye90mnUwkTWHf}1{ zJnRiOVdgsNNI|_*pt?#jwUpk1kIcujM##Tvr&y{Wka0)PkxJskgkpJBtQU*1q&`K5qI?d47Dd%9!xdgz};F_g1)zL00lbLd>fw8_Yv zq)_@?Ozp^URnui%bXElW3`KsQ!sF~RUjr~^^QWkn^t9`lFGpLB>lK2q%ns%|V{GH| z1AF&Z``Qjv`+hSsBxAW-i{_DZ6Z&)F2(#JY>bP#HFV3cC~EbLWbjQxTGq%;IYUZ|FM;7`)2)-h1zzbZ?;M#>ffR6__IN z$mPV$IJ`CbhT>33dAJbs^@yX$lG4j zdg)J5^rDoxy<*|v;>G5=RDoCqp{A=abx}y8mL}Y)7>%_vq@;E-FLufr*E_1WZb!EA4pu;H+K_w{mPD89)=MCD>iqrt2vZ$b@>0tp&{$ky zNw9T_JuO;xD#3Fkop3sV+p4Pb2h`gdL}0AAVW8mUl4n*o)R~fyWUlf*TvSW@1FniL zm4zZeW^IX{7qPi-f?Tv3l70S#2D-s$fo{jMf44~+LoN;aKOr~D8*-^wzC zPJ^OyC3eQJ;aCNe*EgwSg&Sj;-hd0Is<1|ItNSMymM|7B6J#A0J7lFpdF-~}x$DP& zYJqX{UyFqMc?qHOKq=zF(RV-}x$dZc#o!xnMFVs%GwmlTyX5E9JEEjLF8H`goLtV+27svWxMY*;SS z@QP&))y?jTwO0zbQc=sG+{hf;v}xl9?TQ)OBO()pwmE+>Z01+Q_30w6+jg}+{85JA zo;^k+5KBwN!jVfhctbvkp3A;vkZYJX{9B#-M+`2?I_~zxVryr|5zRdG@W{G7C-O8h zI&D0{nYqj#=kTI7*n>_EXorsAgAH^*zelPpimk57rfJ z?VwWQjiK!}5l)4V=r_#&XJ^Ot9?|Cfn~~~ytog0w@5%bZtT5zdM^1mv$Yy0nUw>YG z_U}mR=5u_msmG@uUlKI1wICv797ZO^6H~9%Rv^}@ ziKF3rgC{Y(K;As!8Q1HmY_N|ENK25&L{o_&xvWeasvr__FR5ScQ%XjR;A+tg#V||I z9niD0%V4iw?3WaEvzVaLed{}9_A?4f79cqodE)WM=ggVYR9h$1#?=sC-Pd;ttNH%> zr%s*Px~~t9JF;7k=^H2FPZ{c95r3B-tlcsGn#>3j+$=ML`GKzP)ew9=vAdaL^u#_z zrOR&D z@(RR(odwUk0XuC1_ND<8ZayT-dZ;?mBmCSt*3B~6leeA9F~W)?7K@wK?$F)Jtx@+}kC>yQ0sG4<@$@ghX;qU)qPAU^ zOcRiLMJ5K=G)di2oU*)2W15wMPtv-)Q~Wa;;P(9TA=y|(r#sTwBm{xy&-yucq2v6w z?2DSk!Orw{w6~8FF91pFCoO=meN-Qg{&BiQHu}eK>7;Ci(oTJ~lTsQYCeAiN6OxYk zaL^a{VVsA3`|ACFbq`tH?69o%-TsigZBekVov_aCD=NE6CvYK>L#SxPq@20AP;|BS z_SGirl8S;Vr(CRDw!BnXzS&y(uTl2$r7I*uqU4q>k6s38`YoeJS|qd_EQ^@ISzPS_ zP<7o|io8M;{Vi0k_0-wOFKb3@aS*wC8f6s88wXWbAgCtxn) zTsT=hdu50kYDw%YW31=g5QWVm>*8tcwL;X@#J-az2CX35ns@`&4o<_@fhW9Y}MTCjF>c87k~hK)nXD!wek zPPE*pYFepU_J?Ai91}n$s})seR$U?5ky_+Wl=^x4I5U_|{DHd7 zBC)q@-b`d~6-aZovxp+Ci_-C!ZQP=ocqXwg&br(z+UWh0#9nwE7Y2C2H#>Yz;`;2D&gbcyP_;4vag7{us0( zh$&+cY$^6iUMWc>KM~i-Q@JYZ5@FVpRW@mkxVD43T9N-+JaYdbv9`B}AU8iKH_QAX zPPfo`&^ei9DZ~Ui{$$XQklDg^!zMd5v zQ{T%1U(LqDz8M~0fiE^F@b%D_@Li>vA&3urBi0LiGZL2=lO?lUy?n=_061f|0dOEJ zeGI~1;x%BIRGh_wj1ZO^-eTzhCO?2gAB4yjFkJI}s{FtHs~8&7 zkXuCuk1K(0lF8NRQcf~zz{rs!8zD_J3yjNsx*1?cjUH8x?(Zguk104$hk<0bI{J{} zl(=lPiqGil+M=p!&~PDo3l`&Mr)A}}GiO9s&ze0eMErQfLiPB!ikDr?>?fb3u8WuN zlRp3a!e@vNooRKAzLOl024H=e@e(5w*XF=XhZJ^1Hch>vTK+?aM&*2*h!Qe8Oaf<9 zD2F1q+?UjV={VYJs|`KYlTLdhv5o%;T3etx6h-b1o1}K)D?0mJ(b+e{wOAP?<7C>7 z>xESg958BcJ$$6$nna3NiC{F)ag%kpXMTWjBQQx!Ia+5X_Qi8#cZ^=8*pw;zmtjq6 zSM9wn`)d?C55L|Y;!ldZ9sQkWhpEkOb_*U(VUydf;Uk#aH}befqDe{_EZO0W_ z`%AU$!OuSRL^d$AicvZCr)tc7qK`hhSTV8Nh>!(0S$tlj9Ly;!)<9iIco`&YH8t)&gs;g<{Y5-P)xZKxCaJOK-nz z%Z}7zE63j2UK}xzbu@BzF~qjf!wIhiU2tKIH9)Q^7s0$MmIIk_snTfm5{w8AG z3abnsO5OYAK~svVH2*c)ym?#W%>c}#VnN2YOExvbRUH{3D&@zoy|y^PVrg6h|MiQ1 zy9C&!W-9cRMY=5CObXH92t2rFi!GR+a?dB8fSx&QW3)YUh5&oo6ms{0`|rQMn%cW8 zFT8(BJ+8;jIkz*j`2Us!lzi+W&L9LZIIo?(*a~|h>%_A-5`%9Bur>`?<)z7x+ zzI97kh3w;X>Fc1mu(Nv3JKwM-1*DfoNTKCSt`S9em`FmzrtS?JtIfZ^Y17utTek2y z@$nWD{99W$#p)_8K)9e0(r>Y?OVPCybBq^73h(yjdOK~dxAhNEEAV_LMI_a(zr*b2 z&Ab~DiLEV7vbWeb`{VYYrBHQbWfIUpEf~x$rs1;eEN0wdLR^T5dlA-y&y%-5qiqqU zjPKwJ9y=F9`&{@sX12P{Ldap**jDAiVsd*TW>~w*>Kk!%Bb*xqmRU+YN&8))^j~6Z zZ_?f#iCylck926;J&$M0S)1cU2E-O)q!0P&1!9349wc*ol%C!s1xE=rM5LgO1?nC@=+^<+?}3CXPg zH&uurfMu!D#0PJ(v6jAx0tzW$UDpV}n1XE_kPx~Ir)0L)8DK~pZmYGwyN;Xc7L6W> z4#Gtgh?AGEC_ICd_D?*MJskeCb3i8){=!f!F{ zntH|8nUGbPK>YSpl_+fZTM8S5&Tfn0cDAHB1lsMiZ2R0DRO@?wzdRpdp3M`zG;$rP^NvH)r-$H$``+5hAcwWhEH!4ljjU^fdZe7GRD#2eD>#S_fOPObLA zgUHqQ;Kb8P&>T-&K2Q3I_TC+|NAPlKl zX3y68+XcbNCMTT?!2c@*LxQFuSUBmaM`q6~399MIPdzXxlncHko1D~g$HZ=vCXTwd z7wppDwVKXRm5?|>dW_~;ekN$Bsq$;|$T2-h?TGD`8n8gN)vBF4^an|_T#X-`1ak=7 zW!DTb6?jY2>4zSgHa!{TQZ6zp2(~5)ANxB~&{=3%+#I3Zh2O@yg$`@&wlNnU%|_69BsX-hg}nU`HPfF z7y11~nhM;+*GeY2aImW{?{y4MS*P-Q@|hm*sBZ3(+EL+A;~tJBmOiJ~djZAXJm4Mj zxv6~1IJ`+c{2T3;^F`#lC{YMW?T6?mwwdsk>(77d5@%be5O=;r44-l66>X3Ptjb2yvwR{ zfEaI;38F;t%UW;#gGBG*L+rC;2^vDz>|AybVrnR=bbd7fP~nBP3X5a0MB!MCefG># zYDglttGTz%Qv({L&z_YE?o^Q|&yvu3@WGA;zIi|RWl?c_v#Ix|MURUVm>}{@1=Zw! zlP2e9GF@Fyz8QGk3w%lO5+}Qb?5oMb^-1D(()?!1d))XqZLGE+9^^yRO1A3=FAZFEOEeNbT@oAzBY(AZK{2Wg$vmR5g_3GVzub&FJorT!^!vPG{ux5acH(XiJ!LO>mW_Q<=97Pulb__VE9s~y@J6V31{*Lu~^->f#(vPOx!JhGcPfQ zAUprpk2lfBZ~bkm2^(wG8^bxm&ZT)_<;r?RcSd)u?u3$0p91(T>m&`%N?X3}ue?TU zTX$b@8dV*xZoSwyko8!$K)sa&N7&r%BD9OnoMCfV;d{pR%|h~G_lr;b}RJs)o?B6$jR zKT|eWTlhSm(3kN1)6d8LuU_h(Z{dY9x!EQ0)vHTXT@KFD?6bD4W4YaAmD-s!t2IAP zT~9KJYjOlAv9+rm4dN*mS*?-Do9f;a(AvJ5{NDPfQQhWYvOAq-wr-aZNtB&YWAGHq zH50*(?c3j`2!rum?<(yUPos_fNSg3AROw8^_wb?W@NHB$uMDCKs88s~cXFU1Kk($h zQ`Mj!#BUy~u3Me==|L>)nCDHwRV7aN7&#? z_pPW__U5{h>1x5cEnQYE?UTLNLNWD{>k9#wE`1^4;5Cc#hrjSu{I*`WtHAfUFX7AL zHt-94aj(SkBeM&Bs~J}$wTx>MDA!!AD?_D$Z=gF#tBpQ{Z>`^Leo-~$H>Q?MRqX8s zyp8gvx@XOvO?h*|9;3Rmj%wcAYW^)Y7EcR$3q==(j~70<@P!u(fU`CGbC8_)xqA6) z(cLk{aPq6K6^FY_h9*S^r?v7HUvh*_RJbob)RIR!ZqyuR9&6eYu;)3ypjr-d* zY44Ji?PI>I+-{GSy-aV9vzhN#ds`nbUiZHW9pmqKXB;%LTkHqP`xKXOaSlk*IJ-d| z65uvmG@_%vk7e-F-HAyNUFs`vU~?7G?MD&D$DdT6_WfLW33;pRxt-UYzlYn+UykD) z^=%PVmQ1zFE_-U&urVnK%XU8L6rzO0xhIWX)7Lth0v8I z))aPivF}HwgH)(TYx~G%1yyB=T+Ih&0Mi1}PEC8$!T^Pz6oVgiN{--I3~nJy`4)>) z#v>^fleqtgbt+FCKI* zxY_Yom@BKQmA#A*TDe+vjaQl$L}hVLc-b1ze2bvlAWVy{Gip*dvOZB;f@>xlj#%C5 z{44Rpq6}B1fTWPUR9Nz;h?=)8t0kwEuv*5|2u@t>Cmwgb_^)}0)GqQH`WHoIs|Ri_y?Y*d(7gw8Gmdv5(Q4||Q)G@K zw_T&xnBBbu;ciq@z5}Yj>X}Gr&$}#hg%^h1O%u`Fx0gA@^99rB*lGH7u%0n<=8S5l zh1w;1C8);D38+E4UeG(KI01FX!r{-?FI-Dy!?6v>U-2cpnwrj58nP%Np|R2NGC(#< z3WXpQ6aOge>zj@-!XMeZ#q>>pDGN%n*==q%fvtmAwj)o8?_1UO>)y^f`JL~TjbO@7 zFdu%<%j>+N-ttejx`B{sI>}IVBq?ZMZYMM1hB73oJcT9iy~o$tyD#WHa-`@<1}-K( zYIKH@3GGwHGD1FevOd+<;69&n%5&A=TZ_^zbtTDbq0kFOY|A}YLw^tbhD1ZCA?M;< zpP&{jKur-nlZC-cKX>H_bpTOD4HG~GFKHy1xgKfT+-q|t@gqFroA-$g3uTa`-$v>5!xx%-kZF%Wo)YBGizGomd(foL%V*W zZ{jXTK$bdAS#T^^cA$g00B;k*7HC17GOyHohE?n3w=_~4vo`uV#o9?FquAv(UL)*Q zSZWbj$2v{4wq{+mp|`OVFTkUDzb=a^4UmK5Vr)Zj6vZ5W zqNsU(W*^01PYL*+=4;y&HQL&Ti>dA8ljb@PM5#SOpPvb&tThT%`-96_N#! zf$Grdulv~QUlA)!lJ5gv z6~@XKr`5>rYTvi_l>K%nYjj&W(sLJg+5TNL9BIvs*x7pT@1|DMM5`OgjvWromd&O9 zi?G6-_|h>Ze?iOkFxFB;JO_?3vk_x1a?eAmt9yJEuq(d`SQ%-6?QZI?*4$nk@{E*_ zf>Dz&C`Z6AN$2`2!4=_R+=AD7k!nrjwF|D-7r4G) z8FWcU6})Po+iSssd0D9Ncz<9`G79ZN>x{nB?fS&fN9OaU`c%` zwNdDV@dcBzQw5ii%j!0}d!hnnp>j3;I&z!l23Kn=MqA-bW9zaBykk7zKa}uzQpbJ$ z%nN>XetqkKYta3)hYA}5aN^_Yk?PT&g5$aK>bc$KFQ}iqKG=Qs*`%Z7qvB?}tX{Y+ z_w$iM%I2__05`aO{q@&ht6u-RvhlBH!V7k7=flG`Inp?0+}MdEQ>SZa?qn?{c^E|{ z2BL~`^y%xOmo{%cTq?82S}WWuB6e8&F+y|FupY$buqpqYwmwv}b-Upf-vtRHgA{op zi{Ljqd&-Z7Q}!QZf&nqB2lbS|IU@2n0K>=`wG%*cHrm?R^~LN+sJGvzpOyw51okKV zW0lcGO-DY*%}zD<7oS~f`@C+yCiNtA@Gw?%o@sBdzPM5Qzw!Zck^eA!L@e)mcy|RM zl`<1AW?}o`Y`Y|}ovPv2y60_juiWszYrE%o`@HS2JN+WJBkR8)?>!i)?S905%CQw} zfA(p0>8^_(U%K>Jk>Kh`K2nH&>C&f{K4xrxbm8I!AJFPg=juYwiy!&it#dyzPb9=Z z`f5a@zQx~8e$e_Ulircy8~WA|I`{1GVJjrL4+rJB=$=DtMudLA1hE%`n?KoSn0?>A zy>z&o*ZVj;h9&fCbe}mm>8vCo-(3-WxaWiHNqztUMEvrMXsv2*IcbW~n#znz>RSY8&BpS!74@=j z;_NhzrND{r#ZjC~7E{}=ng=35U#S=O=6<_}!LKqkzyhCaVYIjYBz>4l3+B(WbH&`N zC5r4Z^XOw@R}Hgg%&e!kO=~^$&E$lqk-}l`ho;5%&b$x-o{RhM@0i-t<@@E4rPS;liRXLYa(Lie}$VHfTzxL+VoK~hRxDgw@m0U{Z%URK6~CHV*jzZhw)mCT%5rB#VoRuP6Qx{Lkel+H z)kO?NDS@%jnEvvUufN$r1`)f9b5o$N@VDB26L%|ZbongtsX5eAQ3l3;p|Xp5i&8fj zjEdBCgY(W^ysw}elPK~QM0>eXhorDRv>-?j9b|(wwsHzLyGCG!DGeG!i5>-XCqp`; zJN4WBIob-jImrfnJ@}f7(cNVB(4nd1cB;;IJIBIm)BpCrozHF+U7iqNFY zX2+jB7fwGJ)9j2z%sv*rPD~u0KUtsXaq9T-6CKC99Xnbb|5IX{HaTi`i)7)973p#q zB=@BKh$U7B&5V0uj=AlYh2*6ln^eJGHiZ*y?a+vX;I-QIS24Ic61Y_bhPOAc!V*n6 z%z<gCCtb10}y?HK3}}63W6>Fk7wcvkJL}Y3t?J7ZL}#lHP=3oV=!9do`);tpsfh zmWaF7`oHBJiyG(@-NlbdMs#HorgZl52yOM-$fgjs3*__qk|ov`lzdFGP}Tx!#j&Vg zJno3htV8HyEIUFQ16&mKxOT?Uw8>6&Q_oI(KQqQ`s29eW$Ak15VJ zFKt|?x`8s0eSfIBexR3MXr^dQYq7EGnK!0mK>;zP?Jq1vVe{>}G2qFko+*Xt&!$MG zexW;Vu3r4lf(csXh36Au_{7dHo5fzS1Vb7xNrt74NLIO(OoO6Y)2fIDq!auk$6%^V zpK_YafyssA?8vM)*NUZqU9m_)W3b*Thb6<2=F1zs*h}JeXV2BY^v(|RJi)hp``cDa zin2>lVSH8@D(Git@6J-^{q=$GMQ4UbR6E7@ijiHy#u7XqJ#nJss8o)$2HkObAY=Q? zK=Gx*63t4^>Q7Q6xD|>is2)_E?#<%%;E;|%z0M3$12VWZ@P1d1nF)zzun_3t`%D&08q zX!uggzl6f4gu&IZe-bC#XDK$ltz=Rx(9P6c2jiZCf}&Q{p7i1A6HVF;}z zer=L&CULv-Q{;DqG_EbrkDSmW*saHYO^_U0J7PNyc!{Hvgf8!`SQLsMc<=$gx)L$> zoQCsfRMT%{f7u8&mR#d|&B-nmbE|m+bhLl!Nk|qhFSM?^?YZiOf1XvM&kHbKc#g&W z;tP}p^_}kqnzNW{Ns>}TwKCU>KmOrtI&taKxxoY)&d zH>es8q3%=m4(=VLO14&7eGG3Or758MG%H`bt$nrgSVG(bRUBZibP@5{{9G)0{JZKH z7;0Glo#6aki=&yY8M+6vY)F~O-VAK(h5D9kYleI4=%1xz0*JKOLfNS>p+w91;>Axs zzGU+jd!c{wY0kw_j_{>>FLR#r_xPLX-_Jh1eEE|4j>`(Fql()F5x<#wkNl<7c2Usz znRT+KHTb9Gxq1^d-5+J+^N-lyp4E&c_FDPGLJ^aPZ{jq$ zLI|k1$^A3&zK^Sb7r0+<{y0Y9$cDKvfv7z@ULC#0TylgCGL6Ps<6czz`|VTRLxAtz zZC|fDT$?$#XclJevf=W!$SyL?1if{u8(XTaS1K=~=GLuDHgomrdhLyI(UNS2XXHTm zd3@E%det{Gn8MmPJBuVW+YSX3*`4vk48OiiHAS8)Lg9tSv1zU85j|dY_BK=z&dSz` zp3BWYJh^!@E<$~dXZEaS z0MC3qRVE7-#DtP4`qe7Rs9;MvX0~QrJ6$YZex}bbJLFFNQ1#$d#CPV2Lcb`uexU9C zdTQ^?6XuMnq?I4Y(^(DqHJ8O{n@oRCR7sNiQ!TTizq9k(@R_3??l)`J>{+uTz-QNw z{0ACbC=lvS+1UIipY{XrPd%xAHMO5+GoOOHP?lPy)lh;C4UJ8RjT~Q0+@!dK?Y%^I z@ked)T>fQe29hhQ@ zT_1kfJDU}4QZKaWYHzW5b1d@hD4g(a?d&BB?WOg*S12_8fIzg8Xm_>e+VsFVB>FqV z9y%1()|BHWw2hwQ1>?K0qwKB{=<4jv%D7Wa!kI$EY%#3K|9^8L89^#S1^`UR2zz(H{*WoeCT@oe}KbT#7oUii3A4Pr352_*w zmAhniyOAz$G?c>@*G!-cj=|Z+4Hn+~3&Ah#7Lja^#+YT{fW*lJxb_6Dk%0#ZZy_9{ zp$5fb2poV#*`q)=mibkKnTO+_r`8FhbMas>*_k)Se1?LZix2MmTUe9O~R^K(VG0YNA`x7HK z{3Oi=)5%(uh}yD@ex(4^(&rbSuU_nLhT?X+!!@fG{ml0eF)p#kIZLfi(ge;9OgVCF z3F}uQ!xLkdgA|{8O{e2ST~}+bw%TglS_&&Q+s43_dULPL;%{wl-(qYC$BGCi*Ey?O zHg93J?%0_Wi4g?!JE%d(Par&g;#35QjD4D zNcIUFLzmzyKLxtwQ&=VH`B>jBazi_zBiF?~$QN+1tSXHxw?oJk2M+Bm0rdVu2kQgh ziW-OBeS2emmj&g~=rp+$bLnkPln=LoLA%H~B8c^^t~2h}_U-Qoqg4TIiyU7sjkJ~` z=Ti~PsSClQ5zU<|QUw-OE})K8d&dE%HY8RjjSf#Cs z#;(A+H{MM}O2@sw+Z9Z6!3lCu9v`)y{}?QHxnlVZ!F2Ep&eKOutEc~n5}!E>J12D& zt3Gk{m-Jk`G0i;}KI;cB6X6;rR?pv-H7M>BPaLRUvS0cOY;aTBE7fal7G2$dpP7dV zuXz-XlUdhBk1MWqgUiVLb^xQwJ3FgYSLgc6xi<$(s&S)0T4a5^>>m@Q+D?>DXz%WN z6wy7ZDDdHySGKh;{)+PcqJ31+-ak;)Bp<41)JPNk$xX-G`Cu>6y*sS4Cx+SKBWb`> z9lqtz0izjbOKdgxJ^?epeX4c#wl4L3;k@OQ_KT!h%bqtMtM2H?-}6Pyi@tTZ?QTBh zjkBLWC&}AM>*#HNcRlR8N=72WMF&p)S|5U%E=|2XPF54u{$u5hhWnUp%2T-f?d5LM zeB3rQDW|F0zY}}=GGjXu+9JE5zQpJG5{h?--D7}@;Yn?&v17{4ZcUJWI6-@o*d-+< zPG@)T*;DQQKTx{D9&;%wx7s=czU%Gcoo(AnlWk2)z|EUEqI_?SiZ*V-xUo-zRt}3B zlyau}wTL%~=y=yC!LV^A@NOo>J-g0*g-J$B@#3~_+gfk#w#gv+8Bb11C5y3E`QPk0 z!1rcF4@46bH{C#77Oh|k0eoXtJw;P_QZ2dawbzRM3;8*{R=?V}_~9|Wt3`hqnPar) zK>=><%x;JkcodDkL&F_Sc0Nm=M?3=#6p^7I#R&0 z*?3ifE}Axjuixk(I&k!Mj$_;~w>PJhJH4n}VqxNY3*CK_c#HDphS}qW5B4s4*tu)> zhc{(FY>IWBby?gsxoS+ky?W>B#L^O{UM`fTysHnsP9kz=@%9IMgw}hLZefEv#ZEfX zar8=z7Xw`HPZzqGTx-1o%0!<-hVs5$>92e1-L|m-<@4)8j8Nh{|!YKqAt3ewKm+jjqLv4blr|*_u5hu zDg%}NB&lfwJadgG7aVDdaCuo!fwKceoUJQ9+D`nCbEz*81h9A7ZWNyVI(^Ae;yE@sM2zsPtlXJH zU|~k;#>7+qJ~=0y#n!C12^~8Pk^wl#!?4Lufh(p>#O%jC!5R!kd&@h)9~@>V#YgkJ zfh6}WK`Pd!?9exF2As)zbd3v|P-vRT#r-4j4h?ZIM8K`Du@Jf(GC?|_pGON7pJ$Tcg*N+25HS4{%|#`Z=&gv(yAWslZ9C1H!J+6 zC;ip__RzL?Iv+eDgt<(g<$#x6?` zmAbMbm^wSn!lfjrsI=G~e9j~nBf!Cy{@$_u8(WNrcp*ZlG#xXyo1C`*J-O#xZM$>( z4k}O>EsmxPE#HviDiWLkk4KiFxNqda+oC=VUQ3ABJLD<#ZG^+Zz=8FkK7(UP`$_E> z1uo7e#Nj-ZCw82PG9Ns!v^FWrEK`fZAwM&)8g$*zA!p7iM>(rU=n!W3kiloqR!MUW z>KM{5_zXmqZWrAx-fm9W7c0Ln{Zei^lf{vKTjrJH1pgUo+MiH%s7*ztKQ@1P7F47W zu@@ab>d^!axvGxecOCGT`I#m|z~#C7507jUw3{IH-{H0_Ri@x>PD zWPWv*`7JXI!79b{AS!vs1kw3UO|hv8lGU&uU@#5Jyt34zn2aGBV{cfGrAe(#+qNDl zx_S(=xQ)|Ylbd6P^^cSt=A2V}@p8B9i!-129{=Bo?=eMu4{zDFr{hrbF0ZdJDA33z2{I)kS4B%|&pfrW86ezYk6@AM6MA^`Q#JA zRt<+`jBM`|pU~AxJ}xUi`D>BcAAS7!XBvvo#ZlsUB!B!c=67CL{(j=y!{sSTd|1wT zyw!d^DeiXjoabYoQ~3P}^YVD)dMgi??<2Oi=l!P7qQpN<)d^9qgSc`Sf8)o*xj*GI zF1KP6-u6f5&lhFxILVJ(-rBo8KBDN+0}la9q7&8*_aeiMv@gUX+V+;O|vgHA&5?>E!Md+)xjWq)ZF zS8W+kN)%G45V2Nm?agR|WJ~mJ;;!Ih)4j{w0BHi;Vvv49>aa5G*Bh=)DHEEACPxaI zYS?h+rm#a!-pTtF>jsG{Rld$Ucq3yop*SqN z#*)!Wa(Y%ho8HFC^`pH-)h3_E>N!96yPhbEHs+_SJLi~WWrHtup$i4q`s{-_6TzP^ zujPZ}1Lk7^w}`s6h`>Ik$)|okYK&UvHJKEWvl0R~kQtG)yIs^Ge zM(4_na%`1)?r_vCntYGCOQ!Vw5B_&A%zw&TY~JeR_1nEX@;j}%v9}WNx8YgdXX|ufZ!wT2#H_Ds0omUL8p}Mm=68WTh z=y&fRnlYtOf$Tm8;O}e_)u4<_v&}=qLreKRHN{~OP3jkL=8%y6f}ix`6ipXJLuKM zJ43p3+FEq(IbZ`%_ssVmHei_EohwJK`iHa~e;nU;QNDrX|0HOm1_-#^bjL4?Xh%UOjT67zmhyai7cI5=CQQcX( zQ7^nU5p;@CKqS>!09(y%d!n9uCHR1AD#;$PTDqRuMhv&jsIv7Vfa36+9;~}mH+TI0 z2c}M)%1}#!YU(J7t1E-rMta8v=Zd54DGJGYhq)Qu9a2`UnSWo5K4S*2{oxWv!*uMi z;&r3!hPLM=wqM{Pe`LtJF!yt&8&eLZW{GhF7m?Y$^GO#m3}5M{~%$FV?=|SRr9^m+&oJ&tXmFaauhi}G=+ z&B(XAAuF{({-lwhamL=j2^dR9HAk%>kp1Eat_F+@Gd z6$ztL3_f^>wbWN7|CMv1Y@n=%vHz_ch8O==mvoWj)L;ws$E2NSUAS8hiADYSyUz1G&%N%`OBob96eeDn9A5 zdSj?KHK&<9^bMU@&D_6_qUR@vra~4htYpPx2l}LQ1o3mE%s|b4cen#+7?)W^=#b{g zq5^TYhm%WI<(!4HkLPMPkCWd|lnk$m?|;v0ew^&C!W2tA-E}G-ANxFs9%-5z-J1H8 zxZ_X$1!4XlOPJrix9X0K6v`lK%@OPG+uQ8>hJ<_1{>;jwf5r?82YEqV1V`*;kTpVox6rt*&xiEq-SHbZ?bNQ23qs%{|y{T~y^@rEZlWjPrp_uomPq}e} zM;)tL<;V5T`5xPTG%^+3_48XpN+Yn9oMi8_uJ$Q=R?AWFQSS9mplF^vd`86|;#~$~5^_m}g_3DR)iF#y_+XEWl@@02kT&7a+aIv}Y#d;%q zT07f++EEbcI)_~J@#6Hk(-GtC>AzX3z@ehXsR6O4udF+9=2(IaC&R(aD0NqV&#_HV z$$Te=808u0C5V{ipQ-sP`&pXCWzyt{>P5@ZXMBi@S=I{lM(B1 zo}f}v-edK#H9xrJnRsZqKVy@y{LmL(comX z`d5%Fu&3w)0MNdEqpHLXcV|SEN$y=PDnj|J0&R3nwPSC|ErUI3yXUcyw0@`5o5ya6 z1pgDOOMv%$Z!D3{5RX*<-o=aAD)zVyWCub@eM2_A^gS;Whg0gAT=0T_K>%QWKhG_9 zfvI09jr4*Fu?Kb}THVb0b|@X+FqwxAoLNcG^!=NR)i`E28&u+dA|a}vZnEf9kJ0C> zw<8q6;e*Qd4jDsp_%PTSPkkW%+kUa~pcxg2btfeyD{Qx1gwV~)_jX9GGl_-y$0QlRfi*O%tOIcf zk6e%J>po63XkxyFYL84nNT?^v5eZq9p_=ceay%J!e76Yq#i_a;*7l`N+B!>?*PU;899cUV@Iswfq3 z!StDDo_XpAH+f{1J8f4W-+-Rd4s9onCf?YXDtt9g1BCfb^Lf5r02B4olDvDuWF zHgm?!9XxMtJLlmD_&Ie&OZLJ7aG$@>VKOZww3j7eB9wRDY2N)Z^`0ILH?;12Wuh91 zm-Dk`jV{O-aRZVr<1}v#bYrM&G|%^zEuYW>>a2_3X$@UO5Dc1)U){V}U#Z008J5b2 z3=o0ABipv_$e_aX(3pAtfHsJ-4;_kVZ;t-D_Ka-6TXU9yBcsY+t288#IU^N!GdECK z=n?j6v(Lc&=`+k~&iNl3$k}uD^QG7$zvFvV5yVi<=DT-@3*YUJ?VeTsegB#E+^{qLWnX*h5g3(Y!)2;!{1hTR z8FS>jR2oh*X6=NY=Rq!yG1jhi`=__-khvqI*!CS_18LAD)}c33N;oVIjgs3Mk+naw zhJx^cgPAWBierSuos2ccn@q{sE+{rCR-YH+d^g#oi=rrat0_@7Z2;2V-dja*>b)T6 zoHgq|WjPeQ7KdhX_jNW33e5_=>YIQ|ZWojT-Bl=|gK`b^3Y0Yv_BkA*?T^0~qJ2Ye zZ?oq1#0MXOWbMnw&GMhr)H-aV7;P}^5alq-egxzic3nUo8X!0GZl4dwDb|4F(3g(v z2Ls~}atCAG*y%zlQ+fc#6Wa;5!VIxY$`_2Amj}P}V)MetkneK_hWw!C=^;S-q)zJl zifRMlr)A~oo{l%(JvZN15uP;^eEVm&an6;f6_}y0j$ZA|zI;vxK`^G;@ z4cZ);dEG>``QdB%IF}+F-G+rgwB82-K7aL4p|iuakZE{NN`>4+)SNO#NL>ldX-}6& z9JdcuZVVwr{{s(wTq*Jw9=|2p^zmrZ+)~vsj<~PF@~nS}5BBG2G2% zGng|yWte~W9BOmB33(e^cgX7eBpv&mjdPdd=`XaH* z{!-I&)$IdzdPI4yYU7z+j-0;!IDKsGl`APLQOF%N-`@B+#(VU&sSK;og|A-qEfn_+ zsy?6WM7jO6Kk?=%|K_8wMU|(tJQ_bo;Ul9osq@;ZK9UcA$S%*E;Qp7#E6vrrK4kc( zZv2BQ$sWpK|Dd@v_~NDZa^_#41uk8>sLJKig-SzIx765Cgnd!3LH6j_`AvW zg$ur%3EU0r7MLqQZ=uzZzA)`!>z3_?*^A*cT4Y)$+LQh#UL@)V@T~L!u&;^e4)Ry? z2RtYHU$t_r&z63OdRV`{XWcDP5Wa&CZ~J!Tov{hT53C;%k9kZ$yz+r!`-&UdtR_vd zBmN9I5h;4!y4!%|*mFr`Q@C1yP+dMWg1wphsemPlJ>AF^BZLZB{)`ztE>S;i+7xjj z*Tm%1O{`LL;em{PW#|uK_20iRG|2sTFAgs{b|t%9&F*eG9yx<}knMqRe}=a{G)Qk= z81&+kFO4u&8L{w6^Xg|3a4HRm{Ri^h3@IUQ*4q?=O@~LGyR7B3dnojTuq5qoNHOLx z;S%PW`G0@G0{fNyTfCUMk)+3avlO#3eGBY2M@2M6)&+H#&U5DVk17N1oGhm*x-HeD z8^hP@Hg4|Oct2~6zqW;)t_y{w7SM8gl4kGz0y&?vwZXaD6dzt8y3=n%n=7NhG4;Hy z+3|qcxAtN4RFtD5!@+1xd>$Y9gdtO7HPgt}s8p&JzQfdUy70LMevURjNB_n?kAZ%X z59#Qw&uL-oLzMEY3tI#C0#2>)n%{MRA$`0*pg(;U&2 zC@kvT;?F7KrO<^)F*2Cd^@#Bm_!{@&P)Doh=9sGzlrA+}e|P&9SDX*bK&;EHoLgs3 zf|cydiAU*LLtM3-e>7b%i}%Ko^AtW{lV@R>fnzK0jc~7&8gVRJ6}U$dtd1yHGgOkj zx?OXV4br#1yj?m7t^btI=HvN8GSTi(%Ty|np5~f%`%ap$WOI@J@lT*IXpIeLj$KQ+ zs>S?yeXTTkt589mFc%e)%Q%jY5C+ zxuCP>*&)w7t0TLdwC4=r^3oOJ|5OR-;AgmO?GNr^-y!?|5+29!Zj^gw6m6dymVEsA zR>?~H(!DSG+LGrl`VXmJ!Q$f!*3D~QpCIv`_3kT%T*ulb9b}uEt#^=)yBWTc?zn7W z>}LN6SM`WSZI1m^Fr8a+Ozk@5EqwuX@BkFxP$gbTaf9xr|4RzQz0wt>^C`~unX26O z9%w5uKX>j-D$S|${^pNIv)U=_0RDW_|IbUM^U(j;g>fG{e=fsLAT}dU(hrwGGZwI($<+$zjO5NIPP8X)J8?XdwTVvw zu1oNkppZ2Y?0ouu2!J4DMa+p>A9_}cZ2gblCbnhg(uwIVgcKdEx`I)LK1 z?IL|ZyJC5>Vz{*0VzXi>wGG3AmNzT!P8W6jo0S6)MzewNJ;b^;(VMTx3`;y7nf5X; ze$-dwYpfCq26Q?cze}a3Ek>jV#vrVKW6_ff2b1S>Z~hp;VXi0V4x?DjYH0rO2ZG-K zH<0+)Evxi3)Z0vW;Puxgd`y)e`(-bX(9eclfAH^swS(+%XeQU2XS&2WuT;UbPmd0K z%V+=d|J?KELtwZuCGe9~clPA-qjiRLIr|G{UAhUKzr;j$;rNl^WVi8bvqA2IP5L0H z+>-<%u*J!?peMbEPPS44%U|0C&BE?`)ZHDP(}`j5ue2+e0q8A4*ZM|3x3n|t{b?Hw;Y zO0=h&%8-urvWH|Jm4&<$t@@+C|5UR4i5<=M+jrjiJ?EYOmbOMt2FxD<#ISn3((8b(62q z<>nK=@p*pwhgUFg>PQTtynI=?$#o?zH*PSw$?o#en~!dDO`T}@8_e&B@pkOJH)6ii z(>6=_c+7Ft=d?MO{ho+-B`p4Iaw7uV$juKwY_E-t(9egiU%hhuhBV=7UBr_PPfqXw znvc~-W|Uxvrm$0&(ESBMAz6nVEm4B&E0T#X2_&6!C$N+(88958$aO88iN103bmGLX z2qGecuDSHcB~XU&Jw=J9w*2s6nSE3e-gnF?alwEC$LO>qgKxInLu5sX?W`%6;-IT+ z!Q^q?P&-~9kkwSRfDXvQfRdK6RG<04t4*a!DhLl*BxYz|NI(q9azsF>1)3oqO$@i{ zyDM!VDA3~hpj%{pth_E9cuayBF&<4`6#sTjA=s zuSJkcY$MC1wRQDOdVGdbmzka=zzGji-BIYIiIWT_t05>M_MVrA;`NuGd};WLFTMEU zi^gPr((BC5#5GI(iY2SF*rS*IPg&&;2Km_<;HiR_1s9zC+W5>N%n_I{!Svv-jgEF0 z-!XSHW$@G~&D254ZU#@E(M}&C8E8gAFam zJg1dvq_{BG`WVpVMc`CyvPG*VI!DEvB zOP!0)1&Fp!5IJ}D;zf*q?zEZEN^B&V5TyooDPr87mClYN>GO8%^OJq;$uZgS_={os z+M+q}sh}3g=h`RX^?=p;rXp<){e}ZpNwX_|C|Ip|hx5d`@TUvR!40KzHb|vCdvJWj zdGaZAo^c{6S&}`~?ETJE(k+il%Zlc8TD5Eb03v(W7BDGn33EEi32`9PYyvs2mKw8= zb`*V{BJ<^#UTK9U752}f2IVP~9xMm0y2zI|%Z99?50`%{*iBn>t76JHL8Z+-Rvu{< z0<>-%3DJqdLSzd|nU*NmXY>GVo}3yB2EqnZ`I{Av41$}PpPXJLYuFRfcXm1)Pf`do z>CTB0!Hfrob2Fh5n5tX5sq*OOo_~Jab3>n(SvSwO&y9Na8NxliUwXSnk>6-OIzWlK zN|zs$1W>is^X$Eqh5PVxQ0@ysJVtqHX2-oe@}=q`mvTS(`ml);sPb`>2I&yHX>#Tq zo-%bt&&*Hy@w1a^6XS?{E}y&}7>$klqYD;DOoDYVmwP8+S)4m$SARpE-$v}IUR}Pt zU3SaT%A#^H2fZB4%1`U)sF|=tQ`)0)>NGY81tXr9hBx2+ zx+<2q^(7sVrg!UHd-iMbwX*Kq>Ath)AokP=SGe;d zX>xcB=#Cx*LN#dFB|6*wun&$En)6f3B+OcxJJLJ*e?rL~(0Vr>BGqEObo$5<-*n{Y z!2!pdLte6c&+fhZ)TT+EGxy=%eH2h2yEAqZZ0&20+j&GMh~jrFRcf`AZbEXq8$z?eH07|XQZ(q;!>+{_)(GmGTt4opOb~(tv5V89r8xhFJWqn&5I)twk-SA zc6{^NZJ}#~J)y8Xd2%!9VNquCdMH0&C4jW1nM# z|J$*D`uP9LIj7#onw;DGDr4*R)L+ozuap+QIZST0QtfWn-e&iwLLQhz$E&vKO6k}o zlMx?0)N}ZLm?&xrNg=Y38p&C5+*H0lLCOY)r1*KY*s1>@Z!h6dPI)E?yw+U3n+JUb zbrR_;=_^-nT<4Ep{eiCVPB`hKfKX? zG{gs*tjzvBZVYIy%EK?G$H!Lb`iB|dS$g{h?SDNJr_>0~jQIS(VANa|lWBj2GH1f& z_jBHam0a7J_wB)2^l!f6b6f%{B0~Jkne*r5Aze@*O@7O}dhrFaRQJ#%(I{skUCvN7 z75h$zFDH)mRpAOMH)X@&LlXA{8c&XIE*|coIsDs-S(KLV%fu>4&J6+BwJSq#ohS2W zC}D^|-<3f>83V4IMW;9=#!eN(Bi}qFN)UBxd)w7_u0+6Cnkc89SEuPv=R?=7^R)6S zt0?dF`pYu8Aq^Nd(3sYVE=33?cdB9JzJq*kR*&rE=B5)CvwYQ;Qukhp1c?T@l?;zZ zq?3m%FLrt>wm1UQ)LWW-0VQ7PYTPCXY%}M{xpyTbgwIp|R*YEHtV7_co%V?$@+9e# zI)gmD;8N$8hv3=fhj&xuA^}zHWvn;QO`rA9K)HGOj^Ox3_dF+9yr9=@koQ%WhpMIE zH;;$wi4!OI5321Z-a0{y$@D6Mjh^jh>TMuiR$7LH>E>={-Wmfx^Bo4{bLO`5{$_`0 zENyS!1mZ<+g|I6GmLO+Yh>dx4SR~yEm=2m}^C0HrP*k3pl|L7^+*wFJsI%at3hmUn zlN_-YS)T6ht-3_gwUzFXZ8Z7z!8>-1DJEdgY*eR;F*a{$H;;^;wt1r}mS+1+#)+Dr zWw&c<{-1oII79pJPxX7NS&e<9xnk<*aZkA+@9;Og^OQr`@z%~5=@~qvk)N`qHL_0^ z%+VPhscU1KWy@%GE}1uE>;GCz$Tc^k$la6Mp6ibu|C8^XH*ZUn_JtVdN?L>ns{BtV z@vcT42&36k=8{4du6P7EB@oye^C4e`Rzkp!iszSqoI<;^r|IkFTD3;e(@Xbo1Ptr5iCr9a?JlbB7FSG`>E^wy$Y#;jWJaIh_uB@_u zf3tU#5%c1xc)GjU`%p#)@W_=FNs*im`rA1nur{W`IM+#)HvKZsE#n6;c|@7SOlX%x zuNLAdH*(r*J~twu$x}C;#)A`Bf~=l{pvloN1ENV)IB`W>B|WlIFxu8n$#3j#I)lJjQWGbDM`ecGTR| zruEFagI$FRLx*0^3aPjHyYQsUI;@`Zmh?e&pl)8fy+k?IP1QIR{zCiW=oh@G%sQ`b zw>I?dv7WL1O>x(AYn~nX16Q+-(N3>7&;O!reTA$W#$SE))$v?%ib3G0*pXM`S#Gbt zPD~7B;jlhw!sN;AlrJcrpPYG%Q?V9Ccgs!`m#1V0h0mLBPovQ9tVBG)jlHl?Web7c zy!m^MPfUk59kfbiDkbMt)=V5Z%EpgHlsWVkod)MAx_xEDINX!t(c^JP7_jTT_>6Gi z^p$&(HX;sGuBoNb_49H73zs^`QVU}Re>V4rP{4V!ZhN2i<7utQ$L0_?Nt z(lM5iAOUOAEvRJxZ`Q-+gl+42t(Z41j{bn@z)J3uy> z&gM;I`-XLH>&rEdQJ#8b$X;FUOE?#<)vjn59|IeOrkQ9kOWS4NUAYRO{$*hMMA}Sf zJu%{AWJim4$d;}L*&0|Z^?Wtn$#PKbE`t0B*%9oOU2>CnWtw=Jx;8#EvbE`kK7&Ee ztj~RnY{vQkvZqbc9R}N;I&7P_<=$vy#@TDKUkH5Vhv*k3gWjGOhG!v}cFzmL0%(=x ze`;v*d>%zb~0Z#*vB%(l+E;toV%jl zB7F^*JqfrpCyX8@cVOwA8ZJr&IRPA!4$n?ZB6oMLn>B;hel+%38vWmoed6)|$V~qa zmRqAlhmDPbZCvy|&p&d^KN|aV>GXfDp>bgihtTXaKG@biJuujaL-RKfi+lI%dtYUR za_GZ{*=t((i4Lk*8#I$eN79z9jF9t;S8FKDum&evV;DueP__zPMGCa6xooTWHYx zxmJ7-5h}vVvP12O2CG-Lt9}C!STN`qONbQ%Z(B(aX5eSs8XxpMdGv%b)~?N$CJ2DN z@Dkn7tQi%tF4o|eM(^wweCcw=Tc}4kUOyaEN@qefd_9=AxHiC+VBe4^6VJpN?FVs>ng-l&O7fkOa3uL z!*w?~3rxQo%TsD2-Ek-h^&DW)dzF)v(-!y4iO6KQ9c@Rb>mo(c8#fVlo42M#Q0ZIB zNR!PCW|?oe6-%&nBInbe(ro@ks$DH>^m;y)QuX(A!T>f7@1}GhJLyhBwRj8@N7SA$ zyzI+;^6^r)(dydoY4TednpS-}CVA#?A-9#9pYLzZJ^~wO;#Hq!u4C%>W0W_m+;w?~ z^oj}!(VGinvGs+EWu1doY;XF!>~D{x_+_uuvpjbBvB%V{STr~^!$L2pL(dbyT_p0O z^x-UQp47m9H~FDqAi$a5mtOhoKz>pdbN6U<-x$B#ZXOF;+iU8)Iq~b5J`$wQ&Szsc zPTi3pm)egI(2Z`m_MQw1NqWsYNA3sT-$$SG*34(QusgtE%pjsMbF?K-NUAr+mW&Fq zlj=nIzkBIs+qqO%2z&f%PmX^$ls#S{DnUMhXozaS-jgR)nlP15UizY$`lXJ(1MRA0 zG2*+7^XT#UYU=0DuLuR=^V<35dX2ZH_rOE5Xjpu<1?{45Lwl$@vRpTV!}T`zJa`X# zJ7dlsr!>K8KRyz&$5p4byzX#`JM^qI~1V!M%nWetq5g^qaxIc2W5`=VhH$E+4dE z1Bh?oo?`*HN8dzwtX>)7fnPm*h(Any*3ijg5vZDOHQ%&iJtohx$$(e530R+6rw z#UN2dFy~q6DR=SSxeO^48P4X@&6%48400ln&1C|9<&@kZ;l|IfE`r>zPh83_)K1xj z>`J->T=ys1+g=Y04T-aU{EzH;u*-U<$Pe+-ebhz*-BH&F+V>udf~>*93RpU6u3lva z5$-0%siPVJlsmOv4|{}M9be+0la zcG))&3y$$uaiYU9D$4b5euQI&ndEvP2hEu8B3?)y^D&Y`#f9XCM!)B;f*62t@}xl% zn+ap!3->~C)N`z{_C>{IFAaLRdCBn37haHN2eduUj{@cwbb?vYKC9kEdi~5ZQt;-* zTVT8E)_wt&pL}%~@9ouB+E;I`)H+?;P~5zB>+4*#fe|8;Cr|B}GIH`{Iy`kP<7R$2 zWSuyay@~pEi-}O6&gd9O4r?bJncpt>y8-sRgtU&p_3T&20%flI8=DJyYI2LRbDrco zrEX$M3c-%H)9Rvr5L~B-bxulsGYLp(+vJt0ZS*wNAKXG zy+?U_9Jgoi-aYN^+X+7dm2EltyX$r|AjW3{UD?4U!VT_%zNE(h2B_fL zPqAi%81DUBnXcuU*%AqI3)i^RMqpa-L>ou{Ui`r9-yhQ1H$I9ISAddbV!PBfMNN9& zu#$uB`FeBhA6~yswrA>>tWEvPN73imQ1$so)cVz{6!`TIt-0YJeMtN>%46W0U!3^n z&SgHtOBwz7f&VUPpcYX5<*4;b&4thM|7(9Za>PS+3iF?1nfFWY<@QbgPuY9EUBtNX z!Y;Qy@kvmL0Epj^=y&pz-g3l#qB-*OUCBVQbAwFY-yb0)G%(GX>7~Vw5$VQ$iUFd+ zPN@>fwS9ZD<2OB~l&~txw{Fe+O>WyLuKaOQ)}}L5^p4N6ZZ-QQ@Tc(tW%oSz!vxK{ z-&r1t)`HUOLh|)Sa{B}c9x0x0S)batUV@w?j2bU_P+!vdIzBGA2sA6(<-dwq(0UYl zMUq4rj2`DL+FS^zQ7F<)UR#JPe>KX&^8%gX(9z7hE0Pv0+(ig?&vT!ga~o?~H~=qP zj?tUxw-1Qq@OVhpRl0_UcgI8ReKFKan-k@5{6kbO%eHF#tL^yD2o4Nv{=#Fw-d}Kgj8ehyZ$JEPmC1%qY-De8|J&rHz|EG87HM z=BRo57cjHM#cx(GB59r@B1e$lI5*eYrbm$oL7z)&Tf=2j zdA@yn8W}R*BRE3U zwj(>>Go1z$NY;C&>HE?No?;l^Ul<>gA3j<+^nvt>SMQgEW*^>e_I^P{fza?FOYro}DO3mzQqUDK4@Hz8T#~lt;F$67{u^ z=G{A7M+le07~1uRADYF3-&xu$`}~Sb2N5Zrv18J^mAo`*T~NPf4f@uYj00KStb77p z-w|o3v8`H;!F{1t*erQ81ghFaF=rAcZ`13g!1Sdr2fy^W z7kHXTw;a1nW*rNy%dTIb#$Skl{~_l8;Sir_UirOOS$xkb-+_bb2dO_1L~? z9ya{F=*_nj4Mds0)4bKZJ%Thx=B`;jx>M$~__7u4%29Y+$c#{H*4)(Fo1V|LYnye$ zg=5WN@EXfE3BMT_3eID+lYrlAA%24f)NE|G3`%zx_f}8pdwZMxcg5X7)zO@>lnb%V zaib)U57vKl^d=%*J3e--J@HH443`6j$5XHjDV{T#f4awD931Fjolg#64C zm*vYR`p%rrZ#m)DN-N6!OUGUI=VX^uoM4(qbl;~e#r_^YW=LpC$P>F{*pQ5HPk!mR zmEHsH65)prAC^nIzSsNv&1|8*eEgQ zE&1^H@#9{(pC<;W!L5Q67y7XTz%P6Kg7ICSNj2$9D$T6)E9_mmdz@Xk2n-ndFMD?0g*!d4;vxDxVImAj3NDkrLRj&jQ-u*lnU36;&&FD@kmD1=%FI!6ai`n_yN9L3go?UD(dM*$)S3EG^e=-ufEoM$+&l z;+$tP#X2VO&fqv=$T@Mi;%1cIavYl#4+*_1SFNeY>*VG5JA)jxBvF|Olb71FuGw%C zVYg+g@t@7k(c2m3+jh9N_ST(46tpxOo=|3fHv=(;4cy;yE{x}D_t(EyN!%eieAyR?@l zF1Ylc^BOb}e*q5=hFhkYt8AS%c;Y@>HQFaE8#8 zm1o%4zP$`L$&ZXF9{Co09!{@PmULXC=OP^+&T7cqvpAkorqDPco|)Cac#ZVB>>29& zUqzm4G30c3J)RfN4dUK?o9tu9Cglc80iZZt`{`X9qb;i3N^NPCq8KFZW{WkNob7#G zzPG-p^MNW~e5Ys0&%kgd>n1ldVxkbd$jl@$%0psB@AP?KTeTisw)+aZ5$VP3vjNyG z#cH~~W)5;6>}q?{KRXSjOMd0P9SQ@>!mo!{6`?dg{5EEO`p;je^ja#Nl{&Iz-1Wj% zp7nZFG9JNB#AhIPK0lD3OT@i`bW^e3g}RdrR8F6N=}&$6?@W%iNVS@aA`u$XX0Y=G z8~PmJdFQ1?!sm9W%R{PvEPBQf5V>NpVQ&^X(ZfC;YzoykM@FqD@-1rKdYBwab?@6| zi%-X)xtjEDl#Tf=MYb%HTRLma^1;iNH!JVK;}wge{g@@fGPS;T{qJ^#huTS`J0)M@ zP@B?-Hn37QsEx`hQhw70P*?oO@ik0Ic1VMwo21@{4{6xPtNAx4?m2e+ctope?4xEH z(8{~yygfELH6q9Rjt4-^sk;aO3OX3`kPcr^YR>#zD8F>L37R0&r4HQw73u9IOv>#`Yj%3tdUe{{1LA z_>EsdDlyH&$9g6mP(!zOs$?OfAb!stm8b9BZ{1c=Htf79j2yk5Qvl!M@J~5G&LZw) zpLLWgqW1=Ra_i+(dpg9{0AccC8S=9G3+79H1oOq2=nqdUUGmnu&9bpUIb9xY4dPj9mnp>U2>5Q3)HMzZPItv5Ri)_T{@@4ARppma7)M0@>8~ zEA08G#1G)#yfPf#rQ$skM|F%2+N}GB2bevGPn=02POZx$ zrlhjY^7QF+h0$V&embzvHcoWzFO?{TUofNM`#CKDEc@Y9PoXN8$89}c*$7<7n#c+E$Bo*rkO6X?EyV}9+byKlHizI(|+H~cd$dnRj?3mAf$ zgy948nR_-_V*QKDl)MbWZ(y!pvCa=SitR)nfsuljOFx-Gpp->o51W9PNB|N}L@4p4 ze8UPrRyO?)B|t?$a0L=q-0gN|fJ%7tck<-PamT)zNa^U&>jw_!3MDjqI@S!mjdmvt z4$%V%8}A!1ZeYruJ(T)TN!E^L*B1%*)VGjkQu?|Y1<_urT~L?Q7vo3GHESPEctG}R zMff*O2flCEVy=SP&@Gq>KpknQd+Ft!sPNVusxEXMPsaFon-i5i6Frs|K0% z>#Gs?)xtvlCDe=WNq}WSkB2TEn9xZWKuFlWdFPHa+T@;^@S;wsH*Y?eHm>=Dg0`RL z?scIe(Lq#D*ga>IFpwC5Dx2BEW2d`-*NmHI26j_iEdlwqlRw4%o;Z;RC&f#ndnV#x zw4M0Cq=~OjbSr&tqg1eD>pZ1I?I8^AYb@6rlOS2*Jrh@_m}N#tdwMhD-dvhA-DR^# z_7FFhAr=D>(lb}?T|d}ku4ozztGCD1BHyAo7ap3o9|?2~12+(SvG7O^<&ag@4Z`wo zGD$j)vcKs->Y3oTIe!u@ddhjsfp>=1t)=X^X|C>y#XaK(;(N>1IJMh6Y-_g;alxVA z(;zmY4b-8H#QU*TR64!5*<04>nYG#%5CvPeaMX9XnD;(|p!Oa(jMLGa8`?9!B8KZb z)zkO$8ZkyBZNqj5^3WlLZaC0QG)UeG=#|#W+0RG4^T%>&`?0v%s;KZN^hAlI{Qa_G zFH(4Z;j)FxmlHgck)J#38L;}#rzj;f&RCBv7l+-0B^_KrVt{x)Y>)0G3dx{l*OCTI z@7ZrkwsGQtBl{2H{YVX(BlWYEyph`p9R_z~*N6ZsPG*@8dpOAP*_!2F(C4xuU|TBR3;7~kmEqO< zT3H}EE*;RU9BjDQ>LCzr%!#kzqu-HOkT1sPrSO-ncxvS*eO-NDxI8V>h zzft5lWs1vxPnt9#5SCQ);p#d?#P}-_-H18Q$UX2T=xu`PU&-_MELdvB4|=tAZ^l1l zlT0L$g0h3+L?FzeSU7Fx?TZ4y>_FW z^QbVCG-W`gN3$~_chB-rgaQe}^IB)h<%y7NwrcS-4mz^h?dZ99d{>s+_$g zLC1?A7?UF1st*FDIbPq2!+jJ zQ0vbrLo=KUOvMi?yL=!;XZ|;w`W>N8&mA!R(%t*PGrz?TVI+3)U60o>F)0`R98sC} zv7^ng;T>Xoj^7`gA3q-Ijgg+Lg-(~Bynp!Uk>=0{6f6UG;oe^|u$D?Ecy^lloMXmR zkMhys=t+VOV>0-F9Yy+_fj$;Ttn>jk^Hu&o-V zunpeTOB46r*)%knD$DC-V?Ck^)i*g>{mP=C{>PmziX zH#7JI56r;n)hUq2Ieu=81Ur-cGfwp3+GT=d-n=(L zzqx=H=jes&7cb61b<&IsLhv9iEJvS1_{vZ@U(`eH71gc#aZf$VPnIelwJi>9#NN*4 zy}uDjzL)cp#4)pi5anb#cF{Nu3YRu|XAdO_y|L63Zlv}s9C)ToWsqzxd@6K{d~*X& zYSt2#yl}BS|8MXvC)*V0k;zwR;!@4ZO)|4M+boKm$4-Wm*Hw0Y?J9B3NT<9_*K#91 zJ4H^3D?E=`ZmTPvXnZcYk5l^B@&(tcj$O@69D9?&mrGiH2BpjFV9c;z((yA zGb9?A68}zAArVM)(ItD(PmGHvQ4{^=d;0%QB8m`1ZB#6(O$4QMrwc!oou5b?Nk|jM zy2v4vi5G;9S~za{0Y~o;SFUEFJ#g?)bMUr9>Q@=*rb!eh4jpRte{ZkQkZ_O;-YtX5 zc5b7b%#Fx?OKF0Mn{YYglV+vNW5kKl;WSNzr-6iF(y$a4_akz zNT_+|6K}o4NH+9D0AMSN0@cc!1?|G&Y;<$C^enth+fPn9Z(cpPaKI2jp`9}#lR&^s z&l|T5L;w(*31mi$-Z=%KPwdE6_Dot&p42n>!3g&1;I#mQtvONpmic8qeULe$OjPf3~_(9G4O zP(kd~sTomju6ossvL+XFy)Pz>p`MvVk-Dw@(iVF9ZBrXO| zSR~oK$~e?80P7sA`Z}X+;g+S zz+L}XQ!+xG`AGc>z!PG!NyqkCr>BofkRSwz#m5qfcyYceKe_fKL~REM0K^{R@4UCb zHa1<9K&U?;whn#|BXcEwbj-Jp90g|7B~s#WornnxfsbiPFoTjdLyu|9X&{IG|>ROwhdYohA{%-(8Na<^s2a zu|~KoV@J{**0b~`B0XF##~zi@6mDp!S#;CFMOr%Fs9i7|d=YvETERmzcX-B5&et<` z2Xq9&-4qFLpu;zs**{q+ZWWLu*TtLi-|Dae-iYOJE!gVv8lUS7=mBfSe}-(gX2OI> zc)7Pn8r;3=Twi;=eQiXBcw662_#dM0lc%S@z53j(hH*tLNxj|04&+_@or#>MO&1FM z1XV72&itnM=V5RaI(d;!03>ezW=@$rv*(SQ=oXVmrZ(>r4D=-8aT&09v9uzWX3=j_ zJC2IgxvDDd&YU2F782NaXk zg1o@2j3O6|+swF)8jNJ$;5mzGpPLPLLi(mnGWM{!Hp)yl^T02npF=ck(rIaTZ1fY7 z&!FC-2A-aC5au1w3d0j}tOh=-{Wzxtp{10%i31X;7^=fIE|f zBh%*WF9-g7uP6c@xmlb{lT;uR9a378nHGeRxaXBOSNdFA@$K8buXl(%b0)zEUj4A7 z6!sxM9=HQvza@K<9kMnL&GFB72D-hfuvVMf*=}!DlcHRszM8}T5-(HdhKEA7RpxKm zvuC%NtbjUpdF;vvB04<@czVr(^}U&;LHAk4fo%&dI}s@<+yc{E9sLbTkun$Ry0x$^ zd{^OGv*Q0+8M%%^SJKp;RypxXQB|X7T*As&hQf+{wwr5^ z=?T`f=f^Ztl|61w&yVo@VBvXQX<4Wao-^AhIi7AZkeM~BoiV1Ivzpsw@>E!xJgJ%Z z%Mkk-86Jp6pjYOc7q1tdEd{5+a`Np+bP}9!_Xx(#>%UHrd&?%?v6%I2wkUv5IR+1l zdqI>>nP&CWsQ?e*B)UhE0kyl7%B(NVoFxZO)CsWt{Mj=mO`2ZGcr<#-Yb#>SU7(C@ z1a5aITwC=PL*>vqlqWYaWHu?xlMB8z5BzPgXmMrd=`sgx$2bMPm170vITa>wkwL9- zde@NVPP~((m-D|Z&VOsC66SQ>kms)ay?qxASPd_;xF~#%{o^%gThavSb1gFSJRCT3 z;J~rN=sA-x5$FBQ`G43+avn2L4v?^Tv9rcJUnJQ5VQ1PG6%)o?33!Zi?Cj4I$xfV; z)>p66--d!-y^`^w*RNmy=)-I62X}abYfg|`P|?CbZ*JTb@m_v9(H=!k`Cn-+KV1H} z;+81(%RF&oP@~{e>hAxU{Hc=-#Ak1hwf`+GWG=!1CoirfX3X2hPNw=A!R3s$iYZl{4!r-J%HTe_!9M9bM~v zEkz&y4anQ&!;r{wg7P8HbU^ZPvBNV#8oOLO4e~QAQpv|p1AZ(f?HGeWzeKZpWHVVz zyZ3gYLD)QVp*%6ao%a>WJQlSFH&6nnDCYq-PqpYYSPadAWiz>F>NmW0<-%YzOX1;I zWwm4*)o31VJ}o4TqJbDSPoLpI*ZZtHlLSx!mo&8VGCSFnnkLTNBN*QAQ`>{+w$_Ub6CsG1|Nww9v=;$QUJq6qrF|z>l`obf6C}kp&|}j#R)la1&ewS z<&Nj2{ehOdXIQg{#%c2M#uIn)T0(HzuZT0rYj{L4iom`Mfk(;<&R~Fr^nuXTxrZ6YRt#;^G=LAqh zI`_P=OOA`4!fYHi8Pqn1y4m`PTyN0nRJOXIt`-`+8dtsMUP>7%!>&~GDlXe9S#gS$ zSGFr|4VjzQn1myzS=qyQvG2Uoy!)kS^N_ZdgNqTdPY2ZjxUWD0Yx2dbSFLSUe=>R? z)v8*UdYSOICZ`p)Oa8ke>cF^MyXbEK4tyy~yq%0Q{2dKiev;N77UMGkY^t-LnAbD^ z%bn>)xJHqC6K@-=Q4sC`jK^mLz*69L#{EDCq=nN^YZ7egd*Z~2Q0*p!zbF*b`!_q=?Sk-^x%`e#{+bW3IpY_2@$DQGwV_U1*oTg z+pmb4hyoW@g6|+cf0Rae`i&Wrr_2xrh>%Jy=FiK%M~lOIqL_!snMDf+FH+WWix9?J zsK11PnK3P%JUW>E=b2K7ZAjLIe9{Zg@9aAjx2UijeB;ve(iw+vBOD>ANwL!~F9$@awX?9H(wJ;%oq=6Kf4U#ziQ*pK~?Y8G64;NbrK+z82aO`DifUw#*QC-DAHTIKy_a@|-z^8|t?b?cke(re-YYE(+FHof}vO#jyQQGqEx(>JIVv2q!|UGi4CVP9;GF7I>^>}s zgy&Du4q}Po#?5PSMDTHBsYq^=`4rXd)KZF*hzJZ|7~eLjQZZOt!MjRS1(aHVHL43 z(RS=&+sX{zOJm)!!_bI&AKkV1>pptTmzg8ce@s6)()X(_Qvd#MB>+TvYFhjr>yj0iZn-3cy%D}P!}v5F@)dUNDAAIIX6D$s zMf|0~HcHcl@7~^a{U3_kLbw19x4BVqN*{{dt`dPi@Hk|<(AtVd%PKpyF<~touYtEI^oxbf&gEM#H;4NF*EvaQ` zwhnR4_@C~Yi1*z#M358dn^`${Jc8Uz0}<)gZjkkPtJ(BLW_+$?v@7Eq@i|sgqZ#Tx z8Cly`R9Y|EzT3mr?pB6l&tTV|%r-H)`#iG1#D-Iuay1NomJo+H{y6xYJ9oZ0_gfIv z-+$?{iC4-8ua2t=d9Mo|EVqm3+!QTf%1iIR2m4gM}2Q*+guxZ6bv4_l3SD6duRNw=;s? zRynPj1*dliZWiAO#({Eta}W-9Eiiths2du}Q=Z=}7zqROu>E|TH%uX`!n8Mf<~*U$ z^A-TZn=@wt+_Y&uGd|Oy4{|{mM6qjiXrb)a!`jW{;W!=xHUm)jHf1}b@FauZl7`5R1F+w_gG za7wb>?ZlyW-#YB=qsez$^>Ivy`5Gzxt9KtWp&pUejsS~$*=VX3ja_#)+_T;~?8}bbw zvx`TM9@e>^CmKALW{C_}P@Y?+g3kaj1Ge7}O!vvL74hvBlV~y?QLJEYD z=q@xuDN*Lg*gR=F$AED9Dbx40NymkaRBF=3-t*D z0dO!3z&Iyhu0HDkIHuT-0F0uv(e!24^+Hh^z=qHQVXGDl!o@=@weyCOu9*QnurL|n z>|X$r4#ZL913Ea*dZ4CEna=l$Du>cknoOXzCC@M_&z}4ce8=<#Uw8#!?~veRdWY?x zx_Nzwr*`77h;Rc%{$2uu@Gz|cgn7(E*`fvxmjYmXi+)Ga?J&59j=!k`%aIE+MS>Z5 zIlC~fSXMylaox0b{#}eguuU8be~V^t-pn1EvYuw%-Q7{?LRoV2g(_JVw{Lw`iW7xX z$Jb%T+X>UFH2{C;x>-GnS)Pi6-dv+-ijko&{H4*M^Q(&Gf834|@Ii3{t1L<2F4B*& zgUz|(VUg|Wu?dk#6t|^bvIZ^dnccIGlr&hhk6U(DnjFsy`py%r<1YMsUY5qCXDQzJ z)}(N%Rib~b!@*v1%^BC1J}_l@4Dk<}>$ma24c}C`!t|!md&Z8qp%{g@9{0iDQx9H~ zvM6i$fRp~=HAOGiuEqcUz$QLmGvs~Y@&(hC$FYweu5zXRkEtM{s{Pwben4bFC&JIS z{looOD;jG1@5K@y$SAtWBkWb}mR>p0#w8I>pCLE;^yfti2q+?eK%hs^EAc>>NI(`^FfR>ud-BPRXwA{IzDs zEuGc2HPvkTC^rrjbJsWPK24WV(R@_o9Z5}smq`{%U*n>_j|dCPV#6*^4O`GFEcjb3 zOIwBWQ9#RID!v?!ZsP~e{rrg0^>hzXJ53eK1PVqy$ViTqw_BDSig z8c>v;y6_SOS|T)kWL1BOmYPLhiY`rDD7Ptul{W4!F*U_12Ukg{ZrcUYd_dI6%Xz;1irT{bMEn{4G z$*q|^B##|X=iW_tr*A%)^1zRhJ3lr5m;A)}3x%${7_YI<87 z=6H&hIT_88Z*$yl9JVio}BpPFtq-9bO2f%0m$ zDTLU%b?eVE*5pp^cp76TSKGuWkD-RCH)s1u?^xq-zj@O-v%LI)dKjvZ46ib_{c=TD ztk_Tch>Lr!=t~mO(TVfs_^rYF<7u_ED@5O1Yn83zNP2kbvh+t`+G;?-VLDJl%VGKGcEDZH zn)Jsq2sf*43zwHa7bve-(df|DGA%AQh+98SuBrjb%{zB%xdE=BpsKOZc&W)|(Wl{- zUyj5z^rX;*T2Lq+GZESF`L(K<_Y;y;pn(~ddSC)5$Sq(BpPTEbnfbo~Ug$I?7gQFh zPNT&G&DdSh)F?U}p0OWOQ2gX1&(lKnwn%A8=dZtx;Qd)wAMg=W?=~66^W9XcpZH z{+XL8kxs{7v+%Z51td5ubPyb*p7}#a^k(tbkaq`pK|%~j2wl3w-no zM@OxUTRlkhZgYGLCyAqsw~m5---*GmpXyg4~6GbPG}zd=*vAHcJJ zN{kCf$JCJ*r~1Li!mOd!#Hr)5=3@bTM7h}1o*WfuGuXv|_V_0nTv>PnDxW?>KSMAS!|uTq}2;;U#S@UAdXQa@j16KoTwJ(N@U_9cAxu*{P7 zouR>Z^VUyksv2x+q&3}2DuZu&Gx#1L-By2E!wdpe1==>oS`AxU&Sa_(H- z73jeC{fN55H)w}~;aaW@lz`ey`U<68D3wM7Hh5P(Y2FO@!9M+75%aHEYA63*Z9XB$ zj)H$ZQ?g7Y%o7kidj7And}dOFnbU*wVBd0lH4y$7#{-I@nSDFyZp-O2uAmYX$vx9IbjX!L;emc7dUaR#XdH7q8IWDJ1{!T65#K@^tOmRmwhFUx|VKp(zs8n}3+0oDBBV ztYj(HdTP>bOs!uvHF>Ocb?5c3E}O~mTap7WQ{%3tCHmZx-;z|}{G}uf`Hh`0ub-Qj zHO{Qm#ku|`&wnO!QdoeU@XeBK&ybCQ(~?>xvrnB|wx^Z&rSx1GW~TH!PiG z0l9l}ef=!%`Ly=atp0@x0IO((!hTwpcRK4G(Tf1?>2{ChW{TA)_qYKF|4#Hnr|ZZ~ zVwqNp%FIGEIyyFrR^M9t)}7>fqC`SPd2wv>X2EFmU+g9nwDU$5C(fNSo9i~RC^MFM zJ8QUPSn*gh^Vb0p0>LscoSE(_h;)-B&j|?*GY~XTt3MP0&8TrIcKG}XT!b700~6yxg!U< zoA8eM`@;}~4wGz(;JpZ8gg!zW8#aZpi%KHacWG0Z@qC+4dYuGaubJMn-QlbQy2g%a z$j6VDdX;_l86ozSH0x5nSQa3(_NenT`aXa-6)a>Oj_%i$eeo-h70eqKMtjF+3rVB+ z{tK5MtL~`ezv&7Gu(Qp%Kd_l@F1R!Jvyj&bb+p~*|KvZH(mvhCrSnfxcWzC*y!!8X z#h8or=4T@C?)L_cs#{Jy!5M$lj}AKX9;70E+B{=I0P{E@5be@o^-wCxdk%aim<_?F zzYv0P`W|`BzBp^-`99V-KCiy6J^Py7W2kt3rAS&b9p^W@9<3g)ka=cz$jKs{oEWK> z0vFiT3*L*-Ym(f|r+IG?ubyhqjnAeJJ8aB((@}Mc-Ng{!;`VHV%o~ z*oIO=7G1JF-xJgqmj|Qa`Mk-ii?K$fXY=%Sr9cvmyT^3H=iV-z5ZCSPx7x*HQhcTx z$Rk-Am#JO&xq?CDI#RbbE^>{AhL0Fg;qm!Bb4PVFo(h=ujr$qY2yu2C^RVeO>>AID zDK^b@42ILRRArrb`kPqs1?TpP60ex@9C?`AbF&zpq6w7gVIPR_@o%e#1Y2ETjy zlQV9$*aZUraQ5tW*4J=xC|g&YUsBa9cv*BAQ0diQmIqNpUtQGrT*Ykvx_Em*h}gbW z3X|b_j!h?Uh#OU>T^w^jkhvr!)`JH}Lw|Q_39@;Pr+DB%M@B(7sEftoD$puVUMunn z>%w?m|IS(gK9viCaALA`Yw2^rzZ{wrvp{(|$FwS)F`Cx4?SLL_9(NaQfb~wf53x@ch!?*`~HUCSIXiBnzrZwhj2K0ySj&{`<{= zzXh^pLftR<#>YoumL1G?t|;~%2^6ifZ;w8(J;rZyB&l<=+L7+WkgNML(2cK^g{QzE zx@nv1z-<|~Y0$=YQ_qI4N{&)!w3Y+|<~8Bef^CE}c7;WuKP>ENKuI_6-li>ppPs3% z2%=f?C!tRCkiwJ_+AwPT2k6S@Lf+k%de*Hnm^VFiYxz`fkx7KevAFq5CHUn~66qqQ`1$rb?XvsQc}aS~E`(>ukZ0LiApgI7$eq#$Gt@^;iDkwUQF}WnUZZ73qmPi+^rkYM$UhjVWWZLxJ z-TQe=M~?tYAMEMKZqJVBMoXS;`yb$xg_+Ox-C$q0zyGnmws#0_^+=>q_Uf{&57q3r{+P=xnXRl`a+#=hnawhfU3R`WO zm-*C{E9zlVgwC_C+#vny)By=z^*4E`B*%}q3_DUfC;BA*4vE!b#o+_R=b~ZYkL^VbYYs)Cdpx)w{6&ca z*}xDK9Pbb(Fl3h1Xmh1)F8*f8ZRyf4%LRA>#j2YknFdWTkbTGGCg$*EB3@A#~4~ z6JLY}0Z02=(JcRi6$C-3U!=f15#?#12?Fl)YCTn*EVZ5hkq9A7R0UkxG%TcJIDE#P z0*KraFCu>bNYYxVddL#ZgGWj5g5dP%@^ZNnCUVQe8@7t`1)AxW4kUxgS=Q&{$@GPk zptf7jB16adH(}*w?q@>CQsew*hy+|eAV0@%B0gjhpYsZQONe-LUNVaOT$|KB6md6; zKSQrar7u|`D5rkFam(E)aKN~hOYg6sZH*B>Np*N?GpGq|F3_vqj48#K|0e3zTPK~3d^I6WELN3B<;9b`tERY5A?q4{LPE)uOl zQ0--muV|M2WaxRx64qNrd_-t>K5fU(sdI@`C^lc#vtn4jX!(<#fp}TF^jApqP)fSf zwX=8Q%%^Rp)#lHw^WY%cW}R*a=8o5sST_srD(c2iAu4#r{Fw)QM4qf{7u->(0HPoX z(!i`|&LD~KUynFWt{vP4q6n6=mHu(WO^9Rjxb0r%UVk%i@W3SHQ`D(7(|$YKu*rRx zHV=iXkSUo^a$bz^5yXtt^Y!&V@?YzYsJs84xR5B2DP2F8Kx61zgnSZs@gz(iFWob| zXGfa3cM4MpT8Up2Px>DC5D)85OKk91bnT5rxe$UdCwAmQY_?`ly!}wBrZU|wpTaIdd(jcZlhDsxL;XxLu!Xx4mtU3{5jco}H2p}R~`#-F%? zkzpxmSBzeTRNJ;?lo`U`ywSvqJ9qEeqYH>o#Yu;ys3EN8=v`zklz)u$Nbr*?*ZwZ( zh3cx?SO5qg0v~YdKaX~Y>R_}A&-%#lQzW!agW#*IgzNyM!I+T`RuV3L8RF_{pc(Z)>`dP$!bK(gXZ5SK59^d_V5^n=Z z;P>F+6q05}V*io)Nvo9GI#7zNdkv2g(-5zzGoG=_45WDHdTGlMTCkRCl%a)a_ zSIHtXx2jqCio&{MwdV|WMb$}6?TkaCE70N&#k4qKo%h;Y9r&`#4$yH3rPN39&V z?*eWdnPe7f0u?Cvw{t$7LR5hEAR!0Y=^rQLG0RoB{80y6kCEyC4!!!;{28Y`WeN;W zlc$RUQ=xhQ@Kd`rk^A1NUa}xM-|ZIg=OwyNNP%5TF~}j@k7{(3kBQMAqs|ZWqh`-} zqn$M(+rar#b8d-0SDX*O3)?pbFZS?aUheVKyCg}l;$xsn3qil|2bv<&jc|7lyAQ8g? z?;kvPlmIB*Ui2?2iWH(n@xMpiaF2xAgMP%GJSlNu*Umf(1Mtrm*$VFZJ|2dAc6o0` z14W>levMl1WxY`B9(XKXDS5e98SBc3yJ{NJ_@s2gftRN4i}X&sj}pkJ1*sl#@HMGz z_Qqw%WID%^W6N zq^Na^&0CKoY(&Ou^N9yo3+CfEY43Ri0KLg1`Un`Hmghe?_v@X!hPcpafiUzQ6AZgT zVl=q-ytDz84x!dIb4;S1xPf=QC3~LLGy9%_71nkA@p&`68{gi4%dbfP^r!P<5{iPo z6xwpgJ$hpe%m3yw~3KUL|xHxdAoEd4}EE~Y-HR`hs|KX z6{C%{cia+Wmo+OMPK{wUcR&T&dR(#OT~q7e;9R<96Cu8tUvsMx6^((+jyb;h@1_B) zNpkM&_cGVCjg2IEYMasXR(zcNE-#35h~KbY-}lb#+dzD$+qP|8^Xkgn(9`|{hmRg@ zj*OtkHD$fXUl`D_VN4a~kU>9F)COoqoo5B$oX^ZnKXE=qZiQL^J)fbW7nP@CTk={m zf97;^>YfS~2^csWdxM>9_>_0PMwokLO@?HrQ#|&#?V`x@e@OAOk@CrzPkHi8X^*r~ zRKpnqLC1vWBf$9wR{6)x$)Dl71*PdACo`z(subsAJEPKv|0AE1=GyM5;x9=fX_x+T8LbFo$n2ymr|_e+b$Wxa%&d|ZqqP|D7E2XYYHm>=1`>0#4RAM2`!jG!pBGDpD~rJ~DPF~~#Pv)I zMb;7IDAYvhpA0?E(hcTSx81Zgb4G-EODfHV_1H%+PC{E5w~HI4N)KxMxDzd z(ajt!4-(^6IXt33mHU#jcEkSDPL(^XeuFXiZ@R5n^pG{k>hbZSZ0!BQ`qC zC}7CDt8{}XKgc&aq~Ay$8rEt#>0@bIsOhp_xC`t8B;bQkd2l+)13tW7-Oo^{63rDv zqTNG?r+unJ9-SSbUDy>cAUCgKe*4-=qJ!v^rJRJ)GQ>~!eI)?S$Pw?v`n128L_i6KZjOB;z zkw%++fdnrgCz;;Y?EePxO|rdPCt0f6LdJU)4(u`E5;r|Oykmz?G0}Eq5wy3#wZmPk zJa$t;v_)scFwynvoknNNDN8?CMhLE69WMqx1$uCXbFg&xQn&|RDKbjS9SPro_&bJzkNW=z z`}6O+((BIeTU9{K16dQBaq1*^;; z%pui$?)Wt{4ZK5|Q5*m^XhLcJHHdP*|Kxx8A69?z_W>AW!|R_>;NSE%Zt{GJ(c}fo z83d_m03PTag44d1^!Bl-Lqop9FMqaqz8<~ln;SETLsDSl(a)RCNrAFc>yw8qvy~WU z3-TP;hHwAkYy^MW;5(1KpW5RBZ(K33m%=hOueN=OEFisXyKlRpT1Jl30?C4{t0#Xx z+rU1yyzQyS9v7Uq@#y4qAI9g&CPleD-Rm@4f5 zG>v$A%PWtlumn4gQ}q@N#$K=TL~9GaR)f-T8@fx4Ucb@oH0T3sX)he>?|tuk(+xAB zUHZ)7;4X z5&G@;7c@W7?)V*-R;T^f;-5OWq0)cgr@!}o>#cGclaB7iCq?nz)6#AYt5bZ=3c&!< z;$6C+brzjJK|rF@0dH@-^`9igvplb7hJ3Rg{PXMw^O1$}e&p^7Veal+xKtRfd^vYX z%D|PY{CT(OvTk?N@a9IkokDR$dChP4;(sHrjddWLR;PY<{>Z`+88%pqaGf&i+z>T9_``l5)8)wrfrC`8wGpOIZ7`2=ExphJAf+Jhr*{#W2j)w<`wj0B~Bt4%D80hOsfr6WDn2o>>Gmkjqm2 zPOgH}3Zeahp8z7qf=TN$*bJz-*Dl7zj%%W!GFw}v7w^g#GL6K=f{Q~9|2y2wucP5{)4aZ*o!Z2ys%k~c=6ZpK_1ni+;b#f^Ea-j zn7ZR5(C#mv+#16*dEFJPzZ~e7Q(wvz7bQAZU#c@_iV{UnGTbg`IO9or(*gcN=yE_e z-q@T!zIyYcrg8L}62;+V9SMh@@5*!g-b3$wUrJk&9pY$p?Q95p_2wTY1&9H=whMW# z_;mRg?VT=&z~6kM#kbdkI#{x{)oUSP&Ke67On+lbDd!RT_3NT>DFvIB>o=$0e-^vH zR*;-J*U)v%6e2HO0MV=0YV!BZl))oPH(f5>a`B>6wB_6*Lgj+yZi_o{-WW@|ax;Vy z(+a;~ax{;L zy>r=h{|=jpn0kssOHeY~#@81o-Ok>d;MxKf1QrJS^ez#$>Z4 zi|>Eq*sbGjdwuACeiXnBynWOQgh!Lp;eg!>4AjCi4GdVAO|A5$nU>nDIXrK4Bsw@p zVPG?YINaphT2}S4co3+clKwHSfndg zCD_*pFn;#=d}%o?Bg*SS5@bak2y|x5$I#|y9|35#F4)QwfMzxi)V;i5Mr1N(3*FO5 zF5O1spKI`Pe{V?h<3b+2Ni;*s>1IozcpWZ*Xo6gjOo*fbcxW+CG&P1|V^KCeC_nRo za9uQ&Wlx_kd%q0Rflv$TZU_|N-m^>7%TCH1p{Oa?0~-|Lj>v;q^vPt$o%-|`Tu#ydZ-=6^Z#C|zMWJPN%R@3C1{uK0^bp~N__#D zUEr3UyLiPb4z56)WDa`t@+kBx5<9?%JOwb(be`}eljTE$cpbvN`|j$!+lx&jYJ&T# zRP{(^!R$Z(e!W8z>4N7*EB~u`kpWYJGZ)kgyL+1dBeD8Y>_+Bw{XT-`Z?-c5PXZh|UmeUVn zc}zJZzBUBz?S)GWN7+MXH&X!8SU*!D@Trqrbh3#y*BBYaPj?ha4JS^VJh8lRS6t5~ z5MTO^-+bh`<=Cd9M~|(Jey~17?1L&$O%SAg=C=~x2wvS_4fa!r`>AP0BAYQu5Eaa5 z){8B72elZjy`77VKVjes}`q zoc|c9h&i^ZeotF4R?}O>x-5j%?1L(=K;I=$=Uke(e zliexphGhI@zI|#uL2v(|*<|>Q7ojob!5Nkq!q)k#YZ}uvUzbm?6=>tI&AJ za?IYXG2F2sjaI)7iRQ*JW?bNH%k`VY^*@{0Nl?IOre;dpgApPJ*do*A`mYvTpLI^v zU)a2QjU>0X-f>qbmGW8W^h-%~UWf+pi{!aBtxI=ZCfK_eknd>IJ+lPILJX>+9>6Q-jUsH&pL1f9-79nL^-Mk`C(@3Z_k`$1B@?|rEr$_ z7Ff@AJWjH@)`X zUH>~Ew8j@KYcT^_{Y$iO;mmj8JQo=;LKS>n7f+w$(6Z5ID5baGT)lp?7aU!?H=o8nw}Gn6i`ZGN4qU+nsCFe{w$sh#~*K`;^= zB=f7!0p(>VBzbl#g|5$tj6EECmPEH=WKDT2vr<|MSNq)b|H8Ro+i25g$}~Oc zb$};+@}=X)33C5z?b?v$WMkkWVjc}^TZYkc_*Z$|IJE3SfCbqe+`(s`^$<;y>DhOv zgff*RL7uX<$R++%fh~C40oO>>B-5`n7Ey$Z-+ynMP!z{nC6-MS{?|AjL5}5u?()=aMnneX#&OYB{J^m3U?*UujLG2D zcmDX>t4Eh_e)i82)ll2#o6Y(FXtT8WY+4@uk6X`q9^{7Fc9`Yl_j*SP7ftbnk~ zA7vr%U=~QrR}0;1&qX5I2g?K4*=@?G39PT4{5UnjzUf@jEoW%s?D?momhrtj>4OIw z=8_2e@iP4PQ2`lujF78F5#mN_fl?eoha(N>4X7gIXSDO=Ka$}*Yt*IoYXXLy35u_- z{s#KGbZJnOD7}`SJj0lohF~h3SN&ZdD4rN}l$_*^m{;Gs_0OfI{P|xjKl}jEZOE1% z{xEfIvijkd{<1U_vGD26`Gddu|NM{tabyfK>JS>C>Ff&%Y&Kk+85>dPBn zz1|9TCXp>u$F;0eRVOTf#4{MzZDt|F;Ft~6KKI7$@zV2#fM7(HD?ek)WnMcUyr?4+ z!4{UadX7n`9c}XYWvaUA%b5?q+Uv(Wh?jKzjI;USFTV8Bi4&_A{&1Y}EU?g8Rv)!tuXNN{=a-{u@YCmg9y3t4gUYyh5Ld*rOeq+ikC zpG|a&DG#AzIrE@E1J@3e8m7UQCqEKs;?2O8sD7-5sNlEdvHM$EuT=uF>NJJK^c+9V)9)hG5(+6a2l17N9FV-q!_2j3fiyH?z0%o|fUtJQ! zZUxbd;jhgFr@7g>y6a_H-4#Ahs+%$GN%ScX48X*C8Od1@wBNV%)^aWat0r3Ep}%>in!bMXb$wOuQHqjSqwd;DOLuNEqx3rV{@-1Htt-Iz z)?Cp=8z6hbr|uy{z?G}|f{-FY3^X@MauKT+7N@m&AZc%0kLWK@->hNxi@PG#MXW-; zO0N-oS*IQJ{qiX<@%=-J=cPhx$B!FxsmSHa?tE|_-p-ryKy#ygdo#f>cgm~gDNj&* z4RQAsf#dRhu=ZuuDe7JGH|j+J)id%>;}gtHD~v+mx_94d&jaf@6%Az9A-28KmQ8~r zq4FXQd$0*KlSM@u!ViUjlS>v(?5xcb+@v0v$+QP)^fecCKLM_SI8g6f}#} zdtA9d+1@drg-4!Ec#E7A|1gN+ANAA^J)4cl-ZpGYEulwYer?~61ZcHra1YWiQj6qv z;j^J|O*Vu!-p1gsSapi>M&ira&jESvrEwf`A=Ty!#5aOkXLTVe|I4+XL}NLsc+KCN z{96KCR7y|^WT6@(CdQX{Hs1PVFpU=9$-{mRoz|nH{qlNY^e%XGJi6JTuYAm}-EiMi z*1TkZv;tX5OSwt;hmzd1MNF#qR$_zNaGYHJ^_fbB-}Ks*OUuRo`a)_1ASVpYMqMgp z#U4-!x>9ZDQvkd%TG+MP2m-G)wuN5HCeiTtDW~#cUg1Q$sgnC-`U!)TiFTYq5(tw_ zu$=htNque8;bp35xG3s%ghNDtfAL6uk_N4avq`r7Aj2*uf>@y#4?ysqy{kPRFEbnp z)5k#2Ef39=?Yqg!4 zoXD4|NTKU)suJQYL<_@tlR4Atnw}tCqqr*nBNYD*=#DpvJHaPhX<=Gpa%8kgqI=q* zzUd`DGxAC6rmd^~mK)!?FLYWSvF#9{`)d+Omv8@MKC~?FDL)vd+1HXgcbZM8ovXed zo7+z_mh%{|S+DX(wue(BUbMSEy*;xl z-3LK$_H677U;g~O>s&*EOwzhHCP?}QkJ^bZU*6qjMQf*du@NFJmjaHg;aBgVO(>!rqA)x zsPux}Kg&!Igkw1J>#IkO!i#r+n$j@117P#XrQnc1IJSfjj&@8kEPM85JAN~_oFT}- zsLX0}wxJ3=B;I$`eLiC)7zRraVOomT&Ap-HrYD!j8$ai_1Mpa z$U$ImL!+@Mh=jMo=%t{T8Q;E5G`%+m@MS@AO|PM_A77sQSz;mwn4*}K#pTxlz0^Dq z^Mjvwtbr9e>FqmLJ8lEP4B?jDpUUthzNsVkf_2R@&iyKmU53!z&*T$(9I5c-nFo{K zk!)SJ(&H_z48)O%t|Ol{W60^TqsOT4=QfVqnyS`E`-Pj1Z+UT(aQ3uoKlj{n=)*nt zD#8m#Ic69;SW82BVRihjIOO;Vdi&(5<@C?%W{! zi8Gfg52)cO?*7SH{QBDKt2b_z`Th3q7xM;i!LfC&H}pw39mvjH!+%NV7#XOL}T zk*-~K^4H9z%3Bq&Q`uK)q`GW}I6KvCB(+PAT&!`sKiWH1$Kf|1>Bd-p{@g1kUkSUU z&CBsJWKLJ?S5D>1OnzTz&59!LUb^^-F(3 z0Q$ExwH+w!%>u;z4&`fO_dQljO-^G!z3lkf&MiBB-a0>$xQ~VUxiw(>3L%rG5>jHc z`7BS};e^aX-}1zLYcDv_3#4fE(bcyfh*aa$IJ}R=MTYnD&N6bD={29l!z;%+l5#|W*(LHWD;E$KmZGwC5P{uV+g(+C={DK>| z)gGC=8_tbBIGPW==MlD%Ht-+vKHpo%V0-iOO$RqI2g|enr4+Lf-)!(iS7jdR8+3#l zUEdIv9}h&?hF{UVQfia|0lXLRbh%QPL#S7r2bIA3*|TSA&YISm3)ovv3H4r@b^n}B z8hE*SH&i5*wcFNk^pEp{p|Wf-Fr~34kcJ*HW{xxR3x~t=ZBh)sLv=CpX#fw9H#Bxk z80x-p_2IHfc=E70)JS~?%hhZDFp=KRo20Z2Hk|2M@97NJ;c(}E*+1Q_t;!3N#+|;D z*X+U|dF@nRSS~)oOCB)Ss#gH<+_YJpONJ9Oad0Fn0;bishDTKSP zeQMUy9^KGYfDhXOVq9tMj&e~@t|3oT+G`&QZ5}#&OApZC3Ag4?A3nHxR!g!!bjzrF zwdZ>HLj(biNoI%zH5?dtwwX0RVpR%)caz+oO=K%M6w4G~i0lFM>f()TVD#x_=N;i0 z-`0F}6LR`n(O2y>wt{z+wHfl#-+*~QjdUj(UIzJn!MCbESt-F|dGfXd`BRN?e%C-I zW}P?u)(iSueCGQp=rnk`+!_*E$BosuHqqibQCjm&0kh@X|7yb7$|)3pzrF5(*<9GP zdYyk#vUiJXtcLE#vJ!zlJJO0-nG{Y3^qV$zkZ=9jx7V#%kCjd~irb`U{-?2hE!Dnq zt9`kKba)r*uGbahwy|>tp4#SBsCg-FPc0H*dfXLvt$`-%>sG8Vv5+lr*Z0c1STE{}3g1k5%ClIz&ZA6mYI$OK7uTZQNO-M?O9+jT-`#lcQ{OAc`v*Vx!K8Zs zxuy5sqqqt4WVbZ&#p}VA@BZd{-T9 zObXpXW{9;RA+jD6O2#E;q_BeTv1%EV64`Mk{`u9h&%Ce4DK4fNwI4fHc3K9(lsP!K9JuRQhCr{& z)SMwsIcrkX^cUnxt2b)PGnN~xr(OjGX8j+S_r$UzSrw7+pR{GxrxQnRvmab}heRX3 zCiI=FZUn^4$tcjQ0Rv&}ZGI~&v9a@aBYn~#JAt+o$rOxXFjeEnP{tT%UeRF;r(v`$6f?*hfxs%W$9}-3&A~c3+8?N@hwl@m(GSkSnUY2`y;^*3>_7< z65oC(=+T|H4Vm#(ke&OJNR zK<~#N-Nge3p1D8n#lFQv4kV5Cb7sEesT}Bi>xHjnd9&jOsdeSL$+n4wSy$46w1uM| zGk{(;-ve*>a={tRSTpm&i(jGa#7;-%O?YOVyplQ}gNmcMxeJ<2pe)A~ za^9HUpM$4@XqE>_;ReJkm;zHP^K$|4&E@)?lQjxguZhb2J4Cd=HoGG84Nv=N|6_Sr zpX=9)!aI#*cr%=Ygtw^Lzh66@%oD`!R2}UK_FhxF3rTzz*zaRuWWpujh1(m8wkOKZ zU%X%h75sg6zih}Vi782>R+$syaMMqS zjK4^fr^v;?pL_1G;WTocJvUV#S?Q7=7wlbyL}PO85?A zV5ROB!Lc6Xik!vAKOI-^)0(2~D#WhCa1~0A=aom$IvrK`uG!VWQ1-I({ z(5`K~et(c0KnC(Dxm>%0M2HlxTv;xEBDLHvSOso3-ag8(WLiYLZ{ieuYH;d2@|r=^ zf2FUymQr_=ORFo76w7zI4TyA+%N$ZQVEI^R-9=Gy)7gHxl|>kk?>T-774DXdvw~k&`pK6+Czr2<6G6HjAVw_LI|q7M-^0%~ zsk7E5Hhnq#fr)9Ec!&qF?CRNvQGkFJQXNITe?K4+)XOfpo5LdG}>mrCV-+4~Dh zRDD9US~H)jR^q&>mmo*TjhC$ku021Xeh?=CbVpKEqdfI?_4J)p;Wh0p-WuFK8{7U? z6}RmZjA{WL0z$eR81P`o-ue`zz_I`3@edB1;W-fcBe=Ib`jPTYEPPWA%HX(sl+sc3 zp4foA~PiBrD%_TMepWYqSwU5!Vb?;cdcIMDV#@i#_bt<*aQ z+YiQ=l#_QHWVbC2{S%~c2 zX^&ps`FmvY1jVfT-stPJb2FmV1*+-dx8Jda>i)iH_#~82^<`+I_tbq3x(2aFzN>JN zZU6HFss8l09Fj>~OOe--##f(!oTM1X&Nb*1)}yuMBNP~~gG%M>GC$FYClbmcEnGK0 zZskzFQ%Ql}tQ~En`dp|jh26S#cIFE8?GNE6VMGLU~}s+_)apw^}1Cdka@?-=1anE%#I>(3P*A=|b|Ax$$R3_#1cq)S-I7fpaCu^LKrNM={~MJqPkidB@rA{<)`71m zR!DpbIH=Lew*LHhxT%Q|5$Kmo0FcGBI)|KvBzwgu^xWuW+n2($g&|(hb7fi0E`*y= zL$yoXn}r;m^P8@F@VO_2y*FXBuUnfimv}#_+l{5cak7W9uV+=noNl*$Iq>0UEqD|| z%1nLo?T|1TLcSjZ+>q<}Ye9SU;;n)C_=}$$R;U+e5m+akn+!*I7kP6ef8S!S;fMj{;O9f z4K9BGLC=q0Yi)Z>_DXSbSz#RvglD!Og5CXJU#|T>3b?%%IEii+ZFD*3*|JLtyO-CE z_W1q=a&xOko*UFy{2WYCH|)AU)4ctvgtBhapxe!RS!kRY&DnXmnB_?!4g`Pl#HmxK zRwsYKAXZ8+wa1U6d9U$q^c#=ULjmAYRy?D`dMNe~J#e)CKtc?Z=U?S8Cl&EmwRiz# z0D~_oJZ>n0W(KR{SJfBH)I@_MKDE8H}QeBO}V93qo~ArzXwFiw!7g6U*!N7bNevbgXRG2Gf)n=C1&4d zCRSa(^F=hf=4k9na!2!zKALYxiVz_zB zW1qI7-_^1lp|>SL@nj2%7@>H1{LVsfYdT+^kPW--Cnjo!x;t;>Geddn{bw=P zA_kAllR!v)p4^(>rFL#gBLv1I%E=SG`l1A7w8gq>e0KC$~DeplfRKof4+TDQ; z_!PXV(dv;@IPVyiSOx=`oP#G+SYJvkIQSmr9bSR3QgG=1@}=_x`k#c#olh@7r`q%m=&^6T+E?>czOEP zb>Mup<8Dw*T_l0i{3J611?@;5sR1eGF(+=YcBA8iO#UCw*MYQP%GIa z)IPPfv|9Hm6UZ*UZwgz4>>EuPu#ECCdlJb#b?f);Gj{3M45xIf7>r8r?z-vr<>)m&ZZ)`7lr<%4m~Zro$q zp4Qj5w60!adrn46TWN39KXq#j43=r#^b)}|hj&wlk zAi4KFX1Vfdnl z0qXsq;GLfc{v>+ukU2IVvTT$&(e+=|156z5@L{}7)E$KU8`%;NpQxq+_fdxjMhpTp zBcS%M2UCSi%)}03{^t$CL;ng<@~O!wlJYL*Q&f0=?*QGmZ?)&XfKMtYNihi0?OW~r zFhhWY#%eGO>uQ@sUv_O`e3qRbirUk*EKdf&KTVAOw%v;fTi#AsGXu-EJ6n;9t6$}l zzdLdr)k4=OasptuQ#@P=2xCa1R7h*7LlymsVv{Y&hh^(8OkA8N0HS^h$i}dlj6g5L zX2*ziv9yj>q)B>)!)gcchEWpzhkSb?7%5ww-p`$H~dVDJVA5 z+dW6g2NLTZmPe9tHVmaRa_ zbs%3vDg#jHtK<^;`GGP^WP{MaKq0(MU6%~Hdi@t)OTD*p0^Kz^!A!80@C7J1mnp%e zs5hC7iwS|{^)FmS#xypmoqch5akkjq@vMA*&6cZwWW^Ploy0%yT+zCI(v^_1;s+eE zG`sbQ#_VYQ;yGTkVGp^?SK@XnFJt^QYp>7f(xv6%R~?Pc5SQo-W%&>^Inzc_ORnco z=VhNI*3X_j6Hrm|i4*IwOT{f2PK5vRa`JDVDq1d%4#yFDrnOaLYdyO0s{`;T^q%gK z=e~aUUmwEaNv~q1Df1+mdQqMzv;|VA8epZLtyLMTdw@9%f+fOZ|Iu=l)hZ=|XX}V+ zl{oH}ymEgfcG1=XKq{^!0lWul3CBDWZ}S`Nv+Vk0SZ(jVkx>QUsUHoz8{0n?Y6obr zSo}ExOy@pTM#~>R?tRzmp^acS#az@4kT)K?D}HrtIgq;#~+Elt@840+-?)!oO&2{AhF(#ZLACTMEb0t&DXTwrs+PS*)H&prO39p z5O;;W5Oe#^TBQpdWNKQAwh^?sIQdg6>x?s!?OX-~0GO7Qgt@58r4FAyI({OiG86AF{g`x?&VpZb6}@Kvu>PM?#x%7;X$viu5IS< z%I#iVy&t*)V^HmzWM5wU18fMLVVOd}U_wv;LoPeOd4yQ;+MsA=Lm1@v!d>!Q0ajqh zQfU0rrJ9@Nk&*4?*l4%oK@j6vp>`5*_alHgs$BFPv|-em^CiZ+5IwEKYb{%(R;A5n^nJ8!h1RX6+Sh5!>&-e`S5IxSSqYp z8Is9VLz!laMN$^q0kIk#J z@0r){*aV3Q`J2Q0@;GgtxL#x4_zd@gaf+OLhvp|&PkbhDcj#94Q*HOVcCwn~Xt?8l zI7`r+BFKdR;!c#s0NNyh^MCByqs=E`SDW5w1j=Jz4b21q8A6jk{XoI--q7TB5H1*l4a`z*@~l>SJ{8Neqdh$KK+s(KR~*itr#PtlBpm}Wm zyrh;}1!y_h%ZZ;->l(!rWoq-Zy#U8YPryG5Zmr$L4Lr8lI-3Ddpl9GuZKm#5})@9Ffn`?V45opGAG z4k`9uz422uzb7E#{|VvQ$K|a9>aRX>) zfNr9122jtD>_dG>n!LI?`wMf2-RK%A5d4JNqW6<})k&t;# zM;`89_T831w{3M`vqFgDQ@MFr3zO8qzO@o)N`XVZK4P;mL7?GmOv2hGXki=fCcc*) zzm?aX9jSh+%vp{cO@=1kOFfs_87xx7@RWcCqQd5M_v*>b!EAZ*em$S9$YZCkM++?5 z|5?#GJJ#7ON$n6MwZo^tk*5ESHymrcw*i#jr$Ow*+-2{qHRD7axqa7Ga151<-DS^D zx!y6Ga98%OrG5L;K}nu;5%WnW?cKZD_ccuuKjRj=y%X{l0QYc;bG4!+PFPD`qO6Y|`>4l$aQ3PLAdf6% zN7|w6<;d#jFRLX=9Xamv_2NXcD|#;s7YeQTm_ zu|rRh9Nb#J^@kRqd!+q%wgyr#17Zd(Jb#`B_rs!U$pf>IJVnuu`E*XHfwVz!HL7_|F6El0+ z&0L-OcTajTH)XCbPHP0skagLCB>05eTBG?({G$$e$6tCur;zcC!1ri=Q_n1~$^79% zTMpk=h}8eG|AWv4cA{v(Y+Ad1dZ0H$p$WxA5aA4kQ-Aoos+hWKvh2CDnpz$0ogqd^ ztmaOoRsa1BDnsV3oy+b`(76~%Aly1;kPWBHE?F74D!)0`bPX3AHdtM@>D(E(27tEe zE){~eZeMM^5APM%!hBIFZd^Ta6K#ISP;Zmvv45HvAENbD$Xme?(M7Y?!8p7+@*KUE z7-MCv>FIrGD^tdy?Mw*d0<0NVJ2gL`=JriiEKhvZA<_uStc#4bX%y3}2osSla^B88 zlhE~Bn?Z7UUGmzjct`P$yD}Z_5%0y#`DC}+#~qH7Gm6o32GVWav+VuVECiNz-#v@| zvkm)-aqRJEGq0X(HUWIgTw@jd6(au}d(B->rdv7eUd1S5nYQD7S80|bAEe#I%d1~v zHrQi%>0iy8M$TveKO;$_n9n+#MlhcTrE2^6Scy`drrs3zAe#lqOHKVEv)pByAgA@c zh9{sy5rBfy>hiy|X1v;r#&DmBBSF-F?UEf8&`nx71uE=FP&fkHF+jQ>4uV`=8~rvU zI$9(T{)!N~S07W~V11G%H@qPUxxxOq5;{*@pSms z2>HTKfpw!~l-$xl3xjT!*`vz3_r&n^#98i%2U6y0z@EL!zTesJE4WvCNORNz-UC)G zFcH+w9fNX9LgM4`DYvGd3K!?PtxBl2t@doTEVKL;J5t{=&O>?5c`@>#z(i-J1NZ^G zYF{jC*>+EisN2{30KfCE0lsYe#Ub9dMZs_n;c!-mj!H9)!k$ae4$uf4cy7%Bd zT1Emt=jIogUV^+k>?0k4p*0v?wl_m;w2Poz58nc%2E?GU_WupZ=C{f`^|w5~df^u0 z?}Zmv-Xi-4w7E*AGOCHfkUTY()1_+ z+g@ghj%MBqsNdQ0)|ZN$r^HKhZGK+w<4oot>yg9>?o_|@n78f~gI9(JK=i-$)^dH5 zeHWuG%gR~FoV}xQ);eYJzdNZ6BdSsphH)5&L{x6M_J4c*ntLI%mlDW?u?!g$Cgmcg zmy&|RYi?*DScESIAWG2!o-cKv`zx?UD3!kQir5$^bvyhkjLg zR75M)ar4@HN2I5WtM%A$XizkJ`$I4<(#-+@k*{q}J^rn4KDOnluWjGh`ir@}NK<4h zHO;87DuD^V&Z2qpdVA_&*mgwv^7Q|v^=fc0}(%pz|hIapRzAv6L<;Jjt0G(5lCw=B+UUT7a))IQ<@V?@u zsFo~X@*--*(m?pdG7B1(?xc|%PI9+b#~*AkB?;%L^O9FQ#-s9-ex@gl$@zVoui??;Wv^QHVTnJBcy}{{{R+>0VyyA%xU{IZv`H_b=G;S=SRUWmwOG>fJ|Yp zb@B4#-MBWE9Tu(I$hZIWPrkL~v74WKV&n1qi;>5$@AuU%OZ~U(nL>}d``5@-nO2NC zs56&69{={ER_fzzWvlu{WemCa#7`+I&`SH+y?Ni+0np~fFUNkp z;Eg6Tf^l+L=t;G4kd3@+0TW*nL*{TwI6r6JiVG?_Je*(YBl*AOi_*K$VJ$tJqy`MG zc~abbZfsF)$YB&Fl3hF1rHba?UXUR+Nh=`AB7k@x1+#%EGzUCumdjtU*|8_w=kUr& zM9Ib|4vEb=7eVujmmKP{ky;$iPYaMMGfwqIzPbemS)Kn~<^4LV;4IDqDt0ARnoJlh z>`FyT#FRg3^{c%M1OuOeVj71MUrvAVl~;NdTj5EbG(j$3pcHcsHYFrp4!-WMo4dU5 ziR0eK)EH=q@@daz2#6@@L_+1ubN}&Strx~)3E9sTS;=HK!_Y%Fb&jUz9dRl{bz+TY z^kI3Aih@f9(gVrxyoRwa0a^jDWOwYNA}L>eTK0NfL3`gQz3hDW2BPuqgx_OW6?NHu zTf!4lHaLDD9rmpL!)iF#x@FsDwf?D%tq(+>BU&*gFqCZ$*=xiB7YISA#FbIe7RzIK z)c8sH+iOo7louZO-8K$hDQb>#-N6hq{P@@G@j0+ew|9^v_u4K{Rl zX_EYN_HEmaNdywQqYLIC?Ap27^#!-RmdMmVj{=B$4%AJLXRqhc1Hk_}?93DOkZCYJ z*m}f_ky}4LgXOC~%1w@+MQ>v0pnRfc84(^;FhmRAhU{UV$Vg?@8U!>VYtXg2dRGL9 zfyK#;75Xo*Wx+ABH&(uQc@+A!YnZnT?Zi8YTkf`4IxQ`GWRlO{ZjAuum{Vkg-zt+yw{kzgr?4k5KrHQ{i>FKF> z-a#X!y|Lv@FD>IF2=^C47c+nN?c};Xo%ZWEj^=EOy{;N5teX9#-Rz?JnPxV4gu8YlcZ=Bsl{5J& z-gZwWq>9T3AgvuA!tAO!+A8SQ%(^jd+3`{JIj#qWK?X~K?In)%%IbCBvJzVEho=;H zwEp;`UZtmlnb+W&{7liVk?i!iKfmaBH1@VJG=6q|ae(H;EOb&%)XA=dz5IUvmKUvg z?Yq&pz{E7=?YP%gWkC)S(>b5Op^Z*RbbbUg@x)IiWQNd5@*NgSJ|N7Q5Yp( zQkMMz$!mV>N<5#V;7l&Bv*NL~a+p5)Zsg(%lzCYymo95Kcfn@C^bAfH9WP^rgTmy! z!d*VCO`%~S=XHL<%Sd(+Khw9c!{F7#f4GW;j+$HirWd9@x?me+Mk%@5+N~iI{n^nn>vW! z^|g{=dUwa@v|Wjo`UhC7F1%|VJHl!#J3iH2urjOR#<(f&##pd11`_Ib-PWyR3O9ED zcJj%cU)#%`z?zOdjs(^yF46NI44E}Hfh`vB7{lPfYFfL8qyFspT>|0LVeru5|CCQY zMj%UZNKO;{=bYuBs~;-Ku^P<4TFXnBY->-ODp%X;FP5jM-rivCb5&~*A=SLl+PUTY zFRJa7>MN(u0k)Q0BG~W*q&pZ)YIpzwpCCjGU)B8rewGXW`NfM4Ld`o+g)<%SZ69So z5YACyIDCyZ_YcFDQ|*0#&YtHSvLjl>MQ2eG=M=rsNr`S}=uDyW((3Xfe#WwVGhnq7 zLy!~T3`4zCI$g5`x^gsTWZ^E;<(&rIco&3g6gWRRyj0P~P@4QvVqCHE$LaCY<(|Fr z%E?oJ{K_lSGvt-=tWTZ!`;$3N6^%S%NWI3PAQ{FjGWPtjL(d#(Qy(JT&G%JasfW^V z3|cXuyLsr|1k}rsyLjAn0xRmZ+W#xTnU6j2p09nwEv5)oC5(I!l01sh;FKUxt4zCB zJN}n555p89-EEy28lxWN#Vq_ zDFHo`x85d@DfZFJtLwjyd)Lx84X=FMq(X>U+PQZp*Q+ADLJ;r z0BT}l|EY@CMb5|i6qR!aH20NOep&2%s^`GnyB(RC;%HBo@S4%6nB50QB6ArGNnySqYNJ-Q8`$FQ662qSBlf}gL_jyLEilbV zn6wObABTN~h1_cLQ!^o5@SZC(fZ<1j5Q_P?98Os)3S2WuPg6_bW zPG9ar1JHH%guvXw8Xer*;HdS=+PSl~N4{%GPGK$2-Zil<(p#JKa_FuCDY3Ee_;Rop zx;@*ct>k&{eLA}3*hiHScLB~?Mdp94w#CPv|Kk__TXB~o$l6p~Jieatf~*D5bQw$j zRXJ+mp2k+yr@{KDNDX0_=w)Bftv%a7JIu$1`97X6}MVR7eR)_j3{BrqI zP+!fDV^MhVG{Tt-UyJw);%^^H0o&isv!7jusy7fMqlToLl-TeSU*@yo{J2k;_)5jwbw=LN01A)q43Kn-FaUwz?Xz@Dz1vQ zzr0-h7@=@+E}2B}?d>6Wy{}h|=KRTtq=mnnWZ5aX$zII)k|i_CX}JQgNI88u;OYw& zW(CF>QRa1e?=Y@pcWx0Yn}1}ehc-{g`?c!?v%SKzx-gEFr|6OP_|yy-JaAycaG86d z6flEmjxw+YO8l_wyuB)~A`9CZ8A*kXF;wHHcMNKmJ-1r{z6EaYtyT~Bw4L+$snj{p zgifEjPhjWh%CJOI!NBdF&=vxRyti!o4a7IIiQ@MQC!W1qBf3{SeqTqdV%C^*l2el7 zTb{Th{fZw>fxOGUEh@)!n4)_J<9s6#myy zY>j4i?N>4Po#@%&%6{G0`iJc{2F3aFII{Ydd=6K6$!pP^BJ!7{MT;1Z(bPy++&p2$>9eN zt`2RYw*OP+Sv<8Zbb0?)R;nH&Xrc0}fKf#ABJbpRMt}&9{9o5}omRJ8iraCR;T>Eac zKfIqyKCtIJLmbC?TAgx;vjlOWZ4#-JxN0AiUp@w*V_jBWlwZT8&Wh;tFNmQZ@Ff zfMwS`F%m5}l@QNtLb9vf4@Wu`u8OIWJHu;lihWQm9d{bz0x&=Xfvpb*zv96I&UcEJ|4jv6wY>Y&bI0!%f*w-Jwqm-0y zmo^fD0dXX98v3Ruw>)vHF;IYb*?JcsZyRVnDIHbc>6CIm1(oAlC#w1Dx?(F&dk5j= z$vc@Ddnw@<_Xu|fTi~?g>ZwgmblLt>uF|?>b$2CDJM=obFh2G8C-jJyE@UA0jGT5u z(YjlT$Elxh?D|bN)xW#z0VspTnOe;5-^BCVFQCSq>ffh@b(2;N+JA%Cz6WWSTsA3B zFRo53$Nwn?;O7bCROMjzzUpo2xgLHy=y`znyN5WocLZs-vb(+9`5+T+%iv+gB;u1h5owY2=1Nc{gGH z4z>NBPM?C-w6jrD1gjm~hL+OIb;G=|Gu{1WnJWU~^!gjDK}ufe+K7!M#-z&A`nJCP z*2idV-8(H@7hzM>**Vf&$8!C@ef@PivMB=I*WZZEOG6RVdrb(9rD8-f5o_C%#iA`3 zHutHyi`fQdp`4WQ$TNknG6cPp;MFsA0_%lKr_p)@KL7mgmo$+bKfb(l^U0T&mo~8t z%gG1OwD3mlV7PpePqmP3j<+{n_}hpZ=u=uu^Npki6@u0)gra8Tg3*3NHO!CBUhThQ z>QFt0HnfXUiD^Th<(W?;AE|6BM_pDa#|GqT@7S{IPH0bts=3R~)visTzp>-i{KI-S z{LE}sX{)>D$8azTwf>|G)Mqxr#HQ8L_wq#%C5&v_&PHtD_m9M^(ROGIkj1x}+q&9z zONbJ){*s+@TZ!`m=ozbklEm+4N$AWL@=RYWyZ-r&Gv4J#M{p?Ud#E>#wUeS%`u3e&`gWtklH zR_slvbvgL)ydf(4S&xpj78!kRqS)y#t(-R<+jxGnIM)js$L>mR=O`1<_pCEm5OI5~ z6ugt2Pr<1RTaJC&NGkkh3R_54gzWi7R8f;gCq_wUmREnW?hGgkW2voGRCQL3hV4n^ zC{7%EZe009-w2Q_CU0YAvNggZU@ubDqE#KBK$$vk0Ubxk4uo%^1}B@j5ddczEc+<4 zHX|YQH4!u3JGw=+_O-|K50&LY&})dM7FZr6Uh;T>wvJLX&2N0Q73H*|anwu_^pX=N zio6pO7n2fT*%hvnPMp2w`U|4m5D9{5>{nOkZa#~jf6jZdOB~}0+d{^K%$G@RVemrU zh`Ok^wX9{yDJNGi{Wsxq{?po$`U_DevghVowNG8zU7mQ@kb+xvmNpr|j9cx$=GplzKejw|FZ8Fl{V?UP zYxh6sG-7J8vWgKF9jD*+Efnrl#)K&C(n>SQNYt5R%*9NyA^wYpD^WBsi5-`-Ez9jk-oNboVs|`E)ZL$N4~zj|1xh)|B4=~0 z@dANo4<0$PI(RqptUauh;)93(6@Q!VW+zmKdViRP@kkRR zElHIfq%iXw>%w@hJler}W&=;cIQ;>1tK+xV{oKxU}%(GoCsBT%E`B|tvi(MN9iMGbJLRqDN zo>`s!mlJ-emAJqi;wK{P@ z`SQZQTnD|@=C1Q%jT9`5~yzgySTPpA$M~sdU@h2gMDDNG!gW^EjVW?Ta39NI;qj62b6D%!#mObsx!QB~jDf{L@>U9-#agyzHxk}Wwn@g> z`m^+UpeIIfed>LbiaWTz^*3mJgii`++4I@JKR!@KcOC@1Pk2p;dxVmv%9|V5@*y2J z4-s9U4)h-PG-UnwT$JBYj|#w?l;kw6qbCc4#UKRWG-DO?j%oU8Ky1ej%!D@MtHl_ljV(1k+^TY_14>I<#qqZVpHpXC0{f6 z!h`ELw_x)dl~q*Pjkh)v+3zlIf6%~$Z@-nU9w{&N+zys2)rXiayTvQQzL;unw3N5r zd|gCb@j7s(wrTBm9mdh;P;YO%b+gRxH}B&n%;^b@6XJe-dHoSPU%UR=HNu-HcRd*p zmLLO?t;)AA(sudsYvr3>V9{6s_JBoT83+=5Pn4Xea>f?0Td&6F;%8-ri=Fir0_GCv zrwQBLuR*J3>>j{pYwj}tqyN$1HF%Y8;-TU8)r$r`98SmVpq{w9@hR0|L|U4h!c#3W z{i+PcFt}E=gcsgw&{ywxf4lVSRI?5oi1wGg|LgQ72R$j9E***62xlsy#_zakty;$f z(6B{`W~~~V$Jig8&NQq`k4ScuwXx8kyTdE)YzhzAf}++%)>@ewU^mt}{06Sp_F_y0 ze!NZ4JTxs&e_)8TBl#)EUv_@X+?b_|Q#!nJ@damlw(R<2CGPBcJI|f^woLbO=h42q z?lXS)_MN+xbn?nT;cj_%?h>8t##r9BJoA5*suSJ5uW?3;D}j-Vap(2mQa8SbFaa$* z$`+4*gmVjM9g>HVrCzTuNIehl=rQF4KWk_9mzYb=74FLTFVEk6OplH`E3jsS<;d^g z121JA0k8kQ5V^YWT>I1tI)O6B@XfRHIdQ!Ck|Q8mRg8$1Gq;>ZS?9K#zxjgp=Fin4 zjHDyIVq{SxDinks?hFc-udJ@#Qi%(z^Y^6Wv2%6*{Q1>|2QOmifFfZu0!GQ=T32tr zB4O>zEy`4DHJ)CF%P;zwOBn>LORW?7Ses2ThQk*!B}OW`CdUM^lis3cGnT?N*yL6h zAis8Xb#1x&72PudbN>CT&|CD5#3A#_6}scR=vlI$4jQkXS$G_6yk_rOpt^t~JbtL0WFFQD|dZ2PZ< z$lw#7#cv%8TecQW_ic)3Cqk9>rlo6E#-5~j3~bHF>n3Y;-VWH;7P8*fwVZZ@4&3>z zw%#(jpmelOwjg&u&S2yyY*LEP9{CpJvJ}Nn^v+i?vO6e&Cmcv_+qTWF+J$IAvwPax zN9M^-M69{v-5e8YUAcZo2{&)$O<#q-*vM{n)3t9@M8mDmTJE{eGqIKw_b=vc*x3EQ zNO-5YwQ&_5n+$(Xlnvl}6Wz5=rpgl9*73oc`(ztcgQL%}AZi3}UFci6hD$ld*Zy3f zR%awRj6*Is8@d6yKAZR?g}JluQxrC*)KP=$s#Dt)r^NHw^Q`H4CZqojogIN=*o}a_N!JSgeqjSr1elE! zESliNow4RA{MucR+DW&Z;g0Ypw& zybgXtIL@u{YIW>W9)f$HQ4ZGm&pF$f+NLE3-iD2PSj*9ykNh>VC7`U4{ZJ9pHL~~Z zFYcAUy>GSmV`|pEHL|genx?9$UcPrDsryvP?cq8PZ*aZRG2wrL>KxW>n+DV$$ByrV zTFtH{X%JtC!bDW86SAU&@E zSf8xd9kjm_?@)88Wt;p`zz)l^%?LHiaS1|;yptr!q| z66b}%VpJ{7g2~I9zwrhcObtup77xFA8Mdwj(qYVN0^)C6ccj;au9YC7-}Q=n3j6K1 zM9>VT^46V#*lFcA-ZY}|Jwn?=H1RB{`>mCi*}wbN^3I3eEg9wAcLdRi__ys#qdU&> z)~|}1+utri@|}hAD7s#zNtr2r&_<_FiQ?h;1Px~R+G`tzE&f9nlUJW6U{#nMp~FIL zM9MjB*p2v>erdvFxlK%2w~BF-Qd-#iESi7STmn2XzIx^1Uh?Oj>j+X}vH$bcvVA&?q##j}; zDEYqbRw^d-ad5*9`GquxldJF4NRMa}sC#4{B zPbMe3n#8F-S@ikNsC&8|<~IbtYur3i*0AQ!I~&2W*%w~CfA*dIak!`ptAES@#Z)-+ z|AArZwBOOg2cA80Z1uuj5y~`w)x2^i7yD$HWktk4ZTNs2fDYeP+r+f?n{z61WV>AW zCxxTb^FR%+0F5DyJElFyLC#joWo1kxlSkT`sX($0T}Zn1 zSC-3-jaG|#T{r{gg(jDT!NcN3eZokQPCw`POaqBV*JI;khvp{dE63CVWq{e6Hb+pjb9~+0rcm;1q-{C-a z!5tx%+l-As2b04LHQNFQ7M6gFMr{kNz5Szc@(m5V9Sln*xlw#$+pRI)R=J^ftjjpa zYU@9yc3YhS$Ci}06=jOxSJX^fr^jd2NOY^q_Kw#p65%S>q(uj+k(nO&TEmrhqI2HG z_qLDt-d0F^dHQ3WxCUl1uYPCE;_GBky}0j4m)o(6Ty@B~XyZ7%~$uIdRgGx(1JH9tTg_D`w z$@W_gd~O`^q2_$=1J8_2j;5hDMNXR?`Mgc*0LqZ|T6^b|s}<`7^YR#e@5rHN4jeAU zILlwHDu#xur}AkhRYysMdZ<|B627L^~iSLgn-QL)9wWpz;Cgspzb zuYy4JJsnT7zAV|4gqKh4AowhoT&8Jw4ZP&9D7P8^6BaMd4q{2=W-k)?%hg91i_nTS zNo@FM5^}ba*pO?n6)@{K&f=2yc#LZf<&GjPh1n3Ehh)F5jE1ao*U{}c_yyxkm8)gJ z&d}rXZpt@Fal>#iuRkcv6vCd8}M>m16_R6En^Pk8%hwAt@yB@4-^Zd79{SjRJZ^62nQ|}_-u4Uhc zRI~wc)$QLxwxChrB6Sk1mt7zF|HE|%O@c0{Qmt3xzYH0F4eRh*#Shj2&NflJH zY`;k(-lv>!Qk-!}7Pt|-=R$&W3kZzW)3*>JyF}Q2gMl3DX!OwL_PFug^BNf#$uho! z`dC&|Xdk-YZzjY0?5*pBg5{ab^tY~EcZ0FV*RX{$Ne|vRLaQEKhkv~8{z9>DX!TB4 z@SQlTgt2Pi%U<0K%|5m-$3LbzzITGBS+$Opn;ARF%F9KU|Y^x-6-4Xm>1?Y9W&Unii= z_@9*VNxv5LdR?wcWfR~&HWu!FJC!c*o!TxxeD%&(-=3H^f&F$zQDD+l-g&nYRJo5X znhx;B2<O;Q99&^Vr%~hAWOuW) zF?&my-lSByXN5v1+O}r*JF?kQfLZIqU*wWOJH;21%P~=hp5bvL1E`;{c&n^i_TQ?a z$!uEoJv9C|Rhd6dg!)%AWtR?DsjNC9!G9`u+4FaN-;mT3M#A{9nUyJ8B-gAA6f*pV z=)UnyHjgX1@_vkZML^z!r7Wy@mMtkP1v|H8Tk!10woeLvWjbQXTGai5@A>mPHOZ$q z5*xral4Os(>{hu1XRi6U6Svn+u7NYy*`+CAY7#KNvHK2SEXc5L-@NzG$|QHnXYL*( z=Dw680F$}E`N5pxMl*QWoqg8ro*q-fr=TdgbGqOpwc^s{@GqOjyV+{SS?OU~kMh{_ z^GL}vYK(PXPxG|m+7~vSzx{@`dttLjOlCh~@8*)->OsZI{Eypf2ep5Pu5&r|9m~%JB{J7th9G>M&s%bDvh9tJo%(u7>9jpO#IF-%LVZ`1Q!Wp?^f! z#M*pm+GZkfveK9{vK{!)&Qb7aaGRq3)x}@9P~kZ$xxQw1#gt_w$n7=isrZz59h~kkEW_vzL|=4-H$#kGa9R79VW>|r;oFfH>`4mSE{PQ6K+G23^ebB1Xs{FbD^|4@wQY#b zsqWR*2Zs8l85uD{vT*dqR&Upk-#tW(NTq{f;>a8`i;CSJg^N|=>VjJZ&X%X{OfREd zzqxwq_A*W#487i;ZE#)|i)A&R(CAc&@B;hE3Y&UEkBk=QTCq}U#QDCy?Jj#NTY9$^ zvzvRX_2)p}6*C1ltbto(>sT!J%Z;LSHg^9U73AMNog1E~o$$^!n#~YM=gtx+RO8}a z-L1VZ&5ATthL-lO-K!wBp{hi;+1=1t7#wbW=oH@O`^0@|)aP0%yT;v*(0U2@$?aDNZq_G;4W+Ri(M_he&@}TR5HO#^uO|fOwqfUhWWjZONV5c<$keru@$Uxk^&4 z`D-BW+J%MGwm_UD93WRC-~UW_34iT~-&Ec;h}S^=*8%xQ%CjmTR&GEUGD7njDTSE@ zpqoM!$hAdN(FpJ)t}UrtDtNt*bvez6>l|qtS5N%b<2Rt|YeaTiO4nAZa5%M|PWHP^ z{qQWCIAjq0`nHE`vkB~-X(!^NX>0ptf9Wa%VYgnPM3SMcAMAOM^RFrfJ!J zZx=fUA_&A0cKp4x0pZa-avMs(3+=(Y8|S~9`}aKq$o;QD9<0~FaN*A%ugL!~8m^6{)>FzmLa8Tk z-KoXGWAs9;^39&tzv#v1kK0yC6`~5`=}R0v(K6f?Aw%4S3(F;N1{>|yAa3?Dz~mu= z>T=~XR63I6L^syK2x$tPQb(*sl`-#f?cc|=L%r99rQa+%O%4l7TQ|a6kIA>+noxDQ z<5-!J7NfSH6j}Y|b%E=*-lDQ6h;9hNw?8Ipyl{GwT>3aAF0S6J70X-qy;F9$i6Ymp zx99TKBZ>Ss-+t3^-;n=3%-<BJU5C%Yfq^dAS;DWw zxpStgJr9T(wmQuD2dq82R(tNs=D8-;m#^sdw*{P!iiwy;$PER_eSt`E#Q&i7C|LU3IZM9!FrYZi! z!Ix>_QNHI8=*3v{MrKP&ohj&bAIc{0vmcd^O-A&`lIQr_BOQ%?%yU|+an&KL+HS)?B6u?J#b?f!(?8p9XhiDfW(*x)9^1*qL>**dTN0J+eaLf`(-=vSl< zZ(HNaVZbfhe=VktG*KvqjT0lvSrdT|gAZF{=5?|OrjCo{d2hSB64TafrWfWK1_gyv z;{T-JS2SSST!(_Al%`v_5Qn<9D4KBjBVbhph$kt^@Q%#0r^zu`d_Eb6D^5 z6sx0P2W-C*;mrE~M!rb*AS1(ol|OFlvg>Oa&~EAe?OyHroTRp_9y5|s>b9ch9QCmV z>j1{G@0ZcF`yP8U6YhKhD*?}UKX_1KG~XTv4ipOEUv-S+`|9B4@TrG(4_!4#uJ?NN z!_VEiUb8y9x%I1~KaomL0hVW6^qr`G_E{B)mWO$L^6!QGeDI=gs_Js`?w2P+1DC6> z%PSud>dxPs%rvuVYzzeT%bCxp;@&-ZBLfwB3pF(aU_N>(;M}?8>_411RO0v?BnwZ& z4~I9cYzHesEqRa!oGUDJH(L6lNLCw_4F15Z&~oK|Gx~(+=5ZCmO%erkNTRST~hW(n$2IBLSg0(>T%?)^V zGb|szo4qCq$O8}j$7}NcI}R?&+IZoOeHUI&>2M_PIH%jpK)6(ik?T-9os|ltYxd!a zuG7V!6DGOLbwUh;m~A}RS>2K?XEkcYt#~*5T$3jHPY7IWnb6G<4rW-BYYc8crhO`k z9W`EX{f*L8h;@Wp9(wxx&0g@SQJQY2?C105^auUKdVs^XljS9i7d9W+ZKUzDyR|v5hCccw-EjTF1sM;uJx> z#{>T(w?somgl{=^uZNWC&KF1At796*p8JF_+ZgD0p37d`&GPWOA(Ec^*a$zCTfN9> zOMXkGsNGx4?eq2Bp84GM{~uj%+GJODo#{m)XCN_;g#u6$Yvxd-N(0p-)fyboQWAoAP3}#sj5hp?C>w}^St|l zZ99sQdG9^*+2@@7uJ>JQue}eImda;!6ZPtHKKwT`{Y0IaAXViIt5mYgpaI@a4Tg)2C#7KcJD6B<=91 zMh~=ky(}Fe{^e8fS)jN`C%N^#`aExG$YZPxh-uF4dQBufE*PK<5$G~!0SuyFeaJ|v zMxKX`jw^Rwg_3#ra649?dZND5IkQqEv%GcxhqAR|Ui}?Pf}HBFyiL6X^(IHN*yYTT zq+xTJT9pc|bloeD{|NpITN5JR+w;GwZ%hJzdhW<@4FDc1D8VClNCZN1%JnGm=TCRb z<3kWMI$U+GjmS&?p2N+Wi1Nj^sh_5Gp%lsLX9f%E9aWJ6@7eFgzWVXsWFY(qYnN-U zA+a+;AzB(Pu6?OsYZ;sUnJ6P4I0Hw!mzxvf@{833-cB&scC2V>=EZ7ChIV;nSm zPApuws?z+Z)Pz0y4cmSD5b9c!g5!OMT2OAkj%}wtu*fKSw$0AM+CU8dg#jyWrWcIzV7r>P|X+I3B%(Y^Cj==Raedz-=8;M z{D&++B^dWo%)2?t-Q8;z4QE!|6W}tEzeV9Tw;yvtMjx}Z4*AQqCVuD@rIWSdWs_(* zL&)GbGw2D4W%uslsE}#qM;XqWH5K08n~VsoX#~c6KrL1iEE6B|*9I(}Qxa0{9&*qs zJtT39$9(Fe|uY_wyWGTtWR#-J*gTda)8#R5NR>|i9s;%O9VL>q@Y!K|%Xz_DYED&2oo`cfYL`U(u&P%%fowKYYXa)l* zzZ2-GQL{A~w*ykTNT@4~0s{jkjhV}Ej~ULBE$9dlbi=@a3T%l+*fvQlAPjtgMUW=m z%ICkG_*du@QbmiSi5;lqm%se-mtTHa<#raq!BQ^&#K6ovKSmh+OCsY+b^2wxarwo$ zFOl2qizffS{%>@-k#$1i|41zSAOCUq%fra~|C3#^If*Xi%U6HNAz*kyZD@T4b&0#c zP{p21t5BZ*1f8u#(D^qWj!Ds4!1u^-7TGZH=n?L@G{41NiWKqY#AKMj#;rmCAaaPQ z5sKJ+)FN&7_d0y;i|%E1TOFCw2gewgXr?L96@T$t$7D$S6YX7YzJdkdX+!Ef_Gqt! zO*HS3WaZXDlP0Qm#CI!;`^~t3(GiuTGs+%SLP8s&o?2)Xv}RICh5vM!{V${xnG0h; zwnr3z^VycK?38aq)mD3|sQx-zOMrqz%K&`v%4JdQ2xi5E@P2{EY%}@C;xnKWW=5)H zXCv&{z8-+t91%35}a@8 zDHP?btfuEqrkl%X5~p@U&o=!))q3OvrkqK_IrZNb&tO_Jfv4+9g_ z-}5AmjI+RgDGWhL0392&Ky7Glo&fx`V*yslTuTmY&td6f8e&K67N`^y*U&?A`@14L z5&)qd)-Wt1Q;_A18y-$^oJ?qj_M93xr`|qXZPt!JK&-##OL-xpHOAolT}aGUFcdo) zJ19rDyO1wm;0b7$$A85TXa;tW$)FsVx1PRP6U3Cy)i6MV90RIUpX(y)pqD4#N4e{S zV;O90j{gjfrB^h$@vi6mu>6^O@y$xZUW$lkpS7R;dydFCd4Z3q>{^_i9c&RV&?HfG z(|`U{F=nq2EGJ4P%0;yeSq@%EOp=jAW9rNswJSSri*#(TQV@Gb9wt2~PPSfm!D=3n zXt}+(+&%>RgS?lfF3jxB>jITW$Me(hr&UWDMvDVgfZZ(qkV;_dX{SSo(V2i6IIGS7 zf3OaiYeGeZwe^qMSY~_qWdyUyek(a>5Y^Ou>b$7#qV?;5$Pg&7XfyE|xL}S3Adt;c zv1YtkFlPZmdml|$*Sbd>C$LAIU9R+3)qQpN%GWxh9e5_U zwpC%E6hJxGF494s8vO@|4KJ5Ad^G}c1ZBdVV?s15PU4g^!(Rok(B-ZQ;ns97sK**k z8OErlk6!WIel`{9s&ir^7y$R-D3R){CHWj_&|E(ZhPBr=VTtMH*W|A3TY1o4`CA2` z(H#Ja11T5dPg_03E&tA1qc@;vfGJc_yb;K46FfJcMQP7A<;%XGyCoC<>X)c?`j8U(hWx+K z1#t5(fcodCbDF??o6j$Z*2k4cePb^)57-4t{e*@(B!-IOIW9XENSc4rdi(=D6>kn- z@cb4M1G5x$;tku|rnz5NN6kY3PF{!Pl|i&qY%pkeSslbQ*wFakL397xI#0@Qqnj{0 z`imcQn6sTgIo`RRdX?Ze87528E;mkV(J={zVZcGY9EcwhmgdLWgBA1%@Z zlj;?et8|g8MvADGYVhz997VOGcBZB>kvhm0wIZ@vGx=>RxRqZ)?zDvD4~POmaH6t0 z?8#ONfM)z%?1whNe__h3n9^pjLJ}2TkR+(s9}gGk*w{2+SxjLsQ-47jfQMp)Vg^?_ zvSfk>Vmcd;Cv>PGb4ohqU>joK zkhW@@MbDo#&;N!zn8!~T2Er&Fn-W(e?7ig)Y`p@A`~y$Qg~UK^GsSOGX4luDZn9>X zb%aqQxN3we7pmM1bPCY?4k0unaNZs)BTUbb;SUI_*=(T@=Z+FeLv?$LP4B(mzSplJ z=LwX%&Fy#N78ya2tdpVQkIf>=Y+brqu@=j6k5jG16I3ti7t_=xWt{c4%nyK2s_NWq zGxNtFF`^Jm3dU)Lq*_zxfgflLYRljPK*^93bjEVN#2~*S5wdC)_VYH#cpnO#c}NU>QaPE8{xlG-k#7j!nUc(0P;fvsg$DYvhfa z&UX%*@PI{Po@11SuK6<8%R^gOY%RSH_G5Up9EVEttWWchQx% z+$2}URn4t4cym-Ds+QwqQj3(@E-3fTx=e&Kv|Yv|GGMi% zE~i-x__08m%rEd3#90JOBEz2|4|KuBX+?NVV0p&qga+^0Pk)lGn!a&}9W)zw&=l1- zgxawj>tcJCaK-Q#6KBcm!q&DakzX_G+Ka_L4FDh$!nqnx>w>W3rc!to)ES%NHJ3$ zQeFPP*Xzyp?7~i%F}?!)*aN0PAU6yc;+}K&yeT4;MJBbfWM)n+t{j+-mmS5z26zJr zvd4C6G%c1_g%R}NQ`61t0NCa^F{=A~-vV*J`T5quDVpA|eR6eT9^Wc{m`48Qjpllv zKfkV5=cW6FU|JWiUG5^U>|X*w{aiCvYNeH(rDMB=z(&?|{^JpY46uNpj@||l%Ftc4 zx7^FGy0h%{+wTJGm1nO2L7-$_xeZ^wahC1Eln8FRcYOAjGAWw(3*ueRl*MF!e$ITB zbd))6GK=ty73M!jEB~AXbJRB5IMj)`Z22HQ*rRi zEr95^ci)orS?4Np+iV_Jpl}-)8I7APp(Dl1djBe!02srv{$tIi5(y7oYl@3*E4UFg ze-vSIz8Wj}C_%qZJ|&{CLrQ5Fv?5Nl-I;0~eX zm#kxR=tJh1&>mE-f~U?|0hwosid+)P$~k*SG&B3Br67PoeVuBiKLQP@;Rj`aJwMOGCZ(jPiGbv@%=f zK7v76%EI|s2-UwjSIO1zmW$>zl?Y_+5O#Bk?itQ&Kw0Jlrj?t*opA|P*c*zeb;a^> zwo)k>_hN^T?)7ChS>~mti^wc@$ml8r%Gq3fCAly1mbFtx)T8eSrr5km1k?u58wVoW zg|(f#PKST34pb590>85Jy=J99ty+wExYA23&6l}dK;qf_EuF9lBGGmix`?V1?~`us zNVv9^85rw)By2<`EUgYzh+0Rn0`bWuHfm|yM>aC6MWdk0S#5-Gw1L`)IO)Z2Zo!Xb z_amVZzrAv*!7QN!X0#jp0-hKZJ$WWwhLR>uZjzh4O+1VV8@NefL6Ae&`0>yDXNE77 zJ5$0|et*h#$&az^>haTl&%$wAdmpL8_jqY0=drol_HOJFMrm_P#LDUpC{D@AomHp^ zRqg{nQQ!!4?*tcTXdE)<_TaG4CmUVE?IEy+3C&F~VTJpiIHk9r2etB`PcRcQzjr*2 z7RwSWCy51dRc?N0^S3^=4wXp^#=xzLse@KcfvX_5;!-1*sBdlF5pvqfnJfy>8CMc; zf{8NQ2S6d9X6ii&DQp7tSO-cWmby@W1ay4lG(yU~u7S=;D`zTnR7e@=RVpLMTVrpA zoI>X^HvBF>JBjdiG5mg&PG9B9Nup^`xLKz!1|4Rye0qkxRPO}SB<*Sgq;8W^IR*b>v>GjZP}v=Asow-F~{d?g~PJnT+1+++w|J5X+&P?^i)9f@wOzzY0F zs*n}wE)_+gXk7y3*0vurfhuXWv}MQe&x`4VflRrod`}$~0M>YGxbYyU zsJ`}#-SoMe?GH9V3b=sJ;?nBSf@A@nB|F>j8#CKD=B8_+)&E=A7Dt4B}ET||5<2h6US)jIPX&&$kcK)NM^E^8S0GL9D3tzkea>gr&wO?Kb z-&`}x0I#B4%f_vcfW@yiFG&HAEuh{orw3}*p}}JM?Jx`GnQ^a)fi-vkhLKdbz1(jB zUVDQ0%Y$G>;Ob}Fo|zB!SSV}AWf3Vt^(L`|DvSVGC9F$o_4%^!k___yMzpmDw^2m* zO1=cWU!~5$t3rAlAxeb<75+1yg$-S`)sdhmsT~out^)0&?eT-kWswTdjD}yNiR&Fz zvl_gP{4ZcLemID|njEw!an_el_an^F=f=v*r*b!c%Ewn9Riab1iHm1hw!Sfc}tf#atZB6_bz>ke{k-FkqFi^*6Q7oABMf6Z_!|H@cS$e2K^6_AfF z=nCh+y(WyqFdT7YxC3prspR=tP59;Dw3>R*XmbqD9R82uT-+c^?kP|4`@&%gMbz>04Z^#8aY`A^>}T*f zQxLvoA<*_?CUgNP9#=pa3CcaUt=t$Jm+JUR7z*r!HU|F#bCe0pi53MbvEyhoNOOgF z+5IlI1QmdZ$~#0DSS6#^#MRMkU@2lUz2}K#gt|2e<-s2q(v;gZw5TYJflc4=Hb_tW z1Rajvv$sfGb7)(gsLG4dBTf8}qFqyQJyMa^EK_|d(@QYT>^p$I<0-~w#CFIYFqKq9 z<%@0g$+1{CStJcgbZp$a$sqt%wPx24`_%0I{iN$ph)H>N|w;F@b zI`#n@QAR(sD+T}%TM7c8#t}iG`107n1f|Mi678T$#CIR%X3)gy>m>Z`>mDJfS*H9 z*G#~uEnt8jXZ@Hyp%Porhv(LtN6qH%+e}>*sQ4$c{QG#X**y-5%ml?W045Q%x7&LBA%Qc~*J|!4A#u}JfFw)UPBQ{GgULP6XL?I~ zVBg=Fpn$U510n>J1BUYcigObR2Zl7NQ>-YCO`-xCAeYP8s%>AOfK}7%nV$k4wQ|Z6 z{SLU>)Ki-crEu>@+4x3c=Dw%_-b`dfszGj*MYO6MQ z@N}s*JZK)cfVE=G&o>L*)YURKU=^0GTMJ~HP_;#4KU?0H>w+Y&2>?o5_<1}L>`TJVy>JOoA z=-2tHO!z~Tjqn-l-Qn>B$ax{3#16BMz{zeIy)79-*3B3V=)PAkZaQcmBaUCo?!==pzFo{?y=ldQ}z;xI z00XX|wJoKv;WfY|(Nz&{|BSF8v1`yCUl#*_n0^Yqg5+?$7668XL)GU1)}06+Kb+$AqB3c9`f*)XZikjOiQpj+9TrKmDHqbVT zac_sti8q7}A4Vg*&wg^S$n9E)^)49qO~S^ z3IXt79kvn+da)djR0%F)9>IiYb}V=>#h(hW$< zl}otMhp&QRWVwpl_;~Ya|0h3-0xzHT`666iqIsp8-O5P+C=xhXDX*!%^~YU+YfblQ z<8YkT5_lyAHz3yot|_-Jzt`b_45IuHXh|8B;U=*D7R$vC=oLk*o^(!_IpbmZ^$$l` zE#OA>!+vFktTQ*S+p{}3VR_f`jEY@t`Tj!bQwE0=_JD)BE*S$ z6B++`iuE!jd`Lh7u%1wR3F7O|b9j<82@5f|lG}xd_^|(zlbBt%-SKU zL|9qZj2FS(>8H~mWDQGP2yYL}1JPyfefPq7SOl#rN>)F|z2zRRK5oa3bn3#+g`NdL%z z#JZ(&0t7B$TVw-2+a!onLYe%LcFk@sG|8*DSJyUMTi-ImhOIMj=5?~lODAZ?t;R&M zNWsFYb(^(Tn+JorR|=SBrB@C|2lYlbl{+VFz^X1Y1Wg(*HSG2<17DJLCW;~J)?%Oa zW_hVa#*-u4qrB(p$a&V-7{7_Tr(Qiyy%-WnS;D82nI+9{Dr$ z_6UDUYs223e1hawi2v-T5V#ly&j?lo0>ahf0d|(K0BWYpvYu2*$$9PN1qqd+!H;&) z)JBARjXP2BGWD9~fNQdh^=c*(`j(7Cv&fov()UHnrV!_sT{UDVQ~eCqBP(qFA8v+wcX;A_EM(M(g7 z0xo#$sA+MEvF~wo4&VBuKb;Ub^R3%&RB0ZKmkl$BmbEM`FR+4d0PDxwwi>op`x3}y z(T6yMqF&Mf#lYKIYu#0gQ@5pf^EY69{Y%5ctHT>_g9$`zWqa_e3J@2~(Foe7Mni^qnk9tQ%F6%Zw9(3!=^QMri!v zQXBfl3Kp6Z&+se7rgb4d8d9ujxqUi~SUeIev2L>+wWQl}^8gw7B&V1RPOj%cpsAe? z=Mdd?$lySk8bTd_Z=EaiuR)ml)6Ui{tmW2xYFQGg%LFf$M#J*9EjuBz%F1Td2hU>0 z?u;jcfxvlOs^r5Kt%)ww?c2hf4aa~#TPHyTD`2cEk{j8L%lzq;*45_Iqx#0`@cimU zmn)|t!aw=h&wlo)^83@D{WO4XM&8M>#wX0!NCa)fEOE~>E;^i|B!IJwofF5}6bd~W z!~;{7ff+UT|74NX272Ba2TSZ0EOk$Xg!hd&gb>6OFc0cj%?$U-wV<3WBRGP{d~tqZ z=>{D$N3YC3bO#Q@88Igs9EwW}|5L|zWKQGB?cv7~>aTD~9wwJ#aNp5c&TCc4SEK1% z28Zpj;6S_jVC`GH=fgPISC604wc0#0&U;qo@C~P0Eu2LShJJlSlu}Q^VAVY4ma8W zo=40CQ-~j1tebn^<=Z%>nQI0>umd6=OO8EHOxxhM|5bQL1FG9J4Rs+^L)qP+R)!zL&6~ z&BANQV1*H}>LnDjle#xCu`DIAr@hE4Zq?pV+}vUXHQKveKa(fIt~xuMC3J3K8q^kL zQFr&VCEmh(Svpsv@$OtvT^(t$Ow!4nAz48$%*s(7_R;r>8uJbn0zx)I#%7^#dvdDx z5PVXIb%y2T&YwF;SSP}|!!r3v;etI7=w*Orx4&!rQjdlJx)t8t2e3kU_o*6e!C_`ulF$_HfBw9%kecXn2NoB9nmd8BLXx)I`y22li>P-z2ML#3J8Be zs)_C!1kHj;Eg7~eVjQUA6DzbImen^UZePXcfTMQsGSSokn*MN5```gl@drN)e{-j+ zp5lJ1eh7gl(g|>t+csLU#9$e~wSM52g@;XsqGq%fUX28|)-r2lThi83jo8k3*?gJn zp`xQ74^KzYcKBlo=pBUclzbONbkCGbEo0%chxNurt@i82CeR4(e4T(rjtVI=nB_lxLy+5Sqira6U)H5&5(KA8qRZ{1jgP)UFOfqkN*R`T zeoYl?J-P4{@Ivs?B1psza2WAUoQh4G-G8&SRi(IiM3-@fSE zwkisv)2v6p9034CitSRWk`2pmw=3JIuu$gO7-B3B%KhIkRn9yU64=}~x&&#W5 z@Y66tVm^Y`WmZut9dB?&YLAXlw*VZ2;9EtlL)IOu5^vURX-2+o2}Xe~aKMK)+^wG1LQpahDVf)$pt&1hl=0sIqXL|Z^2&@5 zFz+$A7-!961+T?TPWa;Fi|m>tICU*%=$O- z9mO3l*@5eBf3@B|AnK$`nv|N2i}Z#5h{|gfRz-(0^?KFcpsTY4q*Wg|ZLMlVs(S#I zOiFO4Ybx*hZ4#voRRB!3tskW+l9cvhgzRHmocK|;K6(5bhLhtS6L5b1lq_tsOi;Ik zpxuLi0E|#J_k^CCu4%9KhGLs+J@4b z&wnJ5a}K@~+$6TB&Ea zDX#ffOk*;*DN?s4qHKQ4n~dOK#n$$gnmaeD8i?F&z8q#jHKm2X`#zNhM#YjZ~Ct{_|&2X$%dP`3QVN323yG8LHFi1s&@%pl%=;2Ii!ITb#{VvtdH_Bkj))d zZL?pqaIoHAcC12Zz#GjB$2f*DMoq^Jz>3VWf3v`w)7X~v5n67{VK{oT*pH83u^W2h znIVKtN1ugv%k9AsDvUwZDEGS_8rNN{w`Bha? zj~g;WI7+w1!NmRQgVxGX$OjisH%}Rk(I{)**XK6Mq?MpL>t`ckRoF(GFd$Mia0dcA zM6e7x@9jyXkSL=T_f@%D_68n5frHtu?EDKRY%bd67ZZRT0ANULLS_KXRwjdF90;{- z6pdfCGh25KT_f9^Mmb&{ABWwABz~~XX@s@+_R8*Qq%}m1^42I>I;VHG+nZlw&dz5d zGlLCtsoaCa`|G_xPL~J2LPKML1{(4ADd_RbrZ z0_y+t#!5ExC#!|zYorsL%<>jK{DaWFHo&- z3*-|qT4(D@a)4VP1FFhwot7rHHHQpT3S2gbp9~~54jgOupX}JFTi9b8)DqDN+xp_3 zNTrSaK$nYHc1trc<)Kgn*^gQd43PE)R%NQS`KsbWVS?vR@uOVmX_dG(R*b7&`8xN* zH;Ko#u}Ehb^Oo1wGd>Jnj^>VgueV(895ras(cav65L|Bkh+pZ|fL3q~2}=b_;Shbd)Vd(8<^8$3aR8ZB-Xh*l))%jtWPCI^(or9NqoX zfB1+00~|A(^b?nTs{VE$6w}2y2JhHpaTz%({y99j5FZ4t8=Un06ik4F7e+1w#}fk} zHRW$6UQJBdm6ktv2kSx_$Z;WHX1}@vECN{qYTS~U8L;l12^zJ0-lsCX&kZirpdPot z11O(k8APGRq?tG+puJnj?JFsG^hO!&Mte77L!G-SyqP_0!K2G-s~lZhV;EvT&^`yX z(lkcbiclN?1_E&ph|z$%E^zlRL&vKfjL7rk>tR(#<OO1SLX8Phs=(adEj#~%(0c-V+N&9mRklQ@8o=_Sh&7H4<+7j- zMZ|KKvI;GXRA#fi-KXelG&dUgi_bs*IiYL*P55R#a=iV;*AUt!ax=!Dac;M&DdNtV z*X=pVXD=z#$yE7;qnD9MuDUm&hC!T(*nmr|Tt)u^$Aqw|OBC z=7QC%Vk_Fxh4^|})VXpSxV$C0-%M~zxH$?FbvHL@ty%p`Xj}6J#*-`{($fyuX*1N! z=087%KHzMCuW@#aBNG>tg1o}1Be9`x2DDnOBhPv^s=LW;- zGE|v94()`=L*cbrw-{|C5?0b`rVcy9R%`)<(L^?L$X#F?8It-~@GGUeGIbQo!N13X zkJtd8vpspJdYi&Z!_ka(1F|yy7gC#41xtZer9r5Q-92(pnmxf#6oE(d;83j1za1^B zzw3$w!pPvd046ASwR)Bl?6Qp$GhBY5-?H}uIm26w7EwLe$@+<9R4${4_>b7erbb^Y ziR`k?*6LFoaGq8vv z-(y`gb{uexNx(^V3JV}+K?(gLwnc1+eao^iK3TK*BZ>#=V(ai2q7Mi%kOK-riHH$A zOLV~&b-JFXJ?TEfvl)4So{jf|Q#wmNIDwk62|&_*$Q$|C)-fnvtw7}#-(u8eI>Yf` zxb+T9^UcOpG*PMwWCH+7j)8SADS7^hFc}e{9CCM9d?e=t|T4?w?^yv8oBPK zx;K-jE7F1$p%dl>MP>B$4j+e=MUp6EnM@~WnIiTBecD3+U%6Ub?#G@o!Zqo0 zNAP|^?T%L@HrxLiqDpUMfV!#NW`&q`8ezUh$3_FxexZdyr9ea`vwnLEt zYK$>+X;e1qat7EcuG216DTpeADR1UZ!%0k1**e^l6{y153$P=#Dz%bIsxll;?MaoT z9|f7$RGGWy5Y z@}^pf!HKe+m?vbWof#Dg;$h5IGUgLazM>wl>Q!(8BDDNiJ_FVL z+!c_>tFq2>uP}GuQjqgOU3&=4)7V&>ahiv0W0P5VqX6)5E1&-NA6TA zAGihoR`qCND=;;d3X3_AzpUAAlH90i!qFU5T9KvQOJ3u5c=B6PkTXC+3^>hXJ&NsM zA`2k#$!2ZG4D_VtXEsw8ETSPMik_f&Ew2?_qt(nEqUIa<>s)V{`(~~k6~Z4kN4XLe zyr^8EB{|C3QT*SSIzQagzl_o;o4+kUXq#H$H}>Oc)Jgl?UBr1V5Z2`=YW+jzcCtGu8sJP6` zS@$Z@20C=?oB4RU3*eNA^VWUH0S@YL3g#Y@Z=jSUYhN+pf@XZcZ6qz1g%--__tl^I zBv2(sWOIlDnvp+b*ZRe}&>Fl6N5Ui{t!rH)!`DuQC)td{!@qSisJ)ITD4lYS5fVh0 zXpQc31cLX&M9^7EWMOcJ6Zalv8dSqsSOH-UNAcDi{p~}d+NGKYm%lB@AxbPlQ0`*( z1ACK`GX|kWBIz8>4Baferz&G$U+9xfR;vV^Ys)ozlPHb$gx-&Hj5aFP4R0Mzcq>N8 zGhtRpiLpq2$Zj1UdLdl69752qN#C(poZm>ewp0tNCDDF>@OO2#X*N!M5X&O6j;O8A zbi2kl40Q0`N`@(6big68&PF00!1fD!z}>ptTU)5^8tm$${=os|-ZAqTqzCk{x|r?~ z%|?%@on`eT6`J~NG{*K6D2C9@qt@n`pr%q&#qXv-qG4y}WhF2{uHC&oP`kIg2TX|_ z$G2^5{uqB#(6JT|l;E?f7pxmz-p2dg<{xZ=bKGIDX2==CAR%T?Tdvm~#Rq{4_ca@D ztv>{9EMzfa*CYghIs|(Yp6q>|l(X z_e7v_E4`a(9s-o*2Cp6*zBwQ)#b#L=Ab=6xEKB`9KOSN;e~4NXX0%Gp&$VX>6$P7A z7O^^8rhBM>48qklHO!~bCINHlM+KGksp}083(??i@YNz-3$&_EYoR#zIdDC((Q6q( zQv}7=>;aQFrLO=!Dz0!+?h3A;j_LTOc%35`=?QU+{Ydf%Qahp7GI9y2dQ+c4{2}f(t;HU#XX*R9{?e*8gWJXoy62jerqqA*qXlywD?YNxgsKA z;`(LCi1k85{DB+-MWh?vhgR;b;;ym)fsE9A!mnzxJUNmvI+VeRSYpZL*-Hj>p;Ti? z(b8yZr8G48WXKm@aR3{28I7cupT~QxC&#iq`^m#}gyQ7w-7eU8-_Bn1_?sqTc@SBd zEwu#E>PTJ^Ol&-&ycF6l&vqz0%rytaS{VMz#u4Jf)#9jzSy(oD6uZ2KjvLlIJXd`O zOjAr3IOPEdVQ=~6dwn1mXt!^_j-9NWYD2whsQ$PRfh2|*Pu1X)c^VfNhZov3Hc7CvT zt>tc(w3q%eoaGS=C!v&M-VoAWpePTWDsQ!n*h&RyT2^r>l(mtotnuWmt>M49X10f; zanoDmYBNOvqkrAQWAG$>DcPVBDi*qZ>o|p=xQbs)v!P#md$;Nd*`JpV}Azem${ zW8TZ{?r`CyyX`v%(6$KKnEqzvBHa`Rg{_JWL=OO6$Y%pzbPyV%@}d38!*7aQ$nnuS zKH9xo%L|J)c%6g6UjPiN31W#X4M2~{boh2~CI(nc0uo!An#BQfblRKjwWtvwcoc82 zp?l)-Y?%y84TDs;SvFpg=+?kb{nwg!keCcuavlA>0m9DbB%$AW7{gq;knrg$X`S6% zVp;hUV!W|X5T&j;97$A{8xWxz`V?o8vwXvqHodY0e^NaXeDQO$MT@yTdlk1Y!n!T(#&e^NN(-1H?{5JP?H~t zHUh)J4cK_VsZc|bmeJm8&=$-z5Vbln0Y#N-XI#hD?2;DIL~Ue^X1t3H`c$6o{JJ|| zBc3C9hC^i#rkP=a#?PZ< zH6*fCpbd|4(SkdmJ`x+DRGh~2Xf0+=R9NNS1Z5B;O1~drp;c&;WmVA!jUhu%hZDUg zluA}K#7w!G(W7W-mTG0NB%GL$sgIz1DL}xhbxYvK6KLHiy4oHsa;-gbkc(kw_9oXE zi*wlL!>8jX^Nc$9UTJykQAEy+!QY*EoPU)fo z))rlr?502l^8nveKD)u;ej4teE|z;gQp!@hZMNmxb_%3kr%DSCUZezJ+`w7CP7{xC zfp)Av%zS^YB(Tic6Ze#;PW3(mBvcnTXh5$H7+QYj&!vCE_Hib1P(t#DPg)n*S-68HsLL|+e4qgVi{ z^!1RtFNv$5`HJCJC#`p2u07gZ>&=>GRM_ZH@I?ATFVdeG_y>nmRNWR~bG>F1`pu!S0f=MC$|s zmhCIFyd}*vDc7tNEX_2r-1gL9_9Y)=ycs=$P4U!@_LH(P4qvPXX%Td&1c%KmQK}5z z5u>NcqiAFLzX2vmTU~UDe2=@Kyf;nzDzRy{@BwHlt96NP@Hx#4L$DC*SL@oLkZh>+ z_MLW+79XkHGYoW*E@lJhEjfb9{Bn5F@GkW`jiG>yNx{O{$smTxjK6l+y1iupS8jW> z*=!ApHzqeg%gZ1qjUU8;+=>}A=MRkcRclKcA^L0Ln+ zYTD1pPeiZ6v)!aOmB$CoRmy>FoN2b-$x)5LqIY#TAMa73+HkY`v>eE&Jwjx zj|ob$GKGSeX{KwVW8`0%B_ChON_@B%Feq8gqhb%B5~a*KVpJ#5%p6Fdh^BDM)a3BQ zNzXLFNr03tqbrSV4N}TE2DPGZ-0b%~dxrt3-mD25Mpf#Y!dn;S=EJ5LdL?MWHfh)c+&PtSVv`M;k#fzkC;lon+iO>6h&1zPa8kInMZg>H@VyN@#8!pbCXC`6^^fG(!8{%c?nQSLGHs zhtVUfhStUA;hb39+`;FDQwjA-lV=X3ba)8-VYq*|L2AEQl3w zu-EMD+ud%q{ukD6*u>!`?Bi|@Eu$eZsKZL8Nn*}YYz4!|<=|^(6R}S4uo1r;AWE7; z*gBGdbCaw^WXKQ^C0*w*7@cP0gLU*Xq^)h@JoQ95JuvjVIRw||N=}WP>qQ7ZjMyN| zn_Ji1ISDrLGy^>1L_QAgdh6y9ly4ms1^5ZK#ut6~=+i2IdDR80=`KF6IGfgjTK}4b z-c+$Ne}Tk?z=&Fwx&a2558hC1ExklgC?v|{anUtSH$15>R-a)ot{v*on%qW?Kr6lZ z`c6I|6w&yNW~YAvsH@3mduz|+?q(H6LSpK{<$3i9X$>lu44ewEjaz^M6?Sd5ZM3GrdGqKvJvKLV2nJo8EUx_@|2o+)3`WVQt>+@sZ23@f+Grv~Mi8Fhr!{gKq=+bLsAy1xvXvPN zzS^`!dp&!0(B@vs*9!6+lGh|6SgD$QX{|sc_qma2z+EHlt0y@VYLHFYt?rB9Mdgm; z98;EN?35k$^|Y7biX z)AC8b$yK?VUEH^$UU1Bi<*}fJhUeDIQJ)zlPpdGco|yP*1*@zg6&%- z--R7n%s-S^Q-Fw~Zf!R^$9ECJbs;M=wcFZxdv6c530WHBL1OMAKOd`CYna!x1M>rE zjCqrFZcCIErOUM8U3DvG+BCO-73$%C3)(pjO{ZI%=u&&+M90!XlVy0qm;g$?ol|>& z9S_28eDPn~d<<5(QB-o0G~zHr%~AL^=Ip@Xo2~8llLL&y4BUB-N=3Zf+`+dt=|!4I zxkvNzonhW|8iJ>l8)55&`WAG{xhzu_+1Q=w#(@(8@v?lt zi8#0>Gc>4R4KRyZbNgnAnm8aL=06IT3P**NDBuFWs7=yUk5#-$l?(u41Dffx?ij0& z^{4jMNhyG^?*YCmMm)j^w_}@pxsx#Rb*V&S>M>?6Pk#^iV0kn^idc1lMRgAAW0}liWo>tH7tyfs)`UO&UIhhS%9?QcC!H6?FVh6ZP>smzDj>hd&D802|J z=<|jKwKMxLBifb0qP4Y$jbd?-viea#!VDp1iIRm( zdjepiK_NsGI+btrCm};h8Tyn?J-xyj%EUfVXpX{qN>&SKA}{-UJ~7F@IYw>#MOxf` zwdOPU*3lIjO;r~GBKO5RdWV4B8$1=CJP)|W@YTT%I8~VzmSuF4<+oDNQbAIaQ&X&V zR%54K3VG!$3>fIm6FGG-X-o%R|GgZ&G#(rq*fG|kM;w5NN#CUOt(9=&knVlEQ$ zjF*YH)zzFKCJq8M7}FSx{jp0qZ=v%)1&p|^VuCBDK#ZfO>C)EZNLn85rNX()9M@PR z8yHEW<)I9%Dc<5d!DVr%GIm_R66)xH9%gbdc84V?L@FAd@SU?z5zz zOds;O#hS3;;zDcwJ;1IPq(#sYF{AYW??yG^QsLhk+(5=1sw&ud$96Aw8Kw|AXzres zkHISK4~$G$aiHt751sbpY+Bgav zWoR8tc4VWnMjE5M4p>Er;L0J*r{##^rab%}2=iQWnpt~F+jRx7NX?7R0iT8;8M{K! zCKhI$DytvlnAPvLoSm|!Bb=(sMG^@Xvp_y^Kjq;kIJzK38m+5oe|2GW7zmw#8c=qQJzn!y@l zk*6&^>gVu<$DaQ;`->qES0KmSxIa+{+$TjSgQs%c^W9kabYq zPZ*D(mT8_*tW|e zbVLh4pz9w3l6r1+kCasD^Y$TeYo!K}B9(OlT2!$t5MqKU4kKQ|`W)v1a5N^HZ>Jpy zBgVrog*Oo8=wTIFWP2^{@%& zurZ9Oc&w!CThv$=N={jW>#x?tbc00|cZ1OO-F^4yu6mJ?V!Ekn&HaP66jG?A29}Wrln^J zfe7~HqMK-9%HtyRF%$WEwAtD^u7pR>Gk}Dxu_}E>LuQ#74BuDZBeIz>w&kU<@rw{J zr-*4GHkM7~@@i|mN%-pz_H!%K>D6&2&MH;ZE$Uxo@PCT>w&(&|oe}X}SGI0-BZeEE z)qcZKgc-qiVYFo*UoUEGnU})vSEQ-A=4q;XNdm6QQfVgj2yK3CfWHLUlC(=RY{D^A z$KeUc5z>9v8eTa#6Z%#LA)^qDeP9H{2o01lAVFNKZJ9X&P-KlsYc;iUf>(e^ECCdo z)M+`!iYXtyoRc5}%p*`Ks18)7>eRXO5e^7fc!cZ7m1(iOK((Za>ccPIos1wR8uw9@ zrk0QRsXItP-i?TjX&_eRh__J53U|HWGYV6^JCEV6(xThj@ure< z7O|%UiYzT_@3L7a90Vb#S!P67#)L1c@U?-|a;|m}0y=GYh`^ToDsw{V5+x%X|4rS) z!?9;2RrP?UtS5m~4U2hpSIfLMtt$U3_JCe`3kpAOd|FQH7wlP5DT>$0UZpu)MUs-(NQ@`p3xO0 zwT<>cK?Gy$N2ft6@}Y0>f&zHI-!;ONcEI|998f{|>q8EA504nH^7%@q$%AD@l&;z?_vuo@VtwsLEE`1(ZvyU!+`eYbA5Z*(zt z#s)qIQn#gnY8UHo?aL}Dq0)lUVjVLjYwS&FaPT765nu^0S3~RoJ=-o z9{f0{q>#CJ%k!sHyQy>aiKar#L6j#_F{mcy zL0B=BdS#l9S*g%v>H{mf2nz(Lb=3(28>%nn!Dp?M;tQBIS4n6f&B3u)Si_6=Kvx7W zHP>28PSV%d%@!4RaV@xX7eO9@$AYW$W-}Ce#h~vY)^jXR<=a9U~%guCm%+mlhKcckEydEgHt)oJF zDHKE$283P#ZBXyWh?tCIN!cd$hE=tpnd0PbjdK{3#|iC*IL+e->x#W0w~7(q{tyfv zgNJ zDpX2qoi8DHzyQe9^k$_^{>^c@C{dRVaWPv~k5%M=71>W}eALhfdthrDk&1L|wvHPX zMLTY8ZEc}jZ6)1lZynh*aLP9P+Y&=pl-?-WvU?sesseT`(sUQi>wXcxWEbolaM%_^ zrFj!&`{jsa7I6mDE@w$Tf`XRU1RcpiJWG@*JzjUZIe*#y1BI_S4>=ONtxDxf=4Q}_ zb=!m>^N3x)RKpzDNUuRI#4MNgJ_q51_3AhuD=PgPZqlf9Sk^w}1sqqAtF^=Vr}M(C zc>9Q!{VoCGETr##8eJh+5X^tM@h*r4()h1xDVN5n)pn}8I;8E=vUCDrRRwRPqgv8- zyG!$Bt~KkM!&1eigIR`1Q0gAFR%_^mcdAX9dMhg3TN%xUOMC5+vB)sHSz2|EXyX3MtL~$vj#SyAw%^J&NAcrl}IE z)_ox%F>jS&7;!Muk+~7P=#=*IfVPg^kiiG56$5O>kQ6NqwqWghpY`d$zL}(*BeSBi>B<2%B_#86FJm8FJHcHxYl+T z_^nUveCt;0rilycDGd8j^>Q>bvRhAvyoO`3<8**=Bg{EZyLEjZSueMGttz~>qM&*Q zY95@KgI#opX&9$7HHcEuv~#c5c+A80gCk&>3Msen56Bq^G+e2){TL_@g@j-xf6MBD zis#hiX7xA~+8B?NX#mKOPqQ{?bP1cWLa63~RBQK5t9~|ySOZj9e5`V*?V5NdARf>HBszKVm%zz6&_Z}ZX$o6N7cgVqfd?Cw(SAr#3MssI zPm`}@hp^O!^g;O$9+h|{!EmBSfln(-vWZMA4f*T8{6WkY;q2!k{i*kJ{BVf@;~vUD z&$9h2m`oBA4(chft|j0Sgp6#(#gy3-&|>HMWK~>PuD48gVQu;&b+tP^#!4F^u?$

    -#g8!Kvkzy`pJy?3gS^IJby9lm%UA2yKB^A&sN6ni z>`?hi-2z6AheGX=3Wx6=sO=`Kvk&AYQi;laUL6p>OI9MWA+3^Y2Wy;!8f(y}Sv_FR zU8kL&J}Qp}ZNpR!Znn2hZWDS%bh3egRp!*MW$TbRx7%BE3Ps{>vlB`4?!}=U@}V%= z@erDm?M-#X9^%IVvLWZDGDvOVLr6ly4X+64--4(njStGO90KbCS`$WI{ za#QIKzmGwGZ*|@LIKj2rd%?I{0!8`8sx>!{B?1@=r#W;*xzWCPF@d@PXW0zXcr5HH zgN8*#Yniq`MHGpe_&d%ZNzSlNfpG zkrgO}MbqR(LMAw{EFv#`@(|m}z*aXFmFe^11|q>ShzuAkWs>4CG0oh8a7>tnl!0d9 zaI{_3dGNqeSv;X}(ZXPE!u(FRNJ$+gXhv_4WinKIkQgw;DJ8IO15XCz z&3QCx+>LrVw0q8{bTp2l3WaKh>W!~=xXBYaZS>qm!bnTj)UYgcbiidOM|r1QKSXd= zNrS%ec!j{LYK3@tzvY5L3y-IdN6W+O@lgyf_9<*+w)TzIQa4-iE)e$jOwEmh`Q-#E zCRlFB#TAr{UwIEU19hoH`a4ly0JYpXUBj;iB*S5HgtXV(?~~Geokv+cq9jcG6>@TQ zdGNaJEDviNeum--J>?vdslkc;Z$`-z&~ze7^oZMZAZQ`U3>qOvBc zRBMoQyh@f9jdF30@}L_sENkDvr(++M5U8bimRY+JZnJkC^Aeznm18JGn+FHDjI3bv zk_OY0g6caMtwuQb)XL3%zV$ZB(xt`AOK++{tyigAsbLW~s!*2t4@Z_xb>yiq=hn0Z z5QL@Mc7!XOR~84Y&~m}7wATe3=t~L74NtxyH%Jlbpk*_j*vZOhFw8STaR3sEvMeMZ zKn{O5jvkfcu;A^ngK|R1L1{^+l8)RgqZdgkNYJOLqwS1-9TsI9zU%IwkR2r;TI+&G z%zgDAm1u;1DN0R>Q@Z(@3j3ClM=oaht|-C`aAjR{?fK3iUl9P&0yw9{DK#Y~#6<^_ z5ol^4t^XQ?#E8g{K=0)h|*JX7;@o9X--lv?x4GLP9uBkYZtB&3If0WOMP?)0K96_zv_F+7bH@Zxf_*bRor7Xv}wzu4`L+rGf^0}+&!oXUKUPr57& zbp$65XJMhmg8gDJRv%XA;WJ*2exWAIM0c1*vB~S;y#!zEtkg;yMzqEaTqxt2y7;T33E^jRqrYBED9^m$4%i~6cjD)jjT3=sfb^UYir zcl~HYdOGEO(5ZG9X`%d{kEUS6_!|W^nH06`BF}t)urYZVayv z8YGb%(4Hp}UrgT+Vvbt~JQ84AkIpCnQE>@qqB9M3qTU`oYHhq{6mn-9HAw3{zbHes zV6qHQnTkKQ=2*7W@3S9uUqZ6XHS2#QZNW^oT^cCi&!DGWR8Wu{hAAdhnGWtpY*TF+ zt-7|hu|;w%S$JjrWIfO37P>TVdh}rQk@;J4+YSGwtQ?PD3Z2GM6)FIGklIrQ<(=GGAwYU(0)R3n`= zh3vf^<2+?iEe5?Fv=Ygd3Qdyn(0H-pL;*0xynaH9%(Tsw9a}&pY|r#ysu81Qwg($e zF59_SZ|WU&4`WXaOU1MDSrh3J$&{4Z5F8x@wXSxcg8f2BuSrLYffY=lWAPg-G^AlM zQnYYG3YwsxWlpza*UJ4ztNn=-h$*8Z)Y~SRp(0qN?Z2UsGgz$uthMW;OCbFQvK4i_ zwfw3QFFP(VB7}aSj&k^`7R77klnq`TCsKGU4RZU4^~^3T58rq>O~Rbcs9NpSQ6Cyu zDYsAQ3WyS)wDC6{6eSzJ-WS26QND4R$8{!8&qKMof=^9^CcSurkrc5lJ|auRgY+W9 zgcb){d|Rc&R8*3D$N_|}U&$k&?pQ%C-#UgPQi~JGD6I_N9ZC(P@`+;xHvz}e9DxkM zV%{iBC>KgnW#v#fOad|w4c0p-PpS7JSj*~Bb)?&J$j~<|Wi>F+wB=pJQCS*B&N@CrmB zWBoYbQtF5>YvvEvYV4!Zn?cIFVLev>0X9XG)lD@dG{lMDn&_58B7l_^l!Ggm-o@ix zh}YxV_YfF1UP^((ny~}^N;z;#o7O;hhB%5pEO885$F`&k^kG?+e?_5$)Qr6@RZ70n z1HYW#^NMSUQM5MGeU`1lR&?_crfJNDm=Vfc4VD5Z>&|gm!o#)%*8AcW#{8ZAp;@Ad znNpLvT&HsjWX{xaQBPWt5g0E@u1~o-#Kkg6@`Usp8)6AVrIQTV^{yb17-J(S1NS>F zgHJPnsg8qjv_2oJ4`+Y&;OquG9hm}q$Yan-X_qv2EbO6}T)?4}J37E3_r|ETW{$Jg zr_1B!*JnF7-(EQ8v&{-?MIJs$03iMnpB};8y5XyYGzvIFcQ4(!%$O(D_}l-BH??6g zgsHqr^=;q#c66z_l{&5F3xh<7iZd2QNg8>SciE)e8=!`B65kzqrUMQ(RlHL7rE;d4 zyMN`OVyavW0kMy-J-W+4**O=ubxK>1!tj%$1?8w(-`@}wN}*VWSR@L)4u0#skne5-vii^x3gt=qxV(w{5*{^=6$r9TkO{&_k2)^A0$QKD zbxBI=T4}KB&%`idPpUX5bYRPi{Mv&ND2PwH zJ6rXJ>2TRHM?2yXnk%SP-eIV=170+Nle|hG^%DKI23d$25PKwD8Bcj9`I&rliBr z&m>nyuo8$RM9MJSK+vR9M&y2v{jox+`!wz=rzsOfQ(0Ri%|#UKM0@-dF4%&pGRMc* zpyr%{B1{-Z@huIQHzhZ=7S`7}h^dL`S0KAT(nBb`JLHBcyp_^f?YO2T>rRyY=u?AqKvCr6;s6psW0 zjVjh(f9wF(Yz(Gt-w^4E4x>0RI47KAsY9zZ z7C>DQ=~`Dj)FJAP=9C}D66z7<&3vD=Y<_NdcE6C;KpRnL=;zC7)&Trom_^0g!=~)0 zsqX>F#7{1=wqNuEfM)VA)mJ2ig;HXrj7_l?t4jT5+8j|UdCWh{H9jn$ zy+*coIVC43`aUGYHL|$sH;q-barFW_q9V7VFq$mu6A7uZq!6ea3~71wy5R?_Mf5Ce zSC;-M-`qkDrl5_3&$;rXbme?nd8dZY%qORn2OK_OXYSnjJDj@qZPlRugpv`a>gE9D z#z6EV59jiYgFds)1Jl#!y4i3)VY?2=8C8(+7dC-2Tt~^9@ z^F8WQ#b-!CE~CCDW+OpRv!D(|p*(h=Lv+$yYlSgN3{=XJvP+1t9>hkFA=w7X((NL~ zllL#iCtZEmCMpwAEBn~3PqY;^n$O2#Q1!nt!Lo|^K94=JP9=J{Sc6P{3WOJ^@3X@jH9vQ30O zY>BXvA1)2I5r@PY74(oYkvrU}JKSLIeObDYo1J)%JBuHIqKTGN@rZnAqNpr%&9~5zu0p70qRm49 z1OGK&To=+Bl*D@EW_=#mpI6PriqZ#Z)#z8!hJM|xHxOiM5I(eu%G}dr^!y!|8>lNd zg_GR3NRTN&^-&fQ>@UF;5f z{FZ`@SyGkr~`yfc6A$ zH?%-Po_PKnUOpr}O5t)Iar-6M#Z-=b%F~rF9{yJ1%5tQhS5jO6r!rk3_}4zYhovaU z)WDN`g>JmD%(T^_2UT}!|JS{nIjnY=Y%2OIzxj?1#Q;Cp4JOFCL8BJ_q+#W=H(>&< zP)zRPCvAoe+GmR#yR!2?*e#hdm+evCF?A}`t#C;vh1!e={pL{m=F6IUvrxEflUUnH z*Lj-(4JuCwr7M>lqzr@gcYD_z_x*!1GZ%lKkdPC>jFiKbej@d0%a56e#<#2H!SWiR z_zj+Kll|M$mu~l(eXSh-YB;)4b)-rSIqt?D&BdRnK|;Y2vKll>SvbTmRzgCDGMZmd zV!8T$)zgrw%1^}tEJWD|4Rv7(HF;-9^Yx85Jq2=rz~=AQ4ay5M4a%vdrMPX@RZ2-+s})dlNBh+^+V|zUougBL)56Y`iE3MU6{6xB=RXkZ)!(}-Dzt@F&Ua^cULwVF19?)P+P6dpq8OG=X z)Sp%2(;SdkHsG5LcK((aoDLVlZQc}*Va0D8v8j)aJfZ2Ed5%x;aUw{)BWSG!ICKGf z5>1kh;4W#hGDNM=kX$xb5Y67VEFsTxiofZ-tj|ftaMoaTG6c=%KeDrG$o^>=3=uHu z)?t9Br6D6>ReEq|$^fLtu%cL@-w9S?o3x{JIE-;9~Dx!q` ztVb+`d&~Y{Ml?PXV>8RHF(5^YtmS>m8v366@$_Gbg`jD$6tEVsY!MOMAv>iZh7C8W z0Fcs&5O%EQum1L)!{7()r|7iK-PH-CyYP6#4wN-dZD3$gX~2#ExvAh<2!nDCN{6q& zhVOd-t#ic_NQ^wuBZUt7;>BA6RQM?-7B}`B2m_MgC99R^H{h@!N6R(ZjGm|=_)Zpo zz9y$eI+d&MQMK|(7OO_J`iFB$B{!Z@P_0&m0%V*FkvI3`3T06^CvIY-@Ezx_&Ys+N zc;FW0&Rz;5(-dlD|1Bv1Bm%ADLFby>$Dej~n=(?Elgp$qvjbM4W#gLgmP{j5>EED1 zRtcm%{+#!zRz?7*^%tAZd3Ej6-%Os~4Ttz!N`zN_Jt0M!pNU(O_PHJ>V6b8Hzu*7c z{{?SlPg0iohj^>w5+=0*s&{d)&jo`n=V!yoby^GQ-O*7 z3hzB37M$Y)LA2~P_B)Q8LA$ssbNPH&(Vi547k&+$b91HnqVb_vmi}EV&+XYZ zRBaOZ03u6+6w%0X#08(j?u3EsL*N|yl7da`d&AMmbKYkF#s_4+Qu_QJzd!w^^0z@&VIbKY;Q;L#CCy}|P zgw!e8xi^4;zH-p+6YXI9a{is#Ek{ME9gee4zAS>*z%-Z(bJ8bl|C8ZKZB@5UVt?S#9w$h@@&BDCkvH!s&kne~q5`Le&kkM-3(fXDWW zcX~8v1RchgAE^n#mG+OdtAP5H#m%c!>&0K z&BZ(QOb_(( zqFzS06+xBPg;Tl%vRjni0hLngH?qHg2@6s3Xf;(@7BN(p1}|j&fxmc4QuL`PmRAo3 z)n8ubx>=HycTu$eTJEfhM3o|Ys|}*eI3NL1M+tXUF1B};M^XP!u9Y6;Y&8)YUc9IJ z@b;)W%Iu9njC7PV8c}MR*f36k2JAM#=nA_eat3o%Y~XYibNLKGIP`GohI3HW7*6>m zU0UUAh#CAg2w$XMtEh})Gxj>rg;Io{w3KB)`(-v@B?YVWIfKZP!}imNFf!X zU0{aaQdHP9zNIGGkOnoh@0zLC3v8&naNad0*{0+&LcsS|Fb0D!aPqL|Ioms!p|rhGcBrR=c2L!YF8& z@_e0RvkKJ)_$`{3Y}?JgEQ`RcB8vO^2l3Gf%tT}Sss6X%vS34&;&7pmpJ}q9`?-w1 z9FU{Akz+l2Uw%3E6&GN*cth^#7x9SzHl22U7j765F#kRe0{F!b=ua^vkB;k7XlPuU zNH!Z)c%B+jwye0lQW4pYD&A_4qJ95KgUz8jLVtF-69p3JqN%jtL)y z#=CPihG!{8#bOCgiWiHU=CIW$5r}g29cmRz2+u_n{F*bfxB{2ckOd!ulM!p3NgYz- zHAh(uQ{`D;kK1te^0JbRqyd-f41tPFAgYc#ODR2pYQU8Z$qb5s()K5_*Q!Q{p716l zE6d0C)Wt_#e7q&vV;2|qoAp>KO=Yz{D0&fUHiO>1l90IN^HOKN)oKQ-BCJ#n^rjrXR&_|dkFD#uKz0o;H(hs36k}(+B4{1CryxVK zOi?l<5p&)pqCwdL2+$#5#+TG8C=tAOMK{^`HG-2rn;PBBr88D8@%rX>h(4YHBSiWa z`)PwHm``fqM0YSi`7G>@55ONZBsvF%y~6<~R9kYb*_ET??*-D(B>lkL>@S;3a|D$( zx;ek*yD}C~Nk0n46WS$yl~z?=lpi6$`0i+HuA^l(D)Ff~Fjxw#%RQ| zEWIhZv+abPmC$vHP|1oaj(f`0o$!4W6czGBp()D&Ji`v+@P)g!6)L0x5`}$iEGC>C z)=W5VPU+Hk>Cs+kBF)5wT`xc?RUj++>;%o<~D9&%_TOu^*$ z(?OD?RZIWnX!CH5GUNq#gp*d(*8&s<5ZeIYQ1;#kB`dU{<0{vII=nftm)oAxE!aF; zM1jl~70g4fgFXm0B+5MgY{(WQyqv8`p!qj9aXwU7r}pzbY*9ygDySca1jjDM^oM>$ zlB|9+ddf>I&>K~^@LbzfNVdnWyJq(DKT|J=)GFNM0kq1e_@%d_DpGWu>$T-*RataW z{2VfARaCCmW;ao)lea-pvm{4JqNGrw1&iujgC^G*u!Y%3k)c+i6}s>j7*rMqIK-7r zBcHO4COjx#G8+T~DtPZvpoZ@?CDubrK@xb7-ZOP6yt5@E^zVUcom zj{~UL5;9Dvz5&fyq~mQ-5UR36!(Q`{=#C~nH@Ot(U8qy>;&YJ^@H2ux->3#V+WtR~xj)w9!dlW135*DsA zz*fel&9F3wDPwX*cp!{Hd2ovSG`-*Vr`>T%BU2-WT!?rhqbx>Y5+*oZS@x;{W(o75t{DRZ^$-a6`%@O2$XaE0fITzcj=_atJr$SFN32DWm~o($x+&nV z^Wq}e=Gs#hzZJR6Ei_%ia);QlCRX@LUJBd;UBPYe*RTeoNgIU8VnqQu^DPT$9Le`4 zJ-@B(R9TB^_;1LW`e?=-IJ8Eh0f2UGJCIf8lrD<^Pw|Ma@r|!aG_o9yFg{bx@^6p^aXac{iO5OlLi2g?8np47I6O$GQ zDb{xMiI~79RQhV9cSn6uNl!tp{ALq+$h^TDpdHjhyx2zW$%&I8>QCKa-h1AXMzOd_ zH2%v=){ng$|CUXQ@ak>iZd>os9+0c$<(gaojE#SL?Ijy8Ec&P~zUPfbmUYvK%z%fk zjtOcrxk7Zwwn%|tK4MAlpc{Zzq*h^@l2^3qdS0@o2Wp9kTI~gw&b32u-nk z6`-fy)X6pAsRL}m)ks;yLvwO7I43$l;&e-Py*o$uEJT3L5J29OiCS` z-oz`|bHZ_8a1c4o=^N4O$hBH3=*axE^&kK*BK~e<*TgDd!PmEPEk&6)Wb`7WUe1S% zd?zhrHmZO2`6j?>gpDtGHzdN>z$&28Q4WGbf7xal&EBUc%L+|oE1`UfG`z0#nB=7m z9;OK98d&9ezCkuO(-Eb#vt7;x=$Qh4;G57-lmn|?Jdc)Ij!R(V293Fb@aHrs`W$zx2kEs|^p!Xc zDeoJ4(Ly*FP-5k?8>%+d8OJypnrEB4#yMrq2HC#=4tr1SLCqC`#z;py*#Kj_zN$7# z!N6`Vas;2v@UE1-Kd&NR`~-_T4svikqRS}>Q>#z(&GCL+FtD~+;pI^nU=+x3sz;O& z{h6M98C%Y!bUP2t*Gq6XGu@s|PHPINSg&BH7L!6NxPWSwBdbVY5iZ`aGDQO{bi4`g zFJQurSv)6CRUVVn>QN;-Yn8AC_s!|L^Und)G$OTW)W2(Y0NWalmE=R65`87p0I~39 zL(6F0>3S*)fpxgUbCVp@oUcH5K9x<4&))MHl4uCGQY3Xsln^P&{#Ey z00YEjevx5kh=^Me9&{vwLfvnK$vC1&*hPWPsQrui82C+bJ~k)^>2zgH8sm_J0c}in zWAO)>(zVm3964fe&$`W%H%%5~Ikf`V@s$+TGK2iYOy5wOFg3DLv-hKKoB+_1fI=-0 zLqf*F0P(a85%hzPX#%GVpN$~z)dXCj{HEVAp z_~dSnz^WMpXW;9917_B|lg}!T381QViNaZd3iIgGB4{|7_qT}z3B03Wy=sc^bKv3Uw2ztciD2UNJrqd zrSv?TYNk4L?I6o-bnBCv7ah#{QLtUwl0W6ex;>0arciUWq(td1rkCHUnpD}8hw?3B zD$dMlE^z#i{3WQwISi9!QspR*nBeAcJ!BDC+;V8Jbae1G*Zb)Y3CM&{gZbAbpG8Qq z?7zdka_F42LUyYLZ>lxM{H~pV=v39JPW~&Am1D&h zNJctvN&&_Qw}@SGYPd{~JqMC%5Pf$dEPGkv?d7Dp+7vg;MirdOptHN8T;!~Ri~6~$ z`>h^tHez4g{DG%(J9k@ded1 zxsF|i!Sr*ctsK8sGevo%#4)E4p%1w@=<@|=36q`9ImAvd`a_iJQ_A_fbuhqM4%2*g zqTRZ4Tf;q^9%Zgy^JjYDTyX#q;7hR0JiMdYTm1Ha&jf9@!-34ACX}x&`!_*}k)nI} z0h(vn6MLLqAkexZouWXR-SrwI5$0$pXTJ*tatvzG5GNOr$N)7Xkz|vDp4hn26%QP> zz7kL07OG?bbX&lPA3t5dUcaHOt^5~r6_$Lo_}h&8w7zbja*AdV@Ces4?kpbZqp*DT z-3$x(q(rA^mGF#lgH8QyPb2hY8s{L4EvBi66QiE0xwp*zdF9pcItAc9N;xFNMZ;j; z!h@&^t6s$Ffg7GwHg%F&Ji6+aI-_-K8h=`^4~BG)vjqdIpcFnQ?mZ-5(ok*7lPdMdnH>*BP7kq63EGnt30nS%X2B;g{n!g}kvEY4YLvZGd#O{gB! z3Xj}M>#0uK_T=q6*y?ThDKdlsKgMI0O(z9c?4&@8>G6hLQ))9c1$JHJp629wW!858 zyHW^%BA`i(=N+RJv3gQ$QX1DkW$bgPzh~D))c{b%O;E;EK4!3Ym z)9=GVk-AWr>lz-5@JIvR%36)58-lgCho7=|xVVE9_DD_ut-3g_L1J>*)3?Gub55}p zlC_9QF!yYXS+zlv;yvcPo`J>CebzQowiii%Znx=U#f~CI>x|1ydUr_bmq+dFZnRXQ zLV4s2jv#@wdbPqKoLFO&D<`m`k{{^4b=6)dcE7;EEBuy?n!`Vl#-u()JinPC*+;O& zzYgk`yfTaB^wp4SM1HgA1wEsefWY9FuLa)(V8!EORu14RW!6MxL0$=jm{+jUrvyxs zJeQ?E+@YsP#Ip_vaz_^KY69%uO#*??t>PfrEa-$i*6{P$Ee%q~^2Sq;URQmLWGRA^jBQbb$%LbCxqqT?1rqT@EKTVp}|a0d%VCRr0`F zK9HN8ZX~_$eeo?XJ+V->0cOcPbbjG@f*@>9*vUDfyv`b(wHe%Ml#j9^i_AL@fZ$M6 zI6K*!LO+s$3bzb%gxb?(=bVa}VCIGa&UxGov??51kAY9+l(CgYdTy>9uT+js$zbue z^3!+f_&Gc@DRV$$nF->v#8G%{l5$ZY3fa+d+9$Ph zw(PaDC9(Y2bP=@)xdfV08*u8@$E`kdRl#6t|MPWm6XqKt1@D?N42ncc8LC1 zcsAZmYMB~G2NnA?v++brap71TQPE4A{i|+$wy=%=d#-k05f`ZeOw2cVKMGGhkT=uZ zuE-@uv$8siO!?-rE@;;%GA!^CI-xsQlC?)9l%?+!a!H53Sw0j;h2vqFR_+eZadGUz zRZVVmM#v>o>%g;q9i7apP>d92YJ-qW7eL%W*pl0br9R9V6YDPT*doi4{8@`PXn}%e z?IN1~KX(dgH?A|MUS1Dsn+&?Sxo0YBPrgHCPyrK7Bly{~e-1(h@qTk9q`(Gwv`&8~ z&VG8!?<4&7qCXC}i3|`o{UH@LZ(|asxUrs(B-Y1yWf()dVR3Je(tuFZ#L+3e1dGuN zF(qx4q$DEzD0#2=H`+0eI9y?%g(c z27};lYIavsM)dxYT6R5h2M`^?Fb6!8f&v*U24lfLJNk4TPN32I4ytam3T|KvW|30?LSm*d9lBn_ z>YD&3`ggFLdt1g~$!gjJ<6-7Z5cL#B>pDj%+;B)Dt9;}rLiapizniV}#6o@^!~j9m zq=$}GX_bW9<2R&4Cn-`#tB)78XpN-qR+(0`CIYb;IYWB4~^##v(DUip8gQ6eRhCw#w#b~TpI|~4Z z_y}sck7};Dx?7cLnpRO0k-hmS7%9D8!|@XuOm>{PKQ^sHFKb5V$Y`+tTQ^)fyT-oD zCZuP`o0Ex)9U~PqCt7?T=X|??%!V_OxzIL}SB6Ljj5-CKN}$zYe%Jv`wvOEM3u%`t z<%k3fuEXViBHrekgMm}b&>#gXv8zrtjto>fG&B*Z!3{jNt?@i6pnYtLtA=DMI?x1P zk&$+xBP}PZ;xkDSQB_k*N492M7n&(0!baVWt^WqMb64qf0$wLhMh7Oo$wtu#Kdw7ew)nv7c z;G{J}rO^r9$pi`9&|$MUyfrm3>euNCzuUa^3tXD!Z-Oulf^0!p5ZB>O^rT$@ZzyG3 zBEVZSK44$H52J(Eauq3r4CAk#cCY3ykVAzqT*oj}t|6w}!y*##*|SOBvbKl_Y+%3CWIg_y7uT5UW7um>>|50A$B+;zCzi0Y$&y(;XIS6R#fr#iT1bjYe3M!bRD zvOr(>>0~K7#SdBnOM)aq}{fZ1+}_cJlJIi}TGmH-l0ebf@bhrIMy@ zxsmEo=R_o{C|#Hn-ICfx=xY*W?4${ziIAS+ zD=u-y>rQCz8$odb*Dd)JT`KXU*7S%aNWu z=%A-Ma?;d`PBslBt_d*~AjK$%RQ(K=g$mayI6$Qvt1|0aY|uRWDfnRc`6vM*SJ^Id zN0(SHdL3*KczYd9&UrTJL;1VqE%kP|CP`p2=mkVz?_5gmnE)U7dKf5Q^5!R$vI{2< z+Mpe_D4gShd{@8OelLaudB*HHgqc`{ZSNj8Pl7F{G4YN2 zbo~o^3oq|&xx?+>qldFU?^MgO<~*>(R&gGwZE_JJz5oxZ6M@8O6hZ&;gRyx?l(a0{ z6E-B(RRzv*Ztq|@@dlFJ2~N?m2A;KoQX&u;K_xXjl)5VeZS z)(iNeP2rLLiQtTu{ix97+&T zBNnSjfbM73L;~oo_Hq+d4Y*43G(d{63<~1%7K+r-qG)?|Gx#9)03=3CZz3Ie-!tuU z&=8yxw7t$O{-gSzkFOS)9Hs>aMTLlF+h}Pg?}h=a_BQ%$i_a=2>>Wd;HMErhsggHu z1v(@C(z!US$7Fx7Qv^VYGVbl%d4nJ3@2ojk87{Z7*$&^Y6W~xr zeA-z>DE0XNi1g#@nKleW97YQ2wa|q3nF5PGW<3-wM^KW`XG2mIUD%4V8~2L;T8IZB z$sm-|DL#lyAM>X*rslqg5G*7>a$whgajyh+Q8CCitgQ#=( zWwNmp&A`{8t={(uQxsJV!z@x7XT3Axt38Co%eIhv2SAABFkJY`ilgEwSPmw*Ao8rk zqfL{%Dn5^1l+!T%aS6GQY=E-w;BJExpaeWZ%&zQ6Jg_pJh$N4xQ%rMQnr{LOlf^e# zeNd7AtRUNrgk@VudQzY4o%FhD*X+|3F~Dg$|bO&JbQZSMn!tX51T0E5cHVLdt9+KK21)0!{#%pPqnJAquGQE4b3s*Ar}a$ zu=@oRVwgl@o-<}(Vc?^^mqR$FvYYOaRCtzTmbyg}cWzLas->&_Ch1mFmb6rACN>mQ z+1u$wdTu{|M-5MTX_6&l=AF2DjFY@4xbCfJh$0k3!j+uS0Hwpd5M@TuRfY|2x&^qb zIe4!UEJVfCO3vw?VPDD9jSv4QFN72zs($i8HhodIAbBTa2)uBOR&)JM><(pYtl9`(&ew8^dfNv1+= zB>1o5xa79xax1kNaWrj%oqScyz!Mfb6iiMC#R(rVGHaHHVg~q*ziQVG+-!`FDzk-d&#;Y2X z65Yj^)dr3V3b#?#19 zn7ALG;!}(`LX}Kn^d`tUO_nQt#Bg+E3g4I^$SB0$*?PbMBPjBSaMh2VxPL^Q5|o59 zB?%$~Lar}W@@dhH(V}2}wHEpp41{?FqB5Jtt)aAm%F()_B|7!!!Qs@fZDb4^d;+Yh zYNlO{wsuMa4HnKG8t?9#T&Ec*vcQ5c@y6LUow(1cR_se+L|1e3zk1^L1oGt?)PMg~$zU1k1YZ<{-@Pq1$a;OdIUfe z-tdFkXe)aXko4z_s6!1r+@VC(z)F7#wPZ1AzUeWKwLGT9+3c$9k7sMO@6_6%2%J3Q zHIC4j&RV@LUrapQT&e^vP7H>lF{)20Y!v0-?yg)UuXl&9II75egF0G4a%#=MGnNs7 zx{6(|Xy+xT23VmGJlQ%<7-z&7UUwdiXb-7=1Pt2D z;;HQ{3apRTu4N7$64EN=f;FLxKFw`x-nvdr3&c`wE)&{j6?fR zvzL6}m`azpZ}0K$J)GBZbys^eWHVt|A_@QC1UD-42Cd~#4nVI(UqL7iP22mFxw>L8 z{x^D@ZS+b%<^V`HQDCsw9AFv&UIf{#@_emynioCWla-DXO;iIyuhvzl5xuCFldG+~ z6C3L@?{#TWRe$mPfvJzvFQ#m}J0%j2Dqu&9sFS+Y-sCc|9K_KCZyrfsRU%`p7?&$J zB2^A;Ov1dW_xz?}Rl`Ng1HS7QRS(X zXv?}w09&#V)~^mq3aPO4iVyH)qr`Y#)9d09TLid0qqggS2Ajv+#b*t0MEIi&+ROVF z6C^r*SGt8AOtB%(%JpcklrbpVV&h;Wp~MUmhhTN~xh?}%(s-h163tYCsyhp5eQ>Ts5xhqno@+JTo?SLPlEbY@EfM8v0g5W9t$j?>3Rc`o#RW9dN^BevwtTC|Z>!r< zxs{@C80G;M;eZadq5y7aP-n3@;ZT5u~e zLs?@c(@Ws~!81^oQ!KhHf<6ko&Yk(}&AH%{&o6p~V4p7|;!szrh#-O&$A<2|g8&B&N zy{7c$i+p{0oG)|rS4%>)x_!|TwDBEE(R5XPUrC^77ih`R>I%fRX##4?}uxI zWx*m%q{Pnby|`MdY|*rfjp&V$D5mc?bcm2m?1JmPCQ^MKZKW-^ce&msQ^S%i>RW*m z*@UWHQ_W=zV!d&xQ;tW)5o-(#*JM&1FQGqacZApe1HN@^DnZkEMBngW#Jtuqby%@v zBK4UQtvdZRTYwe@4D7;F=Stxe9WXwHrcSrTT}OD%d%CoQ}1%wC5)wC|E#kgFUv zZaSc*mkp_g1(Pw)Y9-U&H&%11M|v~%*_*UvC@jPKj@fXy=k`+QH6#wGMNQ8QZ>KSQVC))g8dtF$_xw598G)dcd%u zug7h5mE!6eq4QjJwuM$0qB!(T7Orn&1}$O^;4xG0bkEs$Y|DKL36#40GKz$36XIs* zpAiOH`6lVhQw_1v>O9lIT9udX*&Uw$joLI_MQt~raKkg)4S=HE^ZV!}(|oF16vZ_4 zB{4MGjj^eru>YA78u8j)+^5u(H!y@G(_{(wMfnFrS#sGiWNuLc-YQ;*Q1 z8?p?=Y+ytx>@$tEY0FWJ)QM+O#j$0&)A`3}1he49f0!At9Az5y4&7(+v=rbb(nrFM z<~txi5gNo1>8qJXV+05n_4j450QI$KnN7s-Y6KsAI^r%&OzZIh882N!)B&rH@dwaN zq@GY2Qs;>cgJ4of>D75}H^Hwf3Q2~!T5BzJ&ErxAU34B~k;zy~HI2^XVBQ&u27J%e zi7EwDk4Bp&Cfec8ig4+eod@*BOHmho=WfoOZeo0*Yi$4;L0=IAz!AN4y;n@F22nis zX;+J>LGrmT$(UvTa^M(DIwtzp!FVoo8_x)#Ao=1NiP54Icdw~%Y3>k?T1OK1;CNL{ z0C4q5LS)ygy;EE@(ISnmM;vgQZj~J@zet9fAIQv(xRSj{BNA+3)Fldog4$R=sqz?c z-q6Yw#F}kyscseF61v1{Qsgj}gtm?+2=d{B3x*wg+l)e4u`#rziMa)#);CX3rVcbPRaC|W5E-r~%G5Sy*{;JMGDL@V*TwzJgW~eN~6C4 z)434)GmpoFo<{`iTB*yrs3k8Nv<7CaBW74;npTD97;~;0Td9m1UK3<|FDi&Br9C_p ztBv|zUI5zHQF>7s|oTb#MLFu5rq7ND+~LZe6-lE+X79iA#QbE_+(g- zLgW2c>lmQ!e9N-(d|H*vP6BXa#CRV*!wMm4h70cM7j=ig8q~u^VGqyCpTsHWlBgyo zk%6y2xC#r(WO()XatmWbt>CVoL;)lFNtp4qT2u8+9zg}!LI&NirHRIC-cc1Dhc~Oe zq^A%;X*NcShMVxH5o*WGoEB|4nQw?;2yUa6%?*tZ7YIDUh|r^z_y=MKFC*8J1RF`N zTqoHUfvPKBue;iZOMOBvSm$(`aEfvGy7YmIcuxD<28eJSnb&m2A(r{6@vssdfqaiy zWh$re35Q>EHa(y4Kr?&^1I|q|9_+(6PajgujpbNhz@j>Y6-skN zA4iN_3wMq4{7IhOX|||P{WBVn#FT zZOlt0m1FCu&6 z#|PJy&-?oixVYtJGj6O;r6YNAwndEWdgKldG`KN6m>%v#(r#4^f3!`v%o#VdG(yU6 zYZz!bm@ZWC&>24=YlBCj>zJyVj;b?i%#D-y>l$3KRSeQjG4&{?=b4?zJlsm&+$rA? zsW`5s1yumGas~LL$d(euzFMAN%)4nm-j<1h7)H#zfIz&mLp5>e_DM|+o+N0iv;8b> z8*}af(wj6_8n(&cj5()>o8aG4OLwzJ5o}<4{8`hzMn|EO!l*Uq^B#5YGY`r?)iblr z1df>>zGodGw?pT03xXAo7ggYq!@z82_pzBAk9PkP6n00{5y88+gCJj0ZkvrXoqc1J zzFK4wmxs;C=mjcoUVIc`RHMuzp!x&%cVkbtFCM%Qfp3AN4S7rvp5z{a$R}h0jQ-J% zVTI7c@WtjAL!{jhi8%M_kZPaM$QbF!>z9Dio^=`?%E+ z4`ZYt+mBy7F$)e6IKG_Xjc7qwdM!Sp@neM2BeDv0(2Qi&vnTku#>N{@FgFd#)fl0}3S6_Y*U%{1W_8VilelvF-KqzunCu~?PS;)8PZ zm>6f)tb1xi*BWHw7I1Wj3X3%7~{dkPkr!+Y?%># ztF*Nub35m`5u3IO+LQ?I( z1sL`+7#6@3anW&`0HuKZhm;%QSXkF+VT@s8fz|>LauhRQfSUO9c>83+s6wgG2Dy@T=gMHZfnuejKE79cIqu76zT* zy4d8#J(#)MoxspdT<0B6?5K1b{4@?Rh z4tB!UgCFV^EbhtuQFeRznD3vEKJ?Q*@n;J|eF5y#@4D~yF~FSrnCE7@=&tO|;>R3( zNX1Wd)}5a}K6|Vwj#4BPS5LKPADBdnXEDa)hjo$fI9B}w?%a~AxzUK#4$Z4ss~^MF z0}Rp0*(EH}`uaAC-=GoD^$Y=L>j26;;KZT~I(27vLJ^3HUAHamrv>Jeq zJ8cY)ehjs7*U5k3&cdAow5`_2N5>DKKt1_e(K*t^L)=SG2q{4O?ZHDxR=w~ueNKED z6Dv?G-O)ox>IrPNKrZPHq=gAZHIENI*?)rSf+eYH$oB}s9vnaPan$p{;eQLW!X^h# zD7npD8eP8r<1yb4DTBs@d3T~HriTw<|A)l?KIVIYq?(qHL*f)jrk~S}a`*&#FGn9` zFgjGlL!R6CW~G!vel>?bKloMHkyT#s;{N^z2Rjh)MBu;w$pPEkRSfV8dZ1q3hK?6z ze+69wO<)1?7527fkNG@-jK}*Q)4NwIn+asNtsnpD!R4bs=pRE;TbEBRK2_>LB4#ZS zOg;Y)iGLsc0my~~H=(E<^vvM$;l-~w|Mz|JlQ6uydP1CF6RQ98@~-as0{2 z|5Uu5esJ>m_`gFwe{-~d_;ZBBkB|N)3PPy*?Bv%F$bW^rS`4%9@PniOeE2iQ%1$s %1$s: %2$s%% %1$s: %2$s V + Couldn't load the 3D model + View 3D model + View in your space Device sleeping Device Storage & UI (Read-Only) Theme: %1$s, Language: %2$s diff --git a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Hardware.kt b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Hardware.kt index fb9634e63d9..4cbfb686aab 100644 --- a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Hardware.kt +++ b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Hardware.kt @@ -34,11 +34,16 @@ import org.meshtastic.core.resources.ic_speaker_phone import org.meshtastic.core.resources.ic_terminal import org.meshtastic.core.resources.ic_usb import org.meshtastic.core.resources.ic_usb_off +import org.meshtastic.core.resources.ic_view_in_ar import org.meshtastic.core.resources.ic_wifi /** The maker hardware mark from meshtastic/design#160: a wrench, Material Symbols "build". */ val MeshtasticIcons.Wrench: ImageVector @Composable get() = vectorResource(Res.drawable.ic_build) + +/** Material Symbols "view_in_ar": the entry to a device's 3D model. */ +val MeshtasticIcons.ViewInAr: ImageVector + @Composable get() = vectorResource(Res.drawable.ic_view_in_ar) val MeshtasticIcons.BluetoothConnected: ImageVector @Composable get() = vectorResource(Res.drawable.ic_bluetooth_connected) val MeshtasticIcons.BluetoothSearching: ImageVector diff --git a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/util/LocalDeviceModelArViewer.kt b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/util/LocalDeviceModelArViewer.kt new file mode 100644 index 00000000000..a4b9783de61 --- /dev/null +++ b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/util/LocalDeviceModelArViewer.kt @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.core.ui.util + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.staticCompositionLocalOf + +/** Null where there is no AR runtime at all: desktop and the fdroid flavor. */ +@Suppress("CompositionLocalAllowlist") // A host-provided capability, like the barcode and NFC providers. +val LocalDeviceModelArViewer = staticCompositionLocalOf { null } + +/** Places a device's real-size GLB model in the camera view. */ +interface DeviceModelArViewer { + /** False on a phone the AR runtime has ruled out. Asked when a model opens, never at app start. */ + @Composable fun isAvailable(): Boolean + + /** [notice] is the model's own copyright line, shown with it. */ + @Composable fun Content(glb: ByteArray, title: String, notice: String?, onDismiss: () -> Unit) +} diff --git a/feature/node/build.gradle.kts b/feature/node/build.gradle.kts index 050b1b94dfa..c9f4612d3f1 100644 --- a/feature/node/build.gradle.kts +++ b/feature/node/build.gradle.kts @@ -36,10 +36,18 @@ kotlin { implementation(projects.core.ui) implementation(projects.core.di) + implementation(libs.kotlinx.serialization.json) implementation(libs.markdown.renderer) implementation(libs.markdown.renderer.m3) implementation(libs.vico.compose) implementation(libs.vico.compose.m3) + // The desktop renderer's POM drags a mac-only Compose runtime onto every OS's classpath. The + // string form is the one overload that takes an exclude; the version still comes from the catalog. + implementation("io.github.sceneview:sceneview-compose:${libs.versions.sceneview.get()}") { + exclude(group = "org.jetbrains.compose.desktop", module = "desktop-jvm-macos-arm64") + // Fuel 2.3.1 (the Android renderer's URL loader, unused here) ships the pre-Parcelize runtime. + exclude(group = "org.jetbrains.kotlin", module = "kotlin-android-extensions-runtime") + } // JetBrains Material 3 Adaptive (multiplatform ListDetailPaneScaffold) implementation(libs.jetbrains.compose.material3.adaptive) @@ -48,7 +56,13 @@ kotlin { implementation(libs.jetbrains.compose.material3.adaptive.navigation3) } - androidMain.dependencies { implementation(libs.markdown.renderer.android) } + androidMain.dependencies { + implementation(libs.markdown.renderer.android) + // The Android renderer under sceneview-compose, which only ships it at runtime scope. + implementation("io.github.sceneview:sceneview:${libs.versions.sceneview.get()}") { + exclude(group = "org.jetbrains.kotlin", module = "kotlin-android-extensions-runtime") + } + } // Compose UI tests live in jvmTest, not commonTest: this module enables android host tests, and the // androidHostTest stubs leave Build.FINGERPRINT null, which the Compose Robolectric idling strategy NPEs on. diff --git a/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt b/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt new file mode 100644 index 00000000000..e52494770a6 --- /dev/null +++ b/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.node.component + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.produceState +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import io.github.sceneview.SceneView +import io.github.sceneview.createDefaultCameraManipulator +import io.github.sceneview.environment.Environment +import io.github.sceneview.math.Position +import io.github.sceneview.model.model +import io.github.sceneview.rememberEngine +import io.github.sceneview.rememberEnvironmentLoader +import io.github.sceneview.rememberModelLoader +import org.meshtastic.core.common.util.safeCatching +import org.meshtastic.feature.node.model.GlbBounds +import java.nio.ByteBuffer + +/** + * SceneView directly rather than the multiplatform SceneViewer, whose Android HDR path swaps out and frees its + * placeholder environment while the scene still renders it, a native crash. The probe loads before the scene exists, so + * nothing is swapped. SceneView centers the model on the origin, so the orbit targets the origin. + */ +@Composable +internal actual fun DeviceModelScene(glb: ByteArray, bounds: GlbBounds, onError: () -> Unit, modifier: Modifier) { + val engine = rememberEngine() + val modelLoader = rememberModelLoader(engine) + val environmentLoader = rememberEnvironmentLoader(engine) + val currentOnError by rememberUpdatedState(onError) + val environment by + produceState(null, environmentLoader) { + value = + safeCatching { environmentLoader.loadHDREnvironment(STUDIO_LIGHT_PROBE, createSkybox = false) } + .getOrNull() + .also { if (it == null) currentOnError() } + } + // Captured, not read through the delegate: the null effect's dispose runs after the state already holds the load. + val loadedEnvironment = environment + DisposableEffect(loadedEnvironment) { onDispose { loadedEnvironment?.let(environmentLoader::destroyEnvironment) } } + val instance = + remember(modelLoader, glb) { + runCatching { modelLoader.createModelInstance(ByteBuffer.wrap(glb)) }.getOrNull() + } + DisposableEffect(instance) { onDispose { instance?.let { modelLoader.destroyModel(it.model) } } } + SideEffect { if (instance == null) currentOnError() } + if (instance == null) return + val loaded = loadedEnvironment ?: return + SceneView( + modifier = modifier, + engine = engine, + modelLoader = modelLoader, + environmentLoader = environmentLoader, + environment = loaded, + isOpaque = false, + cameraManipulator = + remember(bounds) { + createDefaultCameraManipulator(eyePosition = orbitEye(bounds), targetPosition = Position(0f)) + }, + ) { + ModelNode(modelInstance = instance) + } +} + +private fun orbitEye(bounds: GlbBounds): Position { + val eye = orbitEyeOffset(bounds) + return Position(eye[0], eye[1], eye[2]) +} diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceDetailsSection.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceDetailsSection.kt index 7f54afca207..0b385f552ab 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceDetailsSection.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceDetailsSection.kt @@ -17,6 +17,7 @@ package org.meshtastic.feature.node.component import androidx.compose.foundation.background +import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -39,6 +40,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.semantics.Role import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import coil3.compose.AsyncImage @@ -47,8 +49,10 @@ import coil3.request.ImageRequest import org.jetbrains.compose.resources.stringResource import org.meshtastic.core.model.DeviceHardware import org.meshtastic.core.model.HardwareSupportTier +import org.meshtastic.core.model.heroImageFile import org.meshtastic.core.model.supportTier import org.meshtastic.core.resources.Res +import org.meshtastic.core.resources.device_model_view import org.meshtastic.core.resources.ic_unverified import org.meshtastic.core.resources.img_hw_unknown import org.meshtastic.core.resources.supported @@ -56,6 +60,7 @@ import org.meshtastic.core.resources.supported_by_community import org.meshtastic.core.resources.supported_by_maker import org.meshtastic.core.ui.icon.MeshtasticIcons import org.meshtastic.core.ui.icon.Verified +import org.meshtastic.core.ui.icon.ViewInAr import org.meshtastic.core.ui.icon.Wrench import org.meshtastic.core.ui.theme.StatusColors.StatusGreen import org.meshtastic.core.ui.theme.StatusColors.StatusRed @@ -71,12 +76,13 @@ internal fun DeviceHeroSection( deviceHardware: DeviceHardware, reportedTarget: String?, modifier: Modifier = Modifier, + onOpenDeviceModel: (() -> Unit)? = null, ) { Row( modifier = modifier.fillMaxWidth().padding(horizontal = 20.dp, vertical = 12.dp), verticalAlignment = Alignment.CenterVertically, ) { - DeviceAvatar(bgColor, deviceHardware, size = 80) + DeviceAvatar(bgColor, deviceHardware, size = 80, onOpenDeviceModel = onOpenDeviceModel) Spacer(Modifier.width(16.dp)) @@ -94,16 +100,44 @@ internal fun DeviceHeroSection( } } +/** The illustration, and when a 3D model exists a tap target for it with a corner badge saying so. */ @Composable -private fun DeviceAvatar(bgColor: Long, deviceHardware: DeviceHardware, size: Int = 64) { - Box( - modifier = - Modifier.size(size.dp) - .clip(CircleShape) - .background(color = Color(bgColor).copy(alpha = .5f), shape = CircleShape), - contentAlignment = Alignment.Center, - ) { - DeviceHardwareImage(deviceHardware, Modifier.fillMaxSize()) +private fun DeviceAvatar( + bgColor: Long, + deviceHardware: DeviceHardware, + size: Int = 64, + onOpenDeviceModel: (() -> Unit)? = null, +) { + val label = stringResource(Res.string.device_model_view) + Box(modifier = Modifier.size(size.dp)) { + Box( + modifier = + Modifier.fillMaxSize() + .clip(CircleShape) + .background(color = Color(bgColor).copy(alpha = .5f), shape = CircleShape) + .then( + if (onOpenDeviceModel != null) { + Modifier.clickable(onClickLabel = label, role = Role.Button, onClick = onOpenDeviceModel) + } else { + Modifier + }, + ), + contentAlignment = Alignment.Center, + ) { + DeviceHardwareImage(deviceHardware, Modifier.fillMaxSize()) + } + if (onOpenDeviceModel != null) { + Icon( + imageVector = MeshtasticIcons.ViewInAr, + contentDescription = null, + tint = colorScheme.onPrimaryContainer, + modifier = + Modifier.align(Alignment.BottomEnd) + .size(24.dp) + .background(colorScheme.primaryContainer, CircleShape) + .padding(4.dp), + ) + } } } @@ -149,7 +183,7 @@ private fun SupportStatusBadge(tier: HardwareSupportTier) { @Composable internal fun DeviceHardwareImage(deviceHardware: DeviceHardware, modifier: Modifier = Modifier) { - val hwImg = deviceHardware.images?.getOrNull(1) ?: deviceHardware.images?.getOrNull(0) ?: "unknown.svg" + val hwImg = deviceHardware.heroImageFile ?: "unknown.svg" val imageUrl = "https://flasher.meshtastic.org/img/devices/$hwImg" val fallbackPainter = org.jetbrains.compose.resources.painterResource(Res.drawable.img_hw_unknown) AsyncImage( diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt new file mode 100644 index 00000000000..5273dda1aa0 --- /dev/null +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.node.component + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.safeDrawingPadding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import org.jetbrains.compose.resources.stringResource +import org.koin.compose.viewmodel.koinViewModel +import org.meshtastic.core.model.DeviceHardware +import org.meshtastic.core.model.heroImageFile +import org.meshtastic.core.resources.Res +import org.meshtastic.core.resources.close +import org.meshtastic.core.resources.device_model_load_failed +import org.meshtastic.core.resources.device_model_view_in_space +import org.meshtastic.core.ui.icon.Close +import org.meshtastic.core.ui.icon.MeshtasticIcons +import org.meshtastic.core.ui.icon.ViewInAr +import org.meshtastic.core.ui.util.LocalDeviceModelArViewer + +/** The hardware's real-size 3D model, orbitable, over the whole window; the illustration when it cannot be shown. */ +@Composable +fun DeviceModelDialog(deviceHardware: DeviceHardware, onDismiss: () -> Unit, modifier: Modifier = Modifier) { + val viewModel = koinViewModel() + val state by viewModel.state.collectAsStateWithLifecycle() + val imageFile = deviceHardware.heroImageFile + // Both calls are idempotent, so running on every composition is safe. + SideEffect { if (imageFile != null) viewModel.load(imageFile) else viewModel.markFailed() } + + val arViewer = LocalDeviceModelArViewer.current?.takeIf { it.isAvailable() } + var inAr by rememberSaveable { mutableStateOf(false) } + val ready = state as? DeviceModelState.Ready + + Dialog(onDismissRequest = onDismiss, properties = DialogProperties(usePlatformDefaultWidth = false)) { + if (inAr && arViewer != null && ready != null) { + arViewer.Content(ready.glb, deviceHardware.displayName, ready.copyright) { inAr = false } + return@Dialog + } + Surface(modifier = modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) { + Column(modifier = Modifier.fillMaxSize().safeDrawingPadding()) { + Row( + modifier = Modifier.fillMaxWidth().padding(horizontal = 4.dp, vertical = 4.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + IconButton(onClick = onDismiss) { + Icon(MeshtasticIcons.Close, contentDescription = stringResource(Res.string.close)) + } + Text( + text = deviceHardware.displayName, + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.padding(start = 8.dp).weight(1f), + ) + if (arViewer != null && ready != null) { + IconButton(onClick = { inAr = true }) { + Icon( + MeshtasticIcons.ViewInAr, + contentDescription = stringResource(Res.string.device_model_view_in_space), + ) + } + } + } + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + when (val current = state) { + DeviceModelState.Loading -> CircularProgressIndicator() + + DeviceModelState.Failed -> ModelFallback(deviceHardware) + + is DeviceModelState.Ready -> + Column(modifier = Modifier.fillMaxSize()) { + DeviceModelScene( + glb = current.glb, + bounds = current.bounds, + onError = viewModel::markFailed, + modifier = Modifier.fillMaxWidth().weight(1f), + ) + current.copyright?.let { ModelNotice(it, Modifier.padding(16.dp)) } + } + } + } + } + } + } +} + +/** The model file's own copyright notice, verbatim: it is the owner's text, so it is never translated or cut. */ +@Composable +internal fun ModelNotice(notice: String, modifier: Modifier = Modifier) { + Text( + text = notice, + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = modifier, + ) +} + +@Composable +private fun ModelFallback(deviceHardware: DeviceHardware) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + DeviceHardwareImage(deviceHardware, Modifier.size(240.dp)) + Spacer(Modifier.height(16.dp)) + Text( + text = stringResource(Res.string.device_model_load_failed), + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + ) + } +} diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelViewModel.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelViewModel.kt new file mode 100644 index 00000000000..d358549ec4c --- /dev/null +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelViewModel.kt @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.node.component + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import org.koin.core.annotation.KoinViewModel +import org.meshtastic.core.repository.DeviceModelRepository +import org.meshtastic.feature.node.model.GlbBounds + +sealed interface DeviceModelState { + data object Loading : DeviceModelState + + data object Failed : DeviceModelState + + /** [copyright] is the model's own notice, shown wherever the model is. */ + data class Ready(val imageFile: String, val glb: ByteArray, val bounds: GlbBounds, val copyright: String?) : + DeviceModelState { + override fun equals(other: Any?): Boolean = + this === other || (other is Ready && imageFile == other.imageFile && bounds == other.bounds) + + override fun hashCode(): Int = 31 * imageFile.hashCode() + bounds.hashCode() + } +} + +/** Fetches a device's GLB and the bounds the viewer frames it with; one model at a time, the last request wins. */ +@KoinViewModel +class DeviceModelViewModel(private val repository: DeviceModelRepository) : ViewModel() { + private val _state = MutableStateFlow(DeviceModelState.Loading) + val state: StateFlow = _state.asStateFlow() + + private var loading: Job? = null + private var loadedImageFile: String? = null + + fun load(imageFile: String) { + if (loadedImageFile == imageFile) return + loadedImageFile = imageFile + loading?.cancel() + _state.value = DeviceModelState.Loading + loading = viewModelScope.launch { + val glb = repository.getModel(imageFile) + val bounds = glb?.let(GlbBounds::parse) + _state.value = + if (glb != null && bounds != null) { + DeviceModelState.Ready(imageFile, glb, bounds, GlbBounds.copyright(glb)) + } else { + DeviceModelState.Failed + } + } + } + + /** The renderer rejected a model the parser accepted: show the illustration instead. */ + fun markFailed() { + _state.value = DeviceModelState.Failed + } +} diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeDetailsSection.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeDetailsSection.kt index 1edb22398a1..fc678a0a8e5 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeDetailsSection.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeDetailsSection.kt @@ -121,6 +121,8 @@ fun NodeDetailsSection( reportedTarget: String? = null, isLocal: Boolean = false, onRequestUserInfo: (() -> Unit)? = null, + hasDeviceModel: Boolean = false, + onOpenDeviceModel: ((DeviceHardware) -> Unit)? = null, ) { SectionCard(title = Res.string.details, modifier = modifier) { Column(modifier = Modifier.animateContentSize()) { @@ -133,6 +135,8 @@ fun NodeDetailsSection( bgColor = node.colors.second.toLong(), deviceHardware = deviceHardware, reportedTarget = reportedTarget, + onOpenDeviceModel = + onOpenDeviceModel?.takeIf { hasDeviceModel }?.let { open -> { open(deviceHardware) } }, ) SectionDivider() } diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.kt new file mode 100644 index 00000000000..7ef5c3372cf --- /dev/null +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.kt @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.node.component + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import dev.romainguy.kotlin.math.Float3 +import io.github.sceneview.compose.EnvironmentSource +import io.github.sceneview.compose.Lighting +import io.github.sceneview.compose.ModelSource +import io.github.sceneview.compose.SceneViewer +import io.github.sceneview.compose.rememberCameraState +import org.meshtastic.feature.node.model.GlbBounds +import kotlin.math.PI +import kotlin.math.cos +import kotlin.math.sin + +/** A CC0 studio light probe (Poly Haven, Studio Small 09), at the path both renderers resolve a bundled file by. */ +internal const val STUDIO_LIGHT_PROBE = + "composeResources/org.meshtastic.core.resources/files/environments/studio_small_09.hdr" + +private const val CAMERA_DISTANCE_PER_EXTENT = 2.2f +private const val CAMERA_AZIMUTH_DEGREES = 30f +private const val CAMERA_ELEVATION_DEGREES = 20f +private const val SUN_LUX = 40_000f +private const val DEGREES_TO_RADIANS = (PI / 180.0).toFloat() + +/** The camera's offset from the model's center: the same three-quarter view on every platform. */ +internal fun orbitEyeOffset(bounds: GlbBounds): FloatArray { + val distance = bounds.extent * CAMERA_DISTANCE_PER_EXTENT + val azimuth = CAMERA_AZIMUTH_DEGREES * DEGREES_TO_RADIANS + val elevation = CAMERA_ELEVATION_DEGREES * DEGREES_TO_RADIANS + val horizontal = distance * cos(elevation) + return floatArrayOf(horizontal * sin(azimuth), distance * sin(elevation), horizontal * cos(azimuth)) +} + +/** The orbitable model, lit by the studio probe over a transparent backdrop so the theme shows behind it. */ +@Composable +internal expect fun DeviceModelScene( + glb: ByteArray, + bounds: GlbBounds, + onError: () -> Unit, + modifier: Modifier = Modifier, +) + +/** + * The multiplatform SceneViewer, which places the model at its authored coordinates on desktop: the orbit target is the + * bounds center and the distance a multiple of the longest side. + */ +@Composable +internal fun SceneViewerModelScene( + glb: ByteArray, + bounds: GlbBounds, + onError: () -> Unit, + modifier: Modifier = Modifier, +) { + val center = bounds.center + val camera = + rememberCameraState( + target = Float3(center[0], center[1], center[2]), + distance = bounds.extent * CAMERA_DISTANCE_PER_EXTENT, + azimuth = CAMERA_AZIMUTH_DEGREES, + elevation = CAMERA_ELEVATION_DEGREES, + ) + SceneViewer( + model = ModelSource.Bytes(glb), + modifier = modifier, + camera = camera, + lighting = Lighting(intensity = SUN_LUX), + environment = EnvironmentSource.Hdr(STUDIO_LIGHT_PROBE, showSkybox = false), + onError = { onError() }, + ) +} diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailContent.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailContent.kt index 0bb67c73df8..fd0f9d897df 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailContent.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailContent.kt @@ -110,6 +110,8 @@ fun NodeDetailList( onRequestUserInfo = { onAction(NodeDetailAction.HandleNodeMenuAction(NodeMenuAction.RequestUserInfo(node))) }, + hasDeviceModel = uiState.metricsState.hasDeviceModel, + onOpenDeviceModel = { onAction(NodeDetailAction.OpenDeviceModel(it)) }, ) } if (uiState.metricsState.deviceLinks.isNotEmpty()) { diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.kt index c5ba3964370..0ace52439a2 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.kt @@ -36,6 +36,7 @@ import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import org.jetbrains.compose.resources.stringResource import org.meshtastic.core.common.util.MeasurementSystem +import org.meshtastic.core.model.DeviceHardware import org.meshtastic.core.model.FirmwareRelease import org.meshtastic.core.model.Node import org.meshtastic.core.navigation.Route @@ -47,6 +48,7 @@ import org.meshtastic.core.ui.util.ActiveWhileStarted import org.meshtastic.feature.node.compass.CompassUiState import org.meshtastic.feature.node.compass.CompassViewModel import org.meshtastic.feature.node.component.CompassSheetContent +import org.meshtastic.feature.node.component.DeviceModelDialog import org.meshtastic.feature.node.component.FirmwareReleaseSheetContent import org.meshtastic.feature.node.component.NodeMenuAction import org.meshtastic.feature.node.model.NodeDetailAction @@ -57,6 +59,8 @@ private sealed interface NodeDetailOverlay { data class FirmwareReleaseInfo(val release: FirmwareRelease) : NodeDetailOverlay data class Compass(val nodeNum: Int, val displayUnits: MeasurementSystem) : NodeDetailOverlay + + data class DeviceModel(val deviceHardware: DeviceHardware) : NodeDetailOverlay } @Composable @@ -128,6 +132,9 @@ private fun NodeDetailScaffold( is NodeDetailAction.OpenCompass -> activeOverlay = NodeDetailOverlay.Compass(action.node.num, action.displayUnits) + is NodeDetailAction.OpenDeviceModel -> + activeOverlay = NodeDetailOverlay.DeviceModel(action.deviceHardware) + else -> handleNodeAction( action = action, @@ -193,6 +200,8 @@ private fun NodeDetailOverlays( when (overlay) { is NodeDetailOverlay.SharedContact -> node?.let { ShareContactDialog(it, onDismiss, isOwnContact = isLocal) } + is NodeDetailOverlay.DeviceModel -> DeviceModelDialog(overlay.deviceHardware, onDismiss) + is NodeDetailOverlay.FirmwareReleaseInfo -> NodeDetailBottomSheet(onDismiss) { FirmwareReleaseSheetContent(firmwareRelease = overlay.release) } diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/domain/usecase/CommonGetNodeDetailsUseCase.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/domain/usecase/CommonGetNodeDetailsUseCase.kt index 31a1e526cf7..a961f5b1514 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/domain/usecase/CommonGetNodeDetailsUseCase.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/domain/usecase/CommonGetNodeDetailsUseCase.kt @@ -34,10 +34,12 @@ import org.meshtastic.core.model.FirmwareRelease import org.meshtastic.core.model.MeshLog import org.meshtastic.core.model.MyNodeInfo import org.meshtastic.core.model.Node +import org.meshtastic.core.model.heroImageFile import org.meshtastic.core.model.util.hasValidEnvironmentMetrics import org.meshtastic.core.model.util.isDirectSignal import org.meshtastic.core.repository.DeviceHardwareRepository import org.meshtastic.core.repository.DeviceLinkRepository +import org.meshtastic.core.repository.DeviceModelRepository import org.meshtastic.core.repository.FirmwareReleaseRepository import org.meshtastic.core.repository.MeshLogRepository import org.meshtastic.core.repository.NodeRepository @@ -67,6 +69,7 @@ constructor( private val radioConfigRepository: RadioConfigRepository, private val deviceHardwareRepository: DeviceHardwareRepository, private val deviceLinkRepository: DeviceLinkRepository, + private val deviceModelRepository: DeviceModelRepository, private val firmwareReleaseRepository: FirmwareReleaseRepository, private val nodeRequestActions: NodeRequestActions, private val localeUnitsProvider: LocaleUnitsProvider, @@ -123,8 +126,8 @@ constructor( IdentityGroup(ourNode, myInfo, profile) } - // 3. Device Hardware (+ msh.to links) — non-blocking Flow derived from stable (hwModel, pioEnv) key. - val hardwareAndLinksFlow: Flow>> = + // 3. Device Hardware (+ msh.to links, 3D model) — non-blocking Flow derived from stable (hwModel, pioEnv) key. + val hardwareAndLinksFlow: Flow = combine(nodeFlow, identityFlow) { node, identity -> val isLocal = node.num == identity.ourNode?.num val pioEnv = if (isLocal) identity.myInfo?.pioEnv else null @@ -138,7 +141,8 @@ constructor( hw?.platformioTarget ?.takeIf { it.isNotBlank() } ?.let { deviceLinkRepository.getLinksForTarget(it) } ?: emptyList() - hw to links + val hasModel = hw?.heroImageFile?.let { deviceModelRepository.hasModel(it) } ?: false + HardwareGroup(hw, links, hasModel) } // 4. Metadata & Request Timestamps @@ -194,9 +198,7 @@ constructor( @Suppress("UNCHECKED_CAST") val requests = args[REQUESTS_INDEX] as Pair, List> - @Suppress("UNCHECKED_CAST") - val hardwareAndLinks = args[HARDWARE_INDEX] as Pair> - val (hw, deviceLinks) = hardwareAndLinks + val (hw, deviceLinks, hasDeviceModel) = args[HARDWARE_INDEX] as HardwareGroup val (trReqs, niReqs) = requests val isLocal = node.num == identity.ourNode?.num @@ -212,6 +214,7 @@ constructor( isLocal = isLocal, deviceHardware = hw, deviceLinks = deviceLinks, + hasDeviceModel = hasDeviceModel, reportedTarget = pioEnv, isManaged = identity.profile.config?.security?.is_managed ?: false, isFahrenheit = temperatureUnit == TemperatureUnit.FAHRENHEIT, @@ -273,6 +276,8 @@ constructor( private data class HardwareKey(val hwModel: Int, val target: String?) + private data class HardwareGroup(val hardware: DeviceHardware?, val links: List, val hasModel: Boolean) + private data class LogsGroup( val telemetry: List, val packets: List, diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/GlbBounds.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/GlbBounds.kt new file mode 100644 index 00000000000..857a3925038 --- /dev/null +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/GlbBounds.kt @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.node.model + +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.float +import kotlinx.serialization.json.int +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive + +/** Axis-aligned bounds of a model in its own units (meters for the flasher's models), Y up. */ +data class GlbBounds(val min: FloatArray, val max: FloatArray) { + val center: FloatArray + get() = FloatArray(AXES) { (min[it] + max[it]) / 2f } + + val extent: Float + get() = (0 until AXES).maxOf { max[it] - min[it] } + + override fun equals(other: Any?): Boolean = + this === other || (other is GlbBounds && min.contentEquals(other.min) && max.contentEquals(other.max)) + + override fun hashCode(): Int = 31 * min.contentHashCode() + max.contentHashCode() + + companion object { + private const val AXES = 3 + private const val HEADER_BYTES = 12 + private const val CHUNK_TYPE_OFFSET = 4 + private const val CHUNK_HEADER_BYTES = 8 + private const val GLB_MAGIC = 0x46546C67 // "glTF" + private const val JSON_CHUNK = 0x4E4F534A // "JSON" + private const val INT_BYTES = 4 + private const val BYTE_BITS = 8 + private const val BYTE_MASK = 0xFF + private val json = Json { ignoreUnknownKeys = true } + + /** + * The union of every mesh primitive's `POSITION` accessor bounds, which glTF requires each accessor to carry. + * Node transforms are ignored: the flasher's models bake theirs into the vertices. Null for anything that is + * not a GLB with at least one positioned primitive. + */ + fun parse(glb: ByteArray): GlbBounds? = jsonChunk(glb)?.let { chunk -> + runCatching { boundsOf(json.parseToJsonElement(chunk).jsonObject) }.getOrNull() + } + + /** The notice the model carries in glTF's `asset.copyright`, or null when it has none. */ + fun copyright(glb: ByteArray): String? = jsonChunk(glb)?.let { chunk -> + runCatching { + json + .parseToJsonElement(chunk) + .jsonObject["asset"] + ?.jsonObject + ?.get("copyright") + ?.jsonPrimitive + ?.content + } + .getOrNull() + ?.takeIf { it.isNotBlank() } + } + + private fun jsonChunk(glb: ByteArray): String? { + val start = HEADER_BYTES + CHUNK_HEADER_BYTES + if (glb.size < start) return null + val length = glb.readIntLe(HEADER_BYTES) + val valid = + glb.readIntLe(0) == GLB_MAGIC && + glb.readIntLe(HEADER_BYTES + CHUNK_TYPE_OFFSET) == JSON_CHUNK && + length >= 0 && + start + length <= glb.size + return if (valid) glb.decodeToString(start, start + length) else null + } + + private fun boundsOf(root: JsonObject): GlbBounds? { + val accessors = root["accessors"]?.jsonArray.orEmpty() + val positions = + root["meshes"]?.jsonArray.orEmpty().flatMap { mesh -> + mesh.jsonObject["primitives"]?.jsonArray.orEmpty().mapNotNull { primitive -> + primitive.jsonObject["attributes"] + ?.jsonObject + ?.get("POSITION") + ?.jsonPrimitive + ?.int + ?.let { accessors[it].jsonObject } + ?.takeIf { "min" in it && "max" in it } + } + } + if (positions.isEmpty()) return null + fun axis(key: String, axis: Int) = positions.map { it.getValue(key).jsonArray[axis].jsonPrimitive.float } + return GlbBounds( + min = FloatArray(AXES) { axis("min", it).min() }, + max = FloatArray(AXES) { axis("max", it).max() }, + ) + } + + private fun ByteArray.readIntLe(offset: Int): Int = (0 until INT_BYTES).fold(0) { acc, i -> + acc or ((this[offset + i].toInt() and BYTE_MASK) shl (BYTE_BITS * i)) + } + } +} diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/MetricsState.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/MetricsState.kt index 931ca6526ec..dcd62eed046 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/MetricsState.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/MetricsState.kt @@ -51,6 +51,8 @@ data class MetricsState( val deviceHardware: DeviceHardware? = null, /** msh.to vendor/marketplace links for this device's hardware, region-filtered and sorted (vendor first). */ val deviceLinks: List = emptyList(), + /** Whether the flasher serves a 3D model for [deviceHardware]'s hero illustration. */ + val hasDeviceModel: Boolean = false, val firmwareEdition: FirmwareEdition? = null, val latestStableFirmware: FirmwareRelease = FirmwareRelease(), val latestAlphaFirmware: FirmwareRelease = FirmwareRelease(), diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/NodeDetailAction.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/NodeDetailAction.kt index 523ecc9d8b1..ffd6f56366e 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/NodeDetailAction.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/NodeDetailAction.kt @@ -17,6 +17,7 @@ package org.meshtastic.feature.node.model import org.meshtastic.core.common.util.MeasurementSystem +import org.meshtastic.core.model.DeviceHardware import org.meshtastic.core.model.Node import org.meshtastic.core.navigation.Route import org.meshtastic.feature.node.component.NodeMenuAction @@ -36,6 +37,9 @@ sealed interface NodeDetailAction { data object ShareContact : NodeDetailAction + /** Open the real-size 3D model of the node's hardware. */ + data class OpenDeviceModel(val deviceHardware: DeviceHardware) : NodeDetailAction + // Opens the compass sheet scoped to a target node and the user’s preferred units. data class OpenCompass(val node: Node, val displayUnits: MeasurementSystem) : NodeDetailAction } diff --git a/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/model/GlbBoundsTest.kt b/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/model/GlbBoundsTest.kt new file mode 100644 index 00000000000..1369239600f --- /dev/null +++ b/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/model/GlbBoundsTest.kt @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.node.model + +import kotlin.test.Test +import kotlin.test.assertContentEquals +import kotlin.test.assertEquals +import kotlin.test.assertNotNull +import kotlin.test.assertNull + +class GlbBoundsTest { + + @Test + fun unionsEveryPrimitivesPositionAccessor() { + val glb = + glb( + """ + {"accessors":[ + {"min":[-0.0275,0,-0.00325],"max":[0.0275,0.0858,0.00325]}, + {"min":[0.01,0.08,-0.009],"max":[0.026,0.0935,0.009]}, + {"min":[-9,-9,-9],"max":[9,9,9]} + ], + "meshes":[ + {"primitives":[{"attributes":{"POSITION":0,"NORMAL":2}}]}, + {"primitives":[{"attributes":{"POSITION":1}}]} + ]} + """, + ) + + val bounds = assertNotNull(GlbBounds.parse(glb)) + + assertContentEquals(floatArrayOf(-0.0275f, 0f, -0.009f), bounds.min) + assertContentEquals(floatArrayOf(0.0275f, 0.0935f, 0.009f), bounds.max) + assertEquals(0.0935f, bounds.extent) + assertContentEquals(floatArrayOf(0f, 0.04675f, 0f), bounds.center) + } + + @Test + fun readsTheModelsOwnCopyrightNotice() { + val glb = glb("""{"asset":{"version":"2.0","copyright":"Copyright © 2026 Meshtastic LLC."}}""") + + assertEquals("Copyright © 2026 Meshtastic LLC.", GlbBounds.copyright(glb)) + } + + @Test + fun noCopyrightWhenTheModelCarriesNone() { + assertNull(GlbBounds.copyright(glb("""{"asset":{"version":"2.0"}}"""))) + assertNull(GlbBounds.copyright("not a model".encodeToByteArray())) + } + + @Test + fun rejectsNonGlbBytes() { + assertNull(GlbBounds.parse("not a model".encodeToByteArray())) + assertNull(GlbBounds.parse(ByteArray(4))) + } + + @Test + fun rejectsModelWithoutPositions() { + assertNull(GlbBounds.parse(glb("""{"accessors":[],"meshes":[{"primitives":[{"attributes":{}}]}]}"""))) + } + + private fun glb(json: String): ByteArray { + val body = json.trimIndent().encodeToByteArray() + val header = ByteArray(20) + header.putIntLe(0, 0x46546C67) + header.putIntLe(4, 2) + header.putIntLe(8, header.size + body.size) + header.putIntLe(12, body.size) + header.putIntLe(16, 0x4E4F534A) + return header + body + } + + private fun ByteArray.putIntLe(offset: Int, value: Int) { + for (i in 0 until 4) this[offset + i] = (value shr (8 * i)).toByte() + } +} diff --git a/feature/node/src/iosMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.ios.kt b/feature/node/src/iosMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.ios.kt new file mode 100644 index 00000000000..449514a05d9 --- /dev/null +++ b/feature/node/src/iosMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.ios.kt @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.node.component + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import org.meshtastic.feature.node.model.GlbBounds + +@Composable +internal actual fun DeviceModelScene(glb: ByteArray, bounds: GlbBounds, onError: () -> Unit, modifier: Modifier) = + SceneViewerModelScene(glb, bounds, onError, modifier) diff --git a/feature/node/src/jvmMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.jvm.kt b/feature/node/src/jvmMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.jvm.kt new file mode 100644 index 00000000000..449514a05d9 --- /dev/null +++ b/feature/node/src/jvmMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.jvm.kt @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.node.component + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import org.meshtastic.feature.node.model.GlbBounds + +@Composable +internal actual fun DeviceModelScene(glb: ByteArray, bounds: GlbBounds, onError: () -> Unit, modifier: Modifier) = + SceneViewerModelScene(glb, bounds, onError, modifier) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0d69db90b53..0a12f232741 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -101,6 +101,7 @@ markdownRenderer = "0.46.0" okio = "3.18.2" uri-kmp = "0.0.21" spotless = "8.10.4" +sceneview = "4.56.0" vico = "3.3.1" kable = "0.45.0" mqttastic = "0.9.0" From 8981110a95f77c472d03222849f93f086fcae1d0 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 11:19:04 -0500 Subject: [PATCH 22/34] feat(node): fold the model notice behind an info button, as the maps do --- .../app/node/DeviceModelArViewer.kt | 21 ++++---- .../node/component/DeviceModelDialog.kt | 51 +++++++++++++++---- 2 files changed, 51 insertions(+), 21 deletions(-) diff --git a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt index 55092bb4afb..d62401204b1 100644 --- a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt +++ b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt @@ -80,6 +80,7 @@ import org.meshtastic.core.resources.close import org.meshtastic.core.ui.icon.Close import org.meshtastic.core.ui.icon.MeshtasticIcons import org.meshtastic.core.ui.util.DeviceModelArViewer +import org.meshtastic.feature.node.component.ModelNotice import java.nio.ByteBuffer private const val SCRIM_ALPHA = 0.4f @@ -129,7 +130,15 @@ private fun DeviceModelAr(glb: ByteArray, title: String, notice: String?, onDism } Box(modifier = Modifier.fillMaxSize()) { if (cameraGranted) DeviceModelArScene(glb) - ArHeader(title, notice, onDismiss) + ArHeader(title, onDismiss) + notice?.let { + ModelNotice( + notice = it, + modifier = Modifier.align(Alignment.BottomEnd).safeDrawingPadding().padding(16.dp), + contentColor = Color.White, + containerColor = Color.Black.copy(alpha = SCRIM_ALPHA), + ) + } } } @@ -240,7 +249,7 @@ private fun DeviceModelArScene(glb: ByteArray) { } @Composable -private fun ArHeader(title: String, notice: String?, onDismiss: () -> Unit) { +private fun ArHeader(title: String, onDismiss: () -> Unit) { Column( modifier = Modifier.fillMaxWidth().background(Color.Black.copy(alpha = SCRIM_ALPHA)).safeDrawingPadding().padding(4.dp), @@ -256,13 +265,5 @@ private fun ArHeader(title: String, notice: String?, onDismiss: () -> Unit) { modifier = Modifier.padding(start = 8.dp), ) } - notice?.let { - Text( - text = it, - style = MaterialTheme.typography.labelSmall, - color = Color.White.copy(alpha = 0.8f), - modifier = Modifier.padding(horizontal = 12.dp, vertical = 4.dp), - ) - } } } diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt index 5273dda1aa0..7bfb92a1749 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt @@ -16,6 +16,8 @@ */ package org.meshtastic.feature.node.component +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -26,6 +28,7 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawingPadding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -40,6 +43,8 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties @@ -52,7 +57,9 @@ import org.meshtastic.core.resources.Res import org.meshtastic.core.resources.close import org.meshtastic.core.resources.device_model_load_failed import org.meshtastic.core.resources.device_model_view_in_space +import org.meshtastic.core.resources.info import org.meshtastic.core.ui.icon.Close +import org.meshtastic.core.ui.icon.Info import org.meshtastic.core.ui.icon.MeshtasticIcons import org.meshtastic.core.ui.icon.ViewInAr import org.meshtastic.core.ui.util.LocalDeviceModelArViewer @@ -105,14 +112,16 @@ fun DeviceModelDialog(deviceHardware: DeviceHardware, onDismiss: () -> Unit, mod DeviceModelState.Failed -> ModelFallback(deviceHardware) is DeviceModelState.Ready -> - Column(modifier = Modifier.fillMaxSize()) { + Box(modifier = Modifier.fillMaxSize()) { DeviceModelScene( glb = current.glb, bounds = current.bounds, onError = viewModel::markFailed, - modifier = Modifier.fillMaxWidth().weight(1f), + modifier = Modifier.fillMaxSize(), ) - current.copyright?.let { ModelNotice(it, Modifier.padding(16.dp)) } + current.copyright?.let { + ModelNotice(it, Modifier.align(Alignment.BottomEnd).padding(16.dp)) + } } } } @@ -121,15 +130,35 @@ fun DeviceModelDialog(deviceHardware: DeviceHardware, onDismiss: () -> Unit, mod } } -/** The model file's own copyright notice, verbatim: it is the owner's text, so it is never translated or cut. */ +/** + * The model file's own copyright notice behind an info button, shut until tapped, as the maps carry their credit. The + * text is the owner's, so it is never translated or cut. + */ @Composable -internal fun ModelNotice(notice: String, modifier: Modifier = Modifier) { - Text( - text = notice, - style = MaterialTheme.typography.labelSmall, - color = MaterialTheme.colorScheme.onSurfaceVariant, - modifier = modifier, - ) +fun ModelNotice( + notice: String, + modifier: Modifier = Modifier, + contentColor: Color = MaterialTheme.colorScheme.onSurfaceVariant, + containerColor: Color = MaterialTheme.colorScheme.surfaceContainerHigh, +) { + var expanded by rememberSaveable { mutableStateOf(false) } + // The toggle is last, so the notice opens inboard of it from the trailing corner, in RTL too. + Row( + modifier = modifier.clip(RoundedCornerShape(24.dp)).background(containerColor), + verticalAlignment = Alignment.CenterVertically, + ) { + AnimatedVisibility(visible = expanded, modifier = Modifier.weight(1f, fill = false)) { + Text( + text = notice, + style = MaterialTheme.typography.labelSmall, + color = contentColor, + modifier = Modifier.padding(start = 16.dp, top = 8.dp, bottom = 8.dp), + ) + } + IconButton(onClick = { expanded = !expanded }) { + Icon(MeshtasticIcons.Info, contentDescription = stringResource(Res.string.info), tint = contentColor) + } + } } @Composable From 1aa0c0a6d389a39df84f6a64903471953b5bc490 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 11:20:41 -0500 Subject: [PATCH 23/34] test(node): pass the model repository to the traceroute history use case --- .../feature/node/domain/usecase/TracerouteHistoryUseCaseTest.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/domain/usecase/TracerouteHistoryUseCaseTest.kt b/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/domain/usecase/TracerouteHistoryUseCaseTest.kt index 07d61bd907b..aad87c0599d 100644 --- a/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/domain/usecase/TracerouteHistoryUseCaseTest.kt +++ b/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/domain/usecase/TracerouteHistoryUseCaseTest.kt @@ -76,6 +76,7 @@ class TracerouteHistoryUseCaseTest { radioConfigRepository = FakeRadioConfigRepository(), deviceHardwareRepository = FakeDeviceHardwareRepository(), deviceLinkRepository = mock(MockMode.autofill), + deviceModelRepository = mock(MockMode.autofill), firmwareReleaseRepository = FakeFirmwareReleaseRepository(), nodeRequestActions = nodeRequestActions, localeUnitsProvider = FakeLocaleUnitsProvider(), From a942b9cdbbc154446d5a69ae6772f0d764fa4917 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 11:31:11 -0500 Subject: [PATCH 24/34] feat(node): turn the AR model with a one-finger drag anywhere --- .../app/node/DeviceModelArViewer.kt | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt index d62401204b1..66ae681de41 100644 --- a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt +++ b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt @@ -38,6 +38,7 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.key +import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable @@ -69,6 +70,7 @@ import io.github.sceneview.ar.placementHit import io.github.sceneview.ar.rememberArGuidanceState import io.github.sceneview.ar.reticlePhaseFor import io.github.sceneview.ar.scene.SceneUnderstanding +import io.github.sceneview.math.Rotation import io.github.sceneview.model.model import io.github.sceneview.rememberEngine import io.github.sceneview.rememberMaterialLoader @@ -84,6 +86,7 @@ import org.meshtastic.feature.node.component.ModelNotice import java.nio.ByteBuffer private const val SCRIM_ALPHA = 0.4f +private const val YAW_DEGREES_PER_PX = 0.4f val deviceModelArViewer: DeviceModelArViewer? = GoogleDeviceModelArViewer @@ -154,6 +157,7 @@ private fun DeviceModelArScene(glb: ByteArray) { val materialLoader = rememberMaterialLoader(engine) val haptic = LocalHapticFeedback.current var anchor by remember { mutableStateOf(null) } + var yawDegrees by remember { mutableFloatStateOf(0f) } var latestFrame by remember { mutableStateOf(null) } var session by remember { mutableStateOf(null) } var viewport by remember { mutableStateOf(IntSize.Zero) } @@ -202,6 +206,9 @@ private fun DeviceModelArScene(glb: ByteArray) { } } }, + // A one-finger drag anywhere turns it: a twist on the node itself needs both fingers on a few + // centimeters of device. GestureDetector's distance is previous minus current, so negate it. + onScroll = { _, _, _, distance -> yawDegrees -= distance.x * YAW_DEGREES_PER_PX }, ), ) { if (!placed && isTracking && viewport != IntSize.Zero) { @@ -223,16 +230,8 @@ private fun DeviceModelArScene(glb: ByteArray) { val instance = remember(modelLoader) { modelLoader.createModelInstance(ByteBuffer.wrap(glb)) } DisposableEffect(instance) { onDispose { modelLoader.destroyModel(instance.model) } } AnchorNode(anchor = placedAnchor) { - ModelNode( - modelInstance = instance, - isEditable = true, - apply = { - // Turn only: moving is a new tap, and scaling would break real size. - isPositionEditable = false - isScaleEditable = false - isRotationEditable = true - }, - ) + // Moving is a new tap and scaling would break real size, so the drag's yaw is the only edit. + ModelNode(modelInstance = instance, rotation = Rotation(y = yawDegrees)) } } } From f14402638a12a5353428e158cb61f19b8a6dc3f4 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 11:53:20 -0500 Subject: [PATCH 25/34] feat(node): choose which face of the AR model rests on the surface --- .skills/compose-ui/strings-index.txt | 5 ++ .../app/node/DeviceModelArViewer.kt | 76 ++++++++++++++++++- .../composeResources/values/strings.xml | 5 ++ .../meshtastic/feature/node/model/RestPose.kt | 63 +++++++++++++++ .../feature/node/model/RestPoseTest.kt | 71 +++++++++++++++++ 5 files changed, 218 insertions(+), 2 deletions(-) create mode 100644 feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/RestPose.kt create mode 100644 feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/model/RestPoseTest.kt diff --git a/.skills/compose-ui/strings-index.txt b/.skills/compose-ui/strings-index.txt index c747f1ede91..caa013a79d6 100644 --- a/.skills/compose-ui/strings-index.txt +++ b/.skills/compose-ui/strings-index.txt @@ -392,6 +392,11 @@ device_metrics_numeric_value device_metrics_percent_value device_metrics_voltage_value device_model_load_failed +device_model_rest_face_down +device_model_rest_face_up +device_model_rest_left_side +device_model_rest_right_side +device_model_rest_upright device_model_view device_model_view_in_space device_sleeping diff --git a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt index 66ae681de41..0e4f50835ea 100644 --- a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt +++ b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt @@ -22,6 +22,8 @@ import androidx.activity.compose.BackHandler import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.background +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -29,6 +31,10 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawingPadding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.FilterChip +import androidx.compose.material3.FilterChipDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme @@ -45,6 +51,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.layout.onSizeChanged @@ -70,19 +77,28 @@ import io.github.sceneview.ar.placementHit import io.github.sceneview.ar.rememberArGuidanceState import io.github.sceneview.ar.reticlePhaseFor import io.github.sceneview.ar.scene.SceneUnderstanding +import io.github.sceneview.math.Position import io.github.sceneview.math.Rotation import io.github.sceneview.model.model import io.github.sceneview.rememberEngine import io.github.sceneview.rememberMaterialLoader import io.github.sceneview.rememberModelLoader import io.github.sceneview.rememberOnGestureListener +import org.jetbrains.compose.resources.StringResource import org.jetbrains.compose.resources.stringResource import org.meshtastic.core.resources.Res import org.meshtastic.core.resources.close +import org.meshtastic.core.resources.device_model_rest_face_down +import org.meshtastic.core.resources.device_model_rest_face_up +import org.meshtastic.core.resources.device_model_rest_left_side +import org.meshtastic.core.resources.device_model_rest_right_side +import org.meshtastic.core.resources.device_model_rest_upright import org.meshtastic.core.ui.icon.Close import org.meshtastic.core.ui.icon.MeshtasticIcons import org.meshtastic.core.ui.util.DeviceModelArViewer import org.meshtastic.feature.node.component.ModelNotice +import org.meshtastic.feature.node.model.GlbBounds +import org.meshtastic.feature.node.model.RestPose import java.nio.ByteBuffer private const val SCRIM_ALPHA = 0.4f @@ -158,6 +174,8 @@ private fun DeviceModelArScene(glb: ByteArray) { val haptic = LocalHapticFeedback.current var anchor by remember { mutableStateOf(null) } var yawDegrees by remember { mutableFloatStateOf(0f) } + var pose by rememberSaveable { mutableStateOf(RestPose.Upright) } + val bounds = remember(glb) { GlbBounds.parse(glb) } var latestFrame by remember { mutableStateOf(null) } var session by remember { mutableStateOf(null) } var viewport by remember { mutableStateOf(IntSize.Zero) } @@ -230,8 +248,16 @@ private fun DeviceModelArScene(glb: ByteArray) { val instance = remember(modelLoader) { modelLoader.createModelInstance(ByteBuffer.wrap(glb)) } DisposableEffect(instance) { onDispose { modelLoader.destroyModel(instance.model) } } AnchorNode(anchor = placedAnchor) { - // Moving is a new tap and scaling would break real size, so the drag's yaw is the only edit. - ModelNode(modelInstance = instance, rotation = Rotation(y = yawDegrees)) + // Moving is a new tap and scaling would break real size, so the drag's yaw and the rest pose + // are the only edits. The yaw wraps the pose so it always turns about the surface's up. + val offset = bounds?.let(pose::offset) ?: floatArrayOf(0f, 0f, 0f) + Node(rotation = Rotation(y = yawDegrees)) { + ModelNode( + modelInstance = instance, + position = Position(offset[0], offset[1], offset[2]), + rotation = Rotation(x = pose.pitchDegrees, z = pose.rollDegrees), + ) + } } } } @@ -244,9 +270,55 @@ private fun DeviceModelArScene(glb: ByteArray) { trackingFailureReason = trackingFailure, ) ARCoachingOverlay(guidance) + if (placed && bounds != null) { + RestPoseChips( + selected = pose, + onSelect = { pose = it }, + modifier = Modifier.align(Alignment.BottomCenter).safeDrawingPadding().padding(bottom = 72.dp), + ) + } + } +} + +/** Which face of the device lies on the surface. */ +@Composable +private fun RestPoseChips(selected: RestPose, onSelect: (RestPose) -> Unit, modifier: Modifier = Modifier) { + val colors = + FilterChipDefaults.filterChipColors( + labelColor = Color.White, + selectedContainerColor = Color.White.copy(alpha = SCRIM_ALPHA), + selectedLabelColor = Color.White, + ) + Row( + modifier = + modifier + .clip(RoundedCornerShape(24.dp)) + .background(Color.Black.copy(alpha = SCRIM_ALPHA)) + .horizontalScroll(rememberScrollState()) + .padding(horizontal = 8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + RestPose.entries.forEach { pose -> + FilterChip( + selected = pose == selected, + onClick = { onSelect(pose) }, + label = { Text(stringResource(pose.label)) }, + colors = colors, + ) + } } } +private val RestPose.label: StringResource + get() = + when (this) { + RestPose.Upright -> Res.string.device_model_rest_upright + RestPose.FaceUp -> Res.string.device_model_rest_face_up + RestPose.FaceDown -> Res.string.device_model_rest_face_down + RestPose.LeftSide -> Res.string.device_model_rest_left_side + RestPose.RightSide -> Res.string.device_model_rest_right_side + } + @Composable private fun ArHeader(title: String, onDismiss: () -> Unit) { Column( diff --git a/core/resources/src/commonMain/composeResources/values/strings.xml b/core/resources/src/commonMain/composeResources/values/strings.xml index 4f9d2b16ec2..b56bf3b88b4 100644 --- a/core/resources/src/commonMain/composeResources/values/strings.xml +++ b/core/resources/src/commonMain/composeResources/values/strings.xml @@ -425,6 +425,11 @@ %1$s: %2$s%% %1$s: %2$s V Couldn't load the 3D model + Face down + Face up + Left side + Right side + Upright View 3D model View in your space Device sleeping diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/RestPose.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/RestPose.kt new file mode 100644 index 00000000000..546d370d37d --- /dev/null +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/RestPose.kt @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.node.model + +import kotlin.math.PI +import kotlin.math.cos +import kotlin.math.sin + +/** + * Which face of a model rests on the surface it is placed on. The flasher's models are authored Y up with the front + * facing +Z, so a pitch about X lays the device on its back or front and a roll about Z on a side. + */ +enum class RestPose(val pitchDegrees: Float, val rollDegrees: Float) { + Upright(0f, 0f), + FaceUp(-QUARTER_TURN, 0f), + FaceDown(QUARTER_TURN, 0f), + LeftSide(0f, QUARTER_TURN), + RightSide(0f, -QUARTER_TURN), + ; + + /** The model's bounds once rotated into this pose, before any offset. */ + fun rotatedBounds(bounds: GlbBounds): GlbBounds { + val ends = listOf(bounds.min, bounds.max) + val corners = ends.flatMap { x -> ends.flatMap { y -> ends.map { z -> rotate(x[0], y[1], z[2]) } } } + return GlbBounds( + min = FloatArray(AXES) { axis -> corners.minOf { it[axis] } }, + max = FloatArray(AXES) { axis -> corners.maxOf { it[axis] } }, + ) + } + + /** Where to put the rotated model so its lowest face touches y = 0 and its footprint centers on the origin. */ + fun offset(bounds: GlbBounds): FloatArray { + val rotated = rotatedBounds(bounds) + return floatArrayOf(-rotated.center[0], -rotated.min[1], -rotated.center[2]) + } + + private fun rotate(x: Float, y: Float, z: Float): FloatArray { + val pitch = pitchDegrees * DEGREES_TO_RADIANS + val roll = rollDegrees * DEGREES_TO_RADIANS + // Pitch about X, then roll about Z; a pose uses one or the other. + val y1 = y * cos(pitch) - z * sin(pitch) + val z1 = y * sin(pitch) + z * cos(pitch) + return floatArrayOf(x * cos(roll) - y1 * sin(roll), x * sin(roll) + y1 * cos(roll), z1) + } +} + +private const val QUARTER_TURN = 90f +private const val AXES = 3 +private const val DEGREES_TO_RADIANS = (PI / 180.0).toFloat() diff --git a/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/model/RestPoseTest.kt b/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/model/RestPoseTest.kt new file mode 100644 index 00000000000..fd7f42f61d5 --- /dev/null +++ b/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/model/RestPoseTest.kt @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.feature.node.model + +import kotlin.math.abs +import kotlin.test.Test +import kotlin.test.assertTrue + +class RestPoseTest { + // The WisMesh Pocket: 52 mm wide, 138 mm tall with its antenna, 32 mm deep, front facing +Z. + private val pocket = GlbBounds(floatArrayOf(-0.026f, 0f, -0.015f), floatArrayOf(0.026f, 0.1382f, 0.017f)) + + @Test + fun everyPoseRestsOnTheSurfaceCenteredOnTheAnchor() { + RestPose.entries.forEach { pose -> + val placed = placed(pose) + assertNear(0f, placed.min[1], "$pose bottom") + assertNear(0f, placed.center[0], "$pose x center") + assertNear(0f, placed.center[2], "$pose z center") + } + } + + @Test fun uprightStandsAtFullHeight() = assertNear(0.1382f, placed(RestPose.Upright).max[1], "height") + + @Test + fun faceUpAndFaceDownLieAsDeepAsTheCase() { + assertNear(0.032f, placed(RestPose.FaceUp).max[1], "face up height") + assertNear(0.032f, placed(RestPose.FaceDown).max[1], "face down height") + } + + @Test + fun aSideRestsAsWideAsTheCase() { + assertNear(0.052f, placed(RestPose.LeftSide).max[1], "left height") + assertNear(0.052f, placed(RestPose.RightSide).max[1], "right height") + } + + @Test + fun faceUpTurnsTheScreenToTheSkyAndFaceDownToTheSurface() { + val screen = GlbBounds(floatArrayOf(-0.015f, 0.032f, 0.0158f), floatArrayOf(0.015f, 0.047f, 0.016f)) + val up = RestPose.FaceUp + val down = RestPose.FaceDown + assertTrue(up.rotatedBounds(screen).center[1] > up.rotatedBounds(pocket).center[1], "face up") + assertTrue(down.rotatedBounds(screen).center[1] < down.rotatedBounds(pocket).center[1], "face down") + } + + private fun placed(pose: RestPose): GlbBounds { + val rotated = pose.rotatedBounds(pocket) + val offset = pose.offset(pocket) + return GlbBounds( + FloatArray(3) { rotated.min[it] + offset[it] }, + FloatArray(3) { rotated.max[it] + offset[it] }, + ) + } + + private fun assertNear(expected: Float, actual: Float, what: String) = + assertTrue(abs(expected - actual) < 1e-5f, "$what: expected $expected, was $actual") +} From d501b9d5f0374efb43e3e660bdc1bab5e176c948 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 12:47:48 -0500 Subject: [PATCH 26/34] feat(node): save a picture of the AR view --- .skills/compose-ui/strings-index.txt | 3 + .../org/meshtastic/app/node/ArCapture.kt | 95 +++++++++++++++++++ .../app/node/DeviceModelArViewer.kt | 42 +++++++- .../drawable/ic_photo_camera.xml | 12 +++ .../composeResources/values/strings.xml | 3 + .../org/meshtastic/core/ui/icon/Hardware.kt | 5 + 6 files changed, 157 insertions(+), 3 deletions(-) create mode 100644 androidApp/src/google/kotlin/org/meshtastic/app/node/ArCapture.kt create mode 100644 core/resources/src/commonMain/composeResources/drawable/ic_photo_camera.xml diff --git a/.skills/compose-ui/strings-index.txt b/.skills/compose-ui/strings-index.txt index caa013a79d6..fac00c874fe 100644 --- a/.skills/compose-ui/strings-index.txt +++ b/.skills/compose-ui/strings-index.txt @@ -391,6 +391,9 @@ device_metrics_log device_metrics_numeric_value device_metrics_percent_value device_metrics_voltage_value +device_model_capture +device_model_capture_failed +device_model_capture_saved device_model_load_failed device_model_rest_face_down device_model_rest_face_up diff --git a/androidApp/src/google/kotlin/org/meshtastic/app/node/ArCapture.kt b/androidApp/src/google/kotlin/org/meshtastic/app/node/ArCapture.kt new file mode 100644 index 00000000000..2f3daec7f65 --- /dev/null +++ b/androidApp/src/google/kotlin/org/meshtastic/app/node/ArCapture.kt @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2026 Meshtastic LLC + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.meshtastic.app.node + +import android.content.ContentValues +import android.content.Context +import android.graphics.Bitmap +import android.net.Uri +import android.os.Build +import android.os.Handler +import android.os.Looper +import android.provider.MediaStore +import android.view.PixelCopy +import android.view.SurfaceView +import android.view.View +import android.view.ViewGroup +import androidx.annotation.RequiresApi +import androidx.core.view.children +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.coroutines.withContext +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale +import kotlin.coroutines.resume + +private const val PICTURES_RELATIVE_PATH = "Pictures/Meshtastic" +private const val JPEG_QUALITY = 92 + +/** + * Copies the AR view's GL surface into Pictures/Meshtastic: the camera feed and the model, none of the Compose controls + * drawn over it. The scene renders every camera frame, so the surface is never stale. Null when nothing was saved. + */ +@RequiresApi(Build.VERSION_CODES.Q) +internal suspend fun captureArScene(root: View, title: String): Uri? { + val surface = root.findSurfaceView()?.takeIf { it.width > 0 && it.height > 0 } ?: return null + val bitmap = Bitmap.createBitmap(surface.width, surface.height, Bitmap.Config.ARGB_8888) + val copied = suspendCancellableCoroutine { continuation -> + PixelCopy.request( + surface, + bitmap, + { result -> continuation.resume(result == PixelCopy.SUCCESS) }, + Handler(Looper.getMainLooper()), + ) + } + return if (copied) withContext(Dispatchers.IO) { saveToPictures(root.context, bitmap, title) } else null +} + +private fun View.findSurfaceView(): SurfaceView? = when (this) { + is SurfaceView -> this + is ViewGroup -> children.firstNotNullOfOrNull { it.findSurfaceView() } + else -> null +} + +@RequiresApi(Build.VERSION_CODES.Q) +private fun saveToPictures(context: Context, bitmap: Bitmap, title: String): Uri? { + val resolver = context.contentResolver + val stamp = SimpleDateFormat("yyyyMMdd-HHmmss", Locale.US).format(Date()) + val name = "${title.replace(Regex("[^A-Za-z0-9]+"), "-").trim('-')}-$stamp.jpg" + val pending = + ContentValues().apply { + put(MediaStore.Images.Media.DISPLAY_NAME, name) + put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg") + put(MediaStore.Images.Media.RELATIVE_PATH, PICTURES_RELATIVE_PATH) + put(MediaStore.Images.Media.IS_PENDING, 1) + } + val uri = resolver.insert(MediaStore.Images.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY), pending) + val written = + uri != null && + runCatching { + resolver.openOutputStream(uri)?.use { bitmap.compress(Bitmap.CompressFormat.JPEG, JPEG_QUALITY, it) } + } + .getOrNull() == true + // A row left pending would sit hidden in the gallery, so a failed write removes it. + if (written) { + resolver.update(uri, ContentValues().apply { put(MediaStore.Images.Media.IS_PENDING, 0) }, null, null) + } else if (uri != null) { + resolver.delete(uri, null, null) + } + return uri.takeIf { written } +} diff --git a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt index 0e4f50835ea..eaf67c6e1ad 100644 --- a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt +++ b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt @@ -18,6 +18,8 @@ package org.meshtastic.app.node import android.Manifest import android.content.pm.PackageManager +import android.os.Build +import android.widget.Toast import androidx.activity.compose.BackHandler import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts @@ -47,6 +49,7 @@ import androidx.compose.runtime.key import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment @@ -57,6 +60,7 @@ import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalHapticFeedback +import androidx.compose.ui.platform.LocalView import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.dp import androidx.core.content.ContextCompat @@ -84,10 +88,14 @@ import io.github.sceneview.rememberEngine import io.github.sceneview.rememberMaterialLoader import io.github.sceneview.rememberModelLoader import io.github.sceneview.rememberOnGestureListener +import kotlinx.coroutines.launch import org.jetbrains.compose.resources.StringResource import org.jetbrains.compose.resources.stringResource import org.meshtastic.core.resources.Res import org.meshtastic.core.resources.close +import org.meshtastic.core.resources.device_model_capture +import org.meshtastic.core.resources.device_model_capture_failed +import org.meshtastic.core.resources.device_model_capture_saved import org.meshtastic.core.resources.device_model_rest_face_down import org.meshtastic.core.resources.device_model_rest_face_up import org.meshtastic.core.resources.device_model_rest_left_side @@ -95,6 +103,7 @@ import org.meshtastic.core.resources.device_model_rest_right_side import org.meshtastic.core.resources.device_model_rest_upright import org.meshtastic.core.ui.icon.Close import org.meshtastic.core.ui.icon.MeshtasticIcons +import org.meshtastic.core.ui.icon.PhotoCamera import org.meshtastic.core.ui.util.DeviceModelArViewer import org.meshtastic.feature.node.component.ModelNotice import org.meshtastic.feature.node.model.GlbBounds @@ -149,7 +158,7 @@ private fun DeviceModelAr(glb: ByteArray, title: String, notice: String?, onDism } Box(modifier = Modifier.fillMaxSize()) { if (cameraGranted) DeviceModelArScene(glb) - ArHeader(title, onDismiss) + ArHeader(title, onDismiss, onCapture = rememberArCapture(title).takeIf { cameraGranted }) notice?.let { ModelNotice( notice = it, @@ -320,7 +329,7 @@ private val RestPose.label: StringResource } @Composable -private fun ArHeader(title: String, onDismiss: () -> Unit) { +private fun ArHeader(title: String, onDismiss: () -> Unit, onCapture: (() -> Unit)?) { Column( modifier = Modifier.fillMaxWidth().background(Color.Black.copy(alpha = SCRIM_ALPHA)).safeDrawingPadding().padding(4.dp), @@ -333,8 +342,35 @@ private fun ArHeader(title: String, onDismiss: () -> Unit) { text = title, style = MaterialTheme.typography.titleLarge, color = Color.White, - modifier = Modifier.padding(start = 8.dp), + modifier = Modifier.padding(start = 8.dp).weight(1f), ) + onCapture?.let { + IconButton(onClick = it) { + Icon( + MeshtasticIcons.PhotoCamera, + contentDescription = stringResource(Res.string.device_model_capture), + tint = Color.White, + ) + } + } + } + } +} + +/** Saves the AR view to Pictures and says so; Android 10 and later only, where that needs no storage permission. */ +@Composable +private fun rememberArCapture(title: String): (() -> Unit)? { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) return null + val view = LocalView.current + val scope = rememberCoroutineScope() + val haptic = LocalHapticFeedback.current + val saved = stringResource(Res.string.device_model_capture_saved) + val failed = stringResource(Res.string.device_model_capture_failed) + return { + haptic.performHapticFeedback(HapticFeedbackType.LongPress) + scope.launch { + val uri = captureArScene(view.rootView, title) + Toast.makeText(view.context, if (uri != null) saved else failed, Toast.LENGTH_SHORT).show() } } } diff --git a/core/resources/src/commonMain/composeResources/drawable/ic_photo_camera.xml b/core/resources/src/commonMain/composeResources/drawable/ic_photo_camera.xml new file mode 100644 index 00000000000..dcbda4fc875 --- /dev/null +++ b/core/resources/src/commonMain/composeResources/drawable/ic_photo_camera.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/core/resources/src/commonMain/composeResources/values/strings.xml b/core/resources/src/commonMain/composeResources/values/strings.xml index b56bf3b88b4..4e98911d92a 100644 --- a/core/resources/src/commonMain/composeResources/values/strings.xml +++ b/core/resources/src/commonMain/composeResources/values/strings.xml @@ -424,6 +424,9 @@ %1$s %1$s: %2$s%% %1$s: %2$s V + Take a picture + Couldn't save the picture + Saved to Pictures Couldn't load the 3D model Face down Face up diff --git a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Hardware.kt b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Hardware.kt index 4cbfb686aab..2449adfb9f0 100644 --- a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Hardware.kt +++ b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/icon/Hardware.kt @@ -29,6 +29,7 @@ import org.meshtastic.core.resources.ic_display_settings import org.meshtastic.core.resources.ic_memory import org.meshtastic.core.resources.ic_mesh_radio import org.meshtastic.core.resources.ic_nfc +import org.meshtastic.core.resources.ic_photo_camera import org.meshtastic.core.resources.ic_settings_input_antenna import org.meshtastic.core.resources.ic_speaker_phone import org.meshtastic.core.resources.ic_terminal @@ -44,6 +45,10 @@ val MeshtasticIcons.Wrench: ImageVector /** Material Symbols "view_in_ar": the entry to a device's 3D model. */ val MeshtasticIcons.ViewInAr: ImageVector @Composable get() = vectorResource(Res.drawable.ic_view_in_ar) + +/** Material Symbols "photo_camera": capture the AR view. */ +val MeshtasticIcons.PhotoCamera: ImageVector + @Composable get() = vectorResource(Res.drawable.ic_photo_camera) val MeshtasticIcons.BluetoothConnected: ImageVector @Composable get() = vectorResource(Res.drawable.ic_bluetooth_connected) val MeshtasticIcons.BluetoothSearching: ImageVector From 3a570ee43ec1814c913feb40b5460b765555681f Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 12:50:21 -0500 Subject: [PATCH 27/34] fix(mirror): latch the rect panel, close a completed palette, render frames off the main thread --- .../data/manager/DisplayMirrorManagerImpl.kt | 3 +- .../core/data/manager/MirrorRectCompositor.kt | 38 ++++++++++----- .../manager/DisplayMirrorManagerImplTest.kt | 47 +++++++++++++++++++ .../settings/debugging/MirrorFrameRenderer.kt | 31 ++++++++---- 4 files changed, 98 insertions(+), 21 deletions(-) diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt index 46bb27e5df3..d88940234b3 100644 --- a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImpl.kt @@ -105,7 +105,7 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { } override fun handleIncomingPalette(chunk: DisplayPalette) { - if (chunk.region_offset == 0) { + if (chunk.region_offset == 0 && chunk.region_total <= MAX_PALETTE_REGIONS) { paletteRegions.clear() paletteSignature = chunk.signature paletteReceived = 0 @@ -129,6 +129,7 @@ class DisplayMirrorManagerImpl : DisplayMirrorManager { defaultOffColor = paletteDefaultOff, regions = paletteRegions.toList(), ) + paletteReceived = -1 // complete: a surplus chunk must not extend it; the next palette starts at offset 0 } } diff --git a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/MirrorRectCompositor.kt b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/MirrorRectCompositor.kt index af3d9f77e0f..171f0a106bf 100644 --- a/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/MirrorRectCompositor.kt +++ b/core/data/src/commonMain/kotlin/org/meshtastic/core/data/manager/MirrorRectCompositor.kt @@ -19,7 +19,14 @@ package org.meshtastic.core.data.manager import co.touchlab.kermit.Logger import org.meshtastic.proto.DisplayFrame -private data class RectArea(val x: Int, val y: Int, val width: Int, val height: Int) +private data class RectArea( + val x: Int, + val y: Int, + val width: Int, + val height: Int, + val panelWidth: Int, + val panelHeight: Int, +) /** * Reassembles RGB565 dirty-rect chunks (LVGL-based device UIs) and composites them into a persistent little-endian @@ -51,7 +58,7 @@ internal class MirrorRectCompositor { buffer = ByteArray(chunk.total_size) frameId = chunk.frame_id received = 0 - area = RectArea(chunk.rect_x, chunk.rect_y, rectWidth(chunk), rectHeight(chunk)) + area = RectArea(chunk.rect_x, chunk.rect_y, rectWidth(chunk), rectHeight(chunk), chunk.width, chunk.height) } return accumulate(chunk, data) } @@ -62,7 +69,7 @@ internal class MirrorRectCompositor { received += data.size val complete = received >= buf.size if (complete) { - composite(chunk, buf) + composite(buf) buffer = null } return complete @@ -89,10 +96,18 @@ internal class MirrorRectCompositor { private fun isAcceptable(chunk: DisplayFrame, dataSize: Int): Boolean { val expected = if (withinPanel(chunk)) rectWidth(chunk) * rectHeight(chunk) * 2 else -1 val sized = expected == chunk.total_size && chunk.total_size in 1..MAX_RECT_BYTES - // Continuations must match the buffer allocated at offset 0, not merely their own claim. + // Continuations must match the buffer and the panel latched at offset 0, not merely their own claim. + val latched = area val inSequence = chunk.offset == 0 || - (buffer?.size == chunk.total_size && chunk.frame_id == frameId && chunk.offset == received) + ( + buffer?.size == chunk.total_size && + chunk.frame_id == frameId && + chunk.offset == received && + latched != null && + chunk.width == latched.panelWidth && + chunk.height == latched.panelHeight + ) val acceptable = sized && inSequence && chunk.offset + dataSize <= chunk.total_size if (!acceptable) { Logger.w { @@ -114,14 +129,15 @@ internal class MirrorRectCompositor { chunk.rect_y in 0..(chunk.height - h) } - private fun composite(chunk: DisplayFrame, rect: ByteArray) { - if (canvas == null || width != chunk.width || height != chunk.height) { - canvas = ByteArray(chunk.width * chunk.height * 2) - width = chunk.width - height = chunk.height + /** Uses the panel latched at offset 0, the geometry the rect was validated against. */ + private fun composite(rect: ByteArray) { + val blit = area ?: return + if (canvas == null || width != blit.panelWidth || height != blit.panelHeight) { + canvas = ByteArray(blit.panelWidth * blit.panelHeight * 2) + width = blit.panelWidth + height = blit.panelHeight } val target = canvas ?: return - val blit = area ?: return val rowBytes = blit.width * 2 for (row in 0 until blit.height) { val src = row * rowBytes diff --git a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt index 3275a82e9da..5a59165eeb7 100644 --- a/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt +++ b/core/data/src/commonTest/kotlin/org/meshtastic/core/data/manager/DisplayMirrorManagerImplTest.kt @@ -324,6 +324,53 @@ class DisplayMirrorManagerImplTest { assertNull(manager.frame.value) } + @Test + fun `continuation chunk cannot change the panel the rect was checked against`() { + manager.handleIncomingFrame(rectChunk(offset = 0, total = 200, data = bytes(100, 1))) + // A smaller panel on the final chunk would blit the 10x10 rect past the end of the canvas. + manager.handleIncomingFrame(rectChunk(offset = 100, total = 200, width = 10, height = 10, data = bytes(100, 2))) + + assertNull(manager.frame.value) + } + + @Test + fun `a surplus chunk after a completed palette does not extend it`() { + val region = + DisplayPalette.ColorRegion.Builder() + .also { wb -> + wb.width = 8 + wb.height = 8 + } + .build() + manager.handleIncomingPalette( + palette(signature = 5, regionOffset = 0, regionTotal = 1, regions = listOf(region)), + ) + manager.handleIncomingPalette( + palette(signature = 5, regionOffset = 1, regionTotal = 1, regions = listOf(region)), + ) + + assertEquals(1, manager.palette.value?.regions?.size) + } + + @Test + fun `an over-cap restart leaves the published palette intact`() { + val region = + DisplayPalette.ColorRegion.Builder() + .also { wb -> + wb.width = 8 + wb.height = 8 + } + .build() + manager.handleIncomingPalette( + palette(signature = 5, regionOffset = 0, regionTotal = 1, regions = listOf(region)), + ) + manager.handleIncomingPalette( + palette(signature = 6, regionOffset = 0, regionTotal = 100_000, regions = listOf(region)), + ) + + assertEquals(5, manager.palette.value?.signature) + } + private companion object { const val WIDTH = 128 const val HEIGHT = 64 diff --git a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt index 4260ebec363..6e2826c09c6 100644 --- a/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt +++ b/feature/settings/src/commonMain/kotlin/org/meshtastic/feature/settings/debugging/MirrorFrameRenderer.kt @@ -17,11 +17,13 @@ package org.meshtastic.feature.settings.debugging import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.widthIn import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember +import androidx.compose.runtime.getValue +import androidx.compose.runtime.produceState import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size @@ -33,7 +35,10 @@ import androidx.compose.ui.graphics.drawscope.CanvasDrawScope import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp +import kotlinx.coroutines.withContext import org.jetbrains.compose.resources.stringResource +import org.koin.compose.koinInject +import org.meshtastic.core.di.CoroutineDispatchers import org.meshtastic.core.repository.MirrorFormat import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.core.repository.MirrorPalette @@ -55,17 +60,25 @@ private const val PIXELS_PER_PAGE = 8 internal fun MirrorFrameImage(frame: MirrorFrame, palette: MirrorPalette?, modifier: Modifier = Modifier) { // A palette only applies when the frame references it; otherwise render monochrome. val activePalette = palette?.takeIf { frame.paletteSignature != 0 && it.signature == frame.paletteSignature } - val bitmap = remember(frame, activePalette) { renderFrame(frame, activePalette) } - Image( - bitmap = bitmap, - contentDescription = stringResource(Res.string.mirror_device_screen), - modifier = + // Rendered off the main thread: an 800x480 frame is tens of milliseconds. The last bitmap stays up meanwhile. + val dispatchers = koinInject() + val bitmap by + produceState(null, frame, activePalette) { + value = withContext(dispatchers.default) { renderFrame(frame, activePalette) } + } + val sizing = modifier .widthIn(max = MAX_CANVAS_WIDTH) .fillMaxWidth() - .aspectRatio(frame.width.toFloat() / frame.height.toFloat()), - filterQuality = FilterQuality.None, - ) + .aspectRatio(frame.width.toFloat() / frame.height.toFloat()) + bitmap?.let { + Image( + bitmap = it, + contentDescription = stringResource(Res.string.mirror_device_screen), + modifier = sizing, + filterQuality = FilterQuality.None, + ) + } ?: Box(sizing) } /** One colorized rectangle with palette colors pre-resolved to Compose colors. */ From ecde49da017f18a90a656c65bfc9ce0c251e711d Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 16:12:42 -0500 Subject: [PATCH 28/34] feat(node): shutter at bottom center, and keep the model loaded across AR and rotation --- .../app/node/DeviceModelArViewer.kt | 71 +++++++----- .../component/SceneViewerPlatform.android.kt | 11 +- .../node/component/DeviceModelDialog.kt | 103 +++++++++++------- .../node/component/SceneViewerPlatform.kt | 1 + .../node/component/SceneViewerPlatform.ios.kt | 11 +- .../node/component/SceneViewerPlatform.jvm.kt | 11 +- 6 files changed, 134 insertions(+), 74 deletions(-) diff --git a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt index eaf67c6e1ad..fb22c04282e 100644 --- a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt +++ b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt @@ -23,6 +23,7 @@ import android.widget.Toast import androidx.activity.compose.BackHandler import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.background import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement @@ -33,12 +34,15 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawingPadding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.FilledIconButton import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChipDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton +import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -101,11 +105,12 @@ import org.meshtastic.core.resources.device_model_rest_face_up import org.meshtastic.core.resources.device_model_rest_left_side import org.meshtastic.core.resources.device_model_rest_right_side import org.meshtastic.core.resources.device_model_rest_upright +import org.meshtastic.core.resources.info import org.meshtastic.core.ui.icon.Close +import org.meshtastic.core.ui.icon.Info import org.meshtastic.core.ui.icon.MeshtasticIcons import org.meshtastic.core.ui.icon.PhotoCamera import org.meshtastic.core.ui.util.DeviceModelArViewer -import org.meshtastic.feature.node.component.ModelNotice import org.meshtastic.feature.node.model.GlbBounds import org.meshtastic.feature.node.model.RestPose import java.nio.ByteBuffer @@ -157,16 +162,8 @@ private fun DeviceModelAr(glb: ByteArray, title: String, notice: String?, onDism } } Box(modifier = Modifier.fillMaxSize()) { - if (cameraGranted) DeviceModelArScene(glb) - ArHeader(title, onDismiss, onCapture = rememberArCapture(title).takeIf { cameraGranted }) - notice?.let { - ModelNotice( - notice = it, - modifier = Modifier.align(Alignment.BottomEnd).safeDrawingPadding().padding(16.dp), - contentColor = Color.White, - containerColor = Color.Black.copy(alpha = SCRIM_ALPHA), - ) - } + if (cameraGranted) DeviceModelArScene(glb, onCapture = rememberArCapture(title)) + ArHeader(title, notice, onDismiss) } } @@ -176,13 +173,14 @@ private fun DeviceModelAr(glb: ByteArray, title: String, notice: String?, onDism */ @Composable @Suppress("LongMethod") -private fun DeviceModelArScene(glb: ByteArray) { +private fun DeviceModelArScene(glb: ByteArray, onCapture: (() -> Unit)?) { val engine = rememberEngine() val modelLoader = rememberModelLoader(engine) val materialLoader = rememberMaterialLoader(engine) val haptic = LocalHapticFeedback.current var anchor by remember { mutableStateOf(null) } - var yawDegrees by remember { mutableFloatStateOf(0f) } + // Saved across a rotation; the anchor cannot be, since the activity's new ARCore session starts unplaced. + var yawDegrees by rememberSaveable { mutableFloatStateOf(0f) } var pose by rememberSaveable { mutableStateOf(RestPose.Upright) } val bounds = remember(glb) { GlbBounds.parse(glb) } var latestFrame by remember { mutableStateOf(null) } @@ -279,12 +277,13 @@ private fun DeviceModelArScene(glb: ByteArray) { trackingFailureReason = trackingFailure, ) ARCoachingOverlay(guidance) - if (placed && bounds != null) { - RestPoseChips( - selected = pose, - onSelect = { pose = it }, - modifier = Modifier.align(Alignment.BottomCenter).safeDrawingPadding().padding(bottom = 72.dp), - ) + Column( + modifier = Modifier.align(Alignment.BottomCenter).safeDrawingPadding().padding(bottom = 16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + if (placed && bounds != null) RestPoseChips(selected = pose, onSelect = { pose = it }) + onCapture?.let { ShutterButton(it) } } } } @@ -328,8 +327,10 @@ private val RestPose.label: StringResource RestPose.RightSide -> Res.string.device_model_rest_right_side } +/** Title bar over the camera; the model's notice opens under it, clear of the controls at the bottom. */ @Composable -private fun ArHeader(title: String, onDismiss: () -> Unit, onCapture: (() -> Unit)?) { +private fun ArHeader(title: String, notice: String?, onDismiss: () -> Unit) { + var noticeShown by rememberSaveable { mutableStateOf(false) } Column( modifier = Modifier.fillMaxWidth().background(Color.Black.copy(alpha = SCRIM_ALPHA)).safeDrawingPadding().padding(4.dp), @@ -344,16 +345,32 @@ private fun ArHeader(title: String, onDismiss: () -> Unit, onCapture: (() -> Uni color = Color.White, modifier = Modifier.padding(start = 8.dp).weight(1f), ) - onCapture?.let { - IconButton(onClick = it) { - Icon( - MeshtasticIcons.PhotoCamera, - contentDescription = stringResource(Res.string.device_model_capture), - tint = Color.White, - ) + if (notice != null) { + IconButton(onClick = { noticeShown = !noticeShown }) { + Icon(MeshtasticIcons.Info, contentDescription = stringResource(Res.string.info), tint = Color.White) } } } + AnimatedVisibility(visible = noticeShown && notice != null) { + Text( + text = notice.orEmpty(), + style = MaterialTheme.typography.labelSmall, + color = Color.White, + modifier = Modifier.padding(horizontal = 12.dp, vertical = 4.dp), + ) + } + } +} + +/** A camera-app shutter: the one control you reach for with a thumb, so it sits bottom center. */ +@Composable +private fun ShutterButton(onClick: () -> Unit) { + FilledIconButton( + onClick = onClick, + modifier = Modifier.size(72.dp), + colors = IconButtonDefaults.filledIconButtonColors(containerColor = Color.White, contentColor = Color.Black), + ) { + Icon(MeshtasticIcons.PhotoCamera, contentDescription = stringResource(Res.string.device_model_capture)) } } diff --git a/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt b/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt index e52494770a6..ce654fd6e41 100644 --- a/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt +++ b/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt @@ -42,7 +42,13 @@ import java.nio.ByteBuffer * nothing is swapped. SceneView centers the model on the origin, so the orbit targets the origin. */ @Composable -internal actual fun DeviceModelScene(glb: ByteArray, bounds: GlbBounds, onError: () -> Unit, modifier: Modifier) { +internal actual fun DeviceModelScene( + glb: ByteArray, + bounds: GlbBounds, + onError: () -> Unit, + modifier: Modifier, + visible: Boolean, +) { val engine = rememberEngine() val modelLoader = rememberModelLoader(engine) val environmentLoader = rememberEnvironmentLoader(engine) @@ -63,7 +69,8 @@ internal actual fun DeviceModelScene(glb: ByteArray, bounds: GlbBounds, onError: } DisposableEffect(instance) { onDispose { instance?.let { modelLoader.destroyModel(it.model) } } } SideEffect { if (instance == null) currentOnError() } - if (instance == null) return + // Hidden, only the surface goes: the engine, probe and model stay loaded for when it shows again. + if (instance == null || !visible) return val loaded = loadedEnvironment ?: return SceneView( modifier = modifier, diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt index 7bfb92a1749..7a109f7fd9d 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt @@ -75,55 +75,76 @@ fun DeviceModelDialog(deviceHardware: DeviceHardware, onDismiss: () -> Unit, mod val arViewer = LocalDeviceModelArViewer.current?.takeIf { it.isAvailable() } var inAr by rememberSaveable { mutableStateOf(false) } - val ready = state as? DeviceModelState.Ready + val arModel = (state as? DeviceModelState.Ready)?.takeIf { inAr && arViewer != null } Dialog(onDismissRequest = onDismiss, properties = DialogProperties(usePlatformDefaultWidth = false)) { - if (inAr && arViewer != null && ready != null) { - arViewer.Content(ready.glb, deviceHardware.displayName, ready.copyright) { inAr = false } - return@Dialog + // The orbit view stays composed under AR with its surface dropped, so coming back does not reload the model. + Box(modifier = modifier.fillMaxSize()) { + OrbitContent( + deviceHardware = deviceHardware, + state = state, + onError = viewModel::markFailed, + onDismiss = onDismiss, + onOpenAr = if (arViewer != null) ({ inAr = true }) else null, + visible = arModel == null, + ) + arModel?.let { arViewer?.Content(it.glb, deviceHardware.displayName, it.copyright) { inAr = false } } } - Surface(modifier = modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) { - Column(modifier = Modifier.fillMaxSize().safeDrawingPadding()) { - Row( - modifier = Modifier.fillMaxWidth().padding(horizontal = 4.dp, vertical = 4.dp), - verticalAlignment = Alignment.CenterVertically, - ) { - IconButton(onClick = onDismiss) { - Icon(MeshtasticIcons.Close, contentDescription = stringResource(Res.string.close)) - } - Text( - text = deviceHardware.displayName, - style = MaterialTheme.typography.titleLarge, - modifier = Modifier.padding(start = 8.dp).weight(1f), - ) - if (arViewer != null && ready != null) { - IconButton(onClick = { inAr = true }) { - Icon( - MeshtasticIcons.ViewInAr, - contentDescription = stringResource(Res.string.device_model_view_in_space), - ) - } + } +} + +@Composable +private fun OrbitContent( + deviceHardware: DeviceHardware, + state: DeviceModelState, + onError: () -> Unit, + onDismiss: () -> Unit, + onOpenAr: (() -> Unit)?, + visible: Boolean, +) { + val ready = state as? DeviceModelState.Ready + Surface(modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background) { + Column(modifier = Modifier.fillMaxSize().safeDrawingPadding()) { + Row( + modifier = Modifier.fillMaxWidth().padding(horizontal = 4.dp, vertical = 4.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + IconButton(onClick = onDismiss) { + Icon(MeshtasticIcons.Close, contentDescription = stringResource(Res.string.close)) + } + Text( + text = deviceHardware.displayName, + style = MaterialTheme.typography.titleLarge, + modifier = Modifier.padding(start = 8.dp).weight(1f), + ) + if (onOpenAr != null && ready != null) { + IconButton(onClick = onOpenAr) { + Icon( + MeshtasticIcons.ViewInAr, + contentDescription = stringResource(Res.string.device_model_view_in_space), + ) } } - Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { - when (val current = state) { - DeviceModelState.Loading -> CircularProgressIndicator() + } + Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + when (val current = state) { + DeviceModelState.Loading -> CircularProgressIndicator() - DeviceModelState.Failed -> ModelFallback(deviceHardware) + DeviceModelState.Failed -> ModelFallback(deviceHardware) - is DeviceModelState.Ready -> - Box(modifier = Modifier.fillMaxSize()) { - DeviceModelScene( - glb = current.glb, - bounds = current.bounds, - onError = viewModel::markFailed, - modifier = Modifier.fillMaxSize(), - ) - current.copyright?.let { - ModelNotice(it, Modifier.align(Alignment.BottomEnd).padding(16.dp)) - } + is DeviceModelState.Ready -> + Box(modifier = Modifier.fillMaxSize()) { + DeviceModelScene( + glb = current.glb, + bounds = current.bounds, + onError = onError, + modifier = Modifier.fillMaxSize(), + visible = visible, + ) + current.copyright?.let { + ModelNotice(it, Modifier.align(Alignment.BottomEnd).padding(16.dp)) } - } + } } } } diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.kt index 7ef5c3372cf..2864e932449 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.kt @@ -55,6 +55,7 @@ internal expect fun DeviceModelScene( bounds: GlbBounds, onError: () -> Unit, modifier: Modifier = Modifier, + visible: Boolean = true, ) /** diff --git a/feature/node/src/iosMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.ios.kt b/feature/node/src/iosMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.ios.kt index 449514a05d9..a215eb830b4 100644 --- a/feature/node/src/iosMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.ios.kt +++ b/feature/node/src/iosMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.ios.kt @@ -21,5 +21,12 @@ import androidx.compose.ui.Modifier import org.meshtastic.feature.node.model.GlbBounds @Composable -internal actual fun DeviceModelScene(glb: ByteArray, bounds: GlbBounds, onError: () -> Unit, modifier: Modifier) = - SceneViewerModelScene(glb, bounds, onError, modifier) +internal actual fun DeviceModelScene( + glb: ByteArray, + bounds: GlbBounds, + onError: () -> Unit, + modifier: Modifier, + visible: Boolean, +) { + if (visible) SceneViewerModelScene(glb, bounds, onError, modifier) +} diff --git a/feature/node/src/jvmMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.jvm.kt b/feature/node/src/jvmMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.jvm.kt index 449514a05d9..a215eb830b4 100644 --- a/feature/node/src/jvmMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.jvm.kt +++ b/feature/node/src/jvmMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.jvm.kt @@ -21,5 +21,12 @@ import androidx.compose.ui.Modifier import org.meshtastic.feature.node.model.GlbBounds @Composable -internal actual fun DeviceModelScene(glb: ByteArray, bounds: GlbBounds, onError: () -> Unit, modifier: Modifier) = - SceneViewerModelScene(glb, bounds, onError, modifier) +internal actual fun DeviceModelScene( + glb: ByteArray, + bounds: GlbBounds, + onError: () -> Unit, + modifier: Modifier, + visible: Boolean, +) { + if (visible) SceneViewerModelScene(glb, bounds, onError, modifier) +} From 3ffae73c664aa19931daffdc7fc46c726a4140f9 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 16:26:18 -0500 Subject: [PATCH 29/34] fix(node): rebuild the model instance when the orbit scene returns from AR --- .../component/SceneViewerPlatform.android.kt | 42 +++++++++++++++---- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt b/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt index ce654fd6e41..aa9b7892c47 100644 --- a/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt +++ b/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt @@ -24,9 +24,13 @@ import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.ui.Modifier +import com.google.android.filament.Engine import io.github.sceneview.SceneView import io.github.sceneview.createDefaultCameraManipulator import io.github.sceneview.environment.Environment +import io.github.sceneview.gesture.CameraGestureDetector +import io.github.sceneview.loaders.EnvironmentLoader +import io.github.sceneview.loaders.ModelLoader import io.github.sceneview.math.Position import io.github.sceneview.model.model import io.github.sceneview.rememberEngine @@ -63,26 +67,48 @@ internal actual fun DeviceModelScene( // Captured, not read through the delegate: the null effect's dispose runs after the state already holds the load. val loadedEnvironment = environment DisposableEffect(loadedEnvironment) { onDispose { loadedEnvironment?.let(environmentLoader::destroyEnvironment) } } + val cameraManipulator = + remember(bounds) { + createDefaultCameraManipulator(eyePosition = orbitEye(bounds), targetPosition = Position(0f)) + } + // Hidden, only the scene goes: the engine, its compiled materials, the probe and the camera stay for when it shows + // again. + if (visible && loadedEnvironment != null) { + OrbitScene(glb, engine, modelLoader, environmentLoader, loadedEnvironment, cameraManipulator, onError, modifier) + } +} + +/** + * The model instance does not survive its scene's teardown, so it is rebuilt from the bytes each time, which is cheap. + */ +@Composable +@Suppress("LongParameterList") +private fun OrbitScene( + glb: ByteArray, + engine: Engine, + modelLoader: ModelLoader, + environmentLoader: EnvironmentLoader, + environment: Environment, + cameraManipulator: CameraGestureDetector.CameraManipulator, + onError: () -> Unit, + modifier: Modifier = Modifier, +) { + val currentOnError by rememberUpdatedState(onError) val instance = remember(modelLoader, glb) { runCatching { modelLoader.createModelInstance(ByteBuffer.wrap(glb)) }.getOrNull() } DisposableEffect(instance) { onDispose { instance?.let { modelLoader.destroyModel(it.model) } } } SideEffect { if (instance == null) currentOnError() } - // Hidden, only the surface goes: the engine, probe and model stay loaded for when it shows again. - if (instance == null || !visible) return - val loaded = loadedEnvironment ?: return + if (instance == null) return SceneView( modifier = modifier, engine = engine, modelLoader = modelLoader, environmentLoader = environmentLoader, - environment = loaded, + environment = environment, isOpaque = false, - cameraManipulator = - remember(bounds) { - createDefaultCameraManipulator(eyePosition = orbitEye(bounds), targetPosition = Position(0f)) - }, + cameraManipulator = cameraManipulator, ) { ModelNode(modelInstance = instance) } From 6d6fd78ce15051a35dc365701066fc9054e58ef7 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 16:48:41 -0500 Subject: [PATCH 30/34] fix(node): keep the 3D model open across a rotation --- .../feature/node/detail/NodeDetailScreens.kt | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.kt index 0ace52439a2..760f0325706 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.kt @@ -30,13 +30,13 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import androidx.lifecycle.compose.collectAsStateWithLifecycle import org.jetbrains.compose.resources.stringResource import org.meshtastic.core.common.util.MeasurementSystem -import org.meshtastic.core.model.DeviceHardware import org.meshtastic.core.model.FirmwareRelease import org.meshtastic.core.model.Node import org.meshtastic.core.navigation.Route @@ -59,8 +59,6 @@ private sealed interface NodeDetailOverlay { data class FirmwareReleaseInfo(val release: FirmwareRelease) : NodeDetailOverlay data class Compass(val nodeNum: Int, val displayUnits: MeasurementSystem) : NodeDetailOverlay - - data class DeviceModel(val deviceHardware: DeviceHardware) : NodeDetailOverlay } @Composable @@ -100,6 +98,8 @@ private fun NodeDetailScaffold( compassViewModel: CompassViewModel? = null, ) { var activeOverlay by remember { mutableStateOf(null) } + // Saved, unlike the overlays: a rotation must not close the model, which the user may be turning the phone for. + var deviceModelOpen by rememberSaveable { mutableStateOf(false) } val actualCompassViewModel = compassViewModel val compassUiState by actualCompassViewModel?.uiState?.collectAsStateWithLifecycle() ?: remember { mutableStateOf(CompassUiState()) } @@ -132,8 +132,7 @@ private fun NodeDetailScaffold( is NodeDetailAction.OpenCompass -> activeOverlay = NodeDetailOverlay.Compass(action.node.num, action.displayUnits) - is NodeDetailAction.OpenDeviceModel -> - activeOverlay = NodeDetailOverlay.DeviceModel(action.deviceHardware) + is NodeDetailAction.OpenDeviceModel -> deviceModelOpen = true else -> handleNodeAction( @@ -163,6 +162,9 @@ private fun NodeDetailScaffold( ) { viewModel.handleNodeMenuAction(NodeMenuAction.RequestPosition(it)) } + uiState.metricsState.deviceHardware + ?.takeIf { deviceModelOpen } + ?.let { DeviceModelDialog(it, onDismiss = { deviceModelOpen = false }) } } @OptIn(ExperimentalMaterial3Api::class) @@ -200,8 +202,6 @@ private fun NodeDetailOverlays( when (overlay) { is NodeDetailOverlay.SharedContact -> node?.let { ShareContactDialog(it, onDismiss, isOwnContact = isLocal) } - is NodeDetailOverlay.DeviceModel -> DeviceModelDialog(overlay.deviceHardware, onDismiss) - is NodeDetailOverlay.FirmwareReleaseInfo -> NodeDetailBottomSheet(onDismiss) { FirmwareReleaseSheetContent(firmwareRelease = overlay.release) } From 3d4dcf0ab4da09490733586ec98e680d8391b721 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 17:21:56 -0500 Subject: [PATCH 31/34] fix(node): hold the orientation while AR is up so a rotation keeps the placed device --- .../app/node/DeviceModelArViewer.kt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt index fb22c04282e..2a2ac0bdce6 100644 --- a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt +++ b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt @@ -17,6 +17,10 @@ package org.meshtastic.app.node import android.Manifest +import android.app.Activity +import android.content.Context +import android.content.ContextWrapper +import android.content.pm.ActivityInfo import android.content.pm.PackageManager import android.os.Build import android.widget.Toast @@ -143,6 +147,7 @@ private object GoogleDeviceModelArViewer : DeviceModelArViewer { @Composable private fun DeviceModelAr(glb: ByteArray, title: String, notice: String?, onDismiss: () -> Unit) { BackHandler(onBack = onDismiss) + LockOrientationWhileShown() // Asked here rather than left to the AR view, whose own request never appears from inside a dialog. val context = LocalContext.current var cameraGranted by remember { @@ -391,3 +396,24 @@ private fun rememberArCapture(title: String): (() -> Unit)? { } } } + +/** + * Holds the activity at its current orientation while AR is up. A rotation recreates the activity, and the new ARCore + * session starts without the planes it found or the device placed on one; turning the phone here moves the camera. + */ +@Composable +private fun LockOrientationWhileShown() { + val context = LocalContext.current + DisposableEffect(context) { + val activity = context.findActivity() + val previous = activity?.requestedOrientation + activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LOCKED + onDispose { if (activity != null && previous != null) activity.requestedOrientation = previous } + } +} + +private tailrec fun Context.findActivity(): Activity? = when (this) { + is Activity -> this + is ContextWrapper -> baseContext.findActivity() + else -> null +} From 4eae16812861e7cf94cc3214ee97ef4c59db894b Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 18:25:15 -0500 Subject: [PATCH 32/34] spike(node): draw the connected device's live screen on its 3D model The orbit and AR viewers lay the mirror frame over the model's screen-named mesh and update it per frame. The Pocket's hardware entry points at the bare RAK4631 image, so its model is hard-coded here. --- .../app/node/DeviceModelArViewer.kt | 29 +++++-- .../core/ui/util/LocalDeviceModelArViewer.kt | 17 ++++- .../component/SceneViewerPlatform.android.kt | 75 +++++++++++++++++- .../node/component/DeviceModelDialog.kt | 48 +++++++++++- .../node/component/DeviceModelViewModel.kt | 76 +++++++++++++++++-- .../node/component/SceneViewerPlatform.kt | 8 +- .../feature/node/detail/NodeDetailScreens.kt | 2 +- .../feature/node/model/GlbBounds.kt | 53 ++++++++++--- .../feature/node/model/GlbBoundsTest.kt | 38 ++++++++++ .../node/component/SceneViewerPlatform.ios.kt | 3 + .../node/component/SceneViewerPlatform.jvm.kt | 3 + 11 files changed, 322 insertions(+), 30 deletions(-) diff --git a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt index 2a2ac0bdce6..37cfceb07f5 100644 --- a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt +++ b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt @@ -99,6 +99,7 @@ import io.github.sceneview.rememberOnGestureListener import kotlinx.coroutines.launch import org.jetbrains.compose.resources.StringResource import org.jetbrains.compose.resources.stringResource +import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.core.resources.Res import org.meshtastic.core.resources.close import org.meshtastic.core.resources.device_model_capture @@ -115,6 +116,7 @@ import org.meshtastic.core.ui.icon.Info import org.meshtastic.core.ui.icon.MeshtasticIcons import org.meshtastic.core.ui.icon.PhotoCamera import org.meshtastic.core.ui.util.DeviceModelArViewer +import org.meshtastic.feature.node.component.DeviceScreenNode import org.meshtastic.feature.node.model.GlbBounds import org.meshtastic.feature.node.model.RestPose import java.nio.ByteBuffer @@ -136,8 +138,15 @@ private object GoogleDeviceModelArViewer : DeviceModelArViewer { } @Composable - override fun Content(glb: ByteArray, title: String, notice: String?, onDismiss: () -> Unit) = - DeviceModelAr(glb, title, notice, onDismiss) + override fun Content( + glb: ByteArray, + title: String, + notice: String?, + onDismiss: () -> Unit, + screenMin: FloatArray?, + screenMax: FloatArray?, + screenFrame: MirrorFrame?, + ) = DeviceModelAr(glb, title, notice, onDismiss, ArScreen(screenMin, screenMax, screenFrame)) } /** @@ -145,7 +154,7 @@ private object GoogleDeviceModelArViewer : DeviceModelArViewer { * is scaled. A later tap moves it rather than adding another, and a twist turns it. */ @Composable -private fun DeviceModelAr(glb: ByteArray, title: String, notice: String?, onDismiss: () -> Unit) { +private fun DeviceModelAr(glb: ByteArray, title: String, notice: String?, onDismiss: () -> Unit, screen: ArScreen) { BackHandler(onBack = onDismiss) LockOrientationWhileShown() // Asked here rather than left to the AR view, whose own request never appears from inside a dialog. @@ -167,7 +176,7 @@ private fun DeviceModelAr(glb: ByteArray, title: String, notice: String?, onDism } } Box(modifier = Modifier.fillMaxSize()) { - if (cameraGranted) DeviceModelArScene(glb, onCapture = rememberArCapture(title)) + if (cameraGranted) DeviceModelArScene(glb, screen, onCapture = rememberArCapture(title)) ArHeader(title, notice, onDismiss) } } @@ -178,7 +187,7 @@ private fun DeviceModelAr(glb: ByteArray, title: String, notice: String?, onDism */ @Composable @Suppress("LongMethod") -private fun DeviceModelArScene(glb: ByteArray, onCapture: (() -> Unit)?) { +private fun DeviceModelArScene(glb: ByteArray, screen: ArScreen, onCapture: (() -> Unit)?) { val engine = rememberEngine() val modelLoader = rememberModelLoader(engine) val materialLoader = rememberMaterialLoader(engine) @@ -268,7 +277,12 @@ private fun DeviceModelArScene(glb: ByteArray, onCapture: (() -> Unit)?) { modelInstance = instance, position = Position(offset[0], offset[1], offset[2]), rotation = Rotation(x = pose.pitchDegrees, z = pose.rollDegrees), - ) + ) { + val min = screen.min + val max = screen.max + val frame = screen.frame + if (min != null && max != null && frame != null) DeviceScreenNode(min, max, frame) + } } } } @@ -417,3 +431,6 @@ private tailrec fun Context.findActivity(): Activity? = when (this) { is ContextWrapper -> baseContext.findActivity() else -> null } + +/** The display glass in model coordinates and the live frame to draw on it; all null when there is nothing to show. */ +private class ArScreen(val min: FloatArray?, val max: FloatArray?, val frame: MirrorFrame?) diff --git a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/util/LocalDeviceModelArViewer.kt b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/util/LocalDeviceModelArViewer.kt index a4b9783de61..5bac0cb13c3 100644 --- a/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/util/LocalDeviceModelArViewer.kt +++ b/core/ui/src/commonMain/kotlin/org/meshtastic/core/ui/util/LocalDeviceModelArViewer.kt @@ -18,6 +18,7 @@ package org.meshtastic.core.ui.util import androidx.compose.runtime.Composable import androidx.compose.runtime.staticCompositionLocalOf +import org.meshtastic.core.repository.MirrorFrame /** Null where there is no AR runtime at all: desktop and the fdroid flavor. */ @Suppress("CompositionLocalAllowlist") // A host-provided capability, like the barcode and NFC providers. @@ -28,6 +29,18 @@ interface DeviceModelArViewer { /** False on a phone the AR runtime has ruled out. Asked when a model opens, never at app start. */ @Composable fun isAvailable(): Boolean - /** [notice] is the model's own copyright line, shown with it. */ - @Composable fun Content(glb: ByteArray, title: String, notice: String?, onDismiss: () -> Unit) + /** + * [notice] is the model's own copyright line, shown with it. With [screenMin]/[screenMax] (the display glass, in + * model coordinates) and a [screenFrame], the live device screen is drawn on the model. + */ + @Composable + fun Content( + glb: ByteArray, + title: String, + notice: String?, + onDismiss: () -> Unit, + screenMin: FloatArray?, + screenMax: FloatArray?, + screenFrame: MirrorFrame?, + ) } diff --git a/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt b/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt index aa9b7892c47..d63ee53c86a 100644 --- a/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt +++ b/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt @@ -16,29 +16,39 @@ */ package org.meshtastic.feature.node.component +import android.graphics.Bitmap import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.produceState import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import com.google.android.filament.Engine +import io.github.sceneview.SceneScope import io.github.sceneview.SceneView import io.github.sceneview.createDefaultCameraManipulator import io.github.sceneview.environment.Environment import io.github.sceneview.gesture.CameraGestureDetector import io.github.sceneview.loaders.EnvironmentLoader import io.github.sceneview.loaders.ModelLoader +import io.github.sceneview.math.Direction import io.github.sceneview.math.Position +import io.github.sceneview.math.Size import io.github.sceneview.model.model import io.github.sceneview.rememberEngine import io.github.sceneview.rememberEnvironmentLoader import io.github.sceneview.rememberModelLoader import org.meshtastic.core.common.util.safeCatching +import org.meshtastic.core.repository.MirrorFormat +import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.feature.node.model.GlbBounds import java.nio.ByteBuffer +import io.github.sceneview.node.ImageNode as ImageNodeImpl /** * SceneView directly rather than the multiplatform SceneViewer, whose Android HDR path swaps out and frees its @@ -52,6 +62,8 @@ internal actual fun DeviceModelScene( onError: () -> Unit, modifier: Modifier, visible: Boolean, + screen: GlbBounds?, + screenFrame: MirrorFrame?, ) { val engine = rememberEngine() val modelLoader = rememberModelLoader(engine) @@ -74,7 +86,18 @@ internal actual fun DeviceModelScene( // Hidden, only the scene goes: the engine, its compiled materials, the probe and the camera stay for when it shows // again. if (visible && loadedEnvironment != null) { - OrbitScene(glb, engine, modelLoader, environmentLoader, loadedEnvironment, cameraManipulator, onError, modifier) + OrbitScene( + glb, + engine, + modelLoader, + environmentLoader, + loadedEnvironment, + cameraManipulator, + onError, + modifier, + ) { + if (screen != null && screenFrame != null) DeviceScreenNode(screen.min, screen.max, screenFrame) + } } } @@ -92,6 +115,7 @@ private fun OrbitScene( cameraManipulator: CameraGestureDetector.CameraManipulator, onError: () -> Unit, modifier: Modifier = Modifier, + overlay: @Composable SceneScope.() -> Unit = {}, ) { val currentOnError by rememberUpdatedState(onError) val instance = @@ -111,7 +135,56 @@ private fun OrbitScene( cameraManipulator = cameraManipulator, ) { ModelNode(modelInstance = instance) + overlay() + } +} + +/** + * The frame on a plane just proud of the display glass, facing +Z like the flasher's models. The node is created once + * and fed new bitmaps: replacing it would make SceneView re-center the whole scene on every frame. + */ +@Composable +fun SceneScope.DeviceScreenNode(screenMin: FloatArray, screenMax: FloatArray, frame: MirrorFrame) { + val screen = GlbBounds(screenMin, screenMax) + val bitmap = remember(frame) { frame.toBitmap() } ?: return + var node by remember { mutableStateOf(null) } + val first = remember { bitmap } + ImageNode( + bitmap = first, + size = Size(screen.max[0] - screen.min[0], screen.max[1] - screen.min[1]), + center = Position(screen.center[0], screen.center[1], screen.max[2] + SCREEN_LIFT_METERS), + normal = Direction(0f, 0f, 1f), + apply = { node = this }, + ) + // A swapped texture is invisible to SceneView's on-demand loop until something asks for a frame. + LaunchedEffect(bitmap, node) { + node + ?.takeIf { bitmap !== first } + ?.let { + it.bitmap = bitmap + it.requestRender() + } + } +} + +private const val SCREEN_LIFT_METERS = 0.0001f +private const val PIXELS_PER_PAGE = 8 +private const val PIXEL_ON = 0xFFE8F4FF.toInt() +private const val PIXEL_OFF = 0xFF05070A.toInt() + +/** MONO_VLSB only: byte `(y / 8) * width + x`, bit `y % 8`. */ +private fun MirrorFrame.toBitmap(): Bitmap? { + if (format != MirrorFormat.MONO_VLSB || pixels.size < (height + PIXELS_PER_PAGE - 1) / PIXELS_PER_PAGE * width) { + return null } + val argb = + IntArray(width * height) { i -> + val x = i % width + val y = i / width + val set = pixels[(y / PIXELS_PER_PAGE) * width + x].toInt() and (1 shl (y % PIXELS_PER_PAGE)) != 0 + if (set) PIXEL_ON else PIXEL_OFF + } + return Bitmap.createBitmap(argb, width, height, Bitmap.Config.ARGB_8888) } private fun orbitEye(bounds: GlbBounds): Position { diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt index 7a109f7fd9d..5d481047e53 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelDialog.kt @@ -36,6 +36,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -53,6 +54,7 @@ import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel import org.meshtastic.core.model.DeviceHardware import org.meshtastic.core.model.heroImageFile +import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.core.resources.Res import org.meshtastic.core.resources.close import org.meshtastic.core.resources.device_model_load_failed @@ -66,10 +68,17 @@ import org.meshtastic.core.ui.util.LocalDeviceModelArViewer /** The hardware's real-size 3D model, orbitable, over the whole window; the illustration when it cannot be shown. */ @Composable -fun DeviceModelDialog(deviceHardware: DeviceHardware, onDismiss: () -> Unit, modifier: Modifier = Modifier) { +fun DeviceModelDialog( + deviceHardware: DeviceHardware, + onDismiss: () -> Unit, + modifier: Modifier = Modifier, + mirrorScreen: Boolean = false, +) { val viewModel = koinViewModel() val state by viewModel.state.collectAsStateWithLifecycle() - val imageFile = deviceHardware.heroImageFile + val screenFrame = + rememberMirroredScreen(viewModel, mirrorScreen && (state as? DeviceModelState.Ready)?.screen != null) + val imageFile = modelImageFile(deviceHardware) // Both calls are idempotent, so running on every composition is safe. SideEffect { if (imageFile != null) viewModel.load(imageFile) else viewModel.markFailed() } @@ -83,12 +92,23 @@ fun DeviceModelDialog(deviceHardware: DeviceHardware, onDismiss: () -> Unit, mod OrbitContent( deviceHardware = deviceHardware, state = state, + screenFrame = screenFrame, onError = viewModel::markFailed, onDismiss = onDismiss, onOpenAr = if (arViewer != null) ({ inAr = true }) else null, visible = arModel == null, ) - arModel?.let { arViewer?.Content(it.glb, deviceHardware.displayName, it.copyright) { inAr = false } } + arModel?.let { + arViewer?.Content( + glb = it.glb, + title = deviceHardware.displayName, + notice = it.copyright, + onDismiss = { inAr = false }, + screenMin = it.screen?.min, + screenMax = it.screen?.max, + screenFrame = screenFrame, + ) + } } } } @@ -97,6 +117,7 @@ fun DeviceModelDialog(deviceHardware: DeviceHardware, onDismiss: () -> Unit, mod private fun OrbitContent( deviceHardware: DeviceHardware, state: DeviceModelState, + screenFrame: MirrorFrame?, onError: () -> Unit, onDismiss: () -> Unit, onOpenAr: (() -> Unit)?, @@ -140,6 +161,8 @@ private fun OrbitContent( onError = onError, modifier = Modifier.fillMaxSize(), visible = visible, + screen = current.screen, + screenFrame = screenFrame, ) current.copyright?.let { ModelNotice(it, Modifier.align(Alignment.BottomEnd).padding(16.dp)) @@ -151,6 +174,25 @@ private fun OrbitContent( } } +/** Arms the connected device's screen mirror while [enabled]; null when it is off. */ +@Composable +private fun rememberMirroredScreen(viewModel: DeviceModelViewModel, enabled: Boolean): MirrorFrame? { + val frame by viewModel.screenFrame.collectAsStateWithLifecycle() + DisposableEffect(enabled) { + viewModel.setMirror(enabled) + onDispose { viewModel.setMirror(false) } + } + return frame.takeIf { enabled } +} + +// SPIKE: the hardware list gives the Pocket the bare RAK4631 board's image; the flasher has its own model. +private fun modelImageFile(deviceHardware: DeviceHardware): String? = + if (deviceHardware.platformioTarget == "rak_wismesh_pocket") { + "rak_wismesh_pocket.svg" + } else { + deviceHardware.heroImageFile + } + /** * The model file's own copyright notice behind an info button, shut until tapped, as the maps carry their credit. The * text is the owner's, so it is never translated or cut. diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelViewModel.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelViewModel.kt index d358549ec4c..1ea1b67ecc5 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelViewModel.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/DeviceModelViewModel.kt @@ -19,22 +19,36 @@ package org.meshtastic.feature.node.component import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import kotlinx.coroutines.Job +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import org.koin.core.annotation.KoinViewModel +import org.meshtastic.core.repository.AdminController import org.meshtastic.core.repository.DeviceModelRepository +import org.meshtastic.core.repository.DisplayMirrorManager +import org.meshtastic.core.repository.MirrorFrame +import org.meshtastic.core.repository.RadioConfigRepository import org.meshtastic.feature.node.model.GlbBounds +import kotlin.time.Duration.Companion.seconds sealed interface DeviceModelState { data object Loading : DeviceModelState data object Failed : DeviceModelState - /** [copyright] is the model's own notice, shown wherever the model is. */ - data class Ready(val imageFile: String, val glb: ByteArray, val bounds: GlbBounds, val copyright: String?) : - DeviceModelState { + /** [copyright] is the model's own notice, shown wherever the model is; [screen] is its display glass, if marked. */ + data class Ready( + val imageFile: String, + val glb: ByteArray, + val bounds: GlbBounds, + val copyright: String?, + val screen: GlbBounds? = null, + ) : DeviceModelState { override fun equals(other: Any?): Boolean = this === other || (other is Ready && imageFile == other.imageFile && bounds == other.bounds) @@ -44,10 +58,26 @@ sealed interface DeviceModelState { /** Fetches a device's GLB and the bounds the viewer frames it with; one model at a time, the last request wins. */ @KoinViewModel -class DeviceModelViewModel(private val repository: DeviceModelRepository) : ViewModel() { +class DeviceModelViewModel( + private val repository: DeviceModelRepository, + private val displayMirrorManager: DisplayMirrorManager, + private val adminController: AdminController, + radioConfigRepository: RadioConfigRepository, +) : ViewModel() { private val _state = MutableStateFlow(DeviceModelState.Loading) val state: StateFlow = _state.asStateFlow() + /** The connected device's live screen while [setMirror] has it armed. */ + val screenFrame: StateFlow = displayMirrorManager.frame + + // Arming is an admin write, which managed mode forbids. + private val managed: StateFlow = + radioConfigRepository.localConfigFlow + .map { it.security?.is_managed == true } + .stateIn(viewModelScope, SharingStarted.Eagerly, false) + + private var mirroring = false + private var pendingDisarm: Job? = null private var loading: Job? = null private var loadedImageFile: String? = null @@ -61,7 +91,7 @@ class DeviceModelViewModel(private val repository: DeviceModelRepository) : View val bounds = glb?.let(GlbBounds::parse) _state.value = if (glb != null && bounds != null) { - DeviceModelState.Ready(imageFile, glb, bounds, GlbBounds.copyright(glb)) + DeviceModelState.Ready(imageFile, glb, bounds, GlbBounds.copyright(glb), GlbBounds.screen(glb)) } else { DeviceModelState.Failed } @@ -72,4 +102,40 @@ class DeviceModelViewModel(private val repository: DeviceModelRepository) : View fun markFailed() { _state.value = DeviceModelState.Failed } + + fun setMirror(enabled: Boolean) { + if (enabled) { + pendingDisarm?.cancel() + pendingDisarm = null + arm() + } else if (mirroring && pendingDisarm == null) { + // A rotation tears the dialog down and builds it again at once; keep the stream over that gap rather than + // disarming, re-arming and showing a blank screen until the device repaints. + pendingDisarm = viewModelScope.launch { + delay(MIRROR_DISARM_GRACE) + disarm() + } + } + } + + private fun arm() { + if (mirroring || managed.value) return + displayMirrorManager.reset() + adminController.setDisplayMirror(true) + mirroring = true + } + + private fun disarm() { + pendingDisarm = null + if (!mirroring) return + adminController.setDisplayMirror(false) + mirroring = false + } + + override fun onCleared() { + pendingDisarm?.cancel() + disarm() + } } + +private val MIRROR_DISARM_GRACE = 3.seconds diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.kt index 2864e932449..87eba3dec75 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.kt @@ -24,6 +24,7 @@ import io.github.sceneview.compose.Lighting import io.github.sceneview.compose.ModelSource import io.github.sceneview.compose.SceneViewer import io.github.sceneview.compose.rememberCameraState +import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.feature.node.model.GlbBounds import kotlin.math.PI import kotlin.math.cos @@ -48,7 +49,10 @@ internal fun orbitEyeOffset(bounds: GlbBounds): FloatArray { return floatArrayOf(horizontal * sin(azimuth), distance * sin(elevation), horizontal * cos(azimuth)) } -/** The orbitable model, lit by the studio probe over a transparent backdrop so the theme shows behind it. */ +/** + * The orbitable model, lit by the studio probe over a transparent backdrop so the theme shows behind it. When both + * [screen] and [screenFrame] are present, the frame is drawn on the model's display glass. + */ @Composable internal expect fun DeviceModelScene( glb: ByteArray, @@ -56,6 +60,8 @@ internal expect fun DeviceModelScene( onError: () -> Unit, modifier: Modifier = Modifier, visible: Boolean = true, + screen: GlbBounds? = null, + screenFrame: MirrorFrame? = null, ) /** diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.kt index 760f0325706..366dfa63937 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/detail/NodeDetailScreens.kt @@ -164,7 +164,7 @@ private fun NodeDetailScaffold( } uiState.metricsState.deviceHardware ?.takeIf { deviceModelOpen } - ?.let { DeviceModelDialog(it, onDismiss = { deviceModelOpen = false }) } + ?.let { DeviceModelDialog(it, onDismiss = { deviceModelOpen = false }, mirrorScreen = isLocalNode) } } @OptIn(ExperimentalMaterial3Api::class) diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/GlbBounds.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/GlbBounds.kt index 857a3925038..8beeca76606 100644 --- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/GlbBounds.kt +++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/model/GlbBounds.kt @@ -85,19 +85,50 @@ data class GlbBounds(val min: FloatArray, val max: FloatArray) { return if (valid) glb.decodeToString(start, start + length) else null } - private fun boundsOf(root: JsonObject): GlbBounds? { - val accessors = root["accessors"]?.jsonArray.orEmpty() - val positions = - root["meshes"]?.jsonArray.orEmpty().flatMap { mesh -> - mesh.jsonObject["primitives"]?.jsonArray.orEmpty().mapNotNull { primitive -> - primitive.jsonObject["attributes"] - ?.jsonObject - ?.get("POSITION") + /** + * Bounds of the display glass: primitives of a mesh named `screen`, or using a material named `screen`. Null + * when the model does not mark its display. + */ + fun screen(glb: ByteArray): GlbBounds? = jsonChunk(glb)?.let { chunk -> + runCatching { + val root = json.parseToJsonElement(chunk).jsonObject + val materials = + root["materials"]?.jsonArray.orEmpty().map { it.jsonObject["name"]?.jsonPrimitive?.content } + boundsOf(root) { mesh, primitive -> + mesh["name"]?.jsonPrimitive?.content.equals(SCREEN, ignoreCase = true) || + primitive["material"] ?.jsonPrimitive ?.int - ?.let { accessors[it].jsonObject } - ?.takeIf { "min" in it && "max" in it } - } + ?.let { materials.getOrNull(it) } + .equals(SCREEN, ignoreCase = true) + } + } + .getOrNull() + } + + private const val SCREEN = "screen" + + private fun boundsOf( + root: JsonObject, + include: (mesh: JsonObject, primitive: JsonObject) -> Boolean = { _, _ -> true }, + ): GlbBounds? { + val accessors = root["accessors"]?.jsonArray.orEmpty() + val positions = + root["meshes"]?.jsonArray.orEmpty().flatMap { meshElement -> + val mesh = meshElement.jsonObject + mesh["primitives"] + ?.jsonArray + .orEmpty() + .filter { include(mesh, it.jsonObject) } + .mapNotNull { primitive -> + primitive.jsonObject["attributes"] + ?.jsonObject + ?.get("POSITION") + ?.jsonPrimitive + ?.int + ?.let { accessors[it].jsonObject } + ?.takeIf { "min" in it && "max" in it } + } } if (positions.isEmpty()) return null fun axis(key: String, axis: Int) = positions.map { it.getValue(key).jsonArray[axis].jsonPrimitive.float } diff --git a/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/model/GlbBoundsTest.kt b/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/model/GlbBoundsTest.kt index 1369239600f..4863cd9a55b 100644 --- a/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/model/GlbBoundsTest.kt +++ b/feature/node/src/commonTest/kotlin/org/meshtastic/feature/node/model/GlbBoundsTest.kt @@ -62,6 +62,44 @@ class GlbBoundsTest { assertNull(GlbBounds.copyright("not a model".encodeToByteArray())) } + @Test + fun screenIsTheMeshOrMaterialNamedScreen() { + val glb = + glb( + """ + {"accessors":[ + {"min":[-0.026,0,-0.015],"max":[0.026,0.138,0.017]}, + {"min":[-0.015,0.032,0.0158],"max":[0.015,0.047,0.016]}, + {"min":[0.02,0.1,0],"max":[0.021,0.11,0.001]} + ], + "materials":[{"name":"case"},{"name":"Screen"}], + "meshes":[ + {"name":"Body","primitives":[{"attributes":{"POSITION":0},"material":0}]}, + {"name":"Glass","primitives":[{"attributes":{"POSITION":1},"material":1}]}, + {"name":"screen","primitives":[{"attributes":{"POSITION":2},"material":0}]} + ]} + """, + ) + + val screen = assertNotNull(GlbBounds.screen(glb)) + + assertContentEquals(floatArrayOf(-0.015f, 0.032f, 0f), screen.min) + assertContentEquals(floatArrayOf(0.021f, 0.11f, 0.016f), screen.max) + } + + @Test + fun noScreenWhenNothingIsNamedScreen() { + val glb = + glb( + """ + {"accessors":[{"min":[0,0,0],"max":[1,1,1]}], + "meshes":[{"primitives":[{"attributes":{"POSITION":0}}]}]} + """, + ) + + assertNull(GlbBounds.screen(glb)) + } + @Test fun rejectsNonGlbBytes() { assertNull(GlbBounds.parse("not a model".encodeToByteArray())) diff --git a/feature/node/src/iosMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.ios.kt b/feature/node/src/iosMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.ios.kt index a215eb830b4..b1f25f005ab 100644 --- a/feature/node/src/iosMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.ios.kt +++ b/feature/node/src/iosMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.ios.kt @@ -18,6 +18,7 @@ package org.meshtastic.feature.node.component import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.feature.node.model.GlbBounds @Composable @@ -27,6 +28,8 @@ internal actual fun DeviceModelScene( onError: () -> Unit, modifier: Modifier, visible: Boolean, + screen: GlbBounds?, + screenFrame: MirrorFrame?, ) { if (visible) SceneViewerModelScene(glb, bounds, onError, modifier) } diff --git a/feature/node/src/jvmMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.jvm.kt b/feature/node/src/jvmMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.jvm.kt index a215eb830b4..b1f25f005ab 100644 --- a/feature/node/src/jvmMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.jvm.kt +++ b/feature/node/src/jvmMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.jvm.kt @@ -18,6 +18,7 @@ package org.meshtastic.feature.node.component import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.feature.node.model.GlbBounds @Composable @@ -27,6 +28,8 @@ internal actual fun DeviceModelScene( onError: () -> Unit, modifier: Modifier, visible: Boolean, + screen: GlbBounds?, + screenFrame: MirrorFrame?, ) { if (visible) SceneViewerModelScene(glb, bounds, onError, modifier) } From 4a706dc0548dc92e5ba6e7d23a8e2a27b097e8ed Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 18:32:39 -0500 Subject: [PATCH 33/34] fix(node): save the AR picture on the injected IO dispatcher --- .../src/google/kotlin/org/meshtastic/app/node/ArCapture.kt | 6 +++--- .../kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt | 5 ++++- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/androidApp/src/google/kotlin/org/meshtastic/app/node/ArCapture.kt b/androidApp/src/google/kotlin/org/meshtastic/app/node/ArCapture.kt index 2f3daec7f65..54aa3a2fdd7 100644 --- a/androidApp/src/google/kotlin/org/meshtastic/app/node/ArCapture.kt +++ b/androidApp/src/google/kotlin/org/meshtastic/app/node/ArCapture.kt @@ -30,7 +30,7 @@ import android.view.View import android.view.ViewGroup import androidx.annotation.RequiresApi import androidx.core.view.children -import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.withContext import java.text.SimpleDateFormat @@ -46,7 +46,7 @@ private const val JPEG_QUALITY = 92 * drawn over it. The scene renders every camera frame, so the surface is never stale. Null when nothing was saved. */ @RequiresApi(Build.VERSION_CODES.Q) -internal suspend fun captureArScene(root: View, title: String): Uri? { +internal suspend fun captureArScene(root: View, title: String, io: CoroutineDispatcher): Uri? { val surface = root.findSurfaceView()?.takeIf { it.width > 0 && it.height > 0 } ?: return null val bitmap = Bitmap.createBitmap(surface.width, surface.height, Bitmap.Config.ARGB_8888) val copied = suspendCancellableCoroutine { continuation -> @@ -57,7 +57,7 @@ internal suspend fun captureArScene(root: View, title: String): Uri? { Handler(Looper.getMainLooper()), ) } - return if (copied) withContext(Dispatchers.IO) { saveToPictures(root.context, bitmap, title) } else null + return if (copied) withContext(io) { saveToPictures(root.context, bitmap, title) } else null } private fun View.findSurfaceView(): SurfaceView? = when (this) { diff --git a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt index 2a2ac0bdce6..a9c5e238b99 100644 --- a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt +++ b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt @@ -99,6 +99,8 @@ import io.github.sceneview.rememberOnGestureListener import kotlinx.coroutines.launch import org.jetbrains.compose.resources.StringResource import org.jetbrains.compose.resources.stringResource +import org.koin.compose.koinInject +import org.meshtastic.core.di.CoroutineDispatchers import org.meshtastic.core.resources.Res import org.meshtastic.core.resources.close import org.meshtastic.core.resources.device_model_capture @@ -385,13 +387,14 @@ private fun rememberArCapture(title: String): (() -> Unit)? { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) return null val view = LocalView.current val scope = rememberCoroutineScope() + val dispatchers = koinInject() val haptic = LocalHapticFeedback.current val saved = stringResource(Res.string.device_model_capture_saved) val failed = stringResource(Res.string.device_model_capture_failed) return { haptic.performHapticFeedback(HapticFeedbackType.LongPress) scope.launch { - val uri = captureArScene(view.rootView, title) + val uri = captureArScene(view.rootView, title, dispatchers.io) Toast.makeText(view.context, if (uri != null) saved else failed, Toast.LENGTH_SHORT).show() } } From 22eed342d17e8495225e7c8f414679fbd79e7f83 Mon Sep 17 00:00:00 2001 From: James Rich <2199651+jamesarich@users.noreply.github.com> Date: Fri, 16 Oct 2026 18:48:20 -0500 Subject: [PATCH 34/34] spike(node): swap the screen texture in a SideEffect, and name the AR glass bounds --- .../org/meshtastic/app/node/DeviceModelArViewer.kt | 12 +++++++----- .../node/component/SceneViewerPlatform.android.kt | 5 ++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt index 1e59a65d9f7..5e4dbfb89c7 100644 --- a/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt +++ b/androidApp/src/google/kotlin/org/meshtastic/app/node/DeviceModelArViewer.kt @@ -99,9 +99,9 @@ import io.github.sceneview.rememberOnGestureListener import kotlinx.coroutines.launch import org.jetbrains.compose.resources.StringResource import org.jetbrains.compose.resources.stringResource -import org.meshtastic.core.repository.MirrorFrame import org.koin.compose.koinInject import org.meshtastic.core.di.CoroutineDispatchers +import org.meshtastic.core.repository.MirrorFrame import org.meshtastic.core.resources.Res import org.meshtastic.core.resources.close import org.meshtastic.core.resources.device_model_capture @@ -280,10 +280,12 @@ private fun DeviceModelArScene(glb: ByteArray, screen: ArScreen, onCapture: (() position = Position(offset[0], offset[1], offset[2]), rotation = Rotation(x = pose.pitchDegrees, z = pose.rollDegrees), ) { - val min = screen.min - val max = screen.max + val glassMin = screen.glassMin + val glassMax = screen.glassMax val frame = screen.frame - if (min != null && max != null && frame != null) DeviceScreenNode(min, max, frame) + if (glassMin != null && glassMax != null && frame != null) { + DeviceScreenNode(glassMin, glassMax, frame) + } } } } @@ -436,4 +438,4 @@ private tailrec fun Context.findActivity(): Activity? = when (this) { } /** The display glass in model coordinates and the live frame to draw on it; all null when there is nothing to show. */ -private class ArScreen(val min: FloatArray?, val max: FloatArray?, val frame: MirrorFrame?) +private class ArScreen(val glassMin: FloatArray?, val glassMax: FloatArray?, val frame: MirrorFrame?) diff --git a/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt b/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt index d63ee53c86a..a9a34e751ae 100644 --- a/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt +++ b/feature/node/src/androidMain/kotlin/org/meshtastic/feature/node/component/SceneViewerPlatform.android.kt @@ -19,7 +19,6 @@ package org.meshtastic.feature.node.component import android.graphics.Bitmap import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.SideEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -157,9 +156,9 @@ fun SceneScope.DeviceScreenNode(screenMin: FloatArray, screenMax: FloatArray, fr apply = { node = this }, ) // A swapped texture is invisible to SceneView's on-demand loop until something asks for a frame. - LaunchedEffect(bitmap, node) { + SideEffect { node - ?.takeIf { bitmap !== first } + ?.takeIf { it.bitmap !== bitmap } ?.let { it.bitmap = bitmap it.requestRender()

  2. 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