Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
Bug 889838 - media-libs/libplacebo-5.229.1: doesn't build when attempting to update the system
Summary: media-libs/libplacebo-5.229.1: doesn't build when attempting to update the sy...
Status: RESOLVED WORKSFORME
Alias: None
Product: Gentoo Linux
Classification: Unclassified
Component: Current packages (show other bugs)
Hardware: AMD64 Linux
: Normal normal (vote)
Assignee: Ionen Wolkens
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-01-05 15:01 UTC by Sotir Danailov
Modified: 2023-01-07 13:52 UTC (History)
0 users

See Also:
Package list:
Runtime testing required: ---


Attachments
point in which I think the build fails (libplacebo.txt,3.01 KB, text/plain)
2023-01-05 15:02 UTC, Sotir Danailov
Details
emerge --info for libplacebo (emerge-info-libplacebo.txt,6.59 KB, text/plain)
2023-01-06 11:01 UTC, Sotir Danailov
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Sotir Danailov 2023-01-05 15:01:46 UTC
I will attach the point in which I think the build fails. My current version is 4.192.1-r2, attempting to update to the new 5.229.1 causes the failure.

Reproducible: Always
Comment 1 Sotir Danailov 2023-01-05 15:02:29 UTC
Created attachment 847326 [details]
point in which I think the build fails
Comment 2 Mike Gilbert gentoo-dev 2023-01-05 21:56:34 UTC
Please provide emerge --info and attach the full build log.
Comment 3 Sotir Danailov 2023-01-06 11:01:16 UTC
Created attachment 847660 [details]
emerge --info for libplacebo
Comment 4 Sotir Danailov 2023-01-06 11:04:35 UTC
[32m * [39;49;00mPackage:    media-libs/libplacebo-5.229.1:0/229
[32m * [39;49;00mRepository: gentoo
[32m * [39;49;00mMaintainer: ionen@gentoo.org
[32m * [39;49;00mUpstream:   https://code.videolan.org/videolan/libplacebo/issues
[32m * [39;49;00mUSE:        abi_x86_64 amd64 elibc_glibc kernel_linux lcms opengl shaderc userland_GNU vulkan
[32m * [39;49;00mFEATURES:   network-sandbox preserve-libs sandbox userpriv usersandbox
 [32m*[0m Checking whether python3_11 is suitable ...
 [32m*[0m   >=dev-lang/python-3.11.1:3.11 ...
[A[182C [34;01m[ [32;01mok[34;01m ][0m
 [32m*[0m   python_check_deps ...
 [32m*[0m     dev-python/jinja[python_targets_python3_11(-)] ...
[A[182C [34;01m[ [31;01m!![34;01m ][0m
[A[182C [34;01m[ [31;01m!![34;01m ][0m
 [32m*[0m Checking whether python3_10 is suitable ...
 [32m*[0m   >=dev-lang/python-3.10.9:3.10 ...
[A[182C [34;01m[ [32;01mok[34;01m ][0m
 [32m*[0m   python_check_deps ...
 [32m*[0m     dev-python/jinja[python_targets_python3_10(-)] ...
[A[182C [34;01m[ [32;01mok[34;01m ][0m
 [32m*[0m     dev-python/setuptools[python_targets_python3_10(-)] ...
[A[182C [34;01m[ [32;01mok[34;01m ][0m
[A[182C [34;01m[ [32;01mok[34;01m ][0m
 [32m*[0m Using python3.10 to build (via PYTHON_COMPAT iteration)
>>> Unpacking source...
>>> Unpacking libplacebo-v5.229.1.tar.gz to /var/tmp/portage/media-libs/libplacebo-5.229.1/work
>>> Unpacking libplacebo-glad-2.0.1.tar.gz to /var/tmp/portage/media-libs/libplacebo-5.229.1/work
>>> Source unpacked in /var/tmp/portage/media-libs/libplacebo-5.229.1/work
>>> Preparing source in /var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1 ...
 [32m*[0m Applying libplacebo-5.229.1-llvm-libunwind.patch ...
[A[182C [34;01m[ [32;01mok[34;01m ][0m
 [32m*[0m Applying libplacebo-5.229.1-python-executable.patch ...
[A[182C [34;01m[ [32;01mok[34;01m ][0m
 [32m*[0m Applying libplacebo-5.229.1-shared-glslang.patch ...
[A[182C [34;01m[ [32;01mok[34;01m ][0m
>>> Source prepared.
>>> Configuring source in /var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1 ...
 [32m*[0m abi_x86_64.amd64: running multilib-minimal_abi_src_configure
meson setup --libdir lib64 --localstatedir /var/lib --prefix /usr --sysconfdir /etc --wrap-mode nodownload --build.pkg-config-path /var/tmp/portage/media-libs/libplacebo-5.229.1/temp/python3.10/pkgconfig:/usr/share/pkgconfig --pkg-config-path /var/tmp/portage/media-libs/libplacebo-5.229.1/temp/python3.10/pkgconfig:/usr/share/pkgconfig --native-file /var/tmp/portage/media-libs/libplacebo-5.229.1/temp/meson.x86_64-pc-linux-gnu.amd64.ini -Db_pch=false -Dwerror=false --buildtype plain -Ddemos=false -Dtests=false -Dlcms=enabled -Dopengl=enabled -Dgl-proc-addr=enabled -Dshaderc=enabled -Dglslang=disabled -Dunwind=disabled -Dvulkan=enabled -Dvk-proc-addr=enabled -Dvulkan-registry=/usr/share/vulkan/registry/vk.xml /var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1 /var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1-abi_x86_64.amd64
The Meson build system
Version: 0.64.1
Source dir: /var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1
Build dir: /var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1-abi_x86_64.amd64
Build type: native build
Project name: libplacebo
Project version: 5.229.0
C compiler for the host machine: x86_64-pc-linux-gnu-gcc (gcc 11.3.1 "x86_64-pc-linux-gnu-gcc (Gentoo 11.3.1_p20221209 p3) 11.3.1 20221209")
C linker for the host machine: x86_64-pc-linux-gnu-gcc ld.bfd 2.38
C++ compiler for the host machine: x86_64-pc-linux-gnu-g++ (gcc 11.3.1 "x86_64-pc-linux-gnu-g++ (Gentoo 11.3.1_p20221209 p3) 11.3.1 20221209")
C++ linker for the host machine: x86_64-pc-linux-gnu-g++ ld.bfd 2.38
Host machine cpu family: x86_64
Host machine cpu: x86_64
Compiler for C supports arguments -Wincompatible-pointer-types: YES 
Compiler for C supports link arguments -Wl,--exclude-libs=ALL: YES 
Library m found: YES
Program python3 found: YES (/var/tmp/portage/media-libs/libplacebo-5.229.1/temp/python3.10/bin/python3)
Run-time dependency threads found: YES
Header "pthread.h" has symbol "pthread_condattr_setclock" with dependency threads: YES 
Library libunwind skipped: feature unwind disabled
Library execinfo found: NO
Checking for function "backtrace_symbols" with dependency -lexecinfo: YES 
Found pkg-config: /usr/bin/x86_64-pc-linux-gnu-pkg-config (1.8.0)
Run-time dependency shaderc found: YES 2022.3.1
Library glslang skipped: feature glslang disabled
Library MachineIndependent found: YES
Library OSDependent found: YES
Library HLSL skipped: feature glslang disabled
Library OGLCompiler found: YES
Library GenericCodeGen found: YES
Library SPVRemapper skipped: feature glslang disabled
Library SPIRV skipped: feature glslang disabled
Library SPIRV-Tools-opt found: YES
Library SPIRV-Tools found: YES
Library pthread found: YES
Check usable header "d3d11.h" : NO 
Check usable header "d3d11_4.h" : NO 
Check usable header "dxgi1_6.h" : NO 
Found CMake: /usr/bin/cmake (3.24.3)
Run-time dependency spirv-cross-c-shared found: NO (tried pkgconfig and cmake)
Library version found: NO
Library dl found: YES
Run-time dependency vulkan found: YES 1.3.231
Run-time dependency lcms2 found: YES 2.13
Configuring config.h using configuration
Configuring config_internal.h using configuration
Build targets in project: 4

libplacebo 5.229.0

  Optional features
    d3d11                : NO
    gl-proc-addr         : YES
    glslang              : NO
    lcms                 : YES
    opengl               : YES
    shaderc              : YES
    vk-proc-addr         : YES
    vulkan               : YES

  User defined options
    Native files         : /var/tmp/portage/media-libs/libplacebo-5.229.1/temp/meson.x86_64-pc-linux-gnu.amd64.ini
    build.pkg_config_path: /var/tmp/portage/media-libs/libplacebo-5.229.1/temp/python3.10/pkgconfig:/usr/share/pkgconfig
    buildtype            : plain
    libdir               : lib64
    localstatedir        : /var/lib
    pkg_config_path      : /var/tmp/portage/media-libs/libplacebo-5.229.1/temp/python3.10/pkgconfig:/usr/share/pkgconfig
    prefix               : /usr
    sysconfdir           : /etc
    werror               : false
    wrap_mode            : nodownload
    b_pch                : false
    demos                : false
    gl-proc-addr         : enabled
    glslang              : disabled
    lcms                 : enabled
    opengl               : enabled
    shaderc              : enabled
    tests                : false
    unwind               : disabled
    vk-proc-addr         : enabled
    vulkan               : enabled
    vulkan-registry      : /usr/share/vulkan/registry/vk.xml

Found ninja-1.11.1 at /usr/bin/ninja
>>> Source configured.
>>> Compiling source in /var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1 ...
 [32m*[0m abi_x86_64.amd64: running multilib-minimal_abi_src_compile
meson compile -C /var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1-abi_x86_64.amd64 --jobs 3 --load-average 0 --verbose
[1/55] /usr/lib/python-exec/python3.10/meson --internal vcstagger ../libplacebo-v5.229.1/src/version.h.in src/version.h v5.229.0 /var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/src @buildver@ '(.*)' /usr/bin/git describe
fatal: not a git repository (or any of the parent directories): .git
[2/55] env PYTHONPATH=/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/3rdparty/jinja/src:/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/3rdparty/markupsafe/src:/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/3rdparty/glad /var/tmp/portage/media-libs/libplacebo-5.229.1/temp/python3.10/bin/python3 ../libplacebo-v5.229.1/src/vulkan/utils_gen.py /usr/share /usr/share/vulkan/registry/vk.xml src/vulkan/utils_gen.c
[3/55] env PYTHONPATH=/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/3rdparty/jinja/src:/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/3rdparty/markupsafe/src:/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/3rdparty/glad /var/tmp/portage/media-libs/libplacebo-5.229.1/temp/python3.10/bin/python3 -m glad --out-path=src/opengl/include/glad/../../ --reproducible --merge --api=gl:core,gles2,egl --extensions=GL_AMD_pinned_memory,GL_ARB_buffer_storage,GL_ARB_compute_shader,GL_ARB_framebuffer_object,GL_ARB_get_program_binary,GL_ARB_invalidate_subdata,GL_ARB_pixel_buffer_object,GL_ARB_shader_image_load_store,GL_ARB_shader_storage_buffer_object,GL_ARB_sync,GL_ARB_texture_float,GL_ARB_texture_gather,GL_ARB_texture_rg,GL_ARB_timer_query,GL_ARB_uniform_buffer_object,GL_ARB_vertex_array_object,GL_EXT_EGL_image_storage,GL_EXT_color_buffer_float,GL_EXT_color_buffer_half_float,GL_EXT_texture3D,GL_EXT_texture_format_BGRA8888,GL_EXT_texture_integer,GL_EXT_texture_norm16,GL_EXT_texture_rg,GL_EXT_unpack_subimage,GL_KHR_debug,GL_OES_EGL_image,GL_OES_EGL_image_external,EGL_EXT_image_dma_buf_import,EGL_EXT_image_dma_buf_import_modifiers,EGL_EXT_platform_base,EGL_KHR_debug,EGL_KHR_image_base,EGL_MESA_image_dma_buf_export,EGL_MESA_platform_surfaceless c --header-only --mx --loader
FAILED: src/opengl/include/glad/gl.h 
env PYTHONPATH=/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/3rdparty/jinja/src:/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/3rdparty/markupsafe/src:/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/3rdparty/glad /var/tmp/portage/media-libs/libplacebo-5.229.1/temp/python3.10/bin/python3 -m glad --out-path=src/opengl/include/glad/../../ --reproducible --merge --api=gl:core,gles2,egl --extensions=GL_AMD_pinned_memory,GL_ARB_buffer_storage,GL_ARB_compute_shader,GL_ARB_framebuffer_object,GL_ARB_get_program_binary,GL_ARB_invalidate_subdata,GL_ARB_pixel_buffer_object,GL_ARB_shader_image_load_store,GL_ARB_shader_storage_buffer_object,GL_ARB_sync,GL_ARB_texture_float,GL_ARB_texture_gather,GL_ARB_texture_rg,GL_ARB_timer_query,GL_ARB_uniform_buffer_object,GL_ARB_vertex_array_object,GL_EXT_EGL_image_storage,GL_EXT_color_buffer_float,GL_EXT_color_buffer_half_float,GL_EXT_texture3D,GL_EXT_texture_format_BGRA8888,GL_EXT_texture_integer,GL_EXT_texture_norm16,GL_EXT_texture_rg,GL_EXT_unpack_subimage,GL_KHR_debug,GL_OES_EGL_image,GL_OES_EGL_image_external,EGL_EXT_image_dma_buf_import,EGL_EXT_image_dma_buf_import_modifiers,EGL_EXT_platform_base,EGL_KHR_debug,EGL_KHR_image_base,EGL_MESA_image_dma_buf_export,EGL_MESA_platform_surfaceless c --header-only --mx --loader
Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 2872, in get_entry_map
    ep_map = self._ep_map
  File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 2834, in __getattr__
    raise AttributeError(attr)
AttributeError: _ep_map. Did you mean: '_dep_map'?

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3.10/runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/usr/lib/python3.10/runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/3rdparty/glad/glad/__main__.py", line 194, in <module>
    main()
  File "/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/3rdparty/glad/glad/__main__.py", line 128, in main
    generators = find_generators()
  File "/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1/3rdparty/glad/glad/plugin.py", line 35, in find_generators
    for entry_point in pkg_resources.iter_entry_points(group=entry_point, name=None):
  File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 662, in <genexpr>
    for entry in dist.get_entry_map(group).values()
  File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 2874, in get_entry_map
    ep_map = self._ep_map = EntryPoint.parse_map(
  File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 2555, in parse_map
    for group, lines in data:
  File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 3198, in split_sections
    for line in yield_lines(s):
  File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 2786, in _get_metadata
    for line in self.get_metadata_lines(name):
  File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 1441, in get_metadata_lines
    return yield_lines(self.get_metadata(name))
  File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 1431, in get_metadata
    value = self._get(path)
  File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 1635, in _get
    with open(path, 'rb') as stream:
PermissionError: [Errno 13] Permission denied: '/usr/lib/python3.10/site-packages/yt_dlp-2022.11.11.dist-info/entry_points.txt'
ninja: build stopped: subcommand failed.
INFO: autodetecting backend as ninja
INFO: calculating backend command to run: /usr/bin/ninja -j 3 -v
 [31;01m*[0m ERROR: media-libs/libplacebo-5.229.1::gentoo failed (compile phase):
 [31;01m*[0m   compile failed
 [31;01m*[0m 
 [31;01m*[0m Call stack:
 [31;01m*[0m     ebuild.sh, line  136:  Called src_compile
 [31;01m*[0m   environment, line 2833:  Called meson-multilib_src_compile
 [31;01m*[0m   environment, line 1646:  Called multilib-minimal_src_compile
 [31;01m*[0m   environment, line 1856:  Called multilib_foreach_abi 'multilib-minimal_abi_src_compile'
 [31;01m*[0m   environment, line 2123:  Called multibuild_foreach_variant '_multilib_multibuild_wrapper' 'multilib-minimal_abi_src_compile'
 [31;01m*[0m   environment, line 1816:  Called _multibuild_run '_multilib_multibuild_wrapper' 'multilib-minimal_abi_src_compile'
 [31;01m*[0m   environment, line 1814:  Called _multilib_multibuild_wrapper 'multilib-minimal_abi_src_compile'
 [31;01m*[0m   environment, line  572:  Called multilib-minimal_abi_src_compile
 [31;01m*[0m   environment, line 1850:  Called multilib_src_compile
 [31;01m*[0m   environment, line 2343:  Called meson_src_compile
 [31;01m*[0m   environment, line 1705:  Called die
 [31;01m*[0m The specific snippet of code:
 [31;01m*[0m       "$@" || die "compile failed"
 [31;01m*[0m 
 [31;01m*[0m If you need support, post the output of `emerge --info '=media-libs/libplacebo-5.229.1::gentoo'`,
 [31;01m*[0m the complete build log and the output of `emerge -pqv '=media-libs/libplacebo-5.229.1::gentoo'`.
 [31;01m*[0m The complete build log is located at '/var/log/portage/builds/media-libs:libplacebo-5.229.1:20230106-105244.log'.
 [31;01m*[0m For convenience, a symlink to the build log is located at '/var/tmp/portage/media-libs/libplacebo-5.229.1/temp/build.log'.
 [31;01m*[0m The ebuild environment file is located at '/var/tmp/portage/media-libs/libplacebo-5.229.1/temp/environment'.
 [31;01m*[0m Working directory: '/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1-abi_x86_64.amd64'
 [31;01m*[0m S: '/var/tmp/portage/media-libs/libplacebo-5.229.1/work/libplacebo-v5.229.1'
Comment 5 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2023-01-06 11:12:11 UTC
>PermissionError: [Errno 13] Permission denied: '/usr/lib/python3.10/site-packages/yt_dlp-2022.11.11.dist-info/entry_points.txt'

This sounds a bit odd.
Comment 6 Ionen Wolkens gentoo-dev 2023-01-06 20:51:49 UTC
Yeah, I can reproduce if I intentionally mess with the permissions of that file on my system -- aka make it, or leading directories, not world usable (imagine other files could have a similar effect).

So, seems to be an issue specific to your system. Imagine you broke permissions somehow.

Running:
  namei -m /usr/lib/python*/site-packages/yt_dlp-*.dist-info/entry_points.txt
"should" normally report something like:

f: /usr/lib/python3.10/site-packages/yt_dlp-2023.1.2.dist-info/entry_points.txt
 drwxr-xr-x /
 drwxr-xr-x usr
 drwxr-xr-x lib
 drwxr-xr-x python3.10
 drwxr-xr-x site-packages
 drwxr-xr-x yt_dlp-2023.1.2.dist-info
 -rw-r--r-- entry_points.txt

If you have any e.g. "drwr------" or "-rw-------" then it's wrong.

If need more help, I suggest trying support channels[1] instead. Not a bug.

[1] https://www.gentoo.org/support/
Comment 7 Ionen Wolkens gentoo-dev 2023-01-06 21:02:13 UTC
On a side-note, I could see this potentially happening if you used pip system-wide (always a bad idea, don't do this -- yt-dlp has its own ebuild) with a restrictive umask.

e.g. umask 077 then pip install yt-dlp gives:

$ namei -m /usr/lib/python*/site-packages/yt_dlp-*.dist-info/entry_points.txt
f: /usr/lib/python3.11/site-packages/yt_dlp-2023.1.2.dist-info/entry_points.txt
 drwxr-xr-x /
 drwxr-xr-x usr
 drwxr-xr-x lib
 drwxr-xr-x python3.11
 drwxr-xr-x site-packages
 drwx------ yt_dlp-2023.1.2.dist-info
 -rw------- entry_points.txt

If you didn't do that, then imagine some other command you ran may have gone haywire and broke permissions in random places.
Comment 8 Sotir Danailov 2023-01-07 09:22:17 UTC
Yep, this seems to be the case. The thing I've done is attempt to sandbox yt-dlp using https://wiki.gentoo.org/wiki/Simple_sandbox. I didn't know this can break another package's build. Question is, why doesn't media-libs/libplacebo-4.192.1-r2 complain about this, because right now I have it build successfully with the same permissions. Why is media-libs/libplacebo-5.229.1 looking in the /usr/lib/python3.10/site-packages/yt_dlp-2022.11.11.dist-info directory?

I'll just unmerge youtube-dl and yt-dlp and remove their "sandboxes" for now. Seems python isn't easy to isolate using this method.
Comment 9 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2023-01-07 09:23:57 UTC
(In reply to Sotir Danailov from comment #8)
> Yep, this seems to be the case. The thing I've done is attempt to sandbox
> yt-dlp using https://wiki.gentoo.org/wiki/Simple_sandbox.

If you want to install things outside of Portage, you should use Python venvs.
Comment 10 Sam James archtester Gentoo Infrastructure gentoo-dev Security 2023-01-07 09:24:04 UTC
s/things/Python packages/
Comment 11 Ionen Wolkens gentoo-dev 2023-01-07 13:52:52 UTC
(In reply to Sotir Danailov from comment #8)
> why doesn't media-libs/libplacebo-4.192.1-r2 complain about this
libplacebo-4 didn't use glad, which is the part that uses setuptools' pkg_resources (for now anyway, switches to importlib.metadata with setuptools fallback in glad-2.0.2)

> Why is media-libs/libplacebo-5.229.1 looking in the /usr/lib/python3.10/site-packages/yt_dlp-2022.11.11.dist-info directory?
I think it's just a generic "query data about all installed python packages", and it doesn't expect that something won't be readable and fails rather than skip.