Dualsense Gyro has high noise over Moonlight-qt
Is there an existing issue for this?
- [x] I have searched the existing issues
Is your issue described in the documentation?
- [x] I have read the documentation
Is your issue present in the latest beta/pre-release?
This issue is present in the latest pre-release
Describe the Bug
Gyro is extremely noisy using Dualsense controller (haven't tested PS4 controller), Any slight movements, even extremely minor, results in very extreme jerking motions on screen. Moving extremely quick in one direction, and sometimes just as quickly snapping back just as quickly to about the original location. With being able to attach the videos here, the best way I can describe the behaviour is noisy.
Using the Steam Input gyro calibrator I can see the Translation (up, down, left, right) Noise Levels (second bar, on the Gyro Calibration Tolerance detection page) is also showing the jerky noise. The only way to get it to show 0 noise, is if the controller is 100% still. So the issue only occurs when there is any gyro input.
Have videos of issue. But not sure the best place to send them.
When using the same controller connected wired or over bluetooth to the host, there are no issues. Gyro works as expected.
Expected Behavior
Gyro shouldn't have gyro noise, and should match the behaviour of controller connected directly to host.
Additional Context
Tested:
- Latest Sunshine
- Pre-release Sunshine
- Latest Moonlight-qt
- Built from source Moonlight-qt
Client Devices:
- MacOS
- Steam Deck
Executing: sudo setfacl -m g:input:rw /dev/uhid to fix known issue with recognising Dualsense controller correctly
https://github.com/LizardByte/Sunshine/issues/3758
Attached videos of behaviour in game, and gyro calibration within Steam Input
Host Operating System
Linux
Operating System Version
Arch Linux (Kernal 6.15.1-arch1-2)
Architecture
amd64/x86_64
Sunshine commit or version
v2025.609.163957
Package
Linux - LizardByte/pacman-repo
GPU Type
NVIDIA
GPU Model
RTX 2080 Super
GPU Driver/Mesa Version
575.57.08
Capture Method
wlroots (Linux)
Config
encoder = nvenc
global_prep_cmd = [{"do":"hyprctl output create headless HL-1","undo":"hyprctl output remove HL-1"},{"do":"sh -c \"hyprctl keyword monitor HL-1,${SUNSHINE_CLIENT_WIDTH}x${SUNSHINE_CLIENT_HEIGHT}@${SUNSHINE_CLIENT_FPS},auto-right,1\"","undo":"hyprctl keyword monitor HL-1,2560x$1440@60,auto-right,1"},{"do":"hyprctl dispatch workspace 10","undo":"hyprctl dispatch workspace 1"}]
nvenc_preset = 1
output_name = 2
stream_audio = true
Apps
Relevant log output
❯ sunshine
[2025-06-14 09:41:45.508517] [0x00007fa5bd62b000] [info] config: 'stream_audio' = true
[2025-06-14 09:41:45.508541] [0x00007fa5bd62b000] [info] config: 'output_name' = 2
[2025-06-14 09:41:45.508544] [0x00007fa5bd62b000] [info] config: 'nvenc_preset' = 1
[2025-06-14 09:41:45.508547] [0x00007fa5bd62b000] [info] config: 'global_prep_cmd' = [{"do":"hyprctl output create headless HL-1","undo":"hyprctl output remove HL-1"},{"do":"sh -c \"hyprctl keyword monitor HL-1,${SUNSHINE_CLIENT_WIDTH}x${SUNSHINE_CLIENT_HEIGHT}@${SUNSHINE_CLIENT_FPS},auto-right,1\"","undo":"hyprctl keyword monitor HL-1,2560x$1440@60,auto-right,1"},{"do":"hyprctl dispatch workspace 10","undo":"hyprctl dispatch workspace 1"}]
[2025-06-14 09:41:45.508550] [0x00007fa5bd62b000] [info] config: 'encoder' = nvenc
[2025-06-14 09:41:45.508]: Info: Sunshine version: v2025.609.163957
[2025-06-14 09:41:45.508]: Info: Package Publisher: LizardByte
[2025-06-14 09:41:45.508]: Info: Publisher Website: https://app.lizardbyte.dev
[2025-06-14 09:41:45.508]: Info: Get support: https://app.lizardbyte.dev/support
[2025-06-14 09:41:45.508]: Info: config: 'encoder' = nvenc
[2025-06-14 09:41:45.508]: Info: config: 'global_prep_cmd' = [{"do":"hyprctl output create headless HL-1","undo":"hyprctl output remove HL-1"},{"do":"sh -c \"hyprctl keyword monitor HL-1,${SUNSHINE_CLIENT_WIDTH}x${SUNSHINE_CLIENT_HEIGHT}@${SUNSHINE_CLIENT_FPS},auto-right,1\"","undo":"hyprctl keyword monitor HL-1,2560x$1440@60,auto-right,1"},{"do":"hyprctl dispatch workspace 10","undo":"hyprctl dispatch workspace 1"}]
[2025-06-14 09:41:45.508]: Info: config: 'nvenc_preset' = 1
[2025-06-14 09:41:45.508]: Info: config: 'output_name' = 2
[2025-06-14 09:41:45.508]: Info: config: 'stream_audio' = true
(sunshine:11395): libayatana-appindicator-WARNING **: 09:41:45.543: libayatana-appindicator is deprecated. Please use libayatana-appindicator-glib in newly written code.
[2025-06-14 09:41:45.545]: Info: System tray created
[2025-06-14 09:41:45.567]: Error: Failed to create session:
[2025-06-14 09:41:45.567]: Info: Found display [wayland-1]
[2025-06-14 09:41:45.567]: Info: Found interface: zxdg_output_manager_v1(9) version 3
[2025-06-14 09:41:45.567]: Info: Found interface: zwlr_screencopy_manager_v1(41) version 3
[2025-06-14 09:41:45.567]: Info: Found interface: zwp_linux_dmabuf_v1(59) version 5
[2025-06-14 09:41:45.567]: Info: Found interface: wl_output(60) version 4
[2025-06-14 09:41:45.567]: Info: Found interface: wl_output(61) version 4
[2025-06-14 09:41:45.567]: Info: Resolution: 3440x1440
[2025-06-14 09:41:45.567]: Info: Resolution: 1920x1080
[2025-06-14 09:41:45.567]: Info: Name: DP-1
[2025-06-14 09:41:45.567]: Info: Found monitor: Dell Inc. Dell AW3418DW #ASPcJHcY7MXd (DP-1)
[2025-06-14 09:41:45.567]: Info: Offset: 1080x0
[2025-06-14 09:41:45.567]: Info: Logical size: 3440x1440
[2025-06-14 09:41:45.567]: Info: Name: DP-2
[2025-06-14 09:41:45.567]: Info: Found monitor: BNQ BenQ XL2420TE X7D03025SL0 (DP-2)
[2025-06-14 09:41:45.567]: Info: Offset: 0x0
[2025-06-14 09:41:45.567]: Info: Logical size: 1080x1920
[2025-06-14 09:41:45.567]: Info: -------- Start of Wayland monitor list --------
[2025-06-14 09:41:45.567]: Info: Monitor 0 is DP-1: Dell Inc. Dell AW3418DW #ASPcJHcY7MXd (DP-1)
[2025-06-14 09:41:45.567]: Info: Monitor 1 is DP-2: BNQ BenQ XL2420TE X7D03025SL0 (DP-2)
[2025-06-14 09:41:45.567]: Info: --------- End of Wayland monitor list ---------
[2025-06-14 09:41:45.608]: Info: Trying encoder [nvenc]
[2025-06-14 09:41:45.608]: Info: Screencasting with Wayland's protocol
[2025-06-14 09:41:45.608]: Info: Found display [wayland-1]
[2025-06-14 09:41:45.608]: Info: Found interface: zxdg_output_manager_v1(9) version 3
[2025-06-14 09:41:45.608]: Info: Found interface: zwlr_screencopy_manager_v1(41) version 3
[2025-06-14 09:41:45.608]: Info: Found interface: zwp_linux_dmabuf_v1(59) version 5
[2025-06-14 09:41:45.608]: Info: Found interface: wl_output(60) version 4
[2025-06-14 09:41:45.608]: Info: Found interface: wl_output(61) version 4
[2025-06-14 09:41:45.608]: Info: Resolution: 3440x1440
[2025-06-14 09:41:45.608]: Info: Name: DP-1
[2025-06-14 09:41:45.608]: Info: Found monitor: Dell Inc. Dell AW3418DW #ASPcJHcY7MXd (DP-1)
[2025-06-14 09:41:45.608]: Info: Offset: 1080x0
[2025-06-14 09:41:45.608]: Info: Logical size: 3440x1440
[2025-06-14 09:41:45.608]: Info: Selected monitor [Dell Inc. Dell AW3418DW #ASPcJHcY7MXd (DP-1)] for streaming
[2025-06-14 09:41:45.608]: Info: Creating encoder [h264_nvenc]
[2025-06-14 09:41:45.608]: Info: Color coding: SDR (Rec. 601)
[2025-06-14 09:41:45.608]: Info: Color depth: 8-bit
[2025-06-14 09:41:45.608]: Info: Color range: JPEG
[2025-06-14 09:41:45.763]: Info: Streaming bitrate is 1000000
[2025-06-14 09:41:46.042]: Info: Creating encoder [hevc_nvenc]
[2025-06-14 09:41:46.042]: Info: Color coding: SDR (Rec. 601)
[2025-06-14 09:41:46.042]: Info: Color depth: 8-bit
[2025-06-14 09:41:46.042]: Info: Color range: JPEG
[2025-06-14 09:41:46.050]: Info: Streaming bitrate is 1000000
[2025-06-14 09:41:46.321]: Info: Creating encoder [av1_nvenc]
[2025-06-14 09:41:46.321]: Info: Color coding: SDR (Rec. 601)
[2025-06-14 09:41:46.321]: Info: Color depth: 8-bit
[2025-06-14 09:41:46.321]: Info: Color range: JPEG
[2025-06-14 09:41:46.325]: Info: Streaming bitrate is 1000000
[2025-06-14 09:41:46.335]: Warning: [av1_nvenc @ 0x55abbe6eddc0] Codec not supported
[2025-06-14 09:41:46.335]: Error: [av1_nvenc @ 0x55abbe6eddc0] Provided device doesn't support required NVENC features
[2025-06-14 09:41:46.587]: Error: Could not open codec [av1_nvenc]: Function not implemented
[2025-06-14 09:41:46.588]: Info: Screencasting with Wayland's protocol
[2025-06-14 09:41:46.588]: Info: Found display [wayland-1]
[2025-06-14 09:41:46.589]: Info: Found interface: zxdg_output_manager_v1(9) version 3
[2025-06-14 09:41:46.589]: Info: Found interface: zwlr_screencopy_manager_v1(41) version 3
[2025-06-14 09:41:46.589]: Info: Found interface: zwp_linux_dmabuf_v1(59) version 5
[2025-06-14 09:41:46.589]: Info: Found interface: wl_output(60) version 4
[2025-06-14 09:41:46.589]: Info: Found interface: wl_output(61) version 4
[2025-06-14 09:41:46.589]: Info: Resolution: 3440x1440
[2025-06-14 09:41:46.589]: Info: Name: DP-1
[2025-06-14 09:41:46.589]: Info: Found monitor: Dell Inc. Dell AW3418DW #ASPcJHcY7MXd (DP-1)
[2025-06-14 09:41:46.590]: Info: Offset: 1080x0
[2025-06-14 09:41:46.590]: Info: Logical size: 3440x1440
[2025-06-14 09:41:46.590]: Info: Selected monitor [Dell Inc. Dell AW3418DW #ASPcJHcY7MXd (DP-1)] for streaming
[2025-06-14 09:41:46.590]: Info: Creating encoder [hevc_nvenc]
[2025-06-14 09:41:46.590]: Info: Color coding: SDR (Rec. 709)
[2025-06-14 09:41:46.590]: Info: Color depth: 10-bit
[2025-06-14 09:41:46.590]: Info: Color range: JPEG
[2025-06-14 09:41:46.597]: Info: Streaming bitrate is 1000000
[2025-06-14 09:41:46.874]: Info: // Testing for available encoders, this may generate errors. You can safely ignore those errors. //
[2025-06-14 09:41:46.874]: Info:
[2025-06-14 09:41:46.874]: Info: // Ignore any errors mentioned above, they are not relevant. //
[2025-06-14 09:41:46.874]: Info:
[2025-06-14 09:41:46.874]: Info: Found H.264 encoder: h264_nvenc [nvenc]
[2025-06-14 09:41:46.874]: Info: Found HEVC encoder: hevc_nvenc [nvenc]
[2025-06-14 09:41:46.884]: Error: Failed to create client: Daemon not running
[2025-06-14 09:41:46.885]: Info: Configuration UI available at [https://localhost:47990]
[2025-06-14 09:42:38.179]: Info: Trying encoder [nvenc]
[2025-06-14 09:42:38.180]: Info: Screencasting with Wayland's protocol
[2025-06-14 09:42:38.180]: Info: Found display [wayland-1]
[2025-06-14 09:42:38.180]: Info: Found interface: zxdg_output_manager_v1(9) version 3
[2025-06-14 09:42:38.180]: Info: Found interface: zwlr_screencopy_manager_v1(41) version 3
[2025-06-14 09:42:38.180]: Info: Found interface: zwp_linux_dmabuf_v1(59) version 5
[2025-06-14 09:42:38.180]: Info: Found interface: wl_output(60) version 4
[2025-06-14 09:42:38.180]: Info: Found interface: wl_output(61) version 4
[2025-06-14 09:42:38.181]: Info: Resolution: 3440x1440
[2025-06-14 09:42:38.181]: Info: Name: DP-1
[2025-06-14 09:42:38.181]: Info: Found monitor: Dell Inc. Dell AW3418DW #ASPcJHcY7MXd (DP-1)
[2025-06-14 09:42:38.181]: Info: Offset: 1080x0
[2025-06-14 09:42:38.181]: Info: Logical size: 3440x1440
[2025-06-14 09:42:38.181]: Info: Selected monitor [Dell Inc. Dell AW3418DW #ASPcJHcY7MXd (DP-1)] for streaming
[2025-06-14 09:42:38.181]: Info: Creating encoder [h264_nvenc]
[2025-06-14 09:42:38.181]: Info: Color coding: SDR (Rec. 601)
[2025-06-14 09:42:38.181]: Info: Color depth: 8-bit
[2025-06-14 09:42:38.181]: Info: Color range: JPEG
[2025-06-14 09:42:38.223]: Info: Streaming bitrate is 1000000
[2025-06-14 09:42:38.496]: Info: Creating encoder [hevc_nvenc]
[2025-06-14 09:42:38.496]: Info: Color coding: SDR (Rec. 601)
[2025-06-14 09:42:38.497]: Info: Color depth: 8-bit
[2025-06-14 09:42:38.497]: Info: Color range: JPEG
[2025-06-14 09:42:38.502]: Info: Streaming bitrate is 1000000
[2025-06-14 09:42:38.773]: Info: Creating encoder [av1_nvenc]
[2025-06-14 09:42:38.773]: Info: Color coding: SDR (Rec. 601)
[2025-06-14 09:42:38.773]: Info: Color depth: 8-bit
[2025-06-14 09:42:38.773]: Info: Color range: JPEG
[2025-06-14 09:42:38.780]: Info: Streaming bitrate is 1000000
[2025-06-14 09:42:38.793]: Warning: [av1_nvenc @ 0x7fa560402780] Codec not supported
[2025-06-14 09:42:38.793]: Error: [av1_nvenc @ 0x7fa560402780] Provided device doesn't support required NVENC features
[2025-06-14 09:42:39.046]: Error: Could not open codec [av1_nvenc]: Function not implemented
[2025-06-14 09:42:39.047]: Info: Screencasting with Wayland's protocol
[2025-06-14 09:42:39.047]: Info: Found display [wayland-1]
[2025-06-14 09:42:39.048]: Info: Found interface: zxdg_output_manager_v1(9) version 3
[2025-06-14 09:42:39.048]: Info: Found interface: zwlr_screencopy_manager_v1(41) version 3
[2025-06-14 09:42:39.048]: Info: Found interface: zwp_linux_dmabuf_v1(59) version 5
[2025-06-14 09:42:39.048]: Info: Found interface: wl_output(60) version 4
[2025-06-14 09:42:39.048]: Info: Found interface: wl_output(61) version 4
[2025-06-14 09:42:39.048]: Info: Resolution: 3440x1440
[2025-06-14 09:42:39.049]: Info: Name: DP-1
[2025-06-14 09:42:39.049]: Info: Found monitor: Dell Inc. Dell AW3418DW #ASPcJHcY7MXd (DP-1)
[2025-06-14 09:42:39.049]: Info: Offset: 1080x0
[2025-06-14 09:42:39.049]: Info: Logical size: 3440x1440
[2025-06-14 09:42:39.049]: Info: Selected monitor [Dell Inc. Dell AW3418DW #ASPcJHcY7MXd (DP-1)] for streaming
[2025-06-14 09:42:39.049]: Info: Creating encoder [hevc_nvenc]
[2025-06-14 09:42:39.049]: Info: Color coding: SDR (Rec. 709)
[2025-06-14 09:42:39.049]: Info: Color depth: 10-bit
[2025-06-14 09:42:39.049]: Info: Color range: JPEG
[2025-06-14 09:42:39.056]: Info: Streaming bitrate is 1000000
[2025-06-14 09:42:39.334]: Info: // Testing for available encoders, this may generate errors. You can safely ignore those errors. //
[2025-06-14 09:42:39.334]: Info:
[2025-06-14 09:42:39.334]: Info: // Ignore any errors mentioned above, they are not relevant. //
[2025-06-14 09:42:39.334]: Info:
[2025-06-14 09:42:39.334]: Info: Found H.264 encoder: h264_nvenc [nvenc]
[2025-06-14 09:42:39.335]: Info: Found HEVC encoder: hevc_nvenc [nvenc]
[2025-06-14 09:42:39.335]: Info: Executing Do Cmd: [hyprctl output create headless HL-1]
[2025-06-14 09:42:39.399]: Info: Executing Do Cmd: [sh -c "hyprctl keyword monitor HL-1,${SUNSHINE_CLIENT_WIDTH}x${SUNSHINE_CLIENT_HEIGHT}@${SUNSHINE_CLIENT_FPS},auto-right,1"]
[2025-06-14 09:42:39.428]: Info: Executing Do Cmd: [hyprctl dispatch workspace 10]
[2025-06-14 09:42:39.449]: Info: Spawning [sh -c "gamemoderun gamescope -W ${SUNSHINE_CLIENT_WIDTH} -H ${SUNSHINE_CLIENT_HEIGHT} -r ${SUNSHINE_CLIENT_FPS} -f --adaptive-sync --force-grab-cursor --backend sdl -- steam steam://rungameid/553850"] in ["/usr/bin"]
[2025-06-14 09:42:39.457]: Info: Executing [Desktop]
[2025-06-14 09:42:39.464]: Info: New streaming session started [active sessions: 1]
[2025-06-14 09:42:39.646]: Info: CLIENT CONNECTED
[2025-06-14 09:42:39.646]: Info: Found display [wayland-1]
[2025-06-14 09:42:39.647]: Info: Found interface: zxdg_output_manager_v1(9) version 3
[2025-06-14 09:42:39.647]: Info: Found interface: zwlr_screencopy_manager_v1(41) version 3
[2025-06-14 09:42:39.647]: Info: Found interface: zwp_linux_dmabuf_v1(59) version 5
[2025-06-14 09:42:39.647]: Info: Found interface: wl_output(60) version 4
[2025-06-14 09:42:39.647]: Info: Found interface: wl_output(61) version 4
[2025-06-14 09:42:39.647]: Info: Found interface: wl_output(62) version 4
[2025-06-14 09:42:39.647]: Info: Resolution: 3440x1440
[2025-06-14 09:42:39.647]: Info: Resolution: 1920x1080
[2025-06-14 09:42:39.647]: Info: Resolution: 1920x1080
[2025-06-14 09:42:39.647]: Info: Name: DP-1
[2025-06-14 09:42:39.647]: Info: Found monitor: Dell Inc. Dell AW3418DW #ASPcJHcY7MXd (DP-1)
[2025-06-14 09:42:39.647]: Info: Offset: 1080x0
[2025-06-14 09:42:39.647]: Info: Logical size: 3440x1440
[2025-06-14 09:42:39.647]: Info: Name: DP-2
[2025-06-14 09:42:39.647]: Info: Found monitor: BNQ BenQ XL2420TE X7D03025SL0 (DP-2)
[2025-06-14 09:42:39.647]: Info: Offset: 0x0
[2025-06-14 09:42:39.647]: Info: Logical size: 1080x1920
[2025-06-14 09:42:39.647]: Info: Name: HL-1
[2025-06-14 09:42:39.647]: Info: Offset: 4520x0
[2025-06-14 09:42:39.647]: Info: Logical size: 1920x1080
[2025-06-14 09:42:39.647]: Info: -------- Start of Wayland monitor list --------
[2025-06-14 09:42:39.647]: Info: Monitor 0 is DP-1: Dell Inc. Dell AW3418DW #ASPcJHcY7MXd (DP-1)
[2025-06-14 09:42:39.647]: Info: Monitor 1 is DP-2: BNQ BenQ XL2420TE X7D03025SL0 (DP-2)
[2025-06-14 09:42:39.647]: Info: Monitor 2 is HL-1:
[2025-06-14 09:42:39.647]: Info: --------- End of Wayland monitor list ---------
[2025-06-14 09:42:39.647]: Info: Screencasting with Wayland's protocol
[2025-06-14 09:42:39.647]: Info: Found display [wayland-1]
[2025-06-14 09:42:39.648]: Info: Found interface: zxdg_output_manager_v1(9) version 3
[2025-06-14 09:42:39.648]: Info: Found interface: zwlr_screencopy_manager_v1(41) version 3
[2025-06-14 09:42:39.648]: Info: Found interface: zwp_linux_dmabuf_v1(59) version 5
[2025-06-14 09:42:39.648]: Info: Found interface: wl_output(60) version 4
[2025-06-14 09:42:39.648]: Info: Found interface: wl_output(61) version 4
[2025-06-14 09:42:39.648]: Info: Found interface: wl_output(62) version 4
[2025-06-14 09:42:39.648]: Info: Resolution: 1920x1080
[2025-06-14 09:42:39.648]: Info: Name: HL-1
[2025-06-14 09:42:39.648]: Info: Offset: 4520x0
[2025-06-14 09:42:39.648]: Info: Logical size: 1920x1080
[2025-06-14 09:42:39.648]: Info: Selected monitor [] for streaming
[2025-06-14 09:42:39.648]: Info: Creating encoder [hevc_nvenc]
[2025-06-14 09:42:39.648]: Info: Color coding: SDR (Rec. 601)
[2025-06-14 09:42:39.648]: Info: Color depth: 10-bit
[2025-06-14 09:42:39.648]: Info: Color range: MPEG
[2025-06-14 09:42:39.727]: Info: Streaming bitrate is 13452000
[2025-06-14 09:42:39.768]: Info: Gamepad 0 will be DualShock 5 controller (auto-selected by client-reported type)
[2025-06-14 09:42:40.017]: Info: Setting default sink to: [sink-sunshine-surround71]
[2025-06-14 09:42:40.018]: Info: Found default monitor by name: sink-sunshine-surround71.monitor
[2025-06-14 09:42:40.077]: Info: Opus initialized: 48 kHz, 8 channels, 2048 kbps (total), LOWDELAY
Same issue here.
Seems IMU readings are sent over network without timestamps, and host-side timestamps (via virtual controller) are generated locally. This may break some integral-over-time usage, especially if the packets are received out of order.
I also have this issue using Sunshine on NixOS, Moonlight on Android and joycons emulating a ds5 controller. It happens when using the motion sensors on the controllers or when overriding those with the phone's motion sensor. This is the only thing so far that is making my headless server project inviable.
Edit: Testing further, the issue persists with any possible combination of Windows/Linux/Android client and server.
With the improvements to native ds5 support through sunshine, I have come back to test this issue. Although I've found that I'm still experiencing the issue.
With some more playing around I've discovered it only occurs when using Steam Input. Disabling Steam Input in a game and using the game's (ie. Helldivers 2) native ds5 gyro support seems to not display the issue at all.
I have disabled the in-game gyro support and am still getting the error. From what I can tell the issue has something to do with how the gyro data from Sunshine is being consumed by Steam Input. But no idea when it's not affecting the native game gyro.
dantmnf is actually exactly correct. It's an issue with the gyro timestamping being sent to Steam Input from the virtual controller.
'Gyro to Mouse', which uses gyro sensor timestamps to improve accuracy, is what's causing the issue. Gyro as Mouse, which is the older setting, doesn't use gyro sensor timestamps and doesn't experience the issue.
So I assume moonlight and sunshine would need to be capable of communicating the gyro sensor timestamps between each other. In order to fix this issue properly.