From 131bebd749f02a2581da3d7b4a30006c916cb378 Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Thu, 1 May 2025 12:43:57 +0200 Subject: [PATCH 1/7] Basic implementation for a new DDS de/encoder --- Cargo.toml | 5 +- README.md | 3 +- src/codecs/dds.rs | 904 +++++++++++++++++++---------- src/codecs/dxt.rs | 347 ----------- src/image_reader/free_functions.rs | 4 + src/lib.rs | 7 +- 6 files changed, 619 insertions(+), 651 deletions(-) delete mode 100644 src/codecs/dxt.rs diff --git a/Cargo.toml b/Cargo.toml index 74eb6094db..773d1327f7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,6 +42,7 @@ num-traits = { version = "0.2.0" } # Optional dependencies color_quant = { version = "1.1", optional = true } dav1d = { version = "0.10.3", optional = true } +dds = { version = "0.1", optional = true } exr = { version = "1.5.0", optional = true } gif = { version = "0.13.1", optional = true } image-webp = { version = "0.2.0", optional = true } @@ -70,7 +71,7 @@ default = ["rayon", "default-formats"] default-formats = ["avif", "bmp", "dds", "exr", "ff", "gif", "hdr", "ico", "jpeg", "png", "pnm", "qoi", "tga", "tiff", "webp"] avif = ["dep:ravif", "dep:rgb"] bmp = [] -dds = [] +dds = ["dep:dds"] exr = ["dep:exr"] ff = [] # Farbfeld image format gif = ["dep:gif", "dep:color_quant"] @@ -85,7 +86,7 @@ tiff = ["dep:tiff"] webp = ["dep:image-webp"] # Other features -rayon = ["dep:rayon", "ravif?/threading"] # Enables multi-threading +rayon = ["dep:rayon", "ravif?/threading", "dds?/rayon"] # Enables multi-threading nasm = ["ravif?/asm"] # Enables use of nasm by rav1e (requires nasm to be installed) color_quant = ["dep:color_quant"] # Enables color quantization avif-native = ["dep:mp4parse", "dep:dav1d"] # Enable native dependency libdav1d diff --git a/README.md b/README.md index dbafe566dd..cb9d077bb4 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,7 @@ image format encoders and decoders. | -------- | ----------------------------------------- | --------------------------------------- | | AVIF | Yes \* | Yes (lossy only) | | BMP | Yes | Yes | -| DDS | Yes | --- | +| DDS | Yes | Yes \*\* | | Farbfeld | Yes | Yes | | GIF | Yes | Yes | | HDR | Yes | Yes | @@ -61,6 +61,7 @@ image format encoders and decoders. | WebP | Yes | Yes (lossless only) | - \* Requires the `avif-native` feature, uses the libdav1d C library. +- \*\* See the documentation of the [`dds` crate](https://github.com/image-rs/image-dds) for a full list of supported formats. ## Image Types diff --git a/src/codecs/dds.rs b/src/codecs/dds.rs index e23a23beb2..58e58b47da 100644 --- a/src/codecs/dds.rs +++ b/src/codecs/dds.rs @@ -1,366 +1,676 @@ -//! Decoding of DDS images +//! Decoding and encoding DDS images //! -//! DDS (DirectDraw Surface) is a container format for storing DXT (S3TC) compressed images. +//! DDS (DirectDraw Surface) is a container format for storing DXT (S3TC) compressed images. //! -//! # Related Links -//! * - Description of the DDS format. +//! # Related Links +//! +//! * - Description of the DDS format. -use std::io::Read; -use std::{error, fmt}; +use std::io::{Read, Seek, Write}; -use byteorder_lite::{LittleEndian, ReadBytesExt}; +use dds::{Channels, Precision}; -#[allow(deprecated)] -use crate::codecs::dxt::{DxtDecoder, DxtVariant}; -use crate::color::ColorType; +use crate::color::{ColorType, ExtendedColorType}; use crate::error::{ - DecodingError, ImageError, ImageFormatHint, ImageResult, UnsupportedError, UnsupportedErrorKind, + DecodingError, EncodingError, ImageError, ImageResult, LimitError, LimitErrorKind, + UnsupportedError, UnsupportedErrorKind, }; -use crate::image::{ImageDecoder, ImageFormat}; - -/// Errors that can occur during decoding and parsing a DDS image -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, PartialOrd, Ord)] -#[allow(clippy::enum_variant_names)] -enum DecoderError { - /// Wrong DDS channel width - PixelFormatSizeInvalid(u32), - /// Wrong DDS header size - HeaderSizeInvalid(u32), - /// Wrong DDS header flags - HeaderFlagsInvalid(u32), - - /// Invalid DXGI format in DX10 header - DxgiFormatInvalid(u32), - /// Invalid resource dimension - ResourceDimensionInvalid(u32), - /// Invalid flags in DX10 header - Dx10FlagsInvalid(u32), - /// Invalid array size in DX10 header - Dx10ArraySizeInvalid(u32), - - /// DDS "DDS " signature invalid or missing - DdsSignatureInvalid, -} - -impl fmt::Display for DecoderError { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - DecoderError::PixelFormatSizeInvalid(s) => { - f.write_fmt(format_args!("Invalid DDS PixelFormat size: {s}")) - } - DecoderError::HeaderSizeInvalid(s) => { - f.write_fmt(format_args!("Invalid DDS header size: {s}")) - } - DecoderError::HeaderFlagsInvalid(fs) => { - f.write_fmt(format_args!("Invalid DDS header flags: {fs:#010X}")) - } - DecoderError::DxgiFormatInvalid(df) => { - f.write_fmt(format_args!("Invalid DDS DXGI format: {df}")) +use crate::image::{ImageDecoder, ImageDecoderRect, ImageEncoder, ImageFormat}; + +impl From for ImageError { + fn from(e: dds::DecodingError) -> ImageError { + match e { + dds::DecodingError::Io(e) => ImageError::IoError(e), + dds::DecodingError::MemoryLimitExceeded => { + ImageError::Limits(LimitError::from_kind(LimitErrorKind::DimensionError)) } - DecoderError::ResourceDimensionInvalid(d) => { - f.write_fmt(format_args!("Invalid DDS resource dimension: {d}")) - } - DecoderError::Dx10FlagsInvalid(fs) => { - f.write_fmt(format_args!("Invalid DDS DX10 header flags: {fs:#010X}")) - } - DecoderError::Dx10ArraySizeInvalid(s) => { - f.write_fmt(format_args!("Invalid DDS DX10 array size: {s}")) - } - DecoderError::DdsSignatureInvalid => f.write_str("DDS signature not found"), + _ => ImageError::Decoding(DecodingError::new(ImageFormat::Dds.into(), e)), } } } -impl From for ImageError { - fn from(e: DecoderError) -> ImageError { - ImageError::Decoding(DecodingError::new(ImageFormat::Dds.into(), e)) +impl From for ImageError { + fn from(e: dds::EncodingError) -> ImageError { + match e { + dds::EncodingError::Io(e) => ImageError::IoError(e), + _ => ImageError::Encoding(EncodingError::new(ImageFormat::Dds.into(), e)), + } } } -impl error::Error for DecoderError {} - -/// Header used by DDS image files -#[derive(Debug)] -struct Header { - _flags: u32, - height: u32, - width: u32, - _pitch_or_linear_size: u32, - _depth: u32, - _mipmap_count: u32, - pixel_format: PixelFormat, - _caps: u32, - _caps2: u32, +fn to_color_type(color: dds::ColorFormat) -> ColorType { + match (color.channels, color.precision) { + (Channels::Alpha | Channels::Rgba, Precision::U8) => ColorType::Rgba8, + (Channels::Alpha | Channels::Rgba, Precision::U16) => ColorType::Rgba16, + (Channels::Alpha | Channels::Rgba, Precision::F32) => ColorType::Rgba32F, + (Channels::Rgb, Precision::U8) => ColorType::Rgb8, + (Channels::Rgb, Precision::U16) => ColorType::Rgb16, + (Channels::Rgb, Precision::F32) => ColorType::Rgb32F, + (Channels::Grayscale, Precision::U8) => ColorType::L8, + (Channels::Grayscale, Precision::U16) => ColorType::L16, + (Channels::Grayscale, Precision::F32) => ColorType::Rgb32F, + } } -/// Extended DX10 header used by some DDS image files -#[derive(Debug)] -struct DX10Header { - dxgi_format: u32, - resource_dimension: u32, - misc_flag: u32, - array_size: u32, - misc_flags_2: u32, -} +fn to_dds_color(color: ExtendedColorType) -> Option { + match color { + ExtendedColorType::A8 => Some(dds::ColorFormat::ALPHA_U8), -/// DDS pixel format -#[derive(Debug)] -struct PixelFormat { - flags: u32, - fourcc: [u8; 4], - _rgb_bit_count: u32, - _r_bit_mask: u32, - _g_bit_mask: u32, - _b_bit_mask: u32, - _a_bit_mask: u32, -} + ExtendedColorType::L8 => Some(dds::ColorFormat::GRAYSCALE_U8), + ExtendedColorType::L16 => Some(dds::ColorFormat::GRAYSCALE_U16), -impl PixelFormat { - fn from_reader(r: &mut dyn Read) -> ImageResult { - let size = r.read_u32::()?; - if size != 32 { - return Err(DecoderError::PixelFormatSizeInvalid(size).into()); - } + ExtendedColorType::Rgb8 => Some(dds::ColorFormat::RGB_U8), + ExtendedColorType::Rgb16 => Some(dds::ColorFormat::RGB_U16), + ExtendedColorType::Rgb32F => Some(dds::ColorFormat::RGB_F32), - Ok(Self { - flags: r.read_u32::()?, - fourcc: { - let mut v = [0; 4]; - r.read_exact(&mut v)?; - v - }, - _rgb_bit_count: r.read_u32::()?, - _r_bit_mask: r.read_u32::()?, - _g_bit_mask: r.read_u32::()?, - _b_bit_mask: r.read_u32::()?, - _a_bit_mask: r.read_u32::()?, - }) + ExtendedColorType::Rgba8 => Some(dds::ColorFormat::RGBA_U8), + ExtendedColorType::Rgba16 => Some(dds::ColorFormat::RGBA_U16), + ExtendedColorType::Rgba32F => Some(dds::ColorFormat::RGBA_F32), + + _ => None, } } -impl Header { - fn from_reader(r: &mut dyn Read) -> ImageResult { - let size = r.read_u32::()?; - if size != 124 { - return Err(DecoderError::HeaderSizeInvalid(size).into()); - } +/// DDS decoder +pub struct DdsDecoder { + inner: dds::Decoder, + is_cubemap: bool, + size: dds::Size, + color: dds::ColorFormat, +} - const REQUIRED_FLAGS: u32 = 0x1 | 0x2 | 0x4 | 0x1000; - const VALID_FLAGS: u32 = 0x1 | 0x2 | 0x4 | 0x8 | 0x1000 | 0x20000 | 0x80000 | 0x0080_0000; - let flags = r.read_u32::()?; - if flags & (REQUIRED_FLAGS | !VALID_FLAGS) != REQUIRED_FLAGS { - return Err(DecoderError::HeaderFlagsInvalid(flags).into()); +impl DdsDecoder { + /// Create a new decoder that decodes from the stream `r` + pub fn new(r: R) -> ImageResult { + let options = dds::header::ParseOptions::new_permissive(None); + let decoder = dds::Decoder::new_with_options(r, &options)?; + let layout = decoder.layout(); + + // We only support DDS files with: + // - A single main image with any number of mipmaps + // - A texture array of length 1 representing a cube map + match &layout { + dds::DataLayout::Volume(_) => { + return Err(ImageError::Decoding(DecodingError::new( + ImageFormat::Dds.into(), + "DDS volume textures are not supported for decoding", + ))) + } + dds::DataLayout::TextureArray(texture_array) => { + let supported_length = match texture_array.kind() { + dds::TextureArrayKind::Textures => 1, + dds::TextureArrayKind::CubeMaps => 6, + dds::TextureArrayKind::PartialCubeMap(cube_map_faces) => cube_map_faces.count(), + }; + if texture_array.len() != supported_length as usize { + return Err(ImageError::Decoding(DecodingError::new( + ImageFormat::Dds.into(), + "DDS texture arrays are not supported for decoding", + ))); + } + } + _ => {} } - let height = r.read_u32::()?; - let width = r.read_u32::()?; - let pitch_or_linear_size = r.read_u32::()?; - let depth = r.read_u32::()?; - let mipmap_count = r.read_u32::()?; - // Skip `dwReserved1` - { - let mut skipped = [0; 4 * 11]; - r.read_exact(&mut skipped)?; - } - let pixel_format = PixelFormat::from_reader(r)?; - let caps = r.read_u32::()?; - let caps2 = r.read_u32::()?; - // Skip `dwCaps3`, `dwCaps4`, `dwReserved2` (unused) - { - let mut skipped = [0; 4 + 4 + 4]; - r.read_exact(&mut skipped)?; + let mut size = decoder.main_size(); + let mut color = decoder.native_color(); + let is_cubemap = layout.is_cube_map(); + + // all cube map faces are read as one RGBA image + if is_cubemap { + if let (Some(width), Some(height)) = + (size.width.checked_mul(4), size.height.checked_mul(3)) + { + size.width = width; + size.height = height; + color.channels = Channels::Rgba; + } else { + return Err(ImageError::Decoding(DecodingError::new( + ImageFormat::Dds.into(), + "DDS cube map faces are too large to decode", + ))); + } } - Ok(Self { - _flags: flags, - height, - width, - _pitch_or_linear_size: pitch_or_linear_size, - _depth: depth, - _mipmap_count: mipmap_count, - pixel_format, - _caps: caps, - _caps2: caps2, + Ok(DdsDecoder { + inner: decoder, + is_cubemap, + size, + color, }) } -} -impl DX10Header { - fn from_reader(r: &mut dyn Read) -> ImageResult { - let dxgi_format = r.read_u32::()?; - let resource_dimension = r.read_u32::()?; - let misc_flag = r.read_u32::()?; - let array_size = r.read_u32::()?; - let misc_flags_2 = r.read_u32::()?; - - let dx10_header = Self { - dxgi_format, - resource_dimension, - misc_flag, - array_size, - misc_flags_2, + /// Set the color type for the decoder. + /// + /// The DDS decoder supports decoding images not just in their native color + /// format, but any user-defined color format. This is useful for decoding + /// images that do not cleanly fit into the native formats. E.g. the DDS + /// format `B5G6R5_UNORM` is decoded as [`ColorType::Rgb8`] by default, but + /// you may want to decode it as [`ColorType::Rgb32F`] instead to avoid the + /// rounding error when converting to `u8`. Similarly, your application may + /// only support 8-bit images, while the DDS file is in a 16/32-bit format. + /// Decoding directly into the final color type is more efficient than + /// decoding into the native format and then converting. + /// + /// # Panics + /// + /// [`ColorType::La8`] and [`ColorType::La16`] are not supported for decoding + /// DDS files. This function will panic if you try to set the color type to + /// these formats. + #[track_caller] + pub fn set_color_type(&mut self, color: ColorType) { + self.color = match color { + ColorType::L8 => dds::ColorFormat::GRAYSCALE_U8, + ColorType::Rgb8 => dds::ColorFormat::RGB_U8, + ColorType::Rgba8 => dds::ColorFormat::RGBA_U8, + ColorType::L16 => dds::ColorFormat::GRAYSCALE_U16, + ColorType::Rgb16 => dds::ColorFormat::RGB_U16, + ColorType::Rgba16 => dds::ColorFormat::RGBA_U16, + ColorType::Rgb32F => dds::ColorFormat::RGB_F32, + ColorType::Rgba32F => dds::ColorFormat::RGBA_F32, + ColorType::La8 | ColorType::La16 => { + panic!("La8 and La16 are not supported for decoding DDS files") + } }; - dx10_header.validate()?; + } +} - Ok(dx10_header) +impl ImageDecoder for DdsDecoder { + fn dimensions(&self) -> (u32, u32) { + (self.size.width, self.size.height) } - fn validate(&self) -> Result<(), ImageError> { - // Note: see https://docs.microsoft.com/en-us/windows/win32/direct3ddds/dds-header-dxt10 for info on valid values - if self.dxgi_format > 132 { - // Invalid format - return Err(DecoderError::DxgiFormatInvalid(self.dxgi_format).into()); - } + fn color_type(&self) -> ColorType { + to_color_type(self.color) + } - if self.resource_dimension < 2 || self.resource_dimension > 4 { - // Invalid dimension - // Only 1D (2), 2D (3) and 3D (4) resource dimensions are allowed - return Err(DecoderError::ResourceDimensionInvalid(self.resource_dimension).into()); - } + fn original_color_type(&self) -> ExtendedColorType { + use dds::Format; - if self.misc_flag != 0x0 && self.misc_flag != 0x4 { - // Invalid flag - // Only no (0x0) and DDS_RESOURCE_MISC_TEXTURECUBE (0x4) flags are allowed - return Err(DecoderError::Dx10FlagsInvalid(self.misc_flag).into()); + match self.inner.format() { + Format::R1_UNORM => ExtendedColorType::L1, + Format::B4G4R4A4_UNORM | Format::A4B4G4R4_UNORM => ExtendedColorType::Rgba4, + Format::A8_UNORM => ExtendedColorType::A8, + _ => to_color_type(self.inner.native_color()).into(), } + } - if self.resource_dimension == 4 && self.array_size != 1 { - // Invalid array size - // 3D textures (resource dimension == 4) must have an array size of 1 - return Err(DecoderError::Dx10ArraySizeInvalid(self.array_size).into()); + fn set_limits(&mut self, limits: crate::Limits) -> ImageResult<()> { + limits.check_dimensions(self.size.width, self.size.height)?; + + if let Some(max_alloc) = limits.max_alloc { + self.inner.options.memory_limit = max_alloc.try_into().unwrap_or(usize::MAX); } - if self.misc_flags_2 > 0x4 { - // Invalid alpha flags - return Err(DecoderError::Dx10FlagsInvalid(self.misc_flags_2).into()); + Ok(()) + } + + #[track_caller] + fn read_image(mut self, buf: &mut [u8]) -> ImageResult<()> { + let color = self.color; + let size = self.size; + + let image = dds::ImageViewMut::new(buf, size, color).expect("Invalid buffer length"); + + if self.is_cubemap { + self.inner.read_cube_map(image)?; + } else { + self.inner.read_surface(image)?; } Ok(()) } -} -/// The representation of a DDS decoder -pub struct DdsDecoder { - #[allow(deprecated)] - inner: DxtDecoder, + fn read_image_boxed(self: Box, buf: &mut [u8]) -> ImageResult<()> { + (*self).read_image(buf) + } } -impl DdsDecoder { - /// Create a new decoder that decodes from the stream `r` - pub fn new(mut r: R) -> ImageResult { - let mut magic = [0; 4]; - r.read_exact(&mut magic)?; - if magic != b"DDS "[..] { - return Err(DecoderError::DdsSignatureInvalid.into()); +impl ImageDecoderRect for DdsDecoder { + fn read_rect( + &mut self, + x: u32, + y: u32, + width: u32, + height: u32, + buf: &mut [u8], + row_pitch: usize, + ) -> ImageResult<()> { + // reading rectangles is not supported for cube maps + if self.is_cubemap { + return Err(ImageError::Decoding(DecodingError::new( + ImageFormat::Dds.into(), + "Reading rects from cubemaps is not supported", + ))); } - let header = Header::from_reader(&mut r)?; - - if header.pixel_format.flags & 0x4 != 0 { - #[allow(deprecated)] - let variant = match &header.pixel_format.fourcc { - b"DXT1" => DxtVariant::DXT1, - b"DXT3" => DxtVariant::DXT3, - b"DXT5" => DxtVariant::DXT5, - b"DX10" => { - let dx10_header = DX10Header::from_reader(&mut r)?; - // Format equivalents were taken from https://docs.microsoft.com/en-us/windows/win32/direct3d11/texture-block-compression-in-direct3d-11 - // The enum integer values were taken from https://docs.microsoft.com/en-us/windows/win32/api/dxgiformat/ne-dxgiformat-dxgi_format - // DXT1 represents the different BC1 variants, DTX3 represents the different BC2 variants and DTX5 represents the different BC3 variants - match dx10_header.dxgi_format { - 70..=72 => DxtVariant::DXT1, // DXGI_FORMAT_BC1_TYPELESS, DXGI_FORMAT_BC1_UNORM or DXGI_FORMAT_BC1_UNORM_SRGB - 73..=75 => DxtVariant::DXT3, // DXGI_FORMAT_BC2_TYPELESS, DXGI_FORMAT_BC2_UNORM or DXGI_FORMAT_BC2_UNORM_SRGB - 76..=78 => DxtVariant::DXT5, // DXGI_FORMAT_BC3_TYPELESS, DXGI_FORMAT_BC3_UNORM or DXGI_FORMAT_BC3_UNORM_SRGB - _ => { - return Err(ImageError::Unsupported( - UnsupportedError::from_format_and_kind( - ImageFormat::Dds.into(), - UnsupportedErrorKind::GenericFeature(format!( - "DDS DXGI Format {}", - dx10_header.dxgi_format - )), - ), - )) - } - } - } - fourcc => { - return Err(ImageError::Unsupported( - UnsupportedError::from_format_and_kind( - ImageFormat::Dds.into(), - UnsupportedErrorKind::GenericFeature(format!("DDS FourCC {fourcc:?}")), - ), - )) - } - }; + self.inner.read_surface_rect( + buf, + row_pitch, + dds::Rect::new(x, y, width, height), + self.color, + )?; + self.inner.rewind_to_previous_surface()?; - #[allow(deprecated)] - let bytes_per_pixel = variant.color_type().bytes_per_pixel(); + Ok(()) + } +} - if crate::utils::check_dimension_overflow(header.width, header.height, bytes_per_pixel) - { - return Err(ImageError::Unsupported( - UnsupportedError::from_format_and_kind( - ImageFormat::Dds.into(), - UnsupportedErrorKind::GenericFeature(format!( - "Image dimensions ({}x{}) are too large", - header.width, header.height - )), - ), - )); +/// The preferred header format for DDS files. +/// +/// DDS supports 2 header formats: +/// +/// - DX9: This is the legacy header format that was used before DirectX 10. +/// - DX10: The modern header format that was introduced with DirectX 10. +/// +/// Both formats are widely supported nowadays, but the DX10 format is the +/// preferred format for a few reasons: +/// +/// 1. It supports more features (such as texture arrays). +/// 2. It uses the DXGI format, which is more consistent, easier to work with, +/// and supports more and more varied formats. +/// +/// DX9 has 2 ways to specify the pixel format of a file: FourCC and channel +/// bit masks. Neither are fully standardized, so formats are supported on +/// a best-effort basis. +/// 3. It is better-specified in general, meaning that the problem of two DDS +/// decoders interpreting the same file differently is virtually non-existent. +/// +/// However, if compatibility with older software is a concern, DX9 may be +/// the only choice. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +pub enum HeaderFormat { + /// The legacy header format used in DirectX 9 and earlier. + Dx9, + /// The modern header format used in DirectX 10 and later. + #[default] + Dx10, +} + +/// The speed-quality tradeoff for compression. +/// +/// This will generally only affect compressed formats, such as the BCn formats. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +pub enum CompressionQuality { + /// Fastest compression, lowest quality. + Fastest, + /// A good balance between speed and quality. + #[default] + Default, + /// Slowest compression, highest quality. + High, +} + +/// Format used for encoding. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +pub enum DdsFormat { + /// The encoder will automatically pick a linear uncompressed format. + #[default] + AutoUncompressed, + + /// 8-bit uncompressed alpha. + A8Unorm, + /// 8-bit uncompressed Grayscale. + R8Unorm, + /// 8-bit uncompressed RG. + R8G8Unorm, + /// 8-bit uncompressed RGBA. + R8G8B8A8Unorm, + /// 8-bit uncompressed RGBA. + /// + /// This format requires DX10. + R8G8B8A8UnormSrgb, + + /// 16-bit uncompressed Grayscale. + R16Unorm, + /// 16-bit uncompressed RG. + R16G16Unorm, + /// 16-bit uncompressed RGBA. + R16G16B16A16Unorm, + + /// 16-bit floating-point uncompressed Grayscale. + R16Float, + /// 16-bit floating-point uncompressed RG. + R16G16Float, + /// 16-bit floating-point uncompressed RGBA. + R16G16B16A16Float, + + /// 32-bit floating-point uncompressed Grayscale. + R32Float, + /// 32-bit floating-point uncompressed RG. + R32G32Float, + /// 32-bit floating-point uncompressed RGB. + /// + /// This format requires DX10. + R32G32B32Float, + /// 32-bit floating-point uncompressed RGBA. + R32G32B32A32Float, + + /// 8-bit uncompressed BGR. + /// + /// This format requires DX9. + B8G8R8Unorm, + /// 4-bit uncompressed BGRA. + B4G4R4A4Unorm, + /// 5-bit uncompressed BGR with 1-bit alpha. + B5G5R5A1Unorm, + /// Uncompressed BGRA with 5 bits for blue, 6 bits for green, and 5 bits for red. + B5G6R5Unorm, + /// 10-bit uncompressed RGB with 2-bit alpha. + R10G10B10A2Unorm, + + /// An HDR format that can store floating-point numbers between 0.0 and 65408.0. + /// + /// This format requires DX10. + R9G9B9E5Float, + /// An HDR format that stores components as unsigned 11/10-bit floating-point numbers. + /// + /// This format requires DX10. + R11G11B10Float, + + /// 8-bit YUV, 4:2:2 sub-sampled. + YUY2, + + /// Linear BC1. This is also called `DXT1` in DX9. + BC1Unorm, + /// sRGB BC1. + /// + /// This format requires DX10. + BC1UnormSrgb, + /// Linear BC2. This is also called `DXT3` in DX9. + BC2Unorm, + /// sRGB BC2. + /// + /// This format requires DX10. + BC2UnormSrgb, + /// Linear BC3. This is also called `DXT5` in DX9. + BC3Unorm, + /// sRGB BC3. + /// + /// This format requires DX10. + BC3UnormSrgb, + /// Unsigned BC4. This is also called `ATI1` or `BC4U` in DX9. + BC4Unorm, + /// Signed BC4. This is also called `BC4S` in DX9. + BC4Snorm, + /// Unsigned BC5. This is also called `ATI2` or `BC5U` in DX9. + BC5Unorm, + /// Signed BC5. This is also called `BC5S` in DX9. + BC5Snorm, +} +impl DdsFormat { + fn to_format(self, color: ExtendedColorType) -> (dds::Format, bool) { + use dds::Format; + + match self { + DdsFormat::AutoUncompressed => { + let format = match color { + // formats that can be represented exactly + ExtendedColorType::A8 => Format::A8_UNORM, + ExtendedColorType::L1 => Format::R1_UNORM, + ExtendedColorType::L8 => Format::R8_UNORM, + ExtendedColorType::Rgb8 | ExtendedColorType::Bgr8 => Format::B8G8R8_UNORM, + ExtendedColorType::Rgba8 | ExtendedColorType::Bgra8 => Format::R8G8B8A8_UNORM, + ExtendedColorType::L16 => Format::R16_UNORM, + ExtendedColorType::Rgba16 => Format::R16G16B16A16_UNORM, + ExtendedColorType::Rgb32F => Format::R32G32B32_FLOAT, + ExtendedColorType::Rgba32F => Format::R32G32B32A32_FLOAT, + + // pick a format that can represent all values + ExtendedColorType::La8 => Format::R8G8B8A8_UNORM, + ExtendedColorType::La16 => Format::R16G16B16A16_UNORM, + ExtendedColorType::Rgb16 => Format::R16G16B16A16_UNORM, + ExtendedColorType::L2 | ExtendedColorType::L4 => Format::R8_UNORM, + ExtendedColorType::La1 + | ExtendedColorType::Rgb1 + | ExtendedColorType::Rgba1 + | ExtendedColorType::La2 + | ExtendedColorType::Rgb2 + | ExtendedColorType::Rgba2 + | ExtendedColorType::La4 + | ExtendedColorType::Rgb4 + | ExtendedColorType::Rgba4 => Format::B4G4R4A4_UNORM, + + ExtendedColorType::Cmyk8 | ExtendedColorType::Unknown(_) => unreachable!(), + }; + + (format, false) } - #[allow(deprecated)] - let inner = DxtDecoder::new(r, header.width, header.height, variant)?; - Ok(Self { inner }) - } else { - // For now, supports only DXT variants - Err(ImageError::Unsupported( - UnsupportedError::from_format_and_kind( - ImageFormat::Dds.into(), - UnsupportedErrorKind::Format(ImageFormatHint::Name("DDS".to_string())), - ), - )) + DdsFormat::A8Unorm => (Format::A8_UNORM, false), + DdsFormat::R8Unorm => (Format::R8_UNORM, false), + DdsFormat::R8G8Unorm => (Format::R8G8_UNORM, false), + DdsFormat::R8G8B8A8Unorm => (Format::R8G8B8A8_UNORM, false), + DdsFormat::R8G8B8A8UnormSrgb => (Format::R8G8B8A8_UNORM, true), + DdsFormat::R16Unorm => (Format::R16_UNORM, false), + DdsFormat::R16G16Unorm => (Format::R16G16_UNORM, false), + DdsFormat::R16G16B16A16Unorm => (Format::R16G16B16A16_UNORM, false), + DdsFormat::R16Float => (Format::R16_FLOAT, false), + DdsFormat::R16G16Float => (Format::R16G16_FLOAT, false), + DdsFormat::R16G16B16A16Float => (Format::R16G16B16A16_FLOAT, false), + DdsFormat::R32Float => (Format::R32_FLOAT, false), + DdsFormat::R32G32Float => (Format::R32G32_FLOAT, false), + DdsFormat::R32G32B32Float => (Format::R32G32B32_FLOAT, false), + DdsFormat::R32G32B32A32Float => (Format::R32G32B32A32_FLOAT, false), + DdsFormat::B8G8R8Unorm => (Format::B8G8R8_UNORM, false), + DdsFormat::B4G4R4A4Unorm => (Format::B4G4R4A4_UNORM, false), + DdsFormat::B5G5R5A1Unorm => (Format::B5G5R5A1_UNORM, false), + DdsFormat::B5G6R5Unorm => (Format::B5G6R5_UNORM, false), + DdsFormat::R10G10B10A2Unorm => (Format::R10G10B10A2_UNORM, false), + DdsFormat::R9G9B9E5Float => (Format::R9G9B9E5_SHAREDEXP, false), + DdsFormat::R11G11B10Float => (Format::R11G11B10_FLOAT, false), + DdsFormat::YUY2 => (Format::YUY2, false), + + DdsFormat::BC1Unorm => (Format::BC1_UNORM, false), + DdsFormat::BC1UnormSrgb => (Format::BC1_UNORM, true), + DdsFormat::BC2Unorm => (Format::BC2_UNORM, false), + DdsFormat::BC2UnormSrgb => (Format::BC2_UNORM, true), + DdsFormat::BC3Unorm => (Format::BC3_UNORM, false), + DdsFormat::BC3UnormSrgb => (Format::BC3_UNORM, true), + DdsFormat::BC4Unorm => (Format::BC4_UNORM, false), + DdsFormat::BC4Snorm => (Format::BC4_SNORM, false), + DdsFormat::BC5Unorm => (Format::BC5_UNORM, false), + DdsFormat::BC5Snorm => (Format::BC5_SNORM, false), } } } -impl ImageDecoder for DdsDecoder { - fn dimensions(&self) -> (u32, u32) { - self.inner.dimensions() +/// Whether and how many mipmaps to generate. +#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] +pub enum Mipmaps { + /// No mipmaps will be generated. Only the main surface will be stored in the file. + #[default] + None, + /// The full mipmap chain will be generated. + Full, + /// The first `n` mipmaps of the mipmap chain will be generated. + /// + /// If the number is 0 or 1, this is equivalent to [`None`]. + /// + /// If the number is greater than the number of mipmaps in the full mipmap + /// chain, the chain will include have a tail of multiple 1x1 mipmaps. + Fixed(u8), +} + +/// DDS encoder +pub struct DdsEncoder { + writer: W, + format: DdsFormat, + preferred_header: HeaderFormat, + quality: dds::CompressionQuality, + error_metric: dds::ErrorMetric, + dithering: dds::Dithering, + straight_alpha: bool, + mipmaps: Mipmaps, +} + +impl DdsEncoder { + /// Create a new encoder that encodes to the stream `w` + pub fn new(w: W) -> Self { + DdsEncoder { + writer: w, + format: DdsFormat::AutoUncompressed, + preferred_header: HeaderFormat::Dx10, + quality: dds::CompressionQuality::Normal, + error_metric: dds::ErrorMetric::Uniform, + dithering: dds::Dithering::None, + straight_alpha: true, + mipmaps: Mipmaps::None, + } } - fn color_type(&self) -> ColorType { - self.inner.color_type() + /// Create a DDS file with the given format. + pub fn with_format(mut self, format: DdsFormat) -> Self { + self.format = format; + self } - fn read_image(self, buf: &mut [u8]) -> ImageResult<()> { - self.inner.read_image(buf) + /// Create a DDS file with the given header format. + /// + /// Note that the specified DDS format takes precedence over the preferred + /// header format. So if a DDS format does not support the preferred header + /// format, the encoder will use the header format specified by the DDS + /// format. + /// + /// By default, the encoder will use the DX10 header format. + pub fn with_preferred_header(mut self, header: HeaderFormat) -> Self { + self.preferred_header = header; + self } - fn read_image_boxed(self: Box, buf: &mut [u8]) -> ImageResult<()> { - (*self).read_image(buf) + /// Set the compression quality for the encoder. + /// + /// By default, the compression quality is set to [`CompressionQuality::Default`]. + pub fn with_compression_quality(mut self, quality: CompressionQuality) -> Self { + self.quality = match quality { + CompressionQuality::Fastest => dds::CompressionQuality::Fast, + CompressionQuality::Default => dds::CompressionQuality::Normal, + CompressionQuality::High => dds::CompressionQuality::High, + }; + self + } + + /// Use a perceptual error metric for compression. + /// + /// By default, the encoder uses a uniform error metric for compression, + /// meaning that it tries to minimize the mean squared error (MSE) between the + /// original and compressed image. + /// + /// Better visual results can be achieved by using a perceptual error + /// metric for albedo, diffuse, and photographic textures. This metric + /// accounts for how the human eye perceives color, and will produce better + /// results for these types of images. + /// + /// However, a perceptual error metric is not recommended for normal maps, + /// specular maps, and height maps, as it will produce worse artifacts. + /// + /// Note: The perceptual error metric assumes that image data is in sRGB, + /// irrespective of whether the DDS format is linear or sRGB. Do not use the + /// perceptual error metric if the image data is in linear RGB or any other + /// color space. + pub fn with_perceptual_error_metric(mut self) -> Self { + self.error_metric = dds::ErrorMetric::Perceptual; + self + } + + /// Enables dithering when encoding images with a higher bit depth to a + /// lower bit depth. + /// + /// Note: Not all formats support dithering. The encoder will ignore this option + /// if the format does not support dithering. + pub fn with_dithering(mut self) -> Self { + self.dithering = dds::Dithering::ColorAndAlpha; + self + } + + /// Create a DDS file with the given number of mipmaps. + /// + /// Mipmaps will be automatically generated from the main image. + /// + /// By default, no mipmaps are generated. + /// + /// Note: If the image contains an alpha channel that is **not** straight + /// alpha, you should use also use [`DdsEncoder::with_separate_alpha`] to + /// ensure that the other channels are not affected by the alpha channel. + pub fn with_mipmaps(mut self, mipmaps: Mipmaps) -> Self { + self.mipmaps = mipmaps; + self + } + + /// Separate alpha from the other channels when resizing to generate mipmaps. + /// + /// By default, the encoder assumes straight alpha. This is necessary to + /// prevent color bleeding when resizing the image to generate mipmaps. + /// However, this also means that pixels for which the alpha channel is 0 + /// will lose any and all color information. This is not a problem if the + /// alpha channels contains transparency information, but it is a problem + /// if the alpha channel is used for other purposes (e.g. a mask or height + /// map). In this case, use this function to specify that the alpha channel + /// should be treated as a separate channel and not as transparency. + pub fn with_separate_alpha(mut self) -> Self { + self.straight_alpha = false; + self } } -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn dimension_overflow() { - // A DXT1 header set to 0xFFFF_FFFC width and height (the highest u32%4 == 0) - let header = [ - 0x44, 0x44, 0x53, 0x20, 0x7C, 0x0, 0x0, 0x0, 0x7, 0x10, 0x8, 0x0, 0xFC, 0xFF, 0xFF, - 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0x0, 0xC0, 0x12, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, - 0x0, 0x49, 0x4D, 0x41, 0x47, 0x45, 0x4D, 0x41, 0x47, 0x49, 0x43, 0x4B, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, - 0x4, 0x0, 0x0, 0x0, 0x44, 0x58, 0x54, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0, - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ]; - - assert!(DdsDecoder::new(&header[..]).is_err()); +impl ImageEncoder for DdsEncoder { + fn write_image( + self, + buf: &[u8], + width: u32, + height: u32, + color_type: ExtendedColorType, + ) -> ImageResult<()> { + let color = to_dds_color(color_type).ok_or_else(|| { + ImageError::Unsupported(UnsupportedError::from_format_and_kind( + ImageFormat::Dds.into(), + UnsupportedErrorKind::Color(color_type), + )) + })?; + let image = dds::ImageView::new(buf, dds::Size::new(width, height), color) + .expect("Invalid buffer length"); + + let (format, is_srgb) = self.format.to_format(color_type); + + // create the header + use dds::header::Header; + let mut header: Header = if is_srgb { + // force DX10 header + let dxgi = dds::header::DxgiFormat::try_from(format).unwrap(); + dds::header::Dx10Header::new_image(width, height, dxgi.to_srgb()).into() + } else { + let header = Header::new_image(width, height, format); + match self.preferred_header { + HeaderFormat::Dx9 => header.to_dx9().map(Header::from).unwrap_or(header), + HeaderFormat::Dx10 => header.to_dx10().map(Header::from).unwrap_or(header), + } + }; + + match self.mipmaps { + Mipmaps::None => {} + Mipmaps::Full => header = header.with_mipmaps(), + Mipmaps::Fixed(n) => { + if n > 1 { + header = header.with_mipmap_count(n as u32); + } + } + } + + // encode the image + let mut encoder = dds::Encoder::new(self.writer, format, &header)?; + encoder.options.dithering = self.dithering; + encoder.options.error_metric = self.error_metric; + encoder.options.quality = self.quality; + + let options = dds::WriteOptions { + generate_mipmaps: true, + resize_straight_alpha: self.straight_alpha, + ..Default::default() + }; + + encoder.write_surface_with(image, None, &options)?; + encoder.finish()?; + + Ok(()) } } diff --git a/src/codecs/dxt.rs b/src/codecs/dxt.rs deleted file mode 100644 index 9f3ee253d3..0000000000 --- a/src/codecs/dxt.rs +++ /dev/null @@ -1,347 +0,0 @@ -//! Decoding of DXT (S3TC) compression -//! -//! DXT is an image format that supports lossy compression -//! -//! # Related Links -//! * - Description of the DXT compression OpenGL extensions. -//! -//! Note: this module only implements bare DXT encoding/decoding, it does not parse formats that can contain DXT files like .dds - -use std::io::{self, Read}; - -use crate::color::ColorType; -use crate::error::{ImageError, ImageResult, ParameterError, ParameterErrorKind}; -use crate::image::ImageDecoder; - -/// What version of DXT compression are we using? -/// Note that DXT2 and DXT4 are left away as they're -/// just DXT3 and DXT5 with premultiplied alpha -#[derive(Clone, Copy, Debug, PartialEq, Eq)] -pub(crate) enum DxtVariant { - /// The DXT1 format. 48 bytes of RGB data in a 4x4 pixel square is - /// compressed into an 8 byte block of DXT1 data - DXT1, - /// The DXT3 format. 64 bytes of RGBA data in a 4x4 pixel square is - /// compressed into a 16 byte block of DXT3 data - DXT3, - /// The DXT5 format. 64 bytes of RGBA data in a 4x4 pixel square is - /// compressed into a 16 byte block of DXT5 data - DXT5, -} - -impl DxtVariant { - /// Returns the amount of bytes of raw image data - /// that is encoded in a single DXTn block - fn decoded_bytes_per_block(self) -> usize { - match self { - DxtVariant::DXT1 => 48, - DxtVariant::DXT3 | DxtVariant::DXT5 => 64, - } - } - - /// Returns the amount of bytes per block of encoded DXTn data - fn encoded_bytes_per_block(self) -> usize { - match self { - DxtVariant::DXT1 => 8, - DxtVariant::DXT3 | DxtVariant::DXT5 => 16, - } - } - - /// Returns the color type that is stored in this DXT variant - pub(crate) fn color_type(self) -> ColorType { - match self { - DxtVariant::DXT1 => ColorType::Rgb8, - DxtVariant::DXT3 | DxtVariant::DXT5 => ColorType::Rgba8, - } - } -} - -/// DXT decoder -pub(crate) struct DxtDecoder { - inner: R, - width_blocks: u32, - height_blocks: u32, - variant: DxtVariant, - row: u32, -} - -impl DxtDecoder { - /// Create a new DXT decoder that decodes from the stream ```r```. - /// As DXT is often stored as raw buffers with the width/height - /// somewhere else the width and height of the image need - /// to be passed in ```width``` and ```height```, as well as the - /// DXT variant in ```variant```. - /// width and height are required to be powers of 2 and at least 4. - /// otherwise an error will be returned - pub(crate) fn new( - r: R, - width: u32, - height: u32, - variant: DxtVariant, - ) -> Result, ImageError> { - if width % 4 != 0 || height % 4 != 0 { - // TODO: this is actually a bit of a weird case. We could return `DecodingError` but - // it's not really the format that is wrong However, the encoder should surely return - // `EncodingError` so it would be the logical choice for symmetry. - return Err(ImageError::Parameter(ParameterError::from_kind( - ParameterErrorKind::DimensionMismatch, - ))); - } - let width_blocks = width / 4; - let height_blocks = height / 4; - Ok(DxtDecoder { - inner: r, - width_blocks, - height_blocks, - variant, - row: 0, - }) - } - - fn scanline_bytes(&self) -> u64 { - self.variant.decoded_bytes_per_block() as u64 * u64::from(self.width_blocks) - } - - fn read_scanline(&mut self, buf: &mut [u8]) -> io::Result { - assert_eq!( - u64::try_from(buf.len()), - Ok( - #[allow(deprecated)] - self.scanline_bytes() - ) - ); - - let mut src = - vec![0u8; self.variant.encoded_bytes_per_block() * self.width_blocks as usize]; - self.inner.read_exact(&mut src)?; - match self.variant { - DxtVariant::DXT1 => decode_dxt1_row(&src, buf), - DxtVariant::DXT3 => decode_dxt3_row(&src, buf), - DxtVariant::DXT5 => decode_dxt5_row(&src, buf), - } - self.row += 1; - Ok(buf.len()) - } -} - -// Note that, due to the way that DXT compression works, a scanline is considered to consist out of -// 4 lines of pixels. -impl ImageDecoder for DxtDecoder { - fn dimensions(&self) -> (u32, u32) { - (self.width_blocks * 4, self.height_blocks * 4) - } - - fn color_type(&self) -> ColorType { - self.variant.color_type() - } - - fn read_image(mut self, buf: &mut [u8]) -> ImageResult<()> { - assert_eq!(u64::try_from(buf.len()), Ok(self.total_bytes())); - - #[allow(deprecated)] - for chunk in buf.chunks_mut(self.scanline_bytes().max(1) as usize) { - self.read_scanline(chunk)?; - } - Ok(()) - } - - fn read_image_boxed(self: Box, buf: &mut [u8]) -> ImageResult<()> { - (*self).read_image(buf) - } -} - -/** - * Actual encoding/decoding logic below. - */ -type Rgb = [u8; 3]; - -/// decodes a 5-bit R, 6-bit G, 5-bit B 16-bit packed color value into 8-bit RGB -/// mapping is done so min/max range values are preserved. So for 5-bit -/// values 0x00 -> 0x00 and 0x1F -> 0xFF -fn enc565_decode(value: u16) -> Rgb { - let red = (value >> 11) & 0x1F; - let green = (value >> 5) & 0x3F; - let blue = (value) & 0x1F; - [ - (red * 0xFF / 0x1F) as u8, - (green * 0xFF / 0x3F) as u8, - (blue * 0xFF / 0x1F) as u8, - ] -} - -/* - * Functions for decoding DXT compression - */ - -/// Constructs the DXT5 alpha lookup table from the two alpha entries -/// if alpha0 > alpha1, constructs a table of [a0, a1, 6 linearly interpolated values from a0 to a1] -/// if alpha0 <= alpha1, constructs a table of [a0, a1, 4 linearly interpolated values from a0 to a1, 0, 0xFF] -fn alpha_table_dxt5(alpha0: u8, alpha1: u8) -> [u8; 8] { - let mut table = [alpha0, alpha1, 0, 0, 0, 0, 0, 0xFF]; - if alpha0 > alpha1 { - for i in 2..8u16 { - table[i as usize] = - (((8 - i) * u16::from(alpha0) + (i - 1) * u16::from(alpha1)) / 7) as u8; - } - } else { - for i in 2..6u16 { - table[i as usize] = - (((6 - i) * u16::from(alpha0) + (i - 1) * u16::from(alpha1)) / 5) as u8; - } - } - table -} - -/// decodes an 8-byte dxt color block into the RGB channels of a 16xRGB or 16xRGBA block. -/// source should have a length of 8, dest a length of 48 (RGB) or 64 (RGBA) -fn decode_dxt_colors(source: &[u8], dest: &mut [u8], is_dxt1: bool) { - // sanity checks, also enable the compiler to elide all following bound checks - assert!(source.len() == 8 && (dest.len() == 48 || dest.len() == 64)); - // calculate pitch to store RGB values in dest (3 for RGB, 4 for RGBA) - let pitch = dest.len() / 16; - - // extract color data - let color0 = u16::from(source[0]) | (u16::from(source[1]) << 8); - let color1 = u16::from(source[2]) | (u16::from(source[3]) << 8); - let color_table = u32::from(source[4]) - | (u32::from(source[5]) << 8) - | (u32::from(source[6]) << 16) - | (u32::from(source[7]) << 24); - // let color_table = source[4..8].iter().rev().fold(0, |t, &b| (t << 8) | b as u32); - - // decode the colors to rgb format - let mut colors = [[0; 3]; 4]; - colors[0] = enc565_decode(color0); - colors[1] = enc565_decode(color1); - - // determine color interpolation method - if color0 > color1 || !is_dxt1 { - // linearly interpolate the other two color table entries - for i in 0..3 { - colors[2][i] = ((u16::from(colors[0][i]) * 2 + u16::from(colors[1][i]) + 1) / 3) as u8; - colors[3][i] = ((u16::from(colors[0][i]) + u16::from(colors[1][i]) * 2 + 1) / 3) as u8; - } - } else { - // linearly interpolate one other entry, keep the other at 0 - for i in 0..3 { - colors[2][i] = ((u16::from(colors[0][i]) + u16::from(colors[1][i]) + 1) / 2) as u8; - } - } - - // serialize the result. Every color is determined by looking up - // two bits in color_table which identify which color to actually pick from the 4 possible colors - for i in 0..16 { - dest[i * pitch..i * pitch + 3] - .copy_from_slice(&colors[(color_table >> (i * 2)) as usize & 3]); - } -} - -/// Decodes a 16-byte bock of dxt5 data to a 16xRGBA block -fn decode_dxt5_block(source: &[u8], dest: &mut [u8]) { - assert!(source.len() == 16 && dest.len() == 64); - - // extract alpha index table (stored as little endian 64-bit value) - let alpha_table = source[2..8] - .iter() - .rev() - .fold(0, |t, &b| (t << 8) | u64::from(b)); - - // alpha level decode - let alphas = alpha_table_dxt5(source[0], source[1]); - - // serialize alpha - for i in 0..16 { - dest[i * 4 + 3] = alphas[(alpha_table >> (i * 3)) as usize & 7]; - } - - // handle colors - decode_dxt_colors(&source[8..16], dest, false); -} - -/// Decodes a 16-byte bock of dxt3 data to a 16xRGBA block -fn decode_dxt3_block(source: &[u8], dest: &mut [u8]) { - assert!(source.len() == 16 && dest.len() == 64); - - // extract alpha index table (stored as little endian 64-bit value) - let alpha_table = source[0..8] - .iter() - .rev() - .fold(0, |t, &b| (t << 8) | u64::from(b)); - - // serialize alpha (stored as 4-bit values) - for i in 0..16 { - dest[i * 4 + 3] = ((alpha_table >> (i * 4)) as u8 & 0xF) * 0x11; - } - - // handle colors - decode_dxt_colors(&source[8..16], dest, false); -} - -/// Decodes a 8-byte bock of dxt5 data to a 16xRGB block -fn decode_dxt1_block(source: &[u8], dest: &mut [u8]) { - assert!(source.len() == 8 && dest.len() == 48); - decode_dxt_colors(source, dest, true); -} - -/// Decode a row of DXT1 data to four rows of RGB data. -/// `source.len()` should be a multiple of 8, otherwise this panics. -fn decode_dxt1_row(source: &[u8], dest: &mut [u8]) { - assert!(source.len() % 8 == 0); - let block_count = source.len() / 8; - assert!(dest.len() >= block_count * 48); - - // contains the 16 decoded pixels per block - let mut decoded_block = [0u8; 48]; - - for (x, encoded_block) in source.chunks(8).enumerate() { - decode_dxt1_block(encoded_block, &mut decoded_block); - - // copy the values from the decoded block to linewise RGB layout - for line in 0..4 { - let offset = (block_count * line + x) * 12; - dest[offset..offset + 12].copy_from_slice(&decoded_block[line * 12..(line + 1) * 12]); - } - } -} - -/// Decode a row of DXT3 data to four rows of RGBA data. -/// `source.len()` should be a multiple of 16, otherwise this panics. -fn decode_dxt3_row(source: &[u8], dest: &mut [u8]) { - assert!(source.len() % 16 == 0); - let block_count = source.len() / 16; - assert!(dest.len() >= block_count * 64); - - // contains the 16 decoded pixels per block - let mut decoded_block = [0u8; 64]; - - for (x, encoded_block) in source.chunks(16).enumerate() { - decode_dxt3_block(encoded_block, &mut decoded_block); - - // copy the values from the decoded block to linewise RGB layout - for line in 0..4 { - let offset = (block_count * line + x) * 16; - dest[offset..offset + 16].copy_from_slice(&decoded_block[line * 16..(line + 1) * 16]); - } - } -} - -/// Decode a row of DXT5 data to four rows of RGBA data. -/// `source.len()` should be a multiple of 16, otherwise this panics. -fn decode_dxt5_row(source: &[u8], dest: &mut [u8]) { - assert!(source.len() % 16 == 0); - let block_count = source.len() / 16; - assert!(dest.len() >= block_count * 64); - - // contains the 16 decoded pixels per block - let mut decoded_block = [0u8; 64]; - - for (x, encoded_block) in source.chunks(16).enumerate() { - decode_dxt5_block(encoded_block, &mut decoded_block); - - // copy the values from the decoded block to linewise RGB layout - for line in 0..4 { - let offset = (block_count * line + x) * 16; - dest[offset..offset + 16].copy_from_slice(&decoded_block[line * 16..(line + 1) * 16]); - } - } -} diff --git a/src/image_reader/free_functions.rs b/src/image_reader/free_functions.rs index 57fbb72466..ee8a607261 100644 --- a/src/image_reader/free_functions.rs +++ b/src/image_reader/free_functions.rs @@ -80,6 +80,10 @@ pub(crate) fn write_buffer_impl( ImageFormat::Ico => { ico::IcoEncoder::new(buffered_write).write_image(buf, width, height, color) } + #[cfg(feature = "dds")] + ImageFormat::Dds => { + dds::DdsEncoder::new(buffered_write).write_image(buf, width, height, color) + } #[cfg(feature = "bmp")] ImageFormat::Bmp => { bmp::BmpEncoder::new(buffered_write).write_image(buf, width, height, color) diff --git a/src/lib.rs b/src/lib.rs index b691d10a82..9c90d51a2b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -215,7 +215,7 @@ pub mod flat; /// | -------- | ----------------------------------------- | --------------------------------------- | /// | AVIF | Yes \* | Yes (lossy only) | /// | BMP | Yes | Yes | -/// | DDS | Yes | --- | +/// | DDS | Yes | Yes \*\* | /// | Farbfeld | Yes | Yes | /// | GIF | Yes | Yes | /// | HDR | Yes | Yes | @@ -230,6 +230,8 @@ pub mod flat; /// | WebP | Yes | Yes (lossless only) | /// /// - \* Requires the `avif-native` feature, uses the libdav1d C library. +/// - \*\* See the documentation of the [`dds` crate](https://github.com/image-rs/image-dds) for a +/// full list of supported formats. /// /// ## A note on format specific features /// @@ -285,9 +287,6 @@ pub mod codecs { pub mod tiff; #[cfg(feature = "webp")] pub mod webp; - - #[cfg(feature = "dds")] - mod dxt; } mod animation; From 939ae520467ad2c00917e9b13cb182a809f53cbe Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Thu, 1 May 2025 13:51:56 +0200 Subject: [PATCH 2/7] Fixed accidental public impl --- src/codecs/dds.rs | 143 ++++++++++++++++++++++++---------------------- 1 file changed, 76 insertions(+), 67 deletions(-) diff --git a/src/codecs/dds.rs b/src/codecs/dds.rs index 58e58b47da..ad528fc7ae 100644 --- a/src/codecs/dds.rs +++ b/src/codecs/dds.rs @@ -17,60 +17,6 @@ use crate::error::{ }; use crate::image::{ImageDecoder, ImageDecoderRect, ImageEncoder, ImageFormat}; -impl From for ImageError { - fn from(e: dds::DecodingError) -> ImageError { - match e { - dds::DecodingError::Io(e) => ImageError::IoError(e), - dds::DecodingError::MemoryLimitExceeded => { - ImageError::Limits(LimitError::from_kind(LimitErrorKind::DimensionError)) - } - _ => ImageError::Decoding(DecodingError::new(ImageFormat::Dds.into(), e)), - } - } -} - -impl From for ImageError { - fn from(e: dds::EncodingError) -> ImageError { - match e { - dds::EncodingError::Io(e) => ImageError::IoError(e), - _ => ImageError::Encoding(EncodingError::new(ImageFormat::Dds.into(), e)), - } - } -} - -fn to_color_type(color: dds::ColorFormat) -> ColorType { - match (color.channels, color.precision) { - (Channels::Alpha | Channels::Rgba, Precision::U8) => ColorType::Rgba8, - (Channels::Alpha | Channels::Rgba, Precision::U16) => ColorType::Rgba16, - (Channels::Alpha | Channels::Rgba, Precision::F32) => ColorType::Rgba32F, - (Channels::Rgb, Precision::U8) => ColorType::Rgb8, - (Channels::Rgb, Precision::U16) => ColorType::Rgb16, - (Channels::Rgb, Precision::F32) => ColorType::Rgb32F, - (Channels::Grayscale, Precision::U8) => ColorType::L8, - (Channels::Grayscale, Precision::U16) => ColorType::L16, - (Channels::Grayscale, Precision::F32) => ColorType::Rgb32F, - } -} - -fn to_dds_color(color: ExtendedColorType) -> Option { - match color { - ExtendedColorType::A8 => Some(dds::ColorFormat::ALPHA_U8), - - ExtendedColorType::L8 => Some(dds::ColorFormat::GRAYSCALE_U8), - ExtendedColorType::L16 => Some(dds::ColorFormat::GRAYSCALE_U16), - - ExtendedColorType::Rgb8 => Some(dds::ColorFormat::RGB_U8), - ExtendedColorType::Rgb16 => Some(dds::ColorFormat::RGB_U16), - ExtendedColorType::Rgb32F => Some(dds::ColorFormat::RGB_F32), - - ExtendedColorType::Rgba8 => Some(dds::ColorFormat::RGBA_U8), - ExtendedColorType::Rgba16 => Some(dds::ColorFormat::RGBA_U16), - ExtendedColorType::Rgba32F => Some(dds::ColorFormat::RGBA_F32), - - _ => None, - } -} - /// DDS decoder pub struct DdsDecoder { inner: dds::Decoder, @@ -83,7 +29,8 @@ impl DdsDecoder { /// Create a new decoder that decodes from the stream `r` pub fn new(r: R) -> ImageResult { let options = dds::header::ParseOptions::new_permissive(None); - let decoder = dds::Decoder::new_with_options(r, &options)?; + let decoder = + dds::Decoder::new_with_options(r, &options).map_err(ImageError::from_dds_decode)?; let layout = decoder.layout(); // We only support DDS files with: @@ -213,9 +160,13 @@ impl ImageDecoder for DdsDecoder { let image = dds::ImageViewMut::new(buf, size, color).expect("Invalid buffer length"); if self.is_cubemap { - self.inner.read_cube_map(image)?; + self.inner + .read_cube_map(image) + .map_err(ImageError::from_dds_decode)?; } else { - self.inner.read_surface(image)?; + self.inner + .read_surface(image) + .map_err(ImageError::from_dds_decode)?; } Ok(()) @@ -244,13 +195,17 @@ impl ImageDecoderRect for DdsDecoder { ))); } - self.inner.read_surface_rect( - buf, - row_pitch, - dds::Rect::new(x, y, width, height), - self.color, - )?; - self.inner.rewind_to_previous_surface()?; + self.inner + .read_surface_rect( + buf, + row_pitch, + dds::Rect::new(x, y, width, height), + self.color, + ) + .map_err(ImageError::from_dds_decode)?; + self.inner + .rewind_to_previous_surface() + .map_err(ImageError::from_dds_decode)?; Ok(()) } @@ -657,7 +612,8 @@ impl ImageEncoder for DdsEncoder { } // encode the image - let mut encoder = dds::Encoder::new(self.writer, format, &header)?; + let mut encoder = + dds::Encoder::new(self.writer, format, &header).map_err(ImageError::from_dds_encode)?; encoder.options.dithering = self.dithering; encoder.options.error_metric = self.error_metric; encoder.options.quality = self.quality; @@ -668,9 +624,62 @@ impl ImageEncoder for DdsEncoder { ..Default::default() }; - encoder.write_surface_with(image, None, &options)?; - encoder.finish()?; + encoder + .write_surface_with(image, None, &options) + .map_err(ImageError::from_dds_encode)?; + encoder.finish().map_err(ImageError::from_dds_encode)?; Ok(()) } } + +fn to_color_type(color: dds::ColorFormat) -> ColorType { + match (color.channels, color.precision) { + (Channels::Alpha | Channels::Rgba, Precision::U8) => ColorType::Rgba8, + (Channels::Alpha | Channels::Rgba, Precision::U16) => ColorType::Rgba16, + (Channels::Alpha | Channels::Rgba, Precision::F32) => ColorType::Rgba32F, + (Channels::Rgb, Precision::U8) => ColorType::Rgb8, + (Channels::Rgb, Precision::U16) => ColorType::Rgb16, + (Channels::Rgb, Precision::F32) => ColorType::Rgb32F, + (Channels::Grayscale, Precision::U8) => ColorType::L8, + (Channels::Grayscale, Precision::U16) => ColorType::L16, + (Channels::Grayscale, Precision::F32) => ColorType::Rgb32F, + } +} + +fn to_dds_color(color: ExtendedColorType) -> Option { + match color { + ExtendedColorType::A8 => Some(dds::ColorFormat::ALPHA_U8), + + ExtendedColorType::L8 => Some(dds::ColorFormat::GRAYSCALE_U8), + ExtendedColorType::L16 => Some(dds::ColorFormat::GRAYSCALE_U16), + + ExtendedColorType::Rgb8 => Some(dds::ColorFormat::RGB_U8), + ExtendedColorType::Rgb16 => Some(dds::ColorFormat::RGB_U16), + ExtendedColorType::Rgb32F => Some(dds::ColorFormat::RGB_F32), + + ExtendedColorType::Rgba8 => Some(dds::ColorFormat::RGBA_U8), + ExtendedColorType::Rgba16 => Some(dds::ColorFormat::RGBA_U16), + ExtendedColorType::Rgba32F => Some(dds::ColorFormat::RGBA_F32), + + _ => None, + } +} + +impl ImageError { + fn from_dds_decode(e: dds::DecodingError) -> Self { + match e { + dds::DecodingError::Io(e) => ImageError::IoError(e), + dds::DecodingError::MemoryLimitExceeded => { + ImageError::Limits(LimitError::from_kind(LimitErrorKind::DimensionError)) + } + _ => ImageError::Decoding(DecodingError::new(ImageFormat::Dds.into(), e)), + } + } + fn from_dds_encode(e: dds::EncodingError) -> ImageError { + match e { + dds::EncodingError::Io(e) => ImageError::IoError(e), + _ => ImageError::Encoding(EncodingError::new(ImageFormat::Dds.into(), e)), + } + } +} From 35e8fd5ba799efef8fde29f414397d3e4eb185dd Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Thu, 1 May 2025 14:16:05 +0200 Subject: [PATCH 3/7] Fix doc indentation --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 9c90d51a2b..c464a9b5a7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -231,7 +231,7 @@ pub mod flat; /// /// - \* Requires the `avif-native` feature, uses the libdav1d C library. /// - \*\* See the documentation of the [`dds` crate](https://github.com/image-rs/image-dds) for a -/// full list of supported formats. +/// full list of supported formats. /// /// ## A note on format specific features /// From ad1a743c9b09234b2c3e9608f6fbb1ae41ca4afe Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Sun, 13 Jul 2025 00:12:02 +0200 Subject: [PATCH 4/7] Fixed test --- src/io/format.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/io/format.rs b/src/io/format.rs index 2c13cefb75..48487a537f 100644 --- a/src/io/format.rs +++ b/src/io/format.rs @@ -448,7 +448,7 @@ mod tests { cfg!(feature = "ff"), ImageFormat::Farbfeld.reading_enabled() ); - assert!(!ImageFormat::Dds.reading_enabled()); + assert_eq!(cfg!(feature = "dds"), ImageFormat::Dds.reading_enabled()); } #[test] @@ -458,6 +458,6 @@ mod tests { cfg!(feature = "ff"), ImageFormat::Farbfeld.writing_enabled() ); - assert!(!ImageFormat::Dds.writing_enabled()); + assert_eq!(cfg!(feature = "dds"), ImageFormat::Dds.writing_enabled()); } } From bdc84a711b59fe7e58971645dd6e9608657b280e Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Tue, 15 Jul 2025 21:13:35 +0200 Subject: [PATCH 5/7] Improve API and add documentation --- src/codecs/dds.rs | 291 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 206 insertions(+), 85 deletions(-) diff --git a/src/codecs/dds.rs b/src/codecs/dds.rs index 6151de78c6..33c47297d5 100644 --- a/src/codecs/dds.rs +++ b/src/codecs/dds.rs @@ -17,7 +17,13 @@ use crate::error::{ }; use crate::{ImageDecoder, ImageDecoderRect, ImageEncoder, ImageFormat}; -/// DDS decoder +/// DDS decoder. +/// +/// This decoder supports decoding DDS files with a single texture, including +/// cube maps. Texture arrays and volumes are not supported. +/// +/// It's possible to set the color type the image is decoded as using +/// [`DdsDecoder::set_color_type`]. pub struct DdsDecoder { inner: dds::Decoder, is_cubemap: bool, @@ -211,7 +217,7 @@ impl ImageDecoderRect for DdsDecoder { } } -/// The preferred header format for DDS files. +/// The format of a DDS header. /// /// DDS supports 2 header formats: /// @@ -231,8 +237,10 @@ impl ImageDecoderRect for DdsDecoder { /// 3. It is better-specified in general, meaning that the problem of two DDS /// decoders interpreting the same file differently is virtually non-existent. /// -/// However, if compatibility with older software is a concern, DX9 may be -/// the only choice. +/// However, if compatibility with older software and hardware is a concern, DX9 +/// may be the only choice. +/// +/// Note that modern software and hardware will generally support both formats. #[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] pub enum HeaderFormat { /// The legacy header format used in DirectX 9 and earlier. @@ -241,6 +249,14 @@ pub enum HeaderFormat { #[default] Dx10, } +impl HeaderFormat { + fn from_header(header: &dds::header::Header) -> Self { + match header { + dds::header::Header::Dx9(_) => HeaderFormat::Dx9, + dds::header::Header::Dx10(_) => HeaderFormat::Dx10, + } + } +} /// The speed-quality tradeoff for compression. /// @@ -273,7 +289,7 @@ pub enum DdsFormat { R8G8B8A8Unorm, /// 8-bit uncompressed RGBA. /// - /// This format requires DX10. + /// This format requires a DX10 header. R8G8B8A8UnormSrgb, /// 16-bit uncompressed Grayscale. @@ -296,14 +312,14 @@ pub enum DdsFormat { R32G32Float, /// 32-bit floating-point uncompressed RGB. /// - /// This format requires DX10. + /// This format requires a DX10 header. R32G32B32Float, /// 32-bit floating-point uncompressed RGBA. R32G32B32A32Float, /// 8-bit uncompressed BGR. /// - /// This format requires DX9. + /// This format requires a DX9 header. B8G8R8Unorm, /// 4-bit uncompressed BGRA. B4G4R4A4Unorm, @@ -316,11 +332,11 @@ pub enum DdsFormat { /// An HDR format that can store floating-point numbers between 0.0 and 65408.0. /// - /// This format requires DX10. + /// This format requires a DX10 header. R9G9B9E5Float, /// An HDR format that stores components as unsigned 11/10-bit floating-point numbers. /// - /// This format requires DX10. + /// This format requires a DX10 header. R11G11B10Float, /// 8-bit YUV, 4:2:2 sub-sampled. @@ -330,19 +346,19 @@ pub enum DdsFormat { BC1Unorm, /// sRGB BC1. /// - /// This format requires DX10. + /// This format requires a DX10 header. BC1UnormSrgb, /// Linear BC2. This is also called `DXT3` in DX9. BC2Unorm, /// sRGB BC2. /// - /// This format requires DX10. + /// This format requires a DX10 header. BC2UnormSrgb, /// Linear BC3. This is also called `DXT5` in DX9. BC3Unorm, /// sRGB BC3. /// - /// This format requires DX10. + /// This format requires a DX10 header. BC3UnormSrgb, /// Unsigned BC4. This is also called `ATI1` or `BC4U` in DX9. BC4Unorm, @@ -354,12 +370,27 @@ pub enum DdsFormat { BC5Snorm, } impl DdsFormat { - fn to_format(self, color: ExtendedColorType) -> (dds::Format, bool) { + /// Returns whether the format is an sRGB format. + /// + /// Note that sRGB formats are only supported by DX10 headers. + pub fn is_srgb(self) -> bool { + matches!( + self, + DdsFormat::R8G8B8A8UnormSrgb + | DdsFormat::BC1UnormSrgb + | DdsFormat::BC2UnormSrgb + | DdsFormat::BC3UnormSrgb + ) + } + + /// Returns the corresponding DDS format. Note that the format will + /// ALWAYS be linear, even for sRGB formats. + fn to_format(self, color: ExtendedColorType) -> dds::Format { use dds::Format; match self { DdsFormat::AutoUncompressed => { - let format = match color { + match color { // formats that can be represented exactly ExtendedColorType::A8 => Format::A8_UNORM, ExtendedColorType::L1 => Format::R1_UNORM, @@ -386,68 +417,120 @@ impl DdsFormat { | ExtendedColorType::Rgb4 | ExtendedColorType::Rgba4 => Format::B4G4R4A4_UNORM, - ExtendedColorType::Cmyk8 | ExtendedColorType::Unknown(_) => unreachable!(), - }; - - (format, false) + _ => unreachable!(), + } } - DdsFormat::A8Unorm => (Format::A8_UNORM, false), - DdsFormat::R8Unorm => (Format::R8_UNORM, false), - DdsFormat::R8G8Unorm => (Format::R8G8_UNORM, false), - DdsFormat::R8G8B8A8Unorm => (Format::R8G8B8A8_UNORM, false), - DdsFormat::R8G8B8A8UnormSrgb => (Format::R8G8B8A8_UNORM, true), - DdsFormat::R16Unorm => (Format::R16_UNORM, false), - DdsFormat::R16G16Unorm => (Format::R16G16_UNORM, false), - DdsFormat::R16G16B16A16Unorm => (Format::R16G16B16A16_UNORM, false), - DdsFormat::R16Float => (Format::R16_FLOAT, false), - DdsFormat::R16G16Float => (Format::R16G16_FLOAT, false), - DdsFormat::R16G16B16A16Float => (Format::R16G16B16A16_FLOAT, false), - DdsFormat::R32Float => (Format::R32_FLOAT, false), - DdsFormat::R32G32Float => (Format::R32G32_FLOAT, false), - DdsFormat::R32G32B32Float => (Format::R32G32B32_FLOAT, false), - DdsFormat::R32G32B32A32Float => (Format::R32G32B32A32_FLOAT, false), - DdsFormat::B8G8R8Unorm => (Format::B8G8R8_UNORM, false), - DdsFormat::B4G4R4A4Unorm => (Format::B4G4R4A4_UNORM, false), - DdsFormat::B5G5R5A1Unorm => (Format::B5G5R5A1_UNORM, false), - DdsFormat::B5G6R5Unorm => (Format::B5G6R5_UNORM, false), - DdsFormat::R10G10B10A2Unorm => (Format::R10G10B10A2_UNORM, false), - DdsFormat::R9G9B9E5Float => (Format::R9G9B9E5_SHAREDEXP, false), - DdsFormat::R11G11B10Float => (Format::R11G11B10_FLOAT, false), - DdsFormat::YUY2 => (Format::YUY2, false), - - DdsFormat::BC1Unorm => (Format::BC1_UNORM, false), - DdsFormat::BC1UnormSrgb => (Format::BC1_UNORM, true), - DdsFormat::BC2Unorm => (Format::BC2_UNORM, false), - DdsFormat::BC2UnormSrgb => (Format::BC2_UNORM, true), - DdsFormat::BC3Unorm => (Format::BC3_UNORM, false), - DdsFormat::BC3UnormSrgb => (Format::BC3_UNORM, true), - DdsFormat::BC4Unorm => (Format::BC4_UNORM, false), - DdsFormat::BC4Snorm => (Format::BC4_SNORM, false), - DdsFormat::BC5Unorm => (Format::BC5_UNORM, false), - DdsFormat::BC5Snorm => (Format::BC5_SNORM, false), + DdsFormat::A8Unorm => Format::A8_UNORM, + DdsFormat::R8Unorm => Format::R8_UNORM, + DdsFormat::R8G8Unorm => Format::R8G8_UNORM, + DdsFormat::R8G8B8A8Unorm => Format::R8G8B8A8_UNORM, + DdsFormat::R8G8B8A8UnormSrgb => Format::R8G8B8A8_UNORM, + DdsFormat::R16Unorm => Format::R16_UNORM, + DdsFormat::R16G16Unorm => Format::R16G16_UNORM, + DdsFormat::R16G16B16A16Unorm => Format::R16G16B16A16_UNORM, + DdsFormat::R16Float => Format::R16_FLOAT, + DdsFormat::R16G16Float => Format::R16G16_FLOAT, + DdsFormat::R16G16B16A16Float => Format::R16G16B16A16_FLOAT, + DdsFormat::R32Float => Format::R32_FLOAT, + DdsFormat::R32G32Float => Format::R32G32_FLOAT, + DdsFormat::R32G32B32Float => Format::R32G32B32_FLOAT, + DdsFormat::R32G32B32A32Float => Format::R32G32B32A32_FLOAT, + DdsFormat::B8G8R8Unorm => Format::B8G8R8_UNORM, + DdsFormat::B4G4R4A4Unorm => Format::B4G4R4A4_UNORM, + DdsFormat::B5G5R5A1Unorm => Format::B5G5R5A1_UNORM, + DdsFormat::B5G6R5Unorm => Format::B5G6R5_UNORM, + DdsFormat::R10G10B10A2Unorm => Format::R10G10B10A2_UNORM, + DdsFormat::R9G9B9E5Float => Format::R9G9B9E5_SHAREDEXP, + DdsFormat::R11G11B10Float => Format::R11G11B10_FLOAT, + DdsFormat::YUY2 => Format::YUY2, + + DdsFormat::BC1Unorm => Format::BC1_UNORM, + DdsFormat::BC1UnormSrgb => Format::BC1_UNORM, + DdsFormat::BC2Unorm => Format::BC2_UNORM, + DdsFormat::BC2UnormSrgb => Format::BC2_UNORM, + DdsFormat::BC3Unorm => Format::BC3_UNORM, + DdsFormat::BC3UnormSrgb => Format::BC3_UNORM, + DdsFormat::BC4Unorm => Format::BC4_UNORM, + DdsFormat::BC4Snorm => Format::BC4_SNORM, + DdsFormat::BC5Unorm => Format::BC5_UNORM, + DdsFormat::BC5Snorm => Format::BC5_SNORM, } } } /// Whether and how many mipmaps to generate. -#[derive(Clone, Copy, Debug, PartialEq, Eq, Default)] -pub enum Mipmaps { - /// No mipmaps will be generated. Only the main surface will be stored in the file. - #[default] +enum Mipmaps { None, - /// The full mipmap chain will be generated. Full, - /// The first `n` mipmaps of the mipmap chain will be generated. - /// - /// If the number is 0 or 1, this is equivalent to [`None`]. - /// - /// If the number is greater than the number of mipmaps in the full mipmap - /// chain, the chain will include have a tail of multiple 1x1 mipmaps. Fixed(u8), } -/// DDS encoder +/// DDS encoder. +/// +/// Creates DDS files containing a single texture with optional mipmaps. +/// +/// ## Usage +/// +/// ```no_run +/// use image::dds::{DdsEncoder, DdsFormat, HeaderFormat, CompressionQuality}; +/// +/// let mut buffer = Vec::new(); +/// let encoder = DdsEncoder::new(&mut buffer) +/// .with_format(DdsFormat::BC1Unorm) +/// .with_preferred_header(HeaderFormat::Dx9) +/// .with_compression_quality(CompressionQuality::High) +/// .with_mipmaps(); +/// ``` +/// +/// An encoder is created from a writer and configured using the builder +/// methods. To encode an image, use the [`ImageEncoder::write_image`] method. +/// +/// ## Options +/// +/// ### Format +/// +/// The DDS format to encode the image with can be set using the +/// [`DdsEncoder::with_format`] method. See [`DdsFormat`] for the list of all +/// supported formats. By default, [`DdsFormat::AutoUncompressed`] is used, +/// which will automatically pick an uncompressed format based on the color type +/// of the image. +/// +/// The header format of the DDS file can be set using the +/// [`DdsEncoder::with_preferred_header`] method. See [`HeaderFormat`] for more +/// information about DDS headers. The default header format is DX10. +/// +/// Note that the specified DDS format takes precedence over the preferred +/// header format. If a DDS format does not support the preferred header format, +/// the encoder will use the header format required by the DDS format. Use +/// [`DdsEncoder::header_format`] to get the actual header format that will be used +/// for encoding. +/// +/// ### Mipmaps +/// +/// The generate mipmaps, you [`DdsEncoder::with_mipmaps`] to generate a full +/// mipmap chain, or [`DdsEncoder::with_mipmap_count`] to generate a specific +/// number of mipmaps. By default, no mipmaps are generated. +/// +/// If mipmaps are generated and the image contains an alpha channel, the alpha +/// channel will be treated as straight alpha/transparency by default. +/// If the alpha channel is something else (e.g. premultiplied alpha or a +/// different channel packed into alpha), use [`DdsEncoder::with_separate_alpha`] +/// to specify that the alpha channel should be treated as a separate channel +/// when resizing the image to generate mipmaps. +/// +/// ### Quality +/// +/// [`DdsEncoder::with_compression_quality`] can be used to set the compression +/// quality for BCn formats. This option trades off compression speed and +/// quality. +/// +/// [`DdsEncoder::with_perceptual_error_metric`] can further improve quality for +/// albedo, diffuse, and photographic textures by using a perceptual error +/// metric when compressing BCn formats. +/// +/// [`DdsEncoder::with_dithering`] enables dithering to reduce quantization and +/// banding artifacts when encoding images with a higher bit depth. pub struct DdsEncoder { writer: W, format: DdsFormat, @@ -496,6 +579,8 @@ impl DdsEncoder { /// Set the compression quality for the encoder. /// /// By default, the compression quality is set to [`CompressionQuality::Default`]. + /// + /// Currently, this option only affects BC1-BC5 formats. pub fn with_compression_quality(mut self, quality: CompressionQuality) -> Self { self.quality = match quality { CompressionQuality::Fastest => dds::CompressionQuality::Fast, @@ -523,6 +608,8 @@ impl DdsEncoder { /// irrespective of whether the DDS format is linear or sRGB. Do not use the /// perceptual error metric if the image data is in linear RGB or any other /// color space. + /// + /// Currently, this option only affects BC1-BC3 formats. pub fn with_perceptual_error_metric(mut self) -> Self { self.error_metric = dds::ErrorMetric::Perceptual; self @@ -538,17 +625,29 @@ impl DdsEncoder { self } - /// Create a DDS file with the given number of mipmaps. + /// Create a DDS file with a full mip chain. /// /// Mipmaps will be automatically generated from the main image. /// - /// By default, no mipmaps are generated. + /// To set a specific number of mipmaps, use [`DdsEncoder::with_mipmap_count`]. /// /// Note: If the image contains an alpha channel that is **not** straight /// alpha, you should use also use [`DdsEncoder::with_separate_alpha`] to /// ensure that the other channels are not affected by the alpha channel. - pub fn with_mipmaps(mut self, mipmaps: Mipmaps) -> Self { - self.mipmaps = mipmaps; + pub fn with_mipmaps(mut self) -> Self { + self.mipmaps = Mipmaps::Full; + self + } + + /// Create a DDS file with the given number of mipmaps. + /// + /// Unless necessary, it is recommended to use [`DdsEncoder::with_mipmaps`] + /// instead, to automatically generate the full mipmap chain. + /// + /// Note: Setting 0 or 1 mipmaps is equivalent to not generating any mipmaps + /// at all. + pub fn with_mipmap_count(mut self, mipmap_count: u8) -> Self { + self.mipmaps = Mipmaps::Fixed(mipmap_count); self } @@ -566,29 +665,27 @@ impl DdsEncoder { self.straight_alpha = false; self } -} -impl ImageEncoder for DdsEncoder { - fn write_image( - self, - buf: &[u8], + /// Returns the header format that will be used for encoding. + /// + /// This is useful, because the preferred header format may not be possible + /// for the given DDS format. + pub fn header_format(&self, color_type: ExtendedColorType) -> HeaderFormat { + let (header, _) = self.get_dds_header_and_format(16, 16, color_type); + HeaderFormat::from_header(&header) + } + + fn get_dds_header_and_format( + &self, width: u32, height: u32, color_type: ExtendedColorType, - ) -> ImageResult<()> { - let color = to_dds_color(color_type).ok_or_else(|| { - ImageError::Unsupported(UnsupportedError::from_format_and_kind( - ImageFormat::Dds.into(), - UnsupportedErrorKind::Color(color_type), - )) - })?; - let image = dds::ImageView::new(buf, dds::Size::new(width, height), color) - .expect("Invalid buffer length"); + ) -> (dds::header::Header, dds::Format) { + use dds::header::Header; - let (format, is_srgb) = self.format.to_format(color_type); + let is_srgb = self.format.is_srgb(); + let format = self.format.to_format(color_type); - // create the header - use dds::header::Header; let mut header: Header = if is_srgb { // force DX10 header let dxgi = dds::header::DxgiFormat::try_from(format).unwrap(); @@ -611,6 +708,30 @@ impl ImageEncoder for DdsEncoder { } } + (header, format) + } +} + +impl ImageEncoder for DdsEncoder { + fn write_image( + self, + buf: &[u8], + width: u32, + height: u32, + color_type: ExtendedColorType, + ) -> ImageResult<()> { + let color = to_dds_color(color_type).ok_or_else(|| { + ImageError::Unsupported(UnsupportedError::from_format_and_kind( + ImageFormat::Dds.into(), + UnsupportedErrorKind::Color(color_type), + )) + })?; + let image = dds::ImageView::new(buf, dds::Size::new(width, height), color) + .expect("Invalid buffer length"); + + // create the header + let (header, format) = self.get_dds_header_and_format(width, height, color_type); + // encode the image let mut encoder = dds::Encoder::new(self.writer, format, &header).map_err(ImageError::from_dds_encode)?; From b1033d8cb27372fd8d59fa8883db26cf65459e43 Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Tue, 15 Jul 2025 21:19:46 +0200 Subject: [PATCH 6/7] Fix use path --- src/codecs/dds.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codecs/dds.rs b/src/codecs/dds.rs index 33c47297d5..500da5d07f 100644 --- a/src/codecs/dds.rs +++ b/src/codecs/dds.rs @@ -473,7 +473,7 @@ enum Mipmaps { /// ## Usage /// /// ```no_run -/// use image::dds::{DdsEncoder, DdsFormat, HeaderFormat, CompressionQuality}; +/// use image::codecs::dds::*; /// /// let mut buffer = Vec::new(); /// let encoder = DdsEncoder::new(&mut buffer) From 185d5f1e334e252c3686fc39716afd16c4fa1fc9 Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Tue, 15 Jul 2025 21:44:02 +0200 Subject: [PATCH 7/7] Add test images --- .../dds/cubemap/DXT1 Pretoria Gardens DX9.dds | Bin 0 -> 65744 bytes tests/images/dds/images/ASTC 6x6.dds | Bin 0 -> 5540 bytes tests/images/dds/images/DX10 BC7_UNORM.dds | Bin 0 -> 12148 bytes tests/images/dds/images/DX10 R1_UNORM.dds | Bin 0 -> 1270 bytes tests/images/dds/images/DX10 R8_SNORM.dds | Bin 0 -> 11457 bytes tests/images/dds/images/DX9 B4G4R4A4_UNORM.dds | Bin 0 -> 22746 bytes tests/images/dds/images/DX9 BC1_UNORM.dds | Bin 0 -> 6128 bytes .../DXT1 Pretoria Gardens DX9.dds.ee1c861a.png | Bin 0 -> 185664 bytes .../dds/images/ASTC 6x6.dds.12559dbc.png | Bin 0 -> 10972 bytes .../dds/images/DX10 BC7_UNORM.dds.c9f03970.png | Bin 0 -> 13037 bytes .../dds/images/DX10 R1_UNORM.dds.c72e7587.png | Bin 0 -> 2493 bytes .../dds/images/DX10 R8_SNORM.dds.f600b35b.png | Bin 0 -> 3666 bytes .../images/DX9 B4G4R4A4_UNORM.dds.1416aa1f.png | Bin 0 -> 8422 bytes .../dds/images/DX9 BC1_UNORM.dds.824ac5cc.png | Bin 0 -> 7804 bytes tests/reference_images.rs | 2 +- tests/truncate_images.rs | 7 ++++++- 16 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 tests/images/dds/cubemap/DXT1 Pretoria Gardens DX9.dds create mode 100644 tests/images/dds/images/ASTC 6x6.dds create mode 100644 tests/images/dds/images/DX10 BC7_UNORM.dds create mode 100644 tests/images/dds/images/DX10 R1_UNORM.dds create mode 100644 tests/images/dds/images/DX10 R8_SNORM.dds create mode 100644 tests/images/dds/images/DX9 B4G4R4A4_UNORM.dds create mode 100644 tests/images/dds/images/DX9 BC1_UNORM.dds create mode 100644 tests/reference/dds/cubemap/DXT1 Pretoria Gardens DX9.dds.ee1c861a.png create mode 100644 tests/reference/dds/images/ASTC 6x6.dds.12559dbc.png create mode 100644 tests/reference/dds/images/DX10 BC7_UNORM.dds.c9f03970.png create mode 100644 tests/reference/dds/images/DX10 R1_UNORM.dds.c72e7587.png create mode 100644 tests/reference/dds/images/DX10 R8_SNORM.dds.f600b35b.png create mode 100644 tests/reference/dds/images/DX9 B4G4R4A4_UNORM.dds.1416aa1f.png create mode 100644 tests/reference/dds/images/DX9 BC1_UNORM.dds.824ac5cc.png diff --git a/tests/images/dds/cubemap/DXT1 Pretoria Gardens DX9.dds b/tests/images/dds/cubemap/DXT1 Pretoria Gardens DX9.dds new file mode 100644 index 0000000000000000000000000000000000000000..43c0b099c00da9cd3f2c14a4f01490e9ec86317a GIT binary patch literal 65744 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 literal 0 HcmV?d00001 diff --git a/tests/images/dds/images/ASTC 6x6.dds b/tests/images/dds/images/ASTC 6x6.dds new file mode 100644 index 0000000000000000000000000000000000000000..655adf3e9440700f0632c58f384b63414b02600b GIT binary patch literal 5540 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 literal 0 HcmV?d00001 diff --git a/tests/images/dds/images/DX10 BC7_UNORM.dds b/tests/images/dds/images/DX10 BC7_UNORM.dds new file mode 100644 index 0000000000000000000000000000000000000000..4a077335c9d1b31d7674cb0afac4cbe57dc86968 GIT binary patch literal 12148 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 literal 0 HcmV?d00001 diff --git a/tests/images/dds/images/DX10 R1_UNORM.dds b/tests/images/dds/images/DX10 R1_UNORM.dds new file mode 100644 index 0000000000000000000000000000000000000000..2467d56c876ed79829224d27a1f0519ab989fe00 GIT binary patch literal 1270 zcmb7@ziSg=7{{MWgOLt;FZ8$$g@(6F$sl$sI2i4fOb($rbrJss4_bmy>4{5F$Xtqp zW-3QXhc2NvB+?;63&kOuUCb8YbP=S+dwrhwM-puue8|1;-TQp+^L*du-gw?dej5O8 z+8MZy^GkhMIMek%kw2_w~JSnspgDcHT7y3(KwROyybbGPl3-IV=Mu8 zlk8$~i!nxu_OMoKMh8YR2p5L{IatV!7&9HtZ}C>aNWdySbKRo-Xw!B4En>VmO-1{4 zOQhoPGL4#1Xnpt;bYcGcS#b8eONynF`i~o#R=@uK?VVRh0;^Q5=76nb-3qHZWn`SE zcauWv^g!&!0u`av1-A<;-G$!n1~`%tE+vJd`s&HvQC%|D9tI@{uGu9gm~$NE<9yJs zuZqL|Fd{~0dokAuvhy!;!8h{3Gmy{BHkSFj<WrCP>NyEL&um!FGDAm|^S?6Y(J<)D zQ^1oRb;0*51}4PMIM%WT&jYBuUuL$32qDrW(UN^+pn`T&G)2ZeZD=R>He;hS-WVS^ zD<3<*E_$+(F@jal$*~gBeyY_iDHs_c1v(ih3HsQ<=L-x1$?cGULMcLGP)H2@s{vGA p2(=$nsN8s*bc&cb4(H12_!}uI(7gQGJpLj{DOCbee0(sW_zl;&%4Yxo literal 0 HcmV?d00001 diff --git a/tests/images/dds/images/DX10 R8_SNORM.dds b/tests/images/dds/images/DX10 R8_SNORM.dds new file mode 100644 index 0000000000000000000000000000000000000000..71767e9567afae14ce1d49136d049ce65c702a73 GIT binary patch literal 11457 zcmc&)2UJwo)CFEP!SqA_Ae@UBbmy?3M!LmhhW z1H&+M1_p-S#fCyu5Z^xM+!#R0ZQc{|yK2_;3 zeA3LnDeyTR{{1IwHJq#h|K9(6`?krho38%OOFtiiUzC|&kxaCVO-xKp&CJX#EG#Xp ztgLNpY;EoA?Cl*K9i5zVF)^{RadGhp2^>yhVp4K)N=j;KT6%g$MrLMKc6LrqZf;&)enCND zVNp>rms?U&T3Td`rJED!))MIsM7j%+?m?vcNTdf6=^;dV1d+~`NRKDdlZf;*B0WnY zJ)cM~#?pDb;xtn;bEG`zj+Do`BjrJNq&(=3ln33B@>qAIJm`*;2i=kKpgU3?>yDHM z-I4O3J5nBWN6KT}rP8^eJC9dZ#!b&Kv#>ZqN!KsdgnBI9jY#)G(%;hXLCh2C;|*>E z1NB%si%5?_%oFOd^b{gJgGkRo%p>Z7c|tvs&gYi^JWyU1fQijyhOha8TJGs5HT*N` zI}2Y0!!y!fVR$UPP$In)OD``kMer=Gtz`kwCU%n;ekVmOb@UD()Q5#_px!sL^dr>E zyWJ}cFXwikJfB})E)ejrUxMFRo6__OiaJ80Wn$<0vf&W`+BraC_@mS++Ae@4V|eWJ z|IYBp=`r<4dPPMU@k<*BIUCan0JTRi8D2cryT=S9>zPrkkR`+{h#vo|lSj05RoC-n{W^~O`d@b^EyZ1B~i{nU({g1g7{jV^!E zE^#|h9!amP?&vDMh=u8Qc>5kDu6d=O0r1p4ltg@z!3}%b{Q!0F z8k})`FFNf;MMBEl>-d5jPcpK{@m((H8iljQFW_I#6iN(_rB_vz6Td7hWFnpbaPs(^ zGFX^4^BSe+Qhtj%Ss6R;CUxB1dj~QBO?!spd;>mcM*DnD-8|M`eV(E|>@EI|dLER0 z&R}DGaMOp>o=D!$)Th10TW(Qj&FSx{zdwu}(4(|c%CO-<_o}MuYJoH=9C5_EX(0wI zoa=5;$3W6S>Q-?#MV-}1Ms8v1xr+es2*)wE5&2-iMd~1JVetj^H#p-cHDnnP`v>(-|9pv}R?y#4 z<23Ef*-C9PIVHK_2|Bz8lt1=vVy5&6Po6m;v{2 zl5FFDr0&rG^#o0O^iW?|&|bMW&zRD44bbT~Zcx4S6@56ARPZh}N)r!&1MkuP*;QD2 zU0oGPNF*viJlbdo0QbcdbqE;4%h^r&&>16evj_sfBLb(pgmi-&9<=v9Y8`DEwuahi zVI4k``q0Yq!mYnAcqH(QJ*CH{Gix*lb^iK6xhir8eM*+hL{W)*q?LeY=&-K{j*FG&aTLaNc# zsqBHnM$}z6V#V|ZM(1Dn(vt|sH_zV8yafKK8UsgNJteG%pSiI zMS+b^(BKtpctdqFPhI?tqBhXP654oNabG3kRVj6edwH#nr_*hRz3de3Rv zJmB^3E*o9_=RBG=^V@yN=#M%6knW(u_>p=@d(5Zav9w_+Q6E{EvP8GOv7#dzKDu)K z?4DWF2XtWC{GSYeU$09&ql2=?^{(CgaS3f=7F|}~C=%7nCSx3vex$zfcLGz{`h|vt zdc)2D%h)3<*a3fo1jLH+LSF+oXpfI}q-p=SVA|L@HZzj8bcxH0HMO>nD@^xeP7lc| zi8rUyu3z<_S=`E0JN$Dvw@%d5BqaMFNya25{R2sT6X-(21``$$5fSKQZfx%0AHj}c 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 literal 0 HcmV?d00001 diff --git a/tests/images/dds/images/DX9 B4G4R4A4_UNORM.dds b/tests/images/dds/images/DX9 B4G4R4A4_UNORM.dds new file mode 100644 index 0000000000000000000000000000000000000000..39111e67ce936177665ec4128792abd3162c8f4c GIT binary patch literal 22746 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 aT=2AO1IVeoqPj literal 0 HcmV?d00001 diff --git a/tests/images/dds/images/DX9 BC1_UNORM.dds b/tests/images/dds/images/DX9 BC1_UNORM.dds new file mode 100644 index 0000000000000000000000000000000000000000..748948a01fa6acdda336a1673e07e4856d7c2e5f GIT binary patch literal 6128 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 literal 0 HcmV?d00001 diff --git a/tests/reference/dds/cubemap/DXT1 Pretoria Gardens DX9.dds.ee1c861a.png b/tests/reference/dds/cubemap/DXT1 Pretoria Gardens DX9.dds.ee1c861a.png new file mode 100644 index 0000000000000000000000000000000000000000..524e7e99ed51aca782fa7407fe79d3872069c5fd GIT binary patch literal 185664 zcmYg&2|U#K|NnaoCL?U+Y8>B=t;i8&CgW(Qia= zasPjQow}5p?r<-6>$Y_>pTi%pqHiTz2lUHQM$pZUEbtlU#Ol*84o_71o^sc?g< zj^|XfGnvO~*gK4nv8JA<+hjm~G49aTn-R!ZVyhN9@;Rk4zWr1B`o;G6M}=2JiHg zrNJJCWz;GEQWuA{1!W|H>(uMG^E%mr)RvFS8dk6Xux%oX?>2q9=1x2-0el*CR zanf|LCGbmRaPJYfrE`1U{8r5Et;Lz$YhtmDS>9A~?H|75^099|{~3T|=3G^EFSV0M zQwdf!^pJ)}Z`%G1L3uSRHlts4xx@JQ<@s67lD;Q!>x?7Q z_nJ(XMyg6Zyv>zo`ok2s-YisEjx)O%Ve_D+P@~1YdStk}4WCH-9?#huGFV^)E2}d? z(|Y`Y!5n;0B`MOI;@5hrjPmqHL=WeKSTaJv^@CK{B3=`|8 zRtw`7HRg<6h=U{-q6=~F_l~)~$IcV}boBOD;qv8MYP&_m`KgD^W|Rd!65sVBt8@g2 z@OrAe_KqWNo?#m3TJgUl*`kEcC1v#O=@yz*X0t@C3_Kc_Z-JX$@y5!d1OCpLH5NBM zU|@4Dxm{z+{tLU>6%|)5%k>@Bl6a2AEhZc3`*Vgl)uhNX)+yBNZMkoPULtoDUT^Ij z%_UEs`IEs=;0|Sppt)`fBR!EoKfvfK4r=HliAv=~Ymbg^-Kk`tKp(G&GC>^yV{tx? z!t^wv&I>&>ZuPcySHDKCZ$i|&nvt>vB+f;db6W>(64kB0RlG>GArxa;>aQC!dAliMq z0JBUZQiciF)LS5rJo^PCozvXj0d4wI(rB}9Y4D!|8*itcep*q^vS}Z<+ADT1)hP~> z6O%GJAELZsvsoQvIqB#v*n)IbRc^_t>@ziL@+~DV@NcIyXNnJ3vlHr-B~{4T%D~f` zOmW>UC%%@q$NQLatVt+Y`}VIrOfsKl(_Yt{VB}gFAE~;!X^HMw>wjr|N6m3Fcr?97 z&|&_2l1us+l$#3k*5x%%>Sn7)Sh{f2b(D`~_L?CvDNU|) zPWNKXt};P)a6|6^8n7iHcOI`-jNJJ;DSrrZtnMq7Ah-^ZNMchxBB}cZmr{?)CYARy z!bko^jb>!kon$vi*w| z>$QfNNfP}Kz)NSi5-SypXaNjZwwp`MpI@pTwZs#w7-~qDZ$GpBrUD#>VJ#>2nXR+d z$1-m`&e1waUS86-zW5_;+m@bB1%7_rf(N<-)+9r{FK6Iup|*W!60p0J=Z~twJ~DS= zgjYMEq&`bs0_CATH=ReY`t|)i@_qTdlx8zBWkS!>1hGFQws^mei}ga|I}#_lxd%P)Vpy@I|8B~QJMr##GEyk>wZ`yyRB9?CV=sp%I+kuUdDPRlcQBnSW4LN2+5n8%d+ z+4I;Il4trq8C$sA>4Ag0V7c>x@a;RQXaBRDp+Ix5vaB_yN^V_IT+S$$*Gy;<>tr!G zeVl52G?4Q#jr&I4vwvG^a>>Tb41I1?d`hv<_gZ^upvl1S^dLiB!f`*q`DCgW64`?? zi~R)Qml-a^;;`|!Y^h@7-EqC-;wznTJ8uh@Tp8umExLSCBy)b*PjWQ*jB7&Q72hlQ zUx%Ok*GFSR39Fzg>-*>AO;xkWsmPcmdVGF^=(Ox%`M;v- z@(GCIXPX_XMlE}IZdv2mzHK*~pp7L7S?r-ezhS|)*@59nYPs!1JVnbk*?zrRWlcBE zc|nNpgj$-N0^Ooeu~D+loovaV9J`!;nb%$r$H*=;~Wgd~L$UDvq+< z$~1d4h#FL_JHYsG=?pUNe{x*2(tMB+$~Lu{c~IkGX~Tj7a%RN{N0` z+zWoIu(JBa3oEPdf=H7A@y3@*%jvw1_H)TIigZNbBSs7h z-4%nND3z#sn2TGN(K@VEf3`zeYvq%tR>-&K?|kQeK!N+Y?))i*#>o>@3t}0ajGoJz zkl=e*xlWxhJ8|AXOtRSRm4Ch63ioa4PHks7vzuWZ6CBNJ?Qqj5iwZufmtwcxZ?@bZ z#)*6NEl*VG8)(oe&*fc|=TqpDw^G{^+Fh?b72V8tQ6?U*c!u zf$t1-O$o4L+?Lxo_vB85SL<3bcmPj6HsVc)#yUCfA8a0UdbEy3|9U{FQF6R%EaY)l zU(StpRP^E~hiIEERfQcR8vgV0=Mn<5N}p;&g4_PF4R7MM9!d9#8v4#^imx6y&lX3B zH|F~0aGQOL-Wy9jTF>@z8s71!)+q|}FLEMa4f>NoVQrSGX~feBl)1B=7)FDAeN1*_ zYM5j*gcZ0Xe_Zfr?;Z4X0isl9|8N4AWNRH+xqt2w&TO*HvvH? zr|-r?cXtxIX|IIhzdXIbpwZh6Od+HC}Gs zIn~Cu<0+|W{Pnlv^Csd|ljGrbjzuG;OEp{HrhSf=s`VJ2gCt?1j5@URqy9B0+bpI+G?h z-sU^V%#2Lu|7C2FFE8>Qj<6AT33GboG0=Q_Dmv*@-eLb$86T^VxOdlx0*6WdR=NXa zio64_$%^x=tT?|Kjms7^3+u|Z&05w|C*sD_EVi%lUygFDhJ#0D)+Q>d=b1Z|=@N_7 z>E{oQzV{!E*TfmRcVJ7uK}4O5`>Sb=$knG1z~Vq=L}HXzW<>ThI}EW+i9F#FB>=ab z;-@fV@NJ5Lv1Ve5eKKNqMQgfb!X3lmC|Wmk?Fw+?|7-}v|F$2eMh6= zHk;u#e?!yyK#sps513+sXp)bMRr|?kD07vw_p$Sf?@Cv4gV`NM|9=g+!S0gd^6G<* zbGq<)e7l*5YSQX}3hL}Y&OE!z-nDqcc#pR5L=Hf6HH(`chXQN#0mrfsGlvAbf4<{k zGmDL6rQGH_>le1jTAE9sm)c7NsahwZdci@ZbQHLzieKenCiJD>V2L_Y6Lo0&qa z$mUrN)p$9Y8Ywu?wuKgnGnoEL zgUFx=nWgd;RSu0~=;9oPE@t)kzjS&8Sy)&y=4dZV%$#_9%>_Di!=XUVa5>#1D(_$( z*&xyHy2uI^_Bk5P75Oh3;H}WApoU)Y-x=({Fm|6DcH)>jrm9EI_LAb)1&AD}cvVF_2+S++iqo*MYyT zwNDM~su{5aP-u%_FB6{U%un|=Tap({wQt)6F#1Rt8po>nntU!z(eSAZS4vd zaURb7y%9<4$Kz5w)K)QUY~)9O7jD%0S=EDwPvQHJm(#p6NeFIzV3oc*-`?R=+EXbl z*5uNmkOt@#-mfb7As%py^W-bxT5yxfp}5#Fuh8lv%SjTd~SP zshRx;04m-6fQ=(%QVSoO*wWj`(jK(6`n4vw;b07q<)Y@zI>mQ)1`Wu z%X5+Y+>}wu^KMa$#Iu#9dp$xgO`h2u*0CrjO}!ykq^X)=M2T<7H%H043;j=2=^}qY zv&7EcvATMD$n|LYu540~=EC!GUHjakorIEGiWWj8_))Qmij^1IlN1kYli1-5*8;#~ zx+7VF9A>T&Q8|<8N0~VLV!R?)ftHd>*xV#YLm`hPY^VOf~Z?(mDPHVm`)jm zYFGg<#V|O76Ov4@s<)l^y)OqSOKQ}J`K&d6pQdMP-7H*f@ddv@M#m`@yNj4SB~%vF zbO%RTJiR5vo3vi(wG3*AQV$0i#KOsJzu0ZkNVIi7qfbkllu@ecid|4l*{i?%aysL> zr0@^%;@;HWXl$>a8U&q$!XKn|;lrAwVb%J8t!1?_5NhLZTBBLx%KvW2)`4wk58r!M zS;`mB+loYIT~X#d^p_*Y?gThZ2X#KtbA5JoQE!B9Hfs&?g~*pxX9h)etTwpQNfaA{ zFE)RBQh^)i3Vf}=kJBw^I8%8SC%y$00&2&V_RXS-tgDnc;}&_IR_9zPb<_O`Xx+SA z!o^9Pd#SzaRQzI?r#Gh?Uq(F|RDDcNtd-kxIS815B}481R_kZAW41=}ch1E9n4q@D z=XZzCtHo1+CEAI`x&h%~$D~e8QwnE4q#8J-3U6W}=&|nxlIUI5Dr=hu<3|C*QlVr4 zofz3RYvnrLHuhWa$Y)QA7Ds=w{t@gg7x|?UB<_^kXll(+)z#+>-Ro(V3bIJ3*boP0 zZ1?!!0ue8I`*)u%chw8dzf}@JZaQx}-_T&HW z0G)O~5&_p=o$1Hvsym7}5>Dn1iJyDSZ%Rti>zt(uG@om{8=p6d1ynC_$dj5SPuCXI zC@Jyd^qDVLI#fu2MzXb}kGFXGQ{s5G9%_kxA~^}g3Zs@O{E2u;_ck}es*+U2q~Kqt z61++9q$`!6C=qm>zIV(NS!oLNxxStUqbFBw9ed?6UXdT{p@}Z)6se~_+ozQ2rfsh+ z-^p;5?{r>%zYS?y|}~ z3ROzR{-H26{yRqGLLb07C9D`=2-9a6S4L7a)z`1kwTE7-4?B2h_Ei(0&VKy-(Naa% z_7%``DkiNYv90)P2mMQf8-ibd-Yluu=nsuwOLt@%7C!M+)M!?IdbPbky+FN!>|j{g z2YN?@?FJ$m??KwPg~P1J!>lKu6@2`n4=_6VR+JY=bJAwGtFp7z@}^BLj+&iqn>>Cs zZkZ%j#Hx~G&id!=i8uaGg#cXNitnxbwP!Tm;T^8J`XR>R9-r4hH>}nX5C3$xEbD5^ z5uY3q;*gMZl4^c)o4m26G7|oHhT_Mmf3oE8ZXc7}#JVwUG7tO#_%nKb*pjhnu$ny_ z#u(D^C?%u@eoD)2xBGedq4flV4;=xxyl!pa2%8p~D>PxleUqVK1ym`hnsnVL^8N_} zo8+jsH6wLK9Y$ii1>=sl?y28z!yZ1~!d(TAOrp|vd3SBQCP%Z&H_{uocv^8qh5ncE z24?2UjbEkMW&B#AWj&d|q^jl&49GLd%Yi_GYTdk)bk`i1gr0u0*lDl|e> zkVXYHe6B0A+IQ^o%Owr#7aVkdy97jeRhy$@@j}D5ET{~tZ!0!_I*w}`4tcx;PiB>M zw(;!^<7vwe!SlaCEF~AHJ19B0A^$^iWqCf-OF)89Y{=jk3ph;oaw*7&BoZ>IDVfbv zH*HsRiB#26OP^++mJ@?wkR4$w&286=#pU6Oc4g-sHu$joS)=mSR2f0q%*DFD-bj{| zRvi5LZ^_2u;1g8U<)uNE7I2zWxNwX5BN&uaoA$A>t1T@W4+%zq4?3yk-Z`X}9!ne2pzNUmg8_gSLg}ai`ceNda>4TB_o9=5`zz;f?LfPrV%&|*4g_wfm z@+L8Je{Rtfv84y2tN)J3q>^F{2IuTAhmK}r0J-{DcW-l9QcLgJ`J*a4P`H=lJ7U`I zZgL1}DCe2&%(hEkrF)YzSa@at$9$VB)l$O^*t(bJxMJ8FM9*&gwt<|$tv5B2*hrmN z{Baplr}&v&a;)He&?uNGqpP7ycwN=x%Jk69mv;N){0t}UlWTG)=nPk!5?ekZi(FrN zcbILFe5s=_n3==ujzD|j)t4VS4@=J5QqqS%oVUUERmHl=Wv(S4^%bUo5H*m+Y1kzy z2pKfnX{bWHtiatN$92XrGwtZ-%Y*mwBUQt8y2al$=PMF<{8^kkhP!|J(jc=yfS5;} z$RG8PfedXK}Gm0=jxB|x7BO*mz@^geYrDLd{x->c zIC@a;wQt$EDc_lh^Bmz|4pajs4~yQs4^n6x>%Iu0KkrG1KkA4vJ<4PB(F^zFR|zdI zfkGkh^An7JC_mt&_X1ibL&fGh0A8Sr_eP$P4(5DjJGoiI?p^;7Q|v+JZesz<@7F>= ze6yvP-U7|*XB%he=yb;l@=OM=U5FDJM!9^bg7Z=r-VxB+@N2P6@_4o_+8r=m={oKtNDh4hk**z#L6E}mRyo)nI;Mr-u=_DE>{wl;588Eqhr1B$Ls_8#@HN`TTg z0nl^>w>;Pb8oFNMVrKxsLjTS^8%MYN!uPaTL+pae=Zrn$>($|gpq3tOOe7*@$J+PL zUutQTHC_@pQ(ii^?Yxv*A4nLK(t(^N%jPjOz5S1#>XA_#*EE{qr?*>40xa~70{4vK z?UQ;uBULv?MYZYKmd`JDO9ZOiy>C1;Hw;`C4VG}aZhDmqG6kFiA`K&nr|7IE2w}*G zsY**r?PbZ6L59*s{ua;0fb5n}U3qMb+;Qv6GQ*7f*W;bJz2eMyg^hW^9{uyvYWQWf z^#tZ{o;kp&si?fD5f=l{z~_%1Fao7kLHn(RUroZ4le$Es_H#}!Yx$wVdxZJLpi9|j{`1bNzokE@eMYOel)=cXg*FXh_hKyG^ zbiSFB2_8X#=F9`?EQt6K>d~;59Kl)%gZ%~S)_ta*xnE$-ariyPrwe~$VCXgIuOPqT z%XA6wWg6goHHLtgcX-bLYAS9ks|MhS~1C-t<{?DhQxn)-L9Vsc-|;NaXpX`>#h zZYtbP4;ivps^w3-fBy|PST}zPkP?0UI!p7})pQ?tisU4=&38qbwNavKs}q@|Sd$M` zn9Bm^2%Oww@)(}Fb%N6ujIpCIkhj4ALoaQxD*(`RwrPx|0BaP`e};-jAutPX3NS$U z2s~Tp+#L^dd(CL-x##iRUNfjA+fn+IkmX-l-hJ!a+jc$84JU@RG(F+CkNg5q4~~P^ zVR(Gd@Ck62rl5we2OVy#0`~Ltp4KrdQ0Nu11-XRhw(fJZKJ- z!l)Qkv2VHfs8B<#Qr8~f7QQqIOz7dTI=sEK2qpjx% zDChr+#cA16CP$yaDe&RAz>R`6gMp1K>w9rQbIeg_*Q;Bv1nc4^K_9wy5LxOf9?OIi zKp{WJ?zQlLQ7hQG5x6sqTT~Mr9~}=T28AS)UpH{a7L_)!ehiS zv@r&ns!)mf*phG1jMbd`SCZ5iw%m_Un9k_8KoMm~95@3TTlH)t^2DX**%wxpl zVvTCdJuIHPyvsX~{Iq}9e(@Hf5kc+n;YkOPr3I?>$lu^r8Q@Ng5?%^RHa58LX4dk&q?~`*iWtDL)lT0?{$N^(U*Vm&*`DA}{ z0$@;LDep&+27L!zmZ4p?|9e`%CLLA)l$F@~yHvYXvC-_?7L2m%asg<;F)^Y{a7>GN zizX})i$2#3WCmbTs}w3Q$caEB=dBs0gAC)yo#`!&_|sk1GyOulo?UmFmXgZNRe6ga z0X<5xq&5jgE1^{P)A69+$@H)HLk{W=hImduQx4j9u|{(72Bf9-i`K1B*b5ub zbsNWit%WFDUbe!x6||mth9)>VB{H5?4+0-hG#ohazJIs`dQrjaAZ;iBvH*lhWO_?45rjT4uk-3Pp{8XVI&T06Vyq@i zkXJZC&72U^3w_6H!T|U~(E~A-4jX&P0s4mDFz7Fsnny?e`nb#p1#Y@o>iX+XmgwUi z>4(PSq@>C|^wYs=FPS*_e**j$*Q-YyT~9-Wim}JH)Vf@4cP$OtD`$33tOd&4ru$Cf z{?vL!R9M5-B_w(OT3xp7CMPc92`k}^e9^4Co(cm<*q;1Z<)Y?)n=T&A|DdokFKDDl zqcy_HiG71fU499l!MoO;URw4rAxZ@n*Vr@@qM(ip6qe2OFU!1I07`Gi!(AXh9$=)0 z0g_z2#>X?YR}n4dzY$j-KUP!n^XSFb6~-X5(0s6r#t&(!zY>^iv4-}Gi%mA|)n|Y? zK_DlwyeWi@PB>=aaJWG`M8Q8#`?b2nC{e!lpe%9GCOiFFSg1osMhGLS8MvUx$^{#g>N+dpOOJ)W zGXTA7fYLn_+8KO*`-IJREoOiH=XBK>h9)nnpVRQT#IHsl>IzzbQqNGq>^m%1h0(s!T#L(s7Z%EClnL}I-WgAzQ*@;7c(bke`01xmEYS2-G`KWpSnoo`S2vE@p; z#O6hagX=1h+r~XK^)|)QosOnD0-V`NpW$fCB&WyINXC+knIh0kR8b_-rowG7j}I&wQr4qEbT?&J)-Q2hl?nX z8${YiTkAemDrth*xWmfdh6aYZ-4@Hx@%X0-a-_?vIvzraS}E?CG`PfTU*MkfFI@qO zo$I#3+B#+W5hvH z=M&g#X~PJPtbV01I0&UIc>h8@*d=@;*z$M;Al?RAUVKaMGE7oI51}smLwN*M5M(Uf zHDHg(HHO>(qv}y_TUQ;lG$6EhyF-56lDMcRGh0QcU6fJG)Ro|uXwpx?pM9nyD(`Wf z&ko4(U>HaZ4%TTFa0qJiCBL_Aa^8na3 zmPH{!LX8C5P)kkCL*=U=8h{zxvk-U!qzKnDM}ySCKPk2R_x}t%h=D^6ZG##VTqQU9 zcVEKG^Bd4$B&F$-ov5n-Kl*C8?QD9^z}xDPuNN=`0j40!OP2rEs^c;7vl_{6jZ%8;uM4n?F>BXQ=B^kaA zaNd``N|f(gxM!@UR48P<@<`uZsFqtq)_#r^uP_bTo8P|lW2^vfHCW6NNe*y+wZp`W zYjWR;3a5x7QHVCGo_)0zY~9?HVoVMQS4&5G#wysCRqm9Xvp{8nNdy@uvH4An+UM9a zfGkvxfy2VVNyo7uENWo$-9unKVFEeYcgo@Se|S%m0;O~BK z;D+fNTm$WG^kVw=SoPJ0imY?#kWc2-dPTL$EGBs;&H+S32gA$YU}CDlVRx{5`bd?E zMvB-`DhB`EQvraisnzrDwa$56xXFzMiR}*Y8#4nt28Xja9`c}E>VWVO2W>j=%VqF$ zBz4J3nzT=PzS}@bD>XT#7{C9_O{LRvZ|-zT1)B3^B|{ce{IYuh^|O zOyVn!r-iCJgrXm@%^utkY6w2NgPh;QBl=E3LMa2W4d9)!5oN^vkU9mj3fkd@{yWSP%B3o2IY62%YKI9A&|Z}YP>!xh|Mfc9Y0Owat>F~JCr zvRj@ae4cu4(FTz>W4je`anb1h1F$gOn3=s^)@a7N^bD!zzBmi^ zM;*jShc&iZJ?}9f8&qMrfR#=@2GRlL&VJQGkD2 zcuxUjrb`y^kC!xKy{Q%wPuv<%$4|4+PVE2|=vW11N24 zq_+H7+Y;uYg1j}tdYLH#)p@Mu4cG}#-(cNLzizzQY_#h*Xl^xL7j|K~XVrTetbLN@ zt=|;#(!GN?Z?pp9Z_FJN74Q=>?a=cc|3i2pcoEv#&~zZqv!!e+2I7xwA!4__uXh*6 zM_UIR;vKMuPoca6P~TAT+UugRphw3!p4$D8ZD^BxQbeB3|5^lGgiV zl6Gqbu&SMwIe6}7|ceO?ALc(jp_$y+I4){st;A;aXgd<3CyOt zEf%9eFZ0yzlsV-3hE)WDo8|sKx`H?kRG%q&(}vVMb#xlbCp0aBPZ>T)}RNBzK-*eQ%^s1ezao0 zsm@iuZ6ZyYoXo&Ef|@W3Ue+G6v0O9b=Mte}BWs@|_Wivo5l$9IKmY{ z(rFTKuU-mh5Mhkk4Q*LXwKgNVWN{_{ezN4-Jd!kTrzj?rX9GJE5Q9 z%VI1lNWb)EvOhIRO3L6`;7TC2pa^~q2Crdb011vOhX47|aWV!YDS&8o_qL~&x&TG}^dQmkaJkKQFCqCAJJJ;W8a#g?{#~gn zM#vFhV({N({*D?j{yEwU9X-_U&4kR`rDrrRYm{{A1euIfGobL>`3{5o8cf2t1cE?ve3Bs!$PJUN)HrZe z>(@Qvt*5So)J@Jk>c}_S;{NrZeC;wB`0NyY2r{+KRN#Qx<1)3d5Q-aeuX>&3lg;3; ze+hs9@Vws35RXq9Un}B=p8^L2u9H(^Ll^7mC-3krr=k>+3(Bw+?PYh!hS3ORx)-uYhn2y zYr|vpFV=w52dC6{0SJW61JJ9%CPS2msV%`L{CNIC%^>+W{kO?pO2H5PWxIMbBCW_A2eipzQNFg?LiIlNq2D&DDM$& zgj}W6G}9i6qN~r=Sz<9@b)iPg)Cu$C?(bIt$UYI$u;FrPcjPU)|Dmx#MLH$-s251M zHiS90%;WkZ^SHu1^P$GJ^zIwG2(q0e%S`4O@V~3+#J~HGzFb*EWZQ7}+8!!Eda;|S z&L-0-2*>m4)g8t>u+(oRaCzAApylB}5V&Ly@oIq3FC+5~o~MuJTC$XV_LOz0B9FVsq>JydLzz^fbj(=*JuqZUkf;}^jhhP zBJtL!GeDLSunoq81=IpfkG~@^b@Q}aOJSH4!`~5O)wnnkSXj zEH;Yr)%{f*;`{Q95}`2Idg4p3=d!J+8TsV%9j(HEWj@%p(6JQz9}U z?bca48l;PJ$I=1KzEo#z+&)F-&OPyTce!szo0ryU+K6@6$SStXn!<9?)%rDFU@Qdh zhb_YE^mzXdTox2vH+2LzIj7~##ol4rr8%)XsZ|~@sS=WRQ)?yy!hBoyjc6dS!}fZ) ztEzCZa`hOZ#h_v>a*Y}H>CI=Gmbzw3EvvTqVZox@MNGW`JTnZruyf=PAhP4H{#`Nu zVj42mdLYA6RN(PhgDVU60T3CpS(sWW2x`dRKqaFExF_#vE%Ki4aN4)7@INho;`^wY zjlL0m&yAvR5@j0H7f=F#MSpBlhWrccc_QrhpN;$R03KT2$gtUa|Hqt|wy;*rDg66W z&JA8F{CWg`N8UuKk^H_9_3MtD*kJ^WdNC|^EFL;8Z4)I1S_l**5W&Vg9O4hIAB%*dG_^kRZ9l%?T$OlL`M z$3bOl<2;n~C~e*H7cItqeGL4sY^T#(N9aNDP~gymhL6cCwe{kUxJK5N>!67N^q+59 zauV;BFJ2p^T0}D(n!U1JpD_C2Q%+PrFoXV`Z#;x|aSGgbQLT7z0AOO~b^HQ7awjGM z1P@-gk=t9_eYG79jG)^9L3I?nfj<+OAKk>vb$g$4)#(4@&V2-tcblCPqYsZaGT^A* z7D~zwtO0G0O~d6uT|VgT7tnR#okDAbgmLblXaJz`V5Cp;N9zl(O#Q$PdHHtLP=r~~ z*??^Cgn-mQY0pEERJXwSFf*a|@^VP%jMqQf4FUL8*ifA@K%cO2mP|8~x07!JTFrQA zbim`m(SBWZ&3`;O+Xt6sfmD;fb;v)Eoc0t`#QO4z8Dq_xi7Ep+IuN2y;%hpnAc`Zd zV+qNQrc;}3CZDew3XBMRTqiH} z5JAR6&b`C_SZ06|J7nbXZhe0k3i83PfxN`eSXYNybK%_q2?U9HfA>wPhuSgz4Ipqc z-iNBfD=6p1QQ+L%&n4qtg|o_{ts7tv4^Ei4AIfPkD{WbUI;!RSIDr64&kR(Q^2=f@ zLmD8F=;iHi(=IU{xB<=#re+lZ;c@<5dPIJ&`2PmLyxL!T(9g3OeH(LIB|`8r2H?&` z!5qy-Q=N^~)eWzI{{(YDezsWJ7*az^|NhyxSY3Ut4WfmpTJpE5TGnjP$lUIk7q+kK zQ<6a_6c%hTPFA!){J}x+es)`6PyJ2wi8rZ)&5Ul){tkgG?=;&%t+Gvi3LGNFG&>#2 zD-c1LYQRiUm?!HiAA}686(aHotm{Kt9N>JC-FXbk?D^iyq1W0M{_vG$zNejtH)}lv<x&DOu%J@YWK?JHr!<}cJLGs6H@o8u<^f#ghl#=@}R?dYjKkqSt^ zjKdVj_`u|1^Vr1+nL3S;>hJS$;xIT_hB)`0W;{$$H4c!r><0i03x-ueAzcZxFYjgP z>!(*SadR_9f$jr-5#v1-Hm-rB>!oiwTsHetBj~rcjTE?GvVegnsn}U|%3taBeF$)n zmpkYCj%E2+Lsk+Q-;XDi+&VGOd~EyB$W%WyG!_zU%aQSB$bqu57fouL$3o=S5Wi6X zeD`aR$D4{cp|3PfwF3vy8fdE?o@T0!3m!orp%pjJMYXaVB+_P90$;Ph=+dFW*}Qw= z4B<(DEuInu`k~d^XF=F8s9Mf_#b$LP zTJM(Dtnut3Km0^0`Z2-4#?i{KNhbAR2tj34hRUi-t1e+`UkG^nkf)btvY#v^^%*oZ z_`{Hxa0R5mRN*6c@!dVw>C$wYe{&z!j6)0-lzjN57CKJeWLZ9lFC+c(W&mm1wFw0v zqeEamO3UUuu;efbg-x+F&cP_aLu^>_7}V+y5DkH6h1Y{PbmtclSo0 z0NvE}^8uyZbT}>`Jy_1^Is|$AH1SQhi-Y|h`#l7j%UIkBy%l;g_bEm;q?eNiJvAS5 zk;y@w7r^bxXcm)V4NHV}hK#<5GLWlT0l3D`=QZG|bu2! z)TG&8>{yjNT#)6r+0ew`^jlM4)C}Wq-|RF@#KuSI5F*gEKX%!G;k|6mxF{5*J;gaQ zkbyeNO6ap&XXWr#)>KC@dEJk+Q5&w^Qwfv8qT(RAA6f5ox)WkqFk8`eQq*;_wLu7z z2#;Dciu21!s~~EC(&Ps7$dFIlB3mv%BbZ1W7_g;>%mqE3fgoQLM5{pj#1d8lBak@v zLDuhYtt!afeX}C%;AE{T7i7Zm-<1!`?{${nTer{QtwGV(jJgaMU(+`DV6puou`>5Y zXX>Mt6{HS0XsHKd?&zubKU;=7uk#3SJZeGvjcU28S~aKnZn`4_kXb+_TjNtx2+7kk z{|Px8v&vr#!90H1ABb6=DWy%Q5mIMA7$>i&2yQSZ0=Qi{nRDrhFSW^x2i7w+g*ZRW zM*|+}uFo!xFDW6{RV6~<<42yLP3~8s`TPR-(>TCBI9|z$=yTp6kwAjHZ57TT{zv}% z{n%Y!6Ti$LX`Mlmo%c`88VUxq^UZ<}e`;&v3>2RK&iVdW=B^N|ktlqFd4ZYux57-Q zMRQpPz~9R~nr)}=-zFTmTD~E%(S!MmwumaXgZ-=3B|LXvP zPKwSB&(Vs)hXNV;TkiuW%_ryH?6m}42yhgk@j~eVC-&)(;{m^5AO#P^X6_xt<$w&p z&Y^G5y&3$vg6+)8KcK?BlL(PwTg+jH)F3Q%@gpQV0Bu3V^fUp8{LQP1larf8`S+SQ zFQ%<#v~ZrSzAK#No-$k$uwvTxx7J>;Vo}<%WdN<@meIIeBrm__|DPmWxzlAWjJCt* zCoH?`qx(#2WUS3Q|&T3fspL>CCM zzy)C7sQlq~?`aS1p=^Rcm2s_kseqPELN3ZwvVj6OCD{neAAm8BsUk4+gy$UsExu-5 zWFCx`1BCGK$}fg2jIs!(AxWWnm5OWk?IvM&yi%xq*kLTLlc8C3xpdCB33SDcxd&vX z(br)}XYY=9zq^e4S)}a2;IoB(83cc&M$5*KEc|*v)>f%EGX>O}+wO5pv#Z%(f*$Mn zZP}H0<8eY%Vy8#^GHhDzMU|gmi|!0rwN(+Ob?=i%?JGz!e7fIxvzxZ+ZTV4>LMYB5 zD~e0qJzmjC6>Xi3K@Qgi1!WDU>`yrGS1`4R1mmnUPGK4h-Q=a^I_aHvOM~fh{}1X( zcf0!m?BaO`VNCU~sWO=ONK!;#_LA1CIM{owN&XRZK$NA7Vqxrvs3+P>!*y&cl`#|; z_JWO7+r8CrMQG7@P3bLRou=y{AMD$JKo0R5@Ql=lD$1ELFl_VgKl}k}2#N^Y-~Tgh z9F3Y27gZtUvb+x9z@#CnRH~(3T9p9_C3pZYq*QAu6-CU~!1-YA9&N-x&4)co}5^gR94si^E_jSR^XY45v)|;|Nm1 z^cFV+D-YMSMK7=^&HP}9JNA=APXWGTiN}q{?%epCv&dT|^4Q^grdTY{K7oex1XLQ3bY)`91LTK*LiOoU4|@Zu`Gu z7hx377^dn4kHCQCpMO*szl6Pm;RN-)aq{l-U=ZqJ+XD-275#PgbXRn^goEJYlY|47 zBV34Va%=SS+W?I5!jh2LtlT6_7$x*w)j9#mASnr=H78)&suWN);LE+PXzvuLmFp+FA&cU z+M9SJWUy|Fv$s2p%>e}=7=a`Dd1*ItIvw~_X@LkMjmY)%FNZdb{`2oz^g}HtgWzCy z5eRnvma;pXq*K3&(K3Ztw>92f%NkD_s^d4?IKI`seWlZb(C80Hd0dC9T%5o2#xo7e zV^#3N`3suw60X+H1C%(wz6 zLlBJy4B(&$5Xl{OdVPpTAt*rxHn;!q-D{I9*=5Kj6&ZcqV%Ttr-$ihP8y>vs`IG~a zu`1?%0aX=Mz8O8+o5BFzGzh?c!Ib6%g*w_1Au5IA3V)2JprZVhkm#$ z2=rN6glocsqDa_V08|FrRy62GooU@31G!}7m|{q!^VUoGXKsL zc+?WVhc|SfR8b85o&TXiEI?(e)Cm4_ZL{UKaD?>W*sg~-6@om~mPBX`N0nrznEp># zjtbTK(+ z*aLX=o2!IBS!y5~C!Km7Ut9k^VOj+*IxT=vpG3l+0YPoj2a{Ga+nsprn=`_y-v6_F z)d!8*KcpaI^TUVk!7{yvHD>xFol42B&tSSGd^rPHo|m%GZcJW8p$bpGNwAO&;MWql zqi{4FlxExtf>?fCAl^V&2y7-pXJT5jG|Uq8Zn(+Rsz*;g!FX&b70Xe8y5(M?)?P2DhbAysP!GdLn=?LYV3|g6 zEU{(|>Z(kb=k&<}VpuX%RQCyNuJe4wY)^ZwonAy}TR&DCV`4&B?~<&D_QR+lr>~nZ z-JvWc0z}61Ho7~NWokH_g5af1@|yw6E)7s%7C)(;@)*b=C+)>E{Q_3OOBilLZoYIf zpjA?U-oFn>eHN231yf}WwwisR)0pOQpa z+?Y zET!ILCew)Rw8RP-JS85?E>0L>3zrG@M?mSokKQ_z4R3)_nKprO1EI`6Ls(GFw?)1f z_6|t8@X%l=`z!?rC^$g;+ubk|cJ`N5QmR@{LGVb??yr|YiKotcTD^|j5+_|f^Dwk+ z3A-A+r{K|(rI{Dsy;c|;8hHJF^77(ok@Y9H_1K_Fx0Wnv&)38tg0%kfZXdyxp};{R z%&f@Kyp%ImL*QWh|HN~!aTb}Ip#>g&F+2%)F%I3o6bExJm+GU}S`)NOK(`iQR)A4|iYu z+?Nn=yh(3Db>lA2G9TSmp$lA6iwbLViib*!9sZMA)HCq2> z?O`qz@tTQDZ37yC9j$h^;W1m=#}raBsotK8sGW9*G` zgU|f@qU#-uifM9YB4(IR?v_%K5op8JP7+RaWaX=Pknan&K)^K@=pRZ)%~QJF%*90XF{#?AJZJGF2PUjKxe7v%8p~ZoTE8ynlWwaX7d2vQxf+T^5V8d9LQRVgs8?K#YYUj_wn?6DYE$8G;W0T4<{-ll^)X~;_BS!iY z&cJt!;1@Nq@U{|jzc2oeheIGCy$W6?GkuRMJ7xOhp_gTSioqV1qmfK4^)@P!qwRsazxDPljCw0jTVS4 zzxx(zeDK6>>!hRErS&K|fce@ZwVzt7L^PYYctjHt3>-L0fpK{a(XV-FT*bF`E8O-Q$$$w0VLN)Q!<(p%#nI2y@@E18=mbR&jZfQk zVb_IbeAV4<7#i05?*0>aVONPz9%gDXnK_VWT^n^~kYu6*b7R|YST(`f2V?ygLRNqC zl4@&w3*=LJ%(fUJwL?y;jS$z(uBpP(cwKVu+4)!+(v^&Js_q) zgVV9^*tga&p&ivKi(~y4tQY^QP!!^k%^W766h4+Q-V`348W@45P28r9C79ipO@fVE zN_J2OuUQtl03d;Xcg*TUw^sPic2MpANpXPDN5FiVfcd8NOdt!Q0kKHU+!rVNgDq1l zAwUGyUOV=(n;l?Rf-MLWUV{qQVerBjvtboJ?*K1u7%K-55iyf9vw#s97{i39y2Jo617@)!4>T_=ee8PiOLYc6gPx+(aIn0}Ju%A;(rUz8Q{e4~I zIb{9%6-=n?#skOMan zULW>%ozJoJcWjHo_q@YRO5m*=z+z$w0lI>kVI(GG@OTsA-+e(?n^kVzZXFI^@#3h; ze{uDfs&OgxTZ>ITswKCm@GgMDWr|uLUH3-+$n{RBS6o4(z`K!D@ee*^>)zvJcH#y+ zI&j)aiZuIprG@7$@~2-_e49_RdJ7P3yrP_3G3EXtyX3FSy%us}?uyCH%NymOdQcW& zniq1aP&bbqBx2)MBmcJjMs8~+zsN>u7&8#wbx8xo^@PtuO}l7#dqSx>!UViZgA#*| z!g#3aJ(j~7(YdD~H^?5wmu;J3_L=kT@7V6~xeNL^O$>-cGqlLL;&RfueVZ~2S8w$9 zn1rEakjVKoaB;7twjYLYUR2_vkBy@ze*K?mjUbpIf=&$yAQ-uteG7uz|D)<%;9}1E z_y5n#bUr$i+Uc-pBRUN#9VRBN*rF|VOPN&CLA6XxI*3#xN+GEzsj#>^NJ$e(2cqpT zu{sRVaVsm4(30%$dXM}2{r>-t$GyAveLwD-F?~Mo_v>(7&x@GcE3}DyLsLUJ?5h_> z-R{RBV%5aspaa1guWG33d3djO3BXCN0YuJ7Kujv~a$6J3(g53czY=Py0(t#(zZAViqj9czsu*D_?HANnF znbSr}J@|w|^V>qzItF^_$G_%Y!-OVS@t1!x@fBltVh_t3Gf`XJ{erP%Y$sFs22%>7 zAIJfHz^=gB`}|Z`#b8`x$o&F+cCrSPOTh%_;2j?_5cQsByGCNin%OFK56cZNH};!< z8|Y#6@E`xDqES2UGuO;FW;s!#X7i58 z9>X7GcBX1Z&u;CMUp-3gYhyJwBy92u_-V!1FY2xg(hup`XpH=*aO}_Zp0F!&FlZ|b z{xPn@@}&enRt|JRC@BhZk2SW#V1YOKY|-zu(KB7C&wpiILpT4wsHale`MnW_XJRVFpgT|3xUAv&b&<64lP<5Uv=IBRx;~+z z_PlG{PFb05N#GU=IA%uKQ&@#fK~UijZWgrT`e0NT3OorU@C+<821=o9*R4>vu|z3uSRG;3JXEd0ZP=$TeG(bWw%5 zJ1ewDRl_{;U&&>j0e&ULdwt{eiTE)9aL$3mHU4<^<>SBcV&0r^#9j;^vFbGFPLxh& z>#LlM6t!Vqu)=R%MF}PI8X--^WUHe#c{@wEd{O2Hts95tu#B~Ec2u?A#_FYHZtS@l ziU)QWKgcGV3GMUlEGY=V@BvYOkCNTd{v`^8UU*vPYjR!a<>2d$7d1ZRRswundDfsI}VJ%WpQeZBM*zv%(cq zr4o?#7Uy1K*b$>tVaBY4s7ic;;jW1g{#VbNrHRHAXos*mIWKESni>LsDom-FryY>R z{E0}7T2Bld)*s&hfOFrU zZU%Bi4h+W~gKqX528fInCgYW(ASe(aIGmQL!5_5WA zigkr9<~7#ReG69R<|#5Fa(f5cCZ~HM1G5{hUaw?E?W*LKGinW2avNrL-Hymio_6?n z+yx+1D&SK4y7trc-Av(cIeFLE$8r7EC-+7wc8y_q{$c?^{LvxM!6#3HyOd~$aB2hL zXh!XY-CJzo4ltzY5&s<88ozAKRK}Ei?r-JBWX!@d2Ya>=ZR@w47xB*q4a&eakG~3! z;$>WHTJe=SJg*zLvNJs48=24*d?kIWJ^-pkv~Jf9QiRqIz_&Fa2UKyQ>t0ua*YBA zf{Wq%qTew)B`ad_Xb8vgk4tvIIU?3;7G-d6ir}HVtZJOpS^|ycP|W|&d2V~`hC#Z~ z7T>a_w2W-(JuTr7J<-RfB2Y6GXC%vi)xnM%K=_`r8!VG`H#z)xOUqt@UFw8Y_{IR_ zjz2Eq_wktK*H?`E9u#5DRjO`jOkwYsnic!%npItOHXpd){xXo$^qfaOr*@_Vr(nz1 zCt-UV6bq&sW|mQgPAI=FtF^@00ohb7Me);`7YSmf&7Wyx8!R5Zox1r!Du3#$cHy1b zAn3w+Maj}8KP^g5Z5~!-3a`GIZ?B_~9&1E_!B)SXkyqs$=pA4!0#iUE8!q@g)Qv-* zwzsix{03>iv}fIfCAqF(-r-K_VP9Fksl9lx_-zpE-YiA?Azdc-e8aD>I*8_@(`P7> zH|X#ZFb*KuRldPhe(xbn9^hF}rCC$FoDtsk=r({j;jB=_tgkYIjV1*ujaO~ zF3_IrA*{%lllc6+1Hl9WM{+CQUSdlB5-%{ijR>EhxT)61h7gSbn3I_6O~d-;45*;* z(!4cSfyyvciI8u|zQxqE;%X6Mv4SjMek=k~`JD6Sh{GjTC%6Z>dMMIw~mc0=W zL6Rb|5sE(_dK3wu`e<1ybR4Y5NMg>pAs6+l0 z)(&!h!bUAtf@Ek>ildC-+UkR<`mh-N>TO#4pSn5gSH|lv_u3YVw;Oqi?*3wHyt%fhPLjvD=OLneG{H762?QD`E~Sm{oVWRkxIIeaqytBFm~CD=7JO$IET0MVPBY& zAiWeUI0cvOQ>sL*2dwjNhAG+6nZtUg`{pPtIYX&U!D|c=UhAXOi!=uu{MwjKUH&CWbGEyq6%J+YVZ!!#;^=5pE;h z!X;5LSTen<2dT>iORnIQnm3dH-}iwJPpkyJpBxgYoEM^@81j)niN>Na#`(^dG({C*kIObL8oDOHHafw+_1UbFCJX+Eh58uk2*+oV01vNrSbe12p%8G<#VW zm68DLM)6s%+PUWGW|~e>>2q#mP+msO!6qx2Xw!G*+6FNs@L!pfs006(V0U5JHC!$K zdj$1DYyGXvMUN!ah-p}s6jSJ8Ps`I)NKp$QB5%|op+ip;v%x5kw>PZ5QnLDb({nXt zvaosidgJ)YRIGh)+d^WGf-8nhm}C5nwaN|%BnZ7}k}tp$?nBqfTpI@(jQeBvP4+Cn z0z6d4!6m;`F%%I0sVvl{Th+~@mCtZG`1zSfR?<+v;K zdDBM7Mxdr%q&1io=D|Xp3DOo5;Je^c)2}^2=y=1s-v)AG)Pom+I}TWs-Wj#vHuT?` z=y?p88O(9q&VckyRDhvPspctQ2q1LXA9tM=$X;!z@oxde6zb3ydTEL`DYw2S$2-1T zH9sO53jRqaph>>to1zJ&NWnps7(pX9e*--wNb4A@?2GYz`Y+46Q12GNDHF=X3m6eOz~nE`be zF+1TfncyUsyyX~b=wb^2flkLgejxWG=Pi37n5B$g{!cRSG&BJ2h?$JJMThNHWGceu zl@Mj7XRS9se2rZfhVXDQw*=`9=$ggr?D&kjm3e?+1qzZHAhTf2HaB=TVA-0e)0UaIo+p07oyo8N_sp}2*SHOs3E z;`NzMl$eb3uN`_rZ7)-kZSz+;^)FwnN2&8K5+7&Wtv}@VOn41_9!$U!06ykpE6sf(W5f3+^(6Idme)9<+U#WVPE+=_#Fqpxfc-x z`e6>vE(^@FrTJ>Y#|lT956d2w9X%!e_rVc-Y0W47kLumX=(%PJFz=EC|D7pB|KrFR zO!@|sOvXRZgP~dqW-BkgLdDLda*kO%27$rp7i!dMbm@E5VO9ILn)trPw2x6ecWw(o zVOTBE_vOWcktwCBUOdh0O1wuC#i`RCJ>RQKt4jwc;JmbOF=R>*q6Ue-jhFTpa1v)PR|_veYw~MOw~?@4ZC46I4T8f zJ*wXc2rMiqcMSkZ60o6}dS>MgzBUftsUNhQqcZ-q%7)khYdfIxF~wsF%c8Lg1etF!6_Rm(9AN1(n&*W@>U--ukZn2Kq}3AmIQ5^!e%-|e5%5o+oJM^PmlaE!fvl# z(>s+uhno?Lgn?l0Nge8^!I;_HjA6F|o2v=_OPbo#8cgwfx>&Tw5@sFO>_*?GB@!vA z8LT(?#sn)c2MQ|v%+u8GCkOe&Y;(BB<9cP_SWC3apmvnssppVn0C7Do(gJLI`)*S@ zo*TjBz$zTe!!-`mIO?)<;8x44GdFeo?M-_@DcxN~&SrL|??E6E`ul62L)bAl^IXqN3o_)$+--Y~6NzEbRULdJ|ZURVdZTqjI`mP%g z7!vvUk}VmrWuDPbYo?FNXBK1U&R%?Ne$~RfBk0`^%RY>2UQXMh>s8BL7UI@y$M*@A z<*YDa$Y$v)oN+h{P>MS11UExlcF)CiMwnD~ta(swcq{KJfehUQG#5byPeTNnfTQCu zh3S$}A+>mz-Mm~r8N+MWlgBVhc?vW;G{5#qGw;C zc>68@#=F@k!gTpD#w8W3osxjZ(~iZcv7O*;q0~5WL&~r!cql1@+nEU&mza#>&HQdL zafcN_C)Zz}q%Ru}#W+VP0ip(X ziK$gKX}=*&EFF!`05r7v6@b9l$8)BU3J~2KS6^P7YUl1r5EQ_fk5{@Mr_$x1bG-(J zIGfWS@4{>pwrk`oYG_^U$U*7{o z8GJf=nCW%Sr>{ZnDX)++5(MBJ092~*z#SCN)|P*Fs(Ei+fYCG06lfyi>6)Q;F>@y& z2NONxw{Hj;L_i6mk-n+dz$f=&yWD3aa6n2s-~|vKjqsJoqSC&YFVlEv7G_syz>0pq zs854;3Zk8qK|spPj-}-KZ{6q=>pkGs*vNl~b{1(aGId#a+(+ewow0pr9^dtp*<58g z5}qwwfY8K^z1NC{W_5k8t|AnKv)(5(A8ss{Ji)0C$lXi|q&oKTVLK3Mu$ZOe7GiJZ zx$RiDcj(i1m+b~cE}Ji;4_TO7z%Xg1hT-a3QtkVIbgNlX6}-*cVj>trw*_vgDQgkL zAiG?H689anQUGfFP!6L{TA#;r1J2yk%xJDycsF@gLFYy%NioWofvU(Kil|_9lu-mK z6M)v&e`nKV#aWD*vZ#rDio4z~#cw5b_-Y8`@vSwC`5L&CkOr9X9XzyFH!C5^7RuiasywVvdY%70>tfEwiaHQZ|@nP zD^n%CRF%KGw8JThco9%1Ttq2J2P|u-)4t;Jm^^B`x239yibqK0k z8OJ}KU>nd8-^i_n-S55D8BC%uSKhfhFYQn}AU zH;i|&-}Vq|X8|%JMzpB!aN=(rjM12c^QGQ=Vgnuld5UkBYr6!n5gO-vYvo^hfG0JF zm~rHZ_=^NYh^FQG11t3eK^T`5LY=jWD~c@q}Uu>e|P^3z_R0=Bwm3n1_hW>+Je1##;80b6g0i z?hh9iNbHYW7WI`56Af!3UX~?%Tt=HEcjTh(zk8d?4_Q9eA)FYG5H673-&TM2{a;v0LQYr>c^o_Jkz`!(%_qY7Anw4 zEUPj=+c?SWF@_tWAp;JWRDkqg#w7mX1pP7;2<>yuRs~z=QV&L~ffsQl?BrxA&W$zK z>Y+1+4<0(WSF|H~H#&*fMNH!j_;bBl!t)NfSi0EkpKm(v^a$_k>U`AQ^b1a7Fj*e#4`%3F&}Vpk%P@lctNl5u^l&N%8Z9a1i-9Rp)v= zLt=KX{i~{{(yGh?X-Fk$K{pX`fCqL<3%v~Z5F)x{e$z^Wft^XOwd)PJ8+3DJ)XheO zA`C-#q7=8Os%RrF@x6#-;02bC@YKEjJ<(co`8(Wn;-bYACL-IxxZ&FE7kny6*@7()BRm zeihg1CS-9StwG+Bh%nZ5-2_f`UXk_Re1mFt1hredyE9CWKsQW)z-`GR#2@@;ijHOgp2(gpyj&jYyf~ zviV*7v0`Va9t3+1^rd~Ikp}-s`;r$>TDE3c?g}&YKWYL$mJ}eagE7YU)C9=E59=%(%Z}XKW7D#3LTa ze7O|r-OSSl)J2RXRFJZU&x0xaU>pH@mBU;F>AftJKdIMEGoaXe<MD=4;g0 z%{=q=#(KDx1VS!~c7Z`&3fsX`K3jutR#l)pdJ9^0{OmGksoG0FtI)Zugq|83{;+Id zAE%xz(L!EJtgTcdep-K}_gr@;w4KRa_Y2yh@^mE&IK2DqC?-Jz+~H}?)unb^Scb?T zcBKr$CY}z(*&XM)e4C)^TlhOy6;SvYzgeQ21q=FRV8{&f)7LDi^POuDI4BxsCmurM z>xm=k9HagEKpdiOE(}`ifhbmSKj(X{3*7|?OqqK&)A9zB6pXf(XoMv^vfk1Di0`IA zVaM7kyLIm-4U4* z8^DB)QiP;YF54PYEpSN@c`#H~LJgOda6;DxImwyWsBt^x-4D*;y1>vwcVELivc>`K zxDY0e>OU^Z91i{wx3?xh0%pf}-F-YR9aqC}*&}WS=ScI}e3{Sm{c*|qxu^O7f@Kfg z+DL^fOAVWReY@oLEJ?b1&<`ng^!6u$4JXc+*bFAYL^sRJC}?*;D13bhs$=fvrOWm&q(Poc|51_ z=z%kl89;QjsEPyz!zS?n>G?P?T}|>vl6*C)M!YgHA9KWkk8K&fT~0xf<(kzzZ#Ffi zt%OOg#j5lC-u_z7nuLG^=|5s;2Z%5r&tuGy@p4wf3IM1&n;)fX1JAKEafMYCU1^_6 z2zd^*;=rTzD}E5nwkV_wV=SchVsJ)98{_8IRak2t68h0&t~U zB!7Yuq+1YaPPH?S;nQ^0`~7CH4i?GTCotMkzN8?&H$w+3ij>xkKl|RC%iw4+h57PO zZYL6b=Ltm|UA1imBUO;0fniCablmlxrI>}dz05OCK=fc!fxdws3APdXSm;h|h4GdU zj#Boc*oICd@@B{0SSfP(GAG@MLJ!3&bi=G;$m9w*44a3MgY;Cg-g`p5)^$}W(VMjt z01JBpe?Uu6aj`<`a0y;(3DyY?2gK;v1qbIKzzzlB@kA~^9)IOr?yZ!s{qxP%cPE0v zsmRa!(Ut%8(0B3=`3l@JW6FxL_lv&aW}@Ni_af82jJXC&;aDM%ms-Ex5Wy~S-h-5L z_ZVU462Bkuuf(2|e#&jJ;6jNp8LjX5x&`FL{)ZE-psyTwd1B=9mG&Mo8!c))iRn-K zX(~@2D(fE*ky97g7j;b5<1L%ac@JKn(8L^}wjG@=ixQDd34QN`fo`768l3f?0%dh$ zhm!h`Y6zF6?!WH)YfrSRk{MT?%-JXQtu{(4E(2e5kT=pr` zB=4pO(%=06F$tEIq(fdFLcF?A0`+4Wsb5*?pz+SY{ zoEzI}glF>Qj_3(-R#4u6 zmDX2Z{IxX+KVwOP05v?d>7be);--E8D*HW(HQhW4n-YTuJ02m+Qd1)vIiiV%QTVef zt9)s8d3DIF3^8_CHjBo-Ap?=xX;Sn^!U_CbW=q8YEI7LwNf7K-+ zqk+E-XnTa=FuYdjn@FP~1^ND=gxJ(sqcVINk}MoxdsHM7Z9}0qG)26sM?V-4%QiIO zNIZ-1kg+c>v@eH;12S1`&V?M*W5NJ**Dy%o@O&c53dnXknuY}qxrAc4HsQLWg2K=f z7`mo3w!Y(Jdk7)EZ(Nek6G8hJHCWbgsFeyNo5v`_YCSxr%NEFy!`)%AdTaTi$ePc6 zZf7x|U$8B2m7GryX1TD$Cq*gw99-qKKG$}|jYEy9I3q(ue!YxR(H{0pt}Uqos5Y%* z)mQA7Ts%eYmmt|6ymEEv%d6^RBfsX%&&`Y*vbY$fgrvsI;=_&A#uNhC{tFd_I^i#p z(S-XPgZKd0eZJg2-Dhz_O6Dm}myorCNyz+~(8S&nv6?8u-USaQ4Ow8L0Gyl;!wZ(l z)F$7Q5e$$6cA1pO5S-pvixo9q10bs8?P(ogcD9K#cB&rLJ>(-TYiCn3$Op*Wc@@CD z{+v+5r(XHh4Tmdx3@+%}U3PnQC_y;`^~+_uqp>K&=4@M5$-xar`pO#ipvpaG;;=LiyZUHSh&|oT!AZy-z~M1?D3^=Z4N+B=C!_Gkq{Zs!y`CIv5mg zChA4pF(|rJmx1LjtJ^|!6=hef(z7n}^_Ctx^Ir9^ ztljZrvXh$xy^A0y=(Y|3j?uL4>mw@aVW}hJP*r0+f%hTOEUk2Z{5x4drA!;WeisZc znj@%7A$MCEtBpn%VnYHOk__w|y@Bx=uugt}gAz(=G^qAIns#Of{r}#1xP~Y44i#m^ zdX>M`l*6~?GB^DXU(_>$NsjHZpXyzKbyqY(lA@P= zH60IuItB)#uLled`YeDBb>{-B^fsq)J#75f29q+_o`&-^=9jR9`R!CdgA9jRAfYR# zXwH2dM`O@7u$xEig0SD`toV09l9$PiAvb$iOC`(&3u)>KD)YTrDkWPSe_E!Js~obH z#xz)A!|gN`mj$qab;5>vg=fAf8$1!c8&WB{ih4`YFjtxxT40Kz&->E7DBDAt(&6Hi zU@{Y5NlBbQOKM1yy18;*PgrQ;oxhSEu`?wTg9H;#po6#_-ZtJ}3tmLYo0p674raFn zhYr5nSR#5l6caJNZO0aPdt5ZNiv)s7x~29g%M~3@fQlWQ_KUJyvobAy8$zPviG(@? zi*ZU<|8T@#HkWaF+gh%Sf-J$2hyJ9OsgM&Kc;21-Lj;6PAa!4n26&vAJV_B)K<77U#o zJGSEye*SH+qveR)Lflk#Rrw`88-F%yhTt!v|AifKSNfbDW2j9RVRh`mF~)qbeIl4d-5o?q=`gM>Iv&y^ zBhJtZIa@Bb3&7Y9thQ!9K#VVVBQJ%hlBNF$W+%rDmBsmM%uOQr#ZZx-XXGv-cf`X- zxOqE=&VsEw_4-<5jH9t-o8h{z74D4qkrTtfrKI`G&yR|8Un4tz!TK~9Z0#9&zB*g! zu~qe~$H;`R%ct5~d|SUHE~R5#i%kylxD(b~aF$`hm3NPiB{o(%A@=0b!^op#gcpE6 zv&{lBw&9#lnEtR7U$0d7uokwdp}qYJaHaY6PW0r)^q+uk56oq-k}(4pM+4>5^`C84 z>S8Bq{0zFm3gAaVzVL=#PHEBK+8?hvob9-q&hl?7*IX?QIOy%Y**r5`QF@zsri()4 zJ&+9dCr#h{Q<<01SC+wbiIp-b35aiFCpJz-gjj?YNKLNok5QYd8so|ONU8%^OUiFD z5C2p|m1=6JDQBYNED;Da-NNcZH{_ltslH`4U^*iTlB32>M7^g+M8M>s#DOS1?t1U; zC=@X;U7(2fK)_Pqb9INoxR0sKOf6(rl?9XHv}x`fdkM~$^e^BRk38R8~|IfFF> zb9)k+Es={3#;NV>%nEFd)7PZx+rM0L>2d{)l53Bp>sA#3+<+BtYY8JS2tG87+u_)L z7z}u6EoNwCkJz4t03Zg3L(YMu2`Os7BDe-fEx%r=N$bvsLe7xF@psC~NOQTik;Pq2 zi#wxKx5m1s639D(4l9pG1|t_S^9f3sRt<4u%o5Jy&XX(yTIQ|6Pn1&tnfIQFGHc)r z#+{AIKt$=#>R)D?*vbYpflXWVNZ`33z}`sSC}^N;`&SQw!T_Z787CAAYKMbiNdh)AbgdcE_a+Ti<~|*2+??GL7I+Gp z(70WeZw`H2x@u$eg7H8ms@HV=v{vEqUjvwD8wI(>-n#$Ep=*17RY>p=@H z9|2dS3i%&h;{OOza1Ws#SB1JnwNc9WoqfY+_z4E3!jEEtG%qQ$Yv<20n7> zAt2Wh8@UKd#kOtLNR^gni^!v-+q1YkS4iSP#AjcOfa88XJgUuT-_W!)X@WvPO&8)i=SKQFO< zIh%=qbZjPqKuv_C850C`^x*U}DgLvK+adT%mV@G#oU}OL{wNQtzycivn=m+|9?X=8 za{1{xfw>Y#tO_$_WWm?p?oD=}?J@8+G(!3R?JlrRGFn9Fg!C-_q(7(!}qzh+5acLk2(#I*arBvRoz&2mH z90byJ<%+{@OeaA>$lBQ$;jg3YYq2g?v7Rh}^1=il0UusW73RqZak?-OjL5-dM&=Qv zJ9aDH)*oe%^o~=_j}_%IKS+Q=yu(7VHeUK~eFeoU?XiBC@<`<_nM*B~<-2LjjopN4 z`7sk)9YOG+O>zM^-0%DP{(Z*PDBD$i|3lwmPJ-DUeEHtnyd{CtRaK=zA*_&{1hU^P zeDdN`6dr0j)SuoFFjl!4n+Do&sBuFQHAE<~4U>|M0cS z&W606hIpwIgAHdw!4xO^W${($> zu3&5+$^W}Wd5aKJgQms{bo|Gl4O{?gRxz&~f?v7YwdQqKTeV|5r6?#zWrNc=SKD2? zMIgvT{l+!Z{VwImn%(NBP14L#(&wm1XRf8?{UrxO8kvK8AZoB$iY1*#(`u*Na~7*B z&SodBJ#&yolR~20LOC7Q4n~NZuv~S*VC}3+R6@ZTnf1scM%0JOk(`5(83u|uDoo1P zMg2kC{UV4;ePr#;sLziB&a@L*e?5yXBh|2mZ2V-rB=UY_-PoZG5fP8xJ__ee-;?SQ zgkKT9J#xgbzi2F?c+aaxYKTBeNm<1A`S;58$_>=5B>*gtBxhvaT!DMgWLArVcf~FV z8$J99YCb~AAR8ciL|;KtZ{QOmyxrFft(W=CRM;FZf27$xh@;G5(A8Vz)vBG)xCV2m zrt)<959vzl1B^~2_)jE_Tt2F=ISV?$ctJh;fE>hsRRB%MX*Hx%@QAJNk{&z(hhIQ( zd#np3om~MQGcV-6F8~_vyzcK)YTnr=+M6moHSG(=CdW0;G;-ihG{xZwHc*&RMvb*T zu&Al%i;3`bPy3DFiQB_1mL(DlXB9TjVN+{Ucehwvukw0fh`F=xj{B<7&4e+i3nlkP zj;zb!K@Xul4=d}LdfL@t0+kjhw5(a9O^M zF_{JJEgbw(Cx%ABd}!u0zozrPK!|LUl9^%D3V4&>FEY27VseQa##Y~(=kSvb><~`C+LqY zsm74JH&zenU{1k(4zN3kr}lyv3Hhq1YQj|DrKZw1A6hb9QcQLEew~zKltOOA>~snkBN-0!_`}Jtwh- zxWhhEd9N6;>d@=&hBqkjH?OMrjwjgn5k>W5)!c^tiHt;_cbt{yawa)=X6ZcPB~{~? zK_#NG-Qzj1fZV`;0=a=KI$fye_-zv#jc!lYFCae|3P^nedlt43TG~p~dqjNcq7j)i zirlr>Y?#vYY`F?JO}Mf&av;Oo>jDFMu3;QEw04>LaBbDW*|B_So#VH5og!Lsd{1J^ zp3fVeMBhF`w$oAQT2g@t-h>E7N9)O_5EFDb!=z}u4fJ8@TK=sEhFPE)_f0sRab|W!lK=u>etO_i+ zN9m|sGqBbW5-~h_w$hw#S`su^WFE*#8%@V6vrsPtIgYiP&`WPeKb#oMHi*0#6h4p3 ze79183xLXp`{-Y9r!Z@if>9Gw?;~EBWF0UjTmWTXTk~%^cI$rM;H_YAz>rjK{ zb1qR>?)3drJ#r6_IsOa&-78HDLwNA;aDsM)DSTu73jokpD7zHn-2btE`6L^K+)Sej zDx;G%A8%-m%A43aa5yxDAA~yhe0>;lBq|*?`)>%tYZKgi@@f#vZX1qDrx#Crkpv&@ zl8j938fWhS#@af@X+7#jFx!*f0;xq)fxI}3OFZP1hyPGf5xSIVTc6$MdUo?JxO(#r z9&HxCzTRj=>#NsjR0XeBpCgm&TQ2W7_P*y$s=R(~jQ9QLC=Cw;x9xcV{I}@?425yt zZp+g6c~|I2f^CUtylVG>z8IXcx{*qS!3ucfFG=k0T5$}v=SON_pY{E-z3u4zoV}n{ z$Au@J1XdN~KI&$F%?vFz)8*+xgV@a zgp~5tUK|gU7YT*}{fCPU@mcQ;s6>d)=AEWJCA+pgO|6NgbP?Qc3ELo*4@HZ#=i?Ra z6JyknIjalgsQ=MEw_(+JsyA1fRbgR|`CC-X;p-$6$9sd)GZ}OTlC{v+Re$07-V1^d&G}_{n z>2uxiwO|sWD1JtFT{hc09wB7m+_$F0XXzv;qM`8+3#N3YjamVIF`B=lKSn%jSVlNA zu)-OFTWYv?3wYWr;iiJOnsZpQoK(`u&o@jCdmW4)0JenT@r2^7T>qT}Odh$-nNlZe znOEO+B0H%Zjc?^>d`G*$Q;k#am3!%o+S08$TQ8&oZYs1*-AyNUBoaG%CIyzjyL>#N zIZvMseW_cZeB+Mu!#$yQVQj#Xo-B%f3k(iVAOwVgBq(7-TTr8vgu|Jvc4Am`Pjxt9 zDQ%~^JDOEI^ViP`iU54q#dL1bwjB_Jpu;Ps4aiOAC}fQ|Nx=T>pbU2271oWoISEj@ z8){^#=1mx%#p2D|9^QXAJTNXot1F`*0FZBD-Em4b>s+z5o2gWw564}KVU4euE{-vPXMM7w1rZ?awHoQh$ z>l@!15%qAw!YL1l1Q=wPBUEaxhL+lKyLo?8qj4B`8LTtf8eDhZI^fTwnt4t_U&$-n z&N=pN;-Yv9tq|qBiNfI;isrKhxr+v}vtp}?mSB2wadChmJgR!!WoMi1iX-z>;o@e% zN#`?^gy-Y%klW|jls|lv-Gme8HkPdJq?KA}lgxlU6d0*gkvn`O4Uk%EwYzS4V&ReS z$$*4XWMG(LjCTeGZ+`434a;&~NY&71AHXc|FH0)f8ONur%`LPaWmtyYy_X&zlQ9P8;@thd3sa=JK35O1~<{_V0W z?MPNH(Q^b|-iQotu?*9dlhi}(dY@YosKyCU;@&IY!Pv6QQPTba!*r!l5F)?7l_A3w z69!8;%C)j;(9YzaQi3eqAl7V+Y(Pr0T!P)8t|789-C3ha@Vr~Ns(kuuUQqTsNn zrllFyS_~b?hc~bsIlqksOExdDFf~pmfCC+;SUN5=4JfzTzSpGlda*jT9D08p`1FS_ zOsIreMEST`VBqzzaR!|#4HQu#wlebC5NkKLNU*Q~7f)}F{~Y5jZw=Na{B9SLf0f41 zJwL~Z?(*kD-+`p7G@#+*H-T9|(gsgEXkXa?OxjD@k$@i&-YDD@dGqMVqdA9ZAdm+^ zt8lFLXzTnZkA(8jM4Y^6%{}G4fks7?r2$WdC617Cq5chyJl~sLJr~ zv~@4S&Q9O?tW)BB9jwADd>D&O)IeW6k;2bZvS7O}d(-#%Pb&(D10;(YEvbDTt-rUf zx@}2?jRVDWO^@}PFR!oa9;6~&yh!;*4kd?nVP;V#l$zL!d$_`Qy-w@*i@-+?i;&!f zji4C}$o;nl`DVxEqF=?``5?oQC7DK#(?;IDf3BMC(LR~uVu%q71o)SY4gA>6`=oyA zuS(GortK2TNY^k5B!n5%dpdnN4T$@Nu@Wui3XUjE!InShzZ2#d8|xBZ5?W!DxT?D0e=sK@a5i!hm4t-bBWyY z=QLicqYyzu2|Mv)gm$8ZM0`*RhO_{~@6=;K7^ZS?fd3DRD+YGuMk%r=?=XMIIfvM6 zCJ-kx0LY^OD?yedG%PVY(Mu9T(tD3M_^`HlJL59NvRa;qiP5Sfn6smWh;n8NucqYn zRqgShF{kut&XL*+j5Ov#PvJaY!vy2v%LwtZmv)YHCXkTY?k$*Li_h~|G3SSRk`Gj1v1{77+Z$zGo6yb%-{k9a1 zID{t@QGb(yY#15f{B7c`ZC(G;DzdMLZaxWS4;?w+5Q#OwgsrbI7jsMhm-NO%%ldiL zdSV2YcMVfubIfveK8Sv)Nx-7Daek4xLN$K;5;3=)>R~{4;EQe79 ztBvwDFkKPF3KFNG$eM|NS=2lVsRV=MnjEY9!K~6%38;GKpz(896aFBvJ@g!rz*-g$u7elGDhNaKGYgvja+XQ}k@w0@>Vfpw_Tm6pRDCH3cr4xY>(n_zC=FD&P zg$37UE({|XPVpn@iUkx$<(3}k6tCp=8y;ekL0A2xy^({hS}X}rDWK+}aI@ z7NFD0K2Gr5=*FZt{i0!0@sMnvOZQK?4Fc^^dgD-(id=hS9_b0hNu1wC|5;rYQ@2Sr zbj5c67vLz+^i&TY^1}gWi*UA5F3ESP|Z7o z{RvWdyg#Tm4wXTTM8HmbMxI`P#sw`2h%^;BdUu`PW5~i9YnVZ&zfq$Iw1~y}lCS==(X-t!n&Xt<2ZKh|H5GCdnBi z?Xih3J$EVx#%EMVlr@CKXPR;MphX?5Iz5N{TIZrlt&NZQ_=sVdk*lsGHpdYqZwbZQ z?tcpT1FK#Uw6xDVg5iV_ZaP6=Aa@aJ7GW8{R=;f^C=HcdUrf(Ib37x7WPk_0>!1Lw znMXuxazDlew_AWx566S9ZQM3imcCrOpdOM(O495lt$Qe`VJFJJ71%AAILT2zdMgoN zx$x(s_40oL>xpb#@Nbc#ECSLNypA)c4uH1J=sVkrj&UydnYX7OljnKrwIa9t&p#h5 zP*wroqa3P~Bar+~paBNW3upquV#4zZlWOSQkob~N5i3=k5lLYG&u`zxx^itVgXPGe z22EJ!g;6$#uQ~@ROM;Re={T7R;*Y^%y*l|DSL&*RitLQG{z9hCTVX@O!8}V+Wfqc9 zkfxMSB1K(#OWYX{6kXXQF!0FJ#YmxIs0zS#-6gu>sU6)(BH5iHgFjC&aHn6l?ETou z_&04${w#b^im@3@`=cFDcYqJ3>Xfy^q9ey{?e$iOt)FGX^R4%vjR7 z`wuZ3B9HF46|>6k0^}FLnuH6Ie}I>YJS*DSSN_6k9JfJ<@# zA-Qfz^15=f>wK4$h54*9tlGeD`(CMMcR*dB_43_y+dIoewBqaHE7~Nt7+LIU)MrS6 zNOWWUAGBH|wBXkeV+f~_nQFxZTR(g_0qI(gaD9*P?xV#X3*Hqvct(<%ouGPx!${M| zsr@G4ep{pF@2Y1QQyxsr=`b4iQ!DzMIytR>xD(6xhrWC}^>vL{bDgZ%{ZXH2n6xl3D;7M?s6L5G_?2sIT9{9kVqmtEi zG8if2w529M0VZoMan{4M9~#uXw`xkCS`B5KdZr2F5onQ+T473x)Ia+KD7g?H5cL{1 z4&7%DXUd?StBQpCzi?;Mi@iStdLJ-FRBJO>{)LB5yXIJ~k|rukk_a}JGT#xE+H9nK ztd{id_h*t^RdTzA*?4;z;Nv5^AAK$xNF`I7y*mOF7a3)5#&oVgKEsD@b9BfplwezH zt&>-6QED3R=g5{kteeOM}d;loEHW zh;LX>)%)QYf82^BrQ*X*GCAI$Rhllk-5^t#3TE(_cHIXndB-;#CUT@`TZ&yc*tx7r zS^KjT|k`6$*?Z50igC~5UEm8D){kStYA4wx7 zm(Mi2A4FzY=}-MJD|2)B=C$O`rb<^HV@pFRK}v<(TNe5_Y(oT&)c7+E1h?WGo-E-= z?O!>Q9Yo>=oT9#uB2JX%z*Kj?BdJD0%~iIx zt;lD$_1hkpfnASL@8!ZjBm1hIQqMWTsU`dpl)@U98)4Cb&lw_&wX#&1uDqO^UPF%-{leBbASg4{_~En&u$SV_^RHs ze`nK&2lG%DV2mZQ-o-9waC)Z{;BN%ZWfwpjcP^;vO2cDALMit?Nm(2@a89l2b&vLb z&&Zn?QbUl+gf_Q9;*tZdO%00_;_bqO%7lRE@b>k8!c{w5p8MBc3CQY5r=S?SNgnf| z+J4KO#n-DwksGuKslgBTLEe6TPm4d2ay~p9f3ZOM$pQh65yA-!K0 zkkGTcNVjoC#2Y+)7ToeZnz4(Ym&=n)d4worB49@ZIJN-hMr90U^WE#erL;gvN(1qG zZtS|}k%~X>YmEB(_2YEpuH&~R%zv)tXCiI@mlndh)RbHaiGlnF3TuWwq)4EhgOH3U zrJa1Y#rk-G}7Bj{}KKQz>cKUX_d=7@&kZ~{i{B6Q@(kxH!?;V8lPn@RF$Jjz8O z=09MQD}LCDewS!KnmF7~xpx|^qxDOkonbi1VOy-Cfn}3FLo+Bao#tLHv;&V-H zP08Ix+#kp_9gQDpm%Huw#p5?z87=Q-ZJel#E+G&8Sk@$rhF8o-z8q z8~G^moYWkDp(U~o?70SZyTdo)V97HdpAt9)3P zq9IJt`oMcmV#~^rXXz)r-w=mz&g2@7EP*lK_KIEwV8oPb4%W|p(QTp`)v4FTL?M~t zZ?WnPVD|-sRfd5NLYZz)Qir8#+tc!O!Q?y+2fo__{xgkJ(##x6!Eyb=qs_xW*%0gH zdpv4Tg@~1$gl}4=>l}~wDV|=Nm0~2y5Y<2~;eTPRjY%OuLLfv))vm=y ze9+Ir?oR=NPZ!6JhfkiX@$pB!Ja}~@N)F5?`Deg<4ez;wei<`Obg9wJjWgplHzZK% zI#6b>v{!B`Z#d^aC75VYqV@yihnb?Bx+Lq zZL)+Or#v0}B4iv8c`EMBcFC|h2*??ks$0UWn?nHe1!Ji&F2o+b%*)}Hz=_ZN_e$cK z(n(@72@^qsH0ic(#j%F=Ah{jo zBjRYLKNu+>W9i&1$sFngB2$Tz3hztR?rR|eC8AQtJeVff{pQ5{(g<+DwND;OFH__zy$5;d2Ko6=?SnD~qzAQYKo z$+o(A^IeXVfd!F-vXJ5n6L)|uMlmU6UNn@wF`#Ufj*X2HQRAaXv#hqEIsNk68<$O@Q zu2+KMlU)g8=~GBYg~jP~PE&oKof??goY|SW!cNI!O_SoT#pJE#QsXDpZ)m`hBlYx! zara9r^iM#Fw6@mEmsK+B;H=AHl$OW70_RHz3c`3z*u8#)cUtJ9F@GCRt{QgLSYuGQ zU~)|R@=dGHH6x!ytGUarVE|7es9^?dO>JmE)4d^s{jA_%2s}%T-|~pFm{UQuaHv9& z31c>VVI^>meULdlB956MiHqNsV;JakVDnGS2M~6zMBhJciwZv=Wq8H;J(|6u9j3Hw zmXeM*yi)ck;8hyRO^yK}So+M`c829m8`uDndz3{;t_A!hg2XG}lZc zcL`=FK1f<8+}ehGTB%442PsiHyXTFRMIi(abe-srF7FY)Xo&Zh9*bpOm!^M9(EiiTaRp zsOBLaJ0vh{DGF_DR3{Bal%#f9-v$P0C?)|QY$EmrPBN3qORmq+cM)x=*s%?T%J|A1 zgFN+5l~2d4KI>5mqKDo@9qe-&EwHK_bfjxb&qgZQLia5!ocn&DY=NNYNOKa{+7c&b zoo=>Iun-2V(g!RT$x7?8VZthw%&zktIi3M0s{Agt*~srce4|2kBCtiE)KpD$YyOS2 z3GEW|12+bK&b`$O6s9D9`?w8q8$q@VsnPUXC*|+VZ@)f2KFnAHD4?{Z;I-x zV=sl6VkCh2RFG6H>M%rYOSon~1RGhB=mm}$W(y)O7OPm`=|I*ELuDq1uv@h_cGw#w zz>yKB7Jk6rRh~hN{VI@>z%Mrn^1QL@Sg}jXs~kL9e>&UKz=*CAL_D;fW{^>3OmPaq zW%va1%tPv{-Jg zXiUqr(2N;n$&yMTE;p{5EGZckQVj~1rYZHclPx=08q1}{l53ZnaM6_;qW}3czyISg z==+^&>bmdG`?Z|&JldESH?BggE@X7jsQ6|Nw;*t_(*$4Ek04CxO=qQKB?)NocQ`21 zK`R=`-M9`4hnZ`q&%EFpPEYz=Y&iwGY0Z|@!s63usR=O3mLJq2SV6p%Xe1zm7^w?& zFM!Ceu;K*57ET8URR%5`v^F2O^wtRUP^ekb^$hUnN7SzZG}*_5^s=htfgV_HwGGeW zeGYjqo*;1$=$m}|979ZD0^&VdLL$dF;m zXtAu`<%T1KgN%m}pVgDeem_*=KLRrMM435(uyvlWIO) zq8(UM7a9^r4B^PeCK|d^B&4BnLB^Xa_F>OJIY9yRDbZNbKSkNnBezTi<8Wxm!JB`I zn!KP6JZ`;hx-jWTMln?H)Rjs@>DZcI4b3*p3o?k12JaAI23w)C9l8dmLyhzB&6wu$ z2hqZ0sKegJVF;+YLG5mkZ*INS2#Du&;(UK@RqOS}Ybk%a!rrWr;$!oK8a|gk#Tm(4 z=Qc2h?|=X65g=5fkSEwvg0g!@Tu)&k;-y?=lcHbU?k6yw zZr+UI4-07IbQId=l*NO11-!w|uC7fOx1)@UNILvyREe%ChyW`9=BXT5_A6<+yWt70 z{XoMLWcS%&Mee4J2(qnX%%IumSYUCD^5g0CJPig@` zIw|;~+2gAg0ywEK)~}qhfQChfFC)Oy?f5OLYm`Fv%P5l{q*0^6vjmOqKOE5i;EIzK zpMP7_heU>y)<=6^JK0B43;%E@nhs|FD}EOP?p`shQfx_kFMG)-TV=1>77Q3W* zaaIo!1W%uA%@pr^FXaDPzg`I1osyxKQXvboN2y1oc-@X@*kib~!#-Wpc;}Q%KL_U3 zR)t%K$12BUII0H`%4AB3STSAjr^Ju>*;~heP#~`PUjm{=ccI_CC;*(_xWFlWQbDO& zf(x7MnUFs8kR(k$CSk~p&-wXE5^DqN|I4}ulEn{fWRq{(_jZ(>HucgkmF`qazriQ| zAEYdZY}W7HzYEbrm3&vq2DWp&(#dTy>jlcdKJj3%Mr&~76W$YKV*P1vE0RF zIqMzjnYFCjAq2$BA%KOAFggCv^y{j8{F3NH6V9zZW>k8{7>-x*Ip^y(BBNh2LH8AlT?I25b0Qq-Hkxbtw zsNa%IRW_+Y>j+^|aF5fV4I01M?~TgedYZ~#$E zKF$wOKRlD8etd=z_{X~cKBZf05o$pbGUNf`Yq8!rcc{8OugktVAhs-TGuqM=1Id?aPN$k?Gc!sK$ zH6k5X$T=YZ`Oqc+QpB#M+|_EzJ3nZ1!MjTe#z{=stEBal<=5s_UtCM(e-U`W>fRuk z6H4IMBRCR>jHGelH)M=&v6-^}k=>CLXHB5EL#U30M-v6LSsiN6_mA+mI)CxDGDDX6 zrK|)KLO6g4Gja%Ed<ibuP!0p;;e;%)>{>y#)VDgdF0~xbe8;yQ@6aUTfAD#|V02RbGe$P7!-uHB9 z{~(8Wdxtn_@T^=UWz2Y1#(KPo3*Kl_RE;k%MGcFwWUR?>?)xHMC+t0w1r=P{dMhV-DegFN^FH3vW-s8!Fjj6)7^a-8q z>}@w95#rjM2ieYg(X%=w?}j%Lg+SZx)-<%SsI2LSHio#PNI~9vg*TpB%4F!w0m)c% z;cS&#-1bkZ0%MLTBEIl8^to`GY;g(zi)WmDA<|P=F$iCnpac^n3<54JEwvnH`FGrs zGd6+sw%BtfhT7V@t++2zbEoye&T(PFU?*=ENte|Z!z~5y6s>|EPV$22T`i?Ub#e)$ z`n1e9w}QNGpXC4`gOZMt(?bVgBR>@4fWQC<7VktUX8|;@bq6_!(SeYDanK0I?P6P- ztq*((#B7v!EM~+WI!5Ir;${5N?F5p}&Tu&9Q(r3&W>7u`V(pZh> z=lo^TzW6((8TydB*nM?4|vE0&<#OUn-7K6Krl49=b9#Zf2Wh8?M|%9;fq{;sLGUV3J|~Qs*X8^wT7(3vU!C=K z)coz!^>1Y3BNzo_*(uHq!E!(+MI3!d2#eN_n#dWm6 zwaaOHeriLA$_vH2c$NEdl=dPi+S#@Zo#qdE88A~|>Z))20<<=L-;Nvw;OsbC0gjFn-m=4ds>JT|nfN)Ls{yMi0XLLYh7~9nL>h~fq%FPV#i|(M$TX@JH z%OrjI1P1=<;>7I6O+O-~lj38v9NV3Z_r*hV^xvmMLMfvK7br0I5!^qxgy>YZRYK|L z!Cs_Rsf?CX*LZQ96_q#aY?)LSp8Cg_?ZaE?NzLyk-Ifb!@@%6D(f-}3YfHausqf-+ z{WE4vjG!*ISs~)0+?5E*dtdK0actq8TwPiqh{e&&#SD#P2watqJI;YK>}Hj;kGEup zm+pJ5^YREeh^z)Ranx0JTk4Tp-iX8#XLbO{t5|ckbNvl%NeA^ z%8xwEQG!eLz7XBdAT;SxqlL#7yjtYG<9ne_jy84p?K!m9$Ymremz0m%L!BuJmy7?d z_Ei=OY5S!^>~|w7vXPv@w03py4}wt!XRDu-=Pu0d{m_f0t7_HAa=@|tpgKVtOS%!3 zW1|ho-WDkgxB5}0cBdcJW$cUc5;VDny}^i0i77+IFg8M;AWRN%Q8qcc2k)N^Kk3!ec~`zgJu=Z$iIU&u zeWC5L6dzGxO3EFR=Q(+%J{3v3I+brF?IPljvQ7czRc`EaahEX7TVFT~U5U?P@5YWv zG>qRR;>yF=aj`(b#4ste>_NkRK#3u0eo*awIYx!eIw>2VQ2rLd+sWx2rhyihaTs+5 zA?OK^z=tNIH$Z|YG+Fc}I3HI-yH>+zG4nyNU{iX08&ogGvK8G6qb_7=L1V|i7 z!fMQ+?=s14Xdw2OYUkaADz~JLsF(&OlF_+o&i%#caRJ_AcvPk!j zt;^%kox#z*kV-QmT93W; zrB%~#X~`w1o^%#C^^Y=Y%rpDQ^dLxmDTr&T9B3`-BQ+PP1#79JyzAe%D28gud3gv3 zPk^K2KRttuJGqMRIYdH30sQkMJ)h<-YWA}?-3yrw`Nn#?VZQWsb9#?FUjqa&G}{}< ztO#-TIQj8=JDBQ72ZoMXySL4FWfpCkbjMHaebefV}r zoSp`J7OWbOOklf^P{NUi{YR2@%9Sot`Rz6m0cvZpE~gEEWN&iwCWMOhp&t$inJjpk zb#yB6mewt98fof*W#SU99e8iW4ooF3M?<+iE~D;-!O^nVI5u;{{;cPil7>W1#-U*}1ilPgdz|`!tMM4=1HyE_{oHeE{AHGDInF zebxX@2=wOBSXGmQnU@T5gCX*N+1h;VRdiHu*Qu?SEw&WBd!1-!(fnOFMEjG9;W5wy zmW~H4|Lt3s^oRKrfjBP@YtG_7JWp^cF2VT5E`8B61^+uPq5*O5T}p@ql!Z)+|8ru>9) z)ky46PqWE6dQvB*kctF88tw~`+;{py__$hnr^zwg#I+FVtA7C{Kk z>K6WXQX4eQnZ<+HP_^%*m%dMtC*+n=;pRi50^amZcLpL(p(?4l)9R$SI;30{54+*q z9Q|kIL@Qn!RW-yN)ig-wDv9G!*+1CU02e4FOVM^3N=;0Kua(nAB+A(EmV#c5S(ITnj6A(57)2dc%OZ7Emw(RGc_WEXmlH$f|1=ci6>jejwR_m)N4lo>;PIbmPegW9m67tn?4 zwnarsKo>e8e5FJQ8)N^JiqgehnWo<&QLXIgEvnkTDDVmyJK*Rl0@ZT z5kO9Zw8Ox4w>JW!KH2Bs396b|)K@#4y9ZAwHGP=K@nT5fR{EBhv4!|~g8AzjZ=3Bm zfs}yD$bfExrq9*@U;sGKF*&!EBIREs*D!Al=w^yQNTX*_*+=Z$N%r-~f5vp9Lxc#I z2uHD(TUZ|Lo>>;Lz$?4GU^3KRFGB0ih~~z|`5z~E0WXtj{!11zx;;o`7V-1E@SQ

