├── Cargo.toml ├── README.md ├── misc ├── anim.png ├── geom.png ├── main.png └── weights.png ├── src ├── animation.rs ├── lib.rs ├── skeleton.rs ├── transform.rs ├── utils.rs └── vertices.rs └── test ├── human ├── death.dae ├── human.bin ├── human.blend ├── run.dae ├── texture.png └── walk.dae ├── spider ├── spider.bin ├── spider.blend └── walk.dae └── tube ├── tube.bin └── tube.dae /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rib" 3 | version = "0.1.0" 4 | authors = ["Matthieu Baumann "] 5 | edition = "2018" 6 | keywords = ["gamedev", "graphics", "rigging", "skinning", "animation"] 7 | description = "low level API for importing COLLADA files from Blender" 8 | license = "MIT OR Apache-2.0" 9 | repository = "https://github.com/bmatthieu3/rib" 10 | readme = "README.md" 11 | 12 | [dependencies] 13 | collada = { version = "0.13.0", branch = "master", git = "https://github.com/bmatthieu3/piston_collada.git" } 14 | nalgebra = {version = "0.23.1", features = ["serde-serialize"]} 15 | serde = { version = "*", features = ["derive"] } 16 | bincode = "1.3.1" -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## rib: a Rust collada importer for your 3D game projects 2 | 3 | rib is built on top of the [piston_collada](https://github.com/PistonDevelopers/piston_collada). 4 | You give it the path to a directory containing all the DAE files (1 animation per file) of your 3D model 5 | and it gives you: 6 | - The vertices of the model. Each vertex contains a position and may contain a normal, texcoord, two bones indexes of the bones influencing this vertex as well as the weight associated to these two bones. 7 | - The animations of the model if there are. Internally it is stored as a hashmap indexed by the DAE filename containing the animation. It is possible to query at a specific time the transform matrices of the bones in the world space. 8 | 9 | As a user, you just need to: 10 | - Send as vertex attributes the vertices from the model at the beginning of the program 11 | - At each frame, query the animation to get the current bone matrices and send them, e.g. as an array of matrices 4x4 or as a texture (see this [article](https://developer.nvidia.com/gpugems/gpugems3/part-i-geometry/chapter-2-animated-crowd-rendering) for more explanation) 12 | 13 | rib offers **read** and **write** methods that use [bincode]() for (de)serializing the vertices/animations to a compressed binary format. This way, in a game for example, it will be faster to load the binaries than parsing the multiple collada files one by one for building the rib data-structure. 14 | 15 | ## Example 16 | 17 | Here is an example of a [human low-poly](https://opengameart.org/content/animated-human-low-poly) model found on the very good opengameart.org game resources archive: 18 | 19 | [![Alt text](https://img.youtube.com/vi/9Xwf7G9upOY/0.jpg)](https://youtu.be/9Xwf7G9upOY) 20 | 21 | 22 | 23 | This is animated using rib: 24 | - The vertices are sent to the GPU as vertex attribute at the beginning of the program. 25 | - The matrices are retreived from the ***walk*** animation and sent as a uniform array of mat4. 26 | 27 | ```rust 28 | // Get the current matrices of the bones position in the model space 29 | let transforms = anims.query("walk", cur_time); 30 | // Get the shader and bind it 31 | let shader = shaders.get("animated_model").unwrap(); 32 | let shader = shader.bind(&gl); 33 | // Send the &[nalgebra::Matrix4] to the GPU 34 | // See https://nalgebra.org/cg_recipes/#conversions-for-shaders 35 | unsafe { 36 | let num_matrices = transforms.len(); 37 | gl.UniformMatrix4fv(location_bone_transforms, num_matrices as i32, gl::FALSE, transforms.as_slice().as_ptr() as *const f32); 38 | }; 39 | // Draw your model 40 | model.draw(gl, &shader, camera); 41 | ``` 42 | 43 | Here is the ***vertex shader***: 44 | ```glsl 45 | #version 330 46 | layout (location = 0) in vec3 position; 47 | layout (location = 1) in vec3 normal; 48 | layout (location = 2) in vec2 texcoord; 49 | layout (location = 3) in vec2 weights; 50 | layout (location = 4) in ivec2 bones_idx; 51 | 52 | uniform mat4 view; 53 | uniform mat4 model; 54 | uniform mat4 projection; 55 | 56 | const int MAX_JOINTS = 50; 57 | uniform mat4 bone_transforms[MAX_JOINTS]; 58 | 59 | out vec2 uv; 60 | 61 | void main() { 62 | mat4 transform = bone_transforms[bones_idx[0]] * weights[0] + bone_transforms[bones_idx[1]] * weights[1]; 63 | 64 | vec4 ndc = projection * view * model * transform * vec4(position, 1); 65 | gl_Position = ndc; 66 | uv = texcoord; 67 | } 68 | ``` 69 | 70 | And the ***fragment shader***: 71 | ```glsl 72 | #version 330 73 | uniform sampler2D tex; 74 | 75 | in vec2 uv; 76 | out vec4 finalColor; 77 | 78 | void main() { 79 | finalColor = texture(tex, uv); 80 | } 81 | ``` 82 | 83 | ## How can I use it? 84 | 85 | Some little adjustements of the .blend must be done: 86 | 1. Limit the maximum number of bones influencing each vertex to 2! (reduce from 4 to 2) 87 | ![Limit the number of bones influencing a vertex](https://github.com/bmatthieu3/rib/blob/master/misc/weights.png) 88 | 2. Select the animation you want to export in the Action Editor of blender 89 | 3. Select the mesh you want to export with its skeleton attached 90 | 3. Export to collada file (.dae) 91 | 1. In the **Main** tab. OpenGL's up vector is the Y axis but blender's one is Z. Check the apply box with X as the forward axis and Y as the up axis. 92 | ![change up axis](https://github.com/bmatthieu3/rib/blob/master/misc/main.png) 93 | 94 | 2. In **Geom** tab, check the Triangulate box. 95 | 96 | ![enable triangulation](https://github.com/bmatthieu3/rib/blob/master/misc/geom.png) 97 | 98 | 3. In **Anim** tab, check Include Animations, Keep Keyframes, All Keyed Curves, Include all Actions. Set a very big Sampling Rate because rib needs only the keyframes (sampling is done inside of rib by specifying a sampling rate when loading the file). This prevents your collada files to get huge too! 99 | 100 | ![anim options](https://github.com/bmatthieu3/rib/blob/master/misc/anim.png) 101 | 102 | After that, simply load the directory containing all your DAE files with rib. Each .dae will contain one animation. For the moment it is not possible to export multiple animations inside only ONE collada file because the Blender collada export does not recognize the actions stack from Blender. That is why a fix can be to: 103 | 1. Export one animation per file 104 | 2. Export one file with one animation but this animation contains all the walk keyframes next to the run keyframes next to the idle keyframes etc... 105 | 106 | For the moment the 1. solution is handled by rib. The second solution may be implemented in the future! 107 | 108 | ## Contributing instructions 109 | 110 | Post issues, PR if you want to participate and develop the library. 111 | 112 | To run the tests, simply 113 | 114 | ```bash 115 | cargo test 116 | ``` 117 | 118 | in the root of the repository. 119 | -------------------------------------------------------------------------------- /misc/anim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bmatthieu3/rib/134e19772a4cf3ff7d4918cd8ef039f1a9216253/misc/anim.png -------------------------------------------------------------------------------- /misc/geom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bmatthieu3/rib/134e19772a4cf3ff7d4918cd8ef039f1a9216253/misc/geom.png -------------------------------------------------------------------------------- /misc/main.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bmatthieu3/rib/134e19772a4cf3ff7d4918cd8ef039f1a9216253/misc/main.png -------------------------------------------------------------------------------- /misc/weights.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bmatthieu3/rib/134e19772a4cf3ff7d4918cd8ef039f1a9216253/misc/weights.png -------------------------------------------------------------------------------- /src/animation.rs: -------------------------------------------------------------------------------- 1 | use na::Matrix4; 2 | use std::collections::HashMap; 3 | 4 | use super::transform::Transform; 5 | use serde::{Deserialize, Serialize}; 6 | #[derive(Clone, Debug, Serialize, Deserialize)] 7 | struct Keyframe { 8 | // The transform matrix of each bone per each keyframe 9 | //pub bone_transforms: HashMap, 10 | //pub bone_transforms: HashMap, 11 | pub transforms: Vec>, 12 | // Times when each keyframe begins. Of size Nkeyframe 13 | pub start_time: f32, 14 | } 15 | 16 | impl PartialEq for Keyframe { 17 | fn eq(&self, other: &Self) -> bool { 18 | self.start_time == other.start_time 19 | } 20 | } 21 | 22 | impl Keyframe { 23 | fn new( 24 | skeleton: &Skeleton, 25 | bone_animations: &[collada::Animation], 26 | start_time: f32, 27 | idx_keyframe: usize, 28 | alpha: f32, 29 | ) -> Self { 30 | let mut local_transforms = HashMap::with_capacity(bone_animations.len()); 31 | let global_inverse_transform = Matrix4::identity(); 32 | 33 | for collada::Animation { 34 | target, 35 | sample_poses, 36 | .. 37 | } in bone_animations.iter() 38 | { 39 | let bone_name = target.split('/').collect::>(); 40 | let bone_name = bone_name[0]; 41 | 42 | let t0: Transform = (&sample_poses[idx_keyframe - 1]).into(); 43 | let t1: Transform = (&sample_poses[idx_keyframe]).into(); 44 | 45 | let t = t0.interpolate(&t1, alpha).into(); 46 | 47 | local_transforms.insert(bone_name.to_string(), t); 48 | } 49 | 50 | let transforms = 51 | compute_final_transforms(skeleton, &local_transforms, &global_inverse_transform); 52 | //unreachable!(); 53 | Keyframe { 54 | transforms, 55 | start_time, 56 | } 57 | } 58 | } 59 | 60 | use std::cmp::{Ordering, PartialOrd}; 61 | 62 | impl PartialOrd for Keyframe { 63 | fn partial_cmp(&self, other: &Self) -> Option { 64 | self.start_time.partial_cmp(&other.start_time) 65 | } 66 | } 67 | 68 | #[derive(Debug, Serialize, Deserialize)] 69 | pub struct Animation { 70 | /// The duration of an animation 71 | duration: f32, 72 | // A sorted-by-time keyframe vector 73 | keys: Vec, 74 | frame_time: f32, 75 | } 76 | impl Animation { 77 | pub fn new( 78 | skeleton: &Skeleton, 79 | bone_animations: Vec, 80 | frame_time: f32, 81 | ) -> Self { 82 | let duration = { 83 | let first_anim_j = bone_animations.first().unwrap(); 84 | 85 | let start_time = *first_anim_j.sample_times.first().unwrap(); 86 | let end_time = *first_anim_j.sample_times.last().unwrap(); 87 | end_time - start_time 88 | }; 89 | //let final_transforms = Vec::with_capacity(bone_animations.len()); 90 | 91 | // At least two keyframes 92 | let mut idx_keyframe = 1; 93 | let first_bone_animation = &bone_animations[0]; 94 | let mut end_time_keyframe = first_bone_animation.sample_times[1]; 95 | 96 | //let duration = (num_frames as f32) * FRAME_TIME; 97 | let mut keys = Vec::new(); 98 | 99 | //let mut frame_idx = 0; 100 | let mut time = 0.0; 101 | 102 | while time < duration { 103 | if time >= end_time_keyframe { 104 | idx_keyframe += 1; 105 | end_time_keyframe = bone_animations[0].sample_times[idx_keyframe]; 106 | } 107 | let d0 = first_bone_animation.sample_times[idx_keyframe - 1]; 108 | let d1 = first_bone_animation.sample_times[idx_keyframe]; 109 | let dur_keyframe = d1 - d0; 110 | let alpha = if dur_keyframe > 0.0 { 111 | (time - d0) / dur_keyframe 112 | } else { 113 | 0.0 114 | }; 115 | 116 | let keyframe = Keyframe::new(skeleton, &bone_animations, time, idx_keyframe, alpha); 117 | keys.push(keyframe); 118 | 119 | time += frame_time; 120 | } 121 | 122 | keys.push(Keyframe::new( 123 | skeleton, 124 | &bone_animations, 125 | duration, 126 | idx_keyframe, 127 | 1.0, 128 | )); 129 | 130 | Animation { 131 | duration, 132 | keys, 133 | frame_time, 134 | } 135 | } 136 | 137 | /// Animation contains at least one keyframe 138 | /*fn get_in_between_keyframes(&self, time: f32) -> (&Keyframe, &Keyframe) { 139 | let num_keyframes = self.keys.len(); 140 | 141 | assert!(num_keyframes >= 1); 142 | if time >= self.duration || num_keyframes == 1 { 143 | let last_key = self.keys.last().unwrap(); 144 | (last_key, last_key) 145 | } else if time <= 0.0 { 146 | let first_key = self.keys.first().unwrap(); 147 | (first_key, first_key) 148 | } else { 149 | // Binary search on keyframe starting times 150 | let num_step = utils::log_2(self.keys.len() as i32); 151 | let mut i = self.keys.len() >> 1; 152 | 153 | let mut a = 0; 154 | let mut b = num_keyframes - 1; 155 | 156 | for _ in 0..(num_step + 1) { 157 | // time < anim duration 158 | let key = &self.keys[i]; 159 | if time == key.start_time { 160 | break; 161 | } else if time < key.start_time { 162 | b = i - 1; 163 | } else { 164 | a = i + 1; 165 | } 166 | i = (a + b) / 2; 167 | } 168 | 169 | (&self.keys[i], &self.keys[i+1]) 170 | } 171 | }*/ 172 | 173 | pub fn query(&self, time: f32) -> &Vec> { 174 | let key = if time <= 0.0 { 175 | &self.keys[0] 176 | } else if time >= self.duration { 177 | &self.keys.last().unwrap() 178 | } else { 179 | let frame_idx = (time / self.frame_time) as usize; 180 | &self.keys[frame_idx] 181 | }; 182 | 183 | &key.transforms 184 | } 185 | 186 | pub fn get_duration(&self) -> f32 { 187 | self.duration 188 | } 189 | } 190 | 191 | fn compute_final_transforms( 192 | skeleton: &Skeleton, 193 | bone_local_transforms: &HashMap>, 194 | global_inverse_transform: &Matrix4, 195 | ) -> Vec> { 196 | let root = skeleton.get_root().as_ref().unwrap(); 197 | 198 | let mut transforms = vec![Matrix4::identity(); skeleton.get_num_vertices_attached_bones()]; 199 | recursive_final_transforms( 200 | skeleton, 201 | &root, 202 | &Matrix4::identity(), 203 | bone_local_transforms, 204 | global_inverse_transform, 205 | &mut transforms, 206 | ); 207 | transforms 208 | } 209 | fn recursive_final_transforms( 210 | skeleton: &Skeleton, 211 | bone: &Bone, 212 | parent_transform: &Matrix4, 213 | bone_local_transforms: &HashMap>, 214 | global_inverse_transform: &Matrix4, 215 | 216 | final_transforms: &mut Vec>, 217 | ) { 218 | let name = bone.get_name(skeleton); 219 | 220 | let bone_local_transform = bone_local_transforms.get(name).unwrap(); 221 | let local_transform = parent_transform * bone_local_transform; 222 | 223 | if bone.has_vertices_attached() { 224 | let final_transform = 225 | global_inverse_transform * local_transform * bone.get_inverse_bind_pose(); 226 | 227 | let idx_transform = bone.idx_transform.unwrap(); 228 | final_transforms[idx_transform] = final_transform; 229 | } 230 | 231 | if let Some(children) = bone.get_children() { 232 | for child in children { 233 | recursive_final_transforms( 234 | skeleton, 235 | child, 236 | &local_transform, 237 | bone_local_transforms, 238 | global_inverse_transform, 239 | final_transforms, 240 | ); 241 | } 242 | } 243 | } 244 | 245 | #[derive(Debug, Serialize, Deserialize)] 246 | pub struct Animations { 247 | anims: HashMap, 248 | 249 | skeleton: Skeleton, 250 | } 251 | 252 | use super::skeleton::{Bone, Skeleton}; 253 | /*fn extract_anim_name_from_target(target: &str) -> &str { 254 | target.split('/').collect::>()[1] 255 | }*/ 256 | 257 | impl Animations { 258 | pub fn new( 259 | name: &str, 260 | doc: &collada::document::ColladaDocument, 261 | frame_time: f32, 262 | ) -> Option { 263 | if let Some(skeleton) = Skeleton::from(doc) { 264 | if let Some(animations) = doc.get_animations() { 265 | // If the skeleton and animations are defined, therefore there is a bind data associated to it 266 | // We can unwrap to get this 267 | /*let bind_data_set = doc.get_bind_data_set().unwrap(); 268 | let bind_data = bind_data_set.bind_data.first().unwrap(); 269 | 270 | let mut cur_name_anim = None; 271 | let mut cur_targets_in_anim = vec![]; 272 | for anim in animations.into_iter() { 273 | if let Some(cur_name) = cur_name_anim.to_owned() { 274 | let new_name_anim = extract_anim_name_from_target(&anim.target).to_string(); 275 | if new_name_anim != cur_name { 276 | let cur_anims = cur_targets_in_anim.drain(..).collect(); 277 | let res = 278 | anims.insert(cur_name, res); 279 | 280 | cur_name_anim = Some(new_name_anim); 281 | } 282 | } else { 283 | cur_name_anim = Some(extract_anim_name_from_target(&anim.target).to_string()); 284 | } 285 | 286 | cur_targets_in_anim.push(anim); 287 | } 288 | // Add the last animation 289 | if let Some(cur_name) = cur_name_anim { 290 | let res = Animation::new(&skeleton, bind_data, cur_targets_in_anim, frame_time); 291 | anims.insert(cur_name, res); 292 | } 293 | */ 294 | let anim = Animation::new(&skeleton, animations, frame_time); 295 | let mut anims = HashMap::new(); 296 | anims.insert(name.to_string(), anim); 297 | 298 | Some(Animations { anims, skeleton }) 299 | } else { 300 | None 301 | } 302 | } else { 303 | None 304 | } 305 | } 306 | 307 | pub fn append(&mut self, other: Self) { 308 | assert_eq!(&self.skeleton, &other.skeleton); 309 | assert_eq!(other.anims.keys().len(), 1); 310 | 311 | for (name, anim) in other.anims { 312 | self.anims.insert(name, anim); 313 | } 314 | } 315 | 316 | pub fn get_animation(&self, name: &str) -> Option<&Animation> { 317 | self.anims.get(name) 318 | } 319 | 320 | pub fn query(&self, name: &str, time: f32) -> &Vec> { 321 | self.anims[name].query(time) 322 | } 323 | 324 | pub fn get_skeleton(&self) -> &Skeleton { 325 | &self.skeleton 326 | } 327 | } 328 | -------------------------------------------------------------------------------- /src/lib.rs: -------------------------------------------------------------------------------- 1 | extern crate nalgebra as na; 2 | 3 | mod animation; 4 | mod skeleton; 5 | mod transform; 6 | mod utils; 7 | mod vertices; 8 | 9 | pub use animation::Animations; 10 | pub use vertices::Vertices; 11 | 12 | use na::{Point2, Point3, Vector3}; 13 | use std::io; 14 | use std::path::Path; 15 | #[derive(Debug)] 16 | pub enum Error { 17 | OpenFile { path: String }, 18 | EmptyFile, 19 | PrimitiveNotTriangles, 20 | SkeletonNotEqual, 21 | VerticesNotEqual, 22 | IoError(io::Error), 23 | Serialize(Box), 24 | Deserialize(Box), 25 | } 26 | 27 | impl<'a> From for Error { 28 | fn from(e: io::Error) -> Self { 29 | Error::IoError(e) 30 | } 31 | } 32 | use serde::{Deserialize, Serialize}; 33 | #[derive(Serialize, Deserialize)] 34 | pub struct Data { 35 | pub vertices: Vertices, 36 | pub animations: Option, 37 | } 38 | 39 | pub fn load<'a, P: AsRef + std::fmt::Debug + 'a>( 40 | dirname: &'a P, 41 | fps: f32, 42 | ) -> Result { 43 | let filenames = dirname 44 | .as_ref() 45 | .read_dir()? 46 | .into_iter() 47 | .filter_map(|p| { 48 | if let Ok(entry) = p { 49 | let path = entry.path(); 50 | if let Some(ext) = path.extension() { 51 | if ext == "dae" { 52 | Some(path) 53 | } else { 54 | None 55 | } 56 | } else { 57 | // Discard files having bad extensions 58 | None 59 | } 60 | } else { 61 | None 62 | } 63 | }) 64 | .collect::>(); 65 | 66 | let docs: Result, _> = filenames 67 | .iter() 68 | .map(|f| { 69 | collada::document::ColladaDocument::from_path(f).map_err(|_| Error::OpenFile { 70 | path: f.to_str().unwrap().to_owned(), 71 | }) 72 | }) 73 | .collect(); 74 | let docs = docs?; 75 | let frame_time = 1.0 / fps; 76 | 77 | let res: Result, _> = docs 78 | .into_iter() 79 | .zip(filenames.iter()) 80 | .map(|(doc, filename)| parse_collada_doc(filename, doc, frame_time)) 81 | .collect(); 82 | let mut data = res?; 83 | 84 | // Check wheter the vertices and skeleton between files are equal 85 | for (cur, next) in data.iter().zip(data.iter().skip(1).cycle()) { 86 | if cur.vertices != next.vertices { 87 | return Err(Error::VerticesNotEqual); 88 | } 89 | 90 | if let Some(cur_anims) = &cur.animations { 91 | if let Some(next_anims) = &next.animations { 92 | // The two consecutive files contain animations, 93 | // so we check if their skeletons are equal 94 | if cur_anims.get_skeleton() != next_anims.get_skeleton() { 95 | return Err(Error::SkeletonNotEqual); 96 | } 97 | } else { 98 | return Err(Error::SkeletonNotEqual); 99 | } 100 | } else if next.animations.is_some() { 101 | return Err(Error::SkeletonNotEqual); 102 | } 103 | } 104 | // At this point, either: 105 | // - same vertices shared by the files, same skeleton, different animations 106 | // - same vertices shared by the files, no animations (static mesh) 107 | 108 | // The vertices and skeleton correspond 109 | // Therefore we can append the animations 110 | let Data { 111 | vertices, 112 | animations, 113 | } = data.remove(0); 114 | if let Some(mut animations) = animations { 115 | for d in data.into_iter() { 116 | animations.append(d.animations.unwrap()); 117 | } 118 | 119 | let data = Data { 120 | animations: Some(animations), 121 | vertices, 122 | }; 123 | 124 | Ok(data) 125 | } else { 126 | // All the files do not contain any animations 127 | // and contain the same vertices 128 | Ok(Data { 129 | vertices, 130 | animations: None, 131 | }) 132 | } 133 | } 134 | 135 | fn parse_collada_doc<'a, P: AsRef + std::fmt::Debug + 'a>( 136 | path: &'a P, 137 | doc: collada::document::ColladaDocument, 138 | frame_time: f32, 139 | ) -> Result { 140 | if let Some(obj_set) = doc.get_obj_set() { 141 | let object = obj_set.objects.first().ok_or(Error::EmptyFile)?; 142 | 143 | let p = &object.vertices; 144 | let n = &object.normals; 145 | let t = &object.tex_vertices; 146 | 147 | let mut positions = vec![]; 148 | let mut normals = vec![]; 149 | let mut texcoords = vec![]; 150 | let mut indices = vec![]; 151 | let mut weights = None; 152 | let mut bone_ids = None; 153 | 154 | let (w, b) = if doc.get_animations().is_some() { 155 | // If the skeleton is defined, therefore there is a bind data associated to it 156 | // We can unwrap to get this 157 | let bind_data_set = doc.get_bind_data_set().unwrap(); 158 | let bind_data = bind_data_set.bind_data.first().unwrap(); 159 | let mut w: Vec<[f32; 2]> = vec![[0.0; 2]; p.len()]; 160 | let mut b: Vec<[i32; 2]> = vec![[0; 2]; p.len()]; 161 | 162 | let mut cur_idx_weights: Vec = vec![0; p.len()]; 163 | 164 | // Retrieve the inverse bind poses of that object 165 | for collada::VertexWeight { 166 | vertex, 167 | joint, 168 | weight, 169 | } in &bind_data.vertex_weights 170 | { 171 | let cur_idx = &mut cur_idx_weights[*vertex]; 172 | 173 | let weight = bind_data.weights[*weight]; 174 | w[*vertex][*cur_idx] = weight; 175 | b[*vertex][*cur_idx] = *joint as i32; 176 | 177 | *cur_idx += 1; 178 | } 179 | 180 | /*for wi in w.iter() { 181 | assert!((wi.iter().sum::() - 1.0).abs() < 1e-3); 182 | }*/ 183 | // Initialize the final vertex weights and bones 184 | weights = Some(vec![]); 185 | bone_ids = Some(vec![]); 186 | 187 | (w, b) 188 | } else { 189 | (vec![], vec![]) 190 | }; 191 | 192 | for geometry in &object.geometry { 193 | for primitive in &geometry.mesh { 194 | match primitive { 195 | collada::PrimitiveElement::Triangles(triangles) => { 196 | let normals_idx = triangles.normals.as_ref().unwrap(); 197 | let texcoords_idx = triangles.tex_vertices.as_ref().unwrap(); 198 | let positions_idx = &triangles.vertices; 199 | assert_eq!(positions_idx.len(), normals_idx.len()); 200 | assert_eq!(positions_idx.len(), texcoords_idx.len()); 201 | 202 | let mut idx = 0; 203 | for (&vertex_idx, (&normal_idx, &tx_idx)) in positions_idx 204 | .iter() 205 | .zip(normals_idx.iter().zip(texcoords_idx.iter())) 206 | { 207 | positions.push(Point3::new( 208 | p[vertex_idx.0].x as f32, 209 | p[vertex_idx.0].y as f32, 210 | p[vertex_idx.0].z as f32, 211 | )); 212 | positions.push(Point3::new( 213 | p[vertex_idx.1].x as f32, 214 | p[vertex_idx.1].y as f32, 215 | p[vertex_idx.1].z as f32, 216 | )); 217 | positions.push(Point3::new( 218 | p[vertex_idx.2].x as f32, 219 | p[vertex_idx.2].y as f32, 220 | p[vertex_idx.2].z as f32, 221 | )); 222 | normals.push(Vector3::new( 223 | n[normal_idx.0].x as f32, 224 | n[normal_idx.0].y as f32, 225 | n[normal_idx.0].z as f32, 226 | )); 227 | normals.push(Vector3::new( 228 | n[normal_idx.1].x as f32, 229 | n[normal_idx.1].y as f32, 230 | n[normal_idx.1].z as f32, 231 | )); 232 | normals.push(Vector3::new( 233 | n[normal_idx.2].x as f32, 234 | n[normal_idx.2].y as f32, 235 | n[normal_idx.2].z as f32, 236 | )); 237 | texcoords.push(Point2::new(t[tx_idx.0].x as f32, t[tx_idx.0].y as f32)); 238 | texcoords.push(Point2::new(t[tx_idx.1].x as f32, t[tx_idx.1].y as f32)); 239 | texcoords.push(Point2::new(t[tx_idx.2].x as f32, t[tx_idx.2].y as f32)); 240 | 241 | if let Some(weights) = &mut weights { 242 | weights.push(w[vertex_idx.0]); 243 | weights.push(w[vertex_idx.1]); 244 | weights.push(w[vertex_idx.2]); 245 | } 246 | if let Some(bone_ids) = &mut bone_ids { 247 | bone_ids.push(b[vertex_idx.0]); 248 | bone_ids.push(b[vertex_idx.1]); 249 | bone_ids.push(b[vertex_idx.2]); 250 | } 251 | 252 | indices.extend([idx, idx + 1, idx + 2].iter()); 253 | idx += 3; 254 | } 255 | } 256 | _ => return Err(Error::PrimitiveNotTriangles), 257 | } 258 | } 259 | } 260 | 261 | let vertices = Vertices { 262 | positions, 263 | normals, 264 | texcoords, 265 | bone_ids, 266 | weights, 267 | indices, 268 | }; 269 | 270 | if let Some(name) = path.as_ref().file_stem() { 271 | let animations = Animations::new(name.to_str().unwrap(), &doc, frame_time); 272 | Ok(Data { 273 | vertices, 274 | animations, 275 | }) 276 | } else { 277 | Err(Error::EmptyFile) 278 | } 279 | } else { 280 | Err(Error::EmptyFile) 281 | } 282 | } 283 | 284 | pub fn write>(data: &Data, path: P) -> Result<(), Error> { 285 | let mut buffer = BufWriter::new(File::create(path)?); 286 | 287 | let encoded: Vec = bincode::serialize(data).map_err(Error::Serialize)?; 288 | 289 | buffer.write_all(&encoded)?; 290 | buffer.flush()?; 291 | 292 | Ok(()) 293 | } 294 | 295 | pub fn read>(filename: P) -> Result { 296 | let mut f = File::open(&filename)?; 297 | 298 | let mut data = Vec::new(); 299 | f.read_to_end(&mut data)?; 300 | 301 | let decoded = bincode::deserialize(&data[..]).map_err(Error::Deserialize)?; 302 | 303 | Ok(decoded) 304 | } 305 | use std::fs::File; 306 | use std::io::BufWriter; 307 | use std::io::Write; 308 | 309 | use std::io::Read; 310 | 311 | #[cfg(test)] 312 | mod tests { 313 | use super::Data; 314 | #[test] 315 | fn serialize_to_binary() { 316 | let model = super::load(&"./test/tube", 30.0).unwrap(); 317 | super::write(&model, "./test/tube/tube.bin").unwrap(); 318 | } 319 | 320 | #[test] 321 | fn deserialize() { 322 | let model = super::load(&"./test/tube", 30.0).unwrap(); 323 | 324 | super::write(&model, "./test/tube/tube.bin").unwrap(); 325 | let Data { animations: _, .. } = super::read(&"./test/tube/tube.bin").unwrap(); 326 | } 327 | 328 | #[test] 329 | fn human() { 330 | let model = super::load(&"./test/human", 30.0).unwrap(); 331 | super::write(&model, "./test/human/human.bin").unwrap(); 332 | let Data { animations: _, .. } = super::read(&"./test/human/human.bin").unwrap(); 333 | } 334 | 335 | #[test] 336 | fn spider() { 337 | let model = super::load(&"./test/spider", 30.0).unwrap(); 338 | super::write(&model, "./test/spider/spider.bin").unwrap(); 339 | let Data { animations: _, .. } = super::read(&"./test/spider/spider.bin").unwrap(); 340 | } 341 | } 342 | -------------------------------------------------------------------------------- /src/skeleton.rs: -------------------------------------------------------------------------------- 1 | use serde::{Deserialize, Serialize}; 2 | #[derive(Debug, Serialize, Deserialize, PartialEq)] 3 | pub struct Skeleton { 4 | root: Option, 5 | joint_names: Vec, 6 | } 7 | impl Default for Skeleton { 8 | fn default() -> Self { 9 | Self::new() 10 | } 11 | } 12 | 13 | use super::transform::to_matrix4; 14 | impl Skeleton { 15 | pub fn new() -> Self { 16 | Skeleton { 17 | root: None, 18 | joint_names: vec![], 19 | } 20 | } 21 | 22 | /// Parse the first skeleton 23 | pub fn from(doc: &collada::document::ColladaDocument) -> Option { 24 | if let Some(skeletons) = &doc.get_skeletons() { 25 | if let Some(skeleton) = skeletons.first() { 26 | if let Some(bind_data_set) = &doc.get_bind_data_set() { 27 | let bind_data = &bind_data_set.bind_data[0]; 28 | let mut s = Skeleton::new(); 29 | 30 | let mut prev_inv_bind_pose = Matrix4::identity().into(); 31 | for (joint_idx, joint) in skeleton.joints.iter().enumerate() { 32 | let parent_idx = if joint.parent_index == 255 { 33 | // Root case 34 | None 35 | } else { 36 | Some(joint.parent_index as usize) 37 | }; 38 | let bind_data_joint_idx = 39 | bind_data.joint_names.iter().position(|joint_name| { 40 | let skeleton_name = 41 | bind_data.skeleton_name.as_ref().unwrap().replace(" ", "_"); 42 | let bind_data_name = format!("{}_{}", skeleton_name, joint_name); 43 | bind_data_name == joint.name 44 | }); 45 | let mut vertices_attached = false; 46 | let mut idx_transform = None; 47 | let inverse_bind_pose = 48 | if let Some(bind_data_joint_idx) = bind_data_joint_idx { 49 | let inverse_bind_pose = 50 | bind_data.inverse_bind_poses[bind_data_joint_idx]; 51 | prev_inv_bind_pose = inverse_bind_pose; 52 | vertices_attached = true; 53 | idx_transform = Some(bind_data_joint_idx); 54 | 55 | inverse_bind_pose 56 | } else { 57 | prev_inv_bind_pose 58 | }; 59 | 60 | let bone = Bone::new( 61 | joint_idx, 62 | parent_idx, 63 | to_matrix4(&inverse_bind_pose), 64 | vertices_attached, 65 | idx_transform, 66 | ); 67 | let name = joint.name.to_string(); 68 | s.add(name, bone); 69 | } 70 | 71 | Some(s) 72 | } else { 73 | None 74 | } 75 | 76 | /*if let Some(parent_name) = &parent_name { 77 | // The bone has a parent 78 | let bone = Bone::new(name, Some(parent_name.clone()), to_matrix4(&inverse_bind_pose)); 79 | // keep trace of the parent bone hierarchy 80 | let mut bones_stack = vec![bone]; 81 | let mut cur_parent = &s.joints[j.parent_index as usize]; 82 | while !skeleton.contains(&cur_parent.name) { 83 | let parent_index = cur_parent.parent_index as usize; 84 | let parent_name = if parent_index == 255 { 85 | None 86 | } else { 87 | let parent_j = &s.joints[parent_index]; 88 | Some(parent_j.name.clone()) 89 | }; 90 | let inverse_bind_pose_parent = to_matrix4(&bind_data.inverse_bind_poses[parent_index]); 91 | let cur_bone = Bone::new(cur_parent.name.clone(), parent_name, inverse_bind_pose_parent); 92 | bones_stack.push(cur_bone); 93 | 94 | cur_parent = &s.joints[parent_index]; 95 | } 96 | 97 | // cur_parent is in the bone 98 | // add the parents_bone successively 99 | while !bones_stack.is_empty() { 100 | let bone = bones_stack.pop().unwrap(); 101 | skeleton.add(bone); 102 | } 103 | } else {*/ 104 | 105 | //} 106 | } else { 107 | None 108 | } 109 | } else { 110 | None 111 | } 112 | } 113 | 114 | fn add(&mut self, name: String, bone: Bone) { 115 | if let Some(parent_name_idx) = bone.parent_name_idx { 116 | // By construction, the parent is already in the skeleton 117 | // Let's check that 118 | assert!(self.contains(parent_name_idx)); 119 | self.root.as_mut().unwrap().add(&bone); 120 | } else { 121 | // Bone is the root 122 | // Make sure there is no root present 123 | assert!(self.root.is_none()); 124 | 125 | self.root = Some(bone); 126 | } 127 | self.joint_names.push(name); 128 | } 129 | 130 | pub fn get_joint_names(&self) -> &[String] { 131 | &self.joint_names 132 | } 133 | 134 | fn contains(&self, name_idx: usize) -> bool { 135 | if let Some(root) = &self.root { 136 | root.contains(name_idx) 137 | } else { 138 | // The skeleton is empty 139 | // hence it contains nothing 140 | false 141 | } 142 | } 143 | 144 | pub fn get_root(&self) -> &Option { 145 | &self.root 146 | } 147 | 148 | pub fn get_num_vertices_attached_bones(&self) -> usize { 149 | let mut num_bones = 0; 150 | if let Some(root) = &self.root { 151 | root.get_num_vertices_attached_bones(&mut num_bones); 152 | } 153 | num_bones 154 | } 155 | } 156 | use na::Matrix4; 157 | #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] 158 | pub struct Bone { 159 | // The name of the bone 160 | name_idx: usize, 161 | /// The name of its parent, None if the bone is the root 162 | parent_name_idx: Option, 163 | 164 | /// Node's children if there are some 165 | children: Option>, 166 | /// The inverse going from the bind pose global space to the local bone space 167 | inverse_bind_pose: Matrix4, 168 | // A flag telling if some vertices are attached to it 169 | // This flag will determine if the bone needs to be sent 170 | // to the GPU or not 171 | vertices_attached: bool, 172 | pub idx_transform: Option, 173 | } 174 | 175 | impl Bone { 176 | fn new( 177 | name_idx: usize, 178 | parent_name_idx: Option, 179 | inverse_bind_pose: Matrix4, 180 | vertices_attached: bool, 181 | idx_transform: Option, 182 | ) -> Self { 183 | Bone { 184 | name_idx, 185 | parent_name_idx, 186 | children: None, 187 | inverse_bind_pose, 188 | vertices_attached, 189 | idx_transform, 190 | } 191 | } 192 | 193 | pub fn add(&mut self, bone: &Bone) { 194 | if bone.parent_name_idx.unwrap() == self.name_idx { 195 | // We append bone to the children 196 | let bone = bone.clone(); 197 | if let Some(children) = &mut self.children { 198 | children.push(bone); 199 | } else { 200 | self.children = Some(vec![bone]); 201 | } 202 | } else if let Some(children) = &mut self.children { 203 | for child in children.iter_mut() { 204 | child.add(bone); 205 | } 206 | } 207 | } 208 | 209 | pub fn contains(&self, name_idx: usize) -> bool { 210 | if self.name_idx == name_idx { 211 | true 212 | } else if let Some(children) = &self.children { 213 | for child in children { 214 | if child.contains(name_idx) { 215 | return true; 216 | } 217 | } 218 | 219 | false 220 | } else { 221 | false 222 | } 223 | } 224 | 225 | pub fn get_inverse_bind_pose(&self) -> &Matrix4 { 226 | &self.inverse_bind_pose 227 | } 228 | 229 | pub fn get_children(&self) -> Option<&Vec> { 230 | self.children.as_ref() 231 | } 232 | 233 | pub fn get_name<'a>(&self, skeleton: &'a Skeleton) -> &'a str { 234 | &skeleton.joint_names[self.name_idx] 235 | } 236 | 237 | pub fn has_vertices_attached(&self) -> bool { 238 | self.vertices_attached 239 | } 240 | 241 | pub fn get_num_vertices_attached_bones(&self, num_bones: &mut usize) { 242 | *num_bones = if self.vertices_attached { 243 | *num_bones + 1 244 | } else { 245 | *num_bones 246 | }; 247 | 248 | if let Some(children) = &self.children { 249 | for child in children { 250 | child.get_num_vertices_attached_bones(num_bones); 251 | } 252 | } 253 | } 254 | } 255 | -------------------------------------------------------------------------------- /src/transform.rs: -------------------------------------------------------------------------------- 1 | use na::{Matrix4, Quaternion, UnitQuaternion, Vector3}; 2 | #[derive(PartialEq, Clone, Debug)] 3 | pub struct Transform { 4 | // Translation vector 5 | t: Vector3, 6 | // Rotating component 7 | r: UnitQuaternion, 8 | } 9 | 10 | // Code adapted to Rust from: https://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/ 11 | fn quat_from_mat4(m: &Matrix4) -> UnitQuaternion { 12 | let tr = m[(0, 0)] + m[(1, 1)] + m[(2, 2)]; 13 | let q = if tr > 0.0 { 14 | let s = 0.5 / (tr + 1.0).sqrt(); 15 | [ 16 | 0.25 / s, 17 | (m[(2, 1)] - m[(1, 2)]) * s, 18 | (m[(0, 2)] - m[(2, 0)]) * s, 19 | (m[(1, 0)] - m[(0, 1)]) * s, 20 | ] 21 | } else if m[(0, 0)] > m[(1, 1)] && m[(0, 0)] > m[(2, 2)] { 22 | let s = 2.0 * (1.0 + m[(0, 0)] - m[(1, 1)] - m[(2, 2)]).sqrt(); 23 | [ 24 | (m[(2, 1)] - m[(1, 2)]) / s, 25 | 0.25 * s, 26 | (m[(0, 1)] + m[(1, 0)]) / s, 27 | (m[(0, 2)] + m[(2, 0)]) / s, 28 | ] 29 | } else if m[(1, 1)] > m[(2, 2)] { 30 | let s = 2.0 * (1.0 + m[(1, 1)] - m[(0, 0)] - m[(2, 2)]).sqrt(); 31 | [ 32 | (m[(0, 2)] - m[(2, 0)]) / s, 33 | (m[(0, 1)] + m[(1, 0)]) / s, 34 | 0.25 * s, 35 | (m[(1, 2)] + m[(2, 1)]) / s, 36 | ] 37 | } else { 38 | let s = 2.0 * (1.0 + m[(2, 2)] - m[(0, 0)] - m[(1, 1)]).sqrt(); 39 | [ 40 | (m[(1, 0)] - m[(0, 1)]) / s, 41 | (m[(0, 2)] + m[(2, 0)]) / s, 42 | (m[(1, 2)] + m[(2, 1)]) / s, 43 | 0.25 * s, 44 | ] 45 | }; 46 | 47 | UnitQuaternion::new_normalize(Quaternion::new(q[0], q[1], q[2], q[3])) 48 | } 49 | 50 | impl From<&Matrix4> for Transform { 51 | fn from(m: &Matrix4) -> Self { 52 | let r = quat_from_mat4(m); 53 | let t = Vector3::::new(m[(0, 3)], m[(1, 3)], m[(2, 3)]); 54 | Transform { t, r } 55 | } 56 | } 57 | 58 | pub fn to_matrix4(m: &[[f32; 4]; 4]) -> Matrix4 { 59 | let m = unsafe { std::slice::from_raw_parts(m.as_ptr() as *const f32, 16) }; 60 | Matrix4::from_row_slice(m) 61 | } 62 | impl From<&[[f32; 4]; 4]> for Transform { 63 | fn from(m: &[[f32; 4]; 4]) -> Self { 64 | let mat = to_matrix4(m); 65 | (&mat).into() 66 | } 67 | } 68 | 69 | impl From for Matrix4 { 70 | fn from(t: Transform) -> Self { 71 | let Transform { t, r } = t; 72 | 73 | // Convert the quaternion to a matrix 74 | // describing a pure rotation 75 | let mut mat: Matrix4 = r.into(); 76 | // Set the translation part 77 | mat[(0, 3)] = t.x; 78 | mat[(1, 3)] = t.y; 79 | mat[(2, 3)] = t.z; 80 | 81 | mat 82 | } 83 | } 84 | 85 | impl Transform { 86 | pub fn interpolate(&self, rhs: &Self, alpha: f32) -> Self { 87 | // Linear interpolation for the translation part 88 | let t = self.t.lerp(&rhs.t, alpha); 89 | // Spherical interpolation between the rotation parts 90 | let r = self.r.slerp(&rhs.r, alpha); 91 | 92 | Transform { t, r } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /src/utils.rs: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/vertices.rs: -------------------------------------------------------------------------------- 1 | type Position = na::Point3; 2 | type Normal = na::Vector3; 3 | type Texcoord = na::Point2; 4 | type Index = u32; 5 | type Weight = f32; 6 | type BoneIdx = i32; 7 | 8 | use serde::{Deserialize, Serialize}; 9 | #[derive(Serialize, Deserialize, PartialEq)] 10 | pub struct Vertices { 11 | pub positions: Vec, 12 | pub normals: Vec, 13 | pub texcoords: Vec, 14 | 15 | // Used for animation purposes 16 | // The weights of each bone for each vertices. Of size NVertices x 2 17 | pub weights: Option>, 18 | // The 2 bones that influences the vertices the much. Of size NVertices x 2 19 | pub bone_ids: Option>, 20 | 21 | pub indices: Vec, 22 | } 23 | -------------------------------------------------------------------------------- /test/human/human.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bmatthieu3/rib/134e19772a4cf3ff7d4918cd8ef039f1a9216253/test/human/human.bin -------------------------------------------------------------------------------- /test/human/human.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bmatthieu3/rib/134e19772a4cf3ff7d4918cd8ef039f1a9216253/test/human/human.blend -------------------------------------------------------------------------------- /test/human/texture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bmatthieu3/rib/134e19772a4cf3ff7d4918cd8ef039f1a9216253/test/human/texture.png -------------------------------------------------------------------------------- /test/spider/spider.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bmatthieu3/rib/134e19772a4cf3ff7d4918cd8ef039f1a9216253/test/spider/spider.bin -------------------------------------------------------------------------------- /test/spider/spider.blend: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bmatthieu3/rib/134e19772a4cf3ff7d4918cd8ef039f1a9216253/test/spider/spider.blend -------------------------------------------------------------------------------- /test/tube/tube.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bmatthieu3/rib/134e19772a4cf3ff7d4918cd8ef039f1a9216253/test/tube/tube.bin -------------------------------------------------------------------------------- /test/tube/tube.dae: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Blender User 6 | Blender 2.90.1 commit date:2020-09-23, commit time:06:43, hash:3e85bb34d0d7 7 | 8 | 2020-11-20T09:48:46 9 | 2020-11-20T09:48:46 10 | 11 | Z_UP 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 0 0 0 1 20 | 21 | 22 | 0.8 0.8 0.8 1 23 | 24 | 25 | 0.5 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 1.716061 1.390658 -0.1953755 1.037214 1.700438 -0.1353142 1.706428 1.315959 0.08102375 1.027582 1.625739 0.1410849 1.614502 1.086454 0.2257513 0.9356555 1.396234 0.2858126 1.494131 0.8365823 0.1540266 0.8152849 1.146362 0.2140879 1.415828 0.7127165 -0.09213376 0.7369817 1.022497 -0.03207248 1.425461 0.7874146 -0.3685329 0.7466143 1.097195 -0.3084717 1.517387 1.01692 -0.5132596 0.8385406 1.3267 -0.4531983 1.637757 1.266791 -0.4415358 0.9589111 1.576572 -0.3814746 -0.09085184 2.215212 -0.03550803 -0.1004847 2.140513 0.2408911 -0.1924108 1.911008 0.3856188 -0.3127814 1.661137 0.313894 -0.3910846 1.537271 0.06773358 -0.381452 1.611969 -0.2086655 -0.2895257 1.841475 -0.3533922 -0.1691552 2.091346 -0.2816684 -0.7810156 2.530157 0.02555441 -0.7906484 2.455458 0.3019536 -0.8825745 2.225953 0.4466813 -1.002945 1.976081 0.3749566 -1.081248 1.852216 0.1287961 -1.071616 1.926914 -0.147603 -0.9796894 2.156419 -0.2923297 -0.8593189 2.406291 -0.2206059 -1.471459 2.845229 0.08664172 -1.481092 2.770531 0.3630409 -1.573019 2.541025 0.5077686 -1.693389 2.291154 0.4360439 -1.771692 2.167288 0.1898834 -1.76206 2.241986 -0.08651566 -1.670133 2.471492 -0.2312423 -1.549763 2.721363 -0.1595185 0.2512518 1.403749 0.2639909 0.1729485 1.279884 0.01783055 0.2745075 1.584087 -0.4032953 0.3948779 1.833959 -0.3315715 0.4635484 1.883126 0.190988 0.3716223 1.653621 0.3357157 0.1825812 1.354582 -0.2585686 0.4731813 1.957825 -0.08541113 1.489779 1.493918 -0.175355 1.263497 1.597178 -0.1553346 1.253864 1.522479 0.1210646 1.480146 1.419219 0.1010441 1.161938 1.292974 0.2657922 1.38822 1.189714 0.2457717 1.041567 1.043102 0.1940675 1.267849 0.9398424 0.1740471 0.9632639 0.9192367 -0.0520929 1.189546 0.8159767 -0.07211333 0.9728966 0.9939347 -0.3284921 1.199179 0.8906747 -0.3485125 1.064823 1.22344 -0.4732187 1.291105 1.12018 -0.4932392 1.185193 1.473312 -0.401495 1.411475 1.370051 -0.4215154 0.3609597 1.194088 0.001196146 0.5489707 1.108292 -0.01543813 0.582889 1.748163 -0.3482059 0.7709001 1.662367 -0.3648403 0.5596334 1.567825 0.3190813 0.7476445 1.48203 0.302447 0.3705923 1.268786 -0.2752029 0.5586034 1.18299 -0.2918373 0.6611924 1.872029 -0.1020455 0.8492035 1.786234 -0.1186798 0.6272739 1.232158 0.2307223 0.4392627 1.317954 0.2473566 0.6505296 1.412496 -0.436564 0.4625185 1.498292 -0.4199296 0.8395705 1.711535 0.1577193 0.6515595 1.797331 0.1743537 0.06324064 1.489545 0.2806254 -0.1247704 1.575341 0.2972597 0.08649641 1.669883 -0.3866609 -0.1015146 1.755679 -0.3700265 0.2755374 1.968922 0.2076224 0.08752626 2.054718 0.2242568 -0.2030735 1.451475 0.05109924 -0.01506239 1.365679 0.03446489 0.01885581 2.00555 -0.2983028 0.2068669 1.919754 -0.3149372 -0.004399716 1.825212 0.3689844 0.1836113 1.739417 0.35235 -0.1934408 1.526173 -0.2252998 -0.005429744 1.440377 -0.2419342 0.09715926 2.129416 -0.05214238 0.2851703 2.043621 -0.06877678 -0.3209065 2.320194 -0.01515388 -0.5509611 2.425175 0.005200266 -0.5605937 2.350477 0.2815995 -0.3305391 2.245495 0.2612453 -0.3992099 2.196328 -0.2613143 -0.6292645 2.301309 -0.2409601 -0.6115066 1.716951 -0.1883113 -0.8415612 1.821932 -0.1679571 -0.7496348 2.051437 -0.3126838 -0.5195801 1.946456 -0.333038 -0.542836 1.766118 0.3342483 -0.7728906 1.8711 0.3546024 -0.8511937 1.747234 0.108442 -0.6211391 1.642252 0.08808779 -0.6525199 2.120971 0.4263271 -0.4224653 2.01599 0.4059729 -1.219427 2.26582 -0.2711188 -1.449575 2.370843 -0.2507563 -1.329204 2.620715 -0.1790326 -1.099056 2.515691 -0.1993951 -1.320986 1.961616 0.150007 -1.551134 2.06664 0.1703695 -1.541501 2.141338 -0.1060296 -1.311353 2.036314 -0.1263921 -1.122312 2.335353 0.4678921 -1.35246 2.440377 0.4882546 -1.472831 2.190505 0.4165299 -1.242682 2.085481 0.3961674 -1.020753 2.639557 0.04676532 -1.250901 2.744581 0.06712776 -1.260534 2.669883 0.343527 -1.030386 2.564858 0.3231645 -0.004065871 2.395367 0.01620429 -0.01369875 2.320668 0.2926035 -0.2341205 2.500348 0.03655844 -0.2437531 2.42565 0.3129577 0.06817144 2.54532 0.05924773 0.05853855 2.470622 0.3356469 -0.1618831 2.650302 0.07960194 -0.1715158 2.575604 0.3560011 0.1481698 2.711385 0.1069157 0.1385369 2.636687 0.3833149 -0.0818848 2.816367 0.1272698 -0.09151744 2.741668 0.403669 0.2496524 2.922048 0.1673852 0.2400195 2.84735 0.4437844 0.01959776 3.027029 0.1877394 0.009965121 2.952331 0.4641386 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 0.4201745 0.8722215 0.250366 0.2733321 0.4323782 0.8592664 -0.03362584 -0.2607498 0.9648207 -0.3208849 -0.8011311 0.5051949 -0.4201743 -0.8722218 -0.250365 -0.2733318 -0.4323756 -0.8592679 -0.3208851 -0.8011308 0.5051953 0.03362458 0.2607467 -0.9648216 0.3208851 0.8011304 -0.5051958 0.90682 -0.4138122 -0.0802313 0.4201743 0.8722216 0.2503663 0.03362393 0.2607467 -0.9648215 0.2733325 0.432378 0.8592664 -0.4201745 -0.872222 -0.2503643 0.3208838 0.8011307 -0.5051962 0.4201738 0.8722219 0.2503661 -0.03362566 -0.2607494 0.9648208 -0.2733312 -0.4323751 -0.8592682 0.0336247 0.260747 -0.9648215 0.3208848 0.8011304 -0.5051961 -0.2733322 -0.4323757 -0.8592677 -0.3208855 -0.8011304 0.5051957 0.2733324 0.4323782 0.8592662 0.03362452 0.260747 -0.9648215 -0.4201747 -0.8722218 -0.2503643 -0.03362554 -0.2607496 0.9648207 -0.9068197 0.4138128 0.08023148 -0.4201756 -0.8722213 -0.2503647 -0.03362601 -0.2607491 0.9648209 0.4201732 0.8722219 0.2503671 0.3208844 0.8011307 -0.5051959 -0.2733319 -0.4323757 -0.8592677 -0.3208862 -0.8011309 0.5051943 0.2733321 0.4323781 0.8592665 -0.2733312 -0.4323756 -0.859268 -0.03362607 -0.2607498 0.9648207 0.4201745 0.8722215 0.2503659 0.320885 0.8011306 -0.5051956 -0.420175 -0.8722217 -0.2503648 0.2733322 0.4323781 0.8592664 0.03362452 0.260747 -0.9648215 -0.3208853 -0.8011314 0.5051942 0.3208849 0.8011305 -0.5051959 0.3208852 0.80113 -0.5051966 0.03362441 0.2607472 -0.9648214 0.03362417 0.2607469 -0.9648216 -0.2733318 -0.4323755 -0.8592678 -0.2733314 -0.4323755 -0.859268 -0.4201752 -0.8722217 -0.2503645 -0.4201753 -0.8722215 -0.2503647 -0.3208855 -0.801131 0.5051947 -0.3208855 -0.8011311 0.5051945 -0.03362601 -0.2607496 0.9648208 -0.03362572 -0.2607498 0.9648207 0.2733324 0.4323781 0.8592663 0.2733326 0.4323777 0.8592666 0.4201756 0.8722208 0.2503665 0.4201751 0.872221 0.2503665 -0.3208858 -0.801131 0.5051947 -0.3208855 -0.8011312 0.5051944 0.03362423 0.260747 -0.9648215 0.03362441 0.2607471 -0.9648215 0.2733324 0.4323781 0.8592663 0.2733328 0.4323781 0.8592663 -0.4201754 -0.8722215 -0.2503644 -0.4201748 -0.8722217 -0.250365 0.3208853 0.8011299 -0.5051966 0.3208846 0.8011306 -0.5051959 0.420175 0.8722212 0.2503661 -0.03362578 -0.2607498 0.9648207 -0.03362548 -0.2607496 0.9648208 -0.2733314 -0.4323758 -0.8592679 -0.2733314 -0.4323753 -0.8592681 -0.2733317 -0.4323752 -0.859268 -0.2733316 -0.4323764 -0.8592675 -0.03362596 -0.2607502 0.9648206 -0.03362601 -0.2607497 0.9648207 0.4201751 0.8722211 0.2503662 0.420175 0.8722211 0.2503664 0.3208847 0.8011296 -0.5051975 0.3208858 0.8011305 -0.5051952 -0.4201748 -0.8722219 -0.2503644 -0.4201751 -0.8722214 -0.2503651 0.2733326 0.4323779 0.8592664 0.2733325 0.4323784 0.8592662 0.0336247 0.2607461 -0.9648218 -0.3208858 -0.8011312 0.5051942 -0.3208856 -0.8011311 0.5051945 -0.03362584 -0.2607498 0.9648208 -0.0336259 -0.2607495 0.9648208 -0.4201753 -0.8722217 -0.2503642 -0.4201747 -0.8722217 -0.2503652 0.0336247 0.2607466 -0.9648216 0.03362429 0.2607467 -0.9648215 0.2733329 0.4323784 0.8592662 0.273332 0.4323781 0.8592666 -0.3208853 -0.8011307 0.5051952 -0.3208851 -0.8011311 0.5051949 -0.2733315 -0.4323759 -0.8592677 -0.2733314 -0.4323759 -0.8592679 0.3208859 0.8011299 -0.5051962 0.3208846 0.8011307 -0.5051959 0.9068199 -0.4138123 -0.08023113 0.4201744 0.8722214 0.2503663 0.2733327 0.4323787 0.859266 0.2733328 0.4323784 0.8592662 -0.3208854 -0.801131 0.5051947 -0.3208846 -0.8011305 0.5051962 -0.2733314 -0.4323752 -0.8592681 -0.2733306 -0.4323759 -0.8592681 0.3208853 0.8011311 -0.5051947 0.3208851 0.8011292 -0.5051979 0.4201754 0.8722212 0.2503656 0.4201754 0.8722214 0.2503647 -0.03362572 -0.2607497 0.9648207 -0.03362566 -0.2607494 0.9648208 -0.4201741 -0.872222 -0.250365 -0.4201747 -0.8722224 -0.2503628 0.03362464 0.2607471 -0.9648214 0.03362411 0.2607475 -0.9648213 -0.9068202 0.4138118 0.08023154 -0.03362584 -0.2607489 0.964821 -0.9068196 0.413813 0.08023232 0.03362482 0.2607479 -0.9648212 0.03362482 0.2607477 -0.9648212 -0.033625 -0.2607471 0.9648214 0.033625 0.2607482 -0.9648212 0.9068197 -0.4138129 -0.08023095 0.033625 0.2607486 -0.964821 0.90682 -0.4138123 -0.08023148 -0.9068197 0.4138128 0.0802322 -0.03362506 -0.2607489 0.9648209 0.4201745 0.8722209 0.250368 0.9068199 -0.4138123 -0.08023089 -0.9068198 0.4138124 0.08023172 -0.03362488 -0.2607481 0.9648212 0.4201741 0.8722214 0.2503667 0.2733325 0.4323781 0.8592663 -0.03362572 -0.2607496 0.9648208 -0.3208853 -0.801131 0.505195 -0.4201744 -0.872222 -0.2503642 -0.2733311 -0.4323754 -0.8592681 -0.3208858 -0.8011311 0.5051943 0.03362435 0.2607468 -0.9648215 0.3208845 0.8011305 -0.505196 0.9068202 -0.4138116 -0.08023136 0.9068199 -0.4138125 -0.08023172 0.9068197 -0.4138129 -0.08023124 0.9068197 -0.4138131 -0.08023124 0.9068202 -0.4138116 -0.08023101 0.4201744 0.8722212 0.2503673 0.03362458 0.260747 -0.9648215 0.2733318 0.4323783 0.8592665 -0.4201747 -0.8722218 -0.2503649 0.3208839 0.8011309 -0.5051958 0.4201735 0.8722217 0.2503672 -0.03362584 -0.2607501 0.9648206 -0.2733315 -0.4323762 -0.8592677 0.0336247 0.2607468 -0.9648215 0.3208848 0.8011309 -0.5051953 -0.2733315 -0.4323757 -0.8592678 -0.3208854 -0.8011313 0.5051946 0.2733325 0.4323784 0.8592662 0.03362464 0.2607465 -0.9648215 -0.4201756 -0.8722214 -0.2503642 -0.0336256 -0.2607498 0.9648208 -0.9068208 0.4138104 0.08023178 -0.9068199 0.4138129 0.08022922 -0.9068201 0.413812 0.08023178 -0.9068201 0.4138119 0.0802325 -0.9068197 0.4138127 0.0802313 -0.4201753 -0.8722217 -0.2503637 -0.03362572 -0.2607499 0.9648207 0.4201748 0.8722214 0.2503661 0.3208856 0.8011298 -0.5051964 -0.2733319 -0.4323757 -0.8592677 -0.3208862 -0.8011305 0.505195 0.2733321 0.4323781 0.8592664 -0.2733317 -0.4323756 -0.8592679 -0.03362566 -0.2607496 0.9648207 0.4201752 0.8722212 0.2503663 0.3208846 0.8011305 -0.505196 -0.4201746 -0.8722218 -0.2503647 0.2733325 0.4323783 0.8592663 0.03362458 0.260747 -0.9648215 -0.3208851 -0.8011304 0.5051959 0.3208851 0.8011296 -0.5051972 0.3208851 0.8011302 -0.5051962 0.03362464 0.2607468 -0.9648215 0.03362441 0.260747 -0.9648215 -0.2733317 -0.4323759 -0.8592676 -0.2733315 -0.4323762 -0.8592675 -0.420175 -0.8722217 -0.2503647 -0.4201745 -0.8722217 -0.2503652 -0.3208855 -0.8011307 0.505195 -0.3208851 -0.8011307 0.5051953 -0.0336259 -0.2607497 0.9648206 -0.03362566 -0.2607495 0.9648208 0.2733325 0.4323782 0.8592664 0.2733328 0.4323785 0.859266 0.4201745 0.8722215 0.2503657 0.4201754 0.8722212 0.2503658 -0.320885 -0.8011315 0.5051942 -0.3208854 -0.801131 0.5051948 0.03362452 0.2607467 -0.9648216 0.03362482 0.2607469 -0.9648215 0.2733325 0.4323785 0.8592662 0.2733324 0.4323781 0.8592664 -0.4201753 -0.8722216 -0.2503644 -0.4201746 -0.8722218 -0.2503645 0.3208851 0.8011305 -0.5051957 0.3208854 0.8011299 -0.5051965 0.4201755 0.8722208 0.2503668 0.4201747 0.8722212 0.2503663 -0.03362584 -0.2607498 0.9648208 -0.03362601 -0.2607496 0.9648207 -0.2733317 -0.4323755 -0.8592678 -0.2733314 -0.4323758 -0.8592678 -0.2733318 -0.4323762 -0.8592674 -0.2733314 -0.4323756 -0.8592679 -0.03362572 -0.260749 0.9648209 -0.03362566 -0.2607497 0.9648207 0.4201745 0.8722214 0.2503662 0.4201756 0.872221 0.2503662 0.320885 0.8011308 -0.5051956 0.320886 0.8011301 -0.5051958 -0.4201751 -0.8722212 -0.2503659 -0.4201751 -0.8722217 -0.2503643 0.2733325 0.4323784 0.8592661 0.2733328 0.4323781 0.8592662 0.03362435 0.260747 -0.9648215 0.03362458 0.2607471 -0.9648215 -0.3208853 -0.8011305 0.5051955 -0.3208851 -0.8011309 0.5051952 -0.0336259 -0.2607492 0.9648208 -0.0336256 -0.2607495 0.9648207 -0.420175 -0.8722218 -0.2503641 -0.4201747 -0.8722215 -0.2503656 0.03362447 0.2607471 -0.9648215 0.03362423 0.260747 -0.9648215 0.273333 0.4323773 0.8592665 0.273332 0.4323783 0.8592663 -0.3208857 -0.8011313 0.5051941 -0.3208854 -0.8011306 0.5051953 -0.2733316 -0.4323753 -0.859268 -0.2733316 -0.4323764 -0.8592674 0.3208857 0.8011296 -0.5051968 0.3208845 0.8011303 -0.5051963 0.9068199 -0.4138122 -0.08023124 0.4201744 0.8722218 0.250365 0.2733328 0.4323781 0.8592662 0.2733325 0.4323776 0.8592666 -0.3208847 -0.8011319 0.5051938 -0.320886 -0.8011314 0.5051937 -0.2733314 -0.4323762 -0.8592676 -0.2733317 -0.4323757 -0.8592678 0.3208853 0.80113 -0.5051964 0.3208842 0.8011307 -0.5051959 0.4201747 0.8722214 0.2503661 0.4201754 0.8722209 0.2503666 -0.03362601 -0.2607494 0.9648208 -0.03362613 -0.2607494 0.9648208 -0.4201753 -0.8722215 -0.2503647 -0.4201745 -0.8722212 -0.250367 0.03362458 0.2607466 -0.9648215 0.03362435 0.2607474 -0.9648215 -0.9068201 0.4138118 0.08023154 -0.03362464 -0.2607482 0.9648211 -0.9068196 0.4138128 0.08023226 0.0336256 0.2607488 -0.9648209 0.03362572 0.260749 -0.9648208 -0.033625 -0.2607485 0.9648211 0.03362512 0.2607473 -0.9648213 0.9068197 -0.4138127 -0.08023232 0.03362494 0.2607486 -0.964821 0.9068199 -0.4138123 -0.08023113 -0.9068196 0.4138129 0.08023226 -0.03362542 -0.2607481 0.9648212 0.4201745 0.8722218 0.2503649 0.9068198 -0.4138126 -0.08023107 -0.9068199 0.4138123 0.0802316 -0.03362506 -0.2607483 0.9648211 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 0.3260422 0.2130391 0.2445616 0.1420661 0.3260421 0.1420661 0.2445617 0.2130391 0.1630811 0.1420662 0.2445616 0.1420661 0.1630811 0.2130392 0.0816006 0.1420662 0.1630811 0.1420662 0.08160066 0.2130392 1.20149e-4 0.1420662 0.0816006 0.1420662 0.6519642 0.142066 0.5704836 0.2130389 0.5704836 0.142066 0.5704836 0.142066 0.4890031 0.2130389 0.4890031 0.142066 0.08160072 0.5078856 1.20337e-4 0.5668548 1.20307e-4 0.5078855 0.4890031 0.142066 0.4075227 0.213039 0.4075226 0.142066 0.4075227 0.213039 0.3260421 0.1420661 0.4075226 0.142066 0.6522043 0.2546871 0.7913002 0.1970716 0.8489157 0.3361675 0.3260423 0.7111673 0.2445618 0.7833234 0.2445618 0.7111672 0.4890032 0.5078855 0.4075227 0.5668549 0.4075227 0.5078856 0.1630812 0.5078855 0.2445617 0.5668549 0.1630813 0.5668549 0.6519642 0.5078856 0.5704836 0.5668548 0.5704836 0.5078855 0.4075227 0.5078856 0.3260422 0.5668548 0.3260422 0.5078855 0.2445617 0.5078855 0.3260422 0.5668548 0.2445617 0.5668549 0.1630812 0.5078855 0.08160072 0.566855 0.08160072 0.5078856 0.4890032 0.5078855 0.5704836 0.5668548 0.4890031 0.5668548 0.4075227 0.9307021 0.4890032 0.9998798 0.4075227 0.9998798 0.4075227 0.7111674 0.3260423 0.7833235 0.3260423 0.7111673 0.4890031 0.7111673 0.5704838 0.7833235 0.4890031 0.7833235 0.08160084 0.7111673 1.20367e-4 0.7833233 1.20357e-4 0.7111671 0.1630813 0.7111672 0.2445618 0.7833234 0.1630813 0.7833234 0.4075227 0.7111674 0.4890031 0.7833235 0.4075227 0.7833235 0.5704837 0.7111673 0.6519642 0.7833234 0.5704838 0.7833235 0.08160084 0.7111673 0.1630813 0.7833234 0.08160084 0.7833234 0.8489156 0.1392159 0.7098197 0.1968314 0.6522043 0.05773538 0.5704837 0.9307019 0.6519643 0.9998796 0.5704837 0.9998796 0.1630813 0.930702 0.08160084 0.9998797 0.08160084 0.930702 0.2445617 0.9307018 0.3260423 0.9998798 0.2445617 0.9998795 0.3260423 0.9307021 0.4075227 0.9998798 0.3260423 0.9998798 0.4890032 0.9307021 0.5704837 0.9998796 0.4890032 0.9998798 1.20286e-4 0.9307018 0.08160084 0.9998797 1.20248e-4 0.9998795 0.1630813 0.930702 0.2445617 0.9998795 0.1630814 0.9998797 0.4890031 0.3309776 0.5704838 0.389947 0.4890032 0.3899469 0.08160066 0.3309777 0.1630812 0.3899471 0.08160066 0.3899471 0.2445617 0.3309777 0.3260423 0.3899469 0.2445617 0.3899471 0.4075227 0.3309777 0.3260423 0.3899469 0.3260422 0.3309776 0.6519642 0.3309776 0.5704838 0.389947 0.5704838 0.3309776 0.2445617 0.3309777 0.1630812 0.3899471 0.1630812 0.3309777 0.4890031 0.3309776 0.4075227 0.3899471 0.4075227 0.3309777 0.08160066 0.3309777 1.20248e-4 0.3899471 1.20228e-4 0.3309777 0.4075226 0.07109308 0.3260421 1.20218e-4 0.4075226 1.20159e-4 0.4075226 0.142066 0.3260421 0.07109314 0.4075226 0.07109308 0.4890031 0.07109302 0.4075226 1.20159e-4 0.4890031 1.20129e-4 0.4890031 0.07109302 0.4075226 0.142066 0.4075226 0.07109308 0.5704836 1.20069e-4 0.4890031 0.07109302 0.4890031 1.20129e-4 0.5704836 0.07109302 0.4890031 0.142066 0.4890031 0.07109302 0.6519642 0.07109308 0.5704836 1.20069e-4 0.6519643 1.20129e-4 0.6519642 0.07109308 0.5704836 0.142066 0.5704836 0.07109302 0.08160054 1.20307e-4 1.20109e-4 0.07109332 1.20069e-4 1.20367e-4 0.0816006 0.1420662 1.20109e-4 0.07109332 0.0816006 0.07109326 0.1630811 0.0710932 0.08160054 1.20307e-4 0.163081 1.20278e-4 0.1630811 0.0710932 0.0816006 0.1420662 0.0816006 0.07109326 0.2445616 1.20218e-4 0.1630811 0.0710932 0.163081 1.20278e-4 0.2445616 0.1420661 0.1630811 0.0710932 0.2445616 0.07109314 0.3260421 1.20218e-4 0.2445616 0.07109314 0.2445616 1.20218e-4 0.3260421 0.1420661 0.2445616 0.07109314 0.3260421 0.07109314 0.08160066 0.2130392 1.20208e-4 0.2720085 1.20188e-4 0.2130392 0.08160066 0.2720085 1.20228e-4 0.3309777 1.20208e-4 0.2720085 0.4890031 0.2130389 0.4075227 0.2720084 0.4075227 0.213039 0.4890032 0.2720082 0.4075227 0.3309777 0.4075227 0.2720084 0.2445617 0.2130391 0.1630811 0.2720084 0.1630811 0.2130392 0.2445617 0.2720084 0.1630812 0.3309777 0.1630811 0.2720084 0.5704836 0.2130389 0.6519642 0.2720083 0.5704837 0.2720083 0.6519642 0.2720083 0.5704838 0.3309776 0.5704837 0.2720083 0.3260422 0.2130391 0.4075227 0.2720084 0.3260422 0.2720083 0.4075227 0.2720084 0.3260422 0.3309776 0.3260422 0.2720083 0.3260422 0.2130391 0.2445617 0.2720084 0.2445617 0.2130391 0.2445617 0.2720084 0.3260422 0.3309776 0.2445617 0.3309777 0.08160066 0.2130392 0.1630811 0.2720084 0.08160066 0.2720085 0.08160066 0.2720085 0.1630812 0.3309777 0.08160066 0.3309777 0.4890031 0.2130389 0.5704837 0.2720083 0.4890032 0.2720082 0.4890032 0.2720082 0.5704838 0.3309776 0.4890031 0.3309776 0.4890032 0.3899469 0.5704838 0.4489163 0.4890032 0.4489162 0.4890032 0.4489162 0.5704836 0.5078855 0.4890032 0.5078855 0.1630812 0.3899471 0.08160072 0.4489163 0.08160066 0.3899471 0.08160072 0.4489163 0.1630812 0.5078855 0.08160072 0.5078856 0.2445617 0.3899471 0.3260423 0.4489162 0.2445617 0.4489163 0.2445617 0.4489163 0.3260422 0.5078855 0.2445617 0.5078855 0.3260423 0.3899469 0.4075227 0.4489163 0.3260423 0.4489162 0.3260423 0.4489162 0.4075227 0.5078856 0.3260422 0.5078855 0.5704838 0.389947 0.6519642 0.4489163 0.5704838 0.4489163 0.5704838 0.4489163 0.6519642 0.5078856 0.5704836 0.5078855 0.2445617 0.3899471 0.1630812 0.4489163 0.1630812 0.3899471 0.2445617 0.4489163 0.1630812 0.5078855 0.1630812 0.4489163 0.4890032 0.3899469 0.4075227 0.4489163 0.4075227 0.3899471 0.4075227 0.4489163 0.4890032 0.5078855 0.4075227 0.5078856 0.08160066 0.3899471 1.20278e-4 0.4489163 1.20248e-4 0.3899471 0.08160072 0.4489163 1.20307e-4 0.5078855 1.20278e-4 0.4489163 0.1630813 0.5668549 0.08160078 0.6390112 0.08160072 0.566855 0.08160078 0.6390112 0.1630813 0.7111672 0.08160084 0.7111673 0.5704836 0.5668548 0.6519642 0.639011 0.5704836 0.639011 0.5704836 0.639011 0.6519642 0.7111672 0.5704837 0.7111673 0.4075227 0.5668549 0.4890031 0.639011 0.4075227 0.6390112 0.4075227 0.6390112 0.4890031 0.7111673 0.4075227 0.7111674 0.2445617 0.5668549 0.1630813 0.639011 0.1630813 0.5668549 0.1630813 0.639011 0.2445618 0.7111672 0.1630813 0.7111672 0.08160072 0.566855 1.20347e-4 0.6390109 1.20337e-4 0.5668548 0.08160078 0.6390112 1.20357e-4 0.7111671 1.20347e-4 0.6390109 0.5704836 0.5668548 0.4890031 0.639011 0.4890031 0.5668548 0.5704836 0.639011 0.4890031 0.7111673 0.4890031 0.639011 0.3260422 0.5668548 0.4075227 0.6390112 0.3260422 0.639011 0.4075227 0.6390112 0.3260423 0.7111673 0.3260422 0.639011 0.3260422 0.5668548 0.2445617 0.5668549 0.2445617 0.5668549 0.3260422 0.639011 0.2445618 0.7111672 0.2445617 0.639011 0.2445618 0.7833234 0.1630813 0.8585165 0.1630813 0.7833234 0.1630813 0.8585165 0.2445617 0.9307018 0.1630813 0.930702 1.20367e-4 0.7833233 0.08160084 0.8585166 1.20326e-4 0.8585164 1.20326e-4 0.8585164 0.08160084 0.930702 1.20286e-4 0.9307018 0.4890031 0.7833235 0.5704837 0.8585166 0.4890032 0.8585166 0.4890032 0.8585166 0.5704837 0.9307019 0.4890032 0.9307021 0.3260423 0.7833235 0.4075227 0.8585166 0.3260423 0.8585166 0.3260423 0.8585166 0.4075227 0.9307021 0.3260423 0.9307021 0.3260423 0.7833235 0.2445618 0.8585165 0.2445618 0.7833234 0.3260423 0.8585166 0.2445617 0.9307018 0.2445618 0.8585165 0.08160084 0.7833234 0.1630813 0.8585165 0.08160084 0.8585166 0.1630813 0.8585165 0.08160084 0.930702 0.08160084 0.8585166 0.6519642 0.7833234 0.5704837 0.8585166 0.5704838 0.7833235 0.6519642 0.8585165 0.5704837 0.9307019 0.5704837 0.8585166 0.4890031 0.7833235 0.4075227 0.8585166 0.4075227 0.7833235 0.4890032 0.8585166 0.4075227 0.9307021 0.4075227 0.8585166 0.3260422 0.639011 0.2445617 0.639011 0.3260422 0.639011 0.2445617 0.5668549 0.2445617 0.639011 0.2445617 0.639011 0.2445617 0.639011 0.3260422 0.639011 0.3260422 0.639011 0.3260422 0.5668548 0.3260422 0.639011 0.3260422 0.5668548 0.3260422 0.5668548 0.3260422 0.639011 0.3260422 0.5668548 0.2445617 0.639011 0.2445617 0.5668549 0.2445617 0.639011 0.3260422 0.639011 0.3260422 0.5668548 0.3260422 0.5668548 0.2445617 0.5668549 0.3260422 0.5668548 0.2445617 0.5668549 0.3260422 0.5668548 0.3260422 0.639011 0.3260422 0.5668548 0.3260422 0.5668548 0.2445617 0.5668549 0.2445617 0.5668549 0.2445617 0.639011 0.3260422 0.639011 0.3260422 0.639011 0.2445617 0.639011 0.2445617 0.5668549 0.2445617 0.639011 0.3260422 0.5668548 0.2445617 0.639011 0.2445617 0.5668549 0.3260422 0.5668548 0.2445617 0.5668549 0.2445617 0.5668549 0.2445617 0.639011 0.3260422 0.639011 0.3260422 0.639011 0.2445617 0.5668549 0.2445617 0.639011 0.2445617 0.639011 0.3260422 0.2130391 0.2445617 0.2130391 0.2445616 0.1420661 0.2445617 0.2130391 0.1630811 0.2130392 0.1630811 0.1420662 0.1630811 0.2130392 0.08160066 0.2130392 0.0816006 0.1420662 0.08160066 0.2130392 1.20188e-4 0.2130392 1.20149e-4 0.1420662 0.6519642 0.142066 0.6519643 0.213039 0.5704836 0.2130389 0.5704836 0.142066 0.5704836 0.2130389 0.4890031 0.2130389 0.08160072 0.5078856 0.08160072 0.566855 1.20337e-4 0.5668548 0.4890031 0.142066 0.4890031 0.2130389 0.4075227 0.213039 0.4075227 0.213039 0.3260422 0.2130391 0.3260421 0.1420661 0.6522043 0.2546871 0.7098197 0.1970716 0.7913002 0.1970716 0.7913002 0.1970716 0.8489157 0.254687 0.8489157 0.3361675 0.8489157 0.3361675 0.7913003 0.3937829 0.7098198 0.3937829 0.7098198 0.3937829 0.6522044 0.3361676 0.8489157 0.3361675 0.6522044 0.3361676 0.6522043 0.2546871 0.8489157 0.3361675 0.3260423 0.7111673 0.3260423 0.7833235 0.2445618 0.7833234 0.4890032 0.5078855 0.4890031 0.5668548 0.4075227 0.5668549 0.1630812 0.5078855 0.2445617 0.5078855 0.2445617 0.5668549 0.6519642 0.5078856 0.6519643 0.5668549 0.5704836 0.5668548 0.4075227 0.5078856 0.4075227 0.5668549 0.3260422 0.5668548 0.2445617 0.5078855 0.3260422 0.5078855 0.3260422 0.5668548 0.1630812 0.5078855 0.1630813 0.5668549 0.08160072 0.566855 0.4890032 0.5078855 0.5704836 0.5078855 0.5704836 0.5668548 0.4075227 0.9307021 0.4890032 0.9307021 0.4890032 0.9998798 0.4075227 0.7111674 0.4075227 0.7833235 0.3260423 0.7833235 0.4890031 0.7111673 0.5704837 0.7111673 0.5704838 0.7833235 0.08160084 0.7111673 0.08160084 0.7833234 1.20367e-4 0.7833233 0.1630813 0.7111672 0.2445618 0.7111672 0.2445618 0.7833234 0.4075227 0.7111674 0.4890031 0.7111673 0.4890031 0.7833235 0.5704837 0.7111673 0.6519642 0.7111672 0.6519642 0.7833234 0.08160084 0.7111673 0.1630813 0.7111672 0.1630813 0.7833234 0.7913002 1.20069e-4 0.8489156 0.0577355 0.8489156 0.1392159 0.8489156 0.1392159 0.7913002 0.1968314 0.7098197 0.1968314 0.7098197 0.1968314 0.6522043 0.139216 0.6522043 0.05773538 0.6522043 0.05773538 0.7098197 1.20069e-4 0.7913002 1.20069e-4 0.7913002 1.20069e-4 0.8489156 0.1392159 0.6522043 0.05773538 0.5704837 0.9307019 0.6519642 0.9307019 0.6519643 0.9998796 0.1630813 0.930702 0.1630814 0.9998797 0.08160084 0.9998797 0.2445617 0.9307018 0.3260423 0.9307021 0.3260423 0.9998798 0.3260423 0.9307021 0.4075227 0.9307021 0.4075227 0.9998798 0.4890032 0.9307021 0.5704837 0.9307019 0.5704837 0.9998796 1.20286e-4 0.9307018 0.08160084 0.930702 0.08160084 0.9998797 0.1630813 0.930702 0.2445617 0.9307018 0.2445617 0.9998795 0.4890031 0.3309776 0.5704838 0.3309776 0.5704838 0.389947 0.08160066 0.3309777 0.1630812 0.3309777 0.1630812 0.3899471 0.2445617 0.3309777 0.3260422 0.3309776 0.3260423 0.3899469 0.4075227 0.3309777 0.4075227 0.3899471 0.3260423 0.3899469 0.6519642 0.3309776 0.6519643 0.3899469 0.5704838 0.389947 0.2445617 0.3309777 0.2445617 0.3899471 0.1630812 0.3899471 0.4890031 0.3309776 0.4890032 0.3899469 0.4075227 0.3899471 0.08160066 0.3309777 0.08160066 0.3899471 1.20248e-4 0.3899471 0.4075226 0.07109308 0.3260421 0.07109314 0.3260421 1.20218e-4 0.4075226 0.142066 0.3260421 0.1420661 0.3260421 0.07109314 0.4890031 0.07109302 0.4075226 0.07109308 0.4075226 1.20159e-4 0.4890031 0.07109302 0.4890031 0.142066 0.4075226 0.142066 0.5704836 1.20069e-4 0.5704836 0.07109302 0.4890031 0.07109302 0.5704836 0.07109302 0.5704836 0.142066 0.4890031 0.142066 0.6519642 0.07109308 0.5704836 0.07109302 0.5704836 1.20069e-4 0.6519642 0.07109308 0.6519642 0.142066 0.5704836 0.142066 0.08160054 1.20307e-4 0.0816006 0.07109326 1.20109e-4 0.07109332 0.0816006 0.1420662 1.20149e-4 0.1420662 1.20109e-4 0.07109332 0.1630811 0.0710932 0.0816006 0.07109326 0.08160054 1.20307e-4 0.1630811 0.0710932 0.1630811 0.1420662 0.0816006 0.1420662 0.2445616 1.20218e-4 0.2445616 0.07109314 0.1630811 0.0710932 0.2445616 0.1420661 0.1630811 0.1420662 0.1630811 0.0710932 0.3260421 1.20218e-4 0.3260421 0.07109314 0.2445616 0.07109314 0.3260421 0.1420661 0.2445616 0.1420661 0.2445616 0.07109314 0.08160066 0.2130392 0.08160066 0.2720085 1.20208e-4 0.2720085 0.08160066 0.2720085 0.08160066 0.3309777 1.20228e-4 0.3309777 0.4890031 0.2130389 0.4890032 0.2720082 0.4075227 0.2720084 0.4890032 0.2720082 0.4890031 0.3309776 0.4075227 0.3309777 0.2445617 0.2130391 0.2445617 0.2720084 0.1630811 0.2720084 0.2445617 0.2720084 0.2445617 0.3309777 0.1630812 0.3309777 0.5704836 0.2130389 0.6519643 0.213039 0.6519642 0.2720083 0.6519642 0.2720083 0.6519642 0.3309776 0.5704838 0.3309776 0.3260422 0.2130391 0.4075227 0.213039 0.4075227 0.2720084 0.4075227 0.2720084 0.4075227 0.3309777 0.3260422 0.3309776 0.3260422 0.2130391 0.3260422 0.2720083 0.2445617 0.2720084 0.2445617 0.2720084 0.3260422 0.2720083 0.3260422 0.3309776 0.08160066 0.2130392 0.1630811 0.2130392 0.1630811 0.2720084 0.08160066 0.2720085 0.1630811 0.2720084 0.1630812 0.3309777 0.4890031 0.2130389 0.5704836 0.2130389 0.5704837 0.2720083 0.4890032 0.2720082 0.5704837 0.2720083 0.5704838 0.3309776 0.4890032 0.3899469 0.5704838 0.389947 0.5704838 0.4489163 0.4890032 0.4489162 0.5704838 0.4489163 0.5704836 0.5078855 0.1630812 0.3899471 0.1630812 0.4489163 0.08160072 0.4489163 0.08160072 0.4489163 0.1630812 0.4489163 0.1630812 0.5078855 0.2445617 0.3899471 0.3260423 0.3899469 0.3260423 0.4489162 0.2445617 0.4489163 0.3260423 0.4489162 0.3260422 0.5078855 0.3260423 0.3899469 0.4075227 0.3899471 0.4075227 0.4489163 0.3260423 0.4489162 0.4075227 0.4489163 0.4075227 0.5078856 0.5704838 0.389947 0.6519643 0.3899469 0.6519642 0.4489163 0.5704838 0.4489163 0.6519642 0.4489163 0.6519642 0.5078856 0.2445617 0.3899471 0.2445617 0.4489163 0.1630812 0.4489163 0.2445617 0.4489163 0.2445617 0.5078855 0.1630812 0.5078855 0.4890032 0.3899469 0.4890032 0.4489162 0.4075227 0.4489163 0.4075227 0.4489163 0.4890032 0.4489162 0.4890032 0.5078855 0.08160066 0.3899471 0.08160072 0.4489163 1.20278e-4 0.4489163 0.08160072 0.4489163 0.08160072 0.5078856 1.20307e-4 0.5078855 0.1630813 0.5668549 0.1630813 0.639011 0.08160078 0.6390112 0.08160078 0.6390112 0.1630813 0.639011 0.1630813 0.7111672 0.5704836 0.5668548 0.6519643 0.5668549 0.6519642 0.639011 0.5704836 0.639011 0.6519642 0.639011 0.6519642 0.7111672 0.4075227 0.5668549 0.4890031 0.5668548 0.4890031 0.639011 0.4075227 0.6390112 0.4890031 0.639011 0.4890031 0.7111673 0.2445617 0.5668549 0.2445617 0.639011 0.1630813 0.639011 0.1630813 0.639011 0.2445617 0.639011 0.2445618 0.7111672 0.08160072 0.566855 0.08160078 0.6390112 1.20347e-4 0.6390109 0.08160078 0.6390112 0.08160084 0.7111673 1.20357e-4 0.7111671 0.5704836 0.5668548 0.5704836 0.639011 0.4890031 0.639011 0.5704836 0.639011 0.5704837 0.7111673 0.4890031 0.7111673 0.3260422 0.5668548 0.4075227 0.5668549 0.4075227 0.6390112 0.4075227 0.6390112 0.4075227 0.7111674 0.3260423 0.7111673 0.3260422 0.5668548 0.3260422 0.5668548 0.2445617 0.5668549 0.3260422 0.639011 0.3260423 0.7111673 0.2445618 0.7111672 0.2445618 0.7833234 0.2445618 0.8585165 0.1630813 0.8585165 0.1630813 0.8585165 0.2445618 0.8585165 0.2445617 0.9307018 1.20367e-4 0.7833233 0.08160084 0.7833234 0.08160084 0.8585166 1.20326e-4 0.8585164 0.08160084 0.8585166 0.08160084 0.930702 0.4890031 0.7833235 0.5704838 0.7833235 0.5704837 0.8585166 0.4890032 0.8585166 0.5704837 0.8585166 0.5704837 0.9307019 0.3260423 0.7833235 0.4075227 0.7833235 0.4075227 0.8585166 0.3260423 0.8585166 0.4075227 0.8585166 0.4075227 0.9307021 0.3260423 0.7833235 0.3260423 0.8585166 0.2445618 0.8585165 0.3260423 0.8585166 0.3260423 0.9307021 0.2445617 0.9307018 0.08160084 0.7833234 0.1630813 0.7833234 0.1630813 0.8585165 0.1630813 0.8585165 0.1630813 0.930702 0.08160084 0.930702 0.6519642 0.7833234 0.6519642 0.8585165 0.5704837 0.8585166 0.6519642 0.8585165 0.6519642 0.9307019 0.5704837 0.9307019 0.4890031 0.7833235 0.4890032 0.8585166 0.4075227 0.8585166 0.4890032 0.8585166 0.4890032 0.9307021 0.4075227 0.9307021 0.3260422 0.639011 0.2445617 0.639011 0.2445617 0.639011 0.2445617 0.5668549 0.2445617 0.5668549 0.2445617 0.639011 0.2445617 0.639011 0.2445617 0.639011 0.3260422 0.639011 0.3260422 0.5668548 0.3260422 0.639011 0.3260422 0.639011 0.3260422 0.5668548 0.3260422 0.639011 0.3260422 0.639011 0.2445617 0.639011 0.2445617 0.5668549 0.2445617 0.5668549 0.3260422 0.639011 0.3260422 0.639011 0.3260422 0.5668548 0.2445617 0.5668549 0.3260422 0.5668548 0.3260422 0.5668548 0.3260422 0.5668548 0.3260422 0.639011 0.3260422 0.639011 0.3260422 0.5668548 0.3260422 0.5668548 0.2445617 0.5668549 0.2445617 0.639011 0.2445617 0.639011 0.3260422 0.639011 0.2445617 0.639011 0.2445617 0.5668549 0.2445617 0.5668549 0.3260422 0.5668548 0.3260422 0.639011 0.2445617 0.639011 0.3260422 0.5668548 0.3260422 0.5668548 0.2445617 0.5668549 0.2445617 0.639011 0.2445617 0.639011 0.3260422 0.639011 0.2445617 0.5668549 0.2445617 0.5668549 0.2445617 0.639011 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 |

