tychovrahe
c3cfb0af2f
chore(core): add BLE to bootloader emulator
...
[no changelog]
2025-07-02 15:10:42 +02:00
tychovrahe
ac5fa0a5d8
fix(core): add timeout to nrf uart communication
...
[no changelog]
2025-07-02 14:41:21 +02:00
Roman Zeyde
6443f489f5
feat(core): use multi-item menus for Solana staking
2025-07-02 12:09:42 +03:00
Roman Zeyde
47265ce850
test(core): expose whether Caesar Flow
has a menu via LayoutContent
...
It is used to improve UI tests' coverage for new info menus.
[no changelog]
2025-07-02 12:09:42 +03:00
Roman Zeyde
f6ec199732
fix(core): return SimpleChoice
items' count in ButtonRequest.pages
...
[no changelog]
2025-07-02 12:09:42 +03:00
tychovrahe
c3410adea6
chore(core/tools): remove obsolete python 3.7 support from tools/alloc.py
...
[no changelog]
2025-07-02 10:52:01 +02:00
tychovrahe
981ddb046f
style: allow python style check in tools
...
[no changelog]
2025-07-02 10:52:01 +02:00
tychovrahe
438fb2554c
chore(core): update embedded QA bootloader for T3W1 and embedded nRF firmware
...
[no changelog]
2025-07-01 21:18:10 +02:00
tychovrahe
12b4d46691
feat(nordic,core): change device code to single byte value
...
[no changelog]
2025-07-01 21:18:10 +02:00
tychovrahe
ab4d9d49bd
feat(nordic,core): enable multiple BLE connection to allow easy connection switching
...
[no changelog]
2025-07-01 21:18:10 +02:00
tychovrahe
62fbc019b9
fix(core): improve reliability of nrf update
...
[no changelog]
2025-07-01 19:25:48 +02:00
tychovrahe
d5d921d3d4
feat(core/prodtest): add nrf update command & script
...
[no changelog]
2025-07-01 19:25:48 +02:00
Ioan Bizău
18733451e9
release: sign translations
2025-07-01 12:30:13 +02:00
tychovrahe
351c6da4be
perf(core/bootloader): lazy initialize display in bootloader
...
[no changelog]
2025-07-01 12:24:52 +02:00
tychovrahe
fc125f7e87
perf(core/bootloader): remove tropic from bootloader
...
[no changelog]
2025-07-01 12:24:52 +02:00
tychovrahe
fdc9cfdc94
perf(core/bootloader): remove optiga from bootloader
...
[no changelog]
2025-07-01 12:24:52 +02:00
tychovrahe
f966119817
fix(core/bootloader): close booloader BLE pairing mode dialog on disconnect
...
[no changelog]
2025-07-01 12:24:35 +02:00
Roman Zeyde
a4ea85bd75
feat(core): support external menu for Caesar confirm_summary
...
[no changelog]
2025-07-01 11:15:11 +03:00
Roman Zeyde
67f2883718
feat(core): implement multi-line selection layout for Caesar
...
Also refactor choice-related layout logic, while avoiding UI fixture diffs.
[no changelog]
2025-07-01 11:15:11 +03:00
Roman Zeyde
958418976e
feat(core): implement hierarchical information menus for Caesar
...
[no changelog]
2025-07-01 11:15:09 +03:00
Roman Zeyde
2818bb3e5f
chore(core): remove unused ChoiceItem::with_font()
method
...
[no changelog]
2025-07-01 11:14:36 +03:00
Roman Zeyde
f7e9148218
feat(core): allow splitting text into lines according to max_width
...
It will be used by multi-line select menus.
[no changelog]
2025-07-01 11:14:36 +03:00
Roman Zeyde
31482b0825
feat(core): add Rect::split_center_by_height()
method
...
[no changelog]
2025-07-01 11:14:36 +03:00
Lukas Bielesch
da5b526630
chore(core/eckhart): unify action bar cancel styles
...
[no changelog]
2025-07-01 08:10:23 +02:00
Lukas Bielesch
b6a447460b
fix(rust): fix clippy warnings
...
[no changelog]
2025-07-01 08:10:23 +02:00
Lukas Bielesch
367bf53ff2
feat(core/delizia): add provider address in eth approve
...
when approving known contract, the provider address can be shown in the menu
2025-06-30 23:49:47 +02:00
Lukas Bielesch
4d2c676f3c
chore(core/eckhart): Update ETH approve flow
...
[no changelog]
2025-06-30 23:49:47 +02:00
Lukas Bielesch
4c709bdb53
chore(core/eckhart): increase font for keypad input
...
- passphrase, pin, mnemonic keyboards
[no changelog]
2025-06-30 22:55:42 +02:00
Roman Zeyde
4aadfa1f4f
ci(core): make sure emulators are not failing on startup
...
[no changelog]
2025-06-30 18:43:42 +03:00
Lukas Bielesch
a56c5448e9
chore(core): new FwUI function for public key
2025-06-30 10:42:08 +02:00
Lukas Bielesch
59d5f14ad7
chore(core): increase ParagraphVecLong size
2025-06-30 10:42:08 +02:00
Lukas Bielesch
aa74ab922d
chore(core/eckhart): update show_address flow
2025-06-30 10:42:08 +02:00
Andrew Kozlik
0c5e71e973
feat(core): Support pairing secret derivation from master key in prodtest.
...
[no changelog]
2025-06-28 09:52:37 +02:00
Andrew Kozlik
d933598df4
feat(core): Implement derivation from master key in secret API.
...
[no changelog]
2025-06-28 09:52:37 +02:00
tychovrahe
32c4d9f105
refactor(core/bootloader): remove obsolete antiglitch protection
...
[no changelog]
2025-06-27 16:50:59 +02:00
tychovrahe
a09e6f04d4
fix(core/prodtest): fix prodtest mpu setting
...
[no changelog]
(cherry picked from commit 48459a09dd
)
2025-06-26 17:08:58 +02:00
tychovrahe
48459a09dd
fix(core/prodtest): fix prodtest mpu setting
...
[no changelog]
2025-06-26 17:04:47 +02:00
Lukas Bielesch
b2c8f23cc7
chore(core/prodtest): bump version to 0.3.1
...
[no changelog]
2025-06-26 13:51:00 +02:00
Lukas Bielesch
9b51d51773
chore(translations): alphabetically reorder json entries
...
[no changelog]
2025-06-26 13:51:00 +02:00
Lukas Bielesch
0b4520c8d0
chore(core): bump version to 2.9.1
...
[no changelog]
2025-06-26 13:51:00 +02:00
kopecdav
d0c1458a19
feat(core/prodtest): add pm-new-soc-estimate command.
...
[no changelog]
2025-06-26 13:36:09 +02:00
kopecdav
d6e0a02ac7
fix(core): fix soc limit during battery initialization
...
[no changelog]
2025-06-26 13:36:09 +02:00
Roman Zeyde
e33d1938e6
chore(core): remove unused import in bl_confirm.rs
...
[no changelog]
2025-06-26 13:38:45 +03:00
Roman Zeyde
17c866fb7c
chore(core): remove unused ChoiceItem
method
...
[no changelog]
2025-06-26 13:38:45 +03:00
Lukas Bielesch
e2b8206b9b
fix(build): T2B1 changelog
2025-06-26 10:38:39 +02:00
tychovrahe
3fa5d4e71a
feat(core/bootloader): add restart button after unlock/wipe device success
...
[no changelog]
2025-06-26 09:37:44 +02:00
tychovrahe
a2596ef28d
fix(core/bootloader): fix overflow wipe progress calculation
...
[no changelog]
2025-06-26 09:37:44 +02:00
Ondřej Vejpustek
b1b4095ad0
feat(core/prodtest): support eddsa
...
[no changelog]
2025-06-25 15:41:03 +02:00
Ondřej Vejpustek
be7236076f
feat(core/prodtest): parse algorithm identifier
...
[no changelog]
2025-06-25 15:41:03 +02:00
Ondřej Vejpustek
a684d6f1ed
refactor(core/prodtest): check subject common name
2025-06-25 15:41:03 +02:00
Ondřej Vejpustek
f55d5e5c5e
refactor(core/prodtest): extract verify_signature
...
[no changelog]
2025-06-25 15:41:03 +02:00
Ondřej Vejpustek
54c5b41c4f
refactor(core/prodtest): factor out check_cert_chain
...
[no changelog]
2025-06-25 15:41:03 +02:00
kopecdav
980d685653
fix(core/tools): fix combine tool script.
...
[no changelog]
2025-06-25 14:28:34 +02:00
kopecdav
0f6f9bc074
feat(core/prodtest): update wpc-info command to return machine readable data.
...
[no changelog]
2025-06-25 14:28:34 +02:00
cepetr
bec455c9e5
feat(core): manage background ops during suspend
...
[no changelog]
2025-06-25 10:54:20 +02:00
cepetr
995caca9c7
feat(core): add rtc wake-up callback
...
[no changelog]
2025-06-25 10:54:20 +02:00
cepetr
4672745a5b
feat(core/prodtest): improve pm-suspend command
...
[no changelog]
2025-06-25 10:54:20 +02:00
cepetr
efa64647f4
refactor(core): move stwlc38 io to the board definition
...
[no changelog]
2025-06-25 10:54:20 +02:00
cepetr
0eb08f09fa
feat(core): wake up on power-up
...
[no changelog]
2025-06-25 10:54:20 +02:00
cepetr
95c9bf4148
feat(core): pm_suspend with wakeup flags
...
[no changelog]
2025-06-25 10:54:20 +02:00
cepetr
564743ef7e
refactor(core): introduce suspend module
...
[no changelog]
2025-06-25 10:54:20 +02:00
cepetr
b35c7b40ba
fix(core): fix rtc wake-up from suspend mode
...
[no changelog]
2025-06-25 10:54:20 +02:00
Roman Zeyde
1fc9d6e90f
build(core): fix T2B1 build
...
[no changelog]
2025-06-25 09:43:49 +03:00
cepetr
e6e7d84c44
fix(core): fix RSOD handling in secmon
...
[no changelog]
2025-06-25 08:31:58 +02:00
tychovrahe
243f04fbf2
fix(core): remove unnecessary fading
...
[no changelog]
2025-06-24 19:17:17 +02:00
tychovrahe
e281f145b3
fix(core): remove boot stage 1 from Eckhart UI
...
[no changelog]
2025-06-24 19:17:17 +02:00
tychovrahe
e53cddf65e
refactor(core): make secret api more versatile, secret layout model dependent
...
[no changelog]
2025-06-24 19:16:55 +02:00
Lukas Bielesch
bd822f82df
chore(build): changelog
2025-06-24 17:44:27 +02:00
Lukas Bielesch
b5403f9fdb
chore(build): update definitions timestamps
2025-06-24 16:44:10 +02:00
Lukas Bielesch
2a6189c3ae
chore(translations): add missing foreign translations
...
- fix typo in translation key
[no changelog]
2025-06-24 16:36:01 +02:00
tychovrahe
8c187c7c31
fix(core): reboot device after bootloader upgrade
...
[no changelog]
2025-06-24 14:58:11 +02:00
tychovrahe
548f29eb3f
fix(core): RSOD on attempted illegal bootloader downgrade
...
[no changelog]
2025-06-24 14:58:11 +02:00
tychovrahe
2d35af7105
fix(core): check bootloader integrity before update
...
[no changelog]
2025-06-24 14:58:11 +02:00
tychovrahe
a3c1f197ce
feat(core/prodtest): add command for bootloader update, along with script for sending the data
2025-06-24 14:58:11 +02:00
tychovrahe
9f2dec6169
refactor(core): update bootloader from coreapp, using syscalls (and smcalls)
...
[no changelog]
2025-06-24 14:58:11 +02:00
Ioan Bizău
f5123c8b3f
chore(core): add 1inch and LiFI addresses
...
[no changelog]
2025-06-24 13:56:03 +02:00
Lukas Bielesch
a403524f72
chore(core): add compulsory data param to props
...
[no changelog]
2025-06-24 12:08:42 +02:00
Lukas Bielesch
5ade9204e4
feat(core): add new data mono fonts
...
[no changelog]
2025-06-24 12:08:42 +02:00
Ioan Bizău
320ee7b044
refactor(core): separate BLE and THP pairing code screens
...
[no changelog]
2025-06-24 10:27:17 +02:00
Ioan Bizău
785f52f082
refactor(eckhart): move pairing cancel button to menu
...
[no changelog]
2025-06-24 10:27:17 +02:00
Lukas Bielesch
a7f6bf5bda
chore(core/eckhart): update warnings
2025-06-23 15:48:23 +02:00
Lukas Bielesch
f32d747f88
chore(core): promote multiple_accounts_warning to danger
...
- for eckhart and delizia layouts
2025-06-23 15:48:23 +02:00
Lukas Bielesch
5272f2af8f
chore(core/eckhart): fix send title
...
[no changelog]
2025-06-23 15:48:23 +02:00
Lukas Bielesch
590dcb9e56
chore(core/translations): ensure consistent German translation for 'labeling'
...
[no changelog]
2025-06-23 12:44:59 +02:00
obrusvit
3bf0aaf08e
feat(eckhart): implement hold_danger
...
[no changelog]
2025-06-23 12:03:25 +02:00
obrusvit
ee8bba40b2
feat(core): allow ProgressLayout with danger
...
- adds `danger` parameter to `show_progress` which can be used by
individual layout implementations to render a loader with a sever color
- this feature is used for wipe device handler
- this feature is implemented for Eckhart layout in this commit
[no changelog]
2025-06-23 12:03:25 +02:00
obrusvit
c73351f6df
refactor(core): update some Eckhart FW text styles
...
[no changelog]
2025-06-23 10:16:32 +02:00
obrusvit
41bc018eb9
feat(core): update Eckhart bootloader
...
- Menu: reorg buttons, labels, styling
- ErrorScreen: show "Wait for device restart" in the bar area and move
footer message above that
- UpdateScreen
[no changelog]
2025-06-23 10:16:32 +02:00
tychovrahe
1312054ba9
fix(core): fix install fw confirm title issue
2025-06-20 16:11:08 +02:00
Roman Zeyde
7c45ce6522
chore(core): fix "trezor" -> "Trezor"
...
Also, remove duplicated `coinjoin__title_do_not_disconnect` string.
[no changelog]
2025-06-20 14:40:13 +03:00
Roman Zeyde
4633611d1b
test(core): don't wait on StatusScreen if animation is disabled
...
[no changelog]
2025-06-20 14:07:52 +03:00
Roman Zeyde
f331b133e3
feat(core): join active workflows before restart
...
It should support asynchronous "success" confirmation layouts
for address, public key and signature confirmation flows.
[no changelog]
2025-06-20 14:07:52 +03:00
Roman Zeyde
23cde4ed72
Revert "feat(core): send address & public key response before showing StatusScreen
"
...
This reverts commit 946fc89449
.
2025-06-20 14:07:52 +03:00
Roman Zeyde
1571da5e18
Revert "feat(core): add success screen to transactions' signature flow"
...
This reverts commit 1bdc48a73f
.
2025-06-20 14:07:52 +03:00
kopecdav
3b154a4389
fix(core): remove wpc gradual charging
...
[no changelog]
2025-06-20 09:41:28 +02:00
cepetr
c17ce0e89e
feat(core): wake up from suspend mode after timeout
...
[no changelog]
2025-06-19 14:25:53 +02:00
tychovrahe
ea889e109e
fix(core): move external tamper enable to secmon and only in production builds
...
[no changelog]
2025-06-19 10:38:51 +02:00
Roman Zeyde
97b8833746
chore(core): use ERROR_NOT_IMPLEMENTED
in Eckhart's ui_firmware.rs
...
[no changelog]
2025-06-19 07:48:45 +03:00
Roman Zeyde
8d1eb777fc
feat(core): delay passphrase on host prompt
2025-06-18 15:22:05 +03:00
Martin Milata
c16d375abc
refactor(core): eckhart: add close button to THP pairing UI
...
[no changelog]
2025-06-18 13:11:12 +02:00
Roman Zeyde
8fbe005186
refactor(core): wrap coverage data map with spin::RwLock
...
It allows us to avoid the `unsafe` blocks (due to `static mut` references).
[no changelog]
2025-06-17 17:09:30 +03:00
Roman Zeyde
365116be52
refactor(core): use Qstr
instead of StrBuffer
in coverage::Key
...
It allows `coverage::Key` to be `Send` & `Sync` - otherwise,
wrapping coverage data with a `spin::Mutex` will fail due to:
```
error[E0277]: `*const u8` cannot be sent between threads safely
--> src/coverage/mod.rs:49:23
|
49 | static COVERAGE_DATA: Mutex<FnvIndexMap<Key, u64, { 1024 * 1024 }>> =
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `*const u8` cannot be sent between threads safely
|
= help: within `IndexMap<Key, u64, hash32::BuildHasherDefault<hash32::fnv::Hasher>, 1048576>`, the trait `Send` is not implemented for `*const u8`
note: required because it appears within the type `StrBuffer`
```
[no changelog]
2025-06-17 17:09:30 +03:00
cepetr
275fe3f17d
feat(core): enable bkram retention in vbat mode
...
[no changelog]
2025-06-17 15:34:07 +02:00
Roman Zeyde
f1a4120878
fix(core): re-add logging level filtering
...
[no changelog]
2025-06-17 12:46:37 +03:00
kopecdav
b159269ce4
refactor(core): fix tamper RSOD label
...
[no changelog]
2025-06-17 10:28:54 +02:00
tychovrahe
dc0877a70d
fix(core): remove charging enable hysteresis when 100% SOC limit is set
...
[no changelog]
2025-06-16 20:53:15 +02:00
tychovrahe
41c361babb
fix(core): fix full battery detection
...
[no changelog]
2025-06-16 20:53:15 +02:00
Roman Zeyde
f4e65fd8e3
fix(core): don't enter/exit menu via horizontal swipe on Delizia
...
Following #5189 .
2025-06-16 18:29:56 +03:00
Roman Zeyde
0d87266bfc
fix(core): don't enter/exit menu via horizontal swipe on Bolt
2025-06-16 18:29:56 +03:00
Roman Zeyde
6d35f047b8
chore(core): inline SwipeFlow::render_state
...
[no changelog]
2025-06-16 17:35:07 +03:00
Roman Zeyde
6eb0458b7c
chore(core): remove unused SwipeFlow
field
...
[no changelog]
2025-06-16 17:35:07 +03:00
M1nd3r
3d8eab3515
chore(core): remove DebugLinkToggleThpPairingDialog
...
[no changelog]
2025-06-16 14:53:13 +02:00
cepetr
2b41fbd6bf
fix(core): enable backup ram ECC
...
[no changelog]
2025-06-16 11:52:17 +02:00
cepetr
29cd9c1d92
feat(core): power-fail-safe backup ram driver
...
[no changelog]
2025-06-16 11:52:17 +02:00
Roman Zeyde
2a29e4ea47
fix(core): correct a small typo in screen_update()
...
[no changelog]
2025-06-16 10:52:58 +03:00
obrusvit
107960ebbe
fix(emu): use same key for screenshots
...
- firmware emu uses `p` for power button and `s` for screenshot. So use
`s` also for bootloader and prodtest emu screenshots.
[no changelog]
2025-06-13 21:52:25 +02:00
obrusvit
af02e5e6a2
feat(eckhart): improve Homescreen styling
...
- correct Homebar icons
- colors and gradients
- LED usage
- Hint changes: add pad and cleanup some unused code
[no changelog]
2025-06-13 19:36:51 +02:00
obrusvit
2196a5f785
refactor(core): cleanup homescreen params
...
- rename FirmwareUI::show_homescreen param name from `hold` to
`lockable` because hold or hold_to_lock no longer covers all layouts
- cleanup uPy notification params
[no changelog]
2025-06-13 19:36:51 +02:00
Lukas Bielesch
5104872010
chore(core/eckhart): extend pin/pp touch area
...
[no changelog]
2025-06-13 19:15:26 +02:00
Martin Milata
200eac6384
refactor(core): exclude THP related string identifiers from non-THP builds
...
[no changelog]
2025-06-13 15:58:33 +02:00
Martin Milata
95ecbbed8b
feat(common): add Trezor Host Protocol protobuf definitions
...
[no changelog]
2025-06-13 15:58:33 +02:00
tychovrahe
b83889457b
feat(core): introduce IWDG driver
...
[no changelog]
2025-06-13 13:59:10 +02:00
cepetr
ff2d4edaef
fix(core): remove unnecessary non-secure variant of irq_lock/unlock
...
[no changelog]
2025-06-13 11:23:54 +02:00
Lukas Bielesch
ecbb71232e
chore(rust): increase max text ops
...
[no changelog]
2025-06-13 11:22:55 +02:00
Lukas Bielesch
023c8fc140
chore(core/eckhart): update check recovery flow
...
[no changelog]
2025-06-13 11:22:55 +02:00
Roman Zeyde
acbace7c3e
fix(core): use correct size in STMPE811 touch_init()
...
[no changelog]
2025-06-12 18:17:55 +03:00
Roman Zeyde
7f5a8b29c6
fix(core): use correct size in workflow_ifaces_init()
...
[no changelog]
2025-06-12 18:17:55 +03:00
tychovrahe
a67ccb8c40
refactor(core): refactor nrf, disable uart in booloader to save flash space
...
[no changelog]
2025-06-12 15:36:31 +02:00
Lukas Bielesch
3fa185703e
feat(core): use OpTextLayout::add_ functions to reduce stack usage
2025-06-12 10:07:23 +02:00
obrusvit
f0865e3b10
feat(eckhart): fuel gauge UI
...
- fuel gauge (battery state) with icons for charging/discharging state
and soc percentage
- on attach on Homescreen ActionBar
- permanently on the first DeviceMenu subscreen
- temporarily in the Header on charging state update
[no changelog]
2025-06-11 23:39:28 +02:00
obrusvit
17d6dd4a55
chore(core): remove battery from show_device_menu
...
- the battery status changes are now propagated into Components by
Event::PM
[no changelog]
2025-06-11 23:39:28 +02:00
obrusvit
f04edf3a28
feat(core): battery updates in FW event loop
...
[no changelog]
2025-06-11 23:39:28 +02:00
cepetr
765fe76b44
fix(core): fix write to otp memory (U5 only)
...
[no changelog]
2025-06-11 12:21:29 +02:00
kopecdav
5729416c4f
fix(core): Update more accurate battery model + fuel gauge config tral v2.
...
[no changelog]
2025-06-11 12:15:12 +02:00
cepetr
2a50a58b92
fix(core): handle nmi, hard fault and bus fault in secure mode
...
[no changelog]
2025-06-11 11:49:42 +02:00
cepetr
3d2a9c93a9
feat(core): add details for fault and fatal error RSOD
...
[no changelog]
2025-06-11 11:49:42 +02:00
cepetr
e8a5d11e5d
fix(core): fix rsod message alignment on bolt
...
[no changelog]
2025-06-11 11:49:42 +02:00
cepetr
09a4b2dca0
feat(core): add pc to systask_postmortem_info
...
[no changelog]
2025-06-11 11:49:42 +02:00
tychovrahe
ce3eae95a4
feat(core/bootloader): menu item reboot always active
2025-06-11 09:57:47 +02:00
tychovrahe
2f24d1f022
fix(core/bootloader): turn off led when leaving charging signalization
...
[no changelog]
2025-06-11 09:57:47 +02:00
cepetr
dc69976a99
feat(core): move backup_ram driver to secmon
...
[no changelog]
2025-06-11 09:48:19 +02:00
cepetr
6bea09bbe7
fix(core): fix firmware hash calculation
...
[no changelog]
2025-06-11 09:46:37 +02:00
Roman Zeyde
4095add475
fix(core): expose logging functions also on non-debug builds
...
[no changelog]
2025-06-11 10:26:09 +03:00
Roman Zeyde
30840d7cbf
perf(core): rewrite trezor.log
and trezor.wire_log
in Rust
...
Requires https://github.com/trezor/micropython/pull/26 .
[no changelog]
2025-06-11 10:26:09 +03:00
Roman Zeyde
90bd4735c2
perf(core): benchmark log
...
[no changelog]
2025-06-11 10:26:09 +03:00
Roman Zeyde
a9f59f6dd6
style(core): fix a few Rust lints
...
[no changelog]
2025-06-11 09:58:08 +03:00
tychovrahe
f2564573eb
fix(core/prodtest): fix prodtest emulator build
...
[no changelog]
2025-06-11 08:39:49 +02:00
Roman Zeyde
0cf22ece39
test(core): don't call clear_gc_info()
when PYOPT=1
...
[no changelog]
2025-06-10 18:33:16 +03:00
M1nd3r
dd76266de5
chore: add THP FailureTypes
...
[no changelog]
2025-06-10 17:00:06 +02:00
Roman Zeyde
6f28b96733
test(core): collect GC statistics via new debug RPC
...
[no changelog]
2025-06-10 12:16:12 +03:00