KRweKI|ca4nEBJb%^^6bjd6cm&vZb4Qox%S*fu@qD}Vg*5IZv`vJF&F-}zLDSIl<|_b)y?D14$3Ktz z5K4Ss&N3r&x%`g!Wh*A@2VCuJ@iA(3HjE%xB&637JMt=Kk}6CJ=B^u1W24naJ-MC> zg&K>M3)dVg?(U*q=?%r!H4-WN0~V@vIy;a0U4Ajtb9|JygyZdh&rH8xDlS4{({{G( zwc>0{C9vDt_G!#ckhi8h*O8Pe?v`L)5;0i) zTtL7bTlB)mu#axx>KSF+VE(WMUoE+Q%`5lqAGzJulY07Zpiz77FKtO-r-kSO$}&{;ZtRT5R#PR+tALYNgO)x74Y{e$ZmIaFTDcvte|5?KQPpSh zN(7qg#iZ5}zh;+ys}5q7F&7_HysN8307cR-f_<(wpHfB5d;5N*(Pw9maR+5aU&)|a zo`==%H%42D=O)+B8iZdD5~Q1r>Ny6(fecPuhClxsCmcU46TGXB5r@4HV3iR-KDxz> zTzj*-4%^>3=g6-%pwBzhPA((-T8{mYC-ys`+Z@)Gb*|TwYPy~Jc_Fmcu+n~?TMBY9 z_u>O&)@_V+)aE_EOEsJRsIHzK#-P>IshwB8ssMDBG@bIi^2>AfT`cb|kh=3yq~pSy z_`xyHceUzsh8}`ptU8IjSWX^1NS`?v+;mF4){QXi=1=A>B?k3Rbu)+aJSHmVc^OMK zQ`~Lz>1~NF^JN8#<^n%vQYo(F>ONSe6FxI3?6ob#Z?tXdY|{>|Meu?aP_XpAp!tpl z_q5gcCUjI#SX)p(0XMS`_trIiTES|16Z*DUc$?YqIx1cakO^tMiuVsi0RpAvsLQiiBZZiva z1y@ZFB}Jq8{VVN4kYiEd>kAeT2GlUC(fH;0_!Y`ipUt&p|Ej_JRXFU#Vzv7Q!ayZo zuwVxG4kZ6WQV&O5SgH(QUH?ve1KCcoj2qyEoxV}9@Tp>Gf7MQaIITmhu_X-ILRmS) zg`A4^{gnzJgTqnwYAiUZ&-%*@KJd=(C(t}Xx8df_;@-c#C@R#KJC66${ z1gf}cD8fk2mZa|{0>}_}DL~2O(;$f7g)5e3R%0Q)A*_P{f6idpw19iIpf1*5%#1UW zgG!4=@i+28kqpNzJi#?A`Idh(RiDWehp+-BHAZjxhPzu07FNY%gxAEw{Mem8gR&sF z!8N_cqO#3mg~9;75xFU4sWau$z==A%uoeTxEo_R+IbqhaumS@~3LUE$U-M#Lev5kn#>26dTsI`u=Q5K=)!wQ2<HtV*n&V*^yO44F_-F@O)v?HDNqz#gF{0|(Ib29Z{y~#;{e96 zS3$M+c8~bUiL0f-AzFxPreKN*_3JI9u?@PyzgPi|gY{;;F6tq)ZE?{Z=j#=m?ftB^ zbIxH7zUo*AO>R?N>xwNV9kD)sNZ$IeTuknP)vVR}$f_>ikM$q_q|ROJr7s=#m@M>& zQy#G;bKH0znfxPtqcHkiTKFT{&`Se>M1J{{`4o4f##}^LFO48i(?H!D^~y;fA_&zV z7N#yjNpJB==|1bh-Ns`C@XVXR5AU=m2(O7m~)*c4po7PU1ih=x!wwXyw$Nnkc1#%5UBWuizpL~ z`nCc4icen)OY^N%NGTrtod9~_5gLx6b2og|cv1PfnY>SEO-y471$|Z(8~??Sklnqa z7YVha3Pa)&jfhJhua+Sg8r%@#L)D}^F~JP~h&J+G6*n~N!JI8&_677XrRig{yFxGP zEN4l?kR)ONMt0xa$EMMMsnSvPsbYi$YUrU1lu_?UFapeGWloh_)E_kK6`>fXv!$+d z2j9Buy5V_FDKFa>VDyDDMHv_A^J-mIFW;p(mZ#9d2Hl3`t>)yxubdYXvgIftp@=ey zx_t-xWr#bup{=#J{@pUkbk{|*-{~S9YBbZ3SGlQ1>JQfSF zDQ;nAC-FWgEs;GTSvYKpfkDdR+8(6@++z&`eG&h6w@=_f>{b9 zxtgUi8mp!o@nd^68gjxqy+8$U+PZJ-W}gJfBIA-7?@fC2`%^+54y6RRMn8ux*ouE#~Z^m=Xh{k}CYY{I(V;(}7EGER&Ee{8K zEY4zYMx$nSqvjtLv()IE9Vn->({1RbHWXWrxP~IX{B_+>w+>Li4JoKo1-Tfg!LX$H ze2^g>egSu>);4r%xFJsWQv)2AhRb(0tT{HCQZjPH%SVkqP?XavCLX{b`Boi7onw?u z<_`*m7?EE`l%ia*d^i0*&L`vko#ZekmtX+I>GU+Y3iwyl1=D7nUo~cb4I8oz*P?#& zEUasrzEtt0BZcKnp7TcW`(;Lj$jamo;|2-OKi}YmwPc`&i+2$PsDc;lqx@;wl2yFm zo-IendRJvaGRP|%aIAVPN7Co>#fj}XeIxCQGQ~~Uxplz!d8lT+O&*!%A5wdN!Cd@$ zOj-Kom|QJc=j6?rS^J=fyXPZg9H0nA$DJ##2<)IOVI+P&Q)WR|z^5*!?oZkddErs8 zBFaYzQ=`+)8nezoYWZc=0>Lz{xtQ3<1+@dqtHb`16#vqp4tLz}bMnIT;PT>73t*&o zEt>xg-K@cXpTX{#I&PIVs-zDb<7Bo0{3RyHn|LSVXyI)%5k`?$&!P6A_q^J!r#ivO zwBW6UKdOHa%_olSIJTVNjbCWXIP`NfWap2LobZgfHK<`KZj?}7Ue14y^o;rief{>BClJkSkslD^!gh@6Tpqwi5_|?r^aMq{ieh+8nHGifQC&oCzNgDcm zi!2%6i9atGswrS`%IVG9IJPj>(K`C|q+a}ymYYGG?s9Z9^Y}t=dPWT6CddHrOXN^u zhnWYXr!9!ruxJG#xrKjr8Sz($HAiO!u36 zUFsbsM*X%FPn5%5;ish&o_P>Q$EV85A!WmFP72)H#}CQ?7yK2RX`rW#7I-oycfY5i zbJ9wIp_{dR^6d%hUf6bNj zZ|d9D_?EUWa8g^2W57t$x`~fhA@>7SXL`jf7HKcYWhsyPp|0*OS)*?U_8r>pI{;>; z6PEzrT~{`cbW)eqfP8n1yVukmIzYXl!C>ew~J%O5UnL#qi$jy zxM6!+SRG-8=ay<(k+GN^*D zR6N0hFt~#ksah46@nvbdfIk*wuVY|LRP^u_tgmR|AK7)JfP6>%!3xWS{VU5{bqA7M z64W^=Tj1JJSxzpxE7@j<>@nwYX9aWkibFNA9uR?GF73|#)CO~MfMl+X5`WeOX-!&7 z^02(IClJUy3*68LEY)r}*xIamY6o5&0GqPkP*0SlJKH{gi7O_Jr#pWB{3dZzOU zFmY5k5@K%N9DL8Gr{LM6v*Hvs_db5nk$5rP{VbIA1T-7?pK;5U#c!fnYiZ$^Lt_UG zim?q9P1koq_mMiTBUDH`Fj%GMgH~5!y&g<3)qD;Vl;6mOy||UT_bKTdN=Zz&;#2(3y6r41{%&tW-9=iaOV{tDFF_Y zjX@IN)<|W*TpzFzI#Wq2!xcnHx7MvRI5_D&0}`b`vOk{e>;fE~1r!2-nU_FjfM{ke zwDs;T;D{RFBJ13>D9}c?;5gGvfoFc@+)<@C(Z$8Zo^Wn2$mj`LAZsU!QB=QGyoNm1 zPk*{k#;{|o?v`(};`6Gl9a55%!$hWMi>ln;`Za!c?K;8l{_b-H9zzicnYj`Vbs3<2 zXasXc?sk3{;gD?ySSw5^gYR%T;ZQafd=GR%ZvalmI8}=zY3u6mEYU2{1U|?<$=dGxt>tc8wo`@NUJkQOetT((P7_;1yb0+MOzLA z0im2yGN_BgRXSLmoxHojdGE7l&ZSsAOA}aYk|@<^dD}=^ia%NCk&e3d_o-+c{5uCO z1Hd>#oD`;Vgl=61s1ZXmT}rXmyb#7F2R-ZOfb~-#@teyXF-+Qomwuxc>%fgYC4OY5 z-OeQ$S(r%SExWzP;IM?yksevIv?nSP?A@sQeUm8338`p$RtJBn60Q-zapRbY6Di@f zYCUGX?~_Ad21V=}74PR#IGKWX(#RuhAbSSYCiPPQnTK=EF|%ZRXQThs^E;vL2kI*r zy~8x9&|(6Wlxn@0NLO9>p@+IVqyDAd`l^-W0+%egDwMT%&wqMrd}PE43M55Bis2ZT z?(Xx7BuQQE+&oyOXrf%JJ|KBo^1>uwhm3F#$3P{U%C>P1h$SkKBKFC-YG>UBoSnU$ z%%x0jTZw1`cMkX@$yYQC91MOZj{`7Dm&o}|$+SUK>(M*=$0x3N#}Z!tTo!;)F*PCv zKgy?%Om*B1wmx(_C-ACEnR%ehv~fdLc0Q0s4U zrkeT(oD}~z>HTVl-` zMYUDm_?hg%pR>dxy<*kZThCa}0PRMDQF__1OlvCajKHXtwYlj&2a|mnRJwDVO0coF zY7`NoAOryfWHsD@(Gyv9(f-GDx1K1Yc2f-rV%uIU9+Qj1dI#oxe%;lS&NFt8m<68?$yyG{B7!fYq{uG0#;B8G(!Cbg zE@eT0Is^s9-^p(xgL*~VOg?2+dw~hHQp77V?idr3PvGTAbk7zyn`Rm0e8STX9IORu z4WgtYRKqBHR zGkXGI4Q5|vQec#ysk|#`- z)?X$neI$xu^wdtfWWnZ-Gmcq9G83UJcLe(x#{v-s?U@a1=T zljn|e1NZ9rhBG??HTueKy-dV@sEW>ycF9yA<+KLU59mEf%z?Uh*i+*14%6s4FC|bBa z<6(aBf_2=2T35=~rNHASzApGaej}4@GVwk(<8dOw^FedR-f%4)K=+$5L*hFyIe7zBN>)4G`rntPvN9#E=vxV+&>&oVE zKRiu1voEe>>`UF_>DH~URiD7SXui)jG*&@n|GU`ZYFtAYs;q(Cb?H;VpUTHOfs|GZ zf#Hrh@Xjzck+5RA*{lr?5iaU$!(@SMRHBQO1i)8F-#;=Ve?=fVhSz(o@vW>`>0`Ld zO7s%>uF>XlhKTw0)!cIw+sRXKkYVj7>Gi6*mSG`Q@OecCnOeLAMlVXv5~EjfRu3(B z@W}#|n>eM!Fl7|!T4rCyiS__Jve`s$Qqy=)wJnOIprcvlb}JW%kI9V(VsexI437Tk zT@`v*|Mhw$w&M8^hCKJ{W`l&`fVm1%i}S!b6RVQM=|&)1!~|@Y%?6^p^w{s6@b~0e zo0cBq@p{8++*Pf11T5TZ8h773KCD>=s;o>AbC52;@a%^QlnnCS)!?H2$Jh!ET#z^d z$e%b{wIlD<8{4A=o_KL}#+=a$ov_`O}!p+Fs zj0YpO{t4|rBhPeSR_0F2G zDoc&J^ItlLUMUifOusz~7z@5C-!1HplV{B*S$4sSM?`IsZyTpsC z_}5be|Ik4HF7^+``#(ZtovR0KFrtz#gtLu`Xi&nV#AyV@Hc__~+#^wj9s;6}t_@wk zf<|v*7wv~0{2U6>AV5q?T(hVUQ;2ygt_>f(DYRvYm6*l9n;q=Oz=L>A#F6mlZgzzT(-uph(K zSb?BiT!_AU3)D8YotfK<=+#+uy1P_(GUd~jLL-7PO9{~{O_8R!U+x`n-P91rfv&!Ag**A7veL!Q zA`}75gubDJzv(6_teSTJAF}hBS4&VffhT{--DJ40{pFzph(MqN5tu8#_a8m~u=&6(n>2rUD|ZX%CvXcq2|5cX z`rr8pDnD8OZ=RU>?5$V7ns0R)yksL;qxYD|q-%ybv@T zKx^#(%JtiB;rx5{2-C=Siq+r+A-N<@haPB~y!0Q9v43ZzMP2*bLrZ_ltp3dbr~i5E zKcI4VamA^<0^0AF{a1qvWO)DiuoFq*!f}Os!?QJm8xT98|IhCOklg_PC)op{kpNQS z01|48jC^*h5iYfGJd&pEAS<%F^}bpCX1V%b+rqAO$U$E{&$bY;lRNk9%$A3{>P0SW z<7mt3AH2Q)5C`nlANr|rPivydZr5$yw}08RZCAiilXJU|@2fu_*Fga*iVL#|YT%E$jartkp^yy0QAO@GXFr z;UycWv|au=@D=AM?hr{pEBg&JvFRx+=KifSx9W{;4#a zDL{nkHjQ=%>enP;27^Tnej2n;TORET*jURbq6LUMZAhe!4$cG~w7s00uyz zhDeVWjIQ-a42dMBA}fpWw*jA51~WgK=?W1EiA=W7K=3+QB$6a4kqH^$8H1DhKmoAl zXv*6&`U!8&W-6V-d|FR^3>6bmG0f8j5=d|p3@PGqp$H(A3-*v8igrg~x}tJ+fIgr^ zHGt-y>`jF|dPHbCN*t zdKr5P!fz`d2dZBuk0zoFU?Vo0FcqF+QZdRm@rOos#f~~2JCS~;vi&4}!3HOLk=lnF=_f57?s9RS;4QY!ZW z*lO+jm2ftMu5M7hrjM9NX?vJ+P1yV6y^3=wPF(GVA z_Z&Nc3^rx+MLj)qfymL5=?6(92ArKLa(_8QtSP`D-4)y$IYa6_68=!smbU?Nt$0&T z7J^!TY$Ny_qodC&csH^Gqx)rA)h2IT6;9&?E*cIy~ zj|BJL6jrSWl9dDoz-UK)7$W5D_;9TQDc|F?Id9#W$b)AGI-E9tJa9HrwMFZ}`7XcB z$&l-u#f zA8J&(d#Fmu`{asBGqijH(A}LQ?dT?ariFT0+(p1=lcc>}jVW~t3v6DR5#vAa8lWHWO!h)7UnrU{{xlg$XhSuI zk6;bv&7hfb)kl_b5b(&+v*lty;%*H&0|FD10*R7B`n@n;D>EALmzH!H$O@ieNB~%f z89npoSg^oB2~lvht32{}b-pK8&)^+^QpclM^DcgRB?`yj+eMQi_g7~#eyo$5Yea>W_PaS<;Ku$N~wV|VM3!6bFKpuTzEdYkwt6-!IK`rh&?b`1dZlN|l zf_Ck@jFC?ZgVSfCHL8yn@DvC`$^;ShwR~trTPz4!#^4K%?zU19cGJf;)!3}!=~yi zXSb1uQj}=KZ)V%_m%kJ+aSI&z~sxSjU${c0t!xN8rhLPwBzC{zVj%i@tNSoiFz~tn2FesyFO067ZxgC;n+-Xk)Eu z!LW=Y>OuM3^6lu09*y+hXj>iAvNovupQs#(jgC&N-Mjra8j8)5H8m?O*sVLJoNaKgz=*i>V@%N`{XY;?gKUus#alE_u0QZN_U1Gg#L8ELpj z=y6^u-rtG(?Rm%MTN(wc=^c@}cw_soH6s$KQC&AF;4xhGAc_*4e#d11@=G%eJQlx9 xfptAYkuGuo#7F#-M~@!Cv;03Vdy#mynu6!`rkKxC;NMsPdz(Yn`FlJg{}(rbsLlWY literal 0 HcmV?d00001 diff --git a/tests/reference/dds/images/DX10 R1_UNORM.dds.c72e7587.png b/tests/reference/dds/images/DX10 R1_UNORM.dds.c72e7587.png new file mode 100644 index 0000000000000000000000000000000000000000..5ae7bada0b4ddf11ebd001875701a921bbf045c5 GIT binary patch literal 2493 zcmZ`*O>Em#9DjBa<0Y=w(PttRN_i3866(GzN2cus@z^88}^ z{oeog`+wz=*Ur5-6n`>~5E`0#DgQcLEATZ$n9v*dezy@iwltN`ouB9aa3Wug7VUQL z@cq3{JKNu0d!=;e%7YDeyi=>&FMn6hoI1Jp&-Hune(=r5r{DW&TvF4fQ|2NZXqcnO1$N0^_D1gGU7;Dlr}|4ggc&UYbYWh$uK2#w30(+ZDDNKLbYWi3t1#^ z{EVxc!tqN;YChXQKMS&omSjG`X<2c&G-4sy=u8SXLE&X!d{(9M4X4egEC-yJ10_q& zqyXMhOOlH4!39uIc~gxFJ>BM_!qqd_Fy2Zx^^qFtZm!I&yCS9_8nWiz+%PK1u)CZy zWi?v9$)QpbMK(B(geYr2oXE6=l5B{QAttk;jEpjpzD8?! zQ6?>7Hx!Dr(ej&HC}SvUsNY8+m&1?V^CDqq|G)PPSE86mhiSSCzxJU=y5$C!3q8 zghDyy#=Dy?B-Y&kGmeL|!`T1V#kqPrhJoQ1!MZ#k(LA6UwF0LR;XHjlFh;>{>>C%@ z?8S-aM?2Z>OH3B>;q?HGwa7kkH2u9y#(=OJ=QTZB8IO}v;7;KqXdG=aa(m1eggy@Y z4}84|MXb9^booeK3Ns|XTuqem73wsPW4~4u)KfoDib4+J0ZD!7M_Ty2>gQd_>nu+w zTp>tMf|f7ph=TIyZcwx6YJiJ;{aE=2)>Ka-VA=b6orMO|LRRW2HsC@=l8|RS0|B&* zMeJRYHi<0mPEwsor@&=;ID!T3vij^sR970Q;Y2M8KbLkbUjEP=RzmHJkNc)#$528i5tn)0Fxc+{^)KL@oWR+!(5L?; z#t^8-9q9LE2v4m`Kl>?`Y*lVzT41dnRSbnsge}G$-y4a8$FF_%XKLt~k8a`rWm7Ml K%il4~8~*_y(%VG< literal 0 HcmV?d00001 diff --git a/tests/reference/dds/images/DX10 R8_SNORM.dds.f600b35b.png b/tests/reference/dds/images/DX10 R8_SNORM.dds.f600b35b.png new file mode 100644 index 0000000000000000000000000000000000000000..1086cd591bdc8184ccb8a98291b30b838f21f863 GIT binary patch literal 3666 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 U%)^|ZZ$)6|HlMA}K;n=80vE;+2><{9 literal 0 HcmV?d00001 diff --git a/tests/reference/dds/images/DX9 B4G4R4A4_UNORM.dds.1416aa1f.png b/tests/reference/dds/images/DX9 B4G4R4A4_UNORM.dds.1416aa1f.png new file mode 100644 index 0000000000000000000000000000000000000000..3ef1d9335aa21e782144e725bd78d7cec2b3898a GIT binary patch literal 8422 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 F{4ZlN)MNkv literal 0 HcmV?d00001 diff --git a/tests/reference/dds/images/DX9 BC1_UNORM.dds.824ac5cc.png b/tests/reference/dds/images/DX9 BC1_UNORM.dds.824ac5cc.png new file mode 100644 index 0000000000000000000000000000000000000000..2ad71889fd5500ec99d44980b7eea3c9d2100ff7 GIT binary patch literal 7804 zcmZu$30zZG)_)<;D7M7bg;pgQ$5s^7xQvaF2VshiQ>=iBFrX&3)>5?+F(L_s1hkYY z#k6%n1QWEQs0gVG1|{UNh*4RdEn-~A0s$V2kQI`Um*jf^+i7RM-!FOZ-kW>RcF#Tc zoPUnSM6G+vca|>z0B?Q#&o!H{cQ*F@XwnvvY{dwKiyXZLra(~%O<@)ds_wjYx2NxzgEvbSBb3F*ZhUx8%LT*N7% zu|*B{*k`a_Z!@>VXA0@d)?&h0r4D?|>!LLmn#1$b4-?Lsi+kI!;osLx%=+K%A8Cw} z#8qX_z6X(jQv%5*PE-yO%ZaLE2gzbC8j5}0L7peP@b!2OG94_{(q@P@cX}S4pRO3@ z#NPR;OXHRG2#WW{y5nQThmjqk&C@;e&iF6!%=#0R2^L^!Jv(TE-VwVMC^3CPAB&*Z zhRB>RO_YT4H~>84xV|m!kL;JGJXbhhc2(&O(u-*YyAeQCS>Nd?)rf9%Qb*Ac904X3+Z1Yx3shtyRyo)ILc5*HrL6} zG8q`1UVq}*;tcR{>LQLGThudGGWO3MKDE)NJV3TDb1P=*!|teHQCqQ~?w(*i5ae#) z85F#w6n78>o)UZ5zk39SL�p76XxZWQ2rNjHj@9znn&x9!u z*;+SOE`(1Ex}$(tSAcqSpXRVN zqrj@$pc%`r(lDJWrm<2y5`aErIcE?pg&ND-ve6>wohLp-%UZp;2enh&GXRatCPC&> zL%()pdPF6o%gD`${H4D!gl>0ujQ(jC7ww8heXSXYK79%UEhj(JxGg7a4l(x~*2orC zt5Y5g<=R*AX=SyS_9)qOFskNxN)+UnEV7Bx_Pa_)fmOz*FXsr#0-|Ii zen46J4-Mj3H1tX~_BucAW*!5^2Em&m&zC9jj~85v3+^@3a_Wm|fVq4S$H|lO=E+Aw zqTszS0}c^zY&bS?NiPffim^-+9iLsIAPkyv8$5GR~RW==lLu5lCfWeRD@I#+PyWSJO}c_0*APq}>qq<17tyZy0LyS&(uB`!Ps^MP(Cs_v536f*)y8DKEtxk=;J!M-KEcXQ|r-|CdA2&pZTo>YH@E8ZJhtcJ% zvD2)3Me?56#!D>wKfVW>JYMm0#=+BK+flJrg&7E_;=880R${h&2b30Y^9sDR1%d%3 zhtGc%DEKaoCr#^4C)MMf-9qR4`qATh%+%&{niIKMIII5HaS0;R5FR>GOuIetLu7vtA#&XNPSS zluka&ahuijQa<$3%W#5jKY{kbZW3hM4AtjdJ*izg@(-4ItV6HhcPTKXx)l7wg!FPL zZ!y3}k_5Sqn(iWK6=mcLO6&R>d!Bj3OhK~au2pH)*EH_L*=ntha7HZV1FWWB*AGk2 z#(|F|*96C@!}E1bz(N4PL;Iug z+PPpcCN|OCEljZ8s- z`(w3nyE;Fq5Hrq*f?N-~EtCTd(e#s4!63CKRimxs3`#Snkow+IcU9WnXRNtss7D`B zT&vwb#;4~M;Iz^FVG6fInO>vx(v}L)(mR@$@|N+<9614?FC@-c0NuHn-qPsI1JI6W z_Z;_+MQY0|fIn8s7ZDN{%>;8-BRN4i$YYxo_{+p4!ubL1prEU*8M#uyRz@t{-3C2y z$X*f-e3lZbHz$)H;A`r(%4Sl2+*C4sflnk(yGw1m4$@iZB^FQ%qxWDV%lMS#e%hf| zsm&^m)XJlJ*qs%-u84c9<<@G>-x-688RrP;jVw+I<9li5OKDHGdJMa=@|vpeRLP2v zGVhaF*l7g@3Jfgo@E(m8;k%UDBKg-2XCKiC&_}1yakW;yGHpLJ9;0eBIw$7h{LKJ= zxK!{18I_ZJ?ei2{ zy=#Nzjy!f-5d&Wv0CC7x?B_9>XX;_HEt@WaG^f)z4yliJIAiz? zEh2FF+aHRZYh43G{rQa?9aXSct!-fzP&qnfPj+0{49Ip9YE}`V30kUPfWrNW%AE(O z`!=Y*E#T!8bW8b0tG$KjSPLZ6oS%V@Rc)cyJ|hks+wv-9d*Ⓢ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 jm983J_ZI*M47

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 UbzRS-@LwN0Ie%F4fzRdt4<=;*XaE2J literal 0 HcmV?d00001 diff --git a/tests/reference/dds/images/ASTC 6x6.dds.12559dbc.png b/tests/reference/dds/images/ASTC 6x6.dds.12559dbc.png new file mode 100644 index 0000000000000000000000000000000000000000..db3bbe64268aae5d23e762b2c119b021b4e47213 GIT binary patch literal 10972 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 literal 0 HcmV?d00001 diff --git a/tests/reference/dds/images/DX10 BC7_UNORM.dds.c9f03970.png b/tests/reference/dds/images/DX10 BC7_UNORM.dds.c9f03970.png new file mode 100644 index 0000000000000000000000000000000000000000..215346532492c34d5c10c8aafa78118e2f3e4122 GIT binary patch literal 13037 zcmc(G2Ut_t*62w>jUa@s2t))a78pQK2qY>S`ttMWE4hGM5-u) zI)IH{5_I>gx-`S1PFl;-U-aib?%*e|NGwe-uJ$9vimuEpS4$CJF!lOY^CAr z;Q#YfO!P?+an4OVLap;1(vDx^S$@%<)EpXADVLf_n*qY z*j@Ddeg2p9dkzKZM#h>`yeq{QLY_ohcz-VFINA)moVV#PkN`g}_7F-sJa!x`y0jKz zoOSgSqHgc`_t^wS4*7TwEz)VD1n_LljXm}cbq|XJcj1`qX^b(|Nx=bb^YHQiVP>)` z>lQ`Uxz7BDeeDPp&556Mp2U~~lQHJ)v3gl+!JcSg&kjTD_Q15CY=19+bFu6Ys2hSfA^vVCSUp0Sec(-}RBRgE|if z`pyhmmfn&EH%0D$`;PMa??An>0}YB~sR~J|2;%TafMAEu;(Yz7R5fM?d$4X-QB}Ir z3Fw}vTW}22)8UFr=3yx(eLItD3W-~Vo2_i#^X0KadhyW$2mPP|!NjMNTuGBRwvfQ)^h2IK)+Q>MuQ z@8mjL){=hAl-mh?+6uSZ9Vm+Q22MWN#WiL;B}M)Szdg3YVgL@QY&@y<>prE{oU_qD zvSgkfR8wEl`tTFUzsa)Ze5G&39$g%ktFX6r({|EOd>|oEyAl-iv*Q+EPt@oRag26J zh8D(7R1fcqTdu~{Zqne{O$8Au;sf*7Rb<7lTS0TAq^wIn!eGe|P+y*}3!qpL+X>O- z*Sp8tIT#nDrwr``BlY!5yp1o{dA00