diff --git a/ggdt/src/graphics/bitmap/png.rs b/ggdt/src/graphics/bitmap/png.rs index 0df8d10..00591d5 100644 --- a/ggdt/src/graphics/bitmap/png.rs +++ b/ggdt/src/graphics/bitmap/png.rs @@ -220,7 +220,7 @@ impl PixelReader for PixelDecoder { ColorFormat::IndexedColor => { Ok(reader.read_u8()?) } - _ => return Err(PngError::BadFile(format!("Unsupported color format: {:?}", self.header.format))), + _ => return Err(PngError::BadFile(format!("Unsupported color format for this PixelReader: {:?}", self.header.format))), } } } @@ -249,7 +249,7 @@ impl PixelReader for PixelDecoder { let a = reader.read_u8()?; Ok(to_argb32(a, r, g, b)) } - _ => return Err(PngError::BadFile(format!("Unsupported color format: {:?}", self.header.format))), + _ => return Err(PngError::BadFile(format!("Unsupported color format for this PixelReader: {:?}", self.header.format))), } } } @@ -468,11 +468,176 @@ impl RgbaBitmap { #[cfg(test)] pub mod tests { + use std::io::Read; + use std::path::PathBuf; + + use byteorder::LittleEndian; + use claim::*; + use super::*; + const BASE_PATH: &str = "./test-assets/png/"; + + fn path_to_file(file: &Path) -> PathBuf { + PathBuf::from(BASE_PATH).join(file) + } + + fn load_raw_indexed(bin_file: &Path) -> Result, io::Error> { + let f = File::open(bin_file)?; + let mut reader = BufReader::new(f); + let mut buffer = Vec::new(); + reader.read_to_end(&mut buffer)?; + Ok(buffer.into_boxed_slice()) + } + + fn load_raw_argb(bin_file: &Path) -> Result, io::Error> { + let f = File::open(bin_file)?; + let mut reader = BufReader::new(f); + let mut buffer = Vec::new(); + loop { + buffer.push(match reader.read_u32::() { + Ok(value) => value, + Err(err) if err.kind() == io::ErrorKind::UnexpectedEof => break, + Err(err) => return Err(err), + }); + } + Ok(buffer.into_boxed_slice()) + } + #[test] - pub fn foo() -> Result<(), PngError> { - let _ = IndexedBitmap::load_png_file(Path::new("./test-assets/test_indexed.png"))?; + pub fn loads_indexed_256_color() -> Result<(), PngError> { + let ref_bytes = load_raw_indexed(path_to_file(Path::new("indexed_8.bin")).as_path())?; + let (bmp, palette) = IndexedBitmap::load_png_file(path_to_file(Path::new("indexed_8.png")).as_path())?; + assert!(palette.is_some()); + assert_eq!(ref_bytes, bmp.pixels); + Ok(()) + } + + #[test] + pub fn loads_indexed_256_color_to_rgba_destination() -> Result<(), PngError> { + let ref_bytes = load_raw_argb(path_to_file(Path::new("indexed_8_rgba.bin")).as_path())?; + let (bmp, palette) = RgbaBitmap::load_png_file(path_to_file(Path::new("indexed_8.png")).as_path())?; + assert!(palette.is_some()); + assert_eq!(ref_bytes, bmp.pixels); + Ok(()) + } + + #[test] + pub fn loads_rgb_color() -> Result<(), PngError> { + let ref_bytes = load_raw_argb(path_to_file(Path::new("rgb.bin")).as_path())?; + let (bmp, palette) = RgbaBitmap::load_png_file(path_to_file(Path::new("rgb.png")).as_path())?; + assert!(palette.is_none()); + assert_eq!(ref_bytes, bmp.pixels); + Ok(()) + } + + #[test] + pub fn loads_rgba_color() -> Result<(), PngError> { + let ref_bytes = load_raw_argb(path_to_file(Path::new("rgba.bin")).as_path())?; + let (bmp, palette) = RgbaBitmap::load_png_file(path_to_file(Path::new("rgba.png")).as_path())?; + assert!(palette.is_none()); + assert_eq!(ref_bytes, bmp.pixels); + Ok(()) + } + + #[test] + pub fn loads_filter_0() -> Result<(), PngError> { + let ref_bytes = load_raw_argb(path_to_file(Path::new("filter_0_rgb.bin")).as_path())?; + let (bmp, palette) = RgbaBitmap::load_png_file(path_to_file(Path::new("filter_0_rgb.png")).as_path())?; + assert!(palette.is_none()); + assert_eq!(ref_bytes, bmp.pixels); + Ok(()) + } + + #[test] + pub fn loads_filter_1() -> Result<(), PngError> { + let ref_bytes = load_raw_argb(path_to_file(Path::new("filter_1_rgb.bin")).as_path())?; + let (bmp, palette) = RgbaBitmap::load_png_file(path_to_file(Path::new("filter_1_rgb.png")).as_path())?; + assert!(palette.is_none()); + assert_eq!(ref_bytes, bmp.pixels); + Ok(()) + } + + #[test] + pub fn loads_filter_2() -> Result<(), PngError> { + let ref_bytes = load_raw_argb(path_to_file(Path::new("filter_2_rgb.bin")).as_path())?; + let (bmp, palette) = RgbaBitmap::load_png_file(path_to_file(Path::new("filter_2_rgb.png")).as_path())?; + assert!(palette.is_none()); + assert_eq!(ref_bytes, bmp.pixels); + Ok(()) + } + + #[test] + pub fn loads_filter_3() -> Result<(), PngError> { + let ref_bytes = load_raw_argb(path_to_file(Path::new("filter_3_rgb.bin")).as_path())?; + let (bmp, palette) = RgbaBitmap::load_png_file(path_to_file(Path::new("filter_3_rgb.png")).as_path())?; + assert!(palette.is_none()); + assert_eq!(ref_bytes, bmp.pixels); + Ok(()) + } + + #[test] + pub fn loads_filter_4() -> Result<(), PngError> { + let ref_bytes = load_raw_argb(path_to_file(Path::new("filter_4_rgb.bin")).as_path())?; + let (bmp, palette) = RgbaBitmap::load_png_file(path_to_file(Path::new("filter_4_rgb.png")).as_path())?; + assert!(palette.is_none()); + assert_eq!(ref_bytes, bmp.pixels); + Ok(()) + } + + #[test] + pub fn loads_larger_indexed_256color_images() -> Result<(), PngError> { + let ref_bytes = load_raw_indexed(path_to_file(Path::new("large_1_indexed.bin")).as_path())?; + let (bmp, palette) = IndexedBitmap::load_png_file(path_to_file(Path::new("large_1_indexed.png")).as_path())?; + assert!(palette.is_some()); + assert_eq!(ref_bytes, bmp.pixels); + + let ref_bytes = load_raw_indexed(path_to_file(Path::new("large_2_indexed.bin")).as_path())?; + let (bmp, palette) = IndexedBitmap::load_png_file(path_to_file(Path::new("large_2_indexed.png")).as_path())?; + assert!(palette.is_some()); + assert_eq!(ref_bytes, bmp.pixels); + + Ok(()) + } + + #[test] + pub fn loads_larger_rgb_images() -> Result<(), PngError> { + let ref_bytes = load_raw_argb(path_to_file(Path::new("large_1_rgba.bin")).as_path())?; + let (bmp, palette) = RgbaBitmap::load_png_file(path_to_file(Path::new("large_1_rgb.png")).as_path())?; + assert!(palette.is_none()); + assert_eq!(ref_bytes, bmp.pixels); + + let ref_bytes = load_raw_argb(path_to_file(Path::new("large_2_rgba.bin")).as_path())?; + let (bmp, palette) = RgbaBitmap::load_png_file(path_to_file(Path::new("large_2_rgb.png")).as_path())?; + assert!(palette.is_none()); + assert_eq!(ref_bytes, bmp.pixels); + + Ok(()) + } + + #[test] + pub fn load_fails_on_unsupported_formats() -> Result<(), PngError> { + assert_matches!( + RgbaBitmap::load_png_file(path_to_file(Path::new("unsupported_alpha_8bit.png")).as_path()), + Err(PngError::BadFile(..)) + ); + assert_matches!( + RgbaBitmap::load_png_file(path_to_file(Path::new("unsupported_greyscale_8bit.png")).as_path()), + Err(PngError::BadFile(..)) + ); + assert_matches!( + RgbaBitmap::load_png_file(path_to_file(Path::new("unsupported_indexed_16col.png")).as_path()), + Err(PngError::BadFile(..)) + ); + assert_matches!( + RgbaBitmap::load_png_file(path_to_file(Path::new("unsupported_rgb_16bit.png")).as_path()), + Err(PngError::BadFile(..)) + ); + assert_matches!( + RgbaBitmap::load_png_file(path_to_file(Path::new("unsupported_rgba_16bit.png")).as_path()), + Err(PngError::BadFile(..)) + ); + Ok(()) } } \ No newline at end of file diff --git a/ggdt/test-assets/png/filter_0_rgb.bin b/ggdt/test-assets/png/filter_0_rgb.bin new file mode 100644 index 0000000..b41afd2 Binary files /dev/null and b/ggdt/test-assets/png/filter_0_rgb.bin differ diff --git a/ggdt/test-assets/png/filter_0_rgb.png b/ggdt/test-assets/png/filter_0_rgb.png new file mode 100644 index 0000000..d6a1fff Binary files /dev/null and b/ggdt/test-assets/png/filter_0_rgb.png differ diff --git a/ggdt/test-assets/png/filter_1_rgb.bin b/ggdt/test-assets/png/filter_1_rgb.bin new file mode 100644 index 0000000..4e109e9 Binary files /dev/null and b/ggdt/test-assets/png/filter_1_rgb.bin differ diff --git a/ggdt/test-assets/png/filter_1_rgb.png b/ggdt/test-assets/png/filter_1_rgb.png new file mode 100644 index 0000000..26fee95 Binary files /dev/null and b/ggdt/test-assets/png/filter_1_rgb.png differ diff --git a/ggdt/test-assets/png/filter_2_rgb.bin b/ggdt/test-assets/png/filter_2_rgb.bin new file mode 100644 index 0000000..c316c83 Binary files /dev/null and b/ggdt/test-assets/png/filter_2_rgb.bin differ diff --git a/ggdt/test-assets/png/filter_2_rgb.png b/ggdt/test-assets/png/filter_2_rgb.png new file mode 100644 index 0000000..e590f12 Binary files /dev/null and b/ggdt/test-assets/png/filter_2_rgb.png differ diff --git a/ggdt/test-assets/png/filter_3_rgb.bin b/ggdt/test-assets/png/filter_3_rgb.bin new file mode 100644 index 0000000..e617fdf Binary files /dev/null and b/ggdt/test-assets/png/filter_3_rgb.bin differ diff --git a/ggdt/test-assets/png/filter_3_rgb.png b/ggdt/test-assets/png/filter_3_rgb.png new file mode 100644 index 0000000..7581150 Binary files /dev/null and b/ggdt/test-assets/png/filter_3_rgb.png differ diff --git a/ggdt/test-assets/png/filter_4_rgb.bin b/ggdt/test-assets/png/filter_4_rgb.bin new file mode 100644 index 0000000..94ab986 Binary files /dev/null and b/ggdt/test-assets/png/filter_4_rgb.bin differ diff --git a/ggdt/test-assets/png/filter_4_rgb.png b/ggdt/test-assets/png/filter_4_rgb.png new file mode 100644 index 0000000..3c8b511 Binary files /dev/null and b/ggdt/test-assets/png/filter_4_rgb.png differ diff --git a/ggdt/test-assets/png/indexed_8.bin b/ggdt/test-assets/png/indexed_8.bin new file mode 100644 index 0000000..8b77f5f Binary files /dev/null and b/ggdt/test-assets/png/indexed_8.bin differ diff --git a/ggdt/test-assets/png/indexed_8.png b/ggdt/test-assets/png/indexed_8.png new file mode 100644 index 0000000..0ddad07 Binary files /dev/null and b/ggdt/test-assets/png/indexed_8.png differ diff --git a/ggdt/test-assets/png/indexed_8_rgba.bin b/ggdt/test-assets/png/indexed_8_rgba.bin new file mode 100644 index 0000000..9d88ebe Binary files /dev/null and b/ggdt/test-assets/png/indexed_8_rgba.bin differ diff --git a/ggdt/test-assets/png/large_1_indexed.bin b/ggdt/test-assets/png/large_1_indexed.bin new file mode 100644 index 0000000..a13235a --- /dev/null +++ b/ggdt/test-assets/png/large_1_indexed.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貧Ũֵ۹հ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,Bpppppwxbwxbwbwxbwrbwxxbwxbwxxbwxx,,,,BH,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,kkkkkkkkkkkkkkkkkkkkkkkŨkֵյ۵,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,2,,,,,,,,,,,,,,,,,,,,, 4pppppppppw,,,,Sܼ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,jkjkkkkjkkkkkkkkkkkkkkkkkkkkֵܵ۵ñã,,,,,,,,,,,,,-,,,,,-,,,,,,-,,,,-,,,,,-,,-,,-,,,,,,,,,-,耀,,,-,НXXVSppwuuuuu,,,궸 --,,,-,-,,,,---,,,,,,,-,,,,-,,,,qcdjjjjkkkjkkkkkkkkkkkkkkkgkkkkkkkkֵ ñ,----------,-,--e------,,--,,----,,--------------,------,-----CНu}-,,A ,--,-,---,----,,---------- 5EgcbkkkjiijjkkkkkkkkkkkkkkFkkkkkkkkkֵ۵۵ ----------------AНu}---鲵I----------- + +4EggETSccrkkkkikkkkkkkkkkkkkkkkkSkkkkkkkkkֵ۹չ µµ깵¹¹¹µ----------------耀Нu}---鲴۪ETScrkkkjkkkkkkkkkkkkkkkkkdkkkkkkkkkֵܹ۵--..-----..-...--耀Нu{{{{dcr甔OkkkkkkkkOOkkkkkkkkkkkgkkkkkkkkkֵ۵۵õõõõFDD@BCõ..............AñНuecr甔甔甔OjkkkkkkkOOOOOkkkkkkkWhkkkkkkkkkֵ۵üúõõõFD@BDCõ............аМ55500005555d甔甔甔甔甔甔OjkkkkkkkOOOOOkkkkkSkkkkkkkkklֵ۵ֵEDDDDC/.///.//....Л55500005555d55;;0000444d瓔甔甔甔甔甔甔甔甔甔OjkkkkkkkOOOOkkkkkkkkkkkllllֵܵ۵hhhhfhEDDDDC/./.././////Л55;00005555d5;;;0000444d瓓甔甔甔甔甔甔甔甔甔甔甔甔OjkkkkkkkO OOOOOkkkkkUOOkkklllllֵܵ۵hfffdh///////// 3М5;;00003555d;;;50000444d甔甔OjkkkkkkkO OOOkkkkkOOOOONlllllֵܹյ۵hfffdh///////瀀Н;;400000555d;5520000444dOjkkkkkkkO OkkkkkE +OOONlllllַܷ۹òhfffdh/////2B瀀Н;5000000255d55200000444dOjkkkkkkkO OkkkkkXO  ONlllllֵܵ۵hhhhhh////瀀Н;0000000055d5;200000444dOjkkkkkk\O OkkkkkkkjO ONlllllֵ۵۵òhdddddh/ BRR瀀Н50000000045d55000000444dOjjkkkkkmO OkkkkkkkjO ONlllllôhhhhhhhbR瀀НOjkjjjkk]O OkkkkkkkjO ONlllllߡŴhdddddhНOjkkkkkkO OkkkkkkkjO ONlllll߻@[õhffffdh瀀НOjkkkkkkO OkkkkkkkjO ONlllllY߽@[ŵhffffdhıНOjkkkkkkO OkkkkkkkjO ONllllmXY]ZY@[÷НOjkkkkkkO OkkkkkkkjO ONllllmXX]YX@[õНOjkkkkkkO OkkkkklljO ONllllmWX]XX@[CCCCCCCCCCõ耀НOjkkkkkkO OkkkkllljO ONllllmVX\XX@[@@@@@@@A@@OIIIIIIIICŵНOjkkkkkkO OkkkkllljO ONllllmVV\XXPPPT@[BBBDBBBAB@OIICðñНFEDDDDccccccccccccccccccccccccDcc OjkkkkkkO OkkklllljOO ONllllmVV\XXPPPT@[FGIIIIIFDDOICBCCBICŰñН555500;;AAA@@@@@@@@@@AA44400;00d OjkkkkkkO OkkllllljO OOOONlllmmVV[XXPPPT@[AAAIAAAFB@OICCBCICõñ耀Н555500;;d44400;;;d  OjkkkkkkO OkkllllljO ONlllmmVVZXXPPPT@[AAAIAAAFB@OIBCCCICõñ耀Н5555004;d;;;00;;;dv   OjkkkkkkO OkkllllljO ONlllmmVVYXXPPPT@[FGIIIFFFDDOICBCCICŵñН555;003;d;;;00;;;d   OjkkkkkkO OkklllkljO ONlllmm\VVXXXPPPT@[BBBIAAAFA@OIBCBCICõñ瀀Н;55;000;d;;;;00;;;d  OjkkkkkkO OkllllkkjO ONlllmmXVXXXXPPPT@[BBBIAAAFA@OICBCCICõñ瀀Н;5;6000;d;;;;00;;;dx C  OjkkkkkkO OllllkkljO ONlllmmXUXXXXPPPT@[BBBEAAAF@@OIICŵñ瀀Н;5;3000;d;;;7007;;ddd  OjkkkkkkO llllllljO ONlllmmVUXXXPPPT@[km_mmmkkkkOIIIIIIIICõñ瀀Н;550000;d;;90000J;dddUE  OjkkkkkkO llllllljO ONlllmmUUXXVPPPT@[OIIIIIIIICõñ瀀Нdd OjkkkkkkO llllllljO ONlmmmmUUXVPPPT@[OIHGGGGHHC瀀НDDDDDDDDDDDDDDDDDd CQOjjkkkkkO llllllljO ONlmmmmXVPPPT@[OIIIIIIIIC瀀НdU OjjkkkkkO + + +llllllljO ONlmmmmVVPPPT@[OHGGGHGHIC瀀НOjjkkkkkO + + + OOllllllljO ONmmmmmVVPPPT@[OIIIIIIIIC瀀Н OjkkkkkkO +OOOOllllllljO ONmmmmmUVOPT@[OIIIIIIIIC瀀НU OjkkkkkkOOOOOOOllllllljO OOONmmmmmUU@[OIIIIIIIIC瀀Н蘘痔Ojkkkkk\OOOOOOOllllllljOOOOjjkmmmmmUUݨ@[ިڝ蘚蜜蜖Ojkkkkk]OOOOOOOlllkkllOOOjjkllmmmmmUUޜSbbb蝝蜜蜖OjkkkkkOOOOOOOOlkkllllkjjkllllmmmmmUYSSbba瞞OjkkkkkOOOOOOOOlllllllllllllllmmmmmDSSꞜOjkkkkkOOOOOOOOlllllllllllllllmmmmmcHEOjkkkkkOOOOOOOOlllllllllllllllmmmmmHDSSSFHHHOjkkjjkOOOOOOOOlllllllllllllllllmmmP[YEDSSꠠHHFOjkkkkkOOOOOOOOlllllklllllllllllmmmm޽ͼPQZ[YEDSSꠠEGEOjkkkkkOOOOOOOOllllljlllllllllllmmmm[YEDSSꠠOjkkkkkOOOOOOOONlllllkllkkllllllllmmm[YEDSꠠOjkkkkkOOOOOOOONllllllkjjllllllllllmm޼˺FDSꠠOjkkkkkOOOOOOOONllllllllkllllllklllmm޼˺FDSꠠkkkkkkOOOOOOOONllllllllkllllllkllllm޼YEEDSꠠkkkkkkkOOOOOOOONllllllllllllllkkllllm޼YEDDSꠠkkkkkllOOOOOOOONlllllllllllllkklllllm޼YEDDSꠠkkkkkllOOOOOOOONlllkllllllllllllllll޼YEDDRꠡkklllllOOOOOOOONllljklllllllllllllmZFDSaꠠlllllllOOOOOOOONlkjjllllllllllll}DSSSSSꠠlllllllOOOOOOOONlllklllllllllllEDDDSꠠlllkkllOOOOOOOONlllllllllllll}ݭEDDDSlkkllllOOOOOOOONllllllllllll}ݭݺTSSlllllllOOOOOOOONllllllllll}ݭ˺lllllllOOOOOOOONllllllllݭݺWWWVSRbSSǸlllllllOOOOOOOONlllllllݭݭhhhhhhhhhhhhhhhhXYllkjkllOOOOOOOONllllllݭݭlkjllllOOOOOOOONllllݭݭݭݭkljllllOOOOOOOOlll|ݭݭݭݭllkllllOOOOOOOOOl|ݭݭݭlllllllOOOOOOOOm|ݭݭݭlllllllOOOOOOO}ݭݭݭlllllllOOOOOݭݭݜlllllllOOOOݭݭݭݭݭlllllllOOݭݭlllllll~ݭݭݭllllllݭݭllllݭlllݭlݭlݭݭݭݭݽݽ̼ݭݽܼ̽ͽ̬ݭͽ̼̼ͽ̼ݭͽ̼ݽ̽ݭݭ̽ݽ̼ݭݭ̽ͽ̽ݭݭݽ̼ݭݭ̼ݽ̼ݭݭ̼ͽ̼ݭݭݭݭݭݭݭݜݭݭ̼ݭݭ̼ݭݭݭݭ̼ͽ̼ݭݭ̭ݽݭݭ̽̽ݭݭݭݭ̽ݭݭ̽ݭݭ̼ͽݜݭ̼̽ݭݭ̽ݭݭݭݭݭݭ̼ݭݭ̽ݭݭݭݭݭݭݭݭݭݭ̽ݽݭݭݭ̽ݽ̼ܭ̬ܭ̽̽̽ݽ̽̽̽ͭͽ̼̼̽̽ݽ̼̽̽ \ No newline at end of file diff --git a/ggdt/test-assets/png/large_1_indexed.png b/ggdt/test-assets/png/large_1_indexed.png new file mode 100644 index 0000000..62baf0e Binary files /dev/null and b/ggdt/test-assets/png/large_1_indexed.png differ diff --git a/ggdt/test-assets/png/large_1_rgb.png b/ggdt/test-assets/png/large_1_rgb.png new file mode 100644 index 0000000..bdf604e Binary files /dev/null and b/ggdt/test-assets/png/large_1_rgb.png differ diff --git a/ggdt/test-assets/png/large_1_rgba.bin b/ggdt/test-assets/png/large_1_rgba.bin new file mode 100644 index 0000000..a7b9fc9 --- /dev/null +++ b/ggdt/test-assets/png/large_1_rgba.bin @@ -0,0 +1 @@ +;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C?C?C?C;C;C?C;C;C;C;C?C;C?C;C;C?C?C;C;C;C;C?C;C;C;C;C;C?C;C;C?C;C;C?C;C;C;C;C;C;C;C;C;C?C?C?C;C?C;C;C?C;C;C;C;C;C?C;C?C;C;C?C?C?C;C;C;C;C?C?C?C;C?C;C?C;C;C?C;C;C?C;C?C;C?C;C;C?C;C;C;C;C?C;C?C;C;C?C?C;C;C?C?C;C;C;C?C?C;C?C;C;C;C?C;C?C;C?C;C;C;C;C;C;C?C;C;C?C;C;C;C;C?C?C;C;C;C;C;C?C;C;C;C;C;C;C;C;C?C;C;C?C;C;C;C?C?C?C?C;C?C;C;C;C;C?C;C;C?C;C;C?C;C;C;C;C?C;C;C;C;C;C;C;C;C;C;C?C?C;C?C;C?C;C;C;C;C;C;C;C?C;C;C;C;C?C?C?C;C;C;C;C;C;C;C;C?C;C?C;C;C;C?C;C?C;C?C;C;C;C;C;C;C;C;C;C;C;C;C?C;C;C;C;C;C;C?C;C?C;C;C?C;C;C;C?C?C;C;C;C;C;C;C?C;C;C;C;C;C;C;C;C;C;C?C;C;C;C;C;C?C;C;C;C?C?C;C;C;C;C;C;C;C;C?C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C;C?C?C;C?C;C?C?C?C?C?C?C?C?C?C;C?C?C?C?C?C?C?C?C;C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C;C?C;C?C?C?C?C?C?C?C;C?C;C?C;C?C?C?C?C;C?C?C?C?C?C?C?C?C?C?C?C?C?C;C?C?C?C;C?C?C?C;C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C;C?C;C?C?C;C?C?C?C?C?C?C?C?C?C?C?C?C?C?C;C?C?C?C?C?C;C?C?C?C;C?C;C?C?C?C?C?C;C?C;C?C?C?C?C?C;C?C;C?C;C?C?C?C?C?C?C?C?C?C;C?C;C?C?C?C;C?C?C?C;C;C?C?C?C?C?C;C?C?C?C?C?C?C?C?C;C?C?C?C?C;C?C?C?C?C?C;C?C?C;C;C?C?C?C?C;C;C?C?C?C;C;C;C?C;C;C?C?C;C?C?C?C;C?C?C?C?C?C;C?C?C;C?C?C?C?C?C;C?C?C;C?C?C?C?C?C?C;C?C?C?C?C?C?C?C;C?C?C?C?C?C?C?C?C?C?C?C?C?C?C;C?C;C?C?C?C?C?C?C?C?C;C?C?C?C?C;C;C?C;C;C?C?C?C?C?C;C?C?C;C?C;C?C?C?C;C;C?C?C?C?C;C;C;C;C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?G?C?C?C?C?C?C?G?G?C?C?C?C?C?C?C?C?C?C?C?G?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?C?G?C?G?C?G?C?G?C?G?C?G?G?G?G?G?G?C?C?G?C?G?G?G?G?C?C?G?G?G?G?G?C?G?G?G?G?G?C?C?G?G?G?G?G?G?G?G?G?C?G?G?C?G?G?G?C?G?C?C?G?G?G?C?G?C?G?G?G?C?G?C?C?G?G?G?C?G?C?C?G?G?C?G?G?G?C?C?G?C?G?G?G?G?G?G?G?C?G?G?C?G?C?C?G?C?G?G?G?G?G?C?G?C?G?G?C?C?G?C?G?G?C?C?C?C?C?G?C?C?C?C?G?C?G?C?C?C?C?C?G?C?C?C?G?G?G?G?G?C?G?G?G?G?G?G?C?G?C?G?G?G?C?C?G?C?G?C?C?C?C?G?C?C?C?C?G?C?G?C?G?G?C?C?C?C?G?G?G?C?G?C?C?G?G?G?G?C?C?C?G?G?C?G?G?C?C?C?G?G?C?G?G?C?C?G?G?G?G?G?C?G?G?C?C?C?C?G?G?G?G?G?C?C?C?C?G?G?G?G?G?G?C?C?C?C?C?G?C?C?G?G?G?C?G?C?C?C?G?C?G?C?G?G?G?G?C?C?G?C?C?G?G?G?G?C?G?C?C?C?C?C?G?C?G?G?G?C?G?C?C?G?G?G?G?G?C?C?G?G?G?C?C?G?C?C?G?G?C?C?G?C?C?G?G?C?G?G?C?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?GCG?G?GCG?G?GCGCG?G?G?GCGCGCG?G?G?GCG?GCGCG?GCG?G?GCGCGCGCGCG?G?G?GCG?G?G?GCG?G?GCG?GCG?GCG?G?GCG?GCG?G?G?G?GCG?G?G?G?GCGCGCG?G?GCG?GCG?G?G?GCG?G?GCG?G?GCG?G?GCGCGCG?G?G?G?GCG?GCGCG?GCG?GCG?G?GCGCGCG?GCG?GCG?G?G?GCG?G?GCGCG?G?G?G?GCG?G?G?G?G?G?G?G?G?G?GCG?G?G?G?G?G?G?G?G?G?G?G?G?G?GCG?G?G?GCG?GCG?G?GCG?G?GCG?G?G?G?GCG?GCG?GCGCG?GCG?G?GCG?G?G?G?G?G?G?G?G?G?GCGCG?G?GCGCGCG?GCG?GCG?G?G?G?G?G?GCGCG?GCGCG?G?G?G?G?G?G?G?GCG?G?G?G?G?GCGCG?G?G?G?G?G?G?G?G?G?GCG?G?G?G?G?GCG?GCGCG?GCGCGCG?G?GCGCG?G?G?G?G?G?G?GCG?G?G?G?G?GCG?G?GCG?G?GCG?G?G?G?G?G?GCG?GCGCG?G?GCG?G?GCG?GCG?GCGCGCG?G?G?GCG?G?G?GCGCG?G?G?GCG?G?G?G?G?G?G?G?G?G?G?G?G?G?G?G?GCG?G?G?GCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCG?GCGCGCGCGCGCGCGCGCG?GCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCG?G?GCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCG?GCG?G?G?GCGCGCGCGCG?GCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCG?G?GCG?GCGCGCGCG?GCGCG?GCGCGCGCG?GCG?GCGCG?GCGCGCGCGCGCG?GCGCGCGCGCGCG?GCGCGCGCGCGCGCGCGCGCGCG?GCGCGCG?GCGCGCG?GCG?GCGCGCGCGCG?GCGCGCGCGCGCGCG?GCGCGCGCGCGCGCGCGCGCG?GCG?GCGCGCGCGCGCGCGCGCG?GCG?GCG?GCGCGCGCGCG?GCG?GCGCG?G?GCG?GCGCGCGCGCGCGCGCGCGCGCGCG?G?GCGCGCGCGCGCGCGCG?G?GCGCGCGCG?GCGCGCGCGCGCG?GCG?GCGCGCGCGCGCGCG?GCG?GCG?GCGCGCGCGCGCG?GCGCG?GCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGGKGKCGCGCGCGCGCGCGCGCGCGCGCGGKCGGKCGGKCGCGCGCGCGCGCGGKCGCGCGCGCGCGGKCGCGCGCGCGCGCGCGCGCGCGCGCGGKCGCGCGCGCGCGCGCGGKCGCGCGGKGKCGGKCGCGGKGKCGCGGKCGCGCGGKCGCGCGCGCGCGCGCGCGCGCGCGCGCGGKCGGKCGCGCGCGGKCGCGCGCGCGCGCGGKCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGGKCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGCGGKGKGKGKGKCGGKGKCGGKGKGKGKGKGKGKGKGKGKGKGKGKCGGKGKGKGKGKGKGKCGGKCGGKCGGKGKGKCGGKCGGKGKGKGKGKGKGKGKGKGKGKGKGKGKCGGKGKGKGKGKGKGKCGGKCGGKCGGKGKGKGKGKGKCGGKGKCGGKCGGKCGGKGKCGGKCGCGGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKCGCGGKCGGKGKGKCGCGGKGKCGGKGKCGGKGKGKGKGKGKGKCGGKGKGKCGCGGKCGGKCGGKGKCGCGGKGKCGGKGKCGGKCGGKCGCGCGCGCGGKGKCGGKCGGKCGGKCGGKCGCGGKGKCGGKGKCGGKCGGKGKGKGKCGGKGKCGGKCGGKGKGKCGGKGKCGGKCGGKCGCGGKGKCGCGCGCGCGGKCGGKCGGKGKGKCGCGGKCGCGCGGKGKGKGKGKGKGKCGCGCGCGCGGKGKGKGKGKCGGKGKGKGKGKGKGKGKGKCGCGCGCGGKGKCGCGCGGKCGGKCGGKCGCGGKCGGKGKGKGKGKGKCGGKCGCGCGCGGKGKCGGKCGGKGKCGGKGKCGGKGKGKCGCGGKGKGKCGGKCGGKCGGKGKGKGKGKCGCGCGCGCGCGGKGKGKGKGKCGGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKKOGKGKKOGKGKGKKOGKGKKOGKKOKOGKGKKOGKKOKOGKKOKOKOGKKOKOKOGKKOGKKOKOKOKOKOGKKOKOKOGKGKGKGKKOKOGKGKGKGKGKKOKOKOGKGKKOKOGKGKGKGKGKKOKOKOGKGKGKGKGKKOGKKOGKGKKOGKKOGKKOGKGKGKKOKOKOKOKOGKKOKOKOGKGKGKGKKOGKGKGKGKGKGKKOGKGKGKKOKOGKGKGKKOGKKOGKGKGKGKGKGKGKGKKOKOGKGKGKGKKOGKGKGKGKGKGKGKGKGKGKGKGKKOGKGKKOGKKOKOGKGKGKGKGKKOKOGKKOGKGKKOGKGKGKGKGKGKKOGKGKGKGKGKKOGKGKKOGKGKGKGKKOKOKOGKKOGKGKGKKOGKKOKOGKKOGKGKGKGKGKGKKOGKKOGKKOGKGKKOGKGKKOGKGKGKGKGKGKGKGKGKGKGKGKGKGKGKKOGKGKGKGKGKKOGKGKGKGKGKKOGKGKKOGKGKGKGKGKGKGKGKGKGKKOGKKOGKGKGKKOGKKOGKGKKOGKKOGKGKGKGKGKGKKOGKGKGKKOGKKOKOGKGKGKGKKOKOGKGKGKGKGKKOGKGKGKGKGKGKGKGKGKGKGKGKKOGKGKGKKOKOGKKOGKGKKOGKGKKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOOOOOSSKOKOKOKOKOKOKOKOKOKOKOKOKOKOGKKOKOKOKOKOKOKOGKKOKOGKKOKOKOGKKOKOKOGKKOKOGKKOKOGKKOKOKOKOKOKOKOKOKOKOKOGKKOKOKOKOKOKOKOKOKOKOKOKOGKKOGKGKGKKOKOKOGKKOGKGKKOKOKOKOKOKOKOGKKOGKGKKOKOKOKOKOGKGKGKKOKOGKKOGKKOGKKOKOKOKOKOKOGKKOKOKOKOKOKOKOKOKOKOKOGKKOKOKOKOGKKOKOKOKOKOKOGKKOKOGKKOKOKOKOKOKOKOKOKOKOKOGKKOKOKOKOKOKOKOGKKOKOGKKOKOKOGKKOKOGKKOKOGKKOGKKOKOKOKOKOGKKOKOKOGKKOKOKOGKKOKOKOKOKOKOKOKOKOKOKOKOKOGKKOGKKOKOKOKOKOKOKOKOGKGKKOGKGKKOGKGKKOKOKOGKKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOSSWWSSKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOOOKOKOOOOOKOKOKOKOKOKOKOKOKOOOOOKOKOKOKOKOKOKOKOOOOOOOKOKOKOOOOOKOOOKOKOOOKOKOOOOOKOKOOOKOOOKOKOKOOOKOKOKOKOKOOOKOOOOOKOKOKOKOOOOOOOKOOOKOKOKOKOOOKOKOOOOOKOKOOOOOOOKOOOOOKOWWWWSSOOKOKOKOOOOOKOOOOOKOKOKOKOOOOOKOKOKOKOKOKOKOKOOOOOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOOOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOOOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOOOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOOOKOKOKOKOKOKOKOKOKOKOOOKOKOKOKOKOOOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOOOKOOOOOOOOOOOOOKOOOOOKOOOKOOOKOKOOOKOOOOOOOOOOOOOOOKOOOOOOOKOOOOOKOOOOOKOOOOOOOOOKOOOOOOOOOOOKOOOOOOOOOKOOOKOOOOOKOOOOOOOKOOOOOKOOOOOOOOOOOOOKOOOOOOOOOOOOOOOOOKOOOOOOOOOOOOOWWc[WWOOOOOOOOOOOOKOOOOOOOOOOOOOKOKOKOOOKOOOOOOOKOOOOOOOKOOOKOKOKOOOOOKOKOOOOOOOKOKOKOOOOOKOKOOOOOKOOOKOKOOOKOKOOOOOOOOOOOOOOOOOOOOOKOOOKOOOOOOOOOOOKOKOOOOOOOKOOOKOKOKOKOKOOOOOOOKOOOOOKOOOKOKOKOKOOOKOOOOOOOOOKOKOOOOOOOOOKOOOOOOOOOOOOOOOOOKOKOOOOOOOOOKOKOOOKOKOKOOOKOKOKOKOOOOOKOOOKOOOOOKOOOOOOOOOKOOOOOKOKOKOKOOOOOOOKOOOKOOOOOOOKOOOOOOOOOOOKOOOOOKOOOKOKOKOKOOOKOKOKOKOKOKOKOKOOOOOOOKOKOKOKOOOKOOOOOOOKOKOOOKOKOOOKOOOOOOOOOOOOOKOOOKOOOKOKOOOOOOOOOOOKOOOOOOOKOOOKOKOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO[[c[[[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOSSOOOOOOOOOOOOSSOOOOOOOOSSOOOOOOOOOOOOOOOOOOOOOOOOOOOOSSOOOOOOOOOOOOOOSSOOOOSSSSOOOOOOOOSSOOOOOOOOOOOOOOOOSSOOOOOOOOOOOOSSOOOOOOOOOOOOOOOOOOSSOOSSSSOOOOOOOOOO[[c[[[W[OOOOOOOOOOSSOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOSSOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOSSSSOOSSSSSSOOOOOOOOSSOOOOSSSSSSSSSSOOSSSSSSSSOOSSSSOOSSSSOOSSSSOOOOSSSSSSOOOOSSSSSSOOOOOOSSSSOOSSSSSSSSOOOOSSOOOOOOSSOOOOOOSSOOOOSSSSOOSSSSOOOOSSSSSSSSOOOOSSSSSSOO[[gcgc[[SSOOSSSSOOSSSSOOSSSSOOSSSSSSSSSSOOSSSSOOOOOOSSSSSSSSSSOOSSSSOOOOOOOOSSOOSSSSSSOOSSSSSSOOOOOOOOSSOOSSOOSSOOOOOOOOOOSSSSSSOOOOOOOOSSOOSSOOSSSSOOSSOOOOSSOOOOOOSSOOSSOOOOOOOOOOOOOOSSOOSSOOOOSSOOOOOOOOOOOOOOOOOOOOOOSSSSOOOOSSSSOOOOSSSSOOOOOOSSOOSSOOSSOOOOSSSSOOSSOOOOSSOOOOOOSSOOSSOOOOOOOOOOOOSSOOOOOOOOSSSSSSSSOOSSSSOOOOOOSSOOOOOOOOSSOOOOSSSSSSSSSSOOSSSSSSOOSSOOOOSSOOOOOOOOOOSSSSOOOOOOOOOOOOSSOOOOOOOOOOOOOOOOOOSSOOOOOOOOOOOOOOOOSSSSOOSSSSOOOOOOOOSSOOOOOOOOOOSSOOOOOOSSOOSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSgckkgcc[SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSOOSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSOOOOSSOOSSSSSSSSSSSSOOSSSSSSOOSSSSOOSSSSSSSSOOSSSSOOSSSSSSOOSSSSSSSSSSSSSSSSSSOOSSSSSSSSSSSSOOSSSSSSSSSSSSSSSSSSSSSSSSSSSSOOSSOOSSSSOOSSOOSSSSSSOOSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSOOSSSSSSSSSSSSSSOOSSOOSSSSSSOOSSOOSSSSSSOOSSSSSSSSSSSSSSSSOOSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSOOSSSSSSSSSSOOSSOOSSSSOOSSSSSSSSSSSSOOSSSSOOSSSSSSSSSSSSSSSSOOSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSW[[[gg{wgc[[SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSWWSSSSSSSSSSSSWWWWSSSSSSSSSSSSSSSSWWWWWWSSWWSSSSWWWWSSSSWWSSWWSSSSSSSSWWSSWWSSSSSSWWSSWWWWWWSSSSWWWWSSWWSSWWSSSSSSWWSSWWSSSSSSWWSSSSSSSSWWSSWWWWSSWWSSSS[[[[c[kkkkc[SSWWWWWWSSSSSSSSSSWWSSWWSSSSWWSSWWSSWWWWSSWWSSWWSSWWSSWWWWSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSWWSSWWSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSWWSSSSSSWWSSSSSSSSSSSSSSSSSSWWSSSSSSSSSSSSSSSSSSSSWWSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSWWSSSSSSSSWWSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSWWSSSSSSSSSSSSSSSSSSSSSSWWWWSSSSSSSSSSSSSSSSSSSSSSSSSSSSWWSSSSSSSSSSWWSSSSSSSSSSSSSSWWSSSSWWSSSSSSSSSSSSSSSSSSSSSSSSSSSSWWSSSSSSWWWWWWWWWWSSWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWSSWWWWWWWWWWWWWWWWSSWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[[[[c[sowsc[WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWSSSSWWSSWWWWSSWWSSSSSSWWSSWWWWSSWWWWWWSSSSWWWWWWWWSSSSWWWWSSSSWWWWWWWWWWWWWWWWWWWWWWWWSSSSWWSSWWSSWWSSWWWWWWWWSSWWSSWWSSSSSSSSWWSSWWSSWWWWWWSSSSWWWWWWWWWWWWSSWWWWWWWWWWWWSSSSWWSSWWWWWWSSWWSSWWSSWWSSWWWWWWWWWWWWWWWWWWSSWWSSSSWWSSSSSSWWSSSSSSWWWWSSSSWWWWSSWWSSWWSSSSWWWWWWWWWWSSSSWWWWWWWWSSWWWWSSSSSSWWWWSSSSWWSSWWSSWWWWWWWWWWWWWWSSWWWWSSSSSSWWSSSSWWWWSSSSSSWWSSWWSSSSWWSSWWWWSSWWWWWWWWWWWWSSWWWWSSWWWWWWWWSSWWSSWWSSWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[[gc׳sogcc[WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[WWWWWWW[WWWWWWW[WWW[WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[WWWWW[WWWWWWW[WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[WWWWW[W[WWWWW[WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[[sogcc[WWWWWWWWWWWWWWW[WWWWWWWWWWWWWWWWWWWWWWWWW[WWWWWWWWW[WWWWW[WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW[W[W[WWWWW[W[W[W[W[W[W[WWW[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[WWW[W[W[W[WWWWW[WWW[W[W[W[W[W[W[W[WWWWW[W[W[W[W[W[W[WWW[W[WWW[WWW[W[W[W[W[W[W[WWW[WWW[W[WWW[c[ggc[c[W[W[W[W[W[W[W[W[WWW[WWWWW[WWW[W[W[W[W[W[W[W[W[W[W[W[WWW[W[W[W[W[WWW[W[WWWWWWWWW[WWW[WWWWWWWWW[W[WWWWWWWWWWWWWWWWWWW[W[W[WWW[W[WWWWW[W[W[WWWWW[WWW[W[WWWWWWW[W[WWWWWWWWWWWWWWW[W[WWWWWWWWW[W[WWWWWWWWWWWWW[WWWWWWW[WWWWW[WWWWWWWWW[W[WWWWWWWWWWWWWWWWW[WWWWWWW[W[WWWWWWWWW[W[WWW[W[W[WWWWWWW[W[W[WWWWWWWWW[W[WWWWWWWWWWW[W[WWWWWWWWW[WWWWWWW[WWWWWWWWWWW[WWW[WWWWWWWWWWWWWWWWWWWWWWW[WWW[WWWWWWW[W[WWWWW[W[WWWWWWW[WWW[WWW[WWW[W[W[WWWWWWWWWWWWWWW[WWW[W[W[WWW[WWWWW[WWW[W[WWW[W[W[WWWWWWW[WWWWWWW[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[WWW[WWWWW[W[W[W[W[WWW[W[WWW[W[W[W[WWW[W[W[WWW[WWW[W[W[W[W[W[WWW[W[WWW[W[W[W[W[W[W[W[W[WWW[W[W[W[W[W[W[W[W[W[W[W[WWWWW[W[W[W[W[W[W[W[W[W[WWW[W[W[WWW[W[W[WWW[W[W[W[W[W[W[W[W[W[WWWWW[W[W[W[W[W[WWWWW[W[W[WWW[W[W[W[WWWWW[W[W[W[W[W[WWW[W[W[W[WWW[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[WWW[W[W[W[W[W[W[WWWWW[W[W[W[W[W[W[W[W[W[WWW[W[WWW[W[W[W[W[W[W[W[W[W[W[WWW[WWW[W[W[W[W[W[W[W[W[W[WWW[W[W[WWW[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[[[[[W[[[[[[[W[[[[[[[W[[[[[[[[[W[[[W[[[[[[[[[[[W[W[[[W[W[[[W[[[[[W[[[W[W[[[[[[[[[W[[[[[W[W[W[[[[[[[W[W[[[[[W[W[W[[[[[W[W[[[W[[[[[W[[[W[[[W[[[[[[[W[W[[[[[W[[[W[[[[[W[W[W[[[[[W[[[W[[[[[W[W[[[[[W[[[[[[[[[[[W[W[W[[[[[[[W[W[W[[[[[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[[[W[W[W[W[W[W[W[W[W[W[W[W[W[W[[[W[W[[[W[W[[[W[W[W[W[W[W[W[W[W[[[[[W[W[W[W[W[W[[[W[W[W[[[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[[[W[W[W[W[W[W[W[W[[[[[W[W[W[W[W[W[W[W[W[W[W[W[W[[[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[[[W[W[[[W[W[W[W[W[W[W[W[[[W[W[W[W[W[W[W[[[[[W[W[W[W[W[W[[[W[W[W[W[W[W[W[W[W[W[W[W[[[W[W[W[W[W[W[W[[[W[W[W[W[W[W[[[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[W[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[W[W[W[[[[[[[[[W[[[[[[[W[[[[[[[W[[[[[W[[[W[[[[[[[W[W[[[[[W[W[[[W[W[W[[[[[[[[[[[[[W[[[[[[[W[[[[[[[W[[[W[[[[[[[W[W[[[W[[[[[[[[[W[[[W[W[[[W[W[W[W[W[W[[[W[W[[[[[W[W[W[[[[[W[[[[[[[W[W[[[W[[[W[W[[[W[W[W[W[[[[[W[[[[[[[[[[[[[[[[[[[[[W[[[W[W[[[W[W[W[W[W[W[W[[[[[W[[[W[[[[[[[[[W[[[W[[[W[[[[[[[W[W[W[[[[[[[W[[[[[W[W[W[[[W[[[W[[[[[W[[[[[[[[[W[[[[[W[[[W[[[[[[[W[W[[[[[W[W[W[W[W[W[[[[[[[[[W[W[[[[[W[W[[[W[[[W[W[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[c[c[c[[[c[c[[[[[c[[[[[c[c[[[[[c[[[[[c[c[c[[[c[c[[[c[[[[[[[[[c[c[[[c[[[c[c[[[c[[[c[[[[[[[[[c[[[[[[[[[c[[[[[c[[[c[[[c[[[[[c[c[c[c[[[[[[[[[[[[[c[c[[[[[c[c[c[[[c[[[[[[[c[c[[[[[c[[[[[[[[[[[[[c[[[c[[[[[c[[[c[[[c[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[c[c[c[c[c[c[c[[[c[c[[[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[[[[[c[c[c[[[[[c[c[c[c[[[c[c[[[c[[[c[[[c[c[[[c[[[c[c[c[c[c[c[c[c[c[c[[[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[[[[[c[[[[[c[c[c[c[c[c[[[c[c[c[c[c[c[c[c[c[c[c[c[[[c[[[[[c[c[c[[[[[c[c[[[c[[[c[[[c[[[[[[[[[[[c[[[c[c[c[c[[[[[c[c[c[c[c[c[[[[[[[c[c[[[c[[[c[[[[[[[c[[[[[[[[[c[[[c[c[c[[[c[[[[[[[c[[[[[[[c[c[[[[[c[c[[[c[[[c[c[[[[[c[[[c[[[c[c[[[[[c[[[c[c[c[c[c[[[c[[[[[[[[[[[[[[[c[[[[[[[[[[[[[[[c[[[c[c[[[c[c[[[[[[[c[c[c[[[[[[[[[[[[[[[c[c[[[[[[[[[c[c[[[[[[[[[[[[[[[[[c[c[c[[[c[c[[[[[c[[[[[c[c[[[[[[[c[c[c[[[c[[[[[[[c[[[[[[[[[c[c[[[[[c[[[[[c[[[[[[[[[[[c[[[c[c[[[[[[[[[c[c[[[[[c[[[[[[[c[[[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[[[c[c[c[c[[[c[c[[[c[c[c[c[[[c[c[[[c[c[c[c[[[c[c[[[c[c[c[c[c[c[c[c[c[c[c[[[c[c[c[c[c[c[c[c[c[c[[[c[c[[[[[c[[[c[c[c[c[c[c[c[c[c[c[c[c[c[c[[[c[c[c[[[c[c[c[[[[[c[c[[[c[c[c[c[[[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[[[c[c[c[c[c[c[c[c[c[c[c[c[c[c[[[c[c[c[c[c[c[[[[[c[c[c[c[c[c[c[c[[[c[[[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[[[c[c[c[c[c[c[c[c[c[c[c[c[c[[[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c['[+k3w7c[c[c[gcc[c[c[c[c[c[c[c[c[gcc[c[c[c[c[c[c[c[gcc[c[c[c[c[gcc[gcc[c[c[gcc[c[c[c[c[gcc[c[c[c[c[c[c[c[c[c[gcc[gcc[c[c[c[c[c[c[c[c[c[c[c[c[c[c[gcc[c[gcc[c[c[c[c[c[c[c[c[c[c[gcc[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[gcc[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c['[+k3w7c[c[gcgcgcgcc[gcgcc[gcc[gcgcgcgcgcgcgcc[c[gcgcc[c[gcgcgcgcgcgcc[gcc[c[gcgcgcgcgcgcgcgcgcgcc[gcc[c[gcgcgcgcgcgcgcc[gcc[c[gcc[gcgcgcc[gcc[c[gcc[c[c[gcc[c[gcgcgcgcc[gcgcc[gcgcgcgcc[gcgcc[gcgcgcgcgcc[c[c[gcgcgcgcc[gcgcgcgcc[c[c[c[c[gcc[c[c[c[c[c[c[c[c[c[gcc[gcc[c[gcc[gcc[c[c[c[c[c[c[c[c[c[c[c[c[c[gcc[c[c[c[c[c[c[c[c[c[c[gcgcc[c[c[gcc[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[gcc[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[gcc[c[gcc[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[c[gcgcc[c[c[gcc[c[c[c[c[gcc[gcc[c[c[c[c[c[c[c[c[c[c[c[c[gcc[c[c[c[c[c[gcc[c[c[c[c[c[c[c[c[gcc[c[c[c[c[gcc[c[c[gcc[gcc[c['[+k3w7gcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcc[gcc[gcgcgcc[c[c[gcgcgcgcc[c[gcgcgcgcc[gcgcgcc[gcgcc[gcgcgcc[gcc[gcc[gcc[gcgcc[gcgcgcc[gcc[gcc[c[gcgcc[c[gcgcgcgcc[gcgcgcc[gcc[c[gcgcgcc[gcgcgcc[gcgcgcgcc[gcgcc[c[c[c[c[c[c[gcgcgcc[gcgcc[gcgcgcc[c[c[gcgcgcgcgcgcc[c[gcc[c[c[c[c[gcgcc[gcgcgcc[gcc[gcc[gcgcgcc[c[c[gcc[gcgcgcgcc[gcgcc[c[gcgcc[c[gcgcgcgcgcc[gcgcgcgcgcgcgcgcc[gcgcc[gcgcgcc[gcgcgcgcgcgcc[gcgcgcc[gcgcgcc[gcgcgcc[gcgcc[gcgcgcc[c[gcc[gcgcgcgcgcgcc[gcgcgcc['[+k3w7gcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgc[[[??[/3_'['[+k3wgggggcgggggcgggcgggcgggcgggcgcgggcgggcgcgcgggcgcgcgcgcgggcgggcgcgcgcgcgggcgggcgcgcgcgggggcgggggggggggcgcgcgggcgcgcgcgggcgcgggggcgcgggggcgcgcgcgggcgggggcgggggggggggcgcgcgcgcgggggcgggcgcgggggggcgcgggcgcgggggcgcgcgcgcgggcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgcgc[[[??[/3_/3_'['['['['[+k3wgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggcgcgcgggcgcgcgcgcgggggcgggggcgcgcgcgcgcgcgggcgggggcgcgcgcgcgcgcgcgggcgcgcgcgcgcgggggggcgcgcgcgggggcgggcgcgggcgggcgcgggggggcgcgcgggcgggcgcgggcgcgggcgggcgggcgggcgcgcgcgggcgcgggcgggggggcgcgcgggcgcgcgggcgcgcgcgcgcgggggcgcgcgcgcgcgcgggggggcgcgcgcgcgggcgcgcgcgcgcgcgcgcgggcgcgcgggcgggggggggcgcgggggggcgcgcgcgcgggggggcgcgggggcgcgggggcgggcgcgggggggggggcgcgcgcgcgcgggcgcgggggcgcgcgggggcgggcgcgcgcgcgg[[[??[/3_/3_/3_'['['['[7'K'['[+k3wgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggcgggggcgcgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggcgggggggggggggggggggggggggggggggggggggggggggggggggggggggcgggggggggggggggggggcgggggggggggcgggcgggggggggcgggggggggggggggggggggggggggcgggggggggggggggggggggggggggggggggggggggggggggggggggggggcgggggggggggggggggggggggggggggggggggggggggggggggggggcgggcgggggggggggggggggggggggggggggggggggggg[[[[[??[??[/3_'['['['['[7'K'['['K'K'['[+k3wggkkggggggggggggggggggggkkkkggggkkggggkk'[+k3w7?ggggggkkkkggggggggggggggggggggkkggggkkkkggkkggggggggggkkggggggggggggkkkkggggggggkkkkkkggggggggggkkkkggggggggggggkkggggkkggggkkggggggggggggggkkkkggkkgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg3w'['['['['[7'K'['['K'K'['['['K'['[+k3wggggggkkkkkkkkggkkggkkkkggggggggkkkkkkkk'[+k3w7?kkkkkkggkkkkkkkkkkggkkkkggggkkkkkkggkkkkkkkkkkkkkkggkkkkkkkkkkkkkkkkkkkkggkkkkkkggkkggkkkkkkkkkkkkggkkkkkkkkkkggkkkkkkkkkkggkkkkkkggkkkkkkkkkkkkggkkkkggkkkkggkkkkkkkkkkggggggggkkkkggggggkkggggggggggggggggggggggggggggggggggggggggggggggggggggkkggggkkggggggggggggggggggggggggggggggkkggggkkggggggggggggkkggggggggggggggggggggggggggkkkkggggkkggggggggggggggggkkggggggggkkggkkggkkggggggggkkggggggggggggggggggggggggggggggggggggggggggkkggggggkkggggggggggggggggggkkggggggggggggggggkkkkggggggggggkkggggggggggggggggggggggggggkkggggggggggggggggggkkgggggggggggggggg3w'[7'K'['['K'K'['['['['['['['K'K'[+k3wkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk'[+k3w7?kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkggkkggkkkkkkkkkkkkkkggkkkkggkkkkkkggkkkkggkkkkggkkkkggggkkkkkkkkkkkkkkkkkkggggggggkkkkkkkkkkkkkkkkkkggggkkkkggkkggkkkkggggkkkkggkkggkkggggkkkkggkkkkkkkkkkkkggggkkkkkkkkkkkkkkkkkkggkkkkkkggkkggkkkkkkkkkkggggkkkkkkkkkkkkkkggkkkkggggkkggggkkggggkkkkkkggkkkkkkkkkkkkkkkkggggggkkkkkkkkggkkggkkggkkkkggggggkkkkkkggggggkkkkggkkkkkkggkkggkkkkkkkkggkkkkggkkkkkkkkggggkkkkggggkkkkggggkkkkgg3w'['K'K'['['['['['['['['['['['K'K'[+k3wkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk'[+k3w7gSkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkksokkkkkkkkkkkkkkkkkkkkkkkkkkkkkksokkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk3w'['['['['['['['['['['['['['['K'K'[+k3wkkkkkkkkkksososososokkkksokksokksokkkkkk'[+k3w7kksosokkkksosososososokkkkkkkksosokksokksokksokkkksosososososokkkksososokksososososokksosokkkksokksokkkksosokkkksososososososokksosokksokkkksosososokksosososokksokksokksokkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk3w'['['['['['['['['['['['['['['K'K'[+k3wsosososososososososososososososososososo'[+k3w7sososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososokkkkkkkksokksosokkkksokksokkkkkksososokkkkkkkksososokkkkkksokkkkkkkkkkkkkksokkkksokksokksokksokksokkkkkkkkkkkksokkkkkksokksokkkksokkkksokksosososokkkkkkkksosososososokksosokksokkkkkksosokkkksosokkkksososokkkkkkkkkksokkkkkkkksosokkkksosokkkkkksosokksososokksokksosokkkkkksososokksosokkkksokkkkkkkkkksosokkkkkkkksokkkksokkkkkkkksokksokkkkkksokkkksosokksokkkkkkkkkkkksosokksokksosokkso3w'['['['['['['['['['['['['['['K'K'[+k3wsosososososososososososososososososososo'[+k3w7sosososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososokksokksososososososokksosokkkksososososososososososososososososososososososososokksososokksosososososososososososososososokksosososososososososososososososokksosososososososokksosososososososososososososososososososososososososokksosososososososososososokksosososososososososososokksosososososososokksosososososososososokksososososososo3w'['['['['['['['['['['['['['K'K'Ksosowssosososowswssososowssosososows'[+k3w7wssososowssososososososowssowswssosowswswssososowssososososososowssososowssowssowswssowssowswssowssosowssosowssososososososowssowssosowswswssosowssososososososososowssowssososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososososo3w'['['['['['['['['['['['['['K'K'KïÓsosososowswswswssowswswsws'[+k3w7sowswswswswswswswswswssowswswswswswswswswswswswswswswssowswswswswswswswswswswswswssowswssosowswswswswswswswswswswswswswswswswswswssowswswswswswswswswswswswswswswswswssowssosososososososososowssososowssososososososososososososososososowssososowssosowssowssosososososowssososososowswssososososososososososososososososowssosowswssososowssosososowssowssosowswssososososososowssosososowssowssosososowssososososososososososowswssososososowssosowssowssososowssososowssowssososowssosososowssowssosososowswswswssososososowswssososososososososowssososososososows3w'['['['['['['['['['['['['K'K'K'KÓsowswswswswswsws'[+k3w7wswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswssowswssowssowssowswswswswssowswssowswswswswssowswswswswssososososowswssowswswssowssosowssosososososowswssowssowswssosowswswswssosowswswssosowswssososowssowswswswswssowswssosowssowssosowswssowswssosowswswswswswssowssosowssowswswswswswswswssososowswswswssososowssosososowswswswswswssowssowswssosowswswswswswswswswswswswswssowswssowswswswswssowswswssosowssowswswswssowssowswswssosowsso3w'['['['['['['['['['['['['K'K'K'K'[3w'gïÓws'[+k3w7{w{wwsws{wwswswswswswswsws{wwswswswswswswswswswswswswswswswswswswswswswswsws{wws{w{wwswswswswswsws{wwswswsws{wwswswswswswsws{wws{wwswswswswswswswswswswswsws{wwswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswsws3w'['['['['['['['['['['['['K'K'K'K'[3w7##G{SSkk+k3w7{wws{w{wws{w{wwswsws{w{w{wws{w{w{w{w{w{w{w{wws{w{w{w{w{wws{w{wws{w{wwsg{w{w{wws{w{w{w{w{wws{w{w{wws{w{wws{w{w{w{wwsws{w{w{wwsws{wwswsws{w{w{w{wws{w{w{w{wwswswsws{w{wwswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswswskkk+k'['['['['['['['['['['['K'K'K'K'K'[3w7##G{###S[g{Ó{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{wK{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{wg{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{wwswswsws{w{w{w{wwsws{wwsws{wwswswswswswswswswswsws{w{wwsws{wwswswswswswsws{wwswswswsws{wwswswswswsws{w{w{wwswswsws{wws{wwswswswsws{w{wws{w{w{wwsws{wwsws{w{wwsws{wws{wws{wws{w{w{wwsws{w{wws{wws{w{wws{w{wws{wwsws{wwsws{wws{wws{w{wwsws{wwswswswsws{wwswswsws{w{wwswswswsws{w{wws{wwswsws{w{wws{w{w{wws{wws{wwsws{w{w{wwswsws{wwsws{w{w{w{wws{wwswswsws{wws{w{wwswswsws{wws{w{w{w{wwsws{wGGo+k'['['['['['['['['['['['K'K'K'K'K+k3w7##G{###3kG{###SSwÓ{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{wKKggg{w{w{w{w{w{w{w{w{w{w{wg{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{wws{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{wws{w{w{w{w{w{w{w{wws{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{wws{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{wws{w{wws{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w7?o+k'['['['['['['['['['['K'K'K'K'K'K+k3w7;o;oG{###3kG{###3kG{###wwïÓ{w{w{{w{w{{{{{{{{{{{{w{w{{w{{w{{{{wK{{{{{{{w{w{w{w{{w{ggg{w{w{w{{{{{{w{w{w{{{{{w{{w{{w{{{w{w{{w{{{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w3w+k'['['['['['['['['['['K'K'K'K'K'K+k3w7;o;oG{;o;o;o[G{###3kG{###G{G{;o;o#wWWWWWWWWWWWWWWWWWWWWWWWSWgWWWWWWWW#{{{{{{{g{{g{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{w{w{{w{{w{w{w{w{w{{w{{{w{w{w{w{w{{w{w{w{w{{{w{w{{{w{w{w{w{w{w{{w{w{w{w{w{w{w{w{w{w{w{w{{w{w{w{w{w{{w{w{{w{w{w{{w{w{w{w{w{w{{w{w{w{{w{w{w{w{w{w{w{w{w{w{w{w{{w{w{w{{w{w{w{w{{{w{w{w{{w{w{w{{w{{w{w{{w{w{w{w{{w{w{w{w{{w{w{w{w{w{w{w{w{w{w{{w{w{w{w{w{w{{w{w{{w{w{w{w{w{w{w{w{w{w{w{w{w{{w{{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{w{{w{w{w{w{{w{w{w{w{w3w+k'['['['['['['['['['K'K'K'K'K'K'K3w7;o;o;o[G{###3kG{###3kG{;o;o#'K'[CKGGo/{oWWWWWWWWWWWWWWWWWWWWK3s/{Cg/{WW#{#{{{{{{gg{{{{{{{{{{{{{{{{{{{{{{{{{{{{w{w{{{{w{w{w{{{{{w{{w{{w{{w{{w{{{{{{{{w{{{{{{{{w{w{{{{{{{{{{w{{{{{{{{{w{{w{{w{{{{{{{w{{w{{{{{{w{{w{w{{{{{{w{{{w{{{w{{{{{{{{{w{{w{w{w{{{{{{{{{w{w{{{w{{{{w{{w{{{w{w{{w{{w{{{{{{w{w{w{{{w{w{{{{{{{w{w{w{w{{{{{{{{{{{w{{{{w{{{w{w{w{{w{{{{{{w{{{w{w{{{{{w3w+k'['['['['['['['['K'K'K'K'K'K'K'K3w7;o;o;o3kG{#;o;o3kG{###3k3k;o;o#'K'[+k##3k#[SSWWWWWWWWWWWWWWWWWKKKKKoWWWWWW#{#{SSSSCg{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{kkk??[K?[kkk{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{3w'['['['['['['['['K'K'K'K'K'K'K'K'K3w7;o;o;o3kG{##;o3k3k;o;o#'K'[+k##3k#[##[G{SSWWWWWWWWWWWWWWWWWWWKWWWWWWWWW#{#{SSSSSSSSg[C___________________________________{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{kC_C_C_C_C_C_C_C_C_ks{{{{{{sskkC_C_kkss{{{{{{{{{{{{{{{kkk/S/S/S/Skkk{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{3w'['['['['['['['['K'K'K'K'K'K'K'K'K7;o;o;o3kG{;o;o#'K'[+k###[G{##3k3k##+c+c+cWWWW#{3K3K3KK#WWWWWWWWWKWWWWWgC+cWW#{#{SSSSSgSSSgSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{[{{{{{{{{{{{{{{{{kkkK?[#[C_C_C_SkSk+;wC_c{Sk+;wC_SkSkC_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_C_{{;o{{{{{{{{{{{{{{{{{{3w'['['['['['['['K'K'K'K'K'K'K'K'K'K7'[+k'[+k#;o#[3k#;o[3k#3K3K3K##WWWWW#{3K3K3KK#WWWWWWWWW3/{CggWWWW#{#{SSSSSgCCggg's/S/SSSS/S/SSSSS/S/SSSS/S/S/SSSS/S/S/SSSS/S7_7_SSSS{[#kkkGGo#[#[#[#[#[C_Sk+;wC_ccccccccSk+;wC_cc+;wC_Skc+;wC_c/+;wC_SkSk+;wC_Skc+;wC_SkSk+;wC_SkSkGGoSG{3w'['['['['['['K'K'K'K'K'K'K'K'K'K'K'[+k3w7;o;o3kG{;o;o[3k3K3K3K##WWWWW#{3KK3KK#WWWWWWWW33KoWWWWWWW#{#{SS3sCgW'sSgSS/S/SSSS7_/SSSS7_7_/SSSS/S/S7_SS+k7_7_SSSS/S/S/SSSSS#[[Go[s_#[#[#[#[#[#[#[#[#[C_ccccccccccccccccccccccccccccccccccccccccCKS3s3w'['['['['['K'K'K'K'K'K'K'K'K'K'K'K'[+k3w7;o;o3kG{3K3K###WWWWW#{3KK3KK#WWWWWWWWW3WWWWWWWWW#{#{SSSSSSSSgS/S[[[[[[[[/SKo7_SSSSKo7;c77+k+k7SSSS7_7_7_SSSSS3sSSSC{S##[[kkk{{{W{ww_gCK#[#[C_cccccccccccccccccc#C#C#C#C#Cccccccccccccccccckkk'K_3s[3w'['['['K'K'K'K;o'o3C7O[[[[[['[+k3w7[o3K3K###WWWWW#{3KK3KK#WWWWWWWWK3KKgg[WW#{#{SS_gggg3K3K3K3K3K[/SSSSSS7_;c;c7+k+k77SSSKo7_SSSSSSS?WC{S##[{{{{{{SSW{W{W{{ccc{[[[#Cccccc[[[cccccccc??[/S_3s[kkk[o[[[[[[[[[+c+c3C+;w'['['['['['[wwss'[+k3w73K####WWWWW#{3KK3KK#WWWWWWWWWKWWWWWWWWW#{#{SSSSgSSSSgS3K3K3K3K3K/SSSSSSS;c;c77+k77SSS7_SSSSSSSSSSSSSSSSSSSSSSS3s[SSSSSSSSSSSSSSSSSSSSSSSSSSSS[[#??[W{W{W{W{W{W{W{W{c{[[[#Cccccc[[[ccccccccK;oSCs_kk[o[[ss[[[[[[okkKSCK3C3C/+k+k+k+k+k+k+k+k+k+k'['['['['['['['[wCK'[+k3w7WWWWWWWWWW#{3KK3KK#WWWWWWWWW3WWWWWWWWW#{#{SSSSgC'sCggg3K3K3K3K3K/SSSSSSS;c;c77+k77SSSSSSSSSSSSSSSSSS3KCcCcSS3KCcCcS3sCSSS3KCc'KCS'KCcCcCS3KCcCcCS3K'KCcCS3KCcCcSS#[[[W{W{W{W{W{W{W{W{{{cc{[[[#Cccccc[[[ccccccccK;oK#{g[[[sss[s[[[[kkKSCK3C/'['['[+k+k+k+k+k+k+k+k'['['['['['['['['['['['['['['['['['['['['['['['[+k3w77OWWWWWWWWWW#{3KK3KK#WWWWWWWWW3W/{CgWWWW#{#{S_ggC3sSgSSSSSSSSSSSSSSSSSS;c;c77+k77SSSSSSSSSSSSSSSSSS3K3KSSS3K3KSS3s3sSSS'K3KSSKo'K3KSSKo3K3KSSS3K3KSSS3K3KSSS[#[[W{W{KoCcW{W{W{{{{{{{{{{c{[[[#Cccccccc[[[[ssss[[[[+c7O3C/'['['['['['['[+k+k+k+k+k+k+k+k+k+k+k+k'['['['['['['['['['['['['['['['['['[+k+k'{+/3'{3K73333'[+k3w7[oWWWWWWWWWW#{3KK3K3K#WWWWWWW33KKC/{WCWWWW#{#{SSSSgSSSSgSSSSSSSSSSSSSSSSSS;c;c77+k77SSSSSSSSSSSSSSSSS3KKoSSS3KKoSSSSSSS3KKoSSS'KKoSSS3KKoss____33KGGoSSSS3KKoSSSS{{{??[#[#W{W{W{Ko7_'KW{W{W{c{[[[#Cccc[[[[[[[?W3C/'['['['['['['['['[+k+k+k+k+k+k+k+k+k'['['['['['['['['['['['['['['[+k+k'{+/33'{3K733333'{3K7333333'{3K73333ks'[+k3w7g{WWWWWWWWW#{3K3KK3K3K#WWWWWWWW3WWWWW/{WWWW#{#{SSSggggggSSSSSSSSSSSSSSSSS;c'S77+k77SSSSSSSSSSSSS3KKo[[3KKo[SSSSSSKoSSSS3KKoSSS3KKoSss__33KGGo__SSS3KKoSSSSS[[[[###W{W{W{/S'K'KW{W{W{kkk?3K?3K?3K?3Kkkkk7O[{[['['['['['['['['['['['['[+k+k+k+k+k+k+k+k+k+k+k+k'['['['['['['[+k'{//'{3K7333'{3K73333'{3K73333'{3K733333'{3K7333333'{3K73333CK'[+k3w7[[[[[[WWW#{3K3KK3K3K#WWWWWWWKKKKC/{WWWWWW#{#{SSSSgSSSSg#{SSSSSSSSSSSSSSSSS;c'S77+k77SSSSSSSSSSSSSo[[SSSSSSSSSSSSSSSSSSSkk________SSSSSSSSSSÓÓÓÓÓÓ[[[[###7W{W{##'KKoW{W{{{{kkk?3K?3K?3K?3Kkkkk7Okkïï?3K?3K?3K?3Ks_s_s_7O'['['['['['['['[+k+k+k+k+k+k+k+k+k+k3w+3K7/33'{3K7333'{3K7333'{3K7333'{3K7333'{3K73333'{3K73333'{3K733333'{3K7333333'{3K73333'['[+k3w7[[[[[[[[[3K3KK3K3K#WWWWWWWW3WW/{ggWWW#{#{SSSSSSSS#{gSSSSSSSSSSSSSSSSS'S'S77+k77SSSSSSSSSSSSSoSSSSSSSSSg{g{g{g{Kcg{SSSSkk________SSSSSSSSSSÓÓÓÓÓÓÓÓ[[[####W{W{W{#'K'KCcW{W{{kkï?3K?3K?3K?3Kkkkk7Okïïï?3K?3K?3K?3Ks_s_s_7O+k+k+k+k+k+k+k3K7//3K7333K73333K7333'{3K7333'{3K7333'{3K7333'{3K7333'{3K73333'{3K73333'{3K733333'{3K7333333'{3K73333'[+k3w7S[[[[[[[[[[KKWWWWWWWW3WWWWWWgWWWW#{#{SSSSSSSSSgSSSSSSSSSSSSSSSSS'S'S77+k77SSSSSSSSSSSSSSSSSSSSSg{KcKcKc7Og{SSSSSSSSSSSSSSSSSSÓÓÓÓÓC{ÓÓÓÓgS[[[[#[#[W{W{###/SW{W{kïï?3K?3K?3K?3KgSkkk7Oïïïk?3K?3K?3K?3Ks_s_s_7O3K733K7333K733+'{33+'{333333333333333333333333333333333333333333//33333333333333333333333333+k+k3w7[[[[[[[[[KKWWWWWWKWWWWWWWWWW#{#{SSgC'sSSgSSSSSSSSSSSSSSSSS'S'S77+k77SSSSSSSSSSS[KoSSSSSSSSg{KcKcKc7Og{SSSSSSSSSSSSSSSSSSÓÓÓÓÓC{ÓÓ{{{{{{7_7[[[[###W{W{W{###'KW{W{ïïs_?3K?3K?3K?3K?3Kkkk7Oïkk[Go?3K?3K?3K?3Ks_s_s_7O'S3333333333333333333333333333333333333333333333333333333333333333333333333333333333333+k3w7kk{{{[[[[[[[[[WKKWWWWWgWWWW#{#{kkkkk3sCggggC3s3s3s3s3s3s3s3s3s3s3s3s3s3s_'S'S77+k77_3s3s3s3s3s3s3s3s3s[[3KKo;o;o;o;o;o;o;o;o;o;oSSSSSSSSSg{KcKcKc7Og{SSSSSSSSSSSSSSSSSSÓÓÓÓÓC{[GoGGo7_7_7_77[[##[#W{W{W{#'K#'KW{W{ïk?3K?3K?3K?3K?3K?3K[Gokk7Okk[Go?3K?3K?3K?3K?3Ks_s_s_7O'S33333333333333333333333333333333333333333333333333333333333333333333333333333333333333w7w{{{[[3s_3s3s[[[KKWWSSWgWWWW#{#{SSSSSSSSSgSSSSSSSSSSSSSSS_k3s3s3s3s3s3s3sk_SSSSSSSSSS3KKo3K;o;o;o;o;o;o;o;o_SSSSSSSSSg{g{g{g{g{g{SSSSSSSSSSSSSSSSSSÓÓÓÓ{{{[7_7_7_7_7_77[[[#[#[W{W{###'KW{W{ï?3K?3K?3K?3K?3K?3K?3K?3Kkk7Okï[Go?3K?3K?3K?3K?3Ks_s_s_7O'S3333333333333//33333333333333333333//////33333333333333333333333333333333333333333333[[[[[[[[[#{SSSSgSSSSSgSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS[3K3KKo;o;o;o;o;o;oKK_SSSSSSSSg{7O7O7O7O7Og{SSSSSSSSSSSSSSSSSSÓGGo7?o7?o[7_7_7_7_7_77[[####W{W{W{###/SW{W{k?3K?3K?3K?3K?3K?3K?3K?3Ks_k7Okk?3K?3K?3K?3K?3K?3Ks_s_s_7O'S33333333333333333333333333333333333333/3333333333333333333333333333333333333333333333[[[[[[[[[G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{G{[ssssss[G{G{G{G{G{G{G{G{G{G{G{G{3KKoKKKKKKK_SSSSSSSSg{g{g{g{g{g{g{SSSSSSSSSSSSSSSSSS+;w7?o7_7_7_[7_7_7_7_7_77[[[#[#W{W{W{##'KKoW{W{'S3333333333333333333333///33333333333333333333333333333333333333333333333333333333[[[[[[[[[KK+k+k+k+kS3k3k3k3k3s3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kG{[Ko[KKKKKK_SSSSSSSSg{7O7O7O7O7Og{SSSSSSSSSSSSSSSSSS7_7_7_7_7_[7_7_7_7_7_77[####7[W{W{W{W{W{W{W{'S3333333333333333333333333333333+333333+33333333333333/33333333KKK[[[[[[[[[KKooS3k3k3k33K3k3kG{G{3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k[3K[KoSSSSSSSSSSSSSSSg{KcKcKcKc7Og{SSSSSSSSSSSSSSSSSS7_7_7_7_7_[7_7_7_7_7_77[[#[#W{W{W{W{W{W{W{W{W{'S3333+333+33333+333333KKKKKKKKKK+333333333333/////333333KKK[[[[[[[[[[oS3k3k3k33K3k3s3k3k3k3k3k3k3k3k3k3k3k3kG{G{3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k[S[3K[SSSSSSSSSSSSSSg{KcKcKcKc7Og{SSSSSSSSSSSSSSSSSS7_7_7_7_7_[7_7_7_7_7_77[#7[#W{W{W{W{W{W{W{W{W{{{'S3333KKKKK+333KKKKKK+33333KKK'S+333333KKKKKKKKKK+33333333333333333333333KKK[[[[[[[[[[wo3k3k3k3k33K3k3k3k3k3k3k3k3k3k3k3k3k3kG{G{G{G{3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kG{G{G{G{3k3k3k[[3K[Kokkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk/S/S/S7_7_7_7_7_['[7_7_7_7_777#[##[W{W{W{W{W{W{W{W{'S3333KKKKK+333KKKKKK+33333KKK'S+333333KKKKKKKKKK+33333333333333333333333KKK[[[[[[[[[[www3k3k3k3k33K3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kG{G{G{3k3k3k3k3k[SSS[KoSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSC{/S/S/S/S7_7_7_7_7_'[[7_7_7_7_77####W{W{W{W{W{W{W{W{W{{{{cc{{{{{cc{{'S3333KKKKK+333KKKKKK+33333KKK'S+333333KKKKKKKKKK+33333333333333333333333KKK[[[[3s3s_3s[[[kswww3k3k3k3k33K3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kSSSSSSSSSSSSSSSSSSSS3k3k3k3k3k3k3k3k[S3K[[3KKoSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS;o/S/S/S/S/S/S7_7_7_7_7_'[[7_7_7_7_77#[[#[W{W{W{W{W{'KW{W{{{{{{{ccc{cc{{{{{{{{'S3333KKKKK+333KKKKKK+33333KKK'S+333333KKKKKKKKKK+33333333333333333333333KKK[[[[[[k[[[[[_gwww3k3k3k3k33K3k3k3k3k3k3k3k3k[33K33K33K33K33K33K33K??[33K33K#[3k3k3k3k3kSS3k3k3k3k3k3k3k3k[S/S/SS[Ko[SS/S/SSS/S/SSS/S/SSS/S/SSS/S/SSS/S/SSS;o/S/S/S/S/S/S/S/S/S7_7_7_7_7_7_[7_7_7_7_77##[#[W{W{W{'K'K'KW{W{{{{{'S3333KKKKK+333KKKKKK+33333KKK'S+333333KKKKKKKKKK+33333333333333333333333KKK[[3s[[[[[[[[[[_g_gww'+K'+K'+KKS3k3k3k3k33K3k3k3k3k3k3k3k3k[GGoGGoGGo__GGoGGoGGo??[GGo33KK3k3k3k3k3k#[#[#[3k3k3kSS3k3k3k3k3k3k3k3k[/S/S/S[3K[Ko/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S7_7_7_Ko7_7_7_7_7_7_[7_7_7_7_77#7###W{W{##'K'KW{W{sskk________3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C__3C3C'S3333KKKKK+333KKKKKK+33333KKK'S+333333KKKKKKKKKK+33333333333333333333333KKK[3s__3s3s[[[[[[[_g_gww'+K'+K'+KKS3k3k3k3k33K3k3k3k3k3k3k3k3k[ssss____K3k3k3k3k3k#[SSGGoSSSSGGoSS3k3k3k3k3k3k3k3k[/S/S/S/S/S[3K[/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S7_7_7_7_KoKoKo7_7_7_7_7_7_[7_7_7_7_77#7[#[W{W{###'KW{W{kkkk?3K?3Kïï??[??[??[33K33K33K33K33K33K33K33K33K33K??[??[s_s_s_?3K?3Kï?3K?3K7O'S3333KKKKK+333KKKKKK+33333KKK'S+333333KKKKKKKKKK+33333333333333333333333KKK[[[[[[[[[[[[[[_g_gww'+K'+K'+KKS3k3k3k3k33K3k3k3k3k3k3k3k3k[??[??[??[??[??[??[ssGGo33KK3k3k3k3k3k#[SSSSGGoSS3kSS3k3k3k3k3k3k3k3k[S/S/SSSS[KoSS/S/SSS/S/SSS/S/SSS/S/SSS/S/SS;o/S/S/S/S/S/S7_C{C{[[[Ko7_7_7_7_7_7_[7_7_7_7_77#7[#[[W{#'K#'KW{W{kkkk?3K?3Kïï7Occcccc;c{s_s_s_?3K?3Kïïï7O'S3333KKKKK+333KKKKKK+3/333KKK'S+333333KKKKKKKKKK+33333333333333333333333KKK[[[[[[[[[[[[[[[_g_gww'+K'+K'+KKS3k3k3k3k33K3k3k3k3k3k3k3k3k[??[??[??[??[??[??[ssGGo33KK3k3k3k3k3k3kGGoSSSSSS#[SS3k3k3k3k3k3k3k3k[SSSSS[[[KoSSSSSSSSSSSSSSSSSSC{C{/S/S/S/S/S/S/S7_[KoKoKo[Ko7_7_7_7_7_7_[7_7_7_7_7#77#[[W{'K##'KW{W{kkkk?3K?3Ks_ï7Oc???;c{ïïï?3K?3Kïïï7O3O3333KKKKK+333KKKKKK+3//33KKK'S+333333KKKKKKKKKK+33333333333333333333333KKK[[[[[[[[[[[[[[[_g_gww'+K'+K'+KKS3k3k3k33K3k3k3k3k3k3k3k3k[ssssssss____K3k3k3k3k3k3kSSGGoSSSS#[SS3k3k3k3k3k3k3k3k[SSSSSSS[3K[SSSSSSSSSSSSSSSS;o/S/S/S/S/S/S/S/S/SKo[KoKoKo[Ko7_7_7_7_7_7_[7_7_7_7_7#77#7[W{W{##'KW{W{kkkï?3K?3KgSï7O;c???;c{ïïï?3K?3Kïïï7O'S3333KKKKK+333KKKKKK+33333KKK'S+333333KKKKKKKKKK+33333////3//33333333333KKK[[[[[3s[[_3s3s[[[[_g_gwww'+K'+K'+KKS3k3k3k33K3k3k3k3k3k3k3k3k[GGoGGoGGo??[??[??[ss??[33K#[3k3k3k3k3k3kGGoSSGGoSS#[SS3k3k3k3k3k3k3k3k[SSSSSS[3K[KoSSSSSSSSSSSSSS;o/S/S/S/S/S/S/S/S/S/S7_Ko[KoKoKo[Ko7_7_7_7_7_7_[7_7_7_7_7#77#7[[W{##'KW{W{ïkkï?3K?3K?3Kï7Oc???;c{ïïïï?3K?3Kïïï7O;c3333KKKKK+333KKKKKK+33333KKK'S+333333KKKKKKKKKK+33333333333333333333333KKK[[[[[[[[[[[[[[[w_gwwww'+K'+K'+KKS3k3k733K3k3k3k3k3k3k3k3k[GGoGGoGGo??[??[??[ss??[33K#[3k3k3k3k3kG{SSGGoSSSS#[SS3k3k3k3k3k3k3k3k[SSSSSSSSS[KoSSSSSSSSSSSC{/S/S/S/S/S/S/S/S/S/S/S/SKo[KoKoKoKo[Ko7_7_7_7_7_7_[7_7_7_7_7777#7[[W{'K#'KW{W{ïkïs?3K?3K?3Kï7Oc???;c{ïïïï?3K?3Kïïï7OSk7333SSK+333KKKKKK+33333'S'S'S'S+333333KKKKKKKKKK+33333333333333333333333KKK[[[[[[[[[[[[[[[wS[wwww'+K'+K'+KKS3k3k733K3k3k3k3k3k3k3k3k[GGoGGoGGokk??[??[??[ss33K33K#[3k3k3k3k3kG{G{3k3k3k#[SS3k3k3k3k3k3k3k3k[C{SSSSSSS[[3K[SSSSSSSSC{/S/S/S/S/S/S/S/S/S/S/S/S/S/SKo[KoKoKoKo[Ko7_7_7_7_7_7_[7_7_7_7_7777#7[[W{'K#'KW{W{ïkïgS?3K?3K?3Kï7O;c???;c{ïïï?3K?3Kïï7Oc73333337O7O+333KKK+33333+333333KKKKKKKKKK+33333333333333333333333KKK[[[[[[[[[[[[[[[_gS[www'+K'+K'+KKS3k3k733K3k3k3k3k3k3k3k3k[3k3k3k3k3k3kSS3k3k3k3k3k3k3k3k[C{C{SSSSSSSS[KoSSSSSSK/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/SKo[KoKoKoKo[Ko7_7_7_7_7_7_'[7_7_7_7_77777[[W{W{'K'KW{W{ïkk?3K?3K?3K?3Kï7O;c???????????????;c{ïï?3K?3K?3K?3Kï7OcC33333333333333337O7OS[kk+33333+333333KKKKKKKKKK+33333333333333333333333KKK[[[[[[[[[[[[[[[S[S[ww_g'+K'+K'+KKS3k3k733K3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kSS3k3k3k3k3k3k3k3kG{C{C{C{SSSSSS[3K[KoSSSC{C{/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/S/SKo[KoKoKoKo[Ko7_7_G{G{G{G{G{G{G{G{3k77777[[W{'K'KW{W{7O;cc;c;c;c;c;c{7OC333333333333333333333333333333+333333KKKKKKKKKK+33333333333333333333333KKK[[[[[[[[[[[[[[[S[S[w_g'+K'+K'+KKS3k3k733K3k3k3k3k3k3k3k3k3k3k3k3k3k3kG{G{G{G{3k3k3k3k3k3k3kSS3k3k3k3k3k3k3k3kG{[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[/S/S/S/S/S/SG{G{G{G{G{G{G{G{G{G{3k3k3k3k3k3k3k3k77777[[W{W{W{W{W{________________;ccc;cc;c;c{__________________7O'S33333333///3333333333333333333+333333SS/3_KKKK+33333333333333333333333KKK[[[[[[[[[[[[[[[w_g'+K'+K'+KKS3k3k733K3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kSS3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kG{/S/S/S/S/S/S3k3k3k3k3k3k3k3k3k3k3kG{G{3k3k3k3k3k77777[[[W{W{W{W{;cccc;cc;c{'S333333333/33333333333333333333+333333++++7OS[+33333333333333333333333KKK[[[[[3s___3s[[[[[_g_g'+K'+K'+KKS3k3k733K3kG{G{G{G{G{G{G{3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kSS3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kG{G{G{3kG{3k3k3k3k3k3k3k3k3k3k3k3k3k3kG{/S/S/S/S/S/S3k3k3kG{G{G{3k3k3k3k3k3k3k3k3k3k3k3k77777[[[W{W{W{W{;c;ccccc;c{'S33333333333333///3333333333333+33333333333++++++++333333333333333/33333333KKK[[[[[[[3s[[[[[[[_g_g'+K'+K'+KKS3k3k733K3k3k3k3kG{G{G{3k3k3k3k3k3k3k3k3k3k3k3kG{G{3k3k3k3kSS3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kG{/S/S/S/S/S/S3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k7777[[[[W{W{W{{{;c;c;ccccc{'S333333333333333333333333333333+33333333333333333333333333333333////3/3333/KKK[[[[[[[[[[[[[[[S[_g'+KKS3k3k733K3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kSS3k3k3k3k3k3k3k3kG{G{3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kG{/S/S/S/S/S/S3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k77[[[[[W{W{W{{{{{{'K77'K'KCc'KCcCc'KCcCcCc[+cS[OsOscc{{{{{'S333333333333333333333333333333+33333333333333333333333/333333333333333///3[[[[[[[[[[[[[[[S[S[3k3k7733K3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kSS3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3kG{/S/S/S/S/S/S3k3k3k3k3kG{3k3k3k3k3k3k3k3k3k3k3k777[[[[[[W{W{'K'K#;c;ccc777777777777777777'S333333333333333333333333333333+33333333333333333333333/33333333333333/////////[[[[[[[[[[[[[[[S[S[3k7733K3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k3k[ssK'K7#;cccc'K7'K'K##'K7'K##C//////333333333333333333333333+3333333333333333333333///333333333333//////////[[[[[[[[[[3s[[[[S[S[CK+;w+;w+;w'K'K'K'K'K'K'K'K7##'K77'K##77'K##C////////////333333333333333333+333333333333333333333333333333333333///////////[[3s_3s[[[[[3s__3s3sgggKS[CKCK+;w+;w#3g'K'K'K'K'K'K'K'K'K'K'K'K7#######'K7'K##777'K##C//////////////////333333333333+33333333333/333333333333333333333333///////////[[[[[[[[[[[[3s[[KKKKKKK__CKCK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K77#########'K'K7'K'K##3++++////////////////3333333333+333333333333333333333333333333333333///////////[[[[[[[[[[[[[[['g'g's's3CKkk'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K77###########/++++++++++////////////////////+/////33333333333333333333333333333/////////////[[[[[[[[[[[[[[[+c'g's's'sKKKK__CKCKCK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K777++++++++++++++++++++///////////ss/////////////////////33333333333333/////////////[[[[[[[[[[[[[[[+c+c'g's'sKK'+Kkk__CKCK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'['[+k++++++++++++++++++/////////ss///////////////////////33333333/////////////////[[[[[[[+c+c+c'g's'+K/3_kk__CKCK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'['['['['[+k++++++++++++++++++++++/kkkk////////////////////////////////////////////////kk__CKCK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'['['['['[+k++++++++++++++++++++++///////////////////////////////////////////////kk__CK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'['['['[+k3w+++++++++++++++++++///////////////////////////////////////////+o[ss__CK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'['['['[+k3w3w++++++++++++++++++++++++++/////////////////////////////+o[ss__CK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'['[+k3w3w3w++++++++++++++++++++++++++++++/////////////////+++kkkk__CK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'['[+k3w3w3w+++++++++++++++++++++++++//////////////+++++kk____CK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'['[+k3w3w3w++++++++++++++++++++++++++++++++++++++kk____CK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'['[+k3w3w3w3w+++++++++++++++++++++++++++++++kk____7?o'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'[+k3w3w3w3w+++++++++++++++++++++++++ss__CK#3g'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'['['[+k3w3w+++++++++++++++++++__CKCKCKCKCK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'['['[+k+k+k'{'{'{'{+++++++++kk______CK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'['['['['['['['[+k'{+++kk______CK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K[/{KSCKCK'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'Ko[+c'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K[ksksks_gCK7?o'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K'K+;wCKCK+co3s[[[[[[[[[o[[g{g{g{g{g{g{g{g{g{g{g{g{g{g{g{g{wooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo \ No newline at end of file diff --git a/ggdt/test-assets/png/large_2_indexed.bin b/ggdt/test-assets/png/large_2_indexed.bin new file mode 100644 index 0000000..0c22f46 Binary files /dev/null and b/ggdt/test-assets/png/large_2_indexed.bin differ diff --git a/ggdt/test-assets/png/large_2_indexed.png b/ggdt/test-assets/png/large_2_indexed.png new file mode 100644 index 0000000..48c772a Binary files /dev/null and b/ggdt/test-assets/png/large_2_indexed.png differ diff --git a/ggdt/test-assets/png/large_2_rgb.png b/ggdt/test-assets/png/large_2_rgb.png new file mode 100644 index 0000000..06419f1 Binary files /dev/null and b/ggdt/test-assets/png/large_2_rgb.png differ diff --git a/ggdt/test-assets/png/large_2_rgba.bin b/ggdt/test-assets/png/large_2_rgba.bin new file mode 100644 index 0000000..e9d8428 Binary files /dev/null and b/ggdt/test-assets/png/large_2_rgba.bin differ diff --git a/ggdt/test-assets/png/rgb.bin b/ggdt/test-assets/png/rgb.bin new file mode 100644 index 0000000..4c21632 Binary files /dev/null and b/ggdt/test-assets/png/rgb.bin differ diff --git a/ggdt/test-assets/png/rgb.png b/ggdt/test-assets/png/rgb.png new file mode 100644 index 0000000..db5ad15 Binary files /dev/null and b/ggdt/test-assets/png/rgb.png differ diff --git a/ggdt/test-assets/png/rgba.bin b/ggdt/test-assets/png/rgba.bin new file mode 100644 index 0000000..9fdf531 Binary files /dev/null and b/ggdt/test-assets/png/rgba.bin differ diff --git a/ggdt/test-assets/png/rgba.png b/ggdt/test-assets/png/rgba.png new file mode 100644 index 0000000..e608738 Binary files /dev/null and b/ggdt/test-assets/png/rgba.png differ diff --git a/ggdt/test-assets/png/unsupported_alpha_8bit.png b/ggdt/test-assets/png/unsupported_alpha_8bit.png new file mode 100644 index 0000000..3e13052 Binary files /dev/null and b/ggdt/test-assets/png/unsupported_alpha_8bit.png differ diff --git a/ggdt/test-assets/png/unsupported_greyscale_8bit.png b/ggdt/test-assets/png/unsupported_greyscale_8bit.png new file mode 100644 index 0000000..23c8237 Binary files /dev/null and b/ggdt/test-assets/png/unsupported_greyscale_8bit.png differ diff --git a/ggdt/test-assets/png/unsupported_indexed_16col.png b/ggdt/test-assets/png/unsupported_indexed_16col.png new file mode 100644 index 0000000..0fbf9e8 Binary files /dev/null and b/ggdt/test-assets/png/unsupported_indexed_16col.png differ diff --git a/ggdt/test-assets/png/unsupported_rgb_16bit.png b/ggdt/test-assets/png/unsupported_rgb_16bit.png new file mode 100644 index 0000000..50c1cb9 Binary files /dev/null and b/ggdt/test-assets/png/unsupported_rgb_16bit.png differ diff --git a/ggdt/test-assets/png/unsupported_rgba_16bit.png b/ggdt/test-assets/png/unsupported_rgba_16bit.png new file mode 100644 index 0000000..984a995 Binary files /dev/null and b/ggdt/test-assets/png/unsupported_rgba_16bit.png differ