1 0 0 0 50 0 1 1 49 0 2 2 3 1 3 3 52 1 4 4 50 1 5 5 5 2 6 6 54 2 7 7 52 2 8 8 7 3 9 9 56 3 10 10 54 3 11 11 56 4 12 12 11 4 13 13 58 4 14 14 58 5 15 15 13 5 16 16 60 5 17 17 81 6 18 18 20 6 19 19 86 6 20 20 60 7 21 21 15 7 22 22 62 7 23 23 15 8 24 24 49 8 25 25 62 8 26 26 14 9 27 27 2 9 28 28 6 9 29 29 97 10 30 30 25 10 31 31 98 10 32 32 83 11 33 33 23 11 34 34 88 11 35 35 90 12 36 36 17 12 37 37 18 12 38 38 86 13 39 39 21 13 40 40 92 13 41 41 88 14 42 42 16 14 43 43 94 14 44 44 85 15 45 45 16 15 46 46 17 15 47 47 90 16 48 48 19 16 49 49 81 16 50 50 83 17 51 51 21 17 52 52 22 17 53 53 114 18 54 54 38 18 55 55 39 18 56 56 101 19 57 57 24 19 58 58 97 19 59 59 104 20 60 60 29 20 61 61 30 20 62 62 107 21 63 63 28 21 64 64 108 21 65 65 110 22 66 66 25 22 67 67 26 22 68 68 101 23 69 69 30 23 70 70 31 23 71 71 103 24 72 72 28 24 73 73 29 24 74 74 107 25 75 75 26 25 76 76 27 25 77 77 32 26 78 78 38 26 79 79 36 26 80 80 118 27 81 81 36 27 82 82 37 27 83 83 121 28 84 84 35 28 85 85 122 28 86 86 126 29 87 87 32 29 88 88 33 29 89 89 125 30 90 90 39 30 91 91 32 30 92 92 113 31 93 93 37 31 94 94 38 31 95 95 117 32 96 96 35 32 97 97 36 32 98 98 121 33 99 99 33 33 100 100 34 33 101 101 77 34 102 102 46 34 103 103 42 34 104 104 75 35 105 105 45 35 106 106 40 35 107 107 79 36 108 108 47 36 109 109 44 36 110 110 66 37 111 111 47 37 112 112 72 37 113 113 64 38 114 114 46 38 115 115 70 38 116 116 79 39 117 117 45 39 118 118 68 39 119 119 77 40 120 120 43 40 121 121 66 40 122 122 75 41 123 123 41 41 124 124 64 41 125 125 63 42 126 126 0 42 127 127 14 42 128 128 62 43 129 129 48 43 130 130 63 43 131 131 61 44 132 132 14 44 133 133 12 44 134 134 61 45 135 135 62 45 136 136 63 45 137 137 10 46 138 138 61 46 139 139 12 46 140 140 59 47 141 141 60 47 142 142 61 47 143 143 57 48 144 144 10 48 145 145 8 48 146 146 57 49 147 147 58 49 148 148 59 49 149 149 6 50 150 150 57 50 151 151 8 50 152 152 54 51 153 153 57 51 154 154 55 51 155 155 53 52 156 156 6 52 157 157 4 52 158 158 53 53 159 159 54 53 160 160 55 53 161 161 2 54 162 162 53 54 163 163 4 54 164 164 50 55 165 165 53 55 166 166 51 55 167 167 0 56 168 168 51 56 169 169 2 56 170 170 49 57 171 171 51 57 172 172 48 57 173 173 7 58 174 174 65 58 175 175 9 58 176 176 74 59 177 177 64 59 178 178 65 59 179 179 13 60 180 180 67 60 181 181 15 60 182 182 76 61 183 183 66 61 184 184 67 61 185 185 3 62 186 186 69 62 187 187 5 62 188 188 78 63 189 189 68 63 190 190 69 63 191 191 11 64 192 192 65 64 193 193 71 64 194 194 65 65 195 195 70 65 196 196 71 65 197 197 1 66 198 198 67 66 199 199 73 66 200 200 67 67 201 201 72 67 202 202 73 67 203 203 1 68 204 204 78 68 205 205 3 68 206 206 78 68 207 207 72 68 208 208 79 68 209 209 7 69 210 210 69 69 211 211 74 69 212 212 74 70 213 213 68 70 214 214 75 70 215 215 13 71 216 216 71 71 217 217 76 71 218 218 76 72 219 219 70 72 220 220 77 72 221 221 42 73 222 222 93 73 223 223 82 73 224 224 82 74 225 225 92 74 226 226 83 74 227 227 45 75 228 228 80 75 229 229 40 75 230 230 80 76 231 231 90 76 232 232 81 76 233 233 44 77 234 234 95 77 235 235 84 77 236 236 84 78 237 237 94 78 238 238 85 78 239 239 47 79 240 240 89 79 241 241 95 79 242 242 95 80 243 243 88 80 244 244 94 80 245 245 46 81 246 246 87 81 247 247 93 81 248 248 93 82 249 249 86 82 250 250 92 82 251 251 44 83 252 252 91 83 253 253 45 83 254 254 84 84 255 255 90 84 256 256 91 84 257 257 42 60 258 258 89 60 259 259 43 60 260 260 89 85 261 261 83 85 262 262 88 85 263 263 40 86 264 264 87 86 265 265 41 86 266 266 80 87 267 267 86 87 268 268 87 87 269 269 18 88 270 270 106 88 271 271 19 88 272 272 106 89 273 273 110 89 274 274 107 89 275 275 21 90 276 276 109 90 277 277 102 90 278 278 102 91 279 279 108 91 280 280 103 91 281 281 23 92 282 282 105 92 283 283 100 92 284 284 100 93 285 285 104 93 286 286 101 93 287 287 17 94 288 288 111 94 289 289 18 94 290 290 111 95 291 291 98 95 292 292 110 95 293 293 19 96 294 294 109 96 295 295 20 96 296 296 106 97 297 297 108 97 298 298 109 97 299 299 21 98 300 300 105 98 301 301 22 98 302 302 102 99 303 303 104 99 304 304 105 99 305 305 16 100 306 306 100 100 307 307 96 100 308 308 100 101 309 309 97 101 310 310 96 101 311 311 16 102 312 312 129 102 313 313 17 102 314 314 96 103 315 315 98 103 316 316 99 103 317 317 25 104 318 318 120 104 319 319 26 104 320 320 120 105 321 321 126 105 322 322 121 105 323 323 28 106 324 324 123 106 325 325 116 106 326 326 116 107 327 327 122 107 328 328 117 107 329 329 30 108 330 330 119 108 331 331 112 108 332 332 112 109 333 333 118 109 334 334 113 109 335 335 24 110 336 336 115 110 337 337 124 110 338 338 124 111 339 339 114 111 340 340 125 111 341 341 24 112 342 342 127 112 343 343 25 112 344 344 124 113 345 345 126 113 346 346 127 113 347 347 27 114 348 348 120 114 349 349 123 114 350 350 120 115 351 351 122 115 352 352 123 115 353 353 28 116 354 354 119 116 355 355 29 116 356 356 116 117 357 357 118 117 358 358 119 117 359 359 30 118 360 360 115 118 361 361 31 118 362 362 112 119 363 363 114 119 364 364 115 119 365 365 130 120 366 366 135 120 367 367 134 120 368 368 17 121 369 369 131 121 370 370 99 121 371 371 99 122 372 372 130 122 373 373 96 122 374 374 16 123 375 375 130 123 376 376 128 123 377 377 132 124 378 378 138 124 379 379 136 124 380 380 131 125 381 381 133 125 382 382 135 125 383 383 130 126 384 384 132 126 385 385 128 126 386 386 129 127 387 387 132 127 388 388 133 127 389 389 136 128 390 390 142 128 391 391 140 128 392 392 132 129 393 393 137 129 394 394 133 129 395 395 135 130 396 396 138 130 397 397 134 130 398 398 135 131 399 399 137 131 400 400 139 131 401 401 140 132 402 402 143 132 403 403 141 132 404 404 136 133 405 405 141 133 406 406 137 133 407 407 139 134 408 408 142 134 409 409 138 134 410 410 137 135 411 411 143 135 412 412 139 135 413 413 1 136 414 414 3 136 415 415 50 136 416 416 3 137 417 417 5 137 418 418 52 137 419 419 5 138 420 420 7 138 421 421 54 138 422 422 7 139 423 423 9 139 424 424 56 139 425 425 56 140 426 426 9 140 427 427 11 140 428 428 58 141 429 429 11 141 430 430 13 141 431 431 81 142 432 432 19 142 433 433 20 142 434 434 60 143 435 435 13 143 436 436 15 143 437 437 15 144 438 438 1 144 439 439 49 144 440 440 14 145 441 441 0 145 442 442 2 145 443 443 2 146 444 444 4 146 445 445 6 146 446 446 6 147 447 447 8 147 448 448 10 147 449 449 10 148 450 450 12 148 451 451 6 148 452 452 12 149 453 453 14 149 454 454 6 149 455 455 97 150 456 456 24 150 457 457 25 150 458 458 83 151 459 459 22 151 460 460 23 151 461 461 90 152 462 462 85 152 463 463 17 152 464 464 86 153 465 465 20 153 466 466 21 153 467 467 88 154 468 468 23 154 469 469 16 154 470 470 85 155 471 471 94 155 472 472 16 155 473 473 90 156 474 474 18 156 475 475 19 156 476 476 83 157 477 477 92 157 478 478 21 157 479 479 114 158 480 480 113 158 481 481 38 158 482 482 101 159 483 483 31 159 484 484 24 159 485 485 104 160 486 486 103 160 487 487 29 160 488 488 107 161 489 489 27 161 490 490 28 161 491 491 110 162 492 492 98 162 493 493 25 162 494 494 101 163 495 495 104 163 496 496 30 163 497 497 103 164 498 498 108 164 499 499 28 164 500 500 107 165 501 501 110 165 502 502 26 165 503 503 34 166 504 504 33 166 505 505 32 166 506 506 32 167 507 507 39 167 508 508 38 167 509 509 38 168 510 510 37 168 511 511 36 168 512 512 36 169 513 513 35 169 514 514 34 169 515 515 34 170 516 516 32 170 517 517 36 170 518 518 118 171 519 519 117 171 520 520 36 171 521 521 121 172 522 522 34 172 523 523 35 172 524 524 126 173 525 525 125 173 526 526 32 173 527 527 125 174 528 528 114 174 529 529 39 174 530 530 113 175 531 531 118 175 532 532 37 175 533 533 117 176 534 534 122 176 535 535 35 176 536 536 121 177 537 537 126 177 538 538 33 177 539 539 77 178 540 540 70 178 541 541 46 178 542 542 75 179 543 543 68 179 544 544 45 179 545 545 79 180 546 546 72 180 547 547 47 180 548 548 66 181 549 549 43 181 550 550 47 181 551 551 64 182 552 552 41 182 553 553 46 182 554 554 79 183 555 555 44 183 556 556 45 183 557 557 77 184 558 558 42 184 559 559 43 184 560 560 75 185 561 561 40 185 562 562 41 185 563 563 63 186 564 564 48 186 565 565 0 186 566 566 62 187 567 567 49 187 568 568 48 187 569 569 61 188 570 570 63 188 571 571 14 188 572 572 61 189 573 573 60 189 574 574 62 189 575 575 10 190 576 576 59 190 577 577 61 190 578 578 59 191 579 579 58 191 580 580 60 191 581 581 57 192 582 582 59 192 583 583 10 192 584 584 57 193 585 585 56 193 586 586 58 193 587 587 6 194 588 588 55 194 589 589 57 194 590 590 54 195 591 591 56 195 592 592 57 195 593 593 53 196 594 594 55 196 595 595 6 196 596 596 53 197 597 597 52 197 598 598 54 197 599 599 2 198 600 600 51 198 601 601 53 198 602 602 50 199 603 603 52 199 604 604 53 199 605 605 0 200 606 606 48 200 607 607 51 200 608 608 49 201 609 609 50 201 610 610 51 201 611 611 7 202 612 612 74 202 613 613 65 202 614 614 74 203 615 615 75 203 616 616 64 203 617 617 13 204 618 618 76 204 619 619 67 204 620 620 76 205 621 621 77 205 622 622 66 205 623 623 3 206 624 624 78 206 625 625 69 206 626 626 78 207 627 627 79 207 628 628 68 207 629 629 11 208 630 630 9 208 631 631 65 208 632 632 65 209 633 633 64 209 634 634 70 209 635 635 1 210 636 636 15 210 637 637 67 210 638 638 67 211 639 639 66 211 640 640 72 211 641 641 1 212 642 642 73 212 643 643 78 212 644 644 78 213 645 645 73 213 646 646 72 213 647 647 7 214 648 648 5 214 649 649 69 214 650 650 74 215 651 651 69 215 652 652 68 215 653 653 13 216 654 654 11 216 655 655 71 216 656 656 76 217 657 657 71 217 658 658 70 217 659 659 42 218 660 660 46 218 661 661 93 218 662 662 82 219 663 663 93 219 664 664 92 219 665 665 45 220 666 666 91 220 667 667 80 220 668 668 80 221 669 669 91 221 670 670 90 221 671 671 44 222 672 672 47 222 673 673 95 222 674 674 84 223 675 675 95 223 676 676 94 223 677 677 47 224 678 678 43 224 679 679 89 224 680 680 95 225 681 681 89 225 682 682 88 225 683 683 46 226 684 684 41 226 685 685 87 226 686 686 93 227 687 687 87 227 688 688 86 227 689 689 44 228 690 690 84 228 691 691 91 228 692 692 84 229 693 693 85 229 694 694 90 229 695 695 42 230 696 696 82 230 697 697 89 230 698 698 89 231 699 699 82 231 700 700 83 231 701 701 40 232 702 702 80 232 703 703 87 232 704 704 80 233 705 705 81 233 706 706 86 233 707 707 18 234 708 708 111 234 709 709 106 234 710 710 106 235 711 711 111 235 712 712 110 235 713 713 21 236 714 714 20 236 715 715 109 236 716 716 102 237 717 717 109 237 718 718 108 237 719 719 23 238 720 720 22 238 721 721 105 238 722 722 100 239 723 723 105 239 724 724 104 239 725 725 17 240 726 726 99 240 727 727 111 240 728 728 111 241 729 729 99 241 730 730 98 241 731 731 19 242 732 732 106 242 733 733 109 242 734 734 106 243 735 735 107 243 736 736 108 243 737 737 21 244 738 738 102 244 739 739 105 244 740 740 102 245 741 741 103 245 742 742 104 245 743 743 16 246 744 744 23 246 745 745 100 246 746 746 100 247 747 747 101 247 748 748 97 247 749 749 16 248 750 750 128 248 751 751 129 248 752 752 96 249 753 753 97 249 754 754 98 249 755 755 25 250 756 756 127 250 757 757 120 250 758 758 120 251 759 759 127 251 760 760 126 251 761 761 28 252 762 762 27 252 763 763 123 252 764 764 116 253 765 765 123 253 766 766 122 253 767 767 30 254 768 768 29 254 769 769 119 254 770 770 112 255 771 771 119 255 772 772 118 255 773 773 24 256 774 774 31 256 775 775 115 256 776 776 124 257 777 777 115 257 778 778 114 257 779 779 24 258 780 780 124 258 781 781 127 258 782 782 124 259 783 783 125 259 784 784 126 259 785 785 27 260 786 786 26 260 787 787 120 260 788 788 120 261 789 789 121 261 790 790 122 261 791 791 28 262 792 792 116 262 793 793 119 262 794 794 116 263 795 795 117 263 796 796 118 263 797 797 30 264 798 798 112 264 799 799 115 264 800 800 112 265 801 801 113 265 802 802 114 265 803 803 130 266 804 804 131 266 805 805 135 266 806 806 17 267 807 807 129 267 808 808 131 267 809 809 99 268 810 810 131 268 811 811 130 268 812 812 16 269 813 813 96 269 814 814 130 269 815 815 132 270 816 816 134 270 817 817 138 270 818 818 131 271 819 819 129 271 820 820 133 271 821 821 130 272 822 822 134 272 823 823 132 272 824 824 129 273 825 825 128 273 826 826 132 273 827 827 136 274 828 828 138 274 829 829 142 274 830 830 132 275 831 831 136 275 832 832 137 275 833 833 135 276 834 834 139 276 835 835 138 276 836 836 135 277 837 837 133 277 838 838 137 277 839 839 140 278 840 840 142 278 841 841 143 278 842 842 136 279 843 843 140 279 844 844 141 279 845 845 139 280 846 846 143 280 847 847 142 280 848 848 137 281 849 849 141 281 850 850 143 281 851 851

