diff --git a/libretrogd/src/graphics/bitmap/gif.rs b/libretrogd/src/graphics/bitmap/gif.rs new file mode 100644 index 0000000..ce440d1 --- /dev/null +++ b/libretrogd/src/graphics/bitmap/gif.rs @@ -0,0 +1,608 @@ +use std::fs::File; +use std::io::{BufReader, BufWriter, Read, Write}; +use std::path::Path; + +use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; +use thiserror::Error; + +use crate::graphics::*; +use crate::utils::lzw::{lzw_decode, lzw_encode, LzwError}; + +const BITS_FOR_256_COLORS: u32 = 7; // formula is `2 ^ (bits + 1) = num_colors` + +fn bits_to_num_colors(bits: u32) -> u32 { + 1_u32.wrapping_shl(bits + 1) +} + +fn read_raw_sub_block_data(reader: &mut T) -> Result, GifError> { + let mut data = Vec::new(); + let mut count = reader.read_u8()?; + while count > 0 { + let mut sub_block = vec![0u8; count as usize]; + reader.read_exact(&mut sub_block)?; + data.append(&mut sub_block); + // read next sub block data size (or 0 if this is the end) + count = reader.read_u8()?; + } + Ok(data.into_boxed_slice()) +} + +fn write_raw_sub_block_data(data: &[u8], writer: &mut T) -> Result<(), GifError> { + let mut bytes_left = data.len(); + let mut pos = 0; + while bytes_left > 0 { + let sub_block_length = if bytes_left >= 255 { 255 } else { bytes_left }; + writer.write_u8(sub_block_length as u8)?; + let sub_block = &data[pos..sub_block_length]; + writer.write_all(sub_block)?; + pos += sub_block_length; + bytes_left -= sub_block_length; + } + // terminator (sub block of zero length) + writer.write_u8(0)?; + Ok(()) +} + +#[derive(Error, Debug)] +pub enum GifError { + #[error("Bad or unsupported GIF file: {0}")] + BadFile(String), + + #[error("GIF palette data error")] + BadPalette(#[from] PaletteError), + + #[error("Unknown extension block: {0}")] + UnknownExtension(u8), + + #[error("LZW encoding/decoding error")] + LzwError(#[from] LzwError), + + #[error("")] + IOError(#[from] std::io::Error), +} + +pub enum GifSettings { + Default, + TransparentColor(u8), +} + +#[derive(Debug, Copy, Clone)] +struct GifHeader { + signature: [u8; 3], + version: [u8; 3], + screen_width: u16, + screen_height: u16, + flags: u8, + background_color: u8, + aspect_ratio: u8, +} + +#[allow(dead_code)] +impl GifHeader { + pub fn has_global_color_table(&self) -> bool { + self.flags & 0b10000000 != 0 + } + + pub fn set_global_color_table(&mut self, value: bool) { + self.flags |= (value as u8).wrapping_shl(7); + } + + pub fn color_resolution_bits(&self) -> u8 { + (self.flags & 0b01110000).wrapping_shr(4) + } + + pub fn set_color_resolution_bits(&mut self, value: u8) { + self.flags |= (value & 0b111).wrapping_shl(4); + } + + pub fn is_color_table_entries_sorted(&self) -> bool { + self.flags & 0b00001000 != 0 + } + + pub fn set_color_table_entries_sorted(&mut self, value: bool) { + self.flags |= (value as u8).wrapping_shl(3); + } + + pub fn global_color_table_bits(&self) -> u8 { + self.flags & 0b00000111 + } + + pub fn set_global_color_table_bits(&mut self, value: u8) { + self.flags |= value & 0b111; + } + + pub fn read(reader: &mut T) -> Result { + let mut signature = [0u8; 3]; + reader.read_exact(&mut signature)?; + let mut version = [0u8; 3]; + reader.read_exact(&mut version)?; + Ok(GifHeader { + signature, + version, + screen_width: reader.read_u16::()?, + screen_height: reader.read_u16::()?, + flags: reader.read_u8()?, + background_color: reader.read_u8()?, + aspect_ratio: reader.read_u8()?, + }) + } + + pub fn write(&self, writer: &mut T) -> Result<(), GifError> { + writer.write_all(&self.signature)?; + writer.write_all(&self.version)?; + writer.write_u16::(self.screen_width)?; + writer.write_u16::(self.screen_height)?; + writer.write_u8(self.flags)?; + writer.write_u8(self.background_color)?; + writer.write_u8(self.aspect_ratio)?; + Ok(()) + } +} + +const GIF_TRAILER: u8 = 0x3b; +const EXTENSION_INTRODUCER: u8 = 0x21; +const IMAGE_DESCRIPTOR_SEPARATOR: u8 = 0x2c; + +#[derive(Debug, Copy, Clone, Eq, PartialEq)] +enum GifExtensionLabel { + GraphicControl = 0xf9, + PlainText = 0x01, + Application = 0xff, + Comment = 0xfe, +} + +impl GifExtensionLabel { + pub fn from(value: u8) -> Result { + use GifExtensionLabel::*; + match value { + 0xf9 => Ok(GraphicControl), + 0x01 => Ok(PlainText), + 0xff => Ok(Application), + 0xfe => Ok(Comment), + _ => Err(GifError::UnknownExtension(value)) + } + } +} + +#[derive(Debug, Copy, Clone)] +struct GraphicControlExtension { + block_size: u8, + flags: u8, + delay: u16, + transparent_color: u8, + terminator: u8, +} + +impl GraphicControlExtension { + pub fn read(reader: &mut T) -> Result { + Ok(GraphicControlExtension { + block_size: reader.read_u8()?, + flags: reader.read_u8()?, + delay: reader.read_u16::()?, + transparent_color: reader.read_u8()?, + terminator: reader.read_u8()?, + }) + } + + pub fn write(&self, writer: &mut T) -> Result<(), GifError> { + writer.write_u8(self.block_size)?; + writer.write_u8(self.flags)?; + writer.write_u16::(self.delay)?; + writer.write_u8(self.transparent_color)?; + writer.write_u8(self.terminator)?; + Ok(()) + } +} + +#[derive(Debug, Clone)] +struct PlainTextExtension { + block_size: u8, + text_x: u16, + text_y: u16, + text_width: u16, + text_height: u16, + cell_width: u8, + cell_height: u8, + foreground_color: u8, + background_color: u8, + data: Box<[u8]>, +} + +#[allow(dead_code)] +impl PlainTextExtension { + pub fn read(reader: &mut T) -> Result { + Ok(PlainTextExtension { + block_size: reader.read_u8()?, + text_x: reader.read_u16::()?, + text_y: reader.read_u16::()?, + text_width: reader.read_u16::()?, + text_height: reader.read_u16::()?, + cell_width: reader.read_u8()?, + cell_height: reader.read_u8()?, + foreground_color: reader.read_u8()?, + background_color: reader.read_u8()?, + data: read_raw_sub_block_data(reader)?, + }) + } + + pub fn write(&self, writer: &mut T) -> Result<(), GifError> { + writer.write_u8(self.block_size)?; + writer.write_u16::(self.text_x)?; + writer.write_u16::(self.text_y)?; + writer.write_u16::(self.text_width)?; + writer.write_u16::(self.text_height)?; + writer.write_u8(self.cell_width)?; + writer.write_u8(self.cell_height)?; + writer.write_u8(self.foreground_color)?; + writer.write_u8(self.background_color)?; + write_raw_sub_block_data(&self.data, writer)?; + Ok(()) + } +} + +#[derive(Debug, Clone)] +struct ApplicationExtension { + block_size: u8, + identifier: [u8; 8], + authentication_code: [u8; 3], + data: Box<[u8]>, +} + +#[allow(dead_code)] +impl ApplicationExtension { + pub fn read(reader: &mut T) -> Result { + let block_size = reader.read_u8()?; + let mut identifier = [0u8; 8]; + reader.read_exact(&mut identifier)?; + let mut authentication_code = [0u8; 3]; + reader.read_exact(&mut authentication_code)?; + Ok(ApplicationExtension { + block_size, + identifier, + authentication_code, + data: read_raw_sub_block_data(reader)?, + }) + } + + pub fn write(&self, writer: &mut T) -> Result<(), GifError> { + writer.write_u8(self.block_size)?; + writer.write_all(&self.identifier)?; + writer.write_all(&self.authentication_code)?; + write_raw_sub_block_data(&self.data, writer)?; + Ok(()) + } +} + +#[derive(Debug, Clone)] +struct CommentExtension { + data: Box<[u8]>, +} + +#[allow(dead_code)] +impl CommentExtension { + pub fn read(reader: &mut T) -> Result { + Ok(CommentExtension { + data: read_raw_sub_block_data(reader)?, + }) + } + + pub fn write(&self, writer: &mut T) -> Result<(), GifError> { + write_raw_sub_block_data(&self.data, writer)?; + Ok(()) + } +} + +#[derive(Debug, Clone)] +struct LocalImageDescriptor { + x: u16, + y: u16, + width: u16, + height: u16, + flags: u8, +} + +#[allow(dead_code)] +impl LocalImageDescriptor { + pub fn has_local_color_table(&self) -> bool { + self.flags & 0b10000000 != 0 + } + + pub fn set_local_color_table(&mut self, value: bool) { + self.flags |= (value as u8).wrapping_shl(7); + } + + pub fn is_color_table_entries_sorted(&self) -> bool { + self.flags & 0b00100000 != 0 + } + + pub fn set_color_table_entries_sorted(&mut self, value: bool) { + self.flags |= (value as u8).wrapping_shl(5); + } + + pub fn local_color_table_bits(&self) -> u8 { + self.flags & 0b00000111 + } + + pub fn set_local_color_table_bits(&mut self, value: u8) { + self.flags |= value & 0b111; + } + + pub fn read(reader: &mut T) -> Result { + Ok(LocalImageDescriptor { + x: reader.read_u16::()?, + y: reader.read_u16::()?, + width: reader.read_u16::()?, + height: reader.read_u16::()?, + flags: reader.read_u8()? + }) + } + + pub fn write(&self, writer: &mut T) -> Result<(), GifError> { + writer.write_u16::(self.x)?; + writer.write_u16::(self.y)?; + writer.write_u16::(self.width)?; + writer.write_u16::(self.height)?; + writer.write_u8(self.flags)?; + Ok(()) + } +} + +fn load_image_section( + reader: &mut T, + gif_header: &GifHeader, + _graphic_control: &Option, +) -> Result<(Bitmap, Option), GifError> { + let descriptor = LocalImageDescriptor::read(reader)?; + + let palette: Option; + if descriptor.has_local_color_table() { + let num_colors = bits_to_num_colors(descriptor.local_color_table_bits() as u32) as usize; + palette = Some(Palette::load_num_colors_from_bytes( + reader, + PaletteFormat::Normal, + num_colors, + )?); + } else { + palette = None; // we expect to find a local color table later + } + + let lzw_minimum_code_size = reader.read_u8()?; + let mut bitmap = Bitmap::new(gif_header.screen_width as u32, gif_header.screen_height as u32).unwrap(); + let mut writer = bitmap.pixels_mut(); + lzw_decode(reader, &mut writer, lzw_minimum_code_size as usize)?; + + Ok((bitmap, palette)) +} + +fn save_image_section( + writer: &mut T, + bitmap: &Bitmap, +) -> Result<(), GifError> { + writer.write_u8(IMAGE_DESCRIPTOR_SEPARATOR)?; + let image_descriptor = LocalImageDescriptor { + x: 0, + y: 0, + width: bitmap.width as u16, + height: bitmap.height as u16, + flags: 0, // again, we're not using local color tables, so no flags to set here + }; + image_descriptor.write(writer)?; + + let lzw_minimum_code_size = 8; + writer.write_u8(lzw_minimum_code_size)?; + + let mut reader = bitmap.pixels(); + lzw_encode(&mut reader, writer, lzw_minimum_code_size as usize)?; + + Ok(()) +} + +impl Bitmap { + pub fn load_gif_bytes( + reader: &mut T, + ) -> Result<(Bitmap, Palette), GifError> { + let header = GifHeader::read(reader)?; + if header.signature != *b"GIF" || header.version != *b"89a" { + return Err(GifError::BadFile(String::from("Expected GIF89a header signature"))); + } + + // note that we might later overwrite this with a local color table (if this gif has one) + let mut palette: Option; + if header.has_global_color_table() { + let num_colors = bits_to_num_colors(header.global_color_table_bits() as u32) as usize; + palette = Some(Palette::load_num_colors_from_bytes( + reader, + PaletteFormat::Normal, + num_colors, + )?); + } else { + palette = None; // we expect to find a local color table later + } + + let mut bitmap: Option = None; + let mut current_graphic_control: Option = None; + + loop { + let current_byte = reader.read_u8()?; + + // check for eof via the gif's "trailer" block ... + if current_byte == 0x3b { + break; + } + // if we have already successfully read a bitmap and palette from this file, we can + // stop reading the rest. we only care about the first frame (if there are multiple) + // and palette we find + if bitmap.is_some() && palette.is_some() { + break; + } + + match current_byte { + GIF_TRAILER => break, + IMAGE_DESCRIPTOR_SEPARATOR => { + let (frame_bitmap, frame_palette) = load_image_section(reader, &header, ¤t_graphic_control)?; + bitmap = Some(frame_bitmap); + if frame_palette.is_some() { + palette = frame_palette; + } + }, + EXTENSION_INTRODUCER => { + let label = GifExtensionLabel::from(reader.read_u8()?)?; + match label { + GifExtensionLabel::GraphicControl => { + current_graphic_control = Some(GraphicControlExtension::read(reader)?); + }, + GifExtensionLabel::PlainText => { + let _plain_text = PlainTextExtension::read(reader)?; + // todo: do something with this maybe + }, + GifExtensionLabel::Application => { + let _application = ApplicationExtension::read(reader)?; + // todo: do something with this maybe + }, + GifExtensionLabel::Comment => { + let _comment = CommentExtension::read(reader)?; + // todo: do something with this maybe + }, + } + }, + _ => { + return Err(GifError::BadFile(format!("Unexpected byte found {} not a file trailer, image separator or extension introducer", current_byte))) + } + } + } + + if bitmap.is_none() { + return Err(GifError::BadFile(String::from("No image data was found"))); + } + if palette.is_none() { + return Err(GifError::BadFile(String::from("No palette data was found"))); + } + + Ok((bitmap.unwrap(), palette.unwrap())) + } + + pub fn load_gif_file(path: &Path) -> Result<(Bitmap, Palette), GifError> { + let f = File::open(path)?; + let mut reader = BufReader::new(f); + Self::load_gif_bytes(&mut reader) + } + + pub fn to_gif_bytes( + &self, + writer: &mut T, + palette: &Palette, + settings: GifSettings, + ) -> Result<(), GifError> { + + let mut header = GifHeader { + signature: *b"GIF", + version: *b"89a", + screen_width: self.width as u16, + screen_height: self.height as u16, + flags: 0, + background_color: 0, + aspect_ratio: 0, + }; + header.set_global_color_table(true); + header.set_global_color_table_bits(BITS_FOR_256_COLORS as u8); + header.set_color_resolution_bits(BITS_FOR_256_COLORS as u8); + header.write(writer)?; + + // write the provided palette out as the global color table. we will not be providing any + // local color tables. + palette.to_bytes(writer, PaletteFormat::Normal)?; + + let transparent_color: u8; + match settings { + GifSettings::Default => { + transparent_color = 0; + }, + GifSettings::TransparentColor(color) => { + transparent_color = color; + } + } + + writer.write_u8(EXTENSION_INTRODUCER)?; + writer.write_u8(GifExtensionLabel::GraphicControl as u8)?; + let graphic_control = GraphicControlExtension { + block_size: 4, + flags: 0, + delay: 0, + transparent_color, + terminator: 0, + }; + graphic_control.write(writer)?; + + save_image_section(writer, &self)?; + + writer.write_u8(GIF_TRAILER)?; + Ok(()) + } + + pub fn to_gif_file( + &self, + path: &Path, + palette: &Palette, + settings: GifSettings + ) -> Result<(), GifError> { + let f = File::create(path)?; + let mut writer = BufWriter::new(f); + self.to_gif_bytes(&mut writer, palette, settings) + } +} + +#[cfg(test)] +pub mod tests { + use tempfile::TempDir; + + use super::*; + + pub static TEST_BMP_PIXELS_RAW: &[u8] = include_bytes!("../../../test-assets/test_bmp_pixels_raw.bin"); + pub static TEST_LARGE_BMP_PIXELS_RAW: &[u8] = include_bytes!("../../../test-assets/test_large_bmp_pixels_raw.bin"); + + #[test] + fn load_and_save() -> Result<(), GifError> { + let dp2_palette = + Palette::load_from_file(Path::new("./test-assets/dp2.pal"), PaletteFormat::Normal) + .unwrap(); + let tmp_dir = TempDir::new()?; + + let (bmp, palette) = Bitmap::load_gif_file(Path::new("./test-assets/test.gif"))?; + assert_eq!(16, bmp.width()); + assert_eq!(16, bmp.height()); + assert_eq!(bmp.pixels(), TEST_BMP_PIXELS_RAW); + assert_eq!(palette, dp2_palette); + + let save_path = tmp_dir.path().join("test_save.gif"); + bmp.to_gif_file(&save_path, &palette, GifSettings::Default)?; + let (reloaded_bmp, reloaded_palette) = Bitmap::load_gif_file(&save_path)?; + assert_eq!(16, reloaded_bmp.width()); + assert_eq!(16, reloaded_bmp.height()); + assert_eq!(reloaded_bmp.pixels(), TEST_BMP_PIXELS_RAW); + assert_eq!(reloaded_palette, dp2_palette); + + Ok(()) + } + + #[test] + fn load_and_save_larger_image() -> Result<(), GifError> { + // this test is mostly useful to get a LZW decode and encode that includes at least one + // "clear code" and accompanying table reset + + let tmp_dir = TempDir::new()?; + + let (bmp, palette) = Bitmap::load_gif_file(Path::new("./test-assets/test_image.gif"))?; + assert_eq!(320, bmp.width()); + assert_eq!(200, bmp.height()); + assert_eq!(bmp.pixels(), TEST_LARGE_BMP_PIXELS_RAW); + + let save_path = tmp_dir.path().join("test_save.gif"); + bmp.to_gif_file(&save_path, &palette, GifSettings::Default)?; + let (reloaded_bmp, _) = Bitmap::load_gif_file(&save_path)?; + assert_eq!(320, reloaded_bmp.width()); + assert_eq!(200, reloaded_bmp.height()); + assert_eq!(reloaded_bmp.pixels(), TEST_LARGE_BMP_PIXELS_RAW); + + Ok(()) + } +} diff --git a/libretrogd/src/graphics/bitmap/mod.rs b/libretrogd/src/graphics/bitmap/mod.rs index 26bae50..e16f511 100644 --- a/libretrogd/src/graphics/bitmap/mod.rs +++ b/libretrogd/src/graphics/bitmap/mod.rs @@ -8,11 +8,13 @@ use crate::graphics::*; use crate::math::*; pub use self::blit::*; +pub use self::gif::*; pub use self::iff::*; pub use self::pcx::*; pub use self::primitives::*; pub mod blit; +pub mod gif; pub mod iff; pub mod pcx; pub mod primitives; @@ -33,6 +35,9 @@ pub enum BitmapError { #[error("Bitmap PCX file error")] PcxError(#[from] pcx::PcxError), + + #[error("Bitmap GIF file error")] + GifError(#[from] gif::GifError), } /// Container for 256 color 2D pixel/image data that can be rendered to the screen. Pixel data @@ -110,6 +115,7 @@ impl Bitmap { let extension = extension.to_ascii_lowercase(); match extension.to_str() { Some("pcx") => Ok(Self::load_pcx_file(path)?), + Some("gif") => Ok(Self::load_gif_file(path)?), Some("iff") | Some("lbm") | Some("pbm") | Some("bbm") => { Ok(Self::load_iff_file(path)?) } diff --git a/libretrogd/src/utils/lzw.rs b/libretrogd/src/utils/lzw.rs new file mode 100644 index 0000000..d49aafc --- /dev/null +++ b/libretrogd/src/utils/lzw.rs @@ -0,0 +1,693 @@ +use std::collections::HashMap; + +use byteorder::{ReadBytesExt, WriteBytesExt}; +use thiserror::Error; + +#[derive(Error, Debug)] +pub enum LzwBytePackingError { + #[error("Code size bits {0} is unsupported")] + UnsupportedCodeSizeBits(usize), + + #[error("Not enough bits available in the buffer to push new value in")] + NotEnoughBits, +} + +#[derive(Error, Debug)] +pub enum LzwError { + #[error("Code size bits {0} is unsupported")] + UnsupportedCodeSizeBits(usize), + + #[error("LZW byte packing/unpacking error")] + BytePackingError(#[from] LzwBytePackingError), + + #[error("Encoding/decoding error: {0}")] + EncodingError(String), + + #[error("LZW I/O error")] + IOError(#[from] std::io::Error), +} + +type LzwCode = u16; + +const GIF_MAX_SUB_CHUNK_SIZE: usize = 255; +const GIF_MAX_CODE_SIZE_BITS: usize = 8; +const MIN_BITS: usize = 2; +const MAX_BITS: usize = 12; + +fn is_valid_min_code_size_bits(min_code_size_bits: usize) -> bool { + min_code_size_bits >= MIN_BITS && min_code_size_bits <= MAX_BITS +} + +fn is_valid_gif_min_code_size_bits(min_code_size_bits: usize) -> bool { + min_code_size_bits >= MIN_BITS && min_code_size_bits <= GIF_MAX_CODE_SIZE_BITS +} + +#[derive(Debug, Clone, Eq, PartialEq, Hash)] +struct LzwDataBuffer { + prefix: Vec, + value: u16, +} + +impl LzwDataBuffer { + pub fn new(value: u16) -> Self { + LzwDataBuffer { + prefix: Vec::new(), + value, + } + } + + pub fn push_value(&mut self, value: u16) { + self.prefix.push(self.value); + self.value = value; + } + + pub fn first(&self) -> u16 { + if let Some(value) = self.prefix.first() { + *value + } else { + self.value + } + } + + pub fn write_all(&self, writer: &mut T) -> Result<(), LzwError> { + // todo: this feels icky to me? + for value in self.prefix.iter() { + writer.write_u8(*value as u8)?; + } + writer.write_u8(self.value as u8)?; + Ok(()) + } +} + +fn get_bitmask_for_bits(bits: usize) -> u32 { + let mut bitmask = 0; + for i in 0..bits { + bitmask |= 1u32.wrapping_shl(i as u32); + } + bitmask +} + +fn get_table_size_for_bits(bits: usize) -> usize { + 1usize.wrapping_shl(bits as u32) +} + +fn get_max_code_value_for_bits(bits: usize) -> LzwCode { + (1 as LzwCode).wrapping_shl(bits as u32) - 1 +} + +#[derive(Debug)] +struct LzwBytePacker { + buffer: u32, + buffer_length: usize, + current_bit_size: usize, + bitmask: u32, + initial_bit_size: usize, +} + +impl LzwBytePacker { + pub fn new(initial_bit_size: usize) -> Result { + if !is_valid_min_code_size_bits(initial_bit_size) { + return Err(LzwBytePackingError::UnsupportedCodeSizeBits(initial_bit_size)); + } + + Ok(LzwBytePacker { + buffer: 0, + buffer_length: 0, + current_bit_size: initial_bit_size, + bitmask: get_bitmask_for_bits(initial_bit_size), + initial_bit_size, + }) + } + + #[inline] + fn remaining_space(&self) -> usize { + 32 - self.buffer_length + } + + pub fn increase_bit_size(&mut self) -> Result { + if self.current_bit_size >= MAX_BITS { + return Err(LzwBytePackingError::UnsupportedCodeSizeBits(self.current_bit_size + 1)); + } else { + self.current_bit_size += 1; + self.bitmask = get_bitmask_for_bits(self.current_bit_size); + Ok(self.current_bit_size) + } + } + + pub fn reset_bit_size(&mut self) { + self.current_bit_size = self.initial_bit_size; + self.bitmask = get_bitmask_for_bits(self.current_bit_size); + } + + pub fn push_code(&mut self, code: LzwCode) -> Result<(), LzwBytePackingError> { + if self.remaining_space() >= self.current_bit_size { + let value = (code as u32 & self.bitmask).wrapping_shl(self.buffer_length as u32); + self.buffer |= value; + self.buffer_length += self.current_bit_size; + Ok(()) + } else { + Err(LzwBytePackingError::NotEnoughBits) + } + } + + pub fn take_byte(&mut self) -> Option { + if self.buffer_length >= 8 { + let byte = (self.buffer & 0xff) as u8; + self.buffer = self.buffer.wrapping_shr(8); + self.buffer_length -= 8; + Some(byte) + } else { + None + } + } + + pub fn flush_byte(&mut self) -> Option { + if self.buffer_length > 0 { + let byte = (self.buffer & 0xff) as u8; + self.buffer = self.buffer.wrapping_shr(8); + if self.buffer_length >= 8 { + self.buffer_length -= 8; + } else { + self.buffer_length = 0; + } + Some(byte) + } else { + None + } + } +} + +#[derive(Debug)] +struct LzwBytesWriter { + packer: LzwBytePacker, + buffer: Vec, +} + +impl LzwBytesWriter { + pub fn new(min_code_size_bits: usize) -> Result { + if !is_valid_min_code_size_bits(min_code_size_bits) { + return Err(LzwError::UnsupportedCodeSizeBits(min_code_size_bits)); + } + + let packer = LzwBytePacker::new(min_code_size_bits)?; + + Ok(LzwBytesWriter { + packer, + buffer: Vec::with_capacity(GIF_MAX_SUB_CHUNK_SIZE), + }) + } + + #[inline] + pub fn increase_bit_size(&mut self) -> Result { + Ok(self.packer.increase_bit_size()?) + } + + #[inline] + pub fn reset_bit_size(&mut self) { + self.packer.reset_bit_size() + } + + fn write_buffer(&mut self, writer: &mut T) -> Result<(), LzwError> { + if !self.buffer.is_empty() { + writer.write_u8(self.buffer.len() as u8)?; + writer.write_all(&self.buffer)?; + self.buffer.clear(); + } + Ok(()) + } + + pub fn write_code( + &mut self, + writer: &mut T, + code: LzwCode + ) -> Result<(), LzwError> { + self.packer.push_code(code)?; + + while let Some(byte) = self.packer.take_byte() { + self.buffer.push(byte); + if self.buffer.len() == GIF_MAX_SUB_CHUNK_SIZE { + self.write_buffer(writer)?; + } + } + + Ok(()) + } + + pub fn flush(&mut self, writer: &mut T) -> Result<(), LzwError> { + while let Some(byte) = self.packer.flush_byte() { + self.buffer.push(byte); + if self.buffer.len() == GIF_MAX_SUB_CHUNK_SIZE { + self.write_buffer(writer)?; + } + } + self.write_buffer(writer)?; + // block terminator for data sub-block sequence + writer.write_u8(0)?; + Ok(()) + } +} + +#[derive(Debug)] +struct LzwByteUnpacker { + buffer: u32, + buffer_length: usize, + current_bit_size: usize, + bitmask: u32, + initial_bit_size: usize, +} + +impl LzwByteUnpacker { + pub fn new(initial_bit_size: usize) -> Result { + if !is_valid_min_code_size_bits(initial_bit_size) { + return Err(LzwBytePackingError::UnsupportedCodeSizeBits(initial_bit_size)); + } + + Ok(LzwByteUnpacker { + buffer: 0, + buffer_length: 0, + current_bit_size: initial_bit_size, + bitmask: get_bitmask_for_bits(initial_bit_size), + initial_bit_size, + }) + } + + #[inline] + fn remaining_space(&self) -> usize { + 32 - self.buffer_length + } + + pub fn increase_bit_size(&mut self) -> Result { + if self.current_bit_size >= MAX_BITS { + return Err(LzwBytePackingError::UnsupportedCodeSizeBits(self.current_bit_size + 1)); + } else { + self.current_bit_size += 1; + self.bitmask = get_bitmask_for_bits(self.current_bit_size); + Ok(self.current_bit_size) + } + } + + pub fn reset_bit_size(&mut self) { + self.current_bit_size = self.initial_bit_size; + self.bitmask = get_bitmask_for_bits(self.current_bit_size); + } + + pub fn push_byte(&mut self, byte: u8) -> Result<(), LzwBytePackingError> { + if self.remaining_space() >= 8 { + let value = (byte as u32).wrapping_shl(self.buffer_length as u32); + self.buffer |= value; + self.buffer_length += 8; + Ok(()) + } else { + Err(LzwBytePackingError::NotEnoughBits) + } + } + + pub fn take_code(&mut self) -> Option { + if self.buffer_length >= self.current_bit_size { + let code = (self.buffer & self.bitmask) as LzwCode; + self.buffer = self.buffer.wrapping_shr(self.current_bit_size as u32); + self.buffer_length -= self.current_bit_size; + Some(code) + } else { + None + } + } +} + +#[derive(Debug)] +struct LzwBytesReader { + unpacker: LzwByteUnpacker, + sub_chunk_remaining_bytes: u8, + reached_end: bool, +} + +impl LzwBytesReader { + pub fn new(min_code_size_bits: usize) -> Result { + if !is_valid_min_code_size_bits(min_code_size_bits) { + return Err(LzwError::UnsupportedCodeSizeBits(min_code_size_bits)); + } + + let unpacker = LzwByteUnpacker::new(min_code_size_bits)?; + + Ok(LzwBytesReader { + unpacker, + sub_chunk_remaining_bytes: 0, + reached_end: false, + }) + } + + #[inline] + pub fn increase_bit_size(&mut self) -> Result { + Ok(self.unpacker.increase_bit_size()?) + } + + pub fn reset_bit_size(&mut self) { + self.unpacker.reset_bit_size() + } + + fn read_byte(&mut self, reader: &mut T) -> Result, LzwError> { + if self.reached_end { + return Ok(None); + } + if self.sub_chunk_remaining_bytes == 0 { + self.sub_chunk_remaining_bytes = reader.read_u8()?; + if self.sub_chunk_remaining_bytes == 0 { + self.reached_end = true; + return Ok(None); + } + } + + self.sub_chunk_remaining_bytes -= 1; + Ok(Some(reader.read_u8()?)) + } + + pub fn read_code ( + &mut self, + reader: &mut T, + ) -> Result, LzwError> { + loop { + if let Some(code) = self.unpacker.take_code() { + return Ok(Some(code)) + } else { + match self.read_byte(reader) { + Ok(Some(byte)) => self.unpacker.push_byte(byte)?, + Ok(None) => return Ok(None), + Err(LzwError::IOError(error)) if error.kind() == std::io::ErrorKind::UnexpectedEof => { + return Ok(None) + }, + Err(error) => return Err(error), + }; + } + } + } +} + +pub fn lzw_encode( + src: &mut S, + dest: &mut D, + min_code_size: usize +) -> Result<(), LzwError> +where + S: ReadBytesExt, + D: WriteBytesExt +{ + if !is_valid_gif_min_code_size_bits(min_code_size) { + return Err(LzwError::UnsupportedCodeSizeBits(min_code_size)); + } + + // initialize the table, special codes, bit size info, etc + + let initial_table_size = get_table_size_for_bits(min_code_size); + let clear_code = initial_table_size as LzwCode; + let end_of_info_code = initial_table_size as LzwCode + 1; + let mut table = HashMap::::with_capacity(initial_table_size + 2); + for i in 0..initial_table_size { + table.insert(LzwDataBuffer::new(i as u16), i as LzwCode); + } + table.insert(LzwDataBuffer::new(clear_code), clear_code); + table.insert(LzwDataBuffer::new(end_of_info_code), end_of_info_code); + let mut current_bit_size = min_code_size + 1; + let mut max_code_value_for_bit_size = get_max_code_value_for_bits(current_bit_size); + let mut next_code = initial_table_size as LzwCode + 2; + + // begin the output code stream + let mut writer = LzwBytesWriter::new(current_bit_size)?; + writer.write_code(dest, clear_code)?; + + // read first byte to start things off before the main loop. + // if we eof here for some reason, just end the lzw stream like "normal" ... even though this + // isn't really a normal situation + let byte = match src.read_u8() { + Ok(byte) => byte, + Err(ref error) if error.kind() == std::io::ErrorKind::UnexpectedEof => { + writer.write_code(dest, end_of_info_code)?; + writer.flush(dest)?; + return Ok(()); + }, + Err(error) => return Err(LzwError::IOError(error)) + }; + + let mut buffer = LzwDataBuffer::new(byte as u16); + + loop { + // grab the next byte + let byte = match src.read_u8() { + Ok(byte) => byte, + Err(ref error) if error.kind() == std::io::ErrorKind::UnexpectedEof => break, + Err(error) => return Err(LzwError::IOError(error)) + }; + + // check if the table currently contains a string composed of the current buffer plus + // the byte we just read ( + let mut buffer_plus_byte = buffer.clone(); + buffer_plus_byte.push_value(byte as u16); + + if table.contains_key(&buffer_plus_byte) { + // we have a match, so lets just keep collecting bytes in our buffer ... + buffer.push_value(byte as u16); + } else { + let mut was_bit_size_increased = false; + let mut is_reset_needed = false; + + // no match in the table, so we need to create a new code in the table for this + // string of bytes (buffer + byte) and also emit the code for _just_ the buffer string + let new_code = next_code; + next_code += 1; + if new_code > max_code_value_for_bit_size { + current_bit_size += 1; + if current_bit_size >= MAX_BITS { + is_reset_needed = true; + } + max_code_value_for_bit_size = get_max_code_value_for_bits(current_bit_size); + was_bit_size_increased = true; + } + + table.insert(buffer_plus_byte, new_code); + + if let Some(code) = table.get(&buffer) { + writer.write_code(dest, *code)?; + } else { + return Err(LzwError::EncodingError(format!("Expected to find code in table for buffer {:?} but none was found", buffer))); + } + + if was_bit_size_increased { + writer.increase_bit_size()?; + } + + if is_reset_needed { + // we reached the maximum code bit size, time to re-initialize the code table + table = HashMap::with_capacity(initial_table_size + 2); + for i in 0..initial_table_size { + table.insert(LzwDataBuffer::new(i as u16), i as LzwCode); + } + table.insert(LzwDataBuffer::new(clear_code), clear_code); + table.insert(LzwDataBuffer::new(end_of_info_code), end_of_info_code); + current_bit_size = min_code_size + 1; + max_code_value_for_bit_size = get_max_code_value_for_bits(current_bit_size); + next_code = initial_table_size as LzwCode + 2; + + // reset the output code stream + writer.write_code(dest, clear_code)?; + writer.reset_bit_size(); + } + + buffer = LzwDataBuffer::new(byte as u16); + } + } + + // flush the remaining buffer and finish up the output code stream + + if let Some(code) = table.get(&buffer) { + writer.write_code(dest, *code)?; + } else { + return Err(LzwError::EncodingError(format!("No matching code for buffer {:?} at end of input stream", buffer))); + } + + writer.write_code(dest, end_of_info_code)?; + writer.flush(dest)?; + + Ok(()) +} + +pub fn lzw_decode( + src: &mut S, + dest: &mut D, + min_code_size: usize +) -> Result<(), LzwError> +where + S: ReadBytesExt, + D: WriteBytesExt +{ + if !is_valid_gif_min_code_size_bits(min_code_size) { + return Err(LzwError::UnsupportedCodeSizeBits(min_code_size)); + } + + // initialize some basic properties for decoding and the table here ... we initialize the + // actual table and the rest of the decoding properties we need a bit further on below + + let mut current_bit_size = min_code_size + 1; + let initial_table_size = get_table_size_for_bits(min_code_size); + let clear_code = initial_table_size as LzwCode; + let end_of_info_code = initial_table_size as LzwCode + 1; + + let mut reader = LzwBytesReader::new(current_bit_size)?; + + // read the first code from the input code stream. + // we also return immediately without writing anything to the destination byte stream if there + // are no codes to read (kind of a weird situation, but no real reason to error ...?) + let mut code = match reader.read_code(src)? { + Some(code) => code, + None => return Ok(()) + }; + + // the first code in the stream SHOULD be a clear code ... which we can just ignore because + // our table is freshly reset right now anyway. but we should flag this as an error if for some + // reason we didn't just read a clear code! + if code != clear_code { + return Err(LzwError::EncodingError(String::from("Unexpected first code value (not a clear code)"))); + } + + 'outer: loop { + // initialize the table and some extra bits of info here so that whenever we read in a + // clear code from the input stream, we can just loop back here to handle it + + let mut table = HashMap::::with_capacity(initial_table_size + 2); + for i in 0..initial_table_size { + table.insert(i as LzwCode, LzwDataBuffer::new(i as u16)); + } + table.insert(clear_code, LzwDataBuffer::new(clear_code)); + table.insert(end_of_info_code, LzwDataBuffer::new(end_of_info_code)); + let mut max_code_value_for_bit_size = get_max_code_value_for_bits(current_bit_size); + let mut next_code = initial_table_size as LzwCode + 2; + + // read the next code which should actually be the first "interesting" value of the code stream + code = match reader.read_code(src)? { + Some(code) if code == end_of_info_code => return Ok(()), + Some(code) => code, + None => return Err(LzwError::EncodingError(String::from("Unexpected end of code stream"))), + }; + + // ok, now we're able to get started! + + // simply write out the table string associated with the first code + if let Some(string) = table.get(&code) { + string.write_all(dest)?; + } else { + return Err(LzwError::EncodingError(format!("No table entry for code {}", code))); + } + + let mut prev_code = code; + + 'inner: loop { + // grab the next code + code = match reader.read_code(src)? { + Some(code) if code == end_of_info_code => break 'outer, + Some(code) if code == clear_code => { + // reset the bit size and reader and then loop back to the outer loop which + // will handle actually resetting the code table + current_bit_size = min_code_size + 1; + reader.reset_bit_size(); + break 'inner; + }, + Some(code) => code, + None => return Err(LzwError::EncodingError(String::from("Unexpected end of code stream"))), + }; + + // note: prev_code should always be present since we looked it up in the table during a + // previous loop iteration ... + let prev_code_string = match table.get(&prev_code) { + Some(prev_code_string) => prev_code_string, + None => { + return Err(LzwError::EncodingError(format!("Previous code {} not found in table", prev_code))); + } + }; + + let new_code = next_code; + next_code += 1; + + if let Some(string) = table.get(&code) { + // write out the matching table string for the code just read + string.write_all(dest)?; + + // update the table accordingly + let k = string.first(); + let mut new_string = prev_code_string.clone(); + new_string.push_value(k); + table.insert(new_code, new_string); + } else { + // code is not yet present in the table. + // add prev_code string + the code we just read to the table and also write it out + let k = prev_code_string.first(); + let mut new_string = prev_code_string.clone(); + new_string.push_value(k); + new_string.write_all(dest)?; + table.insert(new_code, new_string); + } + + if new_code == max_code_value_for_bit_size { + current_bit_size += 1; + max_code_value_for_bit_size = get_max_code_value_for_bits(current_bit_size); + reader.increase_bit_size()?; + } + + prev_code = code; + } + } + + Ok(()) +} + +#[cfg(test)] +mod tests { + use std::io::Cursor; + + use super::*; + + struct LzwTestData<'a> { + min_code_size: usize, + packed: &'a [u8], + unpacked: &'a [u8], + } + + static LZW_TEST_DATA: &[LzwTestData] = &[ + LzwTestData { + min_code_size: 2, + packed: &[0x16, 0x8c, 0x2d, 0x99, 0x87, 0x2a, 0x1c, 0xdc, 0x33, 0xa0, 0x02, 0x75, 0xec, 0x95, 0xfa, 0xa8, 0xde, 0x60, 0x8c, 0x04, 0x91, 0x4c, 0x01, 0x00], + unpacked: &[1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1], + }, + LzwTestData { + min_code_size: 4, + packed: &[0x21, 0x70, 0x49, 0x79, 0x6a, 0x9d, 0xcb, 0x39, 0x7b, 0xa6, 0xd6, 0x96, 0xa4, 0x3d, 0x0f, 0xd8, 0x8d, 0x64, 0xb9, 0x1d, 0x28, 0xa9, 0x2d, 0x15, 0xfa, 0xc2, 0xf1, 0x37, 0x71, 0x33, 0xc5, 0x61, 0x4b, 0x04, 0x00], + unpacked: &[11, 11, 11, 11, 11, 7, 7, 7, 7, 7, 11, 11, 11, 11, 14, 14, 7, 7, 7, 7, 11, 11, 11, 14, 14, 14, 14, 7, 7, 7, 11, 11, 14, 14, 15, 15, 14, 14, 7, 7, 11, 14, 14, 15, 15, 15, 15, 14, 14, 7, 7, 14, 14, 15, 15, 15, 15, 14, 14, 11, 7, 7, 14, 14, 15, 15, 14, 14, 11, 11, 7, 7, 7, 14, 14, 14, 14, 11, 11, 11, 7, 7, 7, 7, 14, 14, 11, 11, 11, 11, 7, 7, 7, 7, 7, 11, 11, 11, 11, 11], + }, + LzwTestData { + min_code_size: 8, + packed: &[0x0b, 0x00, 0x51, 0xfc, 0x1b, 0x28, 0x70, 0xa0, 0xc1, 0x83, 0x01, 0x01, 0x00], + unpacked: &[0x28, 0xff, 0xff, 0xff, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff], + } + ]; + + #[test] + fn lzw_compresses() -> Result<(), LzwError> { + for LzwTestData { packed, unpacked, min_code_size } in LZW_TEST_DATA { + let mut src = Cursor::new(*unpacked); + let mut dest = vec![0u8; 0]; + lzw_encode(&mut src, &mut dest, *min_code_size)?; + assert_eq!(dest, *packed); + } + + Ok(()) + } + + #[test] + fn lzw_decompresses() -> Result<(), LzwError> { + for LzwTestData { packed, unpacked, min_code_size } in LZW_TEST_DATA { + let mut src = Cursor::new(*packed); + let mut dest = vec![0u8; 0]; + lzw_decode(&mut src, &mut dest, *min_code_size)?; + assert_eq!(dest, *unpacked); + } + + Ok(()) + } +} diff --git a/libretrogd/src/utils/mod.rs b/libretrogd/src/utils/mod.rs index 4b7b301..5d004e5 100644 --- a/libretrogd/src/utils/mod.rs +++ b/libretrogd/src/utils/mod.rs @@ -6,6 +6,7 @@ use rand::Rng; pub mod bytes; pub mod io; +pub mod lzw; pub mod packbits; pub fn rnd_value(low: N, high: N) -> N { diff --git a/libretrogd/test-assets/test.gif b/libretrogd/test-assets/test.gif new file mode 100644 index 0000000..3439191 Binary files /dev/null and b/libretrogd/test-assets/test.gif differ diff --git a/libretrogd/test-assets/test_image.gif b/libretrogd/test-assets/test_image.gif new file mode 100644 index 0000000..b2dd27c Binary files /dev/null and b/libretrogd/test-assets/test_image.gif differ diff --git a/libretrogd/test-assets/test_large_bmp_pixels_raw.bin b/libretrogd/test-assets/test_large_bmp_pixels_raw.bin new file mode 100644 index 0000000..a13235a --- /dev/null +++ b/libretrogd/test-assets/test_large_bmp_pixels_raw.bin @@ -0,0 +1,12 @@ +  ! !! !$!#$#           #$#"                     #%%#                                                      %'%$                               "#&*%# ! !! !!! ! !! ! ! ! ! ! !!! !! ! ! ! ! ! ! !! ! ##$','$ !!! ! ! ! ! !! ! ! ! !! ! ! ! ! ! ! ! ! ! !! ! ! ! ! ! !!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!##$(.)$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !! ! ! !! !!! !!!! !! !!!!!!!!!!!! ! ! ! !!!! ! ! ! ! !!! !!!!!! !!!!!! ! !!! ! ! ! !!!!!!!!! ! ! ! !! !! ! ! !!!!! !!!! !! !! ! ! !!!!!!! !! ! !! ! ! ! !! !!!!!! !! !!!! ! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#%.ã(%$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"!!!"!!!"!"!!!!!!!!!!!!!!!"!!"!!!"!!!!!!!!!!!!!!!"!!""!!"!!!!!!!!!!!!!!!!#(à,%$!!!!!!!"!!!!!!!!!!!!"!!!!"!!"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"""!!"""""""!"""""""""""""""""!""""!!"!""""""""!!"""""""!""!"!"""""""!"!""!"$&$$""""""""!"!!"!""""""""""""!"""""!""!!!!"!"!!!!""!!!!!!!!!"""!""!!"""!!"!""!!!""!!!!!!!""!!!!""!!!!!!"!!!"!!"!!!!""!!!!!!!!"!!!""!!!!""!"""!!!"""!!!!""!!!!!""!!!!"!!!"!!!!!"!"!!!!!!!!!!!"!"!!!""!!""!!!"!"!"!"""!!!!!!!"!"""!"!!"!""!"""!!!"!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!"!!"""""!""!""""!"""!"!""""""!""!"""""""""!""""""""""""!!""""""""""!"""!"""!""""""""""!!""""""!!"""!""""!!""""""!""""!""""""""""""""""""""!"""""""!!""""""""""!""!"""""""""""!"!""""""""""!"""!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""##"###"###"####"#"#####""#""#"##"#""####"##"""###""##"""##""#"##"#"#"###""##"#"##"""##"#"##""##"#####"""###"""##"""""""""""""""""""#""""""""""""""#""#""#"""""""""##""""""#"""#"""""""""""""""""""""""""""""#""""""""##"""""""""""""#""""""""""""""""#""#""""""""#"""""""##""""""#""""""""""""#"""""""#""""""#"""""""""""""""""#####################################################################################################################"""####"###"###"##"#"###""##""#"""######"###"###"#"###""#"####"#""#""""""#""##"""##"###""#"#""#""""##"##########"#""#"""""""##"#"####"#"#"###"""###"##"""#"#"##"####"##"#"###""##""""""####""##""#"#""#############################################################################################################################################################################################################################################################################################################################################$$$#$$##$##$$##$##$$$#$$#$####$$#$#$$#$#$####$####$##$#$#$##$$$$######$$##$$$#$###$$##$######$#$##$#$#$##################################################################################################################################################################################################################$$$$$$$#$$#$$$$$$$$$$$$$$$$$$$##$$$##$$$$#$$#$#$#$$#$#$$$$$$$$$$#$$$$$$$$$$$$$$$$$$$$$$$##$##$$$$$$#$$$$$$$$$$$$#$##$$$##$$#$#$#$#####$#$$$$##$$$$$$###$$#$#$###$####$#$$$#$###$###$$##$$#$#$$##$#$#$$##$#$$$$$#$#######$#######$#$$#$$###$$$#######$$####$$########$$$#$$##$##$$###$$$#$###$####$$##$##$#####$#$$####$$##$###$#$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$#$$$$#$$#$$$$#$$#$$$$#$$#$$$$$$$$$$$#$$$$$$$$$$#$$##$#$$$$$$$$$$$$$$#$$$#$$$##$$#$$$$#$$$$$$$$$$$$$$$$$$$$$$$$$#$$$$$$$$$$$$$$#$$$$$$##$$$$$$$$#$#$$$$$$$$$$$$$$$$$$$#$$$$$$$$$$$$$#$$$$$$$$$$$$$$$$$ ¡¢£$$$%$$$$$$$$$%$$$$$$$$%$$$$$%$%$$$%$$$$$%$$$$$$$$$$%$%$$$$$$$$$$$$$$$%$$%$$$$$$$$$$$%$$$$$$$$$$$$$$$$$$%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ ¡¢£$$%%%%$%%$%$%%%%%%%$$%%$$%%%%%%$%$$%%%%%%%%%%$%$$%%%%%%%$%$$%$%%%$%$$%$$$%$$%%%%$%%$%%%%$%%$%%%%%$$$%%%%$%%%%$$$$$%$$$$$$$$$$%$%$$%$%$$$$$$$$$$$$$$%$$$$$$$$$$$%%$$$%$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%$$$$$$$$$$$$$$$$$$$$$$$$$%$$%$$$$$$$$$$$$$$$$$$$$$$$$%%$$$%$$$$$%$%$$$$$$$$$$$$$%$$$$$$%$$$$$$$$$%$$$$$%$$$%$%$$ ¡¢£%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$%$%%%$$$%%%%$$%%%%$%%%$%%$%%%$%$%$%$%%$%%%$%$%$$%%$$%%%%$%%%$%$$%%%$%%%$%%%%$%%$$$$$$$%%%$%%$%%%$$$%%%%%%$$%$$$$$%%$%%%$%$%$%%%$$$%$%%%%$%%$$%%$$%%%%%$%%%%%%%%$%%$%%%$%%%%%%$%%%$%%%$%%%$%%$%%%$$%$%%%%%%$%%%$ ¡¢£%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%AQ  ¡¢&&%&&%&%&%&%&%%&%&%%%&%%%%%&%&%%%%%&%&%%%%&&%&&&&&%%%&%%%%&%%&&%%&&%%%%&%&&%&&&&&%%%%%&&%&%%&&&%%&%%&&%%%%%&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%AQQ     ¡¢&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%&%%%%%&&%&&%%%%%%%&%&&%%%%%%%%&%%%%%%&&&%%%%&&%&%%&%&%%&&&%%%&%&%%&%%&%&%&%&%%%%&%%&%&&&%%%&%%%&%%%%%%&&%%%%%%%&&&%%%%%&%%%%%%%%%&%%%&%&&&&%%&&&%%%%%&&&%%&&%%&&%&%%&&&&&%%%%%%&%%&&%%%&&%&%%%%%&AQQQ    çê  ¡¢&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&%&&&&&%&%&&&&%&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&&&%&&&&&&&&&&&&&&&&&&&&&&&&&%&%&&&&&&&&&&&&&&&&&&&#AAQ     çê  êê  ¡¢&'&&&&&&&&&&''&&'&&' ¡¢£¤&&&''&&&&&&&&&&'&&''&'&&&&&'&&&&&&''&&&&'''&&&&&''&&&&&&'&&'&&'&&&&&&&''&'&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&¢     çê  êê   ê  ¡¢&&&''''&'&''&&&&'''' ¡¢£¤'''&'''''&''&&'''&'''''''&''''''''''&'''&'&''''''&'''''&'''''&'''&''''''&''&''&'''''&&&&''&&&'&&&&&&&&&&&&&&&&&&&&&&&&&&'&&'&&&&&&&&&&&&&&&'&&'&&&&&&'&&&&&&&&&&&&&''&&'&&&&&&&&'&&&&'&'&'&&&&'&&&&&&&&&&&&&&&&&&&&&'&&&'&&&&&&&&&'&&&&&&&&''&&&&&'&&&&&&&&&&&&&'&&&&&&&&&'&&&&&&&&¢ çê  êê       êê ¡¢'''''''''''''''''''' ¡¢£¤'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''&'&'''''''&''&'''&''&''&''&&'''''''''&&&&'''''''''&&''&'&''&&''&'&'&&''&''''''&&'''''''''&'''&'&'''''&&'''''''&''&&'&&'&&'''&''''''''&&&''''&'&'&''&&&'''&&&''&'''&'&''''&''&''''&&''&&''&&''&¢ êê           êê ¡¢'''''''''''''''''''' ¡¢£3'''''''''''''''''''''''''''''''''''''''''''''''''('''''''''''''''('''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''¢              êê ¡¢'''''(((((''('('(''' ¡¢£'((''((((((''''(('('('(''((((((''((('((((('((''('(''((''((((((('(('(''(((('(((('('('('''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''¢              êê ¡¢(((((((((((((((((((( ¡¢£(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((''''('((''('('''(((''''((('''('''''''(''('('('('(''''''('''('(''(''('((((''''(((((('(('('''((''((''((('''''(''''((''(('''(('((('('(('''((('((''('''''((''''(''(''''('('''(''(('(''''''(('('(('(¢              êê ¡¢(((((((((((((((((((( ¡¢£(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((('('((((((('((''((((((((((((((((((((((((('((('(((((((((((((((('(((((((((((((((('(((((((('(((((((((((((((((((((((((('(((((((((((('(((((((((((('(((((((('(((((((((('(((((((¢             êêêmmmmn(()(((())((()(((() ¡¢£)((()((((((()())(()))((()((((((()((()()())()())()(()(()((((((()()(()))(()((((((((()()(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((¢             êêêmmnnnnn;:/(((())))()))) ¡¢£())))))))))()))))))))))))))()))))))))))))())(()))))))))))))))))))()))))))))))))))))()(((((((((()((()((((((((((((((((()((()(()()(((((()((((())((((((((((((((((()(())((()(((()()(())((((((()(((()()(((()((((((((((())((((()(()()((()((()()((()(((()()(((())))((((())((((((((()((((((()¢            êêêênnnnnnnmmnnn/())))))) ¡¢£)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))())()()()))))())()))))()))))((((())()))()(()(((((())()())(())))(()))(())((()()))))())(()()(())())(())))))()(()())))))))((())))((()(((())))))()())(()))))))))))))())()))))()))(()())))()()))(()(¢            êêêê ¢ÔYmllklmmnnmmmmm;/.) ¡¢£**))*))))))))*))))))))))))))))))))) )))*İ)**)))))))*))))*)))))))*)*)))))))))))))*)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))¢            êêêê ¢£èè©CEklmmmmmmnnnnnlll¡¢£*)**)**)))***)********)*****)**)**)Û***)Ü*****)***)**)* ***))***))*)))****)****))))**))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))¡           êêêêê ¢£èè©èèèUhllllmmmnnnlkjlnJ /*********************************Ú****İ***********İ**Û******************************))))****))*))*)))))))))))**))*)))))))*)))))*))))))***))))*)*)))))**)***))*))**))*)*)*)***))**)*)**)**)*))*))*)*)**))*)))))*))))**)))))**)*)))**)***)*)*))***)))*))****)*))))*)**))))*)****))*B¡           êêêêê¡¢£èè©èè訩èèèCGHllmllkjilnnnn/*************************** ÚÚÛÛÛÜİİ *********Ü**Û*******************************)*********************************************)********)*****************************)***************************************************************)**)***********************************R¡          êêêêêê¡¢£²²©èè訩èè訩èèèYZlkjiilnnnnnn;/**+**+++++++++++**+*+*+++*Ú++++İ++****+*+-ÜÛÜIÛÛ***+++++***++++*+*+*++**+*++**********************************************************************************************************************************************************************************************¢¡          êêêêêê¡¢£²²©²²²Å©èè訩èèè©©²²èjikmmmmnnnmmJÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÄÑÛÑÑÑÑÜÑÑÑÑÖ++++++Û++Û+++++++++++++++++++++++++++++**+*+*****+*++*****+****++**++******+************+*****+**+***+******+***+************+***+****++***+***+*+**+****+****+**********+******+**+*************+*+**********************+****+*****¢¡         êêêêêêꢣkkkk²²²Å©èè訩èè訩²²èê SBGZmmmnnmmmYÈÇÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÚ¸ÈÉÛÜÜÜÈÑÑÖÖ+++++ÜIİÛÛ +++++++++++++++++++++++++++**+++***++++*+*+*+*+*+++++++*+++++++**+++++++++*++++++++*+*+*++++++*+*+++++*+**+++++*++*++*++++++++*+***++++++++**++*+++*+*++**+*+*+++++***++**++++++****++++++++++*+++*++***+*+++++*++**++++*¢¡        êêêêêêêꢣkkkk²²²¨©è²²¨©èè訨²²èê ¡è訧CGJnnnnmlkjÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÚÚÚÚÚÇÑÑÜÑÑÑÑÖÖµµµµÜÜܹÛ,,+,+++,+++,+++,++++,,++,,+,+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++A1++++++++++++++++++++++++++++++++++¢        êêêêêêêêꢣkkkkkkkkk²²²¨©è貨¨²²èê ¡è訧èèÅ©CHJnmlkÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÑÚÑÑÑÑÑÜÑÑÑÑÖÖµµµµµÜµµµÛºÉ¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +5wwwwwwwww56++++++66Eww5566+++++++++++++++°°°°+++++++++++++++++++++++++++++++++¢        êêêêêêêêê£kkkkkkkkkkkkkkk²²²¨©²²èê ¡è觩è訨èèÓÓmlÓÑÑÑÑÖÀÀÀéèÑÑÑÑÑÑÑÑÑÚÑÑÑÑÑÛÉÓÑÑÖÖµµµµµÛµµµÛµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ++,,,++,,+,+,+++++,++++,,,,+,+,+,,,,+,++,++,,++,,,,++,+,++,,,,,€,+,+++,,,++++,,,,,+++++,,+,,++,1pwwwxxbwyxbwxxwwwwwwwwwwwwwwwwwwwwwwwwwwww+,+,,²¼++,,+,+,,,,,,+++++++,+,,++++,+,,+,,¢       êêêêêêêêêê£kkkkkkkkkkkkkkkkkkkkkk ¡ ¡è²§¨è²Å¨èÀÀÀèèÑÑÑÑÑÖÀÀÀéèÑÑÑÑÑÑÑÑÑÙÈÉÛÜÜÛÑÑÑÑÖÖµµµµµÛ¹¹ÛÛÛÕ°°µµµ°°µµµµ°°µµµ°°°µµµ°°°µµµ°±±µµµµ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+,,,,,,,,,,,,€,è,,,,,,,,,,,,,,,,,,,,,,,,,,,Bpppppwxbwššššššššxbwššbwxšbwšrbwxxbwxšbwxxbwxx,,,,Bµ©H,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,¢      êêêêêêêêêêêkkkkkkkkkkkkkkkkkkkkkkk ¡¢£²²¨©²²Å¨kÀÀÀèèÑÑÑÑÑÖÀéÀéèÑÑÑÑÑÑÑÑÙÙÚÇÑÑÑÜÑÑÑÑÖÖµµ¸¹ÜÛÊÕµÛµµ°°µµµ±°µµµ±±°µµµ°°±µµ¡±±µµµµ°°°µµµµ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,è,€2€,,,,,,,,,,,,,,,,,,,,, 4pppppppppwšššššššššššššššššššššššššššššššššššššššš,,,,Sµ¸Ü¼,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,¢     êêêêêêêêêêêêjkjkkkkjkkkkkkkkkkkkkkk ¡¢£²²¨©kkkkkÀÀèèèÑÑÑÑÑÖÀéÀéèÑÑÑÑÑÑÑÑÑÙÑÑÑÑÑÜÑÑÑÑÖÖµµµµµÜµµµÛµ°€€€€€€€€°Ã±µµµµÃ£˜££¡¡£µµµµ±±±µµµµµ,,,,,,,,,,,,,-¸µµµ,,,,,-,,,,,,-,,,,-,,,,³µ,-,,-,,-,,,,,,,,,-,è耀,,,-,ĞœœœœœœœœœœœœXXVSppwššššššššššššššššššuuuuuššššššššššššššššš,,,궸ºİ --,,,-,-,,,,---,,,,,,,-,,,,-,,,,¢   êêêê²qcdªªªªªªjjjjkkkjkkkkkkkkkkkkkkk ¡¢£gkkkkkkkkÀÀèèèÑÑÑÑÑÖÀéÀéèÑÑÑÑÑÑÑÑÚÙÚÚÛÜÛÜÜÒÑÑÖÖµµ¶ÜÜÜÜÛÛÛÛÀÀÀÀÀ €°µµµµµ±˜˜£¡¡££µµµÃ±µµµµµµµ,----------,-,--e------,,--,,----,,-----³µ---------,------,--è-è€--CĞĞĞœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ›ššš›€€€uššššš}€€€šššššššš-,,A°¶¸ºÌ ,--,-,---,----,,---------- 5EgªªªªªªªªªÓÓcb      kkkjiijjkkkkkkkkkkkkkkF ¡¢£kkkkkkkkkÀèèèèÑÑÑÑÑÖÀéÀéèÑÑÑÑÑÑÑÑÑÚÑÑÑÑÜÑÑÑÑÑÖÖµµµµÛµµµµÛµÀÀÀÀÀ °µµµµµµ˜˜££¡££µµµ±µµµµµµµµµµµµµµµµµµµµµµµ¸ºµµµµµµµµµµµµµµµµµµµµµµµµµµµµ----------------€€èAĞĞĞĞĞĞĞĞœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœš›€€€uššššš}€€€šššššššš---é²µ¹ÜİI----------- + +4Egªª««ªªªªªgETSccr¡¡¡¡¡¡¡¡¡¡        kkkkikkkkkkkkkkkkkkkkkS ¡¢£kkkkkkkkkÑÑÑÑÑÑÑÑÑÑÖÀéÀéèÑÑÑÑÑÑÑÑÑÙÑÑÑÑÜÑÑÑÑÑÖÖµµµµÛ¹Õ¹ÛÛÛÀÀÀÀÀ °µµµµµµ˜˜££¡££µµµµµµµµµµµµµµµµµµÀµµÀµ¸¹µµµÀÂ깵깵À¹µÀê¹µÀµµ----------------耀€ĞĞĞĞĞĞĞĞœœœœœœœœœœœœœœœœœœœœœœœœœœœ››œœœœœœœœœœœšœš›€€€uššššš}€€€šššššššš---é²´ÖİÛªªª«««ª«ªªªªETScr   ¡¡¡¡¡¡¡¡                       kkkjkkkkkkkkkkkkkkkkk ¡¢£dkkkkkkkkkÑÑÑÑÑÑÑÑÑÑÖÀéÀéèÑÑÑÑÑÑÑÑÑÙÑÈÉÛÜÜÑÑÑÑÖÖµ¶ÜÛÛܹ¸µÛµµµµµµµµµµµµµµµµµµ˜˜££¡££µµµµµµµµµµµµµµµµµµÀÀµµµÀÀµµ¸¸µµµêÀµµÃêÀµµÃÀÀµµµÀÀµµµÀÀµµµ--..-----..-...-€-耀ĞĞÃÂĞĞĞœœœœœœœœœœœœœœœœœœœœœœœ››››››››œ›œœœœœœœœœš›€€€uššššš{{{{ššªªªª««««ªªªªÓdcr       ¡¡¡¡¡¡¡¡¡¡¡¡                  ¡¡‘’“”‘Àç””””OkkkkkkkkOOkkkkkkkkkkk ¡¢£gkkkkkkkkkÑÑÑÑÑÑÑÑÑÑÖÀéÀÀèÑÑÑÑÑÑÑÙÙÚÚÉÈÑÜÉÑÑÑÑÖÖµµµµÛµµµµÛµµµµµµµµµµµµµµµµµµ˜˜££¡££µµµµµµµµµµµµµµµµµÀõµµÀõµµµµµµÀõµµêõµµÀÃFDD@BCµµÀõµµµ..............Aè€èĞĞĞñêĞĞĞœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœš›€€€ušššªªªªªªªecr         ¡¡¡¡¡¡¡¡¡               ¡¡‘’“””‘Àç”””””‘Àç””””””‘Àç””””OjkkkkkkkOOOOOkkkkkkkW ¡¢£hkkkkkkkkkÑÑÑÑÑÑÑÑÑÖÀÀéÀÀèÑÑÑÑÑÑÑÑÙÑÑÑÑÑÈÜÑÑÑÑÖÖµµµÜÛÜÛÛÛÛÛµµµµµµµµµµµµµµµµµ˜—££¡££µµµµµµµµµµµµµíííÀüººÀúµµµµµµÃµµµµÀõµµÀõFD@BDCµÀõµµµµ............€€€€èèèĞĞĞ°êêĞĞĞœœœœœ55500005555dœœœœœœœœœœœœœœœœœœœœœœœœœª›€€            ¡¡¡¡¡¡¡¡¡¡¡¡       ¡‘““‘Àç”””‘Àç””””‘Àç””””‘Àç”””””‘Àç””””””‘Àç””””OjkkkkkkkOOOOOkkkkkS ¡¢£kkkkkkkkklººººººÑÑÑÖÀÀéÀÀèÑÑÑÑÑÑÑÚÚÚÚÉÈÑÑÜÑÑÑÑÖÖµµµµÛµµµµÛÖµµµµµµµµµµµµµµµµµ˜—££¡££µµµµµµµµµµµµµííííííí¼»ººµµµµµµµµµµµµµµµµµµµEDDDDCµµµµµµµµ/.///.//....€€€€èèèçĞĞèèêÃĞĞ›››œœ55500005555dœœœœœœœ55;;0000444dœ        ¡¡¡¡¡¡¡¡¡¡¢’Àç“””‘Àç”””‘Àç”””‘Àç”””‘Àç”””‘Àç””””‘Àç””””‘Àç”””””‘Àç””””””‘Àç””””OjkkkkkkkOOOOkkkkk  ¡¢£kkkkkkllllºººººººººİÀÀéÀÀèÑÑÑÑÑÑÑÑÙÑÑÈÛÜÜÛÜÑÑÑÖÖµµµµÜµµµµÖÛµµµµµµµµµµµµµµµµµ——££¡££µµµµµµµµµµµµµíííííííííí»µµµµµµµµµhhhhfhµµµµEDDDDCµµµµµµµµ/./.././////€€€èèèèĞĞĞèêêÂĞĞ›œœœœ55;00005555dœœœœœœœ5;;;0000444dœ¡¡¡¡¡¡¡Àç““Àç””Àç”””Àç”””‘Àç”””‘Àç”””‘Àç”””‘Àç”””‘Àç””””‘Àç””””‘Àç”””””‘Àç””””””‘Àç””””OjkkkkkkkO OOOOOkkkkk ¡¢£UOOkkklllllºººººººººİÜİÜÜÚÚÑÑÑÑÑÑÑÑÙÑÑÑÑÑÑÛÑÑÑÑÖÖµµµµÜµµµµµÛµµµµµµµµµµµµµµµµµ——££¡££µµµµµµµµµµµµµííííííííííííµµµµµµµµhfffdhµµµµµµµµµµµµµµµµµµ/////³//// 3€€€€è€è€ĞĞèèè°ĞĞœœœœœ5;;00003555dœœœœœœœ;;;50000444dœÀç”Àç””Àç””’‘””’‘””””””””””””””””””””””””””””””””””””””””””““””””””””””””””””””””””””””OjkkkkkkkO OOOkkkkk¡¡¢£OOOOONlllllºººººººººİÜÚÚÜÜÜßßÑÑÑÑÑÑÚÑÑÑÑÑÑÜÑÑÑÑÖÖµµÜÜÛܹյµÛµµµµµµµµµµµµµµµµµ——££¡££µµµµµµµµµµµ€Ãííííííííííííµµµµµµµµhfffdhµµµµµµµµµµµµµµµµµµ/////³//±ç€€€€èèèĞĞĞèèèêĞĞœœœœ;;400000555dœœœœœœœ;5520000444dœœ—”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””OjkkkkkkkO Okkkkk¡¢£E +OOONlllllºººººººººİÜÜÜÜÜÜßßßßßßßÑÚÚÑÑÑÑÑÛÑÑÑÑÖÖ····Ü·¸¹ÛÛÛÛ¹¸¸¸¸¸¸¸¸¸¸¸¸¸¸¶——££¡££¶¸¸¸¸¸¸¸¸¸€€Àò²²²²²²²²²µµµµµµµµµhfffdhµµµµµµµµµµµµµµµµµµ/////³2B±±±ç瀀èè€èĞĞĞèêèêĞĞœœœœ;5000000255dœœœœœœœ55200000444dœœ—”””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””””OjkkkkkkkO Okkkkk¢£XO  ONlllllºº¸¶¸¸ºººİİÜÚÚÜÜßßßßßßßßßßÑÑÄÄÑÛÑÑÑÑÖÖµµµµÜµµµµµÛµµµµµµµµµµµµµµµ¶·¸¸¸¸¸¸¸·¶µµµµµµµµµµÀÃÀ²²²²²²²²¶µµµµµµµµµhhhhhhµµµµµµµµµµµµµµµµµµ////€±±±±±ç瀀€è€è€ĞĞèèèêĞĞœœœœ;0000000055dœœœœœœœ5;200000444dœœ—”””””””””””””““””””””””””””””””””””““““““””””””””””””””””””””””””””””””””””””””””””””Ojkkkkkk\O OkkkkkkkjO ONlllllºººººººººİÜÜÜÜÜÜßßßßßßßßßßßîîîîîîîîîîÖµµµµÛµµµµµÛµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ€ÀÀò²²²²²´´¶µµµµµµµµhdddddhµµµµµµµµµµµµµµµµµµ/ BRR€±±±±±ç瀀èèèèĞĞĞèèè°ĞĞœœœœ50000000045dœœœœœœœ55000000444dœœ—””””””””””””””””””””””””””””””””””””””“””””””””””””””””””””””””””””””””””””””””””””””OjjkkkkkmO OkkkkkkkjO ONlllllºººººººººİİİÜÜÜÜßßßßßßßßßßßîîîîîîîîîî©©©©©©©©©©©©©©©©©©©©©©©©©©©ª«««¬¬¬«««ª©©©©©©©©©©©©Àô´´´´´´¶µµµµµµµµhhhhhhhµµµµµµµµµµµµµµµµµµbR±±±€±±±±±ç瀀€è€èĞĞĞèèêÃĞĞœœœœœœœœœœœœœœœœ—””””””””””””””””””””””“““””””””””””””””””””””””””””””””””””””””””””””””””””””””””Ojkjjjkk]O OkkkkkkkjO ONlllllºººººººººİÜÜÜÜÚÚßßßßßßßßßßß¡¡îî¡î¨¨¨¸¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨©€ÃÅ´´´´´´¶µµµµµµµµhdddddhµµµµµµµµµµµµµµµµµµ±±±±±€±±±±±çç€èèèèç€ĞĞĞĞĞĞĞœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ—”””””””””””””””””””””””””””””””’””””””’””””””””””””””“””””””””éééOjkkkkkkO OkkkkkkkjO ONlllllºººººººººİÚÚÜÜÜÜßßßßßßßßßßß»½îî½»¼îî¨¨@[¨¨©©¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ªÀ€Ãµµµµµµµµµµµµµµµhffffdhµµµµµµµµµµµµµµµµµµ±±±±±€±±±±±ç瀀è€èĞĞĞĞĞĞĞĞĞœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ—””””’”””’”””””’””””””éééééééééé’””””””””””””“““““””””””éééOjkkkkkkO OkkkkkkkjO ONlllllººººººººººÜÜİİÜÜßYßßßßßßßßß½îî½»¼îîî¨¨@[¨¸¨¨¨¨¨¨¨¨¨¨¨¨©©¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ªµ€ÀŵµµµµµµµµµµµµµhffffdhµµµµµµµµµµµµµµµµµÄ±±±±±€±±±±±çç€èç€èĞĞĞĞĞĞĞĞĞœœœœœœœœœœœœœœ››œœœœœœœœœœœœœœœœœœœœœœ—””””ééééé’”””éééééé’”””””ééé—’””””””éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO OkkkkkkkjO ONllllmººººººººººİÜÜÜÜßßXßßYß]ZßYßîî½»¼îîîî¨¨@[¨¨¨¨¨¨¨¨¨¨¨¨¨©©©©¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨©©©©¨¨¨ª€À€Ã····································°°°±±±±±€ ±±±±çççè€èè€ĞĞĞĞĞĞĞĞœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœœ—””””ééééé’”””éééééé’”””””ééé—’””””””éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO OkkkkkkkjO ONllllmººººººººººİİÜÜÜßßXßßXß]YßXßîî¼½îîîîî¨¨@[¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨©©©¨¨¨¨¨ªµµµ€Ãµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ³°°°°±±±±± €±±±±ççèèèèĞĞĞĞĞĞĞĞĞœœœ›››šš›››œœœœœœœœœœœ››šš››œœœœœœœœœœœ—””””ééééé’”””éééééé’”””””ééé—’””””””éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO OkkkkklljO ONllllmºººº¸¸¶¸ºººİÜÜÜßßWßßXß]XßXßîîîîîîîîî¨¨@[¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨CCCCCCCCCC¨¨¨¨¨¨¨¨ªµÀ€€Àõµµµµµµµµµµµµµµµµµµµµµµµµµµµµµ²°°°°°°±±±±± €±±±±çç耀è€ĞĞĞĞĞêĞĞœœœœœ››››œœœœœœœ››ššš›šš›œœ›››››››œœœœ—””””ééééé’”””éééééé’”””””ééé—’””””””éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO OkkkkllljO ONllllmºººººº·ºººººİÜÜßßVßßXß\XßXßîîîîîîîîî¨¨@[¨¨¨¨¨¨¨¨ª@@@@@@@A@@§¨¨¨¨¨OIIIIIIIIC¨¨¨¨¨¨¨¨ªµ°°µ€Ãŵµ°°µµ°°µµ°°µµ°°µµ°°µµ°°µµ²°°°°°°°°°±±±±±±€±±±±ççèè€è€ĞĞĞêêêĞĞœœœœœœœœœœœœœœœœœœœ››››œœœœœœœœœœœœœœœœ—””””ééééé’”””éééééé’”””””ééé—’””””””éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO OkkkkllljO ONllllmºº¸ººººººººººİÜßßVßßVß\XßXßPPPTîîîîî¨¨@[¨¨¨¨¨¨¨¨ªBBBDBBBAB@¦¨¨¨¨¨OI§§§¨¨¨IC¨¨¨¨¨¨¨¨ª°°°€À€Ã°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°±±±Ã±±±±±±€±±±±ççèçèèèĞĞèèêêĞĞœœœFEDDDDccccccccccccccccccccccccDccœœœ—””””ééééé ’”””éééééé’”””””ééé—’””””””éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO OkkklllljOO ONllllmº¸¶¶¸¸ºººººººİÜßßVßßVß\XßXßPPPTîîîîî¨¨@[¨¨¨¨¨¨¨¨ªFGIIIIIFDD¦¨¨¨¨¨OI§CBCCBIC¨¨¨¨¨¨¨¨ª°°°°°€ÀÅ°°°°°°°°°°°°°°°°°°°°°°°°°°°°±±±±ÃÃñ±±±±±€±±±±ççèç€è€ĞĞèèèêĞĞœœœ555500;;AAA@@@@@@@@@@AA44400;00dœœœ—””””ééééé ’”””éééééé’”””””ééé—’””””””éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO OkkllllljO OOOONlllmmººººººººººººººÜßßVßßVß[XßXßPPPTîîîîî¨¨@[¨¨¨¨¨¨¨¨ªAAAIAAAFB@¦¨¨¨¨¨OI§CCBC¨IC¨¨¨¨¨¨¨¨ªµ°°µµµ€Ãµµ°°µµ°°µµ°°µµ°°µµ°°µ²°°°°°°±³³ÅÅÅñ±±±±±€±±±±ççèç€è€€ĞèêèêĞĞœœœ555500;;dœœœšššššš˜›œœ44400;;;dœœœ—””””ééééé ’”””ééé ééé’”“”””ééé—’””””””éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO OkkllllljO ONlllmmºººººººººººººººßßVßßVßZXßXßPPPTîîîîî¨¨@[¨¨¨¨¨¨¨¨ªAAAIAAAFB@¦¨¨¨¨¨OI¨BCCC§IC¨¨¨¨¨¨¨¨ªµµµµµ€€€Ãµµµµµµµµµµµµµµµµµµ³³°°°°°°°±ÅÃÃÃÅñ±±±±±€±±±±çèçç耀ĞêèèêĞĞœœœ5555004;dœœœš˜›œœ;;;00;;;dœœœv””””ééééé ’”””ééé ééé’”““””ééé—’”””””” éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO OkkllllljO ONlllmmºººººººººººººººßßVßßVßYXßXßPPPTîîîîîî¨@[¨¨¨¨¨¨¨¨ªFGIIIFFFDD¦¨¨¨¨¨OI¨CBCC§IC¨¨¨¨¨¨¨¨ªµµµµµµµ€Àŵµµµµµµµµµµµµµµµ²°°°°°°°°°ÃÅÃÃÃÅñ±±±±±€±±±±çèççèç€ĞĞèèêĞĞœœœ555;003;dœœœ˜˜›œœ;;;00;;;dœœœ—””””ééééé ’”””ééé ééé ’”””””ééé—’”””””” éééééééééé’”””””““““”““”””””””””””éééOjkkkkkkO OkklllkljO ONlllmmººººº¸ºº¶¸¸ººººß\VßßVßXXßXßPPPTîîîîîî¨@[¨¨¨¨¨¨¨¨ªBBBIAAAFA@§¨¨¨¨¨OI¨BCBC§IC¨¨¨¨¨¨¨¨ªµµµµµµ€À€Ãµµµµµµµµµµµµµµ²°°°°°°°°°°±ÃÅÃÃÃÅñ±±±±±€±±±±çèççè瀀ĞèèêĞĞœœœ;55;000;dœœœš˜›œ;;;;00;;;dœœœ˜”””” éé ééé ’””” ééé ééé ’”””””ééé—’”””””” éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO OkllllkkjO ONlllmmºººººººººººººººßXVßßXßXXßXßPPPTîîîîîî£@[¨¨¨¨¨¨¨¨ªBBBIAAAFA@§¨¨¨¨¨OI©CBCC§IC¨¨¨¨¨¨¨¨ªµµµµµµµµµ€Ãµµµµµµµµµµµ³°°°°°°°°°°°°ÃÅÃÃÃÃÅñ±±±±±€±±±±ççççè瀀ĞêèêĞĞœœ;5;6000;dœœœš˜›œ;;;;00;;;dœœœx•””” Cé ’””” ééé ééé ’”””””————’”””””” éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO OllllkkljO ONlllmmºººººººººººººººßXUßßXßXXßXßPPPTîîîîîî£@[¨¨¨¨¨¨¨¨ªBBBEAAAF@@§¨¨¨¨¨OI©©¨¨¨§IC¨¨¨¨¨¨¨¨ª³µµµµµµµ€€Àŵµµµµµµµ³°°°°°°°°°°°°°°ÃÅÃÃÃÃÅñ±±±±±€±±±±ççççè瀀ĞêèêĞĞœœ;5;3000;dœœœ˜˜›œ;;;7007;;dœœœš•””””””dd ’””” ééé ’”””””’”””””” éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO llllllljO ONlllmmºººººººººººººººßVUßßXßXXßßßPPPTîîîîîî£@[¨¨¨¨¨¨¨¨ªkm_mmmkkkk¨¨¨¨¨¨OIIIIIIIIC¨¨¨¨¨¨¨¨ª³³µµµµµµµµ€Ãµµµµµµ´°°°°°°°°°°°°°°°°ÃÅÃÃÃÃÅñ±±±±± ±±±±çççç瀀ĞĞêêĞĞœœ;550000;dœœœ˜˜›œ;;90000J;dœœœš–””””””””””””””””ddUE ’”””””’”””””” éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO llllllljO ONlllmmºººººººººººººººßUUßßXßXVßßßPPPTîîîîîî£@[¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨OIIIIIIIIC¨¨¨¨¨¨¨¨©³³³µµµµµµ€À€Ãµµµ³³°°°°°°°°°°°°°°°°°ÃÅÃÃÃÃÅñ±©©©©©©©©¨çççç瀀ĞêêĞĞœœdœœœ˜š˜˜˜˜˜›œdœœœœ–””””””””””””””””””””””””””””””’”””””” éééééééééé’”””””””””””””””””””””””éééOjkkkkkkO llllllljO ONlmmmmºººººººººººººººßUUßßßßXVßßßPPPTîîîîîî£@[¨¨¨¨¨¨¨¨¨¨¨¨¨¨©©©©¨¨¨¨¨¨¨OIHGGGGHHC¨¨¨¨¨¨¨¨©ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª°°°°°°©©©©©©©©©©¨¨¨¨¨¨¨¨çççç瀀ĞĞĞĞĞœDDDDDDDDœœœœœ˜šš˜š˜˜›œDDDDDDDDDdœœœœ—””””””””“““”””””””””””””””””””’”””””” CQéééé’”””””””””””””””””””””””éééOjjkkkkkO llllllljO ONlmmmmºººººººººººººººßßßßßßßXVßßßPPPTîîîîîî£@[¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨OIIIIIIIIC¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨©°°°°°°¨¨¨¨¨¨¨¨¨¨¨©©¨¨¨¨¨çççç瀀€ĞĞĞĞœœœœœœœœœœœœœœœ˜ššš˜š˜›œœœœœœœœœœœœœœœ—”””””””””“””””””””””””””””””””’””””””’’’’dU ’”””””””””””””””””””””””éééOjjkkkkkO + + +llllllljO ONlmmmmººººº¸¶¶¶¸ºººººßßßßßßßVVßßßPPPTîîîîîî£@[¨©©©©©©©¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨OHGGGHGHIC¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨©©©¨©¨¨¨¨¨¨¨¨¨¨¨¨¨¨©°°°°°°¨¨¨©©©¨¨¨¨¨¨¨¨¨¨¨¨çççç瀀€ĞĞĞĞœœœœœœœœœœœœœœœ˜˜šššš˜›œœœœœœœœœœœœœœœ—””””””””””””””“““”””””””””””””’”””””””””””’’’’’’’’”””””””””””””””“””””””””éééOjjkkkkkO + + + OOllllllljO ONmmmmmººººººº¸ºººººººßßßßßßßVVßßßPPPTîîîîîî£@[¨¨¨¨©©©¨¨¨¨¨¨¨¨¨¨¨¨©©¨¨¨¨OIIIIIIIIC¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨©°°°°°°¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ççç瀀€€ĞĞĞœœœœœœœœœœ››œœœ˜˜˜šššš›œœœœœœœœœœœœœœœ—””””””””””””””””””””””””””””””’””””””””””””””””””””””””””””””””““““”“””””“ éééOjkkkkkkO +OOOOllllllljO ONmmmmmºººººººººººººººßßßßßßßUVßßßîOPTîîîîîî£@[¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨OIIIIIIIIC¨¨¨¨¨¨¨¨©©¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨©°°°°°°¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ç瀀€€€ĞĞĞœœœœœœœ››œ›››œœêççêêÂêÂÂêÂÂÂÒÓU™™šš›››››—””””””””””””””””””””””””””””””’”””””””””””””””””””””””“”””””””””””””””“““” OjkkkkkkOOOOOOOllllllljO OOONmmmmmºººººººººººººººßßßßßßßUUßßßîîîîîîîîî££@[¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨OIIIIIIIIC¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨©°°°°°°¨¨¨¨¨©¨¨¨¨¨¨¨¨¨¨¨çç瀀€€€€ĞĞœœœœœœœœœœœœœœœêê蘘ššçççççççççççççççççç—””””””””””””””””””””””””””””””’”””””””””””””””””””””””“””””””””””””””“““““““““Ojkkkkk\OOOOOOOllllllljOOOOjjkmmmmmºººººººººººººººßßßßßßßUUßßßîİİîîîîİİİݨ££@[¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ŞŞŞŞŞŞŞŞŞ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨ª««œ½½ŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞÚœœœœœœœœœœœœœœœêç蘚ššêçêêè蜜œœœœêçêè蜖““““““””””””””””””””””””””””””’””””””””””””””””””””””“““””””””””””””““““““““““Ojkkkkk]OOOOOOOlllkkllOOOjjkllmmmmmºººººººººº¸ººººßßßßßßßUUßßßîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞœœœSbbbêêêêêêêœêçèèêççêè蜜œœœççêè蜖““““““““““““””””””””””””””””””’””””””””””””””””””””””””””””””””””””“““““““““““OjkkkkkOOOOOOOOlkkllllkjjkllllmmmmmºº¸¶¸ººººº¸¶¶¸¸ÜÛÛÛØØØÚUßßßßŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞYSSbbaêêêêêêêêêêêêçèèèèèèèêçêèèçœççêèè–““““““““““““““““““””””””””””””’”””””””””””“””””””””””””””””””””””””“““““““““““OjkkkkkOOOOOOOOlllllllllllllllmmmmmºººººººººººº¸ººÚÚÚÚÚÚÚÜÜÜßŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞDSSêêêêêêêêêêêêêêêêêêêêêççèèèèèèèèèêêœçêêèè”’’’’““““““““““““““““””””””””””’””””””””””””””””””””””””””””””””””””“““““““““““OjkkkkkOOOOOOOOlllllllllllllllmmmmmºººººººººººººººÔÔÕÕØÜÜcéÜŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞHEêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêççèèèèèèèèèèè“’’’’’’’’’’““““““““““““““““““““’“““““”””””””””””””””””””””””””””””“““““““““““““OjkkkkkOOOOOOOOlllllllllllllllmmmmmºººººººººººººººÓÔÕÕÕŞéééÚŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞHDSSSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêççç’’’’’’’’’’’’’’’’’’’’“““““““““““FHHH“““““““““““““““““““““””””””””””””””“““““““““““““OjkkjjkOOOOOOOOlllllllllllllllllmmmºººººººººººººººÓÓÔÕÕİééPÜŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞ[¼YEDSSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê  ¡’’’’’’’’’’’’’’’’’’“““““““““HHF“““““““““““““““““““““““””””””””“““““““““““““““““OjkkkkkOOOOOOOOlllllklllllllllllmmmmŞŞŞŞ½Í¼ºººººººÓÓÓÔÕÜPQZÍŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîîîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞ[¼YEDSSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê     ¡’’’’’’’’’’’’’’’’’’’’’’“EGE““““““““““““““““““““““““““““““““““““““““““““““““OjkkkkkOOOOOOOOllllljlllllllllllmmmmŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîîîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞ[¼YEDSSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê     ¡’’’’’’’’’’’’’’’’’’’’’’“““““““““““““““““““““““““““““““““““““““““““““““OjkkkkkOOOOOOOONlllllkllkkllllllllmmmŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîîîîîîîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîîîîîîîîîîîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞ[¼YEDSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê    ¡¢’’’’’’’’’’’’’’’’’’’“““““““““““““““““““““““““““““““““““““““““““’OjkkkkkOOOOOOOONllllllkjjllllllllllmmŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞ¼ËºFDSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê    ¡¢¢’’’’’’’’’’’’’’’’’’’’’’’’’’“““““““““““““““““““““““““““““’OjkkkkkOOOOOOOONllllllllkllllllklllmmŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîîîîîîîîîîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞ¼ËºFDSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê  ¡¢¢¢’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’“““““““““““““““““’’’kkkkkkOOOOOOOONllllllllkllllllkllllmŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞ¼YEEDSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê  ¡¢¢¢’’’’’’’’’’’’’’’’’’’’’’’’’““““““““““““““’’’’’kkkkkkkOOOOOOOONllllllllllllllkkllllmŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞ¼YEDDSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê  ¡¢¢¢’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’kkkkkllOOOOOOOONlllllllllllllkklllllmŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞ¼YEDDSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê  ¡¢¢¢¢’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’’kkkkkllOOOOOOOONlllkllllllllllllllllŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞ¼YEDDRêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê ¡¢¢¢¢’’’’’’’’’’’’’’’’’’’’’’’’’kklllllOOOOOOOONllljklllllllllllllmŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞZFDSaêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê   ¡¢¢’’’’’’’’’’’’’’’’’’’lllllllOOOOOOOONlkjjllllllllllll}ÎŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİŞŞŞŞŞŞŞŞŞîîîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞDSSSSSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê   ¡¡¡‘‘‘‘’’’’’’’’’lllllllOOOOOOOONlllklllllllllllÎŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîİİİİİİİİİİİİİİİEDDDSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêê        ¡‘’’’lllkkllOOOOOOOONlllllllllllll}ÎŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîîİİİİİİİİİİİİİİİİİİİİİİİİİ­­­­­­­­­­­­­­­­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîîîîîŞîîŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîİİİİİİİİİİİİİİİİİİİİİEDDDSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêlkkllllOOOOOOOONllllllllllll}ŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîŞîîîîîŞîîîîîîîîİİİİİİİİİİİİİ­­­­­­­­­­­­­­­­œœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîîîîîîîîŞŞŞŞŞŞŞŞŞîîîîîîîîîîîîîîŞŞŞŞŞŞŞŞŞŞŞîîİİİİİİİİİİİİİİİİİİİİİİİݺÈTSSêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêlllllllOOOOOOOONllllllllll}ÎŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœœ­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİîîîîîîîîîîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ˺ÓêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêlllllllOOOOOOOONllllllllŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîİİİİİİİİİİİİİİİİİİİİİİİİİ­­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİݺWWWVSRêêêêêêêêêêêêêêêêêêêbSSÓǸªºººººººº»¼İlllllllOOOOOOOONlllllllİİİİİŞŞŞŞŞŞŞŞŞŞŞŞŞŞîîîîîîîîîîîîîîîîîİİİİİİİİİİİİİİİİİİİİİİİİ­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œ¬¬¬¬¬¬¬ºªhhhhhhhhhhhhhhhhXY¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬llkjkllOOOOOOOONllllllİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœœ­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­­­­­­­­­­­­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬lkjllllOOOOOOOONllll½İ­­­­­­­­­­­­­­­­­­­­­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­­­­­­­­­­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­­­­­­­­­­­­­­­­­­­­­­­İİİİİİİİİİ­­œœœœœœœœœœœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬kljllllOOOOOOOOlll|İİ­œœœœœœœœœœœœœœœœœœœœœœœ­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­œœœœœœ¬¬¬¬œœ¬¬¬¬¬¬¬¬¬¬¬œ­İİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬llkllllOOOOOOOOOl|¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœ­­­­­­­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİ­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœœœœ¬¬œœœœœœœœœœœœœœœœœœœœœ¬œœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­İİİİİİİİ­­œœœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬lllllllOOOOOOOOm|¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœœœœœœœœ­­­¬İİİİİİİİİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœœœœœœœœœœœ­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­İİİİİİİİİİ­­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬lllllllOOOOOOO}¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœœœœœœœœœœœœœ­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœ­­İİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬lllllllOOOOO¬œœœœ¬œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬İ­­­­­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœœœ¬œœœ¬œœœœ¬¬¬œœœœœœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœœ­İİİİİİİİİİİİœœœœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬lllllllOOOO®İİİ­­­­İ­­­­­­­­­­­­­­­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­­­­­­­­­­­­­İ­­­­­­­œœœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœ­İİİİİİİİİİİİİ­­­­­­œœœœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬lllllllOOîİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœ­­İİİİİİİİİİİİİİİİİİİİ­­­­­œœœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬lllllll~®İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœœœœœœœœœœœœœœœœœœœœœœœœœœİ­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬llllllİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­­­­­­­­­­­­­­­­­­­­­­­­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬llllİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬lllİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬lİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬lİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİÍÍÍİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬İİİİİİİİİİİİİİİİİİİİİݽÍİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİݽ½ÌÌÌÌ̼¼½İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬İİİİİİİİİİİİİİİİİݽ½Ü¼¼Ì½­İİİİİİİİİİİİİİİİİİİİİİİİÍͽ¼¼ÌÌÌÌÌÌÌÌÌÌ̬½½İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬İİİİİİİİİİͽ½½¼ÌÌÌÌÌÌ̼̼­İİİİİİİİİİİİİİİİİİͽ¼¼ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼¼¼¼¼¬Üİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬İİİͽ½½½¼ÌÌÌÌÌÌÌÌÌÌÌÌ̼½İİİİİİİİİİİİİİİݽ½¼ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­­­­­­­­­­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİİİİİݽ½ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼Íİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œœœœœœœœœœœœœ­­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİİİİͽ½ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬œœœœ­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­¬œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÍİİİİİİİİݽ½ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼Üİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­¬œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœ­­­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼½İİİİİİݽ½ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼Íİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœœ­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌ̼œ½İİİͽ½ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼½­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÍİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­­İİİİİİİİİİİİİİİİİİİİİİİİ­­­­­­­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÍİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœœİİİİİİİİİİİİİİİİİİİİİİ­œœœœœœœœœœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­İİİİİİİİİİİİİİİİİİİİİœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœ­İİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼Íİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœ­­İİİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼Íİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­­İİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÍİİİİİİİİİİİİİÍÍÍÍİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­­İİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼ÍİİİİİİİİİÍͽ¼¼ÌÌÌ̼İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œœ¬œ¬¬¬¬¬¬¬¬¬¬¬¬¬œœ­­­İİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ­­İİİݽ½½ÌÌÌÌÌÌÌÌÌÌÌÌİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­­œœœ¬¬¬¬¬¬¬¬¬¬¬œœœœ­İİİİİİİİİİİİİİİİİ­­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽½ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬İİİİİİİİİİİİİİİİİİİ­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÍİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­İİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœ­İİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­İİİİİİİİİİİİİİİİİİİİ­­œ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼İİİİİİİͽ½½½İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­­İİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼¼¼¼¼¼¼ÌÌÌÌ̽İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœ­İİİİİİİİİİİİİİİİİİİİ­œœœ¬¬¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œœœœœ¬¬¬¬¬¬¬¬¬¬¬œœ­İİİİİİİİİİİİİİİİİİİİ­­œœœ¬¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­­­œœœ¬¬¬¬¬¬¬¬¬¬œœ­İİİİİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÜİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œœ¬¬¬¬¬¬¬¬¬¬œœ­­­­­­­­­İİİİİİİİİİİİİİ­œœœ¬¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬œœœœœœœœœœ­İİİİİİİİİİİİİİ­­œœ¬¬¬¬¬ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œ­­İİİİİİİİİİİİİİ­œœ¬¬¬¬ÌÌÌÌÌÌÌËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœ¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬¬œœ­İİİİİİİİİİİİİİ­œœ¬¬¬ËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­œœœœœœœœœœœœœœœ¬¬¬¬¬¬œœ­­İİİİİİİİİİİİİ­­œ¬¬ËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÜİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­­­­­­­­­­­­­œœ¬¬¬¬¬¬œœœ­­İİİİİİİİİİİİİ­œ¬ËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­œœœœ¬¬¬œœ­­İİİİİİİİİİİİİİ­¬ËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİݽ½½İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ­­­­İİİİİ­­İİİİİİİİİİİİİİ­¬ËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽½İݽ½ÌÌÌÌÌ̼ܭİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̬İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÜ­İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽ÍİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽½½İİİİİİİİİİİݽÌÌÌÌÌÌÌÌİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÍİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽ÍİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽ÍÍ­­İİİİİİİİİİİİİİİÍÍͽ½½½İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼ÌÌÌÌÌÌ̼¼¼¼ÌÌÌÌÌÌÌÌÌÌÌÌÌ̽½İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽½İİİİİݽÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̽½İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ̼¬½½½İİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËËÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİİ \ No newline at end of file