90 |
91 |
92 |
93 |
94 | 95 | 96 | 97 | 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 98 | 99 | Bone Bone_001 Bone_002 Bone_003 Bone_004 Bone_005 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | -0.8964257 0.4403192 0.05040079 0.8704082 0.2215753 0.5437499 -0.8094696 -1.0262 -0.3838304 -0.7144615 -0.584995 1.266103 0 0 0 1 -0.9131909 0.4060166 0.03511822 -0.06872826 0.2124046 0.5477244 -0.8092486 -1.026745 -0.3478032 -0.7315387 -0.5864163 1.270421 0 0 0 1 0.3987462 0.8089722 0.4319318 -1.410876 0.3337973 0.3106564 -0.8899847 -0.5354853 -0.8541552 0.4990556 -0.1461597 -1.239357 0 0 0 1 0.4280464 0.8265135 0.3655837 -2.033539 0.3028824 0.2499293 -0.919673 -0.3854391 -0.8514921 0.5043914 -0.143355 -1.252586 0 0 0 1 -0.88928 0.4405876 0.122737 -1.124887 0.1739661 0.5740317 -0.8001402 -1.089174 -0.4229865 -0.690196 -0.5871217 1.166898 0 0 0 1 -0.9144617 0.3783425 0.1435884 -1.631665 0.1184689 0.589571 -0.7989818 -1.171659 -0.386944 -0.7136268 -0.5839614 1.249702 0 0 0 1 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 1 0.9189779 0.08102208 1 0.9137493 0.08625066 1 0.9084813 0.09151864 1 0.9059516 0.09404838 1 0.9073778 0.09262216 1 0.9121544 0.08784562 1 0.91781 0.08219003 1 0.9207896 0.07921034 0.123256 0.876744 0.111342 0.8886581 0.390572 0.609428 0.7593548 0.2406452 0.7777474 0.2222526 0.7985833 0.2014167 0.8196492 0.1803508 0.8312826 0.1687173 0.1641742 0.8358257 0.1741024 0.8258976 0.1999325 0.8000675 0.2140229 0.785977 0.2157785 0.7842215 0.2071375 0.7928624 0.1911926 0.8088074 0.1757514 0.8242486 1 1 1 1 1 1 1 1 0.09616595 0.9038341 0.09634274 0.9036573 0.07408177 0.9259182 0.06999146 0.9300085 0.08495366 0.9150464 0.09659111 0.9034088 0.08735334 0.9126466 0.07631611 0.9236838 1 1 1 1 0.9968067 0.003193318 1 0.9950525 0.004947543 1 0.9961742 0.003825783 1 0.999663 3.37019e-4 1 1 1 1 1 0.2724821 0.7275179 0.7360242 0.2639759 0.2387458 0.7612541 0.7562291 0.2437708 0.2753487 0.7246512 0.7393141 0.2606859 0.2591409 0.7408592 0.7421018 0.2578982 0.2474189 0.7525811 0.7543885 0.2456116 0.735049 0.2649511 0.2785737 0.7214263 0.7506737 0.2493264 0.2445261 0.7554738 0.7469953 0.2530047 0.2627475 0.7372525 0.02846419 0.9715358 0.9168764 0.08312356 1 0.9469071 0.05309277 0.9135025 0.0864976 0.7055221 0.2944779 0.9210479 0.07895201 0.02216869 0.9778313 0.9334836 0.06651645 1 0.8017253 0.1982746 0.9360435 0.06395643 0.9336894 0.06631058 0.01012629 0.9898736 0.7437245 0.2562755 0.9276467 0.07235324 0.8535061 0.1464939 0.7515333 0.2484666 0.7175302 0.2824698 0.8374693 0.1625307 0.1763288 0.8236711 0.7955987 0.2044013 0.2205767 0.7794232 0.7701269 0.229873 0.7944723 0.2055277 0.1932455 0.8067545 0.2331568 0.7668433 0.7287619 0.2712382 0.7446159 0.2553841 0.2413443 0.7586557 0.7224642 0.2775359 0.3077453 0.6922547 0.0467782 0.9532218 1 1 0.03580945 0.9641905 0.06033897 0.939661 1 1 0.05557721 0.9444227 0.05486589 0.9451341 1 1 0.06033939 0.9396606 0.03212934 0.9678707 1 1 0.04154187 0.9584582 0.8324251 0.167575 0.8860536 0.1139464 0.8001204 0.1998797 0.829035 0.170965 0.1917461 0.808254 0.09017652 0.9098234 0.2134695 0.7865304 0.1550159 0.8449841 0.03609687 0.9639032 1 0.0531435 0.9468565 7.523e-4 0.9992477 1 1 1 1 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 1 1 1 1 2 1 2 1 2 1 2 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 2 1 1 2 2 1 1 2 2 1 1 2 2 2 2 2 2 2 2 2 2 1 2 2 1 1 1 1 130 | 0 0 0 1 1 2 0 3 0 4 1 5 0 6 0 7 1 8 0 9 0 10 1 11 0 12 0 13 1 14 0 15 0 16 1 17 0 18 0 19 1 20 0 21 0 22 1 23 1 24 2 25 1 26 2 27 1 28 2 29 1 30 4 31 1 32 4 33 1 34 4 35 1 36 4 37 1 38 4 39 4 40 5 41 4 42 5 43 4 44 5 45 4 46 5 47 4 48 5 49 4 50 5 51 4 52 5 53 4 54 5 55 5 56 5 57 5 58 5 59 5 60 5 61 5 62 5 63 0 64 1 65 0 66 1 67 0 68 1 69 0 70 1 71 0 72 1 73 0 74 1 75 0 76 1 77 0 78 1 79 0 80 0 81 0 82 0 83 0 84 1 85 0 86 0 87 1 88 0 89 0 90 1 91 0 92 0 93 1 94 0 95 0 96 0 97 0 98 0 99 0 100 1 101 0 102 1 103 0 104 1 105 0 106 1 107 0 108 1 109 0 110 1 111 0 112 1 113 0 114 1 115 0 116 1 117 0 118 1 119 0 120 1 121 0 122 1 123 0 124 1 125 0 126 1 127 0 128 1 129 0 130 1 131 0 132 1 133 1 134 4 135 1 136 1 137 4 138 1 139 2 140 1 141 2 142 1 143 4 144 0 145 1 146 1 147 2 148 1 149 1 150 2 151 1 152 2 153 1 154 4 155 0 156 1 157 1 158 2 159 1 160 2 161 2 162 4 163 4 164 5 165 4 166 5 167 2 168 4 169 1 170 4 171 4 172 5 173 1 174 4 175 4 176 5 177 4 178 5 179 1 180 4 181 1 182 4 183 4 184 5 185 4 186 5 187 1 188 4 189 4 190 5 191 2 192 4 193 4 194 5 195 5 196 5 197 4 198 5 199 4 200 5 201 5 202 5 203 4 204 5 205 4 206 5 207 5 208 5 209 4 210 5 211 4 212 5 213 5 214 5 215 4 216 5 217 2 218 3 219 2 220 3 221 2 222 3 223 2 224 3 225 2 226 3 227 2 228 3 229 2 230 3 231 2 232 3 233 2 234 3 235 3 236 2 237 3 238 2 239 3 240 3 241 3 242 3 243 3 244 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 0.04166662 0.4166666 0.625 0.8333333 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | LINEAR LINEAR LINEAR LINEAR 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 0.04166662 0.4166666 0.625 0.8333333 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | -0.8964254 0.221575 -0.3838304 1.493605 0.4403193 0.5437496 -0.7144614 1.07932 0.05040073 -0.809469 -0.584995 -0.1338826 0 0 0 1 -0.8964254 0.221575 -0.3838304 1.493605 0.4403193 0.5437496 -0.7144614 1.07932 0.05040073 -0.809469 -0.584995 -0.1338826 0 0 0 1 -0.8964254 0.221575 -0.3838304 1.493605 0.4403193 0.5437496 -0.7144614 1.07932 0.05040073 -0.809469 -0.584995 -0.1338826 0 0 0 1 -0.8964254 0.221575 -0.3838304 1.493605 0.4403193 0.5437496 -0.7144614 1.07932 0.05040073 -0.809469 -0.584995 -0.1338826 0 0 0 1 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | LINEAR LINEAR LINEAR LINEAR 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 0.04166662 0.4166666 0.625 0.8333333 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 0.9991543 0.00998199 -0.03988668 1 -0.009996057 0.9999499 -1.52469e-4 -5.96046e-8 0.03988317 5.51134e-4 0.9992043 -1.49012e-8 0 0 0 1 0.9991543 0.00998199 -0.03988668 1 -0.009996057 0.9999499 -1.52469e-4 -5.96046e-8 0.03988317 5.51134e-4 0.9992043 -1.49012e-8 0 0 0 1 0.9991543 0.00998199 -0.03988668 1 -0.009996057 0.9999499 -1.52469e-4 -5.96046e-8 0.03988317 5.51134e-4 0.9992043 -1.49012e-8 0 0 0 1 0.9991543 0.00998199 -0.03988668 1 -0.009996057 0.9999499 -1.52469e-4 -5.96046e-8 0.03988317 5.51134e-4 0.9992043 -1.49012e-8 0 0 0 1 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | LINEAR LINEAR LINEAR LINEAR 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 0.04166662 0.4166666 0.625 0.8333333 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | -0.03430793 -0.2140156 0.9762276 1.001387 0.1853365 0.958497 0.216642 4.09782e-8 -0.9820761 0.1883631 0.006780893 -2.98023e-8 0 0 0 1 -0.5089806 -0.2600031 0.8205712 1.001387 0.3559425 0.8043956 0.4756602 4.09782e-8 -0.7837371 0.5341781 -0.3168756 -2.98023e-8 0 0 0 1 0.4708738 0.0545468 0.8805127 1.001387 -0.1670327 0.9855459 0.02827095 4.09782e-8 -0.8662436 -0.1603865 0.4731789 -2.98023e-8 0 0 0 1 -0.5013238 -0.2608708 0.8249975 1.001387 0.3544421 0.8078851 0.4708424 4.09782e-8 -0.7893323 0.5284584 -0.3125483 -2.98023e-8 0 0 0 1 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | LINEAR LINEAR LINEAR LINEAR 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 0.04166662 0.4166666 0.625 0.8333333 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 0.997216 -0.07427709 0.00658989 0.5966265 0.07427834 0.9972377 5.03808e-5 0 -0.006575435 4.39249e-4 0.9999783 2.04891e-8 0 0 0 1 0.9972159 -0.07427709 0.006589979 0.5966268 0.07427834 0.9972376 5.03846e-5 -2.23517e-8 -0.006575435 4.39249e-4 0.9999783 -1.04308e-7 0 0 0 1 0.9972159 -0.07427704 0.006589871 0.5966266 0.0742783 0.9972376 5.03622e-5 -2.98023e-8 -0.006575413 4.39223e-4 0.9999784 0 0 0 0 1 0.9972159 -0.07427707 0.006589949 0.5966265 0.07427834 0.9972376 5.03697e-5 1.11759e-8 -0.006575435 4.39264e-4 0.9999783 -3.27826e-7 0 0 0 1 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | LINEAR LINEAR LINEAR LINEAR 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 0.04166662 0.4166666 0.625 0.8333333 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 0.9952779 0.0461027 0.08541766 1.001387 -0.04689115 0.9988738 0.007245958 4.09782e-8 -0.0849874 -0.01121709 0.996319 -2.98023e-8 0 0 0 1 0.9952779 0.0461027 0.08541766 1.001387 -0.04689115 0.9988738 0.007245958 4.09782e-8 -0.0849874 -0.01121709 0.996319 -2.98023e-8 0 0 0 1 0.9952779 0.0461027 0.08541766 1.001387 -0.04689115 0.9988738 0.007245958 4.09782e-8 -0.0849874 -0.01121709 0.996319 -2.98023e-8 0 0 0 1 0.9952779 0.0461027 0.08541766 1.001387 -0.04689115 0.9988738 0.007245958 4.09782e-8 -0.0849874 -0.01121709 0.996319 -2.98023e-8 0 0 0 1 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | LINEAR LINEAR LINEAR LINEAR 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 0.04166662 0.4166666 0.625 0.8333333 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 0.6821657 0.351617 -0.6411049 0.621229 -0.1756646 0.9299178 0.3231023 5.96046e-8 0.7097832 -0.10779 0.6961246 -1.19209e-7 0 0 0 1 0.985599 0.002364084 -0.1690836 0.621229 -0.01328689 0.9978937 -0.06349781 5.96046e-8 0.1685773 0.06482989 0.9835544 -1.19209e-7 0 0 0 1 0.9474547 -0.1561393 0.2791958 0.621229 0.2275037 0.9424608 -0.2449692 5.96046e-8 -0.2248818 0.2956152 0.9284612 -1.19209e-7 0 0 0 1 0.8670106 -0.1863846 0.4621186 0.621229 0.3429739 0.8959844 -0.2821013 5.96046e-8 -0.3614718 0.4030793 0.840753 -1.19209e-7 0 0 0 1 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | LINEAR LINEAR LINEAR LINEAR 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 367 | 368 | -0.8964254 0.221575 -0.3838304 1.493605 0.4403193 0.5437496 -0.7144614 1.07932 0.05040073 -0.809469 -0.584995 -0.1338826 0 0 0 1 369 | 370 | 0.9991543 0.00998199 -0.03988668 1 -0.009996057 0.9999499 -1.52469e-4 -5.96046e-8 0.03988317 5.51134e-4 0.9992043 -1.49012e-8 0 0 0 1 371 | 372 | -0.02050647 -0.2099436 0.9774985 1.001387 0.178249 0.9612722 0.210198 4.09782e-8 -0.9837718 0.1785486 0.01770994 -2.98023e-8 0 0 0 1 373 | 374 | 0.9972159 -0.0742771 0.00658989 0.5966262 0.07427834 0.9972376 5.03659e-5 -5.96046e-8 -0.006575406 4.39264e-4 0.9999783 -1.49012e-7 0 0 0 1 375 | 376 | 377 | 1 378 | 0 379 | -1.496097 380 | 0.229905 381 | 0.443923 382 | 0.1963562 383 | 384 | 385 | 386 | 387 | 388 | 1 389 | 0 390 | -1.452921 391 | 392 | 393 | 394 | 395 | 0.9952779 0.0461027 0.08541766 1.001387 -0.04689115 0.9988738 0.007245958 4.09782e-8 -0.0849874 -0.01121709 0.996319 -2.98023e-8 0 0 0 1 396 | 397 | 0.9975284 0.05634104 -0.04198724 0.621229 -0.05679546 0.9983387 -0.009708613 5.96046e-8 0.04137048 0.01206923 0.9990711 -1.19209e-7 0 0 0 1 398 | 399 | 400 | 1 401 | 0 402 | -1.505173 403 | -0.7307527 404 | 0.3023362 405 | 0.1147424 406 | 407 | 408 | 409 | 410 | 411 | 1 412 | 0 413 | -1.689302 414 | 415 | 416 | 417 | 418 | 419 | 1 420 | 0 421 | -2.032769 422 | 423 | 424 | 425 | 426 | 427 | 0 428 | -1.98037 429 | 430 | 431 | 432 | 433 | 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 434 | 435 | #Armature_Bone 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 |
--------------------------------------------------------------------------------