diff --git a/.gitattributes b/.gitattributes index a6344aac8c09253b3b630fb776ae94478aa0275b..46cb1f1311d77a3abce3cab3edea25077e53c8d1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -33,3 +33,6 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.splat filter=lfs diff=lfs merge=lfs -text +*.glb filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..b6542f5205d3f25c9f5feee8881141f3e09947d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +__pycache__/ +.gradio/ \ No newline at end of file diff --git a/app.py b/app.py index 652dc459175b17dc4acd2394b8b8ad1edd2394a5..a314416f559603d37490f581fbe785bac19994ea 100644 --- a/app.py +++ b/app.py @@ -1,154 +1,1187 @@ import gradio as gr -import numpy as np +from PIL import Image +from pathlib import Path +from omegaconf import DictConfig, OmegaConf +from tqdm import tqdm, trange import random - -# import spaces #[uncomment to use ZeroGPU] -from diffusers import DiffusionPipeline +import math +import hydra +import numpy as np import torch +import torch.nn as nn +import torch.backends.cudnn +import warp as wp +import glob +from torch.utils.data import DataLoader +import os +import time +import cv2 +import copy +import open3d as o3d +import kornia +import yaml +import matplotlib.pyplot as plt +from sklearn.neighbors import NearestNeighbors +from dgl.geometry import farthest_point_sampler + +import sys +sys.path.insert(0, str(Path(__file__).parent / "src")) +sys.path.append(str(Path(__file__).parent / "src" / "experiments")) + +from pgnd.sim import Friction, CacheDiffSimWithFrictionBatch, StaticsBatch, CollidersBatch +from pgnd.material import PGNDModel +from pgnd.data import RealTeleopBatchDataset, RealGripperDataset +from pgnd.utils import Logger, get_root, mkdir +from pgnd.ffmpeg import make_video + +from real_world.utils.render_utils import interpolate_motions +from real_world.gs.helpers import setup_camera +from real_world.gs.convert import save_to_splat, read_splat + +from diff_gaussian_rasterization import GaussianRasterizer +from diff_gaussian_rasterization import GaussianRasterizationSettings as Camera + +root = Path(__file__).parent / "src" / "experiments" + + +def quat2mat(quat): + return kornia.geometry.conversions.quaternion_to_rotation_matrix(quat) + + +def mat2quat(mat): + return kornia.geometry.conversions.rotation_matrix_to_quaternion(mat) + + +def fps(x, enabled, n, device, random_start=False): + assert torch.diff(enabled * 1.0).sum() in [0.0, -1.0] + start_idx = random.randint(0, enabled.sum() - 1) if random_start else 0 + fps_idx = farthest_point_sampler(x[enabled][None], n, start_idx=start_idx)[0] + fps_idx = fps_idx.to(x.device) + return fps_idx + + +class DynamicsVisualizer: + + def __init__(self): + wp.init() + + self.width = 640 + self.height = 480 + + best_models = { + 'cloth': ['cloth', 'train', 100000, [610, 650]], + 'rope': ['rope', 'train', 100000, [651, 691]], + 'paperbag': ['paperbag', 'train', 100000, [200, 220]], + 'sloth': ['sloth', 'train', 100000, [113, 133]], + 'box': ['box', 'train', 100000, [306, 323]], + 'bread': ['bread', 'train', 100000, [143, 163]], + } + + task_name = 'rope' + + with open(root / f'log/{best_models[task_name][0]}/{best_models[task_name][1]}/hydra.yaml', 'r') as f: + config = yaml.load(f, Loader=yaml.CLoader) + cfg = OmegaConf.create(config) + + cfg.iteration = best_models[task_name][2] + cfg.start_episode = best_models[task_name][3][0] + cfg.end_episode = best_models[task_name][3][1] + cfg.sim.num_steps = 1000 + cfg.sim.gripper_forcing = False + cfg.sim.uniform = True + cfg.sim.use_pv = False + + device = torch.device('cuda:0') + + self.cfg = cfg + self.device = device + self.k_rel = 8 # knn for relations + self.k_wgt = 16 # knn for weights + self.with_bg = True + self.render_gripper = True + self.verbose = False + + self.dt_base = cfg.sim.dt + self.high_freq_pred = True + + gpus = [int(gpu) for gpu in cfg.gpus] + wp_devices = [wp.get_device(f'cuda:{gpu}') for gpu in gpus] + torch_devices = [torch.device(f'cuda:{gpu}') for gpu in gpus] + device_count = len(torch_devices) + assert device_count == 1 + self.wp_device = wp_devices[0] + self.torch_device = torch_devices[0] + + seed = cfg.seed + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.autograd.set_detect_anomaly(True) + torch.backends.cudnn.benchmark = True + + self.clear() + + def clear(self, clear_params=True): + self.metadata = {} + self.config = {} + if clear_params: + self.params = None + self.state = { + # object + 'x': None, + 'v': None, + 'x_his': None, + 'v_his': None, + 'x_pred': None, + 'v_pred': None, + 'clip_bound': None, + 'enabled': None, + # robot + 'prev_key_pos': None, + 'prev_key_pos_timestamp': None, + 'sub_pos': None, # filling in between key positions + 'sub_pos_timestamps': None, + 'gripper_radius': None, + } + self.preprocess_metadata = None + self.table_params = None + self.gripper_params = None + + self.sim = None + self.statics = None + self.colliders = None + self.material = None + self.friction = None + + def load_scaniverse(self, data_path): + + ### load splat params + + params_obj = read_splat(data_path / 'object.splat') + params_table = read_splat(data_path / 'table.splat') + params_robot = read_splat(data_path / 'gripper.splat') + + pts, colors, scales, quats, opacities = params_obj + self.params = { + 'means3D': torch.from_numpy(pts).to(torch.float32).to(self.device), + 'rgb_colors': torch.from_numpy(colors).to(torch.float32).to(self.device), + 'log_scales': torch.log(torch.from_numpy(scales).to(torch.float32).to(self.device)), + 'unnorm_rotations': torch.from_numpy(quats).to(torch.float32).to(self.device), + 'logit_opacities': torch.logit(torch.from_numpy(opacities).to(torch.float32).to(self.device)) + } + + t_pts, t_colors, t_scales, t_quats, t_opacities = params_table + t_pts = torch.tensor(t_pts).to(torch.float32).to(self.device) + t_colors = torch.tensor(t_colors).to(torch.float32).to(self.device) + t_scales = torch.tensor(t_scales).to(torch.float32).to(self.device) + t_quats = torch.tensor(t_quats).to(torch.float32).to(self.device) + t_opacities = torch.tensor(t_opacities).to(torch.float32).to(self.device) + + g_pts, g_colors, g_scales, g_quats, g_opacities = params_robot + g_pts = torch.tensor(g_pts).to(torch.float32).to(self.device) + g_colors = torch.tensor(g_colors).to(torch.float32).to(self.device) + g_scales = torch.tensor(g_scales).to(torch.float32).to(self.device) + g_quats = torch.tensor(g_quats).to(torch.float32).to(self.device) + g_opacities = torch.tensor(g_opacities).to(torch.float32).to(self.device) + + self.table_params = t_pts, t_colors, t_scales, t_quats, t_opacities # data frame + self.gripper_params = g_pts, g_colors, g_scales, g_quats, g_opacities # data frame + + n_particles = self.cfg.sim.n_particles + self.state['clip_bound'] = torch.tensor([self.cfg.model.clip_bound], dtype=torch.float32) + self.state['enabled'] = torch.ones(n_particles, dtype=torch.bool) + + ### load preprocess metadata + + cfg = self.cfg + dx = cfg.sim.num_grids[-1] + + p_x = torch.tensor(pts).to(torch.float32).to(self.device) + R = torch.tensor( + [[1, 0, 0], + [0, 0, -1], + [0, 1, 0]] + ).to(p_x.device).to(p_x.dtype) + p_x_rotated = p_x @ R.T + + scale = 1.0 + p_x_rotated_scaled = p_x_rotated * scale + + global_translation = torch.tensor([ + 0.5 - p_x_rotated_scaled[:, 0].mean(), + dx * (cfg.model.clip_bound + 0.5) - p_x_rotated_scaled[:, 1].min(), + 0.5 - p_x_rotated_scaled[:, 2].mean(), + ], dtype=p_x_rotated_scaled.dtype, device=p_x_rotated_scaled.device) + + R_viewer = torch.tensor( + [[1, 0, 0], + [0, 0, -1], + [0, 1, 0]] + ).to(p_x.device).to(p_x.dtype) + t_viewer = torch.tensor([0, 0, 0]).to(p_x.device).to(p_x.dtype) + + self.preprocess_metadata = { + 'R': R, + 'R_viewer': R_viewer, + 't_viewer': t_viewer, + 'scale': scale, + 'global_translation': global_translation, + } + + ### load eef + grippers = np.loadtxt(data_path / 'eef_xyz.txt')[None] + assert grippers.shape == (1, 3) + + if grippers is not None: + grippers = torch.tensor(grippers).to(self.device).to(torch.float32) + + # transform + # data frame to model frame + R = self.preprocess_metadata['R'] + scale = self.preprocess_metadata['scale'] + global_translation = self.preprocess_metadata['global_translation'] + grippers[:, :3] = grippers[:, :3] @ R.T + grippers[:, :3] = grippers[:, :3] * scale + grippers[:, :3] += global_translation + + assert grippers.shape[0] == 1 + self.state['prev_key_pos'] = grippers[:, :3] # (1, 3) + # self.state['prev_key_pos_timestamp'] = torch.zeros(1).to(self.device).to(torch.float32) + self.state['gripper_radius'] = cfg.model.gripper_radius + + + def load_params(self, params_path, remove_low_opa=True, remove_black=False): + pts, colors, scales, quats, opacities = read_splat(params_path) + + if remove_low_opa: + low_opa_idx = opacities[:, 0] < 0.1 + pts = pts[~low_opa_idx] + colors = colors[~low_opa_idx] + quats = quats[~low_opa_idx] + opacities = opacities[~low_opa_idx] + scales = scales[~low_opa_idx] + + if remove_black: + low_color_idx = colors.sum(axis=-1) < 0.5 + pts = pts[~low_color_idx] + colors = colors[~low_color_idx] + quats = quats[~low_color_idx] + opacities = opacities[~low_color_idx] + scales = scales[~low_color_idx] + + self.params = { + 'means3D': torch.from_numpy(pts).to(torch.float32).to(self.device), + 'rgb_colors': torch.from_numpy(colors).to(torch.float32).to(self.device), + 'log_scales': torch.log(torch.from_numpy(scales).to(torch.float32).to(self.device)), + 'unnorm_rotations': torch.from_numpy(quats).to(torch.float32).to(self.device), + 'logit_opacities': torch.logit(torch.from_numpy(opacities).to(torch.float32).to(self.device)) + } + + table_splat = root / 'log/gs/ckpts/table.splat' + sphere_splat = root / 'log/gs/ckpts/sphere.splat' + gripper_splat = root / 'log/gs/ckpts/gripper.splat' # gripper_new.splat + + table_params = read_splat(table_splat) # numpy + + ## add table and gripper + # add table + t_pts, t_colors, t_scales, t_quats, t_opacities = table_params + t_pts = torch.tensor(t_pts).to(torch.float32).to(self.device) + t_colors = torch.tensor(t_colors).to(torch.float32).to(self.device) + t_scales = torch.tensor(t_scales).to(torch.float32).to(self.device) + t_quats = torch.tensor(t_quats).to(torch.float32).to(self.device) + t_opacities = torch.tensor(t_opacities).to(torch.float32).to(self.device) + + # add table pos + t_pts = t_pts + torch.tensor([0, 0, 0.02]).to(torch.float32).to(self.device) + + # add gripper + gripper_params = read_splat(gripper_splat) # numpy + + g_pts, g_colors, g_scales, g_quats, g_opacities = gripper_params + g_pts = torch.tensor(g_pts).to(torch.float32).to(self.device) + g_colors = torch.tensor(g_colors).to(torch.float32).to(self.device) + g_scales = torch.tensor(g_scales).to(torch.float32).to(self.device) + g_quats = torch.tensor(g_quats).to(torch.float32).to(self.device) + g_opacities = torch.tensor(g_opacities).to(torch.float32).to(self.device) + + # we do not do the gripper translation now because this will center the gripper in the data frame but not the viewer frame + + self.table_params = t_pts, t_colors, t_scales, t_quats, t_opacities # data frame + self.gripper_params = g_pts, g_colors, g_scales, g_quats, g_opacities # data frame + + # load other info + n_particles = self.cfg.sim.n_particles + self.state['clip_bound'] = torch.tensor([self.cfg.model.clip_bound], dtype=torch.float32) + self.state['enabled'] = torch.ones(n_particles, dtype=torch.bool) + + + def set_camera(self, w, h, intr, w2c=None, R=None, t=None, near=0.01, far=100.0): + if w2c is None: + assert R is not None and t is not None + w2c = Rt_to_w2c(R, t) + self.metadata = { + 'w': w, + 'h': h, + 'k': intr, + 'w2c': w2c, + } + self.config = {'near': near, 'far': far} + + def load_eef(self, grippers=None, eef_t=None): + assert self.state['prev_key_pos'] is None + + if grippers is not None: + grippers = torch.tensor(grippers).to(self.device).to(torch.float32) + eef_t = torch.tensor(eef_t).to(self.device).to(torch.float32) + grippers[:, :3] = grippers[:, :3] + eef_t + + # transform + # data frame to model frame + R = self.preprocess_metadata['R'] + scale = self.preprocess_metadata['scale'] + global_translation = self.preprocess_metadata['global_translation'] + grippers[:, :3] = grippers[:, :3] @ R.T + grippers[:, :3] = grippers[:, :3] * scale + grippers[:, :3] += global_translation + + assert grippers.shape[0] == 1 + self.state['prev_key_pos'] = grippers[:, :3] # (1, 3) + # self.state['prev_key_pos_timestamp'] = torch.zeros(1).to(self.device).to(torch.float32) + 0.001 + self.state['gripper_radius'] = self.cfg.model.gripper_radius + + def load_preprocess_metadata(self, p_x_orig): + cfg = self.cfg + dx = cfg.sim.num_grids[-1] + + p_x_orig = p_x_orig.to(self.device) + R = torch.tensor( + [[1, 0, 0], + [0, 0, -1], + [0, 1, 0]] + ).to(p_x_orig.device).to(p_x_orig.dtype) + p_x_orig_rotated = torch.einsum('nij,jk->nik', p_x_orig, R.T) + + scale = 1.0 + p_x_orig_rotated_scaled = p_x_orig_rotated * scale + + global_translation = torch.tensor([ + 0.5 - p_x_orig_rotated_scaled[:, :, 0].mean(), + dx * (cfg.model.clip_bound + 0.5) - p_x_orig_rotated_scaled[:, :, 1].min(), + 0.5 - p_x_orig_rotated_scaled[:, :, 2].mean(), + ], dtype=p_x_orig_rotated_scaled.dtype, device=p_x_orig_rotated_scaled.device) + + R_viewer = torch.tensor( + [[1, 0, 0], + [0, 0, -1], + [0, 1, 0]] + ).to(p_x_orig.device).to(p_x_orig.dtype) + t_viewer = torch.tensor([0, 0, 0]).to(p_x_orig.device).to(p_x_orig.dtype) + + self.preprocess_metadata = { + 'R': R, + 'R_viewer': R_viewer, + 't_viewer': t_viewer, + 'scale': scale, + 'global_translation': global_translation, + } + + @torch.no_grad + def render(self, render_data, cam_id, bg=[0.7, 0.7, 0.7]): + render_data = {k: v.to(self.device) for k, v in render_data.items()} + w, h = self.metadata['w'], self.metadata['h'] + k, w2c = self.metadata['k'], self.metadata['w2c'] + cam = setup_camera(w, h, k, w2c, self.config['near'], self.config['far'], bg) + im, _, depth, = GaussianRasterizer(raster_settings=cam)(**render_data) + return im, depth + + def knn_relations(self, bones): + k = self.k_rel + knn = NearestNeighbors(n_neighbors=k+1, algorithm='kd_tree').fit(bones.detach().cpu().numpy()) + _, indices = knn.kneighbors(bones.detach().cpu().numpy()) # (N, k) + indices = indices[:, 1:] # exclude self + return indices + + def knn_weights_brute(self, bones, pts): + k = self.k_wgt + dist = torch.norm(pts[:, None] - bones, dim=-1) # (n_pts, n_bones) + _, indices = torch.topk(dist, k, dim=-1, largest=False) + bones_selected = bones[indices] # (N, k, 3) + dist = torch.norm(bones_selected - pts[:, None], dim=-1) # (N, k) + weights = 1 / (dist + 1e-6) + weights = weights / weights.sum(dim=-1, keepdim=True) # (N, k) + weights_all = torch.zeros((pts.shape[0], bones.shape[0]), device=pts.device) + weights_all[torch.arange(pts.shape[0])[:, None], indices] = weights + return weights_all + + def update_camera(self, k, w2c, w=None, h=None, near=0.01, far=100.0): + self.metadata['k'] = k + self.metadata['w2c'] = w2c + if w is not None: + self.metadata['w'] = w + if h is not None: + self.metadata['h'] = h + self.config['near'] = near + self.config['far'] = far + + def init_model(self, batch_size, num_steps, num_particles, ckpt_path=None): + self.cfg.sim.num_steps = num_steps + cfg = self.cfg + + sim = CacheDiffSimWithFrictionBatch(cfg, num_steps, batch_size, self.wp_device, requires_grad=True) + + statics = StaticsBatch() + statics.init(shape=(batch_size, num_particles), device=self.wp_device) + statics.update_clip_bound(self.state['clip_bound']) + statics.update_enabled(self.state['enabled'][None]) + colliders = CollidersBatch() + colliders.init(shape=(batch_size, cfg.sim.num_grippers), device=self.wp_device) + + self.sim = sim + self.statics = statics + self.colliders = colliders + + # load ckpt + ckpt_path = root / 'log/rope/train/ckpt/100000.pt' + ckpt = torch.load(ckpt_path, map_location=self.torch_device) + + material: nn.Module = PGNDModel(cfg) + material.to(self.torch_device) + material.load_state_dict(ckpt['material']) + material.requires_grad_(False) + material.eval() + + if 'friction' in ckpt: + friction = ckpt['friction']['mu'].reshape(-1, 1) + else: + friction = torch.tensor(cfg.model.friction.value, device=self.torch_device).reshape(-1, 1) + + self.material = material + self.friction = friction + + def reload_model(self, num_steps): # only change num_steps + self.cfg.sim.num_steps = num_steps + sim = CacheDiffSimWithFrictionBatch(self.cfg, num_steps, 1, self.wp_device, requires_grad=True) + self.sim = sim + + @torch.no_grad + def step(self): + cfg = self.cfg + batch_size = 1 + num_steps = 1 + num_particles = cfg.sim.n_particles + + # update state by previous prediction + self.state['x_his'] = torch.cat([self.state['x_his'][1:], self.state['x'][None]], dim=0) + self.state['v_his'] = torch.cat([self.state['v_his'][1:], self.state['v'][None]], dim=0) + self.state['x'] = self.state['x_pred'].clone() + self.state['v'] = self.state['v_pred'].clone() + + eef_xyz_key = self.state['prev_key_pos'] # (1, 3), model frame + eef_xyz_sub = self.state['sub_pos'] # (T, 1, 3), model frame + + if eef_xyz_sub is None: + return + + # eef_xyz_key_timestamp = self.state['prev_key_pos_timestamp'] + # eef_xyz_sub_timestamps = self.state['sub_pos_timestamps'] + + # assert eef_xyz_key_timestamp.item() > 0 + + # delta_t = (eef_xyz_sub_timestamps[-1] - eef_xyz_key_timestamp).item() + + # if (not self.high_freq_pred) and delta_t < self.dt_base * 0.9: + # return + # cfg.sim.dt = delta_t + + eef_xyz_key_next = eef_xyz_sub[-1] # (1, 3), model frame + eef_v = (eef_xyz_key_next - eef_xyz_key) / cfg.sim.dt + if self.verbose: + print('delta_t:', np.round(cfg.sim.dt, 4)) + print('eef_xyz_key_next:', eef_xyz_key_next.cpu().numpy().tolist()) + print('eef_xyz_key:', eef_xyz_key.cpu().numpy().tolist()) + print('v:', eef_v.cpu().numpy().tolist()) + + # load model, sim, statics, colliders + self.reload_model(num_steps) + + # initialize colliders + if cfg.sim.num_grippers > 0: + grippers = torch.zeros((batch_size, cfg.sim.num_grippers, 15), device=self.torch_device) + eef_quat = torch.tensor([1, 0, 0, 0], dtype=torch.float32, device=self.torch_device).repeat(batch_size, cfg.sim.num_grippers, 1) # (B, G, 4) + eef_quat_vel = torch.zeros((batch_size, cfg.sim.num_grippers, 3), dtype=torch.float32, device=self.torch_device) + eef_gripper = torch.zeros((batch_size, cfg.sim.num_grippers), dtype=torch.float32, device=self.torch_device) + grippers[:, :, :3] = eef_xyz_key + grippers[:, :, 3:6] = eef_v + grippers[:, :, 6:10] = eef_quat + grippers[:, :, 10:13] = eef_quat_vel + grippers[:, :, 13] = cfg.model.gripper_radius + grippers[:, :, 14] = eef_gripper + self.colliders.initialize_grippers(grippers) + + x = self.state['x'].clone()[None].repeat(batch_size, 1, 1) + v = self.state['v'].clone()[None].repeat(batch_size, 1, 1) + x_his = self.state['x_his'].permute(1, 0, 2).clone() + assert x_his.shape[0] == num_particles + x_his = x_his.reshape(num_particles, -1)[None].repeat(batch_size, 1, 1) + v_his = self.state['v_his'].permute(1, 0, 2).clone() + assert v_his.shape[0] == num_particles + v_his = v_his.reshape(num_particles, -1)[None].repeat(batch_size, 1, 1) + enabled = self.state['enabled'].clone().to(self.torch_device)[None].repeat(batch_size, 1) + + for t in range(num_steps): + x_in = x.clone() + pred = self.material(x, v, x_his, v_his, enabled) + + # x_his = torch.cat([x_his.reshape(batch_size, num_particles, -1, 3)[:, :, 1:], x[:, :, None].detach()], dim=2) + # v_his = torch.cat([v_his.reshape(batch_size, num_particles, -1, 3)[:, :, 1:], v[:, :, None].detach()], dim=2) + # x_his = x_his.reshape(batch_size, num_particles, -1) + # v_his = v_his.reshape(batch_size, num_particles, -1) + + x, v = self.sim(self.statics, self.colliders, t, x, v, self.friction, pred) + + # calculate new x_pred, v_pred, eef_xyz_key and eef_xyz_sub + x_pred = x[0].clone() + v_pred = v[0].clone() + self.state['x_pred'] = x_pred + self.state['v_pred'] = v_pred + # self.state['x_his'] = x_his[0].reshape(num_particles, self.cfg.sim.n_history, 3).permute(1, 0, 2).clone() + # self.state['v_his'] = v_his[0].reshape(num_particles, self.cfg.sim.n_history, 3).permute(1, 0, 2).clone() + + self.state['prev_key_pos'] = eef_xyz_key_next + # self.state['prev_key_pos_timestamp'] = eef_xyz_sub_timestamps[-1] + self.state['sub_pos'] = None + # self.state['sub_pos_timestamps'] = None + + def preprocess_x(self, p_x): # viewer frame to model frame (not data frame) + R = self.preprocess_metadata['R'] + R_viewer = self.preprocess_metadata['R_viewer'] + t_viewer = self.preprocess_metadata['t_viewer'] + scale = self.preprocess_metadata['scale'] + global_translation = self.preprocess_metadata['global_translation'] + + # viewer frame to model frame + p_x = (p_x - t_viewer) @ R_viewer + + # model frame to data frame + # p_x -= global_translation + # p_x = p_x / scale + # p_x = p_x @ torch.linalg.inv(R).T + + return p_x + + def preprocess_gripper(self, grippers): # viewer frame to model frame (not data frame) + R = self.preprocess_metadata['R'] + R_viewer = self.preprocess_metadata['R_viewer'] + t_viewer = self.preprocess_metadata['t_viewer'] + scale = self.preprocess_metadata['scale'] + global_translation = self.preprocess_metadata['global_translation'] -device = "cuda" if torch.cuda.is_available() else "cpu" -model_repo_id = "stabilityai/sdxl-turbo" # Replace to the model you would like to use - -if torch.cuda.is_available(): - torch_dtype = torch.float16 -else: - torch_dtype = torch.float32 - -pipe = DiffusionPipeline.from_pretrained(model_repo_id, torch_dtype=torch_dtype) -pipe = pipe.to(device) - -MAX_SEED = np.iinfo(np.int32).max -MAX_IMAGE_SIZE = 1024 - - -# @spaces.GPU #[uncomment to use ZeroGPU] -def infer( - prompt, - negative_prompt, - seed, - randomize_seed, - width, - height, - guidance_scale, - num_inference_steps, - progress=gr.Progress(track_tqdm=True), -): - if randomize_seed: - seed = random.randint(0, MAX_SEED) - - generator = torch.Generator().manual_seed(seed) - - image = pipe( - prompt=prompt, - negative_prompt=negative_prompt, - guidance_scale=guidance_scale, - num_inference_steps=num_inference_steps, - width=width, - height=height, - generator=generator, - ).images[0] - - return image, seed - - -examples = [ - "Astronaut in a jungle, cold color palette, muted colors, detailed, 8k", - "An astronaut riding a green horse", - "A delicious ceviche cheesecake slice", -] - -css = """ -#col-container { - margin: 0 auto; - max-width: 640px; -} -""" - -with gr.Blocks(css=css) as demo: - with gr.Column(elem_id="col-container"): - gr.Markdown(" # Text-to-Image Gradio Template") - - with gr.Row(): - prompt = gr.Text( - label="Prompt", - show_label=False, - max_lines=1, - placeholder="Enter your prompt", - container=False, - ) - - run_button = gr.Button("Run", scale=0, variant="primary") - - result = gr.Image(label="Result", show_label=False) - - with gr.Accordion("Advanced Settings", open=False): - negative_prompt = gr.Text( - label="Negative prompt", - max_lines=1, - placeholder="Enter a negative prompt", - visible=False, - ) - - seed = gr.Slider( - label="Seed", - minimum=0, - maximum=MAX_SEED, - step=1, - value=0, - ) - - randomize_seed = gr.Checkbox(label="Randomize seed", value=True) + # viewer frame to model frame + grippers[:, :3] = grippers[:, :3] @ R_viewer + + return grippers + + def inverse_preprocess_x(self, p_x): # model frame (not data frame) to viewer frame + R = self.preprocess_metadata['R'] + R_viewer = self.preprocess_metadata['R_viewer'] + t_viewer = self.preprocess_metadata['t_viewer'] + scale = self.preprocess_metadata['scale'] + global_translation = self.preprocess_metadata['global_translation'] + + # model frame to viewer frame + p_x = p_x @ R_viewer.T + t_viewer + + return p_x + + def inverse_preprocess_gripper(self, grippers): # model frame (not data frame) to viewer frame + R = self.preprocess_metadata['R'] + R_viewer = self.preprocess_metadata['R_viewer'] + t_viewer = self.preprocess_metadata['t_viewer'] + scale = self.preprocess_metadata['scale'] + global_translation = self.preprocess_metadata['global_translation'] + + # model frame to viewer frame + grippers[:, :3] = grippers[:, :3] @ R_viewer.T + t_viewer + + return grippers + + def preprocess_gs(self, params): + if isinstance(params, dict): + xyz = params['means3D'] + rgb = params['rgb_colors'] + quat = torch.nn.functional.normalize(params['unnorm_rotations']) + opa = torch.sigmoid(params['logit_opacities']) + scales = torch.exp(params['log_scales']) + else: + assert isinstance(params, tuple) + xyz, rgb, quat, opa, scales = params + + quat = torch.nn.functional.normalize(quat, dim=-1) + + # transform + R = self.preprocess_metadata['R'] + R_viewer = self.preprocess_metadata['R_viewer'] + scale = self.preprocess_metadata['scale'] + global_translation = self.preprocess_metadata['global_translation'] + + mat = quat2mat(quat) + mat = R @ mat + xyz = xyz @ R.T + xyz = xyz * scale + xyz += global_translation + quat = mat2quat(mat) + scales = scales * scale + + # viewer-specific transform (flip y and z) + # model frame to viewer frame + xyz = xyz @ R_viewer.T + quat = mat2quat(R_viewer @ quat2mat(quat)) + + t_viewer = -xyz.mean(dim=0) + t_viewer[2] = 0 + xyz += t_viewer + print('Overwriting t_viewer to be the planar mean of the object') + self.preprocess_metadata['t_viewer'] = t_viewer + + if isinstance(params, dict): + params['means3D'] = xyz + params['rgb_colors'] = rgb + params['unnorm_rotations'] = quat + params['logit_opacities'] = opa + params['log_scales'] = torch.log(scales) + else: + params = xyz, rgb, quat, opa, scales + + return params + + def preprocess_gs(self, params): + if isinstance(params, dict): + xyz = params['means3D'] + rgb = params['rgb_colors'] + quat = torch.nn.functional.normalize(params['unnorm_rotations']) + opa = torch.sigmoid(params['logit_opacities']) + scales = torch.exp(params['log_scales']) + else: + assert isinstance(params, tuple) + xyz, rgb, quat, opa, scales = params + + quat = torch.nn.functional.normalize(quat, dim=-1) + + # transform + R = self.preprocess_metadata['R'] + R_viewer = self.preprocess_metadata['R_viewer'] + scale = self.preprocess_metadata['scale'] + global_translation = self.preprocess_metadata['global_translation'] + + mat = quat2mat(quat) + mat = R @ mat + xyz = xyz @ R.T + xyz = xyz * scale + xyz += global_translation + quat = mat2quat(mat) + scales = scales * scale + + # viewer-specific transform (flip y and z) + # model frame to viewer frame + xyz = xyz @ R_viewer.T + quat = mat2quat(R_viewer @ quat2mat(quat)) + + t_viewer = -xyz.mean(dim=0) + t_viewer[2] = 0 + xyz += t_viewer + print('Overwriting t_viewer to be the planar mean of the object') + self.preprocess_metadata['t_viewer'] = t_viewer + + if isinstance(params, dict): + params['means3D'] = xyz + params['rgb_colors'] = rgb + params['unnorm_rotations'] = quat + params['logit_opacities'] = opa + params['log_scales'] = torch.log(scales) + else: + params = xyz, rgb, quat, opa, scales + + return params + + def preprocess_bg_gs(self): + t_pts, t_colors, t_scales, t_quats, t_opacities = self.table_params + g_pts, g_colors, g_scales, g_quats, g_opacities = self.gripper_params + + # identify tip first + g_pts_tip_z = g_pts[:, 2].max() + g_pts_tip_mask = (g_pts[:, 2] > g_pts_tip_z - 0.04) & (g_pts[:, 2] < g_pts_tip_z) + + R = self.preprocess_metadata['R'] + R_viewer = self.preprocess_metadata['R_viewer'] + t_viewer = self.preprocess_metadata['t_viewer'] + scale = self.preprocess_metadata['scale'] + global_translation = self.preprocess_metadata['global_translation'] + + t_mat = quat2mat(t_quats) + t_mat = R @ t_mat + t_pts = t_pts @ R.T + t_pts = t_pts * scale + t_pts += global_translation + t_quats = mat2quat(t_mat) + t_scales = t_scales * scale + + t_pts = t_pts @ R_viewer.T + t_quats = mat2quat(R_viewer @ quat2mat(t_quats)) + t_pts += t_viewer + + g_mat = quat2mat(g_quats) + g_mat = R @ g_mat + g_pts = g_pts @ R.T + g_pts = g_pts * scale + g_pts += global_translation + g_quats = mat2quat(g_mat) + g_scales = g_scales * scale + + g_pts = g_pts @ R_viewer.T + g_quats = mat2quat(R_viewer @ quat2mat(g_quats)) + g_pts += t_viewer + + # TODO: center gripper in the viewer frame + g_pts_tip = g_pts[g_pts_tip_mask] + g_pts_tip_mean_xy = g_pts_tip[:, :2].mean(dim=0) + g_pts_translation = torch.tensor([-g_pts_tip_mean_xy[0], -g_pts_tip_mean_xy[1], -0.23]).to(torch.float32).to(self.device) + g_pts = g_pts + g_pts_translation + + self.table_params = t_pts, t_colors, t_scales, t_quats, t_opacities + self.gripper_params = g_pts, g_colors, g_scales, g_quats, g_opacities + + def update_rendervar(self, rendervar): + p_x = self.state['x'] + p_x_viewer = self.inverse_preprocess_x(p_x) + + p_x_pred = self.state['x_pred'] + p_x_pred_viewer = self.inverse_preprocess_x(p_x_pred) + + xyz = rendervar['means3D'] + rgb = rendervar['colors_precomp'] + quat = rendervar['rotations'] + opa = rendervar['opacities'] + scales = rendervar['scales'] + + relations = self.knn_relations(p_x_viewer) + weights = self.knn_weights_brute(p_x_viewer, xyz) + xyz, quat, _ = interpolate_motions( + bones=p_x_viewer, + motions=p_x_pred_viewer - p_x_viewer, + relations=relations, + weights=weights, + xyz=xyz, + quat=quat, + ) + + # normalize + quat = torch.nn.functional.normalize(quat, dim=-1) + + rendervar = { + 'means3D': xyz, + 'colors_precomp': rgb, + 'rotations': quat, + 'opacities': opa, + 'scales': scales, + 'means2D': torch.zeros_like(xyz), + } + + if self.with_bg: + t_pts, t_colors, t_scales, t_quats, t_opacities = self.table_params + + # merge + xyz = torch.cat([xyz, t_pts], dim=0) + rgb = torch.cat([rgb, t_colors], dim=0) + quat = torch.cat([quat, t_quats], dim=0) + opa = torch.cat([opa, t_opacities], dim=0) + scales = torch.cat([scales, t_scales], dim=0) + + if self.render_gripper: + g_pts, g_colors, g_scales, g_quats, g_opacities = self.gripper_params + + # add gripper pos + g_pts = g_pts + self.inverse_preprocess_gripper(self.state['prev_key_pos'][None].clone())[0] + + # merge + xyz = torch.cat([xyz, g_pts], dim=0) + rgb = torch.cat([rgb, g_colors], dim=0) + quat = torch.cat([quat, g_quats], dim=0) + opa = torch.cat([opa, g_opacities], dim=0) + scales = torch.cat([scales, g_scales], dim=0) + + # normalize + quat = torch.nn.functional.normalize(quat, dim=-1) + + rendervar_full = { + 'means3D': xyz, + 'colors_precomp': rgb, + 'rotations': quat, + 'opacities': opa, + 'scales': scales, + 'means2D': torch.zeros_like(xyz), + } + + else: + rendervar_full = rendervar + + return rendervar, rendervar_full + + def reset_state(self, params, visualize_image=False, init=False): + xyz_0 = params['means3D'] + rgb_0 = params['rgb_colors'] + quat_0 = torch.nn.functional.normalize(params['unnorm_rotations']) + opa_0 = torch.sigmoid(params['logit_opacities']) + scales_0 = torch.exp(params['log_scales']) + + rendervar_init = { + 'means3D': xyz_0, + 'colors_precomp': rgb_0, + 'rotations': quat_0, + 'opacities': opa_0, + 'scales': scales_0, + 'means2D': torch.zeros_like(xyz_0), + } # before preprocess + + w = self.width + h = self.height + center = (0, 0, 0.1) + distance = 0.7 + elevation = 20 + azimuth = 180.0 + target = np.array(center) + theta = 90 + azimuth + z = distance * math.sin(math.radians(elevation)) + y = math.cos(math.radians(theta)) * distance * math.cos(math.radians(elevation)) + x = math.sin(math.radians(theta)) * distance * math.cos(math.radians(elevation)) + origin = target + np.array([x, y, z]) + + look_at = target - origin + look_at /= np.linalg.norm(look_at) + up = np.array([0.0, 0.0, 1.0]) + right = np.cross(look_at, up) + right /= np.linalg.norm(right) + up = np.cross(right, look_at) + w2c = np.eye(4) + w2c[:3, 0] = right + w2c[:3, 1] = -up + w2c[:3, 2] = look_at + w2c[:3, 3] = origin + w2c = np.linalg.inv(w2c) + + k = np.array( + [[w / 2 * 1.0, 0., w / 2], + [0., w / 2 * 1.0, h / 2], + [0., 0., 1.]], + ) + self.update_camera(k, w2c, w, h) + + n_particles = self.cfg.sim.n_particles + downsample_indices = fps(xyz_0, torch.ones_like(xyz_0[:, 0]).to(torch.bool), n_particles, self.torch_device) + p_x_viewer = xyz_0[downsample_indices] + p_x = self.preprocess_x(p_x_viewer) + + self.state['x'] = p_x + self.state['v'] = torch.zeros_like(p_x) + self.state['x_his'] = p_x[None].repeat(self.cfg.sim.n_history, 1, 1) + self.state['v_his'] = torch.zeros_like(p_x[None].repeat(self.cfg.sim.n_history, 1, 1)) + self.state['x_pred'] = p_x + self.state['v_pred'] = torch.zeros_like(p_x) + + rendervar_init, rendervar_init_full = self.update_rendervar(rendervar_init) + im, depth = self.render(rendervar_init_full, 0, bg=[0.0, 0.0, 0.0]) + im_vis = (im.permute(1, 2, 0) * 255.0).cpu().numpy().astype(np.uint8) + + return rendervar_init + + + + + + + + def reset(self): + params = self.preprocess_gs(self.params) + if self.with_bg: + self.preprocess_bg_gs() + rendervar = self.reset_state(params, visualize_image=False, init=True) + rendervar, rendervar_full = self.update_rendervar(rendervar) + self.rendervar = rendervar + + im, depth = self.render(rendervar_full, 0, bg=[0.0, 0.0, 0.0]) + im_show = (im.permute(1, 2, 0) * 255.0).cpu().numpy().astype(np.uint8).copy() + + cv2.imwrite(str(root / 'log/temp_init/0000.png'), cv2.cvtColor(im_show, cv2.COLOR_RGB2BGR)) + + make_video(root / 'log/temp_init', root / f'log/gs/temp/form_video_init.mp4', '%04d.png', 1) + + gs_pred = save_to_splat( + rendervar_full['means3D'].cpu().numpy(), + rendervar_full['colors_precomp'].cpu().numpy(), + rendervar_full['scales'].cpu().numpy(), + rendervar_full['rotations'].cpu().numpy(), + rendervar_full['opacities'].cpu().numpy(), + root / 'log/gs/temp/gs_pred.splat', + rot_rev=True, + ) + + form_video = gr.Video( + label='Predicted video', + value=root / f'log/gs/temp/form_video.mp4', + format='mp4', + width=self.width, + height=self.height, + ) + form_3dgs_pred = gr.Model3D( + label='Predicted Gaussian Splats', + height=self.height, + value=root / 'log/gs/temp/gs_pred.splat', + clear_color=[0, 0, 0, 0], + ) + + return form_video, form_3dgs_pred + + def run_command(self, unit_command): + + os.system('rm -rf ' + str(root / 'log/temp/*')) + + # im_list = [] + for i in range(15): + dt = 0.1 # 100ms + command = torch.tensor([unit_command]).to(self.device).to(torch.float32) # 5cm/s + command = self.preprocess_gripper(command) + # command_timestamp = torch.tensor([self.state['prev_key_pos_timestamp'] + (i+1) * dt]).to(self.device).to(torch.float32) + # print(command_timestamp) + if self.verbose: + print('command:', command.cpu().numpy().tolist()) + + assert self.state['sub_pos'] is None + + if self.state['sub_pos'] is None: + eef_xyz_latest = self.state['prev_key_pos'] + # eef_xyz_timestamp_latest = self.state['prev_key_pos_timestamp'] + + else: + eef_xyz_latest = self.state['sub_pos'][-1] # (1, 3), model frame + # eef_xyz_timestamp_latest = self.state['sub_pos_timestamps'][-1].item() + + eef_xyz_updated = eef_xyz_latest + command * dt * 0.01 # cm to m + + if self.state['sub_pos'] is None: + self.state['sub_pos'] = eef_xyz_updated[None] + # self.state['sub_pos_timestamps'] = command_timestamp + else: + self.state['sub_pos'] = torch.cat([self.state['sub_pos'], eef_xyz_updated[None]], dim=0) + # self.state['sub_pos_timestamps'] = torch.cat([self.state['sub_pos_timestamps'], command_timestamp], dim=0) + + # if self.state['sub_pos'] is None: + # eef_xyz = self.state['prev_key_pos'] + # else: + # eef_xyz = self.state['sub_pos'][-1] # (1, 3), model frame + # if self.verbose: + # print(eef_xyz.cpu().numpy().tolist(), end=' ') + + self.step() + rendervar, rendervar_full = self.update_rendervar(self.rendervar) + self.rendervar = rendervar + im, depth = self.render(rendervar_full, 0, bg=[0.0, 0.0, 0.0]) + im_show = (im.permute(1, 2, 0) * 255.0).cpu().numpy().astype(np.uint8).copy() + + # im_list.append(im_show) + cv2.imwrite(str(root / f'log/temp/{i:04}.png'), cv2.cvtColor(im_show, cv2.COLOR_RGB2BGR)) + + # self.state['prev_key_pos_timestamp'] = self.state['prev_key_pos_timestamp'] + 20 * dt + self.state['v'] *= 0.0 + self.state['x'] = self.state['x_pred'].clone() + self.state['x_his'] = self.state['x'][None].repeat(self.cfg.sim.n_history, 1, 1) + self.state['v_his'] *= 0.0 + self.state['v_pred'] *= 0.0 + + make_video(root / 'log/temp', root / f'log/gs/temp/form_video.mp4', '%04d.png', 5) + + form_video = gr.Video( + label='Predicted video', + value=root / f'log/gs/temp/form_video.mp4', + format='mp4', + width=self.width, + height=self.height, + ) + + im, depth = self.render(rendervar_full, 0, bg=[0.0, 0.0, 0.0]) + im_show = (im.permute(1, 2, 0) * 255.0).cpu().numpy().astype(np.uint8).copy() + + gs_pred = save_to_splat( + rendervar_full['means3D'].cpu().numpy(), + rendervar_full['colors_precomp'].cpu().numpy(), + rendervar_full['scales'].cpu().numpy(), + rendervar_full['rotations'].cpu().numpy(), + rendervar_full['opacities'].cpu().numpy(), + root / 'log/gs/temp/gs_pred.splat', + rot_rev=True, + ) + form_3dgs_pred = gr.Model3D( + label='Predicted Gaussian Splats', + height=self.height, + value=root / 'log/gs/temp/gs_pred.splat', + clear_color=[0, 0, 0, 0], + ) + return form_video, form_3dgs_pred + + def on_click_run_xplus(self): + return self.run_command([5.0, 0, 0]) + + def on_click_run_xminus(self): + return self.run_command([-5.0, 0, 0]) + + def on_click_run_yplus(self): + return self.run_command([0, 5.0, 0]) + + def on_click_run_yminus(self): + return self.run_command([0, -5.0, 0]) + + def on_click_run_zplus(self): + return self.run_command([0, 0, 5.0]) + + def on_click_run_zminus(self): + return self.run_command([0, 0, -5.0]) + + def rotate(self, params, rot_mat): + scale = np.linalg.norm(rot_mat, axis=1, keepdims=True) + + params = { + 'means3D': pts, + 'rgb_colors': params['rgb_colors'], + 'log_scales': params['log_scales'], + 'unnorm_rotations': quats, + 'logit_opacities': params['logit_opacities'], + } + return params + + def launch(self, share=False): + + in_dir = root / 'log/gs/ckpts/rope_scene_1' + batch_size = 1 + num_steps = 1 + num_particles = self.cfg.sim.n_particles + self.load_scaniverse(in_dir) + self.init_model(batch_size, num_steps, num_particles, ckpt_path=None) + + params = self.preprocess_gs(self.params) + if self.with_bg: + self.preprocess_bg_gs() + rendervar = self.reset_state(params, visualize_image=False, init=True) + rendervar, rendervar_full = self.update_rendervar(rendervar) + self.rendervar = rendervar + + im, depth = self.render(rendervar_full, 0, bg=[0.0, 0.0, 0.0]) + im_show = (im.permute(1, 2, 0) * 255.0).cpu().numpy().astype(np.uint8).copy() + + cv2.imwrite(str(root / 'log/temp_init/0000.png'), cv2.cvtColor(im_show, cv2.COLOR_RGB2BGR)) + + make_video(root / 'log/temp_init', root / f'log/gs/temp/form_video_init.mp4', '%04d.png', 1) + + gs_pred = save_to_splat( + rendervar_full['means3D'].cpu().numpy(), + rendervar_full['colors_precomp'].cpu().numpy(), + rendervar_full['scales'].cpu().numpy(), + rendervar_full['rotations'].cpu().numpy(), + rendervar_full['opacities'].cpu().numpy(), + root / 'log/gs/temp/gs_pred.splat', + rot_rev=True, + ) + + with gr.Blocks() as app: + + with gr.Row(): + gr.Markdown("# Particle-Grid Neural Dynamics for Learning Deformable Object Models from RGB-D Videos") + + with gr.Row(): + gr.Markdown('### Project page: [https://kywind.github.io/pgnd](https://kywind.github.io/pgnd)') with gr.Row(): - width = gr.Slider( - label="Width", - minimum=256, - maximum=MAX_IMAGE_SIZE, - step=32, - value=1024, # Replace with defaults that work for your model - ) - - height = gr.Slider( - label="Height", - minimum=256, - maximum=MAX_IMAGE_SIZE, - step=32, - value=1024, # Replace with defaults that work for your model - ) + + # with gr.Column(scale=2): + # form_3dgs_orig = gr.Model3D( + # label='Original Gaussian Splats', + # value=None, + # ) + + with gr.Column(scale=2): + form_video = gr.Video( + label='Predicted video', + value=root / f'log/gs/temp/form_video_init.mp4', + format='mp4', + width=self.width, + height=self.height, + ) + + with gr.Column(scale=2): + form_3dgs_pred = gr.Model3D( + label='Predicted Gaussians', + height=self.height, + value=root / 'log/gs/temp/gs_pred.splat', + clear_color=[0, 0, 0, 0], + ) + # Layout with gr.Row(): - guidance_scale = gr.Slider( - label="Guidance scale", - minimum=0.0, - maximum=10.0, - step=0.1, - value=0.0, # Replace with defaults that work for your model - ) - - num_inference_steps = gr.Slider( - label="Number of inference steps", - minimum=1, - maximum=50, - step=1, - value=2, # Replace with defaults that work for your model - ) - - gr.Examples(examples=examples, inputs=[prompt]) - gr.on( - triggers=[run_button.click, prompt.submit], - fn=infer, - inputs=[ - prompt, - negative_prompt, - seed, - randomize_seed, - width, - height, - guidance_scale, - num_inference_steps, - ], - outputs=[result, seed], - ) - -if __name__ == "__main__": - demo.launch() + with gr.Column(scale=2): + with gr.Row(): + run_reset = gr.Button("Reset") + + with gr.Row(): + with gr.Column(): + run_xminus = gr.Button("x-") + with gr.Column(): + run_xplus = gr.Button("x+") + + with gr.Row(): + with gr.Column(): + run_yminus = gr.Button("y-") + with gr.Column(): + run_yplus = gr.Button("y+") + + with gr.Row(): + with gr.Column(): + run_zminus = gr.Button("z-") + with gr.Column(): + run_zplus = gr.Button("z+") + + with gr.Column(scale=2): + _ = gr.Button(visible=False) # empty placeholder + + # Set up callbacks + run_reset.click(self.reset, + inputs=[], + outputs=[form_video, form_3dgs_pred]) + + run_xplus.click(self.on_click_run_xplus, + inputs=[], + outputs=[form_video, form_3dgs_pred]) + + run_xminus.click(self.on_click_run_xminus, + inputs=[], + outputs=[form_video, form_3dgs_pred]) + + run_yplus.click(self.on_click_run_yplus, + inputs=[], + outputs=[form_video, form_3dgs_pred]) + + run_yminus.click(self.on_click_run_yminus, + inputs=[], + outputs=[form_video, form_3dgs_pred]) + + run_zplus.click(self.on_click_run_zplus, + inputs=[], + outputs=[form_video, form_3dgs_pred]) + + run_zminus.click(self.on_click_run_zminus, + inputs=[], + outputs=[form_video, form_3dgs_pred]) + + app.launch(share=share) + + +if __name__ == '__main__': + visualizer = DynamicsVisualizer() + visualizer.launch(share=True) diff --git a/gradio_utils.py b/gradio_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..716d4fef12acd767c5e19003de87bc5d6683ecf2 --- /dev/null +++ b/gradio_utils.py @@ -0,0 +1,155 @@ +import gradio as gr +import numpy as np +from PIL import Image, ImageDraw + + +def get_valid_mask(mask: np.ndarray): + """Convert mask from gr.Image(0 to 255, RGBA) to binary mask. + """ + if mask.ndim == 3: + mask_pil = Image.fromarray(mask).convert('L') + mask = np.array(mask_pil) + if mask.max() == 255: + mask = mask / 255 + return mask + + +def draw_points_on_image(image, points, intr, extr, z, radius_scale=0.006): + overlay_rgba = Image.new("RGBA", image.size, 0) + overlay_draw = ImageDraw.Draw(overlay_rgba) + for point_key, point in points.items(): + + t_color = (255, 100, 100) + o_color = (255, 50, 50) + + rad_draw = int(image.size[0] * radius_scale) + 2 + + p_start = point["start"] + p_target = point["target"] + + if p_start is not None and p_target is not None: + p_draw = int(p_start[0]), int(p_start[1]) + t_draw = int(p_target[0]), int(p_target[1]) + + pt = (p_target[0] - p_start[0], p_target[1] - p_start[1]) + pt_norm = np.linalg.norm(pt) + pt_unit = (pt[0] / pt_norm, pt[1] / pt_norm) + pt_tang = (pt_unit[1], -pt_unit[0]) + tt1 = (t_draw[0] + pt_tang[0] * 0.1 * pt_norm - pt_unit[0] * 0.1 * pt_norm, + t_draw[1] + pt_tang[1] * 0.1 * pt_norm - pt_unit[1] * 0.1 * pt_norm) + tt2 = (t_draw[0] - pt_tang[0] * 0.1 * pt_norm - pt_unit[0] * 0.1 * pt_norm, + t_draw[1] - pt_tang[1] * 0.1 * pt_norm - pt_unit[1] * 0.1 * pt_norm) + tt1_draw = int(tt1[0]), int(tt1[1]) + tt2_draw = int(tt2[0]), int(tt2[1]) + + overlay_draw.line( + (p_draw[0], p_draw[1], t_draw[0], t_draw[1]), + fill=o_color, + width=4, + ) + + overlay_draw.line( + (t_draw[0], t_draw[1], tt1_draw[0], tt1_draw[1]), + fill=o_color, + width=4, + ) + + overlay_draw.line( + (t_draw[0], t_draw[1], tt2_draw[0], tt2_draw[1]), + fill=o_color, + width=4, + ) + + if p_start is not None: + p_draw = int(p_start[0]), int(p_start[1]) + overlay_draw.ellipse( + ( + p_draw[0] - rad_draw, + p_draw[1] - rad_draw, + p_draw[0] + rad_draw, + p_draw[1] + rad_draw, + ), + fill=t_color, + outline=o_color, + width=2, + ) + + if p_target is not None: + assert p_start is not None + + return Image.alpha_composite(image.convert("RGBA"), + overlay_rgba).convert("RGB") + + +def draw_raw_points_on_image(image, + points, + # curr_point=None, + # highlight_all=True, + radius_scale=0.002): + overlay_rgba = Image.new("RGBA", image.size, 0) + overlay_draw = ImageDraw.Draw(overlay_rgba) + for p in range(points.shape[0]): + point = points[p] + t_color = (150, 150, 255) + o_color = (50, 50, 255) + + rad_draw = int(image.size[0] * radius_scale) + + t_draw = int(point[0]), int(point[1]) + overlay_draw.ellipse( + ( + t_draw[0] - rad_draw, + t_draw[1] - rad_draw, + t_draw[0] + rad_draw, + t_draw[1] + rad_draw, + ), + fill=t_color, + outline=o_color, + ) + return Image.alpha_composite(image.convert("RGBA"), + overlay_rgba).convert("RGB") + + +def draw_mask_on_image(image, mask): + im_mask = np.uint8(mask * 255) + im_mask_rgba = np.concatenate( + ( + np.tile(im_mask[..., None], [1, 1, 3]), + 45 * np.ones( + (im_mask.shape[0], im_mask.shape[1], 1), dtype=np.uint8), + ), + axis=-1, + ) + im_mask_rgba = Image.fromarray(im_mask_rgba).convert("RGBA") + + return Image.alpha_composite(image.convert("RGBA"), + im_mask_rgba).convert("RGB") + + +def on_change_single_global_state(keys, + value, + global_state, + map_transform=None): + if map_transform is not None: + value = map_transform(value) + + curr_state = global_state + if isinstance(keys, str): + last_key = keys + + else: + for k in keys[:-1]: + curr_state = curr_state[k] + + last_key = keys[-1] + + curr_state[last_key] = value + return global_state + + +def get_latest_points_pair(points_dict): + if not points_dict: + return None + point_idx = list(points_dict.keys()) + latest_point_idx = max(point_idx) + return latest_point_idx diff --git a/requirements.txt b/requirements.txt index 73d01db64bd054c7d21fd0bd79b3af087c468809..82c9eb196dae5fed9a18c1afd52eb747bbd507e5 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,25 @@ -accelerate -diffusers -invisible_watermark -torch +warp-lang==1.1.0 +trimesh +pyyaml +numpy==1.26.4 +scipy transformers -xformers \ No newline at end of file +scikit-learn +scikit-image +pyvista +opencv-contrib-python +open3d +moviepy +matplotlib +kornia +ipdb +h5py +gradio +ffmpeg +einops +dill +av +timm +omegaconf +hydra-core +wandb \ No newline at end of file diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..8ff95f0c86aab717dbbcc62d313b352cb148dd7c --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,213 @@ +## Mac OS + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +## Vim + +# Swap +[._]*.s[a-v][a-z] +!*.svg # comment out if you don't need vector files +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +*~ +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +## Linux + +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +## Python + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +pip-wheel-metadata/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +.python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +# env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +## VS Code +/.vscode + +## wandb +/wandb + +## gradio +.gradio + +# log/ +# weights/ + +/third-party/* +!/third-party/diff-gaussian-rasterization-w-depth diff --git a/src/LICENSE b/src/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..9192ce6451fe083011d981c2a24ae02ce1095602 --- /dev/null +++ b/src/LICENSE @@ -0,0 +1,7 @@ +Copyright (c) 2011-2024 GitHub Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/src/experiments/.root b/src/experiments/.root new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link1.obj b/src/experiments/assets/robots/xarm7/meshes/collision/link1.obj new file mode 100644 index 0000000000000000000000000000000000000000..121b252558d16cd6f508e13776f016fca7806fe7 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link1.obj @@ -0,0 +1,3559 @@ +# https://github.com/mikedh/trimesh + +o geometry_0 +v -0.04790971 -0.00026275 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.04779786 -0.00303987 -0.06612349 0.54509804 0.71372549 0.60000000 +v -0.04786310 0.00166793 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.04777922 0.00252389 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04779786 -0.00220293 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04785378 -0.01167559 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04776990 -0.00517027 -0.05789111 0.54509804 0.71372549 0.60000000 +v -0.04745301 0.00154429 -0.06810639 0.54509804 0.71372549 0.60000000 +v -0.04753689 0.00319915 -0.07705703 0.54509804 0.71372549 0.60000000 +v -0.04759281 0.00419777 -0.08742578 0.54509804 0.71372549 0.60000000 +v -0.04742505 0.00630915 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.04762078 0.00459722 -0.09800940 0.54509804 0.71372549 0.60000000 +v -0.04763942 0.00439750 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04610445 -0.00989709 -0.11200016 0.54509804 0.71372549 0.60000000 +v -0.04734117 -0.00689171 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04778854 -0.01284541 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04773262 -0.00804250 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04774194 -0.00761452 -0.05047521 0.54509804 0.71372549 0.60000000 +v -0.04666078 0.00609040 -0.07003403 0.54509804 0.71372549 0.60000000 +v -0.04680991 0.00778331 -0.07861020 0.54509804 0.71372549 0.60000000 +v -0.04733184 -0.00065269 -0.06020551 0.54509804 0.71372549 0.60000000 +v -0.04694039 0.00920991 -0.09840230 0.54509804 0.71372549 0.60000000 +v -0.04697767 0.00904823 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04689379 0.00880095 -0.08853080 0.54509804 0.71372549 0.60000000 +v -0.04653961 0.01084576 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.04688735 -0.01532770 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.04595532 -0.01901785 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.04506057 -0.01377745 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04480892 -0.01470950 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04347612 -0.01815238 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04296350 -0.01947437 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04149089 -0.02236562 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04074526 -0.02381125 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.03909556 -0.02635061 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.03807964 -0.02790085 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.03491073 -0.03181926 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.03133173 -0.03538578 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.02751971 -0.03845773 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.02340945 -0.04112072 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.01891705 -0.04341281 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.01426621 -0.04519131 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.00948488 -0.04646575 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.00460103 -0.04723611 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.00430278 -0.04725513 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.00034807 -0.04749290 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.00470998 -0.04729318 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.00499891 -0.04725513 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.00963112 -0.04657987 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.01322876 -0.04571440 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.01413283 -0.04544810 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.01852271 -0.04387884 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.02246521 -0.04203376 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.02674324 -0.03948489 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.02763799 -0.03887620 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.02914788 -0.03776345 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03273621 -0.03473904 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03389193 -0.03355021 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03601696 -0.03136275 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03702356 -0.03009782 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03896219 -0.02764406 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03983830 -0.02637914 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04002471 -0.02610333 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04241071 -0.02206128 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04438662 -0.01779097 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04594312 -0.01331143 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04642777 -0.01149489 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04687515 -0.00925036 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04620697 -0.00925987 -0.11200016 0.54509804 0.71372549 0.60000000 +v -0.04746233 -0.01532770 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04739709 -0.00595015 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04646505 0.00381735 -0.06244010 0.54509804 0.71372549 0.60000000 +v -0.04544914 0.01054141 -0.07189414 0.54509804 0.71372549 0.60000000 +v -0.04563554 0.01227236 -0.08011425 0.54509804 0.71372549 0.60000000 +v -0.04719204 -0.00318253 -0.05307200 0.54509804 0.71372549 0.60000000 +v -0.04584991 0.01361337 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04574739 0.01331854 -0.08959899 0.54509804 0.71372549 0.60000000 +v -0.04519749 0.01525872 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.04580331 0.01372750 -0.09878292 0.54509804 0.71372549 0.60000000 +v 0.04687804 -0.00505614 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04730677 -0.01167559 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.04452931 -0.02274605 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.04264661 -0.02645522 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.04166797 -0.02794840 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.04029788 -0.03002174 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.03844314 -0.03228529 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.03751111 -0.03339804 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.03471501 -0.03617516 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.03433287 -0.03654608 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.03080979 -0.03943733 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.03063270 -0.03957048 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.02697913 -0.04207180 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.02629875 -0.04245222 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.02287819 -0.04434486 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.02174111 -0.04484892 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.01852560 -0.04623749 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.01699706 -0.04675106 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.01398660 -0.04773067 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.01215049 -0.04816816 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.00929847 -0.04881489 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.00725732 -0.04910021 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.00451714 -0.04947112 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.00185153 -0.04966134 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.00031079 -0.04964232 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.00513872 -0.04947112 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.00992937 -0.04881489 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.01460817 -0.04773067 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.01914717 -0.04623749 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.02349976 -0.04434486 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.02760071 -0.04207180 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.03143136 -0.03944685 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.03495445 -0.03654608 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.03812336 -0.03340755 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04090082 -0.03003125 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04201926 -0.02832883 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04324022 -0.02646474 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04379944 -0.02537100 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04512293 -0.02275556 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04645573 -0.01925562 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04653961 -0.01901785 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04732253 -0.01601247 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.04689668 0.00489206 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04714833 -0.00017715 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04579399 0.01378456 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04426546 0.01808340 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04351983 0.01980484 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04218702 0.02236322 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04134820 0.02397053 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03979170 0.02635771 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03877578 0.02790796 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03701424 0.03009542 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03580260 0.03159811 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03452571 0.03297716 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03391057 0.03355732 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03110515 0.03619178 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.03046205 0.03668634 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.02736770 0.03905450 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.02671528 0.03946346 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.02334132 0.04155582 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.02280074 0.04185065 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.01855067 0.04386692 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.01454293 0.04532206 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.00966840 0.04656796 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.00828899 0.04682475 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.00505483 0.04726224 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.00034807 0.04750001 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.00430278 0.04726224 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.00447054 0.04725273 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.00890702 0.04655845 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.00950352 0.04646334 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.01342738 0.04541716 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.01422892 0.04519842 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.01780793 0.04383839 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.01893569 0.04340089 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.02341877 0.04111833 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.02750107 0.03847435 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.03146221 0.03525973 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.03318647 0.03352878 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.03514374 0.03156007 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.03631810 0.03009542 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.03813557 0.02782236 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.03908624 0.02634820 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04087574 0.02357108 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04149089 0.02236322 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04309398 0.01919615 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04486484 0.01455493 -0.11199402 0.54509804 0.71372549 0.60000000 +v 0.04612309 0.00979007 -0.11199402 0.54509804 0.71372549 0.60000000 +v -0.04599904 -0.00147061 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04624137 0.00118288 -0.05557671 0.54509804 0.71372549 0.60000000 +v -0.04518817 0.00820178 -0.06459488 0.54509804 0.71372549 0.60000000 +v -0.04380876 0.01484976 -0.07366831 0.54509804 0.71372549 0.60000000 +v -0.04403245 0.01662826 -0.08155077 0.54509804 0.71372549 0.60000000 +v -0.04452643 0.01701820 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.04422817 0.01812144 -0.09914511 0.54509804 0.71372549 0.60000000 +v 0.04720425 0.00057420 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.04719493 -0.00812810 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.04624425 0.00920991 -0.09852508 0.54509804 0.71372549 0.60000000 +v 0.04687804 0.00521542 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.04692464 0.00459722 -0.09813832 0.54509804 0.71372549 0.60000000 +v -0.04223362 0.02233469 -0.09948890 0.54509804 0.71372549 0.60000000 +v -0.03983830 0.02632918 -0.09981427 0.54509804 0.71372549 0.60000000 +v -0.03706084 0.03007640 -0.10011508 0.54509804 0.71372549 0.60000000 +v -0.03392921 0.03352878 -0.10038519 0.54509804 0.71372549 0.60000000 +v -0.03048069 0.03665780 -0.10063075 0.54509804 0.71372549 0.60000000 +v -0.02673392 0.03943493 -0.10084562 0.54509804 0.71372549 0.60000000 +v -0.02273550 0.04183163 -0.10102365 0.54509804 0.71372549 0.60000000 +v -0.01852271 0.04381936 -0.10117712 0.54509804 0.71372549 0.60000000 +v -0.01413283 0.04538863 -0.10129376 0.54509804 0.71372549 0.60000000 +v -0.00961248 0.04652041 -0.10137357 0.54509804 0.71372549 0.60000000 +v -0.00499891 0.04720518 -0.10142268 0.54509804 0.71372549 0.60000000 +v -0.00034807 0.04750001 -0.10716264 0.54509804 0.71372549 0.60000000 +v 0.00430278 0.04720518 -0.10149021 0.54509804 0.71372549 0.60000000 +v 0.00891634 0.04652041 -0.10144110 0.54509804 0.71372549 0.60000000 +v 0.01343670 0.04538863 -0.10136129 0.54509804 0.71372549 0.60000000 +v 0.01782657 0.04381936 -0.10125079 0.54509804 0.71372549 0.60000000 +v 0.02203936 0.04183163 -0.10110346 0.54509804 0.71372549 0.60000000 +v 0.02603778 0.03943493 -0.10092542 0.54509804 0.71372549 0.60000000 +v 0.02977523 0.03665780 -0.10071670 0.54509804 0.71372549 0.60000000 +v 0.03323307 0.03352878 -0.10047728 0.54509804 0.71372549 0.60000000 +v 0.03636471 0.03007640 -0.10020716 0.54509804 0.71372549 0.60000000 +v 0.03914216 0.02632918 -0.09991249 0.54509804 0.71372549 0.60000000 +v 0.04153749 0.02233469 -0.09959326 0.54509804 0.71372549 0.60000000 +v 0.04353204 0.01812144 -0.09925562 0.54509804 0.71372549 0.60000000 +v 0.04510717 0.01373701 -0.09889955 0.54509804 0.71372549 0.60000000 +v 0.04575028 0.01119765 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.04608581 0.00982811 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.04415361 0.00177254 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04488992 0.00547221 -0.05797091 0.54509804 0.71372549 0.60000000 +v -0.04351051 0.01244355 -0.06664531 0.54509804 0.71372549 0.60000000 +v -0.04177693 0.01899643 -0.07534425 0.54509804 0.71372549 0.60000000 +v -0.04201926 0.02081297 -0.08291363 0.54509804 0.71372549 0.60000000 +v -0.04424681 0.01769346 -0.09125651 0.54509804 0.71372549 0.60000000 +v -0.04255984 0.02121242 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.04714833 -0.00302085 -0.06623399 0.54509804 0.71372549 0.60000000 +v 0.04694328 0.00433092 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.04685940 0.00319915 -0.07714298 0.54509804 0.71372549 0.60000000 +v 0.04715764 -0.00514174 -0.05802616 0.54509804 0.71372549 0.60000000 +v 0.04679415 0.00156331 -0.06821689 0.54509804 0.71372549 0.60000000 +v 0.04671959 -0.00062415 -0.06033443 0.54509804 0.71372549 0.60000000 +v 0.04657979 -0.00471375 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.04613241 0.00778331 -0.07869614 0.54509804 0.71372549 0.60000000 +v -0.04224294 0.02189719 -0.09199320 0.54509804 0.71372549 0.60000000 +v -0.04143208 0.02320967 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.03983830 0.02589169 -0.09268076 0.54509804 0.71372549 0.60000000 +v -0.03705152 0.02962939 -0.09331922 0.54509804 0.71372549 0.60000000 +v -0.03391989 0.03307227 -0.09390242 0.54509804 0.71372549 0.60000000 +v -0.03046205 0.03619178 -0.09441809 0.54509804 0.71372549 0.60000000 +v -0.02671528 0.03896891 -0.09487238 0.54509804 0.71372549 0.60000000 +v -0.02271686 0.04135609 -0.09526528 0.54509804 0.71372549 0.60000000 +v -0.01850407 0.04334383 -0.09558450 0.54509804 0.71372549 0.60000000 +v -0.01412351 0.04491309 -0.09583006 0.54509804 0.71372549 0.60000000 +v -0.00960316 0.04604487 -0.09600809 0.54509804 0.71372549 0.60000000 +v -0.00498959 0.04672964 -0.09611859 0.54509804 0.71372549 0.60000000 +v -0.00033875 0.04723371 -0.09836547 0.54509804 0.71372549 0.60000000 +v -0.00034807 0.04732881 -0.10150863 0.54509804 0.71372549 0.60000000 +v 0.00430278 0.04672964 -0.09614929 0.54509804 0.71372549 0.60000000 +v 0.00890702 0.04604487 -0.09605106 0.54509804 0.71372549 0.60000000 +v 0.01342738 0.04491309 -0.09587303 0.54509804 0.71372549 0.60000000 +v 0.01781725 0.04335334 -0.09563361 0.54509804 0.71372549 0.60000000 +v 0.02203004 0.04136560 -0.09531438 0.54509804 0.71372549 0.60000000 +v 0.02601914 0.03896891 -0.09493377 0.54509804 0.71372549 0.60000000 +v 0.02976591 0.03620129 -0.09448562 0.54509804 0.71372549 0.60000000 +v 0.03322375 0.03308178 -0.09396995 0.54509804 0.71372549 0.60000000 +v 0.03636471 0.02962939 -0.09339288 0.54509804 0.71372549 0.60000000 +v 0.03914216 0.02589169 -0.09275443 0.54509804 0.71372549 0.60000000 +v 0.04032585 0.02390395 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.04155613 0.02190670 -0.09207300 0.54509804 0.71372549 0.60000000 +v 0.04257205 0.01984288 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.04356000 0.01769346 -0.09133632 0.54509804 0.71372549 0.60000000 +v 0.04438019 0.01560111 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.04508853 0.01333756 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.04505125 0.01331854 -0.08966038 0.54509804 0.71372549 0.60000000 +v 0.04495805 0.01228187 -0.08020020 0.54509804 0.71372549 0.60000000 +v -0.04245731 0.00410267 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04278353 0.00664203 -0.05433663 0.54509804 0.71372549 0.60000000 +v -0.04315634 0.00960936 -0.06025462 0.54509804 0.71372549 0.60000000 +v -0.04144140 0.01651414 -0.06857909 0.54509804 0.71372549 0.60000000 +v -0.03936296 0.02291484 -0.07690970 0.54509804 0.71372549 0.60000000 +v -0.03961461 0.02477894 -0.08418440 0.54509804 0.71372549 0.60000000 +v -0.04021111 0.02514985 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.04223362 0.02179257 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.04601125 0.00609991 -0.07014453 0.54509804 0.71372549 0.60000000 +v 0.04585280 0.00384588 -0.06256902 0.54509804 0.71372549 0.60000000 +v 0.04629085 -0.00368660 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.03888763 0.02702346 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.03982898 0.02569197 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.03634318 0.03014297 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.03747094 0.02883050 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.03474940 0.03183588 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.03390125 0.03264429 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.03307174 0.03343368 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.03043409 0.03564967 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.02951138 0.03637249 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.03132884 0.03494588 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.02761003 0.03770398 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.02700421 0.03810343 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.02669664 0.03830316 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.02614674 0.03864554 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.02552228 0.03901646 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.02501898 0.03931129 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.02891488 0.03680047 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.02857002 0.03704774 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.02260501 0.04059524 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.02212036 0.04085203 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.02105784 0.04135609 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.01998600 0.04183163 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.01841087 0.04246884 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.01780504 0.04270661 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.01329400 0.04414273 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.01556816 0.04347698 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.00996665 0.04490359 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.00758064 0.04530303 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.00518532 0.04558836 -0.09099868 0.54509804 0.71372549 0.60000000 +v -0.00033875 0.04581661 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.00171172 0.04577857 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.00427481 0.04548374 -0.09050756 0.54509804 0.71372549 0.60000000 +v 0.00654897 0.04535059 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.00885110 0.04479897 -0.09031725 0.54509804 0.71372549 0.60000000 +v 0.01133030 0.04445658 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.01335281 0.04389545 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.01485339 0.04347698 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.01710891 0.04270661 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.01821803 0.04227863 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.01931782 0.04182212 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.02357721 0.03973927 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.02558108 0.03856946 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.02751971 0.03729502 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.02888048 0.03632493 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.02975659 0.03564967 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.03019465 0.03530729 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.03197483 0.03380459 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.03365249 0.03223533 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.03524626 0.03058047 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.03635539 0.02931554 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.03675616 0.02884952 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.03817285 0.02705199 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.03914216 0.02568245 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.03949633 0.02517839 -0.09099868 0.54509804 0.71372549 0.60000000 +v 0.03893712 0.02478845 -0.08425807 0.54509804 0.71372549 0.60000000 +v 0.04134176 0.02082248 -0.08299344 0.54509804 0.71372549 0.60000000 +v 0.04335495 0.01663777 -0.08163058 0.54509804 0.71372549 0.60000000 +v 0.04479028 0.01055092 -0.07199851 0.54509804 0.71372549 0.60000000 +v -0.04222430 0.00434995 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.04104994 0.01358484 -0.06239713 0.54509804 0.71372549 0.60000000 +v -0.03900879 0.02037548 -0.07038395 0.54509804 0.71372549 0.60000000 +v -0.03657618 0.02658597 -0.07835850 0.54509804 0.71372549 0.60000000 +v -0.03683715 0.02849762 -0.08536309 0.54509804 0.71372549 0.60000000 +v 0.04457592 0.00823031 -0.06471766 0.54509804 0.71372549 0.60000000 +v 0.04567571 0.00123043 -0.05571791 0.54509804 0.71372549 0.60000000 +v 0.04548931 -0.00148963 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.03371484 0.03192148 -0.08643127 0.54509804 0.71372549 0.60000000 +v -0.03027564 0.03502196 -0.08738281 0.54509804 0.71372549 0.60000000 +v -0.02654751 0.03777056 -0.08821772 0.54509804 0.71372549 0.60000000 +v -0.02256773 0.04014823 -0.08892984 0.54509804 0.71372549 0.60000000 +v -0.01838290 0.04212646 -0.08951304 0.54509804 0.71372549 0.60000000 +v -0.00953791 0.04479897 -0.09029883 0.54509804 0.71372549 0.60000000 +v -0.01403031 0.04367671 -0.08997347 0.54509804 0.71372549 0.60000000 +v -0.00496163 0.04547423 -0.09050142 0.54509804 0.71372549 0.60000000 +v -0.00490571 0.04337236 -0.08468780 0.54509804 0.71372549 0.60000000 +v -0.00033875 0.04566444 -0.09058123 0.54509804 0.71372549 0.60000000 +v -0.00032943 0.04351502 -0.08480444 0.54509804 0.71372549 0.60000000 +v 0.00424685 0.04337236 -0.08470008 0.54509804 0.71372549 0.60000000 +v 0.00878585 0.04270661 -0.08446679 0.54509804 0.71372549 0.60000000 +v 0.01324097 0.04159386 -0.08407390 0.54509804 0.71372549 0.60000000 +v 0.01334349 0.04367671 -0.08999802 0.54509804 0.71372549 0.60000000 +v 0.01770541 0.04212646 -0.08955602 0.54509804 0.71372549 0.60000000 +v 0.02189024 0.04014823 -0.08897895 0.54509804 0.71372549 0.60000000 +v 0.02587001 0.03778007 -0.08827297 0.54509804 0.71372549 0.60000000 +v 0.02958883 0.03503148 -0.08744420 0.54509804 0.71372549 0.60000000 +v 0.03303735 0.03192148 -0.08649266 0.54509804 0.71372549 0.60000000 +v 0.03615966 0.02849762 -0.08543062 0.54509804 0.71372549 0.60000000 +v 0.03870411 0.02293386 -0.07700178 0.54509804 0.71372549 0.60000000 +v 0.04112739 0.01900594 -0.07544248 0.54509804 0.71372549 0.60000000 +v 0.04315923 0.01486878 -0.07376653 0.54509804 0.71372549 0.60000000 +v -0.03967053 0.00693686 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.03859870 0.01734157 -0.06440457 0.54509804 0.71372549 0.60000000 +v -0.03623133 0.02398004 -0.07204762 0.54509804 0.71372549 0.60000000 +v -0.03346320 0.02997178 -0.07967224 0.54509804 0.71372549 0.60000000 +v 0.04431494 0.00551025 -0.05811211 0.54509804 0.71372549 0.60000000 +v 0.04288893 0.01247209 -0.06676195 0.54509804 0.71372549 0.60000000 +v 0.04371844 0.00169646 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.03003331 0.03304374 -0.08084479 0.54509804 0.71372549 0.60000000 +v -0.02633314 0.03576380 -0.08187000 0.54509804 0.71372549 0.60000000 +v -0.02238132 0.03810343 -0.08274788 0.54509804 0.71372549 0.60000000 +v -0.01822446 0.04005313 -0.08347228 0.54509804 0.71372549 0.60000000 +v -0.01389983 0.04159386 -0.08403707 0.54509804 0.71372549 0.60000000 +v -0.00944471 0.04269710 -0.08444224 0.54509804 0.71372549 0.60000000 +v -0.00933287 0.03978683 -0.07909518 0.54509804 0.71372549 0.60000000 +v -0.00484047 0.04044306 -0.07938371 0.54509804 0.71372549 0.60000000 +v -0.00032011 0.04319166 -0.08393884 0.54509804 0.71372549 0.60000000 +v 0.00420957 0.04044306 -0.07939599 0.54509804 0.71372549 0.60000000 +v 0.00870197 0.03978683 -0.07912587 0.54509804 0.71372549 0.60000000 +v 0.01310117 0.03871212 -0.07866545 0.54509804 0.71372549 0.60000000 +v 0.01756560 0.04006264 -0.08352139 0.54509804 0.71372549 0.60000000 +v 0.01738852 0.03720943 -0.07802086 0.54509804 0.71372549 0.60000000 +v 0.02172247 0.03811294 -0.08280313 0.54509804 0.71372549 0.60000000 +v 0.02567429 0.03577331 -0.08193753 0.54509804 0.71372549 0.60000000 +v 0.02937446 0.03305325 -0.08091846 0.54509804 0.71372549 0.60000000 +v 0.03280434 0.02999080 -0.07975205 0.54509804 0.71372549 0.60000000 +v 0.03592665 0.02660499 -0.07844444 0.54509804 0.71372549 0.60000000 +v 0.03838722 0.02040401 -0.07048831 0.54509804 0.71372549 0.60000000 +v 0.04082914 0.01654267 -0.06868959 0.54509804 0.71372549 0.60000000 +v -0.03746162 0.00866780 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.03581192 0.02086053 -0.06625855 0.54509804 0.71372549 0.60000000 +v -0.03311834 0.02730878 -0.07356395 0.54509804 0.71372549 0.60000000 +v 0.04258136 0.00965692 -0.06038354 0.54509804 0.71372549 0.60000000 +v 0.04226447 0.00670860 -0.05448397 0.54509804 0.71372549 0.60000000 +v 0.04198486 0.00410267 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.02971642 0.03031417 -0.07492680 0.54509804 0.71372549 0.60000000 +v -0.02604421 0.03297716 -0.07611163 0.54509804 0.71372549 0.60000000 +v -0.02212968 0.03527875 -0.07713070 0.54509804 0.71372549 0.60000000 +v -0.01801009 0.03719040 -0.07797174 0.54509804 0.71372549 0.60000000 +v -0.01373206 0.03870261 -0.07862247 0.54509804 0.71372549 0.60000000 +v -0.00459814 0.02203985 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.00036671 0.02246784 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.00015234 0.02248686 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.00429345 0.02209692 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.02149878 0.03529778 -0.07719209 0.54509804 0.71372549 0.60000000 +v 0.00861809 0.02090808 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.02541332 0.03299619 -0.07619143 0.54509804 0.71372549 0.60000000 +v 0.02908553 0.03033319 -0.07500661 0.54509804 0.71372549 0.60000000 +v 0.03249677 0.02732781 -0.07366217 0.54509804 0.71372549 0.60000000 +v 0.03560044 0.02400857 -0.07215198 0.54509804 0.71372549 0.60000000 +v 0.03802372 0.01738912 -0.06452736 0.54509804 0.71372549 0.60000000 +v 0.04047497 0.01363239 -0.06252604 0.54509804 0.71372549 0.60000000 +v -0.03712608 0.00888655 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.03271757 0.02409417 -0.06794063 0.54509804 0.71372549 0.60000000 +v 0.04183574 0.00427386 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.02933429 0.02702346 -0.06945082 0.54509804 0.71372549 0.60000000 +v -0.02569936 0.02961988 -0.07078299 0.54509804 0.71372549 0.60000000 +v -0.02182211 0.03185490 -0.07191256 0.54509804 0.71372549 0.60000000 +v -0.00892277 0.02080346 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.02123781 0.03188343 -0.07198623 0.54509804 0.71372549 0.60000000 +v 0.02510575 0.02964842 -0.07086279 0.54509804 0.71372549 0.60000000 +v 0.02267314 0.01571524 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.02875000 0.02706151 -0.06954905 0.54509804 0.71372549 0.60000000 +v 0.03213328 0.02413221 -0.06804500 0.54509804 0.71372549 0.60000000 +v 0.03523694 0.02089857 -0.06636905 0.54509804 0.71372549 0.60000000 +v 0.03930061 0.00687028 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.03138476 0.01224383 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.03124496 0.01231040 -0.04929038 0.54509804 0.71372549 0.60000000 +v -0.02686440 0.01432667 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.02419236 0.01514459 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.03100552 0.01226285 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.03119192 0.01215823 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.03660703 0.00894362 -0.04929038 0.54509804 0.71372549 0.60000000 +v 0.03703577 0.00867732 -0.04929038 0.54509804 0.71372549 0.60000000 +f 1 2 3 +f 1 3 4 +f 1 4 5 +f 1 5 6 +f 1 6 2 +f 2 6 7 +f 2 7 8 +f 2 8 9 +f 2 9 3 +f 3 9 10 +f 3 10 11 +f 3 11 12 +f 3 12 13 +f 3 13 4 +f 4 13 14 +f 4 14 5 +f 5 14 15 +f 5 15 16 +f 5 16 6 +f 6 16 69 +f 6 69 120 +f 6 120 119 +f 6 119 118 +f 6 118 117 +f 6 117 116 +f 6 116 115 +f 6 115 114 +f 6 114 113 +f 6 113 112 +f 6 112 111 +f 6 111 110 +f 6 110 109 +f 6 109 108 +f 6 108 107 +f 6 107 106 +f 6 106 105 +f 6 105 104 +f 6 104 103 +f 6 103 102 +f 6 102 101 +f 6 101 100 +f 6 100 99 +f 6 99 98 +f 6 98 97 +f 6 97 96 +f 6 96 95 +f 6 95 94 +f 6 94 93 +f 6 93 92 +f 6 92 91 +f 6 91 90 +f 6 90 89 +f 6 89 88 +f 6 88 87 +f 6 87 86 +f 6 86 85 +f 6 85 84 +f 6 84 83 +f 6 83 82 +f 6 82 81 +f 6 81 27 +f 6 27 26 +f 6 26 80 +f 6 80 175 +f 6 175 219 +f 6 219 263 +f 6 263 329 +f 6 329 360 +f 6 360 387 +f 6 387 407 +f 6 407 418 +f 6 418 426 +f 6 426 425 +f 6 425 424 +f 6 424 423 +f 6 423 422 +f 6 422 414 +f 6 414 398 +f 6 398 396 +f 6 396 395 +f 6 395 394 +f 6 394 393 +f 6 393 411 +f 6 411 421 +f 6 421 420 +f 6 420 419 +f 6 419 405 +f 6 405 382 +f 6 382 354 +f 6 354 322 +f 6 322 253 +f 6 253 206 +f 6 206 167 +f 6 167 70 +f 6 70 17 +f 6 17 18 +f 6 18 7 +f 7 18 8 +f 8 19 20 +f 8 20 9 +f 8 18 21 +f 8 21 19 +f 9 20 11 +f 9 11 10 +f 11 22 23 +f 11 23 13 +f 11 13 12 +f 11 20 24 +f 11 24 25 +f 11 25 22 +f 13 23 14 +f 14 26 27 +f 14 27 28 +f 14 28 29 +f 14 29 30 +f 14 30 31 +f 14 31 32 +f 14 32 33 +f 14 33 34 +f 14 34 35 +f 14 35 36 +f 14 36 37 +f 14 37 38 +f 14 38 39 +f 14 39 40 +f 14 40 41 +f 14 41 42 +f 14 42 43 +f 14 43 44 +f 14 44 45 +f 14 45 46 +f 14 46 47 +f 14 47 48 +f 14 48 49 +f 14 49 50 +f 14 50 51 +f 14 51 52 +f 14 52 53 +f 14 53 54 +f 14 54 55 +f 14 55 56 +f 14 56 57 +f 14 57 58 +f 14 58 59 +f 14 59 60 +f 14 60 61 +f 14 61 62 +f 14 62 63 +f 14 63 64 +f 14 64 65 +f 14 65 66 +f 14 66 67 +f 14 67 15 +f 14 23 68 +f 14 68 26 +f 15 67 69 +f 15 69 16 +f 17 70 21 +f 17 21 18 +f 19 21 71 +f 19 71 72 +f 19 72 73 +f 19 73 20 +f 20 73 25 +f 20 25 24 +f 21 70 74 +f 21 74 71 +f 22 25 23 +f 23 25 75 +f 23 75 68 +f 25 73 76 +f 25 76 77 +f 25 77 78 +f 25 78 75 +f 26 68 79 +f 26 79 80 +f 27 81 29 +f 27 29 28 +f 29 81 30 +f 30 81 31 +f 31 81 82 +f 31 82 32 +f 32 82 33 +f 33 82 34 +f 34 82 35 +f 35 82 83 +f 35 83 84 +f 35 84 36 +f 36 84 85 +f 36 85 86 +f 36 86 37 +f 37 86 87 +f 37 87 88 +f 37 88 89 +f 37 89 38 +f 38 89 90 +f 38 90 91 +f 38 91 39 +f 39 91 92 +f 39 92 93 +f 39 93 40 +f 40 93 94 +f 40 94 95 +f 40 95 41 +f 41 95 96 +f 41 96 97 +f 41 97 42 +f 42 97 98 +f 42 98 99 +f 42 99 43 +f 43 99 100 +f 43 100 101 +f 43 101 102 +f 43 102 44 +f 44 102 45 +f 45 102 103 +f 45 103 104 +f 45 104 46 +f 46 104 47 +f 47 104 105 +f 47 105 48 +f 48 105 106 +f 48 106 49 +f 49 106 50 +f 50 106 107 +f 50 107 51 +f 51 107 108 +f 51 108 52 +f 52 109 53 +f 52 108 109 +f 53 109 54 +f 54 109 110 +f 54 110 55 +f 55 110 111 +f 55 111 56 +f 56 111 112 +f 56 112 57 +f 57 112 58 +f 58 113 59 +f 58 112 113 +f 59 113 60 +f 60 113 61 +f 61 113 62 +f 62 113 114 +f 62 114 115 +f 62 115 63 +f 63 115 116 +f 63 116 117 +f 63 117 64 +f 64 117 118 +f 64 118 119 +f 64 119 65 +f 65 119 66 +f 66 119 120 +f 66 120 69 +f 66 69 67 +f 68 121 122 +f 68 122 79 +f 68 75 123 +f 68 123 124 +f 68 124 125 +f 68 125 126 +f 68 126 127 +f 68 127 128 +f 68 128 129 +f 68 129 130 +f 68 130 131 +f 68 131 132 +f 68 132 133 +f 68 133 134 +f 68 134 135 +f 68 135 136 +f 68 136 137 +f 68 137 138 +f 68 138 139 +f 68 139 140 +f 68 140 141 +f 68 141 142 +f 68 142 143 +f 68 143 144 +f 68 144 145 +f 68 145 146 +f 68 146 147 +f 68 147 148 +f 68 148 149 +f 68 149 150 +f 68 150 151 +f 68 151 152 +f 68 152 153 +f 68 153 154 +f 68 154 155 +f 68 155 156 +f 68 156 157 +f 68 157 158 +f 68 158 159 +f 68 159 160 +f 68 160 161 +f 68 161 162 +f 68 162 163 +f 68 163 164 +f 68 164 165 +f 68 165 166 +f 68 166 121 +f 70 167 74 +f 71 168 169 +f 71 169 72 +f 71 74 168 +f 72 170 171 +f 72 171 73 +f 72 169 170 +f 73 77 76 +f 73 171 172 +f 73 172 77 +f 74 167 168 +f 75 78 123 +f 77 172 173 +f 77 173 78 +f 78 173 124 +f 78 124 123 +f 79 122 80 +f 80 122 174 +f 80 174 175 +f 121 176 177 +f 121 177 178 +f 121 178 174 +f 121 174 122 +f 121 166 176 +f 124 173 125 +f 125 179 126 +f 125 173 179 +f 126 179 127 +f 127 180 128 +f 127 179 180 +f 128 180 129 +f 129 180 181 +f 129 181 130 +f 130 181 131 +f 131 181 182 +f 131 182 132 +f 132 182 133 +f 133 182 134 +f 134 183 135 +f 134 182 183 +f 135 183 136 +f 136 184 137 +f 136 183 184 +f 137 184 138 +f 138 185 139 +f 138 184 185 +f 139 185 140 +f 140 185 186 +f 140 186 141 +f 141 186 187 +f 141 187 142 +f 142 188 143 +f 142 187 188 +f 143 189 144 +f 143 188 189 +f 144 190 145 +f 144 189 190 +f 145 190 146 +f 146 190 147 +f 147 190 191 +f 147 191 192 +f 147 192 148 +f 148 192 149 +f 149 192 193 +f 149 193 150 +f 150 193 151 +f 151 193 194 +f 151 194 152 +f 152 194 153 +f 153 195 154 +f 153 194 195 +f 154 196 155 +f 154 195 196 +f 155 196 197 +f 155 197 156 +f 156 198 157 +f 156 197 198 +f 157 198 158 +f 158 199 159 +f 158 198 199 +f 159 199 160 +f 160 200 161 +f 160 199 200 +f 161 200 162 +f 162 201 163 +f 162 200 201 +f 163 201 164 +f 164 202 165 +f 164 201 202 +f 165 203 166 +f 165 202 203 +f 166 203 204 +f 166 204 205 +f 166 205 176 +f 167 206 207 +f 167 207 169 +f 167 169 168 +f 169 207 208 +f 169 208 170 +f 170 208 209 +f 170 209 210 +f 170 210 171 +f 171 211 172 +f 171 210 212 +f 171 212 211 +f 172 211 173 +f 173 211 179 +f 174 213 175 +f 174 178 214 +f 174 214 215 +f 174 215 213 +f 175 213 216 +f 175 216 217 +f 175 217 218 +f 175 218 219 +f 176 205 177 +f 177 220 215 +f 177 215 214 +f 177 214 178 +f 177 205 220 +f 179 212 221 +f 179 221 222 +f 179 222 180 +f 179 211 212 +f 180 222 223 +f 180 223 181 +f 181 223 224 +f 181 224 182 +f 182 224 225 +f 182 225 183 +f 183 226 184 +f 183 225 226 +f 184 226 227 +f 184 227 185 +f 185 227 228 +f 185 228 186 +f 186 228 229 +f 186 229 187 +f 187 230 188 +f 187 229 230 +f 188 230 231 +f 188 231 189 +f 189 231 232 +f 189 232 233 +f 189 233 234 +f 189 234 190 +f 190 234 233 +f 190 233 191 +f 191 233 235 +f 191 235 236 +f 191 236 192 +f 192 236 237 +f 192 237 193 +f 193 237 238 +f 193 238 194 +f 194 238 239 +f 194 239 195 +f 195 239 240 +f 195 240 196 +f 196 240 241 +f 196 241 197 +f 197 241 242 +f 197 242 198 +f 198 242 243 +f 198 243 199 +f 199 243 244 +f 199 244 200 +f 200 244 245 +f 200 245 201 +f 201 246 247 +f 201 247 202 +f 201 245 246 +f 202 248 249 +f 202 249 203 +f 202 247 248 +f 203 249 250 +f 203 250 204 +f 204 250 251 +f 204 251 252 +f 204 252 220 +f 204 220 205 +f 206 253 254 +f 206 254 255 +f 206 255 207 +f 207 255 208 +f 208 255 256 +f 208 256 209 +f 209 256 257 +f 209 257 258 +f 209 258 210 +f 210 258 259 +f 210 259 222 +f 210 222 260 +f 210 260 212 +f 212 260 221 +f 213 215 216 +f 215 220 217 +f 215 217 216 +f 217 220 261 +f 217 261 218 +f 218 261 262 +f 218 262 219 +f 219 262 263 +f 220 252 261 +f 221 260 222 +f 222 259 223 +f 223 264 224 +f 223 259 265 +f 223 265 264 +f 224 266 225 +f 224 264 267 +f 224 267 266 +f 225 266 268 +f 225 268 269 +f 225 269 270 +f 225 270 226 +f 226 271 272 +f 226 272 227 +f 226 270 273 +f 226 273 271 +f 227 274 275 +f 227 275 276 +f 227 276 277 +f 227 277 278 +f 227 278 279 +f 227 279 228 +f 227 272 280 +f 227 280 281 +f 227 281 274 +f 228 282 283 +f 228 283 284 +f 228 284 229 +f 228 279 282 +f 229 284 285 +f 229 285 286 +f 229 286 287 +f 229 287 230 +f 230 288 231 +f 230 287 289 +f 230 289 288 +f 231 288 290 +f 231 290 291 +f 231 291 232 +f 232 291 292 +f 232 292 293 +f 232 293 233 +f 233 293 235 +f 235 293 294 +f 235 294 295 +f 235 295 296 +f 235 296 236 +f 236 296 297 +f 236 297 298 +f 236 298 237 +f 237 298 299 +f 237 299 300 +f 237 300 301 +f 237 301 238 +f 238 301 302 +f 238 302 303 +f 238 303 239 +f 239 303 304 +f 239 304 305 +f 239 305 240 +f 240 305 306 +f 240 306 307 +f 240 307 241 +f 241 307 308 +f 241 308 309 +f 241 309 310 +f 241 310 242 +f 242 310 311 +f 242 311 312 +f 242 312 243 +f 243 312 313 +f 243 313 314 +f 243 314 315 +f 243 315 244 +f 244 315 316 +f 244 316 317 +f 244 317 245 +f 245 317 318 +f 245 318 319 +f 245 319 246 +f 246 319 247 +f 247 319 320 +f 247 320 248 +f 248 320 249 +f 249 252 251 +f 249 251 250 +f 249 320 252 +f 252 320 321 +f 252 321 261 +f 253 322 323 +f 253 323 254 +f 254 323 255 +f 255 323 256 +f 256 323 324 +f 256 324 257 +f 257 324 325 +f 257 325 326 +f 257 326 258 +f 258 326 267 +f 258 267 264 +f 258 264 265 +f 258 265 259 +f 261 321 262 +f 262 321 327 +f 262 327 328 +f 262 328 263 +f 263 328 329 +f 266 267 326 +f 266 326 268 +f 268 326 330 +f 268 330 269 +f 269 330 270 +f 270 330 273 +f 271 273 331 +f 271 331 272 +f 272 331 280 +f 273 330 331 +f 274 332 275 +f 274 281 332 +f 275 332 276 +f 276 332 277 +f 277 332 278 +f 278 332 279 +f 279 332 333 +f 279 333 282 +f 280 331 281 +f 281 331 332 +f 282 333 283 +f 283 333 284 +f 284 333 285 +f 285 333 334 +f 285 334 286 +f 286 334 287 +f 287 334 289 +f 288 335 290 +f 288 289 336 +f 288 336 335 +f 289 334 336 +f 290 335 291 +f 291 335 337 +f 291 337 292 +f 292 337 293 +f 293 337 338 +f 293 338 339 +f 293 339 294 +f 294 339 340 +f 294 340 341 +f 294 341 295 +f 295 297 296 +f 295 341 342 +f 295 342 297 +f 297 342 343 +f 297 343 344 +f 297 344 298 +f 298 344 299 +f 299 344 300 +f 300 344 345 +f 300 345 301 +f 301 345 302 +f 302 345 303 +f 303 346 304 +f 303 345 346 +f 304 346 347 +f 304 347 305 +f 305 347 306 +f 306 347 348 +f 306 348 307 +f 307 348 308 +f 308 348 309 +f 309 348 349 +f 309 349 310 +f 310 349 311 +f 311 349 350 +f 311 350 312 +f 312 350 313 +f 313 350 314 +f 314 350 318 +f 314 318 315 +f 315 318 316 +f 316 318 317 +f 318 351 352 +f 318 352 319 +f 318 350 351 +f 319 352 353 +f 319 353 320 +f 320 353 321 +f 321 353 327 +f 322 354 355 +f 322 355 323 +f 323 355 324 +f 324 356 325 +f 324 355 356 +f 325 356 357 +f 325 357 330 +f 325 330 326 +f 327 358 329 +f 327 329 328 +f 327 353 359 +f 327 359 358 +f 329 358 360 +f 330 357 331 +f 331 357 361 +f 331 361 332 +f 332 361 362 +f 332 362 333 +f 333 362 363 +f 333 363 334 +f 334 363 364 +f 334 364 336 +f 335 336 365 +f 335 365 366 +f 335 366 337 +f 336 364 365 +f 337 366 338 +f 338 366 367 +f 338 367 368 +f 338 368 369 +f 338 369 340 +f 338 340 339 +f 340 369 341 +f 341 369 370 +f 341 370 371 +f 341 371 342 +f 342 371 372 +f 342 372 343 +f 343 373 344 +f 343 372 374 +f 343 374 373 +f 344 373 345 +f 345 373 375 +f 345 375 346 +f 346 375 376 +f 346 376 347 +f 347 376 377 +f 347 377 348 +f 348 377 378 +f 348 378 349 +f 349 378 379 +f 349 379 350 +f 350 379 351 +f 351 379 380 +f 351 380 381 +f 351 381 352 +f 352 381 359 +f 352 359 353 +f 354 382 383 +f 354 383 355 +f 355 383 356 +f 356 384 357 +f 356 383 384 +f 357 384 361 +f 358 359 385 +f 358 385 360 +f 359 381 385 +f 360 385 386 +f 360 386 387 +f 361 384 388 +f 361 388 362 +f 362 388 389 +f 362 389 363 +f 363 389 390 +f 363 390 364 +f 364 390 391 +f 364 391 365 +f 365 391 392 +f 365 392 366 +f 366 392 367 +f 367 392 393 +f 367 393 368 +f 368 393 394 +f 368 394 395 +f 368 395 369 +f 369 395 370 +f 370 395 396 +f 370 396 371 +f 371 396 372 +f 372 396 374 +f 373 374 397 +f 373 397 375 +f 374 396 398 +f 374 398 397 +f 375 397 399 +f 375 399 376 +f 376 399 400 +f 376 400 377 +f 377 400 401 +f 377 401 378 +f 378 401 402 +f 378 402 379 +f 379 402 380 +f 380 402 403 +f 380 403 404 +f 380 404 381 +f 381 404 385 +f 382 405 406 +f 382 406 383 +f 383 406 384 +f 384 406 388 +f 385 404 386 +f 386 404 387 +f 387 404 407 +f 388 406 408 +f 388 408 389 +f 389 408 409 +f 389 409 390 +f 390 409 410 +f 390 410 411 +f 390 411 391 +f 391 411 393 +f 391 393 392 +f 397 398 412 +f 397 412 413 +f 397 413 399 +f 398 414 412 +f 399 413 415 +f 399 415 400 +f 400 415 416 +f 400 416 401 +f 401 416 417 +f 401 417 402 +f 402 417 403 +f 403 417 418 +f 403 418 407 +f 403 407 404 +f 405 419 406 +f 406 419 408 +f 408 419 420 +f 408 420 409 +f 409 420 421 +f 409 421 410 +f 410 421 411 +f 412 414 422 +f 412 422 413 +f 413 422 423 +f 413 423 415 +f 415 423 424 +f 415 424 416 +f 416 424 425 +f 416 425 426 +f 416 426 417 +f 417 426 418 + +o geometry_1 +v 0.04808877 0.03350005 -0.00000669 0.54117647 0.42352941 0.64313725 +v 0.04807935 0.01857636 -0.00000669 0.54117647 0.42352941 0.64313725 +v 0.04807935 0.01857636 -0.00014966 0.54117647 0.42352941 0.64313725 +v 0.04805110 0.01857636 -0.00174141 0.54117647 0.42352941 0.64313725 +v 0.04789106 0.03350005 -0.00432443 0.54117647 0.42352941 0.64313725 +v 0.04743916 0.07528973 0.00230946 0.54117647 0.42352941 0.64313725 +v 0.04742034 0.03350005 0.00793301 0.54117647 0.42352941 0.64313725 +v 0.04765570 0.01857636 0.00485435 0.54117647 0.42352941 0.64313725 +v 0.04776867 0.01857636 -0.00502976 0.54117647 0.42352941 0.64313725 +v 0.04761804 0.01857636 -0.00671682 0.54117647 0.42352941 0.64313725 +v 0.04730737 0.03350005 -0.00861358 0.54117647 0.42352941 0.64313725 +v 0.04682723 0.07528973 -0.00792732 0.54117647 0.42352941 0.64313725 +v -0.04741140 0.07529528 0.00282415 0.54117647 0.42352941 0.64313725 +v 0.04582929 0.07528973 0.01246044 0.54117647 0.42352941 0.64313725 +v 0.04522677 0.03350005 0.01632068 0.54117647 0.42352941 0.64313725 +v 0.04732619 0.01857636 0.00848583 0.54117647 0.42352941 0.64313725 +v 0.04738268 0.01857636 0.00792347 0.54117647 0.42352941 0.64313725 +v 0.04736385 0.01857636 -0.00807982 0.54117647 0.42352941 0.64313725 +v 0.04673308 0.01857636 -0.01138723 0.54117647 0.42352941 0.64313725 +v 0.04632826 0.03350005 -0.01286460 0.54117647 0.42352941 0.64313725 +v 0.04403114 0.07528973 -0.01781142 0.54117647 0.42352941 0.64313725 +v -0.04789153 0.03350005 0.00433012 0.54117647 0.42352941 0.64313725 +v -0.04730784 0.03350005 0.00861927 0.54117647 0.42352941 0.64313725 +v -0.04569797 0.07528973 0.01294655 0.54117647 0.42352941 0.64313725 +v -0.04184746 0.07528973 0.02246846 0.54117647 0.42352941 0.64313725 +v -0.03602933 0.07528973 0.03094191 0.54117647 0.42352941 0.64313725 +v -0.02853543 0.07528973 0.03796659 0.54117647 0.42352941 0.64313725 +v -0.01971409 0.07528973 0.04320888 0.54117647 0.42352941 0.64313725 +v -0.00996072 0.07528973 0.04644004 0.54117647 0.42352941 0.64313725 +v 0.00024454 0.07528973 0.04749803 0.54117647 0.42352941 0.64313725 +v 0.01044980 0.07528973 0.04632566 0.54117647 0.42352941 0.64313725 +v 0.02016551 0.07528973 0.04299919 0.54117647 0.42352941 0.64313725 +v 0.02893978 0.07528973 0.03765205 0.54117647 0.42352941 0.64313725 +v 0.03635836 0.07528973 0.03055112 0.54117647 0.42352941 0.64313725 +v 0.04208235 0.07528973 0.02202048 0.54117647 0.42352941 0.64313725 +v 0.03916387 0.07528973 -0.02685676 0.54117647 0.42352941 0.64313725 +v 0.03247961 0.07528973 -0.03465349 0.54117647 0.42352941 0.64313725 +v 0.02427021 0.07528973 -0.04082986 0.54117647 0.42352941 0.64313725 +v 0.01492166 0.07528973 -0.04509042 0.54117647 0.42352941 0.64313725 +v 0.00487645 0.07528973 -0.04724452 0.54117647 0.42352941 0.64313725 +v -0.00538530 0.07528973 -0.04718734 0.54117647 0.42352941 0.64313725 +v -0.01540227 0.07528973 -0.04492838 0.54117647 0.42352941 0.64313725 +v -0.02470375 0.07528973 -0.04056298 0.54117647 0.42352941 0.64313725 +v -0.03284724 0.07528973 -0.03430082 0.54117647 0.42352941 0.64313725 +v -0.03945619 0.07528973 -0.02643738 0.54117647 0.42352941 0.64313725 +v -0.04421048 0.07528973 -0.01734438 0.54117647 0.42352941 0.64313725 +v -0.04691243 0.07528973 -0.00743168 0.54117647 0.42352941 0.64313725 +v -0.04737374 0.06564041 -0.00339988 0.54117647 0.42352941 0.64313725 +v -0.04748671 0.06527398 -0.00075967 0.54117647 0.42352941 0.64313725 +v -0.04807983 0.03350005 -0.00000669 0.54117647 0.42352941 0.64313725 +v 0.04155514 0.03350005 0.02418412 0.54117647 0.42352941 0.64313725 +v 0.04505731 0.01857636 0.01678772 0.54117647 0.42352941 0.64313725 +v 0.04682723 0.01857636 0.01039212 0.54117647 0.42352941 0.64313725 +v 0.04596110 0.01857636 -0.01406557 0.54117647 0.42352941 0.64313725 +v 0.04547154 0.01857636 -0.01570497 0.54117647 0.42352941 0.64313725 +v 0.04498200 0.03350005 -0.01699172 0.54117647 0.42352941 0.64313725 +v 0.04326857 0.03350005 -0.02097586 0.54117647 0.42352941 0.64313725 +v -0.04773148 0.01857636 0.00468278 0.54117647 0.42352941 0.64313725 +v -0.04744906 0.01857636 0.00780910 0.54117647 0.42352941 0.64313725 +v -0.04808923 0.01857636 -0.00000669 0.54117647 0.42352941 0.64313725 +v -0.04632873 0.03350005 0.01287982 0.54117647 0.42352941 0.64313725 +v -0.04498246 0.03350005 0.01699741 0.54117647 0.42352941 0.64313725 +v -0.04326904 0.03350005 0.02098156 0.54117647 0.42352941 0.64313725 +v -0.04118845 0.03350005 0.02480366 0.54117647 0.42352941 0.64313725 +v -0.03876893 0.03350005 0.02843514 0.54117647 0.42352941 0.64313725 +v -0.03605757 0.03350005 0.03179974 0.54117647 0.42352941 0.64313725 +v -0.03306378 0.03350005 0.03490699 0.54117647 0.42352941 0.64313725 +v -0.02977813 0.03350005 0.03774736 0.54117647 0.42352941 0.64313725 +v -0.02624772 0.03350005 0.04028273 0.54117647 0.42352941 0.64313725 +v -0.02253842 0.03350005 0.04247496 0.54117647 0.42352941 0.64313725 +v -0.01865026 0.03350005 0.04431453 0.54117647 0.42352941 0.64313725 +v -0.01458322 0.03350005 0.04582050 0.54117647 0.42352941 0.64313725 +v -0.01041262 0.03350005 0.04694521 0.54117647 0.42352941 0.64313725 +v -0.00618553 0.03350005 0.04768866 0.54117647 0.42352941 0.64313725 +v -0.00000024 0.03350005 0.04807945 0.54117647 0.42352941 0.64313725 +v 0.00822799 0.03350005 0.04737412 0.54117647 0.42352941 0.64313725 +v 0.01623969 0.03350005 0.04525814 0.54117647 0.42352941 0.64313725 +v 0.01665392 0.06364169 0.04447656 0.54117647 0.42352941 0.64313725 +v 0.02413841 0.03350005 0.04158853 0.54117647 0.42352941 0.64313725 +v 0.02373359 0.06527398 0.04114056 0.54117647 0.42352941 0.64313725 +v 0.02578594 0.06426907 0.03988241 0.54117647 0.42352941 0.64313725 +v 0.03123690 0.03350005 0.03655593 0.54117647 0.42352941 0.64313725 +v 0.03656548 0.03350005 0.03122785 0.54117647 0.42352941 0.64313725 +v 0.04118797 0.03350005 -0.02480750 0.54117647 0.42352941 0.64313725 +v 0.03913562 0.03350005 -0.02793382 0.54117647 0.42352941 0.64313725 +v 0.03808120 0.01857636 -0.02971620 0.54117647 0.42352941 0.64313725 +v 0.03685733 0.03350005 -0.03087903 0.54117647 0.42352941 0.64313725 +v 0.03601003 0.01857636 -0.03233734 0.54117647 0.42352941 0.64313725 +v 0.03264907 0.01857636 -0.03604507 0.54117647 0.42352941 0.64313725 +v 0.03068145 0.01857636 -0.03790371 0.54117647 0.42352941 0.64313725 +v 0.02901509 0.01857636 -0.03940968 0.54117647 0.42352941 0.64313725 +v 0.02797950 0.01857636 -0.04021032 0.54117647 0.42352941 0.64313725 +v 0.02515517 0.01857636 -0.04234536 0.54117647 0.42352941 0.64313725 +v 0.02246264 0.01857636 -0.04428977 0.54117647 0.42352941 0.64313725 +v 0.02109754 0.01857636 -0.04526198 0.54117647 0.42352941 0.64313725 +v 0.01441328 0.01857636 -0.04927472 0.54117647 0.42352941 0.64313725 +v 0.01275634 0.01925925 -0.04927472 0.54117647 0.42352941 0.64313725 +v 0.00862340 0.02091374 -0.04927472 0.54117647 0.42352941 0.64313725 +v 0.00555429 0.02175764 -0.04927472 0.54117647 0.42352941 0.64313725 +v 0.00429275 0.02210186 -0.04927472 0.54117647 0.42352941 0.64313725 +v -0.00015087 0.02249605 -0.04927472 0.54117647 0.42352941 0.64313725 +v -0.00036740 0.02247939 -0.04927472 0.54117647 0.42352941 0.64313725 +v -0.00459449 0.02205189 -0.04927472 0.54117647 0.42352941 0.64313725 +v -0.00702341 0.02135790 -0.04927472 0.54117647 0.42352941 0.64313725 +v -0.00891572 0.02081380 -0.04927472 0.54117647 0.42352941 0.64313725 +v -0.01305808 0.01917597 -0.04927472 0.54117647 0.42352941 0.64313725 +v -0.01448907 0.01857636 -0.04927472 0.54117647 0.42352941 0.64313725 +v -0.02138986 0.01857636 -0.04509995 0.54117647 0.42352941 0.64313725 +v -0.02545690 0.01857636 -0.04212614 0.54117647 0.42352941 0.64313725 +v -0.02926975 0.01857636 -0.03920951 0.54117647 0.42352941 0.64313725 +v -0.03288490 0.01857636 -0.03582585 0.54117647 0.42352941 0.64313725 +v -0.03621762 0.01857636 -0.03209906 0.54117647 0.42352941 0.64313725 +v -0.03632118 0.03350005 -0.03150811 0.54117647 0.42352941 0.64313725 +v -0.03900429 0.03350005 -0.02811491 0.54117647 0.42352941 0.64313725 +v -0.03922082 0.01857636 -0.02816257 0.54117647 0.42352941 0.64313725 +v -0.04130142 0.03350005 -0.02461688 0.54117647 0.42352941 0.64313725 +v -0.04329728 0.03350005 -0.02090914 0.54117647 0.42352941 0.64313725 +v -0.04500130 0.03350005 -0.01693453 0.54117647 0.42352941 0.64313725 +v -0.04633815 0.03350005 -0.01283601 0.54117647 0.42352941 0.64313725 +v -0.04729843 0.03350005 -0.00865170 0.54117647 0.42352941 0.64313725 +v -0.04788211 0.03350005 -0.00437209 0.54117647 0.42352941 0.64313725 +v 0.04132919 0.01857636 0.02456538 0.54117647 0.42352941 0.64313725 +v 0.04220473 0.01857636 0.02276394 0.54117647 0.42352941 0.64313725 +v 0.04400290 0.01857636 0.01903714 0.54117647 0.42352941 0.64313725 +v 0.04393699 0.01857636 -0.01962240 0.54117647 0.42352941 0.64313725 +v 0.04217649 0.01857636 -0.02325388 0.54117647 0.42352941 0.64313725 +v 0.04168694 0.01857636 -0.02416890 0.54117647 0.42352941 0.64313725 +v -0.04691243 0.01857636 0.00997274 0.54117647 0.42352941 0.64313725 +v -0.04785388 0.01937584 -0.00445787 0.54117647 0.42352941 0.64313725 +v -0.04798567 0.01857636 -0.00194157 0.54117647 0.42352941 0.64313725 +v -0.04563207 0.01857636 0.01510065 0.54117647 0.42352941 0.64313725 +v -0.04525549 0.01857636 0.01622536 0.54117647 0.42352941 0.64313725 +v -0.04273242 0.01857636 0.02187751 0.54117647 0.42352941 0.64313725 +v -0.04161210 0.01857636 0.02408880 0.54117647 0.42352941 0.64313725 +v -0.04492599 0.01857636 0.01696881 0.54117647 0.42352941 0.64313725 +v -0.04404103 0.01857636 0.01896089 0.54117647 0.42352941 0.64313725 +v -0.03794988 0.01857636 0.02946454 0.54117647 0.42352941 0.64313725 +v -0.03774276 0.01857636 0.02976001 0.54117647 0.42352941 0.64313725 +v -0.03663185 0.01857636 0.03113254 0.54117647 0.42352941 0.64313725 +v -0.03601991 0.01857636 0.03176162 0.54117647 0.42352941 0.64313725 +v -0.03476779 0.01857636 0.03304836 0.54117647 0.42352941 0.64313725 +v -0.03195287 0.01857636 0.03590779 0.54117647 0.42352941 0.64313725 +v -0.03047480 0.01857636 0.03718501 0.54117647 0.42352941 0.64313725 +v -0.03034300 0.01857636 0.03728032 0.54117647 0.42352941 0.64313725 +v -0.02516506 0.01857636 0.04094993 0.54117647 0.42352941 0.64313725 +v -0.02338572 0.01857636 0.04200792 0.54117647 0.42352941 0.64313725 +v -0.02813061 0.01857636 0.03885301 0.54117647 0.42352941 0.64313725 +v -0.01861260 0.01857636 0.04425734 0.54117647 0.42352941 0.64313725 +v -0.01557173 0.01857636 0.04547737 0.54117647 0.42352941 0.64313725 +v -0.01456439 0.01857636 0.04575378 0.54117647 0.42352941 0.64313725 +v -0.01223902 0.01857636 0.04638285 0.54117647 0.42352941 0.64313725 +v -0.00726819 0.01857636 0.04751710 0.54117647 0.42352941 0.64313725 +v -0.00993248 0.01857636 0.04700240 0.54117647 0.42352941 0.64313725 +v -0.00543237 0.01857636 0.04767913 0.54117647 0.42352941 0.64313725 +v -0.00000024 0.01857636 0.04807945 0.54117647 0.42352941 0.64313725 +v 0.00006566 0.01857636 0.04807945 0.54117647 0.42352941 0.64313725 +v 0.00739011 0.01857636 0.04750756 0.54117647 0.42352941 0.64313725 +v 0.00821858 0.01857636 0.04731694 0.54117647 0.42352941 0.64313725 +v 0.00895290 0.01857636 0.04714537 0.54117647 0.42352941 0.64313725 +v 0.01552419 0.01857636 0.04549643 0.54117647 0.42352941 0.64313725 +v 0.01622086 0.01857636 0.04521048 0.54117647 0.42352941 0.64313725 +v 0.01956299 0.01857636 0.04378077 0.54117647 0.42352941 0.64313725 +v 0.02364886 0.01857636 0.04182682 0.54117647 0.42352941 0.64313725 +v 0.02410075 0.01857636 0.04153135 0.54117647 0.42352941 0.64313725 +v 0.02575769 0.01857636 0.04044476 0.54117647 0.42352941 0.64313725 +v 0.02726400 0.01857636 0.03945349 0.54117647 0.42352941 0.64313725 +v 0.03108627 0.01857636 0.03659406 0.54117647 0.42352941 0.64313725 +v 0.03118983 0.01857636 0.03650828 0.54117647 0.42352941 0.64313725 +v 0.03406124 0.01857636 0.03377275 0.54117647 0.42352941 0.64313725 +v 0.03628304 0.01857636 0.03155193 0.54117647 0.42352941 0.64313725 +v 0.03952162 0.01857636 0.02711028 0.54117647 0.42352941 0.64313725 +v 0.04022770 0.01857636 -0.02659941 0.54117647 0.42352941 0.64313725 +v 0.03903206 0.01857636 -0.02842945 0.54117647 0.42352941 0.64313725 +v -0.04184746 0.01857636 -0.02389249 0.54117647 0.42352941 0.64313725 +v -0.04404103 0.01857636 -0.01939364 0.54117647 0.42352941 0.64313725 +v -0.04568855 0.01857636 -0.01505684 0.54117647 0.42352941 0.64313725 +v -0.04412575 0.01857636 -0.01917442 0.54117647 0.42352941 0.64313725 +v -0.04697833 0.01857636 -0.01031971 0.54117647 0.42352941 0.64313725 +v -0.04779739 0.01857636 -0.00521085 0.54117647 0.42352941 0.64313725 +v -0.04782564 0.01954240 -0.00498210 0.54117647 0.42352941 0.64313725 +v -0.04783504 0.01857636 -0.00462944 0.54117647 0.42352941 0.64313725 +f 427 428 429 +f 427 429 430 +f 427 430 431 +f 427 431 432 +f 427 432 433 +f 427 433 428 +f 428 433 434 +f 428 434 443 +f 428 443 442 +f 428 442 479 +f 428 479 478 +f 428 478 550 +f 428 550 549 +f 428 549 548 +f 428 548 597 +f 428 597 596 +f 428 596 595 +f 428 595 594 +f 428 594 593 +f 428 593 592 +f 428 592 591 +f 428 591 590 +f 428 590 589 +f 428 589 588 +f 428 588 587 +f 428 587 586 +f 428 586 585 +f 428 585 584 +f 428 584 583 +f 428 583 582 +f 428 582 581 +f 428 581 580 +f 428 580 578 +f 428 578 579 +f 428 579 577 +f 428 577 576 +f 428 576 575 +f 428 575 574 +f 428 574 572 +f 428 572 571 +f 428 571 573 +f 428 573 570 +f 428 570 569 +f 428 569 568 +f 428 568 567 +f 428 567 566 +f 428 566 565 +f 428 565 564 +f 428 564 563 +f 428 563 560 +f 428 560 559 +f 428 559 562 +f 428 562 561 +f 428 561 558 +f 428 558 557 +f 428 557 554 +f 428 554 485 +f 428 485 484 +f 428 484 486 +f 428 486 556 +f 428 556 607 +f 428 607 605 +f 428 605 604 +f 428 604 602 +f 428 602 603 +f 428 603 601 +f 428 601 600 +f 428 600 541 +f 428 541 538 +f 428 538 537 +f 428 537 536 +f 428 536 535 +f 428 535 534 +f 428 534 533 +f 428 533 522 +f 428 522 521 +f 428 521 520 +f 428 520 519 +f 428 519 518 +f 428 518 517 +f 428 517 516 +f 428 516 515 +f 428 515 514 +f 428 514 512 +f 428 512 599 +f 428 599 598 +f 428 598 553 +f 428 553 552 +f 428 552 551 +f 428 551 481 +f 428 481 480 +f 428 480 445 +f 428 445 444 +f 428 444 436 +f 428 436 435 +f 428 435 430 +f 428 430 429 +f 430 435 431 +f 431 435 436 +f 431 436 437 +f 431 437 438 +f 431 438 432 +f 432 439 440 +f 432 440 433 +f 432 438 439 +f 433 440 441 +f 433 441 442 +f 433 442 443 +f 433 443 434 +f 436 444 437 +f 437 444 445 +f 437 445 446 +f 437 446 438 +f 438 446 447 +f 438 447 439 +f 439 448 449 +f 439 449 450 +f 439 450 451 +f 439 451 452 +f 439 452 453 +f 439 453 454 +f 439 454 455 +f 439 455 456 +f 439 456 457 +f 439 457 458 +f 439 458 459 +f 439 459 460 +f 439 460 461 +f 439 461 440 +f 439 447 462 +f 439 462 463 +f 439 463 464 +f 439 464 465 +f 439 465 466 +f 439 466 467 +f 439 467 468 +f 439 468 469 +f 439 469 470 +f 439 470 471 +f 439 471 472 +f 439 472 473 +f 439 473 474 +f 439 474 475 +f 439 475 476 +f 439 476 448 +f 440 461 441 +f 441 461 477 +f 441 477 478 +f 441 478 479 +f 441 479 442 +f 445 480 446 +f 446 480 481 +f 446 481 482 +f 446 482 447 +f 447 482 483 +f 447 483 462 +f 448 484 485 +f 448 485 449 +f 448 476 486 +f 448 486 484 +f 449 487 450 +f 449 485 487 +f 450 487 488 +f 450 488 451 +f 451 488 489 +f 451 489 490 +f 451 490 491 +f 451 491 452 +f 452 492 493 +f 452 493 453 +f 452 491 492 +f 453 493 494 +f 453 494 495 +f 453 495 454 +f 454 496 497 +f 454 497 498 +f 454 498 455 +f 454 495 496 +f 455 498 499 +f 455 499 500 +f 455 500 456 +f 456 500 501 +f 456 501 502 +f 456 502 457 +f 457 502 503 +f 457 503 504 +f 457 504 458 +f 458 504 503 +f 458 503 505 +f 458 505 506 +f 458 506 459 +f 459 506 507 +f 459 507 505 +f 459 505 508 +f 459 508 460 +f 460 508 509 +f 460 509 477 +f 460 477 461 +f 462 510 511 +f 462 511 512 +f 462 512 513 +f 462 513 463 +f 462 483 510 +f 463 513 514 +f 463 514 515 +f 463 515 516 +f 463 516 517 +f 463 517 518 +f 463 518 519 +f 463 519 464 +f 464 519 520 +f 464 520 521 +f 464 521 522 +f 464 522 465 +f 465 522 466 +f 466 522 523 +f 466 523 524 +f 466 524 525 +f 466 525 526 +f 466 526 527 +f 466 527 528 +f 466 528 529 +f 466 529 467 +f 467 529 530 +f 467 530 531 +f 467 531 532 +f 467 532 533 +f 467 533 468 +f 468 533 469 +f 469 533 534 +f 469 534 535 +f 469 535 536 +f 469 536 470 +f 470 536 537 +f 470 537 538 +f 470 538 539 +f 470 539 471 +f 471 539 538 +f 471 538 540 +f 471 540 541 +f 471 541 542 +f 471 542 543 +f 471 543 472 +f 472 543 544 +f 472 544 545 +f 472 545 473 +f 473 546 547 +f 473 547 474 +f 473 545 546 +f 474 547 476 +f 474 476 475 +f 476 547 486 +f 477 548 549 +f 477 549 550 +f 477 550 478 +f 477 509 548 +f 481 551 482 +f 482 551 483 +f 483 552 553 +f 483 553 510 +f 483 551 552 +f 485 554 487 +f 486 547 555 +f 486 555 556 +f 487 554 557 +f 487 557 488 +f 488 557 558 +f 488 558 489 +f 489 559 560 +f 489 560 490 +f 489 558 561 +f 489 561 562 +f 489 562 559 +f 490 560 491 +f 491 560 563 +f 491 563 564 +f 491 564 492 +f 492 564 565 +f 492 565 493 +f 493 565 566 +f 493 566 567 +f 493 567 568 +f 493 568 494 +f 494 568 569 +f 494 569 570 +f 494 570 495 +f 495 571 572 +f 495 572 496 +f 495 570 573 +f 495 573 571 +f 496 572 497 +f 497 574 575 +f 497 575 498 +f 497 572 574 +f 498 575 576 +f 498 576 577 +f 498 577 499 +f 499 578 500 +f 499 577 579 +f 499 579 578 +f 500 578 580 +f 500 580 581 +f 500 581 501 +f 501 581 582 +f 501 582 583 +f 501 583 502 +f 502 583 584 +f 502 584 585 +f 502 585 586 +f 502 586 503 +f 503 587 588 +f 503 588 505 +f 503 586 587 +f 505 589 590 +f 505 590 591 +f 505 591 592 +f 505 592 508 +f 505 507 506 +f 505 588 589 +f 508 593 594 +f 508 594 595 +f 508 595 596 +f 508 596 509 +f 508 592 593 +f 509 596 597 +f 509 597 548 +f 510 598 599 +f 510 599 511 +f 510 553 598 +f 511 599 512 +f 512 514 513 +f 522 533 532 +f 522 532 531 +f 522 531 530 +f 522 530 529 +f 522 529 528 +f 522 528 527 +f 522 527 526 +f 522 526 525 +f 522 525 524 +f 522 524 523 +f 538 541 540 +f 541 600 542 +f 542 600 543 +f 543 600 601 +f 543 601 544 +f 544 602 545 +f 544 601 603 +f 544 603 602 +f 545 602 604 +f 545 604 546 +f 546 605 547 +f 546 604 605 +f 547 605 606 +f 547 606 555 +f 555 606 607 +f 555 607 556 +f 605 607 606 + +o geometry_2 +v 0.04836000 -0.01667864 -0.00796543 0.43529412 0.89019608 0.96078431 +v 0.04808505 -0.02312073 -0.00900436 0.43529412 0.89019608 0.96078431 +v 0.04830312 -0.01970848 -0.01306476 0.43529412 0.89019608 0.96078431 +v 0.04808505 0.01856901 -0.00014965 0.43529412 0.89019608 0.96078431 +v 0.04808505 0.01856901 -0.00000668 0.43529412 0.89019608 0.96078431 +v 0.04832208 -0.01209711 -0.00337127 0.43529412 0.89019608 0.96078431 +v 0.04812298 -0.01978202 -0.00374300 0.43529412 0.89019608 0.96078431 +v 0.04744983 -0.02486362 -0.00207500 0.43529412 0.89019608 0.96078431 +v 0.04741191 -0.02648150 -0.00485818 0.43529412 0.89019608 0.96078431 +v 0.04732658 -0.02769490 -0.00776527 0.43529412 0.89019608 0.96078431 +v 0.04788595 -0.02490039 -0.01477088 0.43529412 0.89019608 0.96078431 +v 0.04814194 -0.02121604 -0.01863112 0.43529412 0.89019608 0.96078431 +v 0.04804713 0.01856901 -0.00174140 0.43529412 0.89019608 0.96078431 +v 0.04729813 -0.01168528 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04732658 0.01856901 0.00848584 0.43529412 0.89019608 0.96078431 +v 0.04803765 0.00997955 0.00230946 0.43529412 0.89019608 0.96078431 +v 0.04817038 -0.00612567 0.00064146 0.43529412 0.89019608 0.96078431 +v 0.04799972 -0.01486956 0.00096553 0.43529412 0.89019608 0.96078431 +v 0.04743087 -0.02284128 0.00055568 0.43529412 0.89019608 0.96078431 +v 0.04626470 -0.02975402 -0.00064528 0.43529412 0.89019608 0.96078431 +v 0.04630263 -0.02800377 0.00220462 0.43529412 0.89019608 0.96078431 +v 0.04616989 -0.03109980 -0.00364769 0.43529412 0.89019608 0.96078431 +v 0.04718436 -0.02851855 -0.01081533 0.43529412 0.89019608 0.96078431 +v 0.04600872 -0.03204111 -0.00679306 0.43529412 0.89019608 0.96078431 +v 0.04757308 -0.02526809 -0.02098539 0.43529412 0.89019608 0.96078431 +v 0.04790491 -0.02134842 -0.02462640 0.43529412 0.89019608 0.96078431 +v 0.04803765 0.01856901 -0.00194156 0.43529412 0.89019608 0.96078431 +v 0.04719384 -0.00813331 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04689045 -0.01533286 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04762049 -0.02037769 -0.03102200 0.43529412 0.89019608 0.96078431 +v 0.04692837 0.01856901 0.01002040 0.43529412 0.89019608 0.96078431 +v 0.04671979 0.00652318 0.01133574 0.43529412 0.89019608 0.96078431 +v 0.04730761 0.01523765 0.00860975 0.43529412 0.89019608 0.96078431 +v 0.04759204 0.00823666 0.00683690 0.43529412 0.89019608 0.96078431 +v 0.04792388 0.00086061 0.00405372 0.43529412 0.89019608 0.96078431 +v 0.04770582 -0.00854513 0.00507358 0.43529412 0.89019608 0.96078431 +v 0.04722229 -0.01759788 0.00536906 0.43529412 0.89019608 0.96078431 +v 0.04626470 -0.02582699 0.00490202 0.43529412 0.89019608 0.96078431 +v 0.04460553 -0.03290888 0.00356762 0.43529412 0.89019608 0.96078431 +v 0.04450124 -0.03437232 0.00047943 0.43529412 0.89019608 0.96078431 +v 0.04463397 -0.03101890 0.00649377 0.43529412 0.89019608 0.96078431 +v 0.04433058 -0.03542394 -0.00276126 0.43529412 0.89019608 0.96078431 +v 0.04679564 -0.02910687 -0.01726812 0.43529412 0.89019608 0.96078431 +v 0.04379016 -0.03640202 -0.00971922 0.43529412 0.89019608 0.96078431 +v 0.04553467 -0.03282799 -0.01349367 0.43529412 0.89019608 0.96078431 +v 0.04717488 -0.02448121 -0.02763833 0.43529412 0.89019608 0.96078431 +v 0.04762049 0.01856901 -0.00671681 0.43529412 0.89019608 0.96078431 +v 0.04657758 -0.00472106 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04596131 -0.01901720 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04506061 0.01856901 0.01678773 0.43529412 0.89019608 0.96078431 +v 0.04616041 -0.00322085 0.01298468 0.43529412 0.89019608 0.96078431 +v 0.04726021 -0.00119850 0.00853350 0.43529412 0.89019608 0.96078431 +v 0.04540193 0.00483912 0.01575833 0.43529412 0.89019608 0.96078431 +v 0.04678616 -0.01092047 0.00952477 0.43529412 0.89019608 0.96078431 +v 0.04597079 -0.02025267 0.00978212 0.43529412 0.89019608 0.96078431 +v 0.04444435 -0.02596672 0.01181232 0.43529412 0.89019608 0.96078431 +v 0.04458656 -0.02870240 0.00924836 0.43529412 0.89019608 0.96078431 +v 0.04241542 -0.03590930 0.00776145 0.43529412 0.89019608 0.96078431 +v 0.04230165 -0.03748305 0.00458748 0.43529412 0.89019608 0.96078431 +v 0.04211203 -0.03864499 0.00123241 0.43529412 0.89019608 0.96078431 +v 0.04244386 -0.03389431 0.01075433 0.43529412 0.89019608 0.96078431 +v 0.04152420 -0.03979220 -0.00596383 0.43529412 0.89019608 0.96078431 +v 0.04490892 -0.03237939 -0.02071851 0.43529412 0.89019608 0.96078431 +v 0.04627418 -0.02848913 -0.02419748 0.43529412 0.89019608 0.96078431 +v 0.04072780 -0.03962306 -0.01379868 0.43529412 0.89019608 0.96078431 +v 0.04306961 -0.03610051 -0.01723953 0.43529412 0.89019608 0.96078431 +v 0.04672927 -0.02286334 -0.03476785 0.43529412 0.89019608 0.96078431 +v 0.04736450 0.01856901 -0.00807981 0.43529412 0.89019608 0.96078431 +v 0.04629315 -0.00369150 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04452968 -0.02274567 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04569584 -0.02701834 -0.03162248 0.43529412 0.89019608 0.96078431 +v 0.04400823 0.01856901 0.01903715 0.43529412 0.89019608 0.96078431 +v 0.04365743 0.00320653 0.02007608 0.43529412 0.89019608 0.96078431 +v 0.04498477 0.01259022 0.01696882 0.43529412 0.89019608 0.96078431 +v 0.04460553 -0.00519172 0.01738821 0.43529412 0.89019608 0.96078431 +v 0.04540193 -0.01324433 0.01395689 0.43529412 0.89019608 0.96078431 +v 0.04422629 -0.02282657 0.01418564 0.43529412 0.89019608 0.96078431 +v 0.04237749 -0.03144543 0.01353751 0.43529412 0.89019608 0.96078431 +v 0.04221632 -0.02856267 0.01613006 0.43529412 0.89019608 0.96078431 +v 0.03966593 -0.03871852 0.01185044 0.43529412 0.89019608 0.96078431 +v 0.03955216 -0.04039523 0.00860022 0.43529412 0.89019608 0.96078431 +v 0.03935306 -0.04165276 0.00514984 0.43529412 0.89019608 0.96078431 +v 0.03907811 -0.04249112 0.00150882 0.43529412 0.89019608 0.96078431 +v 0.03968489 -0.03659322 0.01490050 0.43529412 0.89019608 0.96078431 +v 0.03873679 -0.04295442 -0.00230375 0.43529412 0.89019608 0.96078431 +v 0.03789298 -0.04290294 -0.01045314 0.43529412 0.89019608 0.96078431 +v 0.04225424 -0.03485768 -0.02533173 0.43529412 0.89019608 0.96078431 +v 0.04420732 -0.03102626 -0.02846757 0.43529412 0.89019608 0.96078431 +v 0.03692592 -0.04183661 -0.01925066 0.43529412 0.89019608 0.96078431 +v 0.03982711 -0.03847584 -0.02224354 0.43529412 0.89019608 0.96078431 +v 0.04708007 0.01856901 -0.00956672 0.43529412 0.89019608 0.96078431 +v 0.04548726 -0.00150001 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04672927 0.01856901 -0.01138722 0.43529412 0.89019608 0.96078431 +v 0.04264296 -0.02645944 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04152420 0.01856901 0.02417460 0.43529412 0.89019608 0.96078431 +v 0.04133458 0.01856901 0.02456539 0.43529412 0.89019608 0.96078431 +v 0.04146732 0.00164014 0.02425085 0.43529412 0.89019608 0.96078431 +v 0.04258608 -0.00708904 0.02167736 0.43529412 0.89019608 0.96078431 +v 0.04354366 -0.01547994 0.01833182 0.43529412 0.89019608 0.96078431 +v 0.04196033 -0.02527544 0.01850339 0.43529412 0.89019608 0.96078431 +v 0.03960904 -0.03401933 0.01772181 0.43529412 0.89019608 0.96078431 +v 0.03943838 -0.03100420 0.02032390 0.43529412 0.89019608 0.96078431 +v 0.03623381 -0.04307944 0.01244139 0.43529412 0.89019608 0.96078431 +v 0.03634758 -0.04130713 0.01576787 0.43529412 0.89019608 0.96078431 +v 0.03603471 -0.04441051 0.00889569 0.43529412 0.89019608 0.96078431 +v 0.03575028 -0.04532975 0.00514030 0.43529412 0.89019608 0.96078431 +v 0.03540896 -0.04585924 0.00118475 0.43529412 0.89019608 0.96078431 +v 0.03636654 -0.03907887 0.01886559 0.43529412 0.89019608 0.96078431 +v 0.03454619 -0.04590337 -0.00725057 0.43529412 0.89019608 0.96078431 +v 0.03356017 -0.04490322 -0.01641029 0.43529412 0.89019608 0.96078431 +v 0.03751374 -0.03340159 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.03844288 -0.03228379 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04029167 -0.03002612 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04166642 -0.02794494 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.03081068 -0.03943921 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.03433761 -0.03654910 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.03471685 -0.03617405 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04371432 0.00169897 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04546830 0.01856901 -0.01570497 0.43529412 0.89019608 0.96078431 +v 0.04570532 0.01856901 -0.01492339 0.43529412 0.89019608 0.96078431 +v 0.04596131 0.01856901 -0.01406556 0.43529412 0.89019608 0.96078431 +v 0.04120185 0.01012663 0.02478461 0.43529412 0.89019608 0.96078431 +v 0.03952371 0.01856901 0.02711029 0.43529412 0.89019608 0.96078431 +v 0.03886004 0.00015463 0.02822547 0.43529412 0.89019608 0.96078431 +v 0.04011154 -0.00889077 0.02582354 0.43529412 0.89019608 0.96078431 +v 0.04118289 -0.01761259 0.02260191 0.43529412 0.89019608 0.96078431 +v 0.03916344 -0.02757724 0.02268769 0.43529412 0.89019608 0.96078431 +v 0.03629069 -0.03638731 0.02171549 0.43529412 0.89019608 0.96078431 +v 0.03610107 -0.03325452 0.02431757 0.43529412 0.89019608 0.96078431 +v 0.03216646 -0.04690351 0.01239373 0.43529412 0.89019608 0.96078431 +v 0.03236556 -0.04549154 0.01603474 0.43529412 0.89019608 0.96078431 +v 0.03246985 -0.04363834 0.01942794 0.43529412 0.89019608 0.96078431 +v 0.03189151 -0.04788159 0.00853350 0.43529412 0.89019608 0.96078431 +v 0.03155019 -0.04846256 0.00446357 0.43529412 0.89019608 0.96078431 +v 0.03070639 -0.04859492 -0.00427676 0.43529412 0.89019608 0.96078431 +v 0.03248881 -0.04131448 0.02256379 0.43529412 0.89019608 0.96078431 +v 0.02973932 -0.04764626 -0.01377961 0.43529412 0.89019608 0.96078431 +v 0.02698035 -0.04207194 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.03063054 -0.03956423 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04198877 0.00411107 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04395134 0.01856901 -0.01958426 0.43529412 0.89019608 0.96078431 +v 0.03887900 0.01856901 0.02799671 0.43529412 0.89019608 0.96078431 +v 0.03628121 0.01856901 0.03155194 0.43529412 0.89019608 0.96078431 +v 0.03608211 0.00791308 0.03178069 0.43529412 0.89019608 0.96078431 +v 0.03582612 -0.00122792 0.03196179 0.43529412 0.89019608 0.96078431 +v 0.03717243 -0.01058218 0.02976003 0.43529412 0.89019608 0.96078431 +v 0.03831963 -0.01960552 0.02670043 0.43529412 0.89019608 0.96078431 +v 0.03581664 -0.02969519 0.02666230 0.43529412 0.89019608 0.96078431 +v 0.03241297 -0.03852732 0.02544228 0.43529412 0.89019608 0.96078431 +v 0.03222335 -0.03528421 0.02803483 0.43529412 0.89019608 0.96078431 +v 0.02751129 -0.05010984 0.01161215 0.43529412 0.89019608 0.96078431 +v 0.02776728 -0.04907293 0.01556771 0.43529412 0.89019608 0.96078431 +v 0.02795690 -0.04760214 0.01928497 0.43529412 0.89019608 0.96078431 +v 0.02806119 -0.04567539 0.02273535 0.43529412 0.89019608 0.96078431 +v 0.02719842 -0.05074229 0.00741832 0.43529412 0.89019608 0.96078431 +v 0.02641149 -0.05094085 -0.00158890 0.43529412 0.89019608 0.96078431 +v 0.02550132 -0.05003631 -0.01140628 0.43529412 0.89019608 0.96078431 +v 0.02807067 -0.04327799 0.02590932 0.43529412 0.89019608 0.96078431 +v 0.02287508 -0.04434432 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.02630720 -0.04245435 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04183708 0.00427286 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04217839 0.01856901 -0.02325387 0.43529412 0.89019608 0.96078431 +v 0.04391342 0.01856901 -0.01967005 0.43529412 0.89019608 0.96078431 +v 0.03406266 0.01856901 0.03377276 0.43529412 0.89019608 0.96078431 +v 0.03240348 -0.00250016 0.03542170 0.43529412 0.89019608 0.96078431 +v 0.03376875 -0.01213388 0.03344869 0.43529412 0.89019608 0.96078431 +v 0.03495387 -0.02145137 0.03057020 0.43529412 0.89019608 0.96078431 +v 0.03156916 -0.02753312 0.03238117 0.43529412 0.89019608 0.96078431 +v 0.03194840 -0.03160722 0.03035098 0.43529412 0.89019608 0.96078431 +v 0.02799482 -0.04040259 0.02879735 0.43529412 0.89019608 0.96078431 +v 0.02782416 -0.03707123 0.03138990 0.43529412 0.89019608 0.96078431 +v 0.02237259 -0.05264697 0.00999181 0.43529412 0.89019608 0.96078431 +v 0.02265702 -0.05198511 0.01428096 0.43529412 0.89019608 0.96078431 +v 0.02288456 -0.05090407 0.01833182 0.43529412 0.89019608 0.96078431 +v 0.02304574 -0.04938180 0.02210628 0.43529412 0.89019608 0.96078431 +v 0.02314055 -0.04739622 0.02561385 0.43529412 0.89019608 0.96078431 +v 0.02168047 -0.05290435 0.00072725 0.43529412 0.89019608 0.96078431 +v 0.02088407 -0.05202923 -0.00935702 0.43529412 0.89019608 0.96078431 +v 0.01852330 -0.04623429 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.02173736 -0.04484439 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.02315951 -0.04493264 0.02881641 0.43529412 0.89019608 0.96078431 +v 0.03930565 0.00687617 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.04168538 0.01856901 -0.02416889 0.43529412 0.89019608 0.96078431 +v 0.03118992 0.01856901 0.03650829 0.43529412 0.89019608 0.96078431 +v 0.03109511 0.01856901 0.03659407 0.43529412 0.89019608 0.96078431 +v 0.02988154 0.00605252 0.03767112 0.43529412 0.89019608 0.96078431 +v 0.02859212 -0.00364002 0.03854801 0.43529412 0.89019608 0.96078431 +v 0.02993842 -0.01353849 0.03681330 0.43529412 0.89019608 0.96078431 +v 0.03109511 -0.02311337 0.03413496 0.43529412 0.89019608 0.96078431 +v 0.02720790 -0.02910687 0.03565045 0.43529412 0.89019608 0.96078431 +v 0.02756817 -0.03329129 0.03366792 0.43529412 0.89019608 0.96078431 +v 0.02309315 -0.04199105 0.03171397 0.43529412 0.89019608 0.96078431 +v 0.02294145 -0.03857144 0.03428746 0.43529412 0.89019608 0.96078431 +v 0.01715804 -0.05416924 0.01208873 0.43529412 0.89019608 0.96078431 +v 0.01658918 -0.05446340 0.00262400 0.43529412 0.89019608 0.96078431 +v 0.01738558 -0.05347797 0.01646366 0.43529412 0.89019608 0.96078431 +v 0.01757520 -0.05236016 0.02058125 0.43529412 0.89019608 0.96078431 +v 0.01771742 -0.05080112 0.02442242 0.43529412 0.89019608 0.96078431 +v 0.01779327 -0.04877142 0.02795858 0.43529412 0.89019608 0.96078431 +v 0.01593499 -0.05361034 -0.00768902 0.43529412 0.89019608 0.96078431 +v 0.01398191 -0.04773451 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.01699686 -0.04674907 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.01781223 -0.04625636 0.03118974 0.43529412 0.89019608 0.96078431 +v 0.03703969 0.00867790 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.03903070 0.01856901 -0.02842944 0.43529412 0.89019608 0.96078431 +v 0.04022531 0.01856901 -0.02659941 0.43529412 0.89019608 0.96078431 +v 0.02725530 0.01856901 0.03945350 0.43529412 0.89019608 0.96078431 +v 0.02575730 0.01856901 0.04044478 0.43529412 0.89019608 0.96078431 +v 0.02443945 -0.00464017 0.04129307 0.43529412 0.89019608 0.96078431 +v 0.02569094 -0.01476660 0.03980617 0.43529412 0.89019608 0.96078431 +v 0.02677177 -0.02457682 0.03731846 0.43529412 0.89019608 0.96078431 +v 0.02241051 -0.03043794 0.03846223 0.43529412 0.89019608 0.96078431 +v 0.02271391 -0.03471060 0.03653688 0.43529412 0.89019608 0.96078431 +v 0.01775534 -0.04325593 0.03408730 0.43529412 0.89019608 0.96078431 +v 0.01764157 -0.03977014 0.03665126 0.43529412 0.89019608 0.96078431 +v 0.01161166 -0.05527234 0.01365188 0.43529412 0.89019608 0.96078431 +v 0.01119449 -0.05559592 0.00403466 0.43529412 0.89019608 0.96078431 +v 0.01072044 -0.05476491 -0.00644993 0.43529412 0.89019608 0.96078431 +v 0.01178231 -0.05455900 0.01809354 0.43529412 0.89019608 0.96078431 +v 0.01192453 -0.05342649 0.02225878 0.43529412 0.89019608 0.96078431 +v 0.01202882 -0.05183803 0.02613807 0.43529412 0.89019608 0.96078431 +v 0.01209519 -0.04977156 0.02971237 0.43529412 0.89019608 0.96078431 +v 0.00929829 -0.04881554 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.01215207 -0.04816839 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.01210467 -0.04721973 0.03295306 0.43529412 0.89019608 0.96078431 +v 0.03661305 0.00894264 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.03600626 0.01856901 -0.03233734 0.43529412 0.89019608 0.96078431 +v 0.03808260 0.01856901 -0.02971619 0.43529412 0.89019608 0.96078431 +v 0.02410761 0.01856901 0.04153136 0.43529412 0.89019608 0.96078431 +v 0.02365252 0.01856901 0.04182683 0.43529412 0.89019608 0.96078431 +v 0.02268546 0.00455967 0.04238919 0.43529412 0.89019608 0.96078431 +v 0.01998338 -0.00547852 0.04361875 0.43529412 0.89019608 0.96078431 +v 0.02107369 -0.01579616 0.04235106 0.43529412 0.89019608 0.96078431 +v 0.02202179 -0.02580493 0.04006352 0.43529412 0.89019608 0.96078431 +v 0.01721493 -0.03149691 0.04074978 0.43529412 0.89019608 0.96078431 +v 0.01746143 -0.03584312 0.03887209 0.43529412 0.89019608 0.96078431 +v 0.01207622 -0.04417518 0.03586015 0.43529412 0.89019608 0.96078431 +v 0.01200038 -0.04065262 0.03840505 0.43529412 0.89019608 0.96078431 +v 0.00560070 -0.05628719 0.00491155 0.43529412 0.89019608 0.96078431 +v 0.00584721 -0.05594891 0.01462409 0.43529412 0.89019608 0.96078431 +v 0.00532575 -0.05545619 -0.00568742 0.43529412 0.89019608 0.96078431 +v 0.00451987 -0.04947005 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.00725040 -0.04910235 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.00595150 -0.05522086 0.01909434 0.43529412 0.89019608 0.96078431 +v 0.00603683 -0.05407364 0.02329771 0.43529412 0.89019608 0.96078431 +v 0.00610320 -0.05247047 0.02720560 0.43529412 0.89019608 0.96078431 +v 0.00614112 -0.05038194 0.03078942 0.43529412 0.89019608 0.96078431 +v 0.00616956 -0.04780805 0.03404917 0.43529412 0.89019608 0.96078431 +v 0.03118992 0.01215633 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.03264999 0.01856901 -0.03604507 0.43529412 0.89019608 0.96078431 +v 0.03577872 0.01856901 -0.03259469 0.43529412 0.89019608 0.96078431 +v 0.01956621 0.01856901 0.04378078 0.43529412 0.89019608 0.96078431 +v 0.01614357 -0.01662716 0.04440986 0.43529412 0.89019608 0.96078431 +v 0.01621942 0.01856901 0.04521050 0.43529412 0.89019608 0.96078431 +v 0.01552731 0.01856901 0.04549644 0.43529412 0.89019608 0.96078431 +v 0.01480675 0.00350069 0.04574426 0.43529412 0.89019608 0.96078431 +v 0.01527132 -0.00614773 0.04547738 0.43529412 0.89019608 0.96078431 +v 0.01691153 -0.02679036 0.04228435 0.43529412 0.89019608 0.96078431 +v 0.01187712 -0.03666676 0.04059728 0.43529412 0.89019608 0.96078431 +v 0.01170647 -0.03226908 0.04243685 0.43529412 0.89019608 0.96078431 +v 0.00616008 -0.04474144 0.03694673 0.43529412 0.89019608 0.96078431 +v 0.00613164 -0.04118947 0.03949163 0.43529412 0.89019608 0.96078431 +v -0.00008789 -0.05655193 0.00634127 0.43529412 0.89019608 0.96078431 +v -0.00016374 -0.05552238 -0.00685978 0.43529412 0.89019608 0.96078431 +v -0.00004049 -0.05612540 0.01537708 0.43529412 0.89019608 0.96078431 +v -0.00004049 -0.05614746 0.01495769 0.43529412 0.89019608 0.96078431 +v 0.00184623 -0.04966125 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.00001205 -0.05529440 0.01941841 0.43529412 0.89019608 0.96078431 +v 0.00000692 -0.05461784 0.02266863 0.43529412 0.89019608 0.96078431 +v 0.00005432 -0.05197775 0.02894032 0.43529412 0.89019608 0.96078431 +v 0.00001640 -0.05421337 0.02363131 0.43529412 0.89019608 0.96078431 +v 0.00008276 -0.04846990 0.03392527 0.43529412 0.89019608 0.96078431 +v 0.03100978 0.01225929 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.03068742 0.01856901 -0.03790370 0.43529412 0.89019608 0.96078431 +v 0.01149788 -0.02751105 0.04392375 0.43529412 0.89019608 0.96078431 +v 0.01096695 -0.01723019 0.04592536 0.43529412 0.89019608 0.96078431 +v 0.00895698 0.01856901 0.04714538 0.43529412 0.89019608 0.96078431 +v 0.01035068 -0.00663310 0.04683085 0.43529412 0.89019608 0.96078431 +v 0.00607475 -0.03717419 0.04167433 0.43529412 0.89019608 0.96078431 +v 0.00598942 -0.03274709 0.04348530 0.43529412 0.89019608 0.96078431 +v 0.00012069 -0.04310885 0.03872911 0.43529412 0.89019608 0.96078431 +v 0.00013965 -0.03634319 0.04250357 0.43529412 0.89019608 0.96078431 +v 0.00013965 -0.03730656 0.04196981 0.43529412 0.89019608 0.96078431 +v -0.00592819 -0.05596361 0.01466222 0.43529412 0.89019608 0.96078431 +v -0.00580494 -0.05629454 0.00494014 0.43529412 0.89019608 0.96078431 +v -0.00564376 -0.05547090 -0.00565882 0.43529412 0.89019608 0.96078431 +v -0.00514127 -0.04947005 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.00030596 -0.04964654 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.00596611 -0.05523557 0.01914199 0.43529412 0.89019608 0.96078431 +v -0.00601352 -0.05248518 0.02724372 0.43529412 0.89019608 0.96078431 +v -0.00599456 -0.05408835 0.02334536 0.43529412 0.89019608 0.96078431 +v -0.00600404 -0.05040400 0.03083708 0.43529412 0.89019608 0.96078431 +v -0.00593767 -0.04475614 0.03699439 0.43529412 0.89019608 0.96078431 +v -0.00597559 -0.04782276 0.03408730 0.43529412 0.89019608 0.96078431 +v 0.02419294 0.01514940 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.02798534 0.01856901 -0.04021031 0.43529412 0.89019608 0.96078431 +v 0.02901877 0.01856901 -0.03940967 0.43529412 0.89019608 0.96078431 +v 0.00588513 -0.02795229 0.04494362 0.43529412 0.89019608 0.96078431 +v 0.00561018 -0.01759788 0.04685944 0.43529412 0.89019608 0.96078431 +v 0.00821746 0.01856901 0.04731695 0.43529412 0.89019608 0.96078431 +v 0.00738313 0.01856901 0.04750758 0.43529412 0.89019608 0.96078431 +v 0.00650140 0.00290502 0.04764101 0.43529412 0.89019608 0.96078431 +v 0.00528783 -0.00693461 0.04766961 0.43529412 0.89019608 0.96078431 +v 0.00015861 -0.02833470 0.04523909 0.43529412 0.89019608 0.96078431 +v 0.00014913 -0.03285740 0.04369500 0.43529412 0.89019608 0.96078431 +v -0.00587130 -0.04120417 0.03953929 0.43529412 0.89019608 0.96078431 +v -0.00568168 -0.03276180 0.04353296 0.43529412 0.89019608 0.96078431 +v -0.00578597 -0.03718890 0.04171246 0.43529412 0.89019608 0.96078431 +v -0.01181589 -0.05458842 0.01816979 0.43529412 0.89019608 0.96078431 +v -0.01170212 -0.05530176 0.01372814 0.43529412 0.89019608 0.96078431 +v -0.01140821 -0.05561798 0.00410138 0.43529412 0.89019608 0.96078431 +v -0.01104793 -0.05477963 -0.00639274 0.43529412 0.89019608 0.96078431 +v -0.00992917 -0.04881554 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.01190122 -0.05345590 0.02234456 0.43529412 0.89019608 0.96078431 +v -0.01195810 -0.04980833 0.02979815 0.43529412 0.89019608 0.96078431 +v -0.01194862 -0.05186745 0.02622386 0.43529412 0.89019608 0.96078431 +v -0.01193914 -0.04725650 0.03303884 0.43529412 0.89019608 0.96078431 +v -0.01175900 -0.04068204 0.03850036 0.43529412 0.89019608 0.96078431 +v -0.01186329 -0.04421195 0.03594593 0.43529412 0.89019608 0.96078431 +v 0.02267598 0.01571566 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.02110214 0.01856901 -0.04526198 0.43529412 0.89019608 0.96078431 +v 0.02246740 0.01856901 -0.04428977 0.43529412 0.89019608 0.96078431 +v 0.02516000 0.01856901 -0.04234535 0.43529412 0.89019608 0.96078431 +v 0.00015861 -0.01848772 0.04708819 0.43529412 0.89019608 0.96078431 +v 0.00015861 -0.00711110 0.04795555 0.43529412 0.89019608 0.96078431 +v 0.00007328 0.01856901 0.04807946 0.43529412 0.89019608 0.96078431 +v 0.00014913 0.00276530 0.04807946 0.43529412 0.89019608 0.96078431 +v -0.00000257 0.00276530 0.04808899 0.43529412 0.89019608 0.96078431 +v -0.00555843 -0.02796700 0.04498174 0.43529412 0.89019608 0.96078431 +v -0.01160731 -0.03670353 0.04069259 0.43529412 0.89019608 0.96078431 +v -0.01119014 -0.02754047 0.04400954 0.43529412 0.89019608 0.96078431 +v -0.01141769 -0.03230585 0.04252263 0.43529412 0.89019608 0.96078431 +v -0.01742864 -0.05351474 0.01657804 0.43529412 0.89019608 0.96078431 +v -0.01756137 -0.05240428 0.02070515 0.43529412 0.89019608 0.96078431 +v -0.01725798 -0.05420601 0.01220311 0.43529412 0.89019608 0.96078431 +v -0.01680289 -0.05449282 0.00271932 0.43529412 0.89019608 0.96078431 +v -0.01626248 -0.05363976 -0.00760324 0.43529412 0.89019608 0.96078431 +v -0.01461278 -0.04773451 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.01764670 -0.05085260 0.02454632 0.43529412 0.89019608 0.96078431 +v -0.01767514 -0.04882290 0.02809202 0.43529412 0.89019608 0.96078431 +v -0.01764670 -0.04630783 0.03131365 0.43529412 0.89019608 0.96078431 +v -0.01756137 -0.04330005 0.03422074 0.43529412 0.89019608 0.96078431 +v -0.01740968 -0.03982162 0.03678470 0.43529412 0.89019608 0.96078431 +v -0.01720110 -0.03588724 0.03899600 0.43529412 0.89019608 0.96078431 +v 0.02054276 0.01648783 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.01673139 0.01784096 -0.04928425 0.43529412 0.89019608 0.96078431 +v 0.01440855 0.01856901 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.00528348 -0.01761259 0.04689756 0.43529412 0.89019608 0.96078431 +v -0.00497061 -0.00694932 0.04770774 0.43529412 0.89019608 0.96078431 +v -0.00000257 0.01856901 0.04807946 0.43529412 0.89019608 0.96078431 +v -0.00543518 0.01856901 0.04767914 0.43529412 0.89019608 0.96078431 +v -0.01064025 -0.01725225 0.04600161 0.43529412 0.89019608 0.96078431 +v -0.01693563 -0.03154103 0.04087369 0.43529412 0.89019608 0.96078431 +v -0.01661327 -0.02683449 0.04240825 0.43529412 0.89019608 0.96078431 +v -0.01583583 -0.01666393 0.04452423 0.43529412 0.89019608 0.96078431 +v -0.02289917 -0.05096291 0.01848433 0.43529412 0.89019608 0.96078431 +v -0.02271904 -0.05203659 0.01443346 0.43529412 0.89019608 0.96078431 +v -0.02300347 -0.04944798 0.02226831 0.43529412 0.89019608 0.96078431 +v -0.02249149 -0.05269845 0.01013478 0.43529412 0.89019608 0.96078431 +v -0.02191315 -0.05294848 0.00085115 0.43529412 0.89019608 0.96078431 +v -0.02123052 -0.05206600 -0.00925218 0.43529412 0.89019608 0.96078431 +v -0.01915418 -0.04624165 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.02305087 -0.04746241 0.02577588 0.43529412 0.89019608 0.96078431 +v -0.02302243 -0.04499883 0.02897845 0.43529412 0.89019608 0.96078431 +v -0.02291814 -0.04204988 0.03187601 0.43529412 0.89019608 0.96078431 +v -0.02273800 -0.03863763 0.03444950 0.43529412 0.89019608 0.96078431 +v -0.02248201 -0.03476944 0.03669892 0.43529412 0.89019608 0.96078431 +v -0.02215018 -0.03049677 0.03862427 0.43529412 0.89019608 0.96078431 +v -0.01448953 0.01856901 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.01003346 -0.00666251 0.04690710 0.43529412 0.89019608 0.96078431 +v -0.00727449 0.01856901 0.04751710 0.43529412 0.89019608 0.96078431 +v -0.00841221 0.00299327 0.04734554 0.43529412 0.89019608 0.96078431 +v -0.01496358 -0.00618450 0.04557269 0.43529412 0.89019608 0.96078431 +v -0.02175197 -0.02586376 0.04021602 0.43529412 0.89019608 0.96078431 +v -0.02078491 -0.01585499 0.04250357 0.43529412 0.89019608 0.96078431 +v -0.01969460 -0.00552264 0.04375219 0.43529412 0.89019608 0.96078431 +v -0.02780085 -0.04914647 0.01575833 0.43529412 0.89019608 0.96078431 +v -0.02793359 -0.04767568 0.01947560 0.43529412 0.89019608 0.96078431 +v -0.02760175 -0.05017603 0.01178372 0.43529412 0.89019608 0.96078431 +v -0.02799047 -0.04574893 0.02292598 0.43529412 0.89019608 0.96078431 +v -0.02733628 -0.05080112 0.00758988 0.43529412 0.89019608 0.96078431 +v -0.02666313 -0.05099232 -0.00144592 0.43529412 0.89019608 0.96078431 +v -0.02586673 -0.05007307 -0.01127284 0.43529412 0.89019608 0.96078431 +v -0.02349648 -0.04434432 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.02796203 -0.04335889 0.02610949 0.43529412 0.89019608 0.96078431 +v -0.02784826 -0.04048348 0.02899751 0.43529412 0.89019608 0.96078431 +v -0.02764916 -0.03714477 0.03159006 0.43529412 0.89019608 0.96078431 +v -0.02735524 -0.03336483 0.03386807 0.43529412 0.89019608 0.96078431 +v -0.02697600 -0.02918041 0.03584109 0.43529412 0.89019608 0.96078431 +v -0.02652092 -0.02464300 0.03750909 0.43529412 0.89019608 0.96078431 +v -0.01703992 0.01776007 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.02139170 0.01856901 -0.04509994 0.43529412 0.89019608 0.96078431 +v -0.01223305 0.01856901 0.04638286 0.43529412 0.89019608 0.96078431 +v -0.01456538 0.01856901 0.04575379 0.43529412 0.89019608 0.96078431 +v -0.00992917 0.01856901 0.04700241 0.43529412 0.89019608 0.96078431 +v -0.01557036 0.01856901 0.04547738 0.43529412 0.89019608 0.96078431 +v -0.01654691 0.00369190 0.04514378 0.43529412 0.89019608 0.96078431 +v -0.02542112 -0.01482543 0.03997773 0.43529412 0.89019608 0.96078431 +v -0.02416963 -0.00469900 0.04145511 0.43529412 0.89019608 0.96078431 +v -0.01861376 0.01856901 0.04425735 0.43529412 0.89019608 0.96078431 +v -0.02338271 0.01856901 0.04200793 0.43529412 0.89019608 0.96078431 +v -0.02416015 0.00481706 0.04156948 0.43529412 0.89019608 0.96078431 +v -0.03237069 -0.04557979 0.01624444 0.43529412 0.89019608 0.96078431 +v -0.03222848 -0.04697705 0.01260342 0.43529412 0.89019608 0.96078431 +v -0.03243706 -0.04371923 0.01964717 0.43529412 0.89019608 0.96078431 +v -0.03200093 -0.04795513 0.00873366 0.43529412 0.89019608 0.96078431 +v -0.03240862 -0.04140273 0.02278301 0.43529412 0.89019608 0.96078431 +v -0.03171650 -0.04853609 0.00464467 0.43529412 0.89019608 0.96078431 +v -0.03098647 -0.04865375 -0.00411473 0.43529412 0.89019608 0.96078431 +v -0.03011421 -0.04769038 -0.01362711 0.43529412 0.89019608 0.96078431 +v -0.02760175 -0.04207194 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.03229484 -0.03862292 0.02566150 0.43529412 0.89019608 0.96078431 +v -0.03207678 -0.03537981 0.02826359 0.43529412 0.89019608 0.96078431 +v -0.03176391 -0.03169547 0.03057973 0.43529412 0.89019608 0.96078431 +v -0.03136571 -0.02762136 0.03260039 0.43529412 0.89019608 0.96078431 +v -0.03087269 -0.02319426 0.03434465 0.43529412 0.89019608 0.96078431 +v -0.02968757 -0.01361203 0.03702298 0.43529412 0.89019608 0.96078431 +v -0.02686223 0.01433311 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.02545904 0.01856901 -0.04212613 0.43529412 0.89019608 0.96078431 +v -0.02834127 -0.00370621 0.03872911 0.43529412 0.89019608 0.96078431 +v -0.02516513 0.01856901 0.04094994 0.43529412 0.89019608 0.96078431 +v -0.03634323 -0.04140273 0.01600615 0.43529412 0.89019608 0.96078431 +v -0.03627686 -0.04317504 0.01267015 0.43529412 0.89019608 0.96078431 +v -0.03612517 -0.04450611 0.00911491 0.43529412 0.89019608 0.96078431 +v -0.03632427 -0.03917447 0.01910387 0.43529412 0.89019608 0.96078431 +v -0.03589762 -0.04541800 0.00535000 0.43529412 0.89019608 0.96078431 +v -0.03620101 -0.03649027 0.02196330 0.43529412 0.89019608 0.96078431 +v -0.03559423 -0.04594014 0.00139445 0.43529412 0.89019608 0.96078431 +v -0.03483575 -0.04596955 -0.00706948 0.43529412 0.89019608 0.96078431 +v -0.03395402 -0.04495470 -0.01625779 0.43529412 0.89019608 0.96078431 +v -0.03143207 -0.03944657 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.03598295 -0.03335747 0.02456539 0.43529412 0.89019608 0.96078431 +v -0.03567008 -0.02979814 0.02691012 0.43529412 0.89019608 0.96078431 +v -0.03475990 -0.02153962 0.03080848 0.43529412 0.89019608 0.96078431 +v -0.03355582 -0.01222212 0.03367745 0.43529412 0.89019608 0.96078431 +v -0.03217159 -0.00257370 0.03563139 0.43529412 0.89019608 0.96078431 +v -0.03124245 0.01231077 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.02927041 0.01856901 -0.03920951 0.43529412 0.89019608 0.96078431 +v -0.02813268 0.01856901 0.03885303 0.43529412 0.89019608 0.96078431 +v -0.03034176 0.01856901 0.03728033 0.43529412 0.89019608 0.96078431 +v -0.03047449 0.01856901 0.03718502 0.43529412 0.89019608 0.96078431 +v -0.03104335 0.00635404 0.03671798 0.43529412 0.89019608 0.96078431 +v -0.03967106 -0.03669618 0.01514832 0.43529412 0.89019608 0.96078431 +v -0.03969002 -0.03882148 0.01209826 0.43529412 0.89019608 0.96078431 +v -0.03962365 -0.04049819 0.00883851 0.43529412 0.89019608 0.96078431 +v -0.03947196 -0.04174836 0.00537859 0.43529412 0.89019608 0.96078431 +v -0.03955729 -0.03412964 0.01797916 0.43529412 0.89019608 0.96078431 +v -0.03924442 -0.04258672 0.00172805 0.43529412 0.89019608 0.96078431 +v -0.03934871 -0.03111450 0.02058125 0.43529412 0.89019608 0.96078431 +v -0.03895050 -0.04304267 -0.00208453 0.43529412 0.89019608 0.96078431 +v -0.03820151 -0.04297648 -0.01025298 0.43529412 0.89019608 0.96078431 +v -0.03732925 -0.04188809 -0.01908863 0.43529412 0.89019608 0.96078431 +v -0.03494952 -0.03654910 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.03904531 -0.02768020 0.02294504 0.43529412 0.89019608 0.96078431 +v -0.03816358 -0.01970848 0.02695778 0.43529412 0.89019608 0.96078431 +v -0.03697846 -0.01067043 0.03000785 0.43529412 0.89019608 0.96078431 +v -0.03562268 -0.00130881 0.03219054 0.43529412 0.89019608 0.96078431 +v -0.03195353 0.01856901 0.03590780 0.43529412 0.89019608 0.96078431 +v -0.03138467 0.01224458 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.03288267 0.01856901 -0.03582584 0.43529412 0.89019608 0.96078431 +v -0.04235418 -0.03156310 0.01381392 0.43529412 0.89019608 0.96078431 +v -0.04245847 -0.03401197 0.01101168 0.43529412 0.89019608 0.96078431 +v -0.04247744 -0.03601961 0.00801880 0.43529412 0.89019608 0.96078431 +v -0.04240159 -0.03759336 0.00483530 0.43529412 0.89019608 0.96078431 +v -0.04225937 -0.03874794 0.00148023 0.43529412 0.89019608 0.96078431 +v -0.04216456 -0.02868034 0.01639694 0.43529412 0.89019608 0.96078431 +v -0.04176636 -0.03988781 -0.00574461 0.43529412 0.89019608 0.96078431 +v -0.04188013 -0.02539311 0.01877027 0.43529412 0.89019608 0.96078431 +v -0.04106477 -0.03969660 -0.01359852 0.43529412 0.89019608 0.96078431 +v -0.04024940 -0.03853467 -0.02207197 0.43529412 0.89019608 0.96078431 +v -0.03812566 -0.03340159 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04105529 -0.01772290 0.02286879 0.43529412 0.89019608 0.96078431 +v -0.03994601 -0.00899372 0.02608089 0.43529412 0.89019608 0.96078431 +v -0.03867556 0.00007374 0.02847328 0.43529412 0.89019608 0.96078431 +v -0.03476938 0.01856901 0.03304837 0.43529412 0.89019608 0.96078431 +v -0.03663714 0.01856901 0.03113255 0.43529412 0.89019608 0.96078431 +v -0.03703534 0.00826607 0.03066551 0.43529412 0.89019608 0.96078431 +v -0.03713015 0.00888381 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.03621998 0.01856901 -0.03209905 0.43529412 0.89019608 0.96078431 +v -0.04442104 -0.02609173 0.01208873 0.43529412 0.89019608 0.96078431 +v -0.04459170 -0.02882742 0.00951524 0.43529412 0.89019608 0.96078431 +v -0.04468651 -0.03114392 0.00677018 0.43529412 0.89019608 0.96078431 +v -0.04469599 -0.03302654 0.00383450 0.43529412 0.89019608 0.96078431 +v -0.04462962 -0.03448998 0.00073678 0.43529412 0.89019608 0.96078431 +v -0.04449689 -0.03553425 -0.00251345 0.43529412 0.89019608 0.96078431 +v -0.04417453 -0.02295158 0.01446206 0.43529412 0.89019608 0.96078431 +v -0.04405128 -0.03649762 -0.00949046 0.43529412 0.89019608 0.96078431 +v -0.04344449 -0.01559760 0.01860824 0.43529412 0.89019608 0.96078431 +v -0.04342553 -0.03618140 -0.01702984 0.43529412 0.89019608 0.96078431 +v -0.04268602 -0.03491652 -0.02515063 0.43529412 0.89019608 0.96078431 +v -0.04090359 -0.03002612 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04245847 -0.00719200 0.02194424 0.43529412 0.89019608 0.96078431 +v -0.04132075 0.00155189 0.02450820 0.43529412 0.89019608 0.96078431 +v -0.03774642 0.01856901 0.02975050 0.43529412 0.89019608 0.96078431 +v -0.03794552 0.01856901 0.02946455 0.43529412 0.89019608 0.96078431 +v -0.03956677 0.01856901 0.02710075 0.43529412 0.89019608 0.96078431 +v -0.04161466 0.01856901 0.02408882 0.43529412 0.89019608 0.96078431 +v -0.03746199 0.00867054 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.03921597 0.01856901 -0.02816256 0.43529412 0.89019608 0.96078431 +v -0.04594748 -0.02038504 0.01006806 0.43529412 0.89019608 0.96078431 +v -0.04630776 -0.02595201 0.00516890 0.43529412 0.89019608 0.96078431 +v -0.04637413 -0.02812879 0.00247150 0.43529412 0.89019608 0.96078431 +v -0.04638361 -0.02987904 -0.00038793 0.43529412 0.89019608 0.96078431 +v -0.04632672 -0.03121746 -0.00339034 0.43529412 0.89019608 0.96078431 +v -0.04620347 -0.03215877 -0.00654525 0.43529412 0.89019608 0.96078431 +v -0.04534070 -0.01336199 0.01424284 0.43529412 0.89019608 0.96078431 +v -0.04582423 -0.03293094 -0.01326492 0.43529412 0.89019608 0.96078431 +v -0.04449689 -0.00530202 0.01766462 0.43529412 0.89019608 0.96078431 +v -0.04528381 -0.03246029 -0.02050881 0.43529412 0.89019608 0.96078431 +v -0.04465806 -0.03109244 -0.02828647 0.43529412 0.89019608 0.96078431 +v -0.04324540 -0.02646679 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04352982 0.00311093 0.02035249 0.43529412 0.89019608 0.96078431 +v -0.04184221 0.01047227 0.02369803 0.43529412 0.89019608 0.96078431 +v -0.04273342 0.01856901 0.02187752 0.43529412 0.89019608 0.96078431 +v -0.03967106 0.00693500 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04185169 0.01856901 -0.02389248 0.43529412 0.89019608 0.96078431 +v -0.04674389 -0.01104548 0.00981071 0.43529412 0.89019608 0.96078431 +v -0.04722741 -0.01773026 0.00564547 0.43529412 0.89019608 0.96078431 +v -0.04750236 -0.02297365 0.00082256 0.43529412 0.89019608 0.96078431 +v -0.04754977 -0.02499599 -0.00180812 0.43529412 0.89019608 0.96078431 +v -0.04755925 -0.02661387 -0.00459130 0.43529412 0.89019608 0.96078431 +v -0.04750236 -0.02781992 -0.00751745 0.43529412 0.89019608 0.96078431 +v -0.04740755 -0.02863621 -0.01056752 0.43529412 0.89019608 0.96078431 +v -0.04608022 -0.00333851 0.01327063 0.43529412 0.89019608 0.96078431 +v -0.04709468 -0.02920982 -0.01703937 0.43529412 0.89019608 0.96078431 +v -0.04665856 -0.02857738 -0.02399732 0.43529412 0.89019608 0.96078431 +v -0.04530277 0.00473616 0.01604428 0.43529412 0.89019608 0.96078431 +v -0.04615606 -0.02708452 -0.03144138 0.43529412 0.89019608 0.96078431 +v -0.04380477 -0.02537104 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04404180 0.01856901 0.01896090 0.43529412 0.89019608 0.96078431 +v -0.04525537 0.01856901 0.01622537 0.43529412 0.89019608 0.96078431 +v -0.04223093 0.00435375 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04404180 0.01856901 -0.01939363 0.43529412 0.89019608 0.96078431 +v -0.04245847 0.00411107 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04721793 -0.00131617 0.00881944 0.43529412 0.89019608 0.96078431 +v -0.04769198 -0.00867015 0.00535953 0.43529412 0.89019608 0.96078431 +v -0.04803330 -0.01500193 0.00124194 0.43529412 0.89019608 0.96078431 +v -0.04821344 -0.01991439 -0.00346659 0.43529412 0.89019608 0.96078431 +v -0.04824188 -0.02325310 -0.00874701 0.43529412 0.89019608 0.96078431 +v -0.04812811 -0.02501805 -0.01452307 0.43529412 0.89019608 0.96078431 +v -0.04789108 -0.02537104 -0.02076616 0.43529412 0.89019608 0.96078431 +v -0.04664908 0.00642023 0.01162168 0.43529412 0.89019608 0.96078431 +v -0.04756873 -0.02456211 -0.02743817 0.43529412 0.89019608 0.96078431 +v -0.04719897 -0.02293687 -0.03458676 0.43529412 0.89019608 0.96078431 +v -0.04535966 0.01292115 0.01593943 0.43529412 0.89019608 0.96078431 +v -0.04645946 -0.01925988 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04512263 -0.02275303 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04562513 0.01856901 0.01510066 0.43529412 0.89019608 0.96078431 +v -0.04569149 0.01856901 -0.01505683 0.43529412 0.89019608 0.96078431 +v -0.04415557 0.00177986 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04744548 0.01856901 0.00780911 0.43529412 0.89019608 0.96078431 +v -0.04747392 0.01553916 0.00763754 0.43529412 0.89019608 0.96078431 +v -0.04754977 0.00813370 0.00713238 0.43529412 0.89019608 0.96078431 +v -0.04790056 0.00074295 0.00433966 0.43529412 0.89019608 0.96078431 +v -0.04818499 -0.00625804 0.00092741 0.43529412 0.89019608 0.96078431 +v -0.04838410 -0.01223683 -0.00309486 0.43529412 0.89019608 0.96078431 +v -0.04847891 -0.01681836 -0.00769855 0.43529412 0.89019608 0.96078431 +v -0.04847891 -0.01984085 -0.01281694 0.43529412 0.89019608 0.96078431 +v -0.04839358 -0.02133371 -0.01840236 0.43529412 0.89019608 0.96078431 +v -0.04824188 -0.02145872 -0.02440717 0.43529412 0.89019608 0.96078431 +v -0.04803330 -0.02046594 -0.03082184 0.43529412 0.89019608 0.96078431 +v -0.04602333 0.01856901 0.01354704 0.43529412 0.89019608 0.96078431 +v -0.04691454 0.01856901 0.00997275 0.43529412 0.89019608 0.96078431 +v -0.04746444 -0.01533286 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04732222 -0.01602413 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04654479 -0.01901720 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04697143 0.01856901 -0.01031970 0.43529412 0.89019608 0.96078431 +v -0.04597592 -0.00144854 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04600437 -0.00150001 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04772991 0.01856901 0.00468280 0.43529412 0.89019608 0.96078431 +v -0.04802382 0.00986924 0.00260494 0.43529412 0.89019608 0.96078431 +v -0.04808070 0.01856901 -0.00000668 0.43529412 0.89019608 0.96078431 +v -0.04808070 0.01856901 -0.00017824 0.43529412 0.89019608 0.96078431 +v -0.04786264 -0.01168528 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04778679 -0.01285457 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04780575 0.01856901 -0.00521085 0.43529412 0.89019608 0.96078431 +v -0.04601385 -0.00152943 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04739807 -0.00595653 -0.04928425 0.43529412 0.89019608 0.96078431 +v -0.04806174 0.01856901 0.00031739 0.43529412 0.89019608 0.96078431 +v -0.04798589 0.01856901 -0.00194156 0.43529412 0.89019608 0.96078431 +v -0.04772991 -0.00805241 -0.04928425 0.43529412 0.89019608 0.96078431 +f 608 609 610 +f 608 610 611 +f 608 611 612 +f 608 612 613 +f 608 613 614 +f 608 614 609 +f 609 614 615 +f 609 615 616 +f 609 616 617 +f 609 617 618 +f 609 618 619 +f 609 619 610 +f 610 620 611 +f 610 619 621 +f 610 621 620 +f 611 620 634 +f 611 634 654 +f 611 654 675 +f 611 675 698 +f 611 698 700 +f 611 700 728 +f 611 728 727 +f 611 727 726 +f 611 726 748 +f 611 748 770 +f 611 770 769 +f 611 769 790 +f 611 790 813 +f 611 813 812 +f 611 812 835 +f 611 835 834 +f 611 834 858 +f 611 858 857 +f 611 857 881 +f 611 881 904 +f 611 904 903 +f 611 903 930 +f 611 930 929 +f 611 929 928 +f 611 928 954 +f 611 954 976 +f 611 976 999 +f 611 999 1026 +f 611 1026 1045 +f 611 1045 1067 +f 611 1067 1086 +f 611 1086 1106 +f 611 1106 1123 +f 611 1123 1140 +f 611 1140 1156 +f 611 1156 1174 +f 611 1174 1183 +f 611 1183 1187 +f 611 1187 1180 +f 611 1180 1179 +f 611 1179 1186 +f 611 1186 1177 +f 611 1177 1158 +f 611 1158 1170 +f 611 1170 1169 +f 611 1169 1155 +f 611 1155 1138 +f 611 1138 1137 +f 611 1137 1121 +f 611 1121 1104 +f 611 1104 1103 +f 611 1103 1102 +f 611 1102 1101 +f 611 1101 1083 +f 611 1083 1082 +f 611 1082 1065 +f 611 1065 1048 +f 611 1048 1047 +f 611 1047 1046 +f 611 1046 1028 +f 611 1028 1008 +f 611 1008 1007 +f 611 1007 1003 +f 611 1003 1001 +f 611 1001 1000 +f 611 1000 1002 +f 611 1002 978 +f 611 978 958 +f 611 958 957 +f 611 957 933 +f 611 933 908 +f 611 908 907 +f 611 907 884 +f 611 884 862 +f 611 862 861 +f 611 861 859 +f 611 859 837 +f 611 837 836 +f 611 836 815 +f 611 815 814 +f 611 814 792 +f 611 792 791 +f 611 791 771 +f 611 771 750 +f 611 750 749 +f 611 749 730 +f 611 730 703 +f 611 703 702 +f 611 702 679 +f 611 679 657 +f 611 657 638 +f 611 638 622 +f 611 622 612 +f 612 622 623 +f 612 623 624 +f 612 624 613 +f 613 624 625 +f 613 625 614 +f 614 625 626 +f 614 626 615 +f 615 627 616 +f 615 626 628 +f 615 628 627 +f 616 627 629 +f 616 629 617 +f 617 630 618 +f 617 629 631 +f 617 631 630 +f 618 630 632 +f 618 632 633 +f 618 633 619 +f 619 633 621 +f 620 621 635 +f 620 635 634 +f 621 636 656 +f 621 656 677 +f 621 677 701 +f 621 701 721 +f 621 721 720 +f 621 720 719 +f 621 719 718 +f 621 718 724 +f 621 724 723 +f 621 723 722 +f 621 722 746 +f 621 746 745 +f 621 745 767 +f 621 767 766 +f 621 766 787 +f 621 787 786 +f 621 786 809 +f 621 809 808 +f 621 808 831 +f 621 831 830 +f 621 830 850 +f 621 850 849 +f 621 849 874 +f 621 874 895 +f 621 895 894 +f 621 894 920 +f 621 920 945 +f 621 945 969 +f 621 969 991 +f 621 991 1018 +f 621 1018 1038 +f 621 1038 1060 +f 621 1060 1078 +f 621 1078 1098 +f 621 1098 1118 +f 621 1118 1136 +f 621 1136 1154 +f 621 1154 1153 +f 621 1153 1173 +f 621 1173 1172 +f 621 1172 1171 +f 621 1171 1182 +f 621 1182 1181 +f 621 1181 1188 +f 621 1188 1185 +f 621 1185 1184 +f 621 1184 1176 +f 621 1176 1175 +f 621 1175 1157 +f 621 1157 1141 +f 621 1141 1139 +f 621 1139 1122 +f 621 1122 1105 +f 621 1105 1085 +f 621 1085 1066 +f 621 1066 1044 +f 621 1044 1025 +f 621 1025 998 +f 621 998 976 +f 621 976 954 +f 621 954 953 +f 621 953 952 +f 621 952 927 +f 621 927 902 +f 621 902 880 +f 621 880 856 +f 621 856 833 +f 621 833 811 +f 621 811 789 +f 621 789 768 +f 621 768 747 +f 621 747 725 +f 621 725 699 +f 621 699 676 +f 621 676 655 +f 621 655 635 +f 621 633 637 +f 621 637 636 +f 622 638 639 +f 622 639 640 +f 622 640 641 +f 622 641 623 +f 623 641 642 +f 623 642 624 +f 624 642 643 +f 624 643 625 +f 625 643 644 +f 625 644 626 +f 626 644 645 +f 626 645 628 +f 627 628 646 +f 627 646 647 +f 627 647 629 +f 628 645 648 +f 628 648 646 +f 629 647 649 +f 629 649 631 +f 630 631 650 +f 630 650 632 +f 631 649 651 +f 631 651 652 +f 631 652 650 +f 632 650 653 +f 632 653 637 +f 632 637 633 +f 634 635 654 +f 635 655 654 +f 636 637 653 +f 636 653 656 +f 638 657 639 +f 639 658 659 +f 639 659 640 +f 639 657 660 +f 639 660 658 +f 640 659 641 +f 641 643 642 +f 641 659 643 +f 643 659 661 +f 643 661 644 +f 644 661 662 +f 644 662 645 +f 645 662 663 +f 645 663 664 +f 645 664 648 +f 646 648 665 +f 646 665 666 +f 646 666 647 +f 647 666 667 +f 647 667 649 +f 648 664 668 +f 648 668 665 +f 649 669 651 +f 649 667 669 +f 650 670 671 +f 650 671 653 +f 650 652 670 +f 651 672 673 +f 651 673 652 +f 651 669 672 +f 652 673 670 +f 653 671 674 +f 653 674 656 +f 654 655 676 +f 654 676 675 +f 656 674 671 +f 656 671 678 +f 656 678 677 +f 657 679 680 +f 657 680 681 +f 657 681 660 +f 658 661 659 +f 658 660 682 +f 658 682 683 +f 658 683 661 +f 660 681 680 +f 660 680 682 +f 661 683 662 +f 662 683 684 +f 662 684 663 +f 663 685 664 +f 663 684 686 +f 663 686 685 +f 664 685 668 +f 665 668 687 +f 665 687 688 +f 665 688 666 +f 666 689 667 +f 666 688 689 +f 667 689 690 +f 667 690 669 +f 668 685 691 +f 668 691 687 +f 669 690 692 +f 669 692 693 +f 669 693 672 +f 670 673 694 +f 670 694 695 +f 670 695 678 +f 670 678 671 +f 672 693 696 +f 672 696 697 +f 672 697 673 +f 673 697 694 +f 675 676 698 +f 676 699 700 +f 676 700 698 +f 677 678 701 +f 678 695 701 +f 679 702 680 +f 680 702 703 +f 680 703 704 +f 680 704 705 +f 680 705 682 +f 682 706 683 +f 682 705 706 +f 683 706 684 +f 684 706 707 +f 684 707 686 +f 685 686 708 +f 685 708 691 +f 686 707 709 +f 686 709 708 +f 687 710 688 +f 687 691 711 +f 687 711 710 +f 688 710 712 +f 688 712 689 +f 689 713 690 +f 689 712 713 +f 690 714 692 +f 690 713 714 +f 691 708 715 +f 691 715 711 +f 692 716 693 +f 692 714 716 +f 693 717 696 +f 693 716 717 +f 694 697 718 +f 694 718 719 +f 694 719 720 +f 694 720 695 +f 695 720 721 +f 695 721 701 +f 696 717 722 +f 696 722 723 +f 696 723 697 +f 697 723 724 +f 697 724 718 +f 699 725 726 +f 699 726 727 +f 699 727 728 +f 699 728 700 +f 703 729 704 +f 703 730 731 +f 703 731 729 +f 704 732 705 +f 704 729 731 +f 704 731 732 +f 705 732 733 +f 705 733 706 +f 706 733 707 +f 707 733 734 +f 707 734 709 +f 708 709 735 +f 708 735 715 +f 709 734 736 +f 709 736 735 +f 710 737 712 +f 710 711 738 +f 710 738 737 +f 711 715 739 +f 711 739 738 +f 712 737 740 +f 712 740 713 +f 713 741 714 +f 713 740 741 +f 714 741 742 +f 714 742 716 +f 715 735 743 +f 715 743 739 +f 716 742 744 +f 716 744 717 +f 717 744 745 +f 717 745 746 +f 717 746 722 +f 725 747 748 +f 725 748 726 +f 730 749 731 +f 731 749 750 +f 731 750 751 +f 731 751 752 +f 731 752 753 +f 731 753 732 +f 732 753 754 +f 732 754 733 +f 733 754 734 +f 734 754 755 +f 734 755 736 +f 735 736 756 +f 735 756 743 +f 736 755 757 +f 736 757 756 +f 737 758 740 +f 737 738 759 +f 737 759 758 +f 738 739 760 +f 738 760 759 +f 739 743 761 +f 739 761 760 +f 740 762 741 +f 740 758 762 +f 741 762 763 +f 741 763 742 +f 742 763 764 +f 742 764 744 +f 743 756 765 +f 743 765 761 +f 744 764 766 +f 744 766 767 +f 744 767 745 +f 747 768 769 +f 747 769 770 +f 747 770 748 +f 750 771 751 +f 751 771 772 +f 751 772 752 +f 752 772 773 +f 752 773 753 +f 753 773 774 +f 753 774 754 +f 754 774 755 +f 755 774 775 +f 755 775 776 +f 755 776 757 +f 756 757 777 +f 756 777 765 +f 757 776 778 +f 757 778 777 +f 758 779 762 +f 758 759 780 +f 758 780 779 +f 759 760 781 +f 759 781 780 +f 760 761 782 +f 760 782 781 +f 761 765 783 +f 761 783 782 +f 762 779 784 +f 762 784 763 +f 763 785 764 +f 763 784 785 +f 764 785 786 +f 764 786 787 +f 764 787 766 +f 765 777 788 +f 765 788 783 +f 768 789 790 +f 768 790 769 +f 771 791 772 +f 772 791 792 +f 772 792 793 +f 772 793 794 +f 772 794 795 +f 772 795 773 +f 773 795 796 +f 773 796 774 +f 774 796 775 +f 775 796 797 +f 775 797 798 +f 775 798 776 +f 776 798 778 +f 777 778 799 +f 777 799 788 +f 778 798 800 +f 778 800 799 +f 779 780 801 +f 779 801 802 +f 779 802 784 +f 780 781 803 +f 780 803 801 +f 781 782 804 +f 781 804 803 +f 782 783 805 +f 782 805 804 +f 783 788 806 +f 783 806 805 +f 784 802 807 +f 784 807 785 +f 785 807 808 +f 785 808 809 +f 785 809 786 +f 788 799 810 +f 788 810 806 +f 789 811 812 +f 789 812 813 +f 789 813 790 +f 792 814 793 +f 793 814 794 +f 794 814 815 +f 794 815 816 +f 794 816 817 +f 794 817 795 +f 795 817 818 +f 795 818 796 +f 796 818 797 +f 797 818 819 +f 797 819 820 +f 797 820 798 +f 798 820 800 +f 799 800 821 +f 799 821 810 +f 800 820 822 +f 800 822 821 +f 801 823 824 +f 801 824 802 +f 801 803 823 +f 802 824 825 +f 802 825 807 +f 803 804 826 +f 803 826 823 +f 804 805 827 +f 804 827 826 +f 805 806 828 +f 805 828 827 +f 806 810 829 +f 806 829 828 +f 807 825 830 +f 807 830 831 +f 807 831 808 +f 810 821 832 +f 810 832 829 +f 811 833 834 +f 811 834 835 +f 811 835 812 +f 815 836 816 +f 816 836 837 +f 816 837 838 +f 816 838 839 +f 816 839 840 +f 816 840 817 +f 817 840 841 +f 817 841 818 +f 818 841 819 +f 819 841 842 +f 819 842 843 +f 819 843 820 +f 820 843 822 +f 821 822 844 +f 821 844 832 +f 822 845 844 +f 822 843 845 +f 823 846 824 +f 823 826 847 +f 823 847 846 +f 824 846 848 +f 824 848 825 +f 825 848 849 +f 825 849 850 +f 825 850 830 +f 826 851 847 +f 826 827 851 +f 827 828 852 +f 827 852 851 +f 828 829 853 +f 828 853 852 +f 829 832 854 +f 829 854 853 +f 832 844 855 +f 832 855 854 +f 833 856 857 +f 833 857 858 +f 833 858 834 +f 837 859 838 +f 838 859 839 +f 839 860 840 +f 839 859 861 +f 839 861 862 +f 839 862 863 +f 839 863 864 +f 839 864 860 +f 840 860 865 +f 840 865 841 +f 841 865 842 +f 842 866 843 +f 842 865 867 +f 842 867 866 +f 843 866 845 +f 844 845 868 +f 844 868 855 +f 845 866 869 +f 845 869 868 +f 846 847 870 +f 846 870 871 +f 846 871 848 +f 847 851 872 +f 847 872 873 +f 847 873 870 +f 848 871 874 +f 848 874 849 +f 851 875 872 +f 851 852 876 +f 851 876 875 +f 852 853 876 +f 853 854 877 +f 853 877 878 +f 853 878 876 +f 854 855 879 +f 854 879 877 +f 855 868 879 +f 856 880 857 +f 857 880 881 +f 860 882 865 +f 860 864 883 +f 860 883 882 +f 862 884 863 +f 863 884 885 +f 863 885 864 +f 864 885 883 +f 865 882 867 +f 866 867 886 +f 866 886 869 +f 867 882 887 +f 867 887 886 +f 868 869 888 +f 868 888 879 +f 869 886 889 +f 869 889 890 +f 869 890 888 +f 870 873 891 +f 870 891 892 +f 870 892 871 +f 871 893 894 +f 871 894 895 +f 871 895 874 +f 871 892 893 +f 872 891 873 +f 872 875 896 +f 872 896 891 +f 875 876 896 +f 876 878 897 +f 876 897 898 +f 876 898 896 +f 877 879 899 +f 877 899 897 +f 877 897 878 +f 879 888 900 +f 879 900 901 +f 879 901 899 +f 880 902 903 +f 880 903 904 +f 880 904 881 +f 882 883 905 +f 882 905 887 +f 883 885 906 +f 883 906 905 +f 884 907 885 +f 885 907 908 +f 885 908 909 +f 885 909 910 +f 885 910 906 +f 886 887 889 +f 887 905 911 +f 887 911 912 +f 887 912 889 +f 888 890 913 +f 888 913 900 +f 889 912 914 +f 889 914 915 +f 889 915 913 +f 889 913 890 +f 891 896 916 +f 891 916 917 +f 891 917 892 +f 892 917 918 +f 892 918 893 +f 893 919 894 +f 893 918 919 +f 894 919 920 +f 896 898 921 +f 896 921 916 +f 897 899 922 +f 897 922 923 +f 897 923 898 +f 898 923 921 +f 899 901 924 +f 899 924 922 +f 900 913 925 +f 900 925 926 +f 900 926 901 +f 901 926 924 +f 902 927 928 +f 902 928 929 +f 902 929 930 +f 902 930 903 +f 905 906 931 +f 905 931 911 +f 906 910 932 +f 906 932 931 +f 908 933 909 +f 909 933 934 +f 909 934 910 +f 910 934 935 +f 910 935 932 +f 911 936 914 +f 911 914 912 +f 911 931 936 +f 913 915 937 +f 913 937 925 +f 914 936 938 +f 914 938 939 +f 914 939 915 +f 915 939 937 +f 916 940 917 +f 916 921 941 +f 916 941 940 +f 917 942 918 +f 917 940 942 +f 918 942 943 +f 918 943 919 +f 919 944 920 +f 919 943 944 +f 920 944 945 +f 921 923 946 +f 921 946 941 +f 922 947 923 +f 922 924 948 +f 922 948 947 +f 923 947 946 +f 924 926 949 +f 924 949 948 +f 925 950 926 +f 925 937 951 +f 925 951 950 +f 926 950 949 +f 927 952 928 +f 928 952 953 +f 928 953 954 +f 931 932 955 +f 931 955 936 +f 932 935 956 +f 932 956 955 +f 933 957 935 +f 933 935 934 +f 935 957 958 +f 935 958 956 +f 936 955 959 +f 936 959 938 +f 937 939 960 +f 937 960 951 +f 938 961 939 +f 938 959 962 +f 938 962 961 +f 939 961 960 +f 940 941 963 +f 940 963 964 +f 940 964 942 +f 941 946 965 +f 941 965 963 +f 942 966 943 +f 942 964 966 +f 943 966 967 +f 943 967 944 +f 944 968 945 +f 944 967 968 +f 945 968 969 +f 946 970 965 +f 946 947 970 +f 947 948 971 +f 947 971 970 +f 948 972 971 +f 948 949 972 +f 949 950 973 +f 949 973 972 +f 950 974 973 +f 950 951 974 +f 951 960 975 +f 951 975 974 +f 955 977 959 +f 955 956 977 +f 956 958 978 +f 956 978 979 +f 956 979 977 +f 959 977 980 +f 959 980 962 +f 960 981 975 +f 960 961 981 +f 961 962 982 +f 961 982 981 +f 962 980 983 +f 962 983 982 +f 963 984 964 +f 963 965 985 +f 963 985 984 +f 964 984 986 +f 964 986 966 +f 965 970 987 +f 965 987 985 +f 966 986 988 +f 966 988 967 +f 967 988 989 +f 967 989 968 +f 968 989 990 +f 968 990 969 +f 969 990 991 +f 970 971 992 +f 970 992 987 +f 971 993 992 +f 971 972 993 +f 972 994 993 +f 972 973 994 +f 973 974 995 +f 973 995 994 +f 974 975 996 +f 974 996 995 +f 975 997 996 +f 975 981 997 +f 976 998 999 +f 977 1000 1001 +f 977 1001 980 +f 977 979 1002 +f 977 1002 1000 +f 978 1002 979 +f 980 1003 1004 +f 980 1004 983 +f 980 1001 1003 +f 981 982 1005 +f 981 1005 997 +f 982 983 1006 +f 982 1006 1005 +f 983 1007 1008 +f 983 1008 1009 +f 983 1009 1006 +f 983 1004 1007 +f 984 1010 1011 +f 984 1011 986 +f 984 985 1010 +f 985 987 1012 +f 985 1012 1010 +f 986 1011 1013 +f 986 1013 988 +f 987 1014 1012 +f 987 992 1014 +f 988 1013 1015 +f 988 1015 989 +f 989 1016 990 +f 989 1015 1016 +f 990 1016 1017 +f 990 1017 991 +f 991 1017 1018 +f 992 993 1019 +f 992 1019 1014 +f 993 1020 1019 +f 993 994 1020 +f 994 1021 1020 +f 994 995 1021 +f 995 996 1022 +f 995 1022 1021 +f 996 1023 1022 +f 996 997 1023 +f 997 1024 1023 +f 997 1005 1024 +f 998 1025 999 +f 999 1025 1026 +f 1003 1007 1004 +f 1005 1006 1027 +f 1005 1027 1024 +f 1006 1009 1027 +f 1008 1028 1009 +f 1009 1028 1027 +f 1010 1012 1029 +f 1010 1029 1030 +f 1010 1030 1011 +f 1011 1030 1031 +f 1011 1031 1013 +f 1012 1014 1032 +f 1012 1032 1029 +f 1013 1031 1033 +f 1013 1033 1015 +f 1014 1034 1032 +f 1014 1019 1034 +f 1015 1033 1035 +f 1015 1035 1016 +f 1016 1036 1017 +f 1016 1035 1036 +f 1017 1036 1037 +f 1017 1037 1018 +f 1018 1037 1038 +f 1019 1039 1034 +f 1019 1020 1039 +f 1020 1021 1040 +f 1020 1040 1039 +f 1021 1022 1040 +f 1022 1041 1040 +f 1022 1023 1041 +f 1023 1024 1042 +f 1023 1042 1041 +f 1024 1027 1043 +f 1024 1043 1042 +f 1025 1044 1045 +f 1025 1045 1026 +f 1027 1028 1046 +f 1027 1046 1047 +f 1027 1047 1048 +f 1027 1048 1049 +f 1027 1049 1043 +f 1029 1032 1050 +f 1029 1050 1051 +f 1029 1051 1030 +f 1030 1051 1052 +f 1030 1052 1031 +f 1031 1052 1053 +f 1031 1053 1033 +f 1032 1054 1050 +f 1032 1034 1054 +f 1033 1053 1055 +f 1033 1055 1035 +f 1034 1039 1056 +f 1034 1056 1054 +f 1035 1055 1057 +f 1035 1057 1036 +f 1036 1057 1058 +f 1036 1058 1037 +f 1037 1058 1059 +f 1037 1059 1038 +f 1038 1059 1060 +f 1039 1061 1056 +f 1039 1040 1061 +f 1040 1041 1062 +f 1040 1062 1061 +f 1041 1063 1062 +f 1041 1042 1063 +f 1042 1043 1064 +f 1042 1064 1063 +f 1043 1049 1065 +f 1043 1065 1064 +f 1044 1066 1045 +f 1045 1066 1067 +f 1048 1065 1049 +f 1050 1054 1068 +f 1050 1068 1069 +f 1050 1069 1051 +f 1051 1069 1070 +f 1051 1070 1052 +f 1052 1070 1071 +f 1052 1071 1053 +f 1053 1071 1072 +f 1053 1072 1055 +f 1054 1073 1068 +f 1054 1056 1073 +f 1055 1072 1074 +f 1055 1074 1057 +f 1056 1061 1075 +f 1056 1075 1073 +f 1057 1074 1058 +f 1058 1076 1059 +f 1058 1074 1076 +f 1059 1076 1077 +f 1059 1077 1060 +f 1060 1077 1078 +f 1061 1079 1075 +f 1061 1062 1079 +f 1062 1063 1080 +f 1062 1080 1079 +f 1063 1064 1081 +f 1063 1081 1080 +f 1064 1065 1082 +f 1064 1082 1083 +f 1064 1083 1084 +f 1064 1084 1081 +f 1066 1085 1067 +f 1067 1085 1086 +f 1068 1073 1087 +f 1068 1087 1088 +f 1068 1088 1069 +f 1069 1088 1089 +f 1069 1089 1070 +f 1070 1089 1090 +f 1070 1090 1071 +f 1071 1090 1091 +f 1071 1091 1072 +f 1072 1091 1092 +f 1072 1092 1074 +f 1073 1093 1087 +f 1073 1075 1093 +f 1074 1092 1094 +f 1074 1094 1076 +f 1075 1095 1093 +f 1075 1079 1095 +f 1076 1094 1096 +f 1076 1096 1077 +f 1077 1096 1097 +f 1077 1097 1078 +f 1078 1097 1098 +f 1079 1080 1099 +f 1079 1099 1095 +f 1080 1100 1099 +f 1080 1081 1100 +f 1081 1084 1101 +f 1081 1101 1102 +f 1081 1102 1103 +f 1081 1103 1104 +f 1081 1104 1100 +f 1083 1101 1084 +f 1085 1105 1086 +f 1086 1105 1106 +f 1087 1107 1108 +f 1087 1108 1088 +f 1087 1093 1107 +f 1088 1108 1089 +f 1089 1108 1109 +f 1089 1109 1090 +f 1090 1109 1110 +f 1090 1110 1091 +f 1091 1110 1111 +f 1091 1111 1092 +f 1092 1111 1112 +f 1092 1112 1094 +f 1093 1095 1113 +f 1093 1113 1107 +f 1094 1114 1096 +f 1094 1112 1114 +f 1095 1115 1113 +f 1095 1099 1115 +f 1096 1116 1097 +f 1096 1114 1116 +f 1097 1116 1117 +f 1097 1117 1098 +f 1098 1117 1118 +f 1099 1100 1119 +f 1099 1119 1115 +f 1100 1104 1120 +f 1100 1120 1119 +f 1104 1121 1120 +f 1105 1122 1106 +f 1106 1122 1123 +f 1107 1124 1125 +f 1107 1125 1108 +f 1107 1113 1124 +f 1108 1125 1126 +f 1108 1126 1109 +f 1109 1126 1127 +f 1109 1127 1110 +f 1110 1127 1128 +f 1110 1128 1111 +f 1111 1128 1129 +f 1111 1129 1112 +f 1112 1129 1130 +f 1112 1130 1114 +f 1113 1115 1131 +f 1113 1131 1124 +f 1114 1130 1132 +f 1114 1132 1133 +f 1114 1133 1116 +f 1115 1134 1131 +f 1115 1119 1134 +f 1116 1133 1135 +f 1116 1135 1117 +f 1117 1135 1118 +f 1118 1135 1136 +f 1119 1120 1121 +f 1119 1121 1137 +f 1119 1137 1138 +f 1119 1138 1134 +f 1122 1139 1123 +f 1123 1139 1141 +f 1123 1141 1140 +f 1124 1131 1142 +f 1124 1142 1143 +f 1124 1143 1125 +f 1125 1143 1144 +f 1125 1144 1126 +f 1126 1144 1145 +f 1126 1145 1127 +f 1127 1145 1146 +f 1127 1146 1128 +f 1128 1146 1129 +f 1129 1146 1147 +f 1129 1147 1130 +f 1130 1147 1148 +f 1130 1148 1132 +f 1131 1149 1142 +f 1131 1134 1149 +f 1132 1148 1150 +f 1132 1150 1133 +f 1133 1150 1151 +f 1133 1151 1135 +f 1134 1138 1152 +f 1134 1152 1149 +f 1135 1151 1153 +f 1135 1153 1154 +f 1135 1154 1136 +f 1138 1155 1152 +f 1140 1141 1157 +f 1140 1157 1156 +f 1142 1158 1159 +f 1142 1159 1160 +f 1142 1160 1143 +f 1142 1149 1158 +f 1143 1161 1162 +f 1143 1162 1144 +f 1143 1160 1161 +f 1144 1162 1163 +f 1144 1163 1145 +f 1145 1163 1164 +f 1145 1164 1146 +f 1146 1164 1165 +f 1146 1165 1166 +f 1146 1166 1147 +f 1147 1166 1167 +f 1147 1167 1148 +f 1148 1167 1168 +f 1148 1168 1150 +f 1149 1152 1155 +f 1149 1155 1169 +f 1149 1169 1170 +f 1149 1170 1158 +f 1150 1168 1171 +f 1150 1171 1172 +f 1150 1172 1151 +f 1151 1172 1173 +f 1151 1173 1153 +f 1156 1157 1175 +f 1156 1175 1176 +f 1156 1176 1174 +f 1158 1177 1178 +f 1158 1178 1161 +f 1158 1161 1159 +f 1159 1161 1160 +f 1161 1178 1162 +f 1162 1178 1163 +f 1163 1178 1179 +f 1163 1179 1164 +f 1164 1179 1180 +f 1164 1180 1165 +f 1165 1180 1181 +f 1165 1181 1166 +f 1166 1181 1167 +f 1167 1181 1182 +f 1167 1182 1168 +f 1168 1182 1171 +f 1174 1176 1184 +f 1174 1184 1185 +f 1174 1185 1183 +f 1177 1186 1178 +f 1178 1186 1179 +f 1180 1187 1188 +f 1180 1188 1181 +f 1183 1185 1188 +f 1183 1188 1187 \ No newline at end of file diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link1.obj.convex.stl b/src/experiments/assets/robots/xarm7/meshes/collision/link1.obj.convex.stl new file mode 100644 index 0000000000000000000000000000000000000000..d5fe0e606c0c2f71d6ab1ac92faf4213f3723cfc --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link1.obj.convex.stl @@ -0,0 +1,2194 @@ +solid AssimpScene + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0324796103 0.0752897337 -0.0346534885 + vertex 0.0149216605 0.0752897337 -0.0450904183 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0149216605 0.0752897337 -0.0450904183 + vertex 0.00487645017 0.0752897337 -0.047244519 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.00487645017 0.0752897337 -0.047244519 + vertex -0.0154022705 0.0752897337 -0.0449283794 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex -0.0154022705 0.0752897337 -0.0449283794 + vertex -0.0328472406 0.0752897337 -0.034300819 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex -0.0328472406 0.0752897337 -0.034300819 + vertex -0.0394561887 0.0752897337 -0.0264373813 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex -0.0394561887 0.0752897337 -0.0264373813 + vertex -0.0442104824 0.0752897337 -0.0173443798 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex -0.0442104824 0.0752897337 -0.0173443798 + vertex -0.0469124317 0.0752897337 -0.00743168034 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex -0.0469124317 0.0752897337 -0.00743168034 + vertex -0.0474114008 0.0752952695 0.00282415003 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex -0.0474114008 0.0752952695 0.00282415003 + vertex -0.0456979685 0.0752897337 0.0129465498 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex -0.0456979685 0.0752897337 0.0129465498 + vertex -0.0418474637 0.0752897337 0.0224684626 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex -0.0418474637 0.0752897337 0.0224684626 + vertex -0.0360293314 0.0752897337 0.0309419092 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex -0.0360293314 0.0752897337 0.0309419092 + vertex -0.0285354294 0.0752897337 0.0379665904 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex -0.0285354294 0.0752897337 0.0379665904 + vertex -0.019714091 0.0752897337 0.0432088748 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex -0.019714091 0.0752897337 0.0432088748 + vertex -0.00996072032 0.0752897337 0.0464400426 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex -0.00996072032 0.0752897337 0.0464400426 + vertex 0.000244539988 0.0752897337 0.0474980325 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.000244539988 0.0752897337 0.0474980325 + vertex 0.0104497997 0.0752897337 0.0463256612 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0104497997 0.0752897337 0.0463256612 + vertex 0.0201655123 0.0752897337 0.0429991893 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0201655123 0.0752897337 0.0429991893 + vertex 0.0289397817 0.0752897337 0.0376520492 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0289397817 0.0752897337 0.0376520492 + vertex 0.0363583639 0.0752897337 0.0305511206 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0363583639 0.0752897337 0.0305511206 + vertex 0.0420823544 0.0752897337 0.0220204797 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0420823544 0.0752897337 0.0220204797 + vertex 0.0458292887 0.0752897337 0.0124604404 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0458292887 0.0752897337 0.0124604404 + vertex 0.0474391617 0.0752897337 0.00230945996 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0474391617 0.0752897337 0.00230945996 + vertex 0.0468272343 0.0752897337 -0.00792731997 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0468272343 0.0752897337 -0.00792731997 + vertex 0.0440311395 0.0752897337 -0.0178114194 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0455346741 -0.0328279883 -0.0134936711 + vertex 0.0443305783 -0.0354239382 -0.00276125991 + vertex 0.0387367941 -0.0429544188 -0.00230375002 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0455346741 -0.0328279883 -0.0134936711 + vertex 0.0387367941 -0.0429544188 -0.00230375002 + vertex 0.034910731 -0.0318192616 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0324796103 0.0752897337 -0.0346534885 + vertex 0.00950352103 0.0464633405 -0.111994028 + vertex 0.0149216605 0.0752897337 -0.0450904183 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0328472406 0.0752897337 -0.034300819 + vertex -0.0154022705 0.0752897337 -0.0449283794 + vertex -0.0145429308 0.0453220606 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0234094504 -0.0411207192 -0.111994028 + vertex 0.034910731 -0.0318192616 -0.111994028 + vertex 0.0387367941 -0.0429544188 -0.00230375002 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0234094504 -0.0411207192 -0.111994028 + vertex 0.0387367941 -0.0429544188 -0.00230375002 + vertex 0.0264114924 -0.0509408489 -0.00158889988 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0234094504 -0.0411207192 -0.111994028 + vertex 0.0264114924 -0.0509408489 -0.00158889988 + vertex 0.00948487967 -0.0464657471 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0472602136 -0.00119850005 0.00853350013 + vertex 0.0463026315 -0.0280037709 0.00220462005 + vertex 0.048360005 -0.0166786406 -0.00796542969 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0472602136 -0.00119850005 0.00853350013 + vertex 0.048360005 -0.0166786406 -0.00796542969 + vertex 0.0474391617 0.0752897337 0.00230945996 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0472602136 -0.00119850005 0.00853350013 + vertex 0.0474391617 0.0752897337 0.00230945996 + vertex 0.0458292887 0.0752897337 0.0124604404 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.0219131503 -0.0529484786 0.000851150078 + vertex -0.0317164995 -0.0485360883 0.00464467006 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.0317164995 -0.0485360883 0.00464467006 + vertex -0.0267432407 -0.0394848883 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0267432407 -0.0394848883 -0.111994028 + vertex -0.0389504991 -0.0430426709 -0.00208452996 + vertex -0.0360169597 -0.0313627496 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0318915136 -0.0478815883 0.00853350013 + vertex 0.0264114924 -0.0509408489 -0.00158889988 + vertex 0.0387367941 -0.0429544188 -0.00230375002 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.000139650001 -0.0363431908 0.0425035693 + vertex 0.00588512979 -0.0279522892 0.0449436195 + vertex -0.00555843068 -0.0279670004 0.0449817441 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.000139650001 -0.0363431908 0.0425035693 + vertex -0.00555843068 -0.0279670004 0.0449817441 + vertex -0.0117589999 -0.0406820402 0.0385003611 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0477792248 0.00252389 -0.111994028 + vertex -0.0464277714 -0.0114948899 -0.111994028 + vertex -0.0474075489 -0.0286362097 -0.0105675207 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0477792248 0.00252389 -0.111994028 + vertex -0.0474075489 -0.0286362097 -0.0105675207 + vertex -0.0483841039 -0.0122368298 -0.00309486012 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0477792248 0.00252389 -0.111994028 + vertex -0.0483841039 -0.0122368298 -0.00309486012 + vertex -0.0474114008 0.0752952695 0.00282415003 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00610320037 -0.0524704717 0.0272055995 + vertex 0.0173855815 -0.053477969 0.0164636597 + vertex 0.0230457392 -0.0493818 0.0221062806 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00610320037 -0.0524704717 0.0272055995 + vertex 0.0230457392 -0.0493818 0.0221062806 + vertex 0.0177932698 -0.0487714186 0.0279585794 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0177932698 -0.0487714186 0.0279585794 + vertex 0.0120762205 -0.0441751778 0.0358601511 + vertex 8.27600015e-05 -0.0484699011 0.0339252688 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0177932698 -0.0487714186 0.0279585794 + vertex 8.27600015e-05 -0.0484699011 0.0339252688 + vertex 0.00610320037 -0.0524704717 0.0272055995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0414908901 -0.0223656204 -0.111994028 + vertex 0.0461044535 -0.00989708956 -0.11200016 + vertex 0.0455346741 -0.0328279883 -0.0134936711 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0414908901 -0.0223656204 -0.111994028 + vertex 0.0455346741 -0.0328279883 -0.0134936711 + vertex 0.034910731 -0.0318192616 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0474391617 0.0752897337 0.00230945996 + vertex 0.048360005 -0.0166786406 -0.00796542969 + vertex 0.0478859507 -0.0249003898 -0.0147708803 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0474391617 0.0752897337 0.00230945996 + vertex 0.0478859507 -0.0249003898 -0.0147708803 + vertex 0.0468966812 0.00489206007 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0424584709 -0.0340119712 0.0110116797 + vertex -0.0390453115 -0.0276801977 0.0229450408 + vertex -0.0410552882 -0.0177228972 0.0228687897 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0424584709 -0.0340119712 0.0110116797 + vertex -0.0410552882 -0.0177228972 0.0228687897 + vertex -0.0459474847 -0.02038504 0.0100680608 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0169356316 -0.0315410309 0.0408736914 + vertex -0.0117589999 -0.0406820402 0.0385003611 + vertex -0.00555843068 -0.0279670004 0.0449817441 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0169356316 -0.0315410309 0.0408736914 + vertex -0.00555843068 -0.0279670004 0.0449817441 + vertex -0.0158358291 -0.0166639294 0.0445242301 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0381355695 0.0278223604 -0.111994028 + vertex 0.0440311395 0.0752897337 -0.0178114194 + vertex 0.0468272343 0.0752897337 -0.00792731997 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0381355695 0.0278223604 -0.111994028 + vertex 0.0468272343 0.0752897337 -0.00792731997 + vertex 0.0448648408 0.0145549299 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0381355695 0.0278223604 -0.111994028 + vertex 0.0314622149 0.0352597311 -0.111994028 + vertex 0.0391638689 0.0752897337 -0.0268567614 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0381355695 0.0278223604 -0.111994028 + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0440311395 0.0752897337 -0.0178114194 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.0267432407 -0.0394848883 -0.111994028 + vertex -0.0360169597 -0.0313627496 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.0360169597 -0.0313627496 -0.111994028 + vertex -0.042410709 -0.0220612809 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.042410709 -0.0220612809 -0.111994028 + vertex -0.0464277714 -0.0114948899 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.0464277714 -0.0114948899 -0.111994028 + vertex -0.0477792248 0.00252389 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.0477792248 0.00252389 -0.111994028 + vertex -0.0458499119 0.0136133693 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.0458499119 0.0136133693 -0.111994028 + vertex -0.041348204 0.0239705294 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.041348204 0.0239705294 -0.111994028 + vertex -0.0345257148 0.0329771601 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.0345257148 0.0329771601 -0.111994028 + vertex -0.0233413223 0.0415558182 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.0233413223 0.0415558182 -0.111994028 + vertex -0.0145429308 0.0453220606 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.0145429308 0.0453220606 -0.111994028 + vertex -0.000348069996 0.0475000106 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.000348069996 0.0475000106 -0.111994028 + vertex 0.00950352103 0.0464633405 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex 0.00950352103 0.0464633405 -0.111994028 + vertex 0.0234187692 0.0411183313 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex 0.0234187692 0.0411183313 -0.111994028 + vertex 0.0314622149 0.0352597311 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex 0.0314622149 0.0352597311 -0.111994028 + vertex 0.0381355695 0.0278223604 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex 0.0381355695 0.0278223604 -0.111994028 + vertex 0.0448648408 0.0145549299 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex 0.0448648408 0.0145549299 -0.111994028 + vertex 0.0468966812 0.00489206007 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex 0.0468966812 0.00489206007 -0.111994028 + vertex 0.0461044535 -0.00989708956 -0.11200016 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex 0.0461044535 -0.00989708956 -0.11200016 + vertex 0.0414908901 -0.0223656204 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex 0.0414908901 -0.0223656204 -0.111994028 + vertex 0.034910731 -0.0318192616 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex 0.034910731 -0.0318192616 -0.111994028 + vertex 0.0234094504 -0.0411207192 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex 0.0234094504 -0.0411207192 -0.111994028 + vertex 0.00948487967 -0.0464657471 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex 0.00948487967 -0.0464657471 -0.111994028 + vertex -0.000348069996 -0.047492899 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0234187692 0.0411183313 -0.111994028 + vertex 0.00950352103 0.0464633405 -0.111994028 + vertex 0.0324796103 0.0752897337 -0.0346534885 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.000348069996 0.0475000106 -0.111994028 + vertex -0.0145429308 0.0453220606 -0.111994028 + vertex -0.0154022705 0.0752897337 -0.0449283794 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.000348069996 0.0475000106 -0.111994028 + vertex 0.00487645017 0.0752897337 -0.047244519 + vertex 0.0149216605 0.0752897337 -0.0450904183 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.000348069996 0.0475000106 -0.111994028 + vertex 0.0149216605 0.0752897337 -0.0450904183 + vertex 0.00950352103 0.0464633405 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0165891815 -0.0544634014 0.00262399996 + vertex -8.78900028e-05 -0.0565519296 0.00634127017 + vertex -0.000348069996 -0.047492899 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0165891815 -0.0544634014 0.00262399996 + vertex -0.000348069996 -0.047492899 -0.111994028 + vertex 0.00948487967 -0.0464657471 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0165891815 -0.0544634014 0.00262399996 + vertex 0.00948487967 -0.0464657471 -0.111994028 + vertex 0.0264114924 -0.0509408489 -0.00158889988 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.042410709 -0.0220612809 -0.111994028 + vertex -0.0440512784 -0.0364976153 -0.00949046016 + vertex -0.0474075489 -0.0286362097 -0.0105675207 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.042410709 -0.0220612809 -0.111994028 + vertex -0.0474075489 -0.0286362097 -0.0105675207 + vertex -0.0464277714 -0.0114948899 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0229181405 -0.0420498773 0.031876009 + vertex -0.0273552425 -0.033364825 0.0338680707 + vertex -0.0322948396 -0.0386229157 0.025661502 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0229181405 -0.0420498773 0.031876009 + vertex -0.0322948396 -0.0386229157 0.025661502 + vertex -0.0279904697 -0.0457489304 0.0229259804 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0229181405 -0.0420498773 0.031876009 + vertex -0.0279904697 -0.0457489304 0.0229259804 + vertex -0.0176751409 -0.0488228984 0.0280920193 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0117589999 -0.0406820402 0.0385003611 + vertex -0.0169356316 -0.0315410309 0.0408736914 + vertex -0.0273552425 -0.033364825 0.0338680707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0117589999 -0.0406820402 0.0385003611 + vertex -0.0273552425 -0.033364825 0.0338680707 + vertex -0.0229181405 -0.0420498773 0.031876009 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0227190424 -0.0520365871 0.0144334612 + vertex -0.0219131503 -0.0529484786 0.000851150078 + vertex -0.0114082098 -0.0556179807 0.00410137977 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0227190424 -0.0520365871 0.0144334612 + vertex -0.0114082098 -0.0556179807 0.00410137977 + vertex -0.0117021212 -0.0553017594 0.0137281409 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00595150003 -0.055220861 0.0190943405 + vertex -0.0059945602 -0.0540883504 0.0233453605 + vertex -0.0117021212 -0.0553017594 0.0137281409 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00595150003 -0.055220861 0.0190943405 + vertex -0.0117021212 -0.0553017594 0.0137281409 + vertex -8.78900028e-05 -0.0565519296 0.00634127017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -8.78900028e-05 -0.0565519296 0.00634127017 + vertex 0.0165891815 -0.0544634014 0.00262399996 + vertex 0.0173855815 -0.053477969 0.0164636597 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -8.78900028e-05 -0.0565519296 0.00634127017 + vertex 0.0173855815 -0.053477969 0.0164636597 + vertex 0.00595150003 -0.055220861 0.0190943405 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00595150003 -0.055220861 0.0190943405 + vertex 0.0173855815 -0.053477969 0.0164636597 + vertex 0.00610320037 -0.0524704717 0.0272055995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00595150003 -0.055220861 0.0190943405 + vertex 0.00610320037 -0.0524704717 0.0272055995 + vertex -0.0059945602 -0.0540883504 0.0233453605 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0233413223 0.0415558182 -0.111994028 + vertex -0.0328472406 0.0752897337 -0.034300819 + vertex -0.0145429308 0.0453220606 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0442262925 -0.0228265692 0.01418564 + vertex 0.0463026315 -0.0280037709 0.00220462005 + vertex 0.0472602136 -0.00119850005 0.00853350013 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.041348204 0.0239705294 -0.111994028 + vertex -0.0442104824 0.0752897337 -0.0173443798 + vertex -0.0345257148 0.0329771601 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0317164995 -0.0485360883 0.00464467006 + vertex -0.0219131503 -0.0529484786 0.000851150078 + vertex -0.0227190424 -0.0520365871 0.0144334612 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0317164995 -0.0485360883 0.00464467006 + vertex -0.0389504991 -0.0430426709 -0.00208452996 + vertex -0.0267432407 -0.0394848883 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0418474637 0.0752897337 0.0224684626 + vertex -0.0444968939 -0.00530201988 0.0176646207 + vertex -0.0410552882 -0.0177228972 0.0228687897 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0418474637 0.0752897337 0.0224684626 + vertex -0.0410552882 -0.0177228972 0.0228687897 + vertex -0.0386755615 7.37399896e-05 0.0284732804 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0265209209 -0.0246429984 0.0375090912 + vertex -0.0158358291 -0.0166639294 0.0445242301 + vertex -0.0241696294 -0.00469900016 0.0414551087 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0265209209 -0.0246429984 0.0375090912 + vertex -0.0241696294 -0.00469900016 0.0414551087 + vertex -0.0335558206 -0.0122221196 0.0336774513 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0265209209 -0.0246429984 0.0375090912 + vertex -0.0273552425 -0.033364825 0.0338680707 + vertex -0.0169356316 -0.0315410309 0.0408736914 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0265209209 -0.0246429984 0.0375090912 + vertex -0.0169356316 -0.0315410309 0.0408736914 + vertex -0.0158358291 -0.0166639294 0.0445242301 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.000158609997 -0.0184877198 0.0470881909 + vertex -0.0158358291 -0.0166639294 0.0445242301 + vertex -0.00555843068 -0.0279670004 0.0449817441 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.000158609997 -0.0184877198 0.0470881909 + vertex -0.00555843068 -0.0279670004 0.0449817441 + vertex 0.00588512979 -0.0279522892 0.0449436195 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.000158609997 -0.0184877198 0.0470881909 + vertex 0.01035068 -0.0066331001 0.0468308516 + vertex -2.57000033e-06 0.00276529999 0.0480889902 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.03246985 -0.0436383411 0.0194279402 + vertex 0.0279948227 -0.0404025912 0.0287973508 + vertex 0.0177932698 -0.0487714186 0.0279585794 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.03246985 -0.0436383411 0.0194279402 + vertex 0.0177932698 -0.0487714186 0.0279585794 + vertex 0.0230457392 -0.0493818 0.0221062806 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0230457392 -0.0493818 0.0221062806 + vertex 0.0318915136 -0.0478815883 0.00853350013 + vertex 0.03246985 -0.0436383411 0.0194279402 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0456979685 0.0752897337 0.0129465498 + vertex -0.0444968939 -0.00530201988 0.0176646207 + vertex -0.0418474637 0.0752897337 0.0224684626 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0289397817 0.0752897337 0.0376520492 + vertex 0.0201655123 0.0752897337 0.0429991893 + vertex 0.0199833792 -0.00547851995 0.0436187498 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0289397817 0.0752897337 0.0376520492 + vertex 0.0199833792 -0.00547851995 0.0436187498 + vertex 0.0256909411 -0.0147666 0.0398061685 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0289397817 0.0752897337 0.0376520492 + vertex 0.0256909411 -0.0147666 0.0398061685 + vertex 0.0324034803 -0.0025001599 0.0354216993 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0289397817 0.0752897337 0.0376520492 + vertex 0.0324034803 -0.0025001599 0.0354216993 + vertex 0.0363583639 0.0752897337 0.0305511206 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.019714091 0.0752897337 0.0432088748 + vertex -0.0285354294 0.0752897337 0.0379665904 + vertex -0.0241696294 -0.00469900016 0.0414551087 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0360293314 0.0752897337 0.0309419092 + vertex -0.0418474637 0.0752897337 0.0224684626 + vertex -0.0386755615 7.37399896e-05 0.0284732804 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0104497997 0.0752897337 0.0463256612 + vertex 0.000244539988 0.0752897337 0.0474980325 + vertex -2.57000033e-06 0.00276529999 0.0480889902 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0104497997 0.0752897337 0.0463256612 + vertex -2.57000033e-06 0.00276529999 0.0480889902 + vertex 0.01035068 -0.0066331001 0.0468308516 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.01035068 -0.0066331001 0.0468308516 + vertex 0.0199833792 -0.00547851995 0.0436187498 + vertex 0.0201655123 0.0752897337 0.0429991893 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.01035068 -0.0066331001 0.0468308516 + vertex 0.0201655123 0.0752897337 0.0429991893 + vertex 0.0104497997 0.0752897337 0.0463256612 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0478859507 -0.0249003898 -0.0147708803 + vertex 0.0461044535 -0.00989708956 -0.11200016 + vertex 0.0468966812 0.00489206007 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0478859507 -0.0249003898 -0.0147708803 + vertex 0.048360005 -0.0166786406 -0.00796542969 + vertex 0.0463026315 -0.0280037709 0.00220462005 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0478859507 -0.0249003898 -0.0147708803 + vertex 0.0463026315 -0.0280037709 0.00220462005 + vertex 0.0443305783 -0.0354239382 -0.00276125991 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0478859507 -0.0249003898 -0.0147708803 + vertex 0.0443305783 -0.0354239382 -0.00276125991 + vertex 0.0455346741 -0.0328279883 -0.0134936711 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0478859507 -0.0249003898 -0.0147708803 + vertex 0.0455346741 -0.0328279883 -0.0134936711 + vertex 0.0461044535 -0.00989708956 -0.11200016 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0469124317 0.0752897337 -0.00743168034 + vertex -0.0458499119 0.0136133693 -0.111994028 + vertex -0.0477792248 0.00252389 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0469124317 0.0752897337 -0.00743168034 + vertex -0.0477792248 0.00252389 -0.111994028 + vertex -0.0474114008 0.0752952695 0.00282415003 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0469124317 0.0752897337 -0.00743168034 + vertex -0.0442104824 0.0752897337 -0.0173443798 + vertex -0.041348204 0.0239705294 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0469124317 0.0752897337 -0.00743168034 + vertex -0.041348204 0.0239705294 -0.111994028 + vertex -0.0458499119 0.0136133693 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0468272343 0.0752897337 -0.00792731997 + vertex 0.0474391617 0.0752897337 0.00230945996 + vertex 0.0468966812 0.00489206007 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0468272343 0.0752897337 -0.00792731997 + vertex 0.0468966812 0.00489206007 -0.111994028 + vertex 0.0448648408 0.0145549299 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0256909411 -0.0147666 0.0398061685 + vertex 0.0272079017 -0.0291068703 0.0356504507 + vertex 0.0349538699 -0.0214513708 0.0305701997 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0256909411 -0.0147666 0.0398061685 + vertex 0.0349538699 -0.0214513708 0.0305701997 + vertex 0.0324034803 -0.0025001599 0.0354216993 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0256909411 -0.0147666 0.0398061685 + vertex 0.0161435697 -0.0166271608 0.0444098599 + vertex 0.0172149297 -0.0314969085 0.0407497846 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0256909411 -0.0147666 0.0398061685 + vertex 0.0172149297 -0.0314969085 0.0407497846 + vertex 0.0272079017 -0.0291068703 0.0356504507 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00841221027 0.00299327006 0.0473455377 + vertex -0.0158358291 -0.0166639294 0.0445242301 + vertex 0.000158609997 -0.0184877198 0.0470881909 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00841221027 0.00299327006 0.0473455377 + vertex 0.000158609997 -0.0184877198 0.0470881909 + vertex -2.57000033e-06 0.00276529999 0.0480889902 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00841221027 0.00299327006 0.0473455377 + vertex -2.57000033e-06 0.00276529999 0.0480889902 + vertex 0.000244539988 0.0752897337 0.0474980325 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00841221027 0.00299327006 0.0473455377 + vertex 0.000244539988 0.0752897337 0.0474980325 + vertex -0.00996072032 0.0752897337 0.0464400426 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.011939141 -0.0472564995 0.0330388397 + vertex -0.0117589999 -0.0406820402 0.0385003611 + vertex -0.0229181405 -0.0420498773 0.031876009 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.011939141 -0.0472564995 0.0330388397 + vertex -0.0229181405 -0.0420498773 0.031876009 + vertex -0.0176751409 -0.0488228984 0.0280920193 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0229414497 -0.0385714397 0.0342874601 + vertex 0.0272079017 -0.0291068703 0.0356504507 + vertex 0.0172149297 -0.0314969085 0.0407497846 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0229414497 -0.0385714397 0.0342874601 + vertex 0.0120762205 -0.0441751778 0.0358601511 + vertex 0.0177932698 -0.0487714186 0.0279585794 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0229414497 -0.0385714397 0.0342874601 + vertex 0.0177932698 -0.0487714186 0.0279585794 + vertex 0.0279948227 -0.0404025912 0.0287973508 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0161435697 -0.0166271608 0.0444098599 + vertex 0.0199833792 -0.00547851995 0.0436187498 + vertex 0.01035068 -0.0066331001 0.0468308516 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0161435697 -0.0166271608 0.0444098599 + vertex 0.01035068 -0.0066331001 0.0468308516 + vertex 0.000158609997 -0.0184877198 0.0470881909 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0161435697 -0.0166271608 0.0444098599 + vertex 0.000158609997 -0.0184877198 0.0470881909 + vertex 0.00588512979 -0.0279522892 0.0449436195 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0161435697 -0.0166271608 0.0444098599 + vertex 0.00588512979 -0.0279522892 0.0449436195 + vertex 0.0172149297 -0.0314969085 0.0407497846 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0161435697 -0.0166271608 0.0444098599 + vertex 0.0256909411 -0.0147666 0.0398061685 + vertex 0.0199833792 -0.00547851995 0.0436187498 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0472179316 -0.00131616998 0.00881944038 + vertex -0.0459474847 -0.02038504 0.0100680608 + vertex -0.0444968939 -0.00530201988 0.0176646207 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0472179316 -0.00131616998 0.00881944038 + vertex -0.0444968939 -0.00530201988 0.0176646207 + vertex -0.0456979685 0.0752897337 0.0129465498 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0472179316 -0.00131616998 0.00881944038 + vertex -0.0456979685 0.0752897337 0.0129465498 + vertex -0.0474114008 0.0752952695 0.00282415003 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0472179316 -0.00131616998 0.00881944038 + vertex -0.0474114008 0.0752952695 0.00282415003 + vertex -0.0483841039 -0.0122368298 -0.00309486012 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0472179316 -0.00131616998 0.00881944038 + vertex -0.0483841039 -0.0122368298 -0.00309486012 + vertex -0.0463741347 -0.0281287897 0.00247150008 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0472179316 -0.00131616998 0.00881944038 + vertex -0.0463741347 -0.0281287897 0.00247150008 + vertex -0.0459474847 -0.02038504 0.0100680608 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0272079017 -0.0291068703 0.0356504507 + vertex 0.0229414497 -0.0385714397 0.0342874601 + vertex 0.0279948227 -0.0404025912 0.0287973508 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0272079017 -0.0291068703 0.0356504507 + vertex 0.0279948227 -0.0404025912 0.0287973508 + vertex 0.0319483988 -0.0316072218 0.0303509794 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0319483988 -0.0316072218 0.0303509794 + vertex 0.0394383818 -0.0310041998 0.0203239005 + vertex 0.0349538699 -0.0214513708 0.0305701997 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0319483988 -0.0316072218 0.0303509794 + vertex 0.0349538699 -0.0214513708 0.0305701997 + vertex 0.0272079017 -0.0291068703 0.0356504507 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0463741347 -0.0281287897 0.00247150008 + vertex -0.0474075489 -0.0286362097 -0.0105675207 + vertex -0.0444968939 -0.0355342515 -0.00251345034 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0463741347 -0.0281287897 0.00247150008 + vertex -0.0444968939 -0.0355342515 -0.00251345034 + vertex -0.0424584709 -0.0340119712 0.0110116797 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0463741347 -0.0281287897 0.00247150008 + vertex -0.0424584709 -0.0340119712 0.0110116797 + vertex -0.0459474847 -0.02038504 0.0100680608 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0463741347 -0.0281287897 0.00247150008 + vertex -0.0483841039 -0.0122368298 -0.00309486012 + vertex -0.0474075489 -0.0286362097 -0.0105675207 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0118771195 -0.0366667584 0.0405972786 + vertex 0.0120762205 -0.0441751778 0.0358601511 + vertex 0.0229414497 -0.0385714397 0.0342874601 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0118771195 -0.0366667584 0.0405972786 + vertex 0.0229414497 -0.0385714397 0.0342874601 + vertex 0.0172149297 -0.0314969085 0.0407497846 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0118771195 -0.0366667584 0.0405972786 + vertex 0.0172149297 -0.0314969085 0.0407497846 + vertex 0.00588512979 -0.0279522892 0.0449436195 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0118771195 -0.0366667584 0.0405972786 + vertex 0.00588512979 -0.0279522892 0.0449436195 + vertex 0.000139650001 -0.0363431908 0.0425035693 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0388600416 0.00015462999 0.0282254703 + vertex 0.0363583639 0.0752897337 0.0305511206 + vertex 0.0324034803 -0.0025001599 0.0354216993 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0388600416 0.00015462999 0.0282254703 + vertex 0.0324034803 -0.0025001599 0.0354216993 + vertex 0.0349538699 -0.0214513708 0.0305701997 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0388600416 0.00015462999 0.0282254703 + vertex 0.0425860807 -0.00708903978 0.0216773618 + vertex 0.0452267751 0.0335000455 0.0163206793 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0388600416 0.00015462999 0.0282254703 + vertex 0.0452267751 0.0335000455 0.0163206793 + vertex 0.0420823544 0.0752897337 0.0220204797 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0388600416 0.00015462999 0.0282254703 + vertex 0.0420823544 0.0752897337 0.0220204797 + vertex 0.0363583639 0.0752897337 0.0305511206 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0114082098 -0.0556179807 0.00410137977 + vertex -8.78900028e-05 -0.0565519296 0.00634127017 + vertex -0.0117021212 -0.0553017594 0.0137281409 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0114082098 -0.0556179807 0.00410137977 + vertex -0.0219131503 -0.0529484786 0.000851150078 + vertex -0.0141328303 -0.0454480983 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0114082098 -0.0556179807 0.00410137977 + vertex -0.0141328303 -0.0454480983 -0.111994028 + vertex -0.000348069996 -0.047492899 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0114082098 -0.0556179807 0.00410137977 + vertex -0.000348069996 -0.047492899 -0.111994028 + vertex -8.78900028e-05 -0.0565519296 0.00634127017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0176751409 -0.0488228984 0.0280920193 + vertex -0.0279904697 -0.0457489304 0.0229259804 + vertex -0.0278008524 -0.0491464697 0.01575833 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0176751409 -0.0488228984 0.0280920193 + vertex -0.0278008524 -0.0491464697 0.01575833 + vertex -0.0175613705 -0.0524042808 0.0207051486 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0175613705 -0.0524042808 0.0207051486 + vertex -0.0227190424 -0.0520365871 0.0144334612 + vertex -0.0117021212 -0.0553017594 0.0137281409 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0175613705 -0.0524042808 0.0207051486 + vertex -0.0117021212 -0.0553017594 0.0137281409 + vertex -0.0059945602 -0.0540883504 0.0233453605 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0347599015 -0.0215396192 0.0308084805 + vertex -0.0390453115 -0.0276801977 0.0229450408 + vertex -0.0322948396 -0.0386229157 0.025661502 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0347599015 -0.0215396192 0.0308084805 + vertex -0.0322948396 -0.0386229157 0.025661502 + vertex -0.0273552425 -0.033364825 0.0338680707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0347599015 -0.0215396192 0.0308084805 + vertex -0.0273552425 -0.033364825 0.0338680707 + vertex -0.0265209209 -0.0246429984 0.0375090912 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0347599015 -0.0215396192 0.0308084805 + vertex -0.0265209209 -0.0246429984 0.0375090912 + vertex -0.0335558206 -0.0122221196 0.0336774513 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00487645017 0.0752897337 -0.047244519 + vertex -0.000348069996 0.0475000106 -0.111994028 + vertex -0.0154022705 0.0752897337 -0.0449283794 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0278008524 -0.0491464697 0.01575833 + vertex -0.0279904697 -0.0457489304 0.0229259804 + vertex -0.036276862 -0.0431750417 0.012670151 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0278008524 -0.0491464697 0.01575833 + vertex -0.036276862 -0.0431750417 0.012670151 + vertex -0.0317164995 -0.0485360883 0.00464467006 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0278008524 -0.0491464697 0.01575833 + vertex -0.0317164995 -0.0485360883 0.00464467006 + vertex -0.0227190424 -0.0520365871 0.0144334612 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0278008524 -0.0491464697 0.01575833 + vertex -0.0227190424 -0.0520365871 0.0144334612 + vertex -0.0175613705 -0.0524042808 0.0207051486 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.000120689998 -0.0431088507 0.0387291089 + vertex 0.0120762205 -0.0441751778 0.0358601511 + vertex 0.0118771195 -0.0366667584 0.0405972786 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.000120689998 -0.0431088507 0.0387291089 + vertex 0.0118771195 -0.0366667584 0.0405972786 + vertex 0.000139650001 -0.0363431908 0.0425035693 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.000120689998 -0.0431088507 0.0387291089 + vertex 0.000139650001 -0.0363431908 0.0425035693 + vertex -0.0117589999 -0.0406820402 0.0385003611 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0117589999 -0.0406820402 0.0385003611 + vertex -0.011939141 -0.0472564995 0.0330388397 + vertex 8.27600015e-05 -0.0484699011 0.0339252688 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0117589999 -0.0406820402 0.0385003611 + vertex 8.27600015e-05 -0.0484699011 0.0339252688 + vertex 0.000120689998 -0.0431088507 0.0387291089 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.000120689998 -0.0431088507 0.0387291089 + vertex 8.27600015e-05 -0.0484699011 0.0339252688 + vertex 0.0120762205 -0.0441751778 0.0358601511 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0440512784 -0.0364976153 -0.00949046016 + vertex -0.0444968939 -0.0355342515 -0.00251345034 + vertex -0.0474075489 -0.0286362097 -0.0105675207 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0440512784 -0.0364976153 -0.00949046016 + vertex -0.042410709 -0.0220612809 -0.111994028 + vertex -0.0360169597 -0.0313627496 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0440512784 -0.0364976153 -0.00949046016 + vertex -0.0360169597 -0.0313627496 -0.111994028 + vertex -0.0389504991 -0.0430426709 -0.00208452996 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0410552882 -0.0177228972 0.0228687897 + vertex -0.0390453115 -0.0276801977 0.0229450408 + vertex -0.0347599015 -0.0215396192 0.0308084805 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0410552882 -0.0177228972 0.0228687897 + vertex -0.0347599015 -0.0215396192 0.0308084805 + vertex -0.0335558206 -0.0122221196 0.0336774513 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0410552882 -0.0177228972 0.0228687897 + vertex -0.0335558206 -0.0122221196 0.0336774513 + vertex -0.0386755615 7.37399896e-05 0.0284732804 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0410552882 -0.0177228972 0.0228687897 + vertex -0.0444968939 -0.00530201988 0.0176646207 + vertex -0.0459474847 -0.02038504 0.0100680608 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0363242738 -0.0391744673 0.0191038698 + vertex -0.036276862 -0.0431750417 0.012670151 + vertex -0.0279904697 -0.0457489304 0.0229259804 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0363242738 -0.0391744673 0.0191038698 + vertex -0.0279904697 -0.0457489304 0.0229259804 + vertex -0.0322948396 -0.0386229157 0.025661502 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0363242738 -0.0391744673 0.0191038698 + vertex -0.0322948396 -0.0386229157 0.025661502 + vertex -0.0390453115 -0.0276801977 0.0229450408 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0363242738 -0.0391744673 0.0191038698 + vertex -0.0390453115 -0.0276801977 0.0229450408 + vertex -0.0424584709 -0.0340119712 0.0110116797 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0363242738 -0.0391744673 0.0191038698 + vertex -0.0424584709 -0.0340119712 0.0110116797 + vertex -0.0394719653 -0.0417483598 0.0053785895 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0363242738 -0.0391744673 0.0191038698 + vertex -0.0394719653 -0.0417483598 0.0053785895 + vertex -0.036276862 -0.0431750417 0.012670151 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00600404013 -0.050404001 0.0308370795 + vertex 8.27600015e-05 -0.0484699011 0.0339252688 + vertex -0.011939141 -0.0472564995 0.0330388397 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00600404013 -0.050404001 0.0308370795 + vertex -0.011939141 -0.0472564995 0.0330388397 + vertex -0.0176751409 -0.0488228984 0.0280920193 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00600404013 -0.050404001 0.0308370795 + vertex -0.0176751409 -0.0488228984 0.0280920193 + vertex -0.0175613705 -0.0524042808 0.0207051486 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00600404013 -0.050404001 0.0308370795 + vertex -0.0175613705 -0.0524042808 0.0207051486 + vertex -0.0059945602 -0.0540883504 0.0233453605 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00600404013 -0.050404001 0.0308370795 + vertex -0.0059945602 -0.0540883504 0.0233453605 + vertex 0.00610320037 -0.0524704717 0.0272055995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00600404013 -0.050404001 0.0308370795 + vertex 0.00610320037 -0.0524704717 0.0272055995 + vertex 8.27600015e-05 -0.0484699011 0.0339252688 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0165469106 0.00369190006 0.0451437831 + vertex -0.0241696294 -0.00469900016 0.0414551087 + vertex -0.0158358291 -0.0166639294 0.0445242301 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0165469106 0.00369190006 0.0451437831 + vertex -0.0158358291 -0.0166639294 0.0445242301 + vertex -0.00841221027 0.00299327006 0.0473455377 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0165469106 0.00369190006 0.0451437831 + vertex -0.00841221027 0.00299327006 0.0473455377 + vertex -0.00996072032 0.0752897337 0.0464400426 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0165469106 0.00369190006 0.0451437831 + vertex -0.00996072032 0.0752897337 0.0464400426 + vertex -0.019714091 0.0752897337 0.0432088748 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0165469106 0.00369190006 0.0451437831 + vertex -0.019714091 0.0752897337 0.0432088748 + vertex -0.0241696294 -0.00469900016 0.0414551087 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0362906903 -0.0363873094 0.021715492 + vertex 0.0394383818 -0.0310041998 0.0203239005 + vertex 0.0319483988 -0.0316072218 0.0303509794 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0362906903 -0.0363873094 0.021715492 + vertex 0.0319483988 -0.0316072218 0.0303509794 + vertex 0.0279948227 -0.0404025912 0.0287973508 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0362906903 -0.0363873094 0.021715492 + vertex 0.0279948227 -0.0404025912 0.0287973508 + vertex 0.03246985 -0.0436383411 0.0194279402 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0362906903 -0.0363873094 0.021715492 + vertex 0.03246985 -0.0436383411 0.0194279402 + vertex 0.03966593 -0.0387185216 0.0118504399 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0394561887 0.0752897337 -0.0264373813 + vertex -0.0328472406 0.0752897337 -0.034300819 + vertex -0.0233413223 0.0415558182 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0394561887 0.0752897337 -0.0264373813 + vertex -0.0233413223 0.0415558182 -0.111994028 + vertex -0.0345257148 0.0329771601 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0394561887 0.0752897337 -0.0264373813 + vertex -0.0345257148 0.0329771601 -0.111994028 + vertex -0.0442104824 0.0752897337 -0.0173443798 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0223725922 -0.0526469648 0.00999180973 + vertex 0.0264114924 -0.0509408489 -0.00158889988 + vertex 0.0318915136 -0.0478815883 0.00853350013 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0318915136 -0.0478815883 0.00853350013 + vertex 0.0230457392 -0.0493818 0.0221062806 + vertex 0.0173855815 -0.053477969 0.0164636597 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0318915136 -0.0478815883 0.00853350013 + vertex 0.0173855815 -0.053477969 0.0164636597 + vertex 0.0223725922 -0.0526469648 0.00999180973 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0223725922 -0.0526469648 0.00999180973 + vertex 0.0173855815 -0.053477969 0.0164636597 + vertex 0.0165891815 -0.0544634014 0.00262399996 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0223725922 -0.0526469648 0.00999180973 + vertex 0.0165891815 -0.0544634014 0.00262399996 + vertex 0.0264114924 -0.0509408489 -0.00158889988 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0314622149 0.0352597311 -0.111994028 + vertex 0.0234187692 0.0411183313 -0.111994028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0391638689 0.0752897337 -0.0268567614 + vertex 0.0234187692 0.0411183313 -0.111994028 + vertex 0.0324796103 0.0752897337 -0.0346534885 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0411828905 -0.0176125895 0.0226019099 + vertex 0.0425860807 -0.00708903978 0.0216773618 + vertex 0.0388600416 0.00015462999 0.0282254703 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0411828905 -0.0176125895 0.0226019099 + vertex 0.0388600416 0.00015462999 0.0282254703 + vertex 0.0349538699 -0.0214513708 0.0305701997 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0411828905 -0.0176125895 0.0226019099 + vertex 0.0349538699 -0.0214513708 0.0305701997 + vertex 0.0394383818 -0.0310041998 0.0203239005 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0411828905 -0.0176125895 0.0226019099 + vertex 0.0394383818 -0.0310041998 0.0203239005 + vertex 0.0423774906 -0.0314454287 0.0135375103 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0411828905 -0.0176125895 0.0226019099 + vertex 0.0423774906 -0.0314454287 0.0135375103 + vertex 0.0442262925 -0.0228265692 0.01418564 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0411828905 -0.0176125895 0.0226019099 + vertex 0.0442262925 -0.0228265692 0.01418564 + vertex 0.0425860807 -0.00708903978 0.0216773618 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.03966593 -0.0387185216 0.0118504399 + vertex 0.0443305783 -0.0354239382 -0.00276125991 + vertex 0.0463026315 -0.0280037709 0.00220462005 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.03966593 -0.0387185216 0.0118504399 + vertex 0.0463026315 -0.0280037709 0.00220462005 + vertex 0.0423774906 -0.0314454287 0.0135375103 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0423774906 -0.0314454287 0.0135375103 + vertex 0.0463026315 -0.0280037709 0.00220462005 + vertex 0.0442262925 -0.0228265692 0.01418564 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0423774906 -0.0314454287 0.0135375103 + vertex 0.0394383818 -0.0310041998 0.0203239005 + vertex 0.0362906903 -0.0363873094 0.021715492 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0423774906 -0.0314454287 0.0135375103 + vertex 0.0362906903 -0.0363873094 0.021715492 + vertex 0.03966593 -0.0387185216 0.0118504399 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0360347107 -0.0444105119 0.00889568962 + vertex 0.03966593 -0.0387185216 0.0118504399 + vertex 0.03246985 -0.0436383411 0.0194279402 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0360347107 -0.0444105119 0.00889568962 + vertex 0.03246985 -0.0436383411 0.0194279402 + vertex 0.0318915136 -0.0478815883 0.00853350013 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0360347107 -0.0444105119 0.00889568962 + vertex 0.0318915136 -0.0478815883 0.00853350013 + vertex 0.0387367941 -0.0429544188 -0.00230375002 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0360347107 -0.0444105119 0.00889568962 + vertex 0.0387367941 -0.0429544188 -0.00230375002 + vertex 0.0443305783 -0.0354239382 -0.00276125991 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0360347107 -0.0444105119 0.00889568962 + vertex 0.0443305783 -0.0354239382 -0.00276125991 + vertex 0.03966593 -0.0387185216 0.0118504399 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0330637805 0.0335000455 0.0349069908 + vertex -0.0285354294 0.0752897337 0.0379665904 + vertex -0.0360293314 0.0752897337 0.0309419092 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0330637805 0.0335000455 0.0349069908 + vertex -0.0360293314 0.0752897337 0.0309419092 + vertex -0.0386755615 7.37399896e-05 0.0284732804 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0330637805 0.0335000455 0.0349069908 + vertex -0.0386755615 7.37399896e-05 0.0284732804 + vertex -0.0335558206 -0.0122221196 0.0336774513 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0330637805 0.0335000455 0.0349069908 + vertex -0.0335558206 -0.0122221196 0.0336774513 + vertex -0.0241696294 -0.00469900016 0.0414551087 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0330637805 0.0335000455 0.0349069908 + vertex -0.0241696294 -0.00469900016 0.0414551087 + vertex -0.0285354294 0.0752897337 0.0379665904 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0452267751 0.0335000455 0.0163206793 + vertex 0.0425860807 -0.00708903978 0.0216773618 + vertex 0.0442262925 -0.0228265692 0.01418564 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0452267751 0.0335000455 0.0163206793 + vertex 0.0442262925 -0.0228265692 0.01418564 + vertex 0.0472602136 -0.00119850005 0.00853350013 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0452267751 0.0335000455 0.0163206793 + vertex 0.0472602136 -0.00119850005 0.00853350013 + vertex 0.0458292887 0.0752897337 0.0124604404 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0452267751 0.0335000455 0.0163206793 + vertex 0.0458292887 0.0752897337 0.0124604404 + vertex 0.0420823544 0.0752897337 0.0220204797 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0394719653 -0.0417483598 0.0053785895 + vertex -0.0424584709 -0.0340119712 0.0110116797 + vertex -0.0444968939 -0.0355342515 -0.00251345034 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0394719653 -0.0417483598 0.0053785895 + vertex -0.0444968939 -0.0355342515 -0.00251345034 + vertex -0.0440512784 -0.0364976153 -0.00949046016 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0394719653 -0.0417483598 0.0053785895 + vertex -0.0440512784 -0.0364976153 -0.00949046016 + vertex -0.0389504991 -0.0430426709 -0.00208452996 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0394719653 -0.0417483598 0.0053785895 + vertex -0.0389504991 -0.0430426709 -0.00208452996 + vertex -0.0317164995 -0.0485360883 0.00464467006 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0394719653 -0.0417483598 0.0053785895 + vertex -0.0317164995 -0.0485360883 0.00464467006 + vertex -0.036276862 -0.0431750417 0.012670151 + endloop + endfacet + +endsolid AssimpScene diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link2.obj b/src/experiments/assets/robots/xarm7/meshes/collision/link2.obj new file mode 100644 index 0000000000000000000000000000000000000000..b68bc4bcc83a2dba1923ea4e047285ae2c459c7f --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link2.obj @@ -0,0 +1,5064 @@ +# https://github.com/mikedh/trimesh + +o geometry_0 +v 0.00563379 -0.19177605 -0.04182689 0.54509804 0.71372549 0.60000000 +v 0.00225494 -0.15642440 -0.04179413 0.54509804 0.71372549 0.60000000 +v 0.00563379 -0.15642440 -0.04181870 0.54509804 0.71372549 0.60000000 +v 0.00986354 -0.15642440 -0.04094263 0.54509804 0.71372549 0.60000000 +v 0.01311846 -0.15642440 -0.04001744 0.54509804 0.71372549 0.60000000 +v 0.01718298 -0.19177951 -0.03854368 0.54509804 0.71372549 0.60000000 +v -0.00636978 -0.19177605 -0.04172045 0.54509804 0.71372549 0.60000000 +v -0.00636978 -0.15642440 -0.04172045 0.54509804 0.71372549 0.60000000 +v 0.01718298 -0.15642440 -0.03854368 0.54509804 0.71372549 0.60000000 +v 0.02448591 -0.15642440 -0.03394229 0.54509804 0.71372549 0.60000000 +v 0.02734430 -0.19177605 -0.03213284 0.54509804 0.71372549 0.60000000 +v 0.03529160 -0.19177951 -0.02312656 0.54509804 0.71372549 0.60000000 +v -0.01786941 -0.19177951 -0.03823256 0.54509804 0.71372549 0.60000000 +v -0.01786941 -0.15642440 -0.03823256 0.54509804 0.71372549 0.60000000 +v 0.02734430 -0.15642440 -0.03213284 0.54509804 0.71372549 0.60000000 +v 0.03306106 -0.15642440 -0.02566469 0.54509804 0.71372549 0.60000000 +v 0.03529160 -0.15642440 -0.02312656 0.54509804 0.71372549 0.60000000 +v 0.03895132 -0.15642440 -0.01530746 0.54509804 0.71372549 0.60000000 +v 0.04038051 -0.19177605 -0.01224532 0.54509804 0.71372549 0.60000000 +v 0.04219798 -0.19177605 -0.00037339 0.54509804 0.71372549 0.60000000 +v 0.04058704 -0.19177951 0.01152310 0.54509804 0.71372549 0.60000000 +v -0.02791506 -0.19177951 -0.03164979 0.54509804 0.71372549 0.60000000 +v -0.02387532 -0.18060126 -0.03479379 0.54509804 0.71372549 0.60000000 +v -0.02176871 -0.17957688 -0.03615292 0.54509804 0.71372549 0.60000000 +v -0.02131434 -0.17915812 -0.03642311 0.54509804 0.71372549 0.60000000 +v -0.02097563 -0.17861479 -0.03661962 0.54509804 0.71372549 0.60000000 +v -0.02089302 -0.17817873 -0.03666873 0.54509804 0.71372549 0.60000000 +v -0.01909207 -0.15642440 -0.03759394 0.54509804 0.71372549 0.60000000 +v 0.04038051 -0.15642440 -0.01224532 0.54509804 0.71372549 0.60000000 +v 0.04218972 -0.15642440 -0.00037339 0.54509804 0.71372549 0.60000000 +v 0.04104141 -0.15642440 0.00817439 0.54509804 0.71372549 0.60000000 +v 0.04168579 -0.15642440 -0.00371391 0.54509804 0.71372549 0.60000000 +v 0.04058704 -0.15642440 0.01152310 0.54509804 0.71372549 0.60000000 +v 0.03707602 -0.15642440 0.01940769 0.54509804 0.71372549 0.60000000 +v 0.03569640 -0.19177605 0.02249439 0.54509804 0.71372549 0.60000000 +v 0.01786867 -0.19177951 0.03822265 0.54509804 0.71372549 0.60000000 +v -0.04058779 -0.19177951 -0.01153301 0.54509804 0.71372549 0.60000000 +v -0.03569714 -0.19177605 -0.02250430 0.54509804 0.71372549 0.60000000 +v -0.02995559 -0.17894009 -0.02972571 0.54509804 0.71372549 0.60000000 +v -0.02963340 -0.17957688 -0.03004502 0.54509804 0.71372549 0.60000000 +v -0.02831987 -0.18060126 -0.03128134 0.54509804 0.71372549 0.60000000 +v -0.02831987 -0.17575274 -0.03128134 0.54509804 0.71372549 0.60000000 +v -0.02790680 -0.15642440 -0.03164159 0.54509804 0.71372549 0.60000000 +v -0.02722938 -0.15642440 -0.03222291 0.54509804 0.71372549 0.60000000 +v -0.02628760 -0.18097848 -0.03300891 0.54509804 0.71372549 0.60000000 +v -0.02387532 -0.17575274 -0.03479379 0.54509804 0.71372549 0.60000000 +v -0.02176871 -0.17677712 -0.03615292 0.54509804 0.71372549 0.60000000 +v -0.02097563 -0.17773921 -0.03661962 0.54509804 0.71372549 0.60000000 +v -0.01944730 -0.15642440 -0.03738925 0.54509804 0.71372549 0.60000000 +v 0.03569640 -0.15642440 0.02249439 0.54509804 0.71372549 0.60000000 +v 0.02791432 -0.19177605 0.03163987 0.54509804 0.71372549 0.60000000 +v 0.02069401 -0.15642440 0.03637226 0.54509804 0.71372549 0.60000000 +v 0.01786867 -0.15642440 0.03822265 0.54509804 0.71372549 0.60000000 +v 0.00636904 -0.19177605 0.04171054 0.54509804 0.71372549 0.60000000 +v -0.00563453 -0.19177951 0.04181698 0.54509804 0.71372549 0.60000000 +v -0.04038126 -0.19177951 0.01223541 0.54509804 0.71372549 0.60000000 +v -0.04219046 -0.19177605 0.00036348 0.54509804 0.71372549 0.60000000 +v -0.04219873 -0.15642440 0.00036348 0.54509804 0.71372549 0.60000000 +v -0.04104216 -0.15642440 -0.00818430 0.54509804 0.71372549 0.60000000 +v -0.04058779 -0.15642440 -0.01153301 0.54509804 0.71372549 0.60000000 +v -0.03707677 -0.15642440 -0.01941760 0.54509804 0.71372549 0.60000000 +v -0.03569714 -0.15642440 -0.02250430 0.54509804 0.71372549 0.60000000 +v -0.03007951 -0.17817873 -0.02959471 0.54509804 0.71372549 0.60000000 +v -0.02995559 -0.17741736 -0.02972571 0.54509804 0.71372549 0.60000000 +v -0.02963340 -0.17677712 -0.03004502 0.54509804 0.71372549 0.60000000 +v -0.03341704 -0.15642440 -0.02536994 0.54509804 0.71372549 0.60000000 +v -0.02622977 -0.15642440 -0.03295979 0.54509804 0.71372549 0.60000000 +v -0.02628760 -0.17537897 -0.03300891 0.54509804 0.71372549 0.60000000 +v -0.02037256 -0.15642440 -0.03679974 0.54509804 0.71372549 0.60000000 +v 0.02791432 -0.15642440 0.03163987 0.54509804 0.71372549 0.60000000 +v 0.00636904 -0.15642440 0.04171054 0.54509804 0.71372549 0.60000000 +v -0.00225569 -0.15642440 0.04178423 0.54509804 0.71372549 0.60000000 +v -0.00563453 -0.15642440 0.04180879 0.54509804 0.71372549 0.60000000 +v -0.00698937 -0.15642440 0.04157135 0.54509804 0.71372549 0.60000000 +v -0.00898859 -0.17817873 0.04121929 0.54509804 0.71372549 0.60000000 +v -0.00907946 -0.17861824 0.04120291 0.54509804 0.71372549 0.60000000 +v -0.00931904 -0.17899547 0.04114560 0.54509804 0.71372549 0.60000000 +v -0.00997994 -0.17957688 0.04099004 0.54509804 0.71372549 0.60000000 +v -0.01240048 -0.18060126 0.04032685 0.54509804 0.71372549 0.60000000 +v -0.01718373 -0.19177951 0.03853378 0.54509804 0.71372549 0.60000000 +v -0.04038126 -0.15642440 0.01223541 0.54509804 0.71372549 0.60000000 +v -0.04167827 -0.15642440 0.00416250 0.54509804 0.71372549 0.60000000 +v -0.04219046 -0.15642440 0.00082199 0.54509804 0.71372549 0.60000000 +v -0.03529234 -0.19177951 0.02311664 0.54509804 0.71372549 0.60000000 +v -0.03895207 -0.15642440 0.01529755 0.54509804 0.71372549 0.60000000 +v -0.00739417 -0.15642440 0.04148129 0.54509804 0.71372549 0.60000000 +v -0.00907946 -0.17773921 0.04120291 0.54509804 0.71372549 0.60000000 +v -0.00946774 -0.17719587 0.04111285 0.54509804 0.71372549 0.60000000 +v -0.00997994 -0.17677712 0.04099004 0.54509804 0.71372549 0.60000000 +v -0.01240048 -0.17575274 0.04032685 0.54509804 0.71372549 0.60000000 +v -0.01523408 -0.18097848 0.03934434 0.54509804 0.71372549 0.60000000 +v -0.01636587 -0.15642440 0.03887765 0.54509804 0.71372549 0.60000000 +v -0.01739852 -0.15642440 0.03843552 0.54509804 0.71372549 0.60000000 +v -0.01768766 -0.17575274 0.03830453 0.54509804 0.71372549 0.60000000 +v -0.01768766 -0.18060126 0.03830453 0.54509804 0.71372549 0.60000000 +v -0.01930686 -0.17957688 0.03751033 0.54509804 0.71372549 0.60000000 +v -0.01971166 -0.17894009 0.03730564 0.54509804 0.71372549 0.60000000 +v -0.02734504 -0.19177605 0.03212293 0.54509804 0.71372549 0.60000000 +v -0.03306181 -0.15642440 0.02565478 0.54509804 0.71372549 0.60000000 +v -0.03529234 -0.15642440 0.02311664 0.54509804 0.71372549 0.60000000 +v -0.00845987 -0.15642440 0.04119473 0.54509804 0.71372549 0.60000000 +v -0.01523408 -0.17537897 0.03934434 0.54509804 0.71372549 0.60000000 +v -0.01930686 -0.17677712 0.03751033 0.54509804 0.71372549 0.60000000 +v -0.02431317 -0.15642440 0.03418619 0.54509804 0.71372549 0.60000000 +v -0.01986863 -0.17817873 0.03722377 0.54509804 0.71372549 0.60000000 +v -0.01971166 -0.17741390 0.03730564 0.54509804 0.71372549 0.60000000 +v -0.02734504 -0.15642440 0.03212293 0.54509804 0.71372549 0.60000000 +v -0.02443709 -0.15642440 0.03410432 0.54509804 0.71372549 0.60000000 +f 1 2 3 +f 1 3 4 +f 1 4 5 +f 1 5 6 +f 1 6 7 +f 1 7 8 +f 1 8 2 +f 2 8 14 +f 2 14 28 +f 2 28 49 +f 2 49 69 +f 2 69 67 +f 2 67 44 +f 2 44 43 +f 2 43 66 +f 2 66 62 +f 2 62 61 +f 2 61 60 +f 2 60 59 +f 2 59 58 +f 2 58 83 +f 2 83 82 +f 2 82 81 +f 2 81 85 +f 2 85 100 +f 2 100 99 +f 2 99 107 +f 2 107 108 +f 2 108 104 +f 2 104 93 +f 2 93 92 +f 2 92 101 +f 2 101 86 +f 2 86 74 +f 2 74 73 +f 2 73 72 +f 2 72 71 +f 2 71 53 +f 2 53 52 +f 2 52 70 +f 2 70 50 +f 2 50 34 +f 2 34 33 +f 2 33 31 +f 2 31 30 +f 2 30 32 +f 2 32 29 +f 2 29 18 +f 2 18 17 +f 2 17 16 +f 2 16 15 +f 2 15 10 +f 2 10 9 +f 2 9 5 +f 2 5 4 +f 2 4 3 +f 5 9 6 +f 6 9 10 +f 6 10 11 +f 6 11 12 +f 6 12 21 +f 6 21 36 +f 6 36 55 +f 6 55 80 +f 6 80 84 +f 6 84 56 +f 6 56 37 +f 6 37 22 +f 6 22 13 +f 6 13 7 +f 7 13 14 +f 7 14 8 +f 10 15 11 +f 11 15 16 +f 11 16 12 +f 12 16 17 +f 12 17 18 +f 12 18 19 +f 12 19 20 +f 12 20 21 +f 13 22 23 +f 13 23 24 +f 13 24 25 +f 13 25 26 +f 13 26 27 +f 13 27 14 +f 14 27 28 +f 18 29 19 +f 19 29 20 +f 20 30 31 +f 20 31 21 +f 20 29 32 +f 20 32 30 +f 21 31 33 +f 21 33 34 +f 21 34 35 +f 21 35 36 +f 22 37 38 +f 22 38 39 +f 22 39 40 +f 22 40 41 +f 22 41 42 +f 22 42 43 +f 22 43 44 +f 22 44 45 +f 22 45 23 +f 23 46 47 +f 23 47 24 +f 23 45 68 +f 23 68 46 +f 24 47 25 +f 25 47 48 +f 25 48 27 +f 25 27 26 +f 27 48 28 +f 28 48 49 +f 34 50 35 +f 35 51 36 +f 35 50 70 +f 35 70 51 +f 36 51 52 +f 36 52 53 +f 36 53 71 +f 36 71 54 +f 36 54 55 +f 37 56 57 +f 37 57 58 +f 37 58 59 +f 37 59 60 +f 37 60 61 +f 37 61 38 +f 38 61 62 +f 38 62 63 +f 38 63 39 +f 39 64 65 +f 39 65 40 +f 39 63 64 +f 40 65 42 +f 40 42 41 +f 42 65 43 +f 43 65 64 +f 43 64 66 +f 44 67 46 +f 44 46 68 +f 44 68 45 +f 46 69 47 +f 46 67 69 +f 47 69 49 +f 47 49 48 +f 51 70 52 +f 54 71 55 +f 55 71 72 +f 55 72 73 +f 55 73 74 +f 55 74 75 +f 55 75 76 +f 55 76 77 +f 55 77 78 +f 55 78 79 +f 55 79 80 +f 56 81 82 +f 56 82 83 +f 56 83 57 +f 56 84 85 +f 56 85 81 +f 57 83 58 +f 62 66 63 +f 63 66 64 +f 74 86 87 +f 74 87 75 +f 75 87 76 +f 76 87 88 +f 76 88 78 +f 76 78 77 +f 78 89 90 +f 78 90 79 +f 78 88 89 +f 79 90 102 +f 79 102 91 +f 79 91 80 +f 80 92 93 +f 80 93 94 +f 80 94 95 +f 80 95 96 +f 80 96 97 +f 80 97 98 +f 80 98 84 +f 80 91 92 +f 84 98 99 +f 84 99 100 +f 84 100 85 +f 86 101 89 +f 86 89 88 +f 86 88 87 +f 89 101 90 +f 90 101 92 +f 90 92 102 +f 91 102 92 +f 93 103 94 +f 93 104 105 +f 93 105 106 +f 93 106 103 +f 94 103 96 +f 94 96 95 +f 96 103 106 +f 96 106 97 +f 97 106 105 +f 97 105 98 +f 98 107 99 +f 98 105 107 +f 104 108 105 +f 105 108 107 + +o geometry_1 +v -0.04758297 -0.05137038 0.09636958 0.54117647 0.42352941 0.64313725 +v -0.04757367 -0.08035794 0.09614661 0.54117647 0.42352941 0.64313725 +v -0.04751788 -0.06206157 0.09820799 0.54117647 0.42352941 0.64313725 +v -0.04749927 -0.04940371 0.09818524 0.54117647 0.42352941 0.64313725 +v -0.04755507 -0.04940371 0.09676093 0.54117647 0.42352941 0.64313725 +v -0.04756437 -0.04940371 0.09640144 0.54117647 0.42352941 0.64313725 +v -0.04756437 -0.04940371 0.09636958 0.54117647 0.42352941 0.64313725 +v -0.04740628 -0.10730559 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04740628 -0.10743113 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04756437 -0.08726223 0.09567790 0.54117647 0.42352941 0.64313725 +v -0.04749927 -0.09161403 0.09747991 0.54117647 0.42352941 0.64313725 +v -0.04750857 -0.08177018 0.09812608 0.54117647 0.42352941 0.64313725 +v -0.04702498 -0.06214526 0.10045140 0.54117647 0.42352941 0.64313725 +v -0.04701568 -0.08345441 0.10044686 0.54117647 0.42352941 0.64313725 +v -0.04700638 -0.04940371 0.10038769 0.54117647 0.42352941 0.64313725 +v -0.04754577 -0.04940371 0.09633318 0.54117647 0.42352941 0.64313725 +v -0.04575090 -0.09690731 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04642049 -0.10011886 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04698778 -0.10365469 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04723888 -0.10576782 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04737837 -0.10931412 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04735978 -0.11070543 0.07813562 0.54117647 0.42352941 0.64313725 +v -0.04741557 -0.10663609 0.07869989 0.54117647 0.42352941 0.64313725 +v -0.04752717 -0.09443851 0.09432640 0.54117647 0.42352941 0.64313725 +v -0.04755507 -0.08953228 0.09550043 0.54117647 0.42352941 0.64313725 +v -0.04747138 -0.09642611 0.09647879 0.54117647 0.42352941 0.64313725 +v -0.04697848 -0.09931335 0.09880867 0.54117647 0.42352941 0.64313725 +v -0.04700638 -0.09410376 0.09981433 0.54117647 0.42352941 0.64313725 +v -0.04604849 -0.08504449 0.10265841 0.54117647 0.42352941 0.64313725 +v -0.04605779 -0.06216618 0.10260835 0.54117647 0.42352941 0.64313725 +v -0.04603919 -0.09648887 0.10203044 0.54117647 0.42352941 0.64313725 +v -0.04603919 -0.04940371 0.10252644 0.54117647 0.42352941 0.64313725 +v -0.04684828 -0.04940371 0.09552318 0.54117647 0.42352941 0.64313725 +v -0.04211464 -0.08587091 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04378862 -0.09034824 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04735048 -0.11109249 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04719238 -0.11261980 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04685758 -0.11577904 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04686688 -0.11526645 0.07963730 0.54117647 0.42352941 0.64313725 +v -0.04736908 -0.10968025 0.08295918 0.54117647 0.42352941 0.64313725 +v -0.04742487 -0.10517154 0.08375097 0.54117647 0.42352941 0.64313725 +v -0.04749927 -0.09703285 0.09318876 0.54117647 0.42352941 0.64313725 +v -0.04742487 -0.10087205 0.09443561 0.54117647 0.42352941 0.64313725 +v -0.04693198 -0.10415682 0.09673817 0.54117647 0.42352941 0.64313725 +v -0.04597409 -0.10734744 0.09894518 0.54117647 0.42352941 0.64313725 +v -0.04602059 -0.10209599 0.10102022 0.54117647 0.42352941 0.64313725 +v -0.04463491 -0.08654042 0.10475165 0.54117647 0.42352941 0.64313725 +v -0.04462561 -0.09873800 0.10411458 0.54117647 0.42352941 0.64313725 +v -0.04463491 -0.06214526 0.10467429 0.54117647 0.42352941 0.64313725 +v -0.04460701 -0.10471125 0.10310436 0.54117647 0.42352941 0.64313725 +v -0.04461631 -0.04940371 0.10459238 0.54117647 0.42352941 0.64313725 +v -0.04673669 -0.04940371 0.09539577 0.54117647 0.42352941 0.64313725 +v -0.04022677 -0.08210493 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04590900 -0.12043421 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04687618 -0.11406343 0.08479760 0.54117647 0.42352941 0.64313725 +v -0.04591829 -0.11976470 0.08111622 0.54117647 0.42352941 0.64313725 +v -0.04736908 -0.10764035 0.08741415 0.54117647 0.42352941 0.64313725 +v -0.04738768 -0.10463803 0.09127754 0.54117647 0.42352941 0.64313725 +v -0.04689478 -0.10834124 0.09352550 0.54117647 0.42352941 0.64313725 +v -0.04593689 -0.11193984 0.09569610 0.54117647 0.42352941 0.64313725 +v -0.04452331 -0.11539198 0.09778935 0.54117647 0.42352941 0.64313725 +v -0.04456051 -0.11038114 0.10104297 0.54117647 0.42352941 0.64313725 +v -0.04277493 -0.10084067 0.10606676 0.54117647 0.42352941 0.64313725 +v -0.04277493 -0.08791081 0.10672203 0.54117647 0.42352941 0.64313725 +v -0.04274704 -0.10719052 0.10505654 0.54117647 0.42352941 0.64313725 +v -0.04277493 -0.06207203 0.10663557 0.54117647 0.42352941 0.64313725 +v -0.04370492 -0.04940371 0.10556620 0.54117647 0.42352941 0.64313725 +v -0.04270984 -0.11323701 0.10301790 0.54117647 0.42352941 0.64313725 +v -0.04666229 -0.04940371 0.09532296 0.54117647 0.42352941 0.64313725 +v -0.03950138 -0.08090191 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.03842259 -0.04940371 0.08777819 0.54117647 0.42352941 0.64313725 +v -0.04450471 -0.12501615 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04450471 -0.12483830 0.07657934 0.54117647 0.42352941 0.64313725 +v -0.04591829 -0.11836292 0.08660870 0.54117647 0.42352941 0.64313725 +v -0.04688548 -0.11173062 0.08951649 0.54117647 0.42352941 0.64313725 +v -0.04450471 -0.12413742 0.08256783 0.54117647 0.42352941 0.64313725 +v -0.04592759 -0.11572673 0.09156878 0.54117647 0.42352941 0.64313725 +v -0.04452331 -0.11958686 0.09356646 0.54117647 0.42352941 0.64313725 +v -0.04268194 -0.11867675 0.09978703 0.54117647 0.42352941 0.64313725 +v -0.04268194 -0.12326915 0.09548223 0.54117647 0.42352941 0.64313725 +v -0.04048716 -0.10281781 0.10788241 0.54117647 0.42352941 0.64313725 +v -0.04047786 -0.10950241 0.10687219 0.54117647 0.42352941 0.64313725 +v -0.04049646 -0.08919752 0.10855589 0.54117647 0.42352941 0.64313725 +v -0.04048716 -0.06196742 0.10848308 0.54117647 0.42352941 0.64313725 +v -0.04044066 -0.11592550 0.10487451 0.54117647 0.42352941 0.64313725 +v -0.04047786 -0.04940371 0.10842393 0.54117647 0.42352941 0.64313725 +v -0.04169615 -0.04940371 0.10743191 0.54117647 0.42352941 0.64313725 +v -0.04275634 -0.04940371 0.10656276 0.54117647 0.42352941 0.64313725 +v -0.04041276 -0.12177322 0.10167550 0.54117647 0.42352941 0.64313725 +v -0.03600462 -0.07568185 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.03780880 -0.04940371 0.08730038 0.54117647 0.42352941 0.64313725 +v -0.04411412 -0.12594718 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04266334 -0.12913780 0.07763962 0.54117647 0.42352941 0.64313725 +v -0.04451401 -0.12254734 0.08837886 0.54117647 0.42352941 0.64313725 +v -0.04267264 -0.12834275 0.08397850 0.54117647 0.42352941 0.64313725 +v -0.04267264 -0.12655392 0.09008986 0.54117647 0.42352941 0.64313725 +v -0.04041276 -0.12677360 0.09731609 0.54117647 0.42352941 0.64313725 +v -0.04040346 -0.13037220 0.09173259 0.54117647 0.42352941 0.64313725 +v -0.03780880 -0.10461711 0.10955245 0.54117647 0.42352941 0.64313725 +v -0.03779950 -0.11164693 0.10854679 0.54117647 0.42352941 0.64313725 +v -0.03776230 -0.11842569 0.10659006 0.54117647 0.42352941 0.64313725 +v -0.03475844 -0.09141527 0.11180042 0.54117647 0.42352941 0.64313725 +v -0.03474914 -0.06170589 0.11179586 0.54117647 0.42352941 0.64313725 +v -0.03473984 -0.04940371 0.11178221 0.54117647 0.42352941 0.64313725 +v -0.03806920 -0.04940371 0.10985734 0.54117647 0.42352941 0.64313725 +v -0.03774370 -0.12466047 0.10344565 0.54117647 0.42352941 0.64313725 +v -0.03774370 -0.13004791 0.09904529 0.54117647 0.42352941 0.64313725 +v -0.03294496 -0.07207279 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.03380055 -0.04940371 0.08447906 0.54117647 0.42352941 0.64313725 +v -0.04266334 -0.12936794 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04039417 -0.13353143 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.04039417 -0.13324899 0.07865893 0.54117647 0.42352941 0.64313725 +v -0.04040346 -0.13237026 0.08533001 0.54117647 0.42352941 0.64313725 +v -0.03774370 -0.13397080 0.09328888 0.54117647 0.42352941 0.64313725 +v -0.03773440 -0.13615716 0.08661325 0.54117647 0.42352941 0.64313725 +v -0.03474914 -0.11360314 0.11007122 0.54117647 0.42352941 0.64313725 +v -0.03475844 -0.10626995 0.11107233 0.54117647 0.42352941 0.64313725 +v -0.03472124 -0.12070619 0.10816910 0.54117647 0.42352941 0.64313725 +v -0.03470264 -0.12731757 0.10508384 0.54117647 0.42352941 0.64313725 +v -0.02766263 -0.09315180 0.11443517 0.54117647 0.42352941 0.64313725 +v -0.02764403 -0.06139206 0.11453073 0.54117647 0.42352941 0.64313725 +v -0.02764403 -0.04940371 0.11456259 0.54117647 0.42352941 0.64313725 +v -0.03201497 -0.04940371 0.11287434 0.54117647 0.42352941 0.64313725 +v -0.03470264 -0.13307115 0.10066073 0.54117647 0.42352941 0.64313725 +v -0.03470264 -0.13730787 0.09474504 0.54117647 0.42352941 0.64313725 +v -0.02936451 -0.06816036 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.02987600 -0.04940371 0.08217649 0.54117647 0.42352941 0.64313725 +v -0.04035697 -0.13359420 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.03988267 -0.13429509 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.03773440 -0.13713004 0.07962819 0.54117647 0.42352941 0.64313725 +v -0.03470264 -0.13967207 0.08781459 0.54117647 0.42352941 0.64313725 +v -0.03470264 -0.14073909 0.08053830 0.54117647 0.42352941 0.64313725 +v -0.02766263 -0.11687745 0.11265592 0.54117647 0.42352941 0.64313725 +v -0.03133608 -0.12275656 0.10959341 0.54117647 0.42352941 0.64313725 +v -0.02766263 -0.10903167 0.11363883 0.54117647 0.42352941 0.64313725 +v -0.03131748 -0.12971315 0.10657641 0.54117647 0.42352941 0.64313725 +v -0.03132678 -0.13582240 0.10213965 0.54117647 0.42352941 0.64313725 +v -0.01947873 -0.09440712 0.11640100 0.54117647 0.42352941 0.64313725 +v -0.01946943 -0.06109916 0.11660577 0.54117647 0.42352941 0.64313725 +v -0.01946943 -0.04940371 0.11667403 0.54117647 0.42352941 0.64313725 +v -0.02473317 -0.04940371 0.11534072 0.54117647 0.42352941 0.64313725 +v -0.03132678 -0.13832259 0.09930012 0.54117647 0.42352941 0.64313725 +v -0.03132678 -0.14288361 0.08892492 0.54117647 0.42352941 0.64313725 +v -0.03132678 -0.14034158 0.09608290 0.54117647 0.42352941 0.64313725 +v -0.02264999 -0.06284615 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.02902971 -0.04940371 0.08174419 0.54117647 0.42352941 0.64313725 +v -0.02419377 -0.04940371 0.07949168 0.54117647 0.42352941 0.64313725 +v -0.02266859 -0.04940371 0.07880455 0.54117647 0.42352941 0.64313725 +v -0.03776230 -0.13738110 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.03773440 -0.13743341 0.07257488 0.54117647 0.42352941 0.64313725 +v -0.03131748 -0.14402387 0.08137560 0.54117647 0.42352941 0.64313725 +v -0.03469334 -0.14105292 0.07318010 0.54117647 0.42352941 0.64313725 +v -0.03131748 -0.14434816 0.07373527 0.54117647 0.42352941 0.64313725 +v -0.01948803 -0.11930441 0.11457169 0.54117647 0.42352941 0.64313725 +v -0.02764403 -0.12456632 0.11085846 0.54117647 0.42352941 0.64313725 +v -0.01947873 -0.12743265 0.11287889 0.54117647 0.42352941 0.64313725 +v -0.02763473 -0.13183675 0.10791427 0.54117647 0.42352941 0.64313725 +v -0.01948803 -0.11106111 0.11554550 0.54117647 0.42352941 0.64313725 +v -0.02763473 -0.13827029 0.10347750 0.54117647 0.42352941 0.64313725 +v -0.02764403 -0.14091693 0.10058792 0.54117647 0.42352941 0.64313725 +v -0.01055085 -0.09517078 0.11764784 0.54117647 0.42352941 0.64313725 +v -0.01054155 -0.04940371 0.11802554 0.54117647 0.42352941 0.64313725 +v -0.01644697 -0.04940371 0.11714729 0.54117647 0.42352941 0.64313725 +v -0.02764403 -0.14305098 0.09729334 0.54117647 0.42352941 0.64313725 +v -0.02763473 -0.14697388 0.08213553 0.54117647 0.42352941 0.64313725 +v -0.02763473 -0.14576039 0.08993059 0.54117647 0.42352941 0.64313725 +v -0.01927414 -0.04940371 0.07774883 0.54117647 0.42352941 0.64313725 +v -0.01585178 -0.04940371 0.07676591 0.54117647 0.42352941 0.64313725 +v -0.01592618 -0.05916386 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.03765070 -0.13753802 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.03475844 -0.14099016 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.03147558 -0.14418078 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.03129888 -0.14433770 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.02765333 -0.14729817 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.02763473 -0.14729817 0.07424492 0.54117647 0.42352941 0.64313725 +v -0.01055085 -0.12922148 0.11416669 0.54117647 0.42352941 0.64313725 +v -0.01056015 -0.12081080 0.11578213 0.54117647 0.42352941 0.64313725 +v -0.02367298 -0.13367789 0.10908375 0.54117647 0.42352941 0.64313725 +v -0.01946943 -0.13521566 0.11007122 0.54117647 0.42352941 0.64313725 +v -0.01508919 -0.13645006 0.11087211 0.54117647 0.42352941 0.64313725 +v -0.02367298 -0.14040434 0.10464699 0.54117647 0.42352941 0.64313725 +v -0.01056015 -0.11230597 0.11674683 0.54117647 0.42352941 0.64313725 +v -0.02368228 -0.14317652 0.10172100 0.54117647 0.42352941 0.64313725 +v -0.02368228 -0.14541518 0.09836271 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.09546369 0.11811199 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.04940371 0.11853520 0.54117647 0.42352941 0.64313725 +v -0.00747259 -0.04940371 0.11820301 0.54117647 0.42352941 0.64313725 +v -0.02367298 -0.14827104 0.09081794 0.54117647 0.42352941 0.64313725 +v -0.02367298 -0.14988205 0.07469087 0.54117647 0.42352941 0.64313725 +v -0.02367298 -0.14954729 0.08280901 0.54117647 0.42352941 0.64313725 +v -0.01434520 -0.04940371 0.07655204 0.54117647 0.42352941 0.64313725 +v -0.00931396 -0.05677875 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.02398918 -0.14965190 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.12991191 0.11464905 0.54117647 0.42352941 0.64313725 +v -0.01055085 -0.13734972 0.11146368 0.54117647 0.42352941 0.64313725 +v -0.00591951 -0.13793553 0.11184137 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.12138616 0.11623718 0.54117647 0.42352941 0.64313725 +v -0.01947873 -0.14219318 0.10564811 0.54117647 0.42352941 0.64313725 +v -0.01509849 -0.14362635 0.10645355 0.54117647 0.42352941 0.64313725 +v -0.01055085 -0.14117846 0.10951150 0.54117647 0.42352941 0.64313725 +v -0.01947873 -0.14506997 0.10268571 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.11279764 0.11719734 0.54117647 0.42352941 0.64313725 +v -0.01947873 -0.14741324 0.09927737 0.54117647 0.42352941 0.64313725 +v -0.01947873 -0.15039464 0.09157788 0.54117647 0.42352941 0.64313725 +v 0.00812331 -0.09530678 0.11777070 0.54117647 0.42352941 0.64313725 +v 0.00813261 -0.11251519 0.11687425 0.54117647 0.42352941 0.64313725 +v 0.00810471 -0.04940371 0.11815295 0.54117647 0.42352941 0.64313725 +v -0.01947873 -0.15171273 0.08337783 0.54117647 0.42352941 0.64313725 +v -0.02365438 -0.14985066 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.01932064 -0.15213117 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.01947873 -0.15204748 0.07507312 0.54117647 0.42352941 0.64313725 +v -0.00936046 -0.04940371 0.07586491 0.54117647 0.42352941 0.64313725 +v -0.00292494 -0.05577448 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.00346407 -0.12984915 0.11457169 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.13817614 0.11198699 0.54117647 0.42352941 0.64313725 +v -0.00591951 -0.14180612 0.10989375 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.14207811 0.11004847 0.54117647 0.42352941 0.64313725 +v 0.00813261 -0.12105141 0.11590954 0.54117647 0.42352941 0.64313725 +v -0.01509849 -0.14659728 0.10346840 0.54117647 0.42352941 0.64313725 +v -0.01056015 -0.14468291 0.10705877 0.54117647 0.42352941 0.64313725 +v -0.01056015 -0.14772707 0.10405542 0.54117647 0.42352941 0.64313725 +v -0.00591951 -0.14536288 0.10744101 0.54117647 0.42352941 0.64313725 +v -0.01509849 -0.14900332 0.10001455 0.54117647 0.42352941 0.64313725 +v -0.01509849 -0.15209979 0.09219675 0.54117647 0.42352941 0.64313725 +v -0.01509849 -0.15345973 0.08384653 0.54117647 0.42352941 0.64313725 +v 0.01714420 -0.09467911 0.11666493 0.54117647 0.42352941 0.64313725 +v 0.01717210 -0.11145863 0.11580943 0.54117647 0.42352941 0.64313725 +v 0.01711630 -0.06107823 0.11686970 0.54117647 0.42352941 0.64313725 +v 0.01711630 -0.04940371 0.11693796 0.54117647 0.42352941 0.64313725 +v -0.01559138 -0.15359572 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.01509849 -0.15379448 0.07538256 0.54117647 0.42352941 0.64313725 +v 0.00290608 -0.04940371 0.07550087 0.54117647 0.42352941 0.64313725 +v 0.00329668 -0.05556526 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.00813261 -0.12950393 0.11429411 0.54117647 0.42352941 0.64313725 +v 0.00347337 -0.13809245 0.11190053 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.14564533 0.10759118 0.54117647 0.42352941 0.64313725 +v 0.00347337 -0.14198395 0.10995745 0.54117647 0.42352941 0.64313725 +v 0.01718140 -0.11978562 0.11483562 0.54117647 0.42352941 0.64313725 +v 0.01271746 -0.12888673 0.11381175 0.54117647 0.42352941 0.64313725 +v -0.01056015 -0.15019588 0.10056972 0.54117647 0.42352941 0.64313725 +v -0.00591951 -0.14844888 0.10442857 0.54117647 0.42352941 0.64313725 +v -0.00591951 -0.15094908 0.10092011 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.14875226 0.10457418 0.54117647 0.42352941 0.64313725 +v -0.01056015 -0.15335512 0.09265635 0.54117647 0.42352941 0.64313725 +v -0.01056015 -0.15475689 0.08419237 0.54117647 0.42352941 0.64313725 +v 0.02547689 -0.09354932 0.11484472 0.54117647 0.42352941 0.64313725 +v 0.02551409 -0.10962795 0.11404837 0.54117647 0.42352941 0.64313725 +v 0.02542109 -0.04940371 0.11498124 0.54117647 0.42352941 0.64313725 +v 0.02543039 -0.06137114 0.11494938 0.54117647 0.42352941 0.64313725 +v -0.01021605 -0.15515442 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.01056015 -0.15508119 0.07561463 0.54117647 0.42352941 0.64313725 +v 0.00314788 -0.04940371 0.07550087 0.54117647 0.42352941 0.64313725 +v 0.00378957 -0.05561757 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.00949970 -0.04940371 0.07564194 0.54117647 0.42352941 0.64313725 +v 0.00814191 -0.13768447 0.11159109 0.54117647 0.42352941 0.64313725 +v 0.00347337 -0.14554072 0.10750017 0.54117647 0.42352941 0.64313725 +v 0.00814191 -0.14152368 0.10963892 0.54117647 0.42352941 0.64313725 +v 0.01718140 -0.12799754 0.11314282 0.54117647 0.42352941 0.64313725 +v 0.02145934 -0.12682590 0.11229642 0.54117647 0.42352941 0.64313725 +v 0.02552339 -0.11759926 0.11306091 0.54117647 0.42352941 0.64313725 +v 0.01272676 -0.13693128 0.11106778 0.54117647 0.42352941 0.64313725 +v -0.00591951 -0.15283207 0.09704761 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.15127337 0.10105662 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.15316682 0.09717502 0.54117647 0.42352941 0.64313725 +v 0.00347337 -0.14863719 0.10448317 0.54117647 0.42352941 0.64313725 +v -0.00591951 -0.15417108 0.09295214 0.54117647 0.42352941 0.64313725 +v -0.00591951 -0.15591807 0.07576025 0.54117647 0.42352941 0.64313725 +v -0.00591951 -0.15558332 0.08441535 0.54117647 0.42352941 0.64313725 +v 0.03279590 -0.09192786 0.11236923 0.54117647 0.42352941 0.64313725 +v 0.03284240 -0.10703361 0.11163205 0.54117647 0.42352941 0.64313725 +v 0.03273080 -0.04940371 0.11236013 0.54117647 0.42352941 0.64313725 +v 0.03273080 -0.06167451 0.11237378 0.54117647 0.42352941 0.64313725 +v -0.01014165 -0.15517534 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.00943460 -0.05639168 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.01416824 -0.04940371 0.07607423 0.54117647 0.42352941 0.64313725 +v 0.00955550 -0.05641261 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.00815121 -0.14504904 0.10718163 0.54117647 0.42352941 0.64313725 +v 0.01273606 -0.14417032 0.10664922 0.54117647 0.42352941 0.64313725 +v 0.01719070 -0.13586425 0.11034425 0.54117647 0.42352941 0.64313725 +v 0.02553269 -0.12540320 0.11127255 0.54117647 0.42352941 0.64313725 +v 0.02147794 -0.13447293 0.10942959 0.54117647 0.42352941 0.64313725 +v 0.03287030 -0.11451325 0.11063548 0.54117647 0.42352941 0.64313725 +v 0.02934564 -0.12370851 0.11008486 0.54117647 0.42352941 0.64313725 +v 0.00348267 -0.15114784 0.10097471 0.54117647 0.42352941 0.64313725 +v 0.00348267 -0.15304129 0.09709766 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.15450583 0.09306590 0.54117647 0.42352941 0.64313725 +v 0.00348267 -0.15438030 0.09299764 0.54117647 0.42352941 0.64313725 +v 0.00815121 -0.14810367 0.10417373 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.15593899 0.08450181 0.54117647 0.42352941 0.64313725 +v -0.00648680 -0.15582392 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.00092547 -0.15625282 0.07205157 0.54117647 0.42352941 0.64313725 +v -0.00122307 -0.15627375 0.07581941 0.54117647 0.42352941 0.64313725 +v 0.03881292 -0.08982519 0.10928853 0.54117647 0.42352941 0.64313725 +v 0.03604156 -0.10547491 0.11019408 0.54117647 0.42352941 0.64313725 +v 0.03874782 -0.06194650 0.10922027 0.54117647 0.42352941 0.64313725 +v 0.03873852 -0.04940371 0.10916566 0.54117647 0.42352941 0.64313725 +v 0.01579572 -0.04940371 0.07625170 0.54117647 0.42352941 0.64313725 +v 0.01444723 -0.05774116 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.01721860 -0.14291499 0.10591204 0.54117647 0.42352941 0.64313725 +v 0.01274536 -0.14717264 0.10365042 0.54117647 0.42352941 0.64313725 +v 0.02555129 -0.13278870 0.10834202 0.54117647 0.42352941 0.64313725 +v 0.02150584 -0.14130399 0.10498828 0.54117647 0.42352941 0.64313725 +v 0.03606946 -0.11266165 0.10918841 0.54117647 0.42352941 0.64313725 +v 0.03287960 -0.12177322 0.10873791 0.54117647 0.42352941 0.64313725 +v 0.02937354 -0.13080110 0.10708152 0.54117647 0.42352941 0.64313725 +v 0.00815121 -0.15059340 0.10067893 0.54117647 0.42352941 0.64313725 +v 0.00815121 -0.15378402 0.09275191 0.54117647 0.42352941 0.64313725 +v 0.00348267 -0.15580300 0.08444720 0.54117647 0.42352941 0.64313725 +v 0.00348267 -0.15613775 0.07578300 0.54117647 0.42352941 0.64313725 +v 0.00302698 -0.15616914 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.03888732 -0.10373838 0.10861050 0.54117647 0.42352941 0.64313725 +v 0.04126809 -0.08860124 0.10754112 0.54117647 0.42352941 0.64313725 +v 0.04322106 -0.04940371 0.10549339 0.54117647 0.42352941 0.64313725 +v 0.02251023 -0.04940371 0.07783074 0.54117647 0.42352941 0.64313725 +v 0.01871588 -0.05957184 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.01589802 -0.05823283 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.01721860 -0.14583362 0.10293599 0.54117647 0.42352941 0.64313725 +v 0.01274536 -0.14961006 0.10018747 0.54117647 0.42352941 0.64313725 +v 0.02558849 -0.13934778 0.10389160 0.54117647 0.42352941 0.64313725 +v 0.02151514 -0.14411801 0.10203954 0.54117647 0.42352941 0.64313725 +v 0.03891522 -0.11062175 0.10760028 0.54117647 0.42352941 0.64313725 +v 0.03607876 -0.11960778 0.10724534 0.54117647 0.42352941 0.64313725 +v 0.03290750 -0.12854152 0.10567086 0.54117647 0.42352941 0.64313725 +v 0.02942004 -0.13705681 0.10263110 0.54117647 0.42352941 0.64313725 +v 0.00815121 -0.15519626 0.08426063 0.54117647 0.42352941 0.64313725 +v 0.01274536 -0.15273792 0.09234237 0.54117647 0.42352941 0.64313725 +v 0.00815121 -0.15554148 0.07566014 0.54117647 0.42352941 0.64313725 +v 0.00329668 -0.15615868 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04134249 -0.10185539 0.10688585 0.54117647 0.42352941 0.64313725 +v 0.04331407 -0.08726223 0.10566176 0.54117647 0.42352941 0.64313725 +v 0.04323037 -0.06212434 0.10557530 0.54117647 0.42352941 0.64313725 +v 0.04484855 -0.06216618 0.10359127 0.54117647 0.42352941 0.64313725 +v 0.04409525 -0.04940371 0.10441947 0.54117647 0.42352941 0.64313725 +v 0.02220333 -0.06161175 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.02940144 -0.04940371 0.08049280 0.54117647 0.42352941 0.64313725 +v 0.02570939 -0.06392364 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.01722790 -0.14820828 0.09950945 0.54117647 0.42352941 0.64313725 +v 0.02559779 -0.14204673 0.10097927 0.54117647 0.42352941 0.64313725 +v 0.02152444 -0.14640898 0.09866759 0.54117647 0.42352941 0.64313725 +v 0.03892452 -0.11722267 0.10560715 0.54117647 0.42352941 0.64313725 +v 0.04137039 -0.10839354 0.10587108 0.54117647 0.42352941 0.64313725 +v 0.03611596 -0.12600994 0.10411458 0.54117647 0.42352941 0.64313725 +v 0.03296330 -0.13446247 0.10122955 0.54117647 0.42352941 0.64313725 +v 0.02942934 -0.13961976 0.09976427 0.54117647 0.42352941 0.64313725 +v 0.01274536 -0.15447445 0.07545537 0.54117647 0.42352941 0.64313725 +v 0.01274536 -0.15412923 0.08395120 0.54117647 0.42352941 0.64313725 +v 0.01722790 -0.15124199 0.09178265 0.54117647 0.42352941 0.64313725 +v 0.00716543 -0.15565655 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.00836511 -0.15545779 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.01280115 -0.15447445 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04339776 -0.09980502 0.10502469 0.54117647 0.42352941 0.64313725 +v 0.04493224 -0.08581861 0.10365953 0.54117647 0.42352941 0.64313725 +v 0.04483924 -0.04940371 0.10350480 0.54117647 0.42352941 0.64313725 +v 0.03633915 -0.04940371 0.08466563 0.54117647 0.42352941 0.64313725 +v 0.03384678 -0.07174850 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.03122422 -0.06876710 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.02824826 -0.06600539 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.02560709 -0.14422262 0.09766648 0.54117647 0.42352941 0.64313725 +v 0.02152444 -0.14932761 0.09108187 0.54117647 0.42352941 0.64313725 +v 0.04138899 -0.11463879 0.10384155 0.54117647 0.42352941 0.64313725 +v 0.03897102 -0.12324823 0.10242633 0.54117647 0.42352941 0.64313725 +v 0.04342566 -0.10598750 0.10400992 0.54117647 0.42352941 0.64313725 +v 0.03617175 -0.13157522 0.09969602 0.54117647 0.42352941 0.64313725 +v 0.03298190 -0.13881427 0.09525015 0.54117647 0.42352941 0.64313725 +v 0.02943864 -0.14169105 0.09651975 0.54117647 0.42352941 0.64313725 +v 0.01722790 -0.15295760 0.07517323 0.54117647 0.42352941 0.64313725 +v 0.01722790 -0.15260192 0.08352799 0.54117647 0.42352941 0.64313725 +v 0.01643741 -0.15324005 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04501594 -0.09762913 0.10303155 0.54117647 0.42352941 0.64313725 +v 0.04611333 -0.08429129 0.10154353 0.54117647 0.42352941 0.64313725 +v 0.04602963 -0.06216618 0.10151168 0.54117647 0.42352941 0.64313725 +v 0.04551814 -0.04940371 0.10231712 0.54117647 0.42352941 0.64313725 +v 0.03646935 -0.04940371 0.08475664 0.54117647 0.42352941 0.64313725 +v 0.03552076 -0.07394532 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.02560709 -0.14701572 0.09025367 0.54117647 0.42352941 0.64313725 +v 0.02152444 -0.15063525 0.08299558 0.54117647 0.42352941 0.64313725 +v 0.04344426 -0.11185615 0.10194853 0.54117647 0.42352941 0.64313725 +v 0.04143549 -0.12026683 0.10061977 0.54117647 0.42352941 0.64313725 +v 0.03902682 -0.12843691 0.09803963 0.54117647 0.42352941 0.64313725 +v 0.04505314 -0.10343501 0.10201678 0.54117647 0.42352941 0.64313725 +v 0.03619965 -0.13564457 0.09386679 0.54117647 0.42352941 0.64313725 +v 0.02944794 -0.14431677 0.08930717 0.54117647 0.42352941 0.64313725 +v 0.03299120 -0.14128307 0.08825599 0.54117647 0.42352941 0.64313725 +v 0.01733950 -0.15287390 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.02172904 -0.15091769 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.02152444 -0.15100138 0.07481829 0.54117647 0.42352941 0.64313725 +v 0.04619703 -0.09532770 0.10091556 0.54117647 0.42352941 0.64313725 +v 0.04683872 -0.08265937 0.09931377 0.54117647 0.42352941 0.64313725 +v 0.04674572 -0.04940371 0.09930467 0.54117647 0.42352941 0.64313725 +v 0.04646673 -0.04940371 0.10012377 0.54117647 0.42352941 0.64313725 +v 0.04601103 -0.04940371 0.10143887 0.54117647 0.42352941 0.64313725 +v 0.03682275 -0.04940371 0.08506607 0.54117647 0.42352941 0.64313725 +v 0.03901752 -0.07946875 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.03899892 -0.07943737 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.02560709 -0.14827104 0.08236761 0.54117647 0.42352941 0.64313725 +v 0.04350006 -0.11707621 0.09869945 0.54117647 0.42352941 0.64313725 +v 0.04507174 -0.10890613 0.09993720 0.54117647 0.42352941 0.64313725 +v 0.04150059 -0.12505799 0.09627857 0.54117647 0.42352941 0.64313725 +v 0.03906402 -0.13219242 0.09237422 0.54117647 0.42352941 0.64313725 +v 0.04623423 -0.10075698 0.09990534 0.54117647 0.42352941 0.64313725 +v 0.03620895 -0.13792507 0.08710926 0.54117647 0.42352941 0.64313725 +v 0.02943864 -0.14550934 0.08164863 0.54117647 0.42352941 0.64313725 +v 0.03299120 -0.14240240 0.08085229 0.54117647 0.42352941 0.64313725 +v 0.02517930 -0.14890917 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.02560709 -0.14862672 0.07440419 0.54117647 0.42352941 0.64313725 +v 0.04692242 -0.09290074 0.09868125 0.54117647 0.42352941 0.64313725 +v 0.04715491 -0.08816188 0.09707946 0.54117647 0.42352941 0.64313725 +v 0.04711771 -0.08364271 0.09727969 0.54117647 0.42352941 0.64313725 +v 0.04699682 -0.04940371 0.09753907 0.54117647 0.42352941 0.64313725 +v 0.04283047 -0.04940371 0.09082704 0.54117647 0.42352941 0.64313725 +v 0.03906402 -0.07955244 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.02943864 -0.14587547 0.07392638 0.54117647 0.42352941 0.64313725 +v 0.04512754 -0.11371821 0.09668812 0.54117647 0.42352941 0.64313725 +v 0.04356516 -0.12145939 0.09443561 0.54117647 0.42352941 0.64313725 +v 0.04625283 -0.10582013 0.09782120 0.54117647 0.42352941 0.64313725 +v 0.04153779 -0.12849967 0.09079974 0.54117647 0.42352941 0.64313725 +v 0.03906402 -0.13428463 0.08588062 0.54117647 0.42352941 0.64313725 +v 0.04695962 -0.09793250 0.09767558 0.54117647 0.42352941 0.64313725 +v 0.03620895 -0.13896071 0.07998769 0.54117647 0.42352941 0.64313725 +v 0.03298190 -0.14274762 0.07339852 0.54117647 0.42352941 0.64313725 +v 0.03620895 -0.13929547 0.07282061 0.54117647 0.42352941 0.64313725 +v 0.02558849 -0.14862672 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.02942934 -0.14587547 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04720141 -0.09353886 0.09631497 0.54117647 0.42352941 0.64313725 +v 0.04742461 -0.10878060 0.08105251 0.54117647 0.42352941 0.64313725 +v 0.04741531 -0.10979532 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04668992 -0.10259812 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04684802 -0.04940371 0.09713862 0.54117647 0.42352941 0.64313725 +v 0.04740601 -0.10755666 0.08466108 0.54117647 0.42352941 0.64313725 +v 0.04330476 -0.04940371 0.09130940 0.54117647 0.42352941 0.64313725 +v 0.04181678 -0.08505495 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.02967114 -0.14569763 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.03283310 -0.14290453 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04520194 -0.11769341 0.09250618 0.54117647 0.42352941 0.64313725 +v 0.04630863 -0.11020330 0.09459488 0.54117647 0.42352941 0.64313725 +v 0.04360236 -0.12458724 0.08914789 0.54117647 0.42352941 0.64313725 +v 0.04698752 -0.10259812 0.09560509 0.54117647 0.42352941 0.64313725 +v 0.04154709 -0.13039312 0.08458372 0.54117647 0.42352941 0.64313725 +v 0.03906402 -0.13523659 0.07905938 0.54117647 0.42352941 0.64313725 +v 0.04722001 -0.09692824 0.09530476 0.54117647 0.42352941 0.64313725 +v 0.03632055 -0.13915947 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.03906402 -0.13555042 0.07220174 0.54117647 0.42352941 0.64313725 +v 0.04735021 -0.10554814 0.08817408 0.54117647 0.42352941 0.64313725 +v 0.04741531 -0.10961749 0.07548722 0.54117647 0.42352941 0.64313725 +v 0.04716422 -0.11196076 0.08388294 0.54117647 0.42352941 0.64313725 +v 0.04717352 -0.11306963 0.07891831 0.54117647 0.42352941 0.64313725 +v 0.04737811 -0.11034976 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04505314 -0.09471050 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04567624 -0.04940371 0.09469499 0.54117647 0.42352941 0.64313725 +v 0.04712702 -0.10976394 0.08847442 0.54117647 0.42352941 0.64313725 +v 0.04488574 -0.09402007 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04639233 -0.11379144 0.09051760 0.54117647 0.42352941 0.64313725 +v 0.04523914 -0.12049697 0.08743235 0.54117647 0.42352941 0.64313725 +v 0.04704332 -0.10657332 0.09241973 0.54117647 0.42352941 0.64313725 +v 0.04361166 -0.12628193 0.08322766 0.54117647 0.42352941 0.64313725 +v 0.04723861 -0.09990964 0.09374393 0.54117647 0.42352941 0.64313725 +v 0.04722931 -0.09797434 0.09476325 0.54117647 0.42352941 0.64313725 +v 0.04153779 -0.13125093 0.07807646 0.54117647 0.42352941 0.64313725 +v 0.03963131 -0.13464031 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.03905472 -0.13556088 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04730371 -0.10372792 0.09029008 0.54117647 0.42352941 0.64313725 +v 0.04642953 -0.11628117 0.08567584 0.54117647 0.42352941 0.64313725 +v 0.04643882 -0.11758880 0.08038358 0.54117647 0.42352941 0.64313725 +v 0.04716422 -0.11352991 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04663412 -0.11691929 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04524844 -0.12199290 0.08182155 0.54117647 0.42352941 0.64313725 +v 0.04727581 -0.10279688 0.09139131 0.54117647 0.42352941 0.64313725 +v 0.04361166 -0.12704559 0.07705260 0.54117647 0.42352941 0.64313725 +v 0.04153779 -0.13152291 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04642953 -0.11819554 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04546234 -0.12193014 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04523914 -0.12276702 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04361166 -0.12726527 0.07205157 0.54117647 0.42352941 0.64313725 +v 0.04479274 -0.12404327 0.07205157 0.54117647 0.42352941 0.64313725 +f 109 110 111 +f 109 111 112 +f 109 112 113 +f 109 113 114 +f 109 114 115 +f 109 115 116 +f 109 116 117 +f 109 117 110 +f 110 118 119 +f 110 119 120 +f 110 120 111 +f 110 117 118 +f 111 121 112 +f 111 120 122 +f 111 122 121 +f 112 121 123 +f 112 123 140 +f 112 140 159 +f 112 159 175 +f 112 175 196 +f 112 196 195 +f 112 195 194 +f 112 194 213 +f 112 213 212 +f 112 212 231 +f 112 231 230 +f 112 230 249 +f 112 249 248 +f 112 248 271 +f 112 271 270 +f 112 270 295 +f 112 295 294 +f 112 294 315 +f 112 315 337 +f 112 337 356 +f 112 356 379 +f 112 379 404 +f 112 404 421 +f 112 421 441 +f 112 441 461 +f 112 461 480 +f 112 480 499 +f 112 499 498 +f 112 498 497 +f 112 497 517 +f 112 517 536 +f 112 536 557 +f 112 557 538 +f 112 538 518 +f 112 518 500 +f 112 500 481 +f 112 481 462 +f 112 462 443 +f 112 443 422 +f 112 422 405 +f 112 405 383 +f 112 383 362 +f 112 362 360 +f 112 360 340 +f 112 340 320 +f 112 320 299 +f 112 299 276 +f 112 276 275 +f 112 275 256 +f 112 256 255 +f 112 255 254 +f 112 254 235 +f 112 235 217 +f 112 217 199 +f 112 199 179 +f 112 179 177 +f 112 177 160 +f 112 160 141 +f 112 141 124 +f 112 124 115 +f 112 115 114 +f 112 114 113 +f 115 124 125 +f 115 125 126 +f 115 126 127 +f 115 127 128 +f 115 128 116 +f 116 128 127 +f 116 127 126 +f 116 126 125 +f 116 125 143 +f 116 143 142 +f 116 142 161 +f 116 161 178 +f 116 178 198 +f 116 198 216 +f 116 216 234 +f 116 234 253 +f 116 253 277 +f 116 277 300 +f 116 300 321 +f 116 321 341 +f 116 341 361 +f 116 361 382 +f 116 382 384 +f 116 384 406 +f 116 406 424 +f 116 424 423 +f 116 423 442 +f 116 442 444 +f 116 444 465 +f 116 465 464 +f 116 464 463 +f 116 463 482 +f 116 482 502 +f 116 502 501 +f 116 501 519 +f 116 519 539 +f 116 539 559 +f 116 559 556 +f 116 556 535 +f 116 535 534 +f 116 534 555 +f 116 555 572 +f 116 572 573 +f 116 573 578 +f 116 578 579 +f 116 579 580 +f 116 580 582 +f 116 582 581 +f 116 581 577 +f 116 577 567 +f 116 567 568 +f 116 568 549 +f 116 549 541 +f 116 541 540 +f 116 540 531 +f 116 531 530 +f 116 530 512 +f 116 512 493 +f 116 493 492 +f 116 492 476 +f 116 476 458 +f 116 458 457 +f 116 457 456 +f 116 456 436 +f 116 436 418 +f 116 418 399 +f 116 399 398 +f 116 398 381 +f 116 381 358 +f 116 358 338 +f 116 338 318 +f 116 318 317 +f 116 317 301 +f 116 301 282 +f 116 282 281 +f 116 281 280 +f 116 280 279 +f 116 279 278 +f 116 278 257 +f 116 257 237 +f 116 237 236 +f 116 236 219 +f 116 219 218 +f 116 218 200 +f 116 200 180 +f 116 180 162 +f 116 162 146 +f 116 146 145 +f 116 145 144 +f 116 144 129 +f 116 129 117 +f 117 129 130 +f 117 130 131 +f 117 131 132 +f 117 132 133 +f 117 133 118 +f 118 133 119 +f 119 133 134 +f 119 134 135 +f 119 135 136 +f 119 136 120 +f 120 136 122 +f 121 122 137 +f 121 137 138 +f 121 138 123 +f 122 136 139 +f 122 139 137 +f 123 138 140 +f 124 141 142 +f 124 142 143 +f 124 143 125 +f 129 144 130 +f 130 144 145 +f 130 145 146 +f 130 146 147 +f 130 147 148 +f 130 148 131 +f 131 149 132 +f 131 148 149 +f 132 150 151 +f 132 151 134 +f 132 134 133 +f 132 149 150 +f 134 151 152 +f 134 152 135 +f 135 152 153 +f 135 153 154 +f 135 154 136 +f 136 154 139 +f 137 155 138 +f 137 139 156 +f 137 156 155 +f 138 155 157 +f 138 157 140 +f 139 154 158 +f 139 158 156 +f 140 157 159 +f 141 160 142 +f 142 160 161 +f 146 162 147 +f 147 163 148 +f 147 162 164 +f 147 164 163 +f 148 165 150 +f 148 150 149 +f 148 163 165 +f 150 165 151 +f 151 165 166 +f 151 166 167 +f 151 167 152 +f 152 167 168 +f 152 168 153 +f 153 168 169 +f 153 169 170 +f 153 170 154 +f 154 170 158 +f 155 156 171 +f 155 171 172 +f 155 172 157 +f 156 158 173 +f 156 173 171 +f 157 174 175 +f 157 175 159 +f 157 172 174 +f 158 170 176 +f 158 176 173 +f 160 177 161 +f 161 177 179 +f 161 179 178 +f 162 180 181 +f 162 181 164 +f 163 164 182 +f 163 182 183 +f 163 183 165 +f 164 181 184 +f 164 184 182 +f 165 183 166 +f 166 183 167 +f 167 183 185 +f 167 185 168 +f 168 185 186 +f 168 186 169 +f 169 187 170 +f 169 186 188 +f 169 188 187 +f 170 187 176 +f 171 189 172 +f 171 173 190 +f 171 190 189 +f 172 189 191 +f 172 191 192 +f 172 192 174 +f 173 176 193 +f 173 193 190 +f 174 192 194 +f 174 194 195 +f 174 195 196 +f 174 196 175 +f 176 187 197 +f 176 197 193 +f 178 179 198 +f 179 199 198 +f 180 200 181 +f 181 200 201 +f 181 201 184 +f 182 185 183 +f 182 184 202 +f 182 202 185 +f 184 201 203 +f 184 203 202 +f 185 202 186 +f 186 202 204 +f 186 204 188 +f 187 188 205 +f 187 205 197 +f 188 204 206 +f 188 206 205 +f 189 207 191 +f 189 190 208 +f 189 208 207 +f 190 193 209 +f 190 209 208 +f 191 207 210 +f 191 210 211 +f 191 211 212 +f 191 212 213 +f 191 213 192 +f 192 213 194 +f 193 197 214 +f 193 214 209 +f 197 205 215 +f 197 215 214 +f 198 199 217 +f 198 217 216 +f 200 218 201 +f 201 218 219 +f 201 219 220 +f 201 220 203 +f 202 203 204 +f 203 220 221 +f 203 221 204 +f 204 221 206 +f 205 206 222 +f 205 222 215 +f 206 221 223 +f 206 223 222 +f 207 208 224 +f 207 224 225 +f 207 225 210 +f 208 209 226 +f 208 226 224 +f 209 214 227 +f 209 227 226 +f 210 225 228 +f 210 228 229 +f 210 229 230 +f 210 230 231 +f 210 231 211 +f 211 231 212 +f 214 215 232 +f 214 232 227 +f 215 222 233 +f 215 233 232 +f 216 217 235 +f 216 235 234 +f 219 236 220 +f 220 236 237 +f 220 237 238 +f 220 238 221 +f 221 238 223 +f 222 223 239 +f 222 239 233 +f 223 238 240 +f 223 240 239 +f 224 241 225 +f 224 226 242 +f 224 242 241 +f 225 241 243 +f 225 243 228 +f 226 227 244 +f 226 244 242 +f 227 232 245 +f 227 245 244 +f 228 246 247 +f 228 247 248 +f 228 248 249 +f 228 249 229 +f 228 243 246 +f 229 249 230 +f 232 233 250 +f 232 250 245 +f 233 239 251 +f 233 251 252 +f 233 252 250 +f 234 235 254 +f 234 254 255 +f 234 255 256 +f 234 256 253 +f 237 257 258 +f 237 258 238 +f 238 258 240 +f 239 240 259 +f 239 259 251 +f 240 258 260 +f 240 260 261 +f 240 261 259 +f 241 262 243 +f 241 242 263 +f 241 263 264 +f 241 264 262 +f 242 244 265 +f 242 265 263 +f 243 262 266 +f 243 266 246 +f 244 245 267 +f 244 267 265 +f 245 250 268 +f 245 268 267 +f 246 269 270 +f 246 270 271 +f 246 271 247 +f 246 266 269 +f 247 271 248 +f 250 252 272 +f 250 272 268 +f 251 259 273 +f 251 273 274 +f 251 274 252 +f 252 274 272 +f 253 256 275 +f 253 275 276 +f 253 276 277 +f 257 278 258 +f 258 278 279 +f 258 279 260 +f 259 261 273 +f 260 279 261 +f 261 279 280 +f 261 280 281 +f 261 281 282 +f 261 282 283 +f 261 283 273 +f 262 264 284 +f 262 284 285 +f 262 285 266 +f 263 265 286 +f 263 286 264 +f 264 286 287 +f 264 287 288 +f 264 288 284 +f 265 267 289 +f 265 289 286 +f 266 285 290 +f 266 290 269 +f 267 268 291 +f 267 291 289 +f 268 272 292 +f 268 292 291 +f 269 293 294 +f 269 294 295 +f 269 295 270 +f 269 290 293 +f 272 274 296 +f 272 296 292 +f 273 283 297 +f 273 297 298 +f 273 298 274 +f 274 298 296 +f 276 299 300 +f 276 300 277 +f 282 301 297 +f 282 297 283 +f 284 302 285 +f 284 288 303 +f 284 303 304 +f 284 304 302 +f 285 302 305 +f 285 305 290 +f 286 289 306 +f 286 306 287 +f 287 306 307 +f 287 307 288 +f 288 307 308 +f 288 308 303 +f 289 291 309 +f 289 309 306 +f 290 305 310 +f 290 310 293 +f 291 292 311 +f 291 311 309 +f 292 296 312 +f 292 312 311 +f 293 313 294 +f 293 310 314 +f 293 314 313 +f 294 313 315 +f 296 298 316 +f 296 316 312 +f 297 301 317 +f 297 317 318 +f 297 318 319 +f 297 319 316 +f 297 316 298 +f 299 320 300 +f 300 320 321 +f 302 322 305 +f 302 304 323 +f 302 323 322 +f 303 308 324 +f 303 324 304 +f 304 324 325 +f 304 325 323 +f 305 322 326 +f 305 326 314 +f 305 314 310 +f 306 309 327 +f 306 327 307 +f 307 328 308 +f 307 327 329 +f 307 329 328 +f 308 328 330 +f 308 330 324 +f 309 311 331 +f 309 331 327 +f 311 312 332 +f 311 332 331 +f 312 316 333 +f 312 333 332 +f 313 334 315 +f 313 314 335 +f 313 335 334 +f 314 326 335 +f 315 336 337 +f 315 334 336 +f 316 319 333 +f 318 338 339 +f 318 339 319 +f 319 339 333 +f 320 340 321 +f 321 340 341 +f 322 342 326 +f 322 323 343 +f 322 343 342 +f 323 325 343 +f 324 330 344 +f 324 344 325 +f 325 345 343 +f 325 344 345 +f 326 346 335 +f 326 342 347 +f 326 347 346 +f 327 331 348 +f 327 348 329 +f 328 329 349 +f 328 349 330 +f 329 348 350 +f 329 350 349 +f 330 349 351 +f 330 351 344 +f 331 332 352 +f 331 352 348 +f 332 333 353 +f 332 353 352 +f 333 339 353 +f 334 354 336 +f 334 335 355 +f 334 355 354 +f 335 346 355 +f 336 354 337 +f 337 354 357 +f 337 357 356 +f 338 358 339 +f 339 358 359 +f 339 359 353 +f 340 360 341 +f 341 360 362 +f 341 362 361 +f 342 343 363 +f 342 363 347 +f 343 345 363 +f 344 364 345 +f 344 351 364 +f 345 365 363 +f 345 364 365 +f 346 347 366 +f 346 366 367 +f 346 367 368 +f 346 368 355 +f 347 363 369 +f 347 369 366 +f 348 370 350 +f 348 352 370 +f 349 350 371 +f 349 371 351 +f 350 370 372 +f 350 372 371 +f 351 371 373 +f 351 373 364 +f 352 353 374 +f 352 374 370 +f 353 359 375 +f 353 375 376 +f 353 376 374 +f 354 377 357 +f 354 355 378 +f 354 378 377 +f 355 368 378 +f 356 357 377 +f 356 377 380 +f 356 380 379 +f 358 381 359 +f 359 381 375 +f 361 362 382 +f 362 383 384 +f 362 384 382 +f 363 365 369 +f 364 385 365 +f 364 373 385 +f 365 385 386 +f 365 386 369 +f 366 369 387 +f 366 387 367 +f 367 388 368 +f 367 387 389 +f 367 389 388 +f 368 390 378 +f 368 388 391 +f 368 391 390 +f 369 386 387 +f 370 374 372 +f 371 392 373 +f 371 372 393 +f 371 393 392 +f 372 374 394 +f 372 394 395 +f 372 395 393 +f 373 396 385 +f 373 392 396 +f 374 376 397 +f 374 397 394 +f 375 381 398 +f 375 398 399 +f 375 399 400 +f 375 400 397 +f 375 397 376 +f 377 401 380 +f 377 378 402 +f 377 402 401 +f 378 390 402 +f 379 380 401 +f 379 401 403 +f 379 403 404 +f 383 405 384 +f 384 405 406 +f 385 396 386 +f 386 407 387 +f 386 396 408 +f 386 408 407 +f 387 407 389 +f 388 389 409 +f 388 409 391 +f 389 407 410 +f 389 410 409 +f 390 411 402 +f 390 391 412 +f 390 412 411 +f 391 409 413 +f 391 413 412 +f 392 414 396 +f 392 393 414 +f 393 395 415 +f 393 415 414 +f 394 397 395 +f 395 397 416 +f 395 416 415 +f 396 414 408 +f 397 400 417 +f 397 417 416 +f 399 418 400 +f 400 418 417 +f 401 402 419 +f 401 419 420 +f 401 420 403 +f 402 411 419 +f 403 420 404 +f 404 420 421 +f 405 422 423 +f 405 423 424 +f 405 424 406 +f 407 408 425 +f 407 425 410 +f 408 414 426 +f 408 426 425 +f 409 410 427 +f 409 427 413 +f 410 425 428 +f 410 428 427 +f 411 429 419 +f 411 412 430 +f 411 430 429 +f 412 413 431 +f 412 431 430 +f 413 427 432 +f 413 432 431 +f 414 415 426 +f 415 416 433 +f 415 433 434 +f 415 434 426 +f 416 435 433 +f 416 417 435 +f 417 418 436 +f 417 436 435 +f 419 437 420 +f 419 429 437 +f 420 437 438 +f 420 438 439 +f 420 439 421 +f 421 439 438 +f 421 438 440 +f 421 440 441 +f 422 442 423 +f 422 443 444 +f 422 444 442 +f 425 426 445 +f 425 445 428 +f 426 434 445 +f 427 428 446 +f 427 446 432 +f 428 445 447 +f 428 447 446 +f 429 430 448 +f 429 448 449 +f 429 449 437 +f 430 431 450 +f 430 450 448 +f 431 432 451 +f 431 451 450 +f 432 446 452 +f 432 452 451 +f 433 435 453 +f 433 453 454 +f 433 454 434 +f 434 455 445 +f 434 454 455 +f 435 456 457 +f 435 457 458 +f 435 458 453 +f 435 436 456 +f 437 459 438 +f 437 449 459 +f 438 459 460 +f 438 460 440 +f 440 460 461 +f 440 461 441 +f 443 462 463 +f 443 463 464 +f 443 464 465 +f 443 465 444 +f 445 455 447 +f 446 447 466 +f 446 466 452 +f 447 455 467 +f 447 467 466 +f 448 468 449 +f 448 450 469 +f 448 469 468 +f 449 468 470 +f 449 470 459 +f 450 451 471 +f 450 471 469 +f 451 452 472 +f 451 472 471 +f 452 466 473 +f 452 473 472 +f 453 458 474 +f 453 474 454 +f 454 474 475 +f 454 475 455 +f 455 475 467 +f 458 476 474 +f 459 477 460 +f 459 470 477 +f 460 478 479 +f 460 479 480 +f 460 480 461 +f 460 477 478 +f 462 481 482 +f 462 482 463 +f 466 467 483 +f 466 483 473 +f 467 475 484 +f 467 484 483 +f 468 485 470 +f 468 469 486 +f 468 486 485 +f 469 471 487 +f 469 487 486 +f 470 485 488 +f 470 488 477 +f 471 472 489 +f 471 489 487 +f 472 473 490 +f 472 490 491 +f 472 491 489 +f 473 483 490 +f 474 476 492 +f 474 492 493 +f 474 493 494 +f 474 494 475 +f 475 494 484 +f 477 488 495 +f 477 495 478 +f 478 495 496 +f 478 496 497 +f 478 497 498 +f 478 498 499 +f 478 499 479 +f 479 499 480 +f 481 500 501 +f 481 501 502 +f 481 502 482 +f 483 484 503 +f 483 503 490 +f 484 494 503 +f 485 486 504 +f 485 504 505 +f 485 505 488 +f 486 487 506 +f 486 506 504 +f 487 489 507 +f 487 507 506 +f 488 508 495 +f 488 505 508 +f 489 491 509 +f 489 509 507 +f 490 503 510 +f 490 510 491 +f 491 510 511 +f 491 511 509 +f 493 512 494 +f 494 512 513 +f 494 513 503 +f 495 508 514 +f 495 514 496 +f 496 514 515 +f 496 515 516 +f 496 516 517 +f 496 517 497 +f 500 518 519 +f 500 519 501 +f 503 513 520 +f 503 520 510 +f 504 521 505 +f 504 506 522 +f 504 522 521 +f 505 521 523 +f 505 523 508 +f 506 507 524 +f 506 524 522 +f 507 509 525 +f 507 525 524 +f 508 526 514 +f 508 523 526 +f 509 511 527 +f 509 527 525 +f 510 520 511 +f 511 520 528 +f 511 528 529 +f 511 529 527 +f 512 530 513 +f 513 530 531 +f 513 531 520 +f 514 532 515 +f 514 526 532 +f 515 532 517 +f 515 517 516 +f 517 533 534 +f 517 534 535 +f 517 535 536 +f 517 532 537 +f 517 537 533 +f 518 538 539 +f 518 539 519 +f 520 531 540 +f 520 540 541 +f 520 541 528 +f 521 522 542 +f 521 542 543 +f 521 543 523 +f 522 524 544 +f 522 544 542 +f 523 543 545 +f 523 545 526 +f 524 525 546 +f 524 546 544 +f 525 547 546 +f 525 527 547 +f 526 545 548 +f 526 548 532 +f 527 529 547 +f 528 541 529 +f 529 541 549 +f 529 549 550 +f 529 550 547 +f 532 548 551 +f 532 551 537 +f 533 552 534 +f 533 537 553 +f 533 553 554 +f 533 554 552 +f 534 552 554 +f 534 554 555 +f 535 556 536 +f 536 556 557 +f 537 551 558 +f 537 558 553 +f 538 557 559 +f 538 559 539 +f 542 560 543 +f 542 544 561 +f 542 561 560 +f 543 562 545 +f 543 560 562 +f 544 563 561 +f 544 546 563 +f 545 564 565 +f 545 565 548 +f 545 562 564 +f 546 547 566 +f 546 566 563 +f 547 550 567 +f 547 567 566 +f 548 565 551 +f 549 568 550 +f 550 568 567 +f 551 562 558 +f 551 565 564 +f 551 564 569 +f 551 569 562 +f 553 570 571 +f 553 571 554 +f 553 558 570 +f 554 572 555 +f 554 571 573 +f 554 573 572 +f 556 559 557 +f 558 562 560 +f 558 560 570 +f 560 561 570 +f 561 563 574 +f 561 574 570 +f 562 569 575 +f 562 575 564 +f 563 576 574 +f 563 566 576 +f 564 575 569 +f 566 577 576 +f 566 567 577 +f 570 574 571 +f 571 578 573 +f 571 574 579 +f 571 579 578 +f 574 580 579 +f 574 576 580 +f 576 581 582 +f 576 582 580 +f 576 577 581 + +o geometry_2 +v -0.04757269 -0.04939424 0.09637351 0.43529412 0.89019608 0.96078431 +v -0.04754480 -0.04939424 0.09633943 0.43529412 0.89019608 0.96078431 +v -0.04756340 -0.04939424 0.09676536 0.43529412 0.89019608 0.96078431 +v -0.04747971 -0.03197497 0.09636073 0.43529412 0.89019608 0.96078431 +v -0.04743322 -0.00561399 0.09058948 0.43529412 0.89019608 0.96078431 +v -0.04744252 -0.00414581 0.08883469 0.43529412 0.89019608 0.96078431 +v -0.04742392 -0.00180620 0.08127457 0.43529412 0.89019608 0.96078431 +v -0.04740533 -0.00110525 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04691252 -0.00688327 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04631744 -0.00975332 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04574095 -0.01250024 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04522955 -0.01401578 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04389990 -0.01793725 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04684743 -0.04939424 0.09552592 0.43529412 0.89019608 0.96078431 +v -0.04328622 -0.01935807 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04749831 -0.04939424 0.09818368 0.43529412 0.89019608 0.96078431 +v -0.04748901 -0.04235644 0.09817090 0.43529412 0.89019608 0.96078431 +v -0.04736813 -0.02264491 0.09796220 0.43529412 0.89019608 0.96078431 +v -0.04734024 -0.00379535 0.09329409 0.43529412 0.89019608 0.96078431 +v -0.04737743 -0.00035696 0.08983986 0.43529412 0.89019608 0.96078431 +v -0.04743322 -0.00285760 0.08613860 0.43529412 0.89019608 0.96078431 +v -0.04736813 0.00141433 0.08526972 0.43529412 0.89019608 0.96078431 +v -0.04729375 0.00270254 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04673586 -0.04939424 0.09539814 0.43529412 0.89019608 0.96078431 +v -0.04174272 -0.02231339 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04700550 -0.04939424 0.10038569 0.43529412 0.89019608 0.96078431 +v -0.04699621 -0.04084089 0.10034310 0.43529412 0.89019608 0.96078431 +v -0.04686603 -0.01956646 0.10007477 0.43529412 0.89019608 0.96078431 +v -0.04680094 -0.00901450 0.09896312 0.43529412 0.89019608 0.96078431 +v -0.04729375 -0.01286018 0.09696980 0.43529412 0.89019608 0.96078431 +v -0.04729375 -0.00813359 0.09559407 0.43529412 0.89019608 0.96078431 +v -0.04679165 -0.00391848 0.09744257 0.43529412 0.89019608 0.96078431 +v -0.04684743 0.00070392 0.09488704 0.43529412 0.89019608 0.96078431 +v -0.04687533 0.00429387 0.09105800 0.43529412 0.89019608 0.96078431 +v -0.04686603 0.00612199 0.08608323 0.43529412 0.89019608 0.96078431 +v -0.04725656 0.00391498 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04666147 -0.04939424 0.09532574 0.43529412 0.89019608 0.96078431 +v -0.04060834 -0.02448250 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04603849 -0.04939424 0.10252808 0.43529412 0.89019608 0.96078431 +v -0.04602919 -0.03931588 0.10246420 0.43529412 0.89019608 0.96078431 +v -0.04589902 -0.01649749 0.10215753 0.43529412 0.89019608 0.96078431 +v -0.04583393 -0.00517828 0.10093514 0.43529412 0.89019608 0.96078431 +v -0.04583393 0.00025873 0.09927829 0.43529412 0.89019608 0.96078431 +v -0.04588042 0.00517477 0.09645017 0.43529412 0.89019608 0.96078431 +v -0.04590832 0.00727759 0.09455056 0.43529412 0.89019608 0.96078431 +v -0.04591761 0.00890680 0.09224632 0.43529412 0.89019608 0.96078431 +v -0.04590832 0.01076334 0.08687118 0.43529412 0.89019608 0.96078431 +v -0.04641042 0.00974034 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04677305 0.00780803 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04682884 0.00737231 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.03842326 -0.04939424 0.08777840 0.43529412 0.89019608 0.96078431 +v -0.03937168 -0.02628221 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04461587 -0.04939424 0.10458954 0.43529412 0.89019608 0.96078431 +v -0.04460657 -0.03778139 0.10451288 0.43529412 0.89019608 0.96078431 +v -0.04448569 -0.01346640 0.10419344 0.43529412 0.89019608 0.96078431 +v -0.04445780 -0.00739476 0.10377178 0.43529412 0.89019608 0.96078431 +v -0.04442990 -0.00139889 0.10286456 0.43529412 0.89019608 0.96078431 +v -0.04442060 0.00438858 0.10107143 0.43529412 0.89019608 0.96078431 +v -0.04446709 0.00956985 0.09797497 0.43529412 0.89019608 0.96078431 +v -0.04449499 0.01173897 0.09589221 0.43529412 0.89019608 0.96078431 +v -0.04450429 0.01340606 0.09339205 0.43529412 0.89019608 0.96078431 +v -0.04587112 0.01197577 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04596411 0.01165372 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04449499 0.01529103 0.08762933 0.43529412 0.89019608 0.96078431 +v -0.04483902 0.01541416 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.03780958 -0.04939424 0.08729711 0.43529412 0.89019608 0.96078431 +v -0.03735397 -0.02920910 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04370464 -0.04939424 0.10556491 0.43529412 0.89019608 0.96078431 +v -0.04274693 -0.03625638 0.10648064 0.43529412 0.89019608 0.96078431 +v -0.04263535 -0.01050162 0.10616120 0.43529412 0.89019608 0.96078431 +v -0.04259816 -0.00407004 0.10570972 0.43529412 0.89019608 0.96078431 +v -0.04257956 0.00226683 0.10473436 0.43529412 0.89019608 0.96078431 +v -0.04257956 0.00840478 0.10281345 0.43529412 0.89019608 0.96078431 +v -0.04261675 0.01384178 0.09944867 0.43529412 0.89019608 0.96078431 +v -0.04264465 0.01606774 0.09718702 0.43529412 0.89019608 0.96078431 +v -0.04265395 0.01777273 0.09449519 0.43529412 0.89019608 0.96078431 +v -0.04264465 0.01966715 0.08835340 0.43529412 0.89019608 0.96078431 +v -0.04341640 0.01907988 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04443920 0.01645609 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.03380206 -0.04939424 0.08447750 0.43529412 0.89019608 0.96078431 +v -0.03657292 -0.03011843 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.04275623 -0.04939424 0.10656156 0.43529412 0.89019608 0.96078431 +v -0.04045957 -0.03476925 0.10835469 0.43529412 0.89019608 0.96078431 +v -0.04035729 -0.00764103 0.10804803 0.43529412 0.89019608 0.96078431 +v -0.04169623 -0.04939424 0.10743470 0.43529412 0.89019608 0.96078431 +v -0.04032939 -0.00087792 0.10756674 0.43529412 0.89019608 0.96078431 +v -0.04030150 0.00580941 0.10653174 0.43529412 0.89019608 0.96078431 +v -0.04030150 0.01225994 0.10448306 0.43529412 0.89019608 0.96078431 +v -0.04034799 0.01794322 0.10086272 0.43529412 0.89019608 0.96078431 +v -0.04036659 0.02022600 0.09841367 0.43529412 0.89019608 0.96078431 +v -0.04037589 0.02194047 0.09553870 0.43529412 0.89019608 0.96078431 +v -0.04036659 0.02384437 0.08903913 0.43529412 0.89019608 0.96078431 +v -0.04142658 0.02307713 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.02987822 -0.04939424 0.08217752 0.43529412 0.89019608 0.96078431 +v -0.03440644 -0.03262855 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.03472258 -0.03201286 0.11175781 0.43529412 0.89019608 0.96078431 +v -0.03767941 -0.00492253 0.10983690 0.43529412 0.89019608 0.96078431 +v -0.04047817 -0.04939424 0.10842284 0.43529412 0.89019608 0.96078431 +v -0.03806993 -0.04939424 0.10985820 0.43529412 0.89019608 0.96078431 +v -0.03766081 0.00215316 0.10933006 0.43529412 0.89019608 0.96078431 +v -0.03764221 0.00917202 0.10823969 0.43529412 0.89019608 0.96078431 +v -0.03764221 0.01591618 0.10607175 0.43529412 0.89019608 0.96078431 +v -0.03768871 0.02181733 0.10220012 0.43529412 0.89019608 0.96078431 +v -0.03770730 0.02414748 0.09957644 0.43529412 0.89019608 0.96078431 +v -0.03771660 0.02588088 0.09652258 0.43529412 0.89019608 0.96078431 +v -0.04028290 0.02486736 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.03770730 0.02777530 0.08968653 0.43529412 0.89019608 0.96078431 +v -0.03833028 0.02791739 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.02902278 -0.04939424 0.08174309 0.43529412 0.89019608 0.96078431 +v -0.03323487 -0.03372732 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.02760016 -0.01375057 0.11471797 0.43529412 0.89019608 0.96078431 +v -0.03125435 -0.00004437 0.11305688 0.43529412 0.89019608 0.96078431 +v -0.03463890 -0.00238400 0.11151077 0.43529412 0.89019608 0.96078431 +v -0.03474118 -0.04939424 0.11177911 0.43529412 0.89019608 0.96078431 +v -0.03462030 0.00499480 0.11098263 0.43529412 0.89019608 0.96078431 +v -0.03460170 0.01230730 0.10984116 0.43529412 0.89019608 0.96078431 +v -0.03461100 0.01934510 0.10756248 0.43529412 0.89019608 0.96078431 +v -0.03462960 0.02257510 0.10575657 0.43529412 0.89019608 0.96078431 +v -0.03464819 0.02543569 0.10345233 0.43529412 0.89019608 0.96078431 +v -0.03466679 0.02779425 0.10066254 0.43529412 0.89019608 0.96078431 +v -0.03467609 0.02953713 0.09743405 0.43529412 0.89019608 0.96078431 +v -0.03466679 0.03143155 0.09028282 0.43529412 0.89019608 0.96078431 +v -0.03764221 0.02875094 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.02419702 -0.04939424 0.07949421 0.43529412 0.89019608 0.96078431 +v -0.03100330 -0.03581119 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.03017576 -0.03657843 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.03201680 -0.04939424 0.11287373 0.43529412 0.89019608 0.96078431 +v -0.02763735 -0.04939424 0.11456038 0.43529412 0.89019608 0.96078431 +v -0.01943634 -0.01109837 0.11697536 0.43529412 0.89019608 0.96078431 +v -0.02361123 0.00393392 0.11568055 0.43529412 0.89019608 0.96078431 +v -0.02756296 0.00207738 0.11444964 0.43529412 0.89019608 0.96078431 +v -0.02755367 0.00998663 0.11388316 0.43529412 0.89019608 0.96078431 +v -0.03123575 0.00761859 0.11250743 0.43529412 0.89019608 0.96078431 +v -0.03122646 0.01520577 0.11131485 0.43529412 0.89019608 0.96078431 +v -0.03123575 0.02248985 0.10893395 0.43529412 0.89019608 0.96078431 +v -0.03124505 0.02583352 0.10703860 0.43529412 0.89019608 0.96078431 +v -0.03127295 0.02876988 0.10460232 0.43529412 0.89019608 0.96078431 +v -0.03128224 0.03115686 0.10165494 0.43529412 0.89019608 0.96078431 +v -0.03129154 0.03289973 0.09827312 0.43529412 0.89019608 0.96078431 +v -0.03464819 0.03236930 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.03128224 0.03476574 0.09082800 0.43529412 0.89019608 0.96078431 +v -0.03128224 0.03543826 0.08319122 0.43529412 0.89019608 0.96078431 +v -0.02267211 -0.04939424 0.07880422 0.43529412 0.89019608 0.96078431 +v -0.02938541 -0.03715623 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.02472701 -0.04939424 0.11533982 0.43529412 0.89019608 0.96078431 +v -0.01946423 -0.04939424 0.11667296 0.43529412 0.89019608 0.96078431 +v -0.01052866 -0.00936497 0.11844905 0.43529412 0.89019608 0.96078431 +v -0.01504758 0.00679451 0.11758442 0.43529412 0.89019608 0.96078431 +v -0.01941774 0.00551577 0.11673258 0.43529412 0.89019608 0.96078431 +v -0.02360193 0.01206102 0.11510130 0.43529412 0.89019608 0.96078431 +v -0.02754437 0.01781061 0.11265225 0.43529412 0.89019608 0.96078431 +v -0.02755367 0.02532202 0.11017764 0.43529412 0.89019608 0.96078431 +v -0.02756296 0.02876041 0.10819710 0.43529412 0.89019608 0.96078431 +v -0.02758156 0.03176307 0.10564157 0.43529412 0.89019608 0.96078431 +v -0.02760016 0.03416900 0.10255364 0.43529412 0.89019608 0.96078431 +v -0.02760016 0.03591188 0.09902274 0.43529412 0.89019608 0.96078431 +v -0.03145891 0.03547616 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.02760016 0.03775894 0.09131781 0.43529412 0.89019608 0.96078431 +v -0.02760016 0.03839358 0.08343825 0.43529412 0.89019608 0.96078431 +v -0.03126365 0.03563718 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.02553596 -0.03995051 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.01926897 -0.04939424 0.07774794 0.43529412 0.89019608 0.96078431 +v -0.01645161 -0.04939424 0.11714998 0.43529412 0.89019608 0.96078431 +v -0.01053796 -0.04939424 0.11802738 0.43529412 0.89019608 0.96078431 +v -0.00590745 -0.00889135 0.11884941 0.43529412 0.89019608 0.96078431 +v -0.00589815 0.00836689 0.11862793 0.43529412 0.89019608 0.96078431 +v -0.01051936 0.00775120 0.11821905 0.43529412 0.89019608 0.96078431 +v -0.01051936 0.01630455 0.11760998 0.43529412 0.89019608 0.96078431 +v -0.01503829 0.01524366 0.11697962 0.43529412 0.89019608 0.96078431 +v -0.01940844 0.01382284 0.11613629 0.43529412 0.89019608 0.96078431 +v -0.01940844 0.02204466 0.11483723 0.43529412 0.89019608 0.96078431 +v -0.02359263 0.02010287 0.11383205 0.43529412 0.89019608 0.96078431 +v -0.02360193 0.02781319 0.11127652 0.43529412 0.89019608 0.96078431 +v -0.02361123 0.03133683 0.10921932 0.43529412 0.89019608 0.96078431 +v -0.02362982 0.03438686 0.10656156 0.43529412 0.89019608 0.96078431 +v -0.02363912 0.03680226 0.10334159 0.43529412 0.89019608 0.96078431 +v -0.02364842 0.03853565 0.09968292 0.43529412 0.89019608 0.96078431 +v -0.02363912 0.04036378 0.09174373 0.43529412 0.89019608 0.96078431 +v -0.02363912 0.04097000 0.08365121 0.43529412 0.89019608 0.96078431 +v -0.02693998 0.03901874 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.02756296 0.03853565 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.02480140 -0.04037676 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.01584723 -0.04939424 0.07676831 0.43529412 0.89019608 0.96078431 +v -0.00747885 -0.04939424 0.11820202 0.43529412 0.89019608 0.96078431 +v -0.00122116 -0.04939424 0.11853849 0.43529412 0.89019608 0.96078431 +v -0.00122116 -0.00869244 0.11900701 0.43529412 0.89019608 0.96078431 +v -0.00122116 0.00862263 0.11878553 0.43529412 0.89019608 0.96078431 +v -0.00122116 0.01728017 0.11817220 0.43529412 0.89019608 0.96078431 +v -0.00589815 0.01698654 0.11801460 0.43529412 0.89019608 0.96078431 +v -0.01051936 0.02479158 0.11626833 0.43529412 0.89019608 0.96078431 +v -0.01503829 0.02361704 0.11565500 0.43529412 0.89019608 0.96078431 +v -0.01941774 0.02992548 0.11221355 0.43529412 0.89019608 0.96078431 +v -0.01942704 0.03351542 0.11009245 0.43529412 0.89019608 0.96078431 +v -0.01943634 0.03660335 0.10734100 0.43529412 0.89019608 0.96078431 +v -0.01944563 0.03903768 0.10401029 0.43529412 0.89019608 0.96078431 +v -0.01945493 0.04076161 0.10024514 0.43529412 0.89019608 0.96078431 +v -0.01945493 0.04256133 0.09210577 0.43529412 0.89019608 0.96078431 +v -0.01944563 0.04313912 0.08383436 0.43529412 0.89019608 0.96078431 +v -0.02198404 0.04201193 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.02359263 0.04104578 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.02166790 -0.04217647 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.01434092 -0.04939424 0.07655110 0.43529412 0.89019608 0.96078431 +v 0.00810494 -0.04939424 0.11815516 0.43529412 0.89019608 0.96078431 +v 0.00344654 -0.00877769 0.11890905 0.43529412 0.89019608 0.96078431 +v 0.00344654 0.00851844 0.11868757 0.43529412 0.89019608 0.96078431 +v 0.00344654 0.01715704 0.11807424 0.43529412 0.89019608 0.96078431 +v 0.00344654 0.02572932 0.11671980 0.43529412 0.89019608 0.96078431 +v -0.00122116 0.02585246 0.11681351 0.43529412 0.89019608 0.96078431 +v -0.00589815 0.02553988 0.11666017 0.43529412 0.89019608 0.96078431 +v -0.01052866 0.03289973 0.11354669 0.43529412 0.89019608 0.96078431 +v -0.01504758 0.03162100 0.11297595 0.43529412 0.89019608 0.96078431 +v -0.01505688 0.03527724 0.11079948 0.43529412 0.89019608 0.96078431 +v -0.01506618 0.03839358 0.10797562 0.43529412 0.89019608 0.96078431 +v -0.01507548 0.04082792 0.10455121 0.43529412 0.89019608 0.96078431 +v -0.01507548 0.04255185 0.10069662 0.43529412 0.89019608 0.96078431 +v -0.01507548 0.04432314 0.09239966 0.43529412 0.89019608 0.96078431 +v -0.01941774 0.04320542 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.01507548 0.04487252 0.08398343 0.43529412 0.89019608 0.96078431 +v -0.01792073 0.04389689 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.01895283 -0.04336996 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.00935709 -0.04939424 0.07586536 0.43529412 0.89019608 0.96078431 +v 0.01711490 -0.04939424 0.11694128 0.43529412 0.89019608 0.96078431 +v 0.00809564 -0.00914711 0.11857683 0.43529412 0.89019608 0.96078431 +v 0.00808634 0.00805430 0.11834682 0.43529412 0.89019608 0.96078431 +v 0.00808634 0.01663607 0.11773775 0.43529412 0.89019608 0.96078431 +v 0.00809564 0.02516100 0.11639184 0.43529412 0.89019608 0.96078431 +v 0.00810494 0.03329756 0.11365743 0.43529412 0.89019608 0.96078431 +v 0.00344654 0.03391325 0.11396409 0.43529412 0.89019608 0.96078431 +v -0.00122116 0.03405534 0.11405353 0.43529412 0.89019608 0.96078431 +v -0.00590745 0.03371434 0.11390872 0.43529412 0.89019608 0.96078431 +v -0.01052866 0.03658440 0.11133189 0.43529412 0.89019608 0.96078431 +v -0.01053796 0.03972915 0.10844840 0.43529412 0.89019608 0.96078431 +v -0.01054726 0.04216349 0.10495584 0.43529412 0.89019608 0.96078431 +v -0.01054726 0.04387794 0.10103310 0.43529412 0.89019608 0.96078431 +v -0.01054726 0.04563977 0.09261687 0.43529412 0.89019608 0.96078431 +v -0.01503829 0.04488200 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.01054726 0.04616074 0.08409417 0.43529412 0.89019608 0.96078431 +v -0.01249058 0.04574396 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.01640512 -0.04448767 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.01438741 -0.04517913 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.00880849 -0.04659048 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.00290724 -0.04939424 0.07550333 0.43529412 0.89019608 0.96078431 +v 0.02542749 -0.04939424 0.11498204 0.43529412 0.89019608 0.96078431 +v 0.01709630 -0.01065318 0.11725220 0.43529412 0.89019608 0.96078431 +v 0.01265176 0.00724917 0.11778035 0.43529412 0.89019608 0.96078431 +v 0.01265176 0.01573622 0.11717980 0.43529412 0.89019608 0.96078431 +v 0.01265176 0.02417589 0.11584666 0.43529412 0.89019608 0.96078431 +v 0.01267036 0.03223668 0.11315057 0.43529412 0.89019608 0.96078431 +v 0.01268895 0.03590240 0.11096559 0.43529412 0.89019608 0.96078431 +v 0.00811424 0.03701064 0.11143411 0.43529412 0.89019608 0.96078431 +v 0.00345584 0.03763581 0.11171948 0.43529412 0.89019608 0.96078431 +v -0.00122116 0.03778736 0.11180040 0.43529412 0.89019608 0.96078431 +v -0.00590745 0.03742742 0.11166837 0.43529412 0.89019608 0.96078431 +v -0.00590745 0.04059112 0.10874654 0.43529412 0.89019608 0.96078431 +v -0.00591675 0.04302545 0.10521565 0.43529412 0.89019608 0.96078431 +v -0.00591675 0.04473991 0.10125031 0.43529412 0.89019608 0.96078431 +v -0.00591675 0.04648278 0.09275317 0.43529412 0.89019608 0.96078431 +v -0.00591675 0.04699428 0.08416232 0.43529412 0.89019608 0.96078431 +v -0.00682797 0.04692798 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.00625149 -0.04700726 0.07549907 0.43529412 0.89019608 0.96078431 +v -0.00129554 -0.04740509 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.00314900 -0.04939424 0.07550333 0.43529412 0.89019608 0.96078431 +v 0.03272658 -0.04939424 0.11235836 0.43529412 0.89019608 0.96078431 +v 0.02539959 -0.01309699 0.11514815 0.43529412 0.89019608 0.96078431 +v 0.01708700 0.00611252 0.11700518 0.43529412 0.89019608 0.96078431 +v 0.01709630 0.01447642 0.11640888 0.43529412 0.89019608 0.96078431 +v 0.01710560 0.02278349 0.11510130 0.43529412 0.89019608 0.96078431 +v 0.01712419 0.03073061 0.11245632 0.43529412 0.89019608 0.96078431 +v 0.01714279 0.03434897 0.11031820 0.43529412 0.89019608 0.96078431 +v 0.01716139 0.03746530 0.10754544 0.43529412 0.89019608 0.96078431 +v 0.01269825 0.03904715 0.10812044 0.43529412 0.89019608 0.96078431 +v 0.00812354 0.04016486 0.10854210 0.43529412 0.89019608 0.96078431 +v 0.00345584 0.04080898 0.10879339 0.43529412 0.89019608 0.96078431 +v -0.00122116 0.04095106 0.10886580 0.43529412 0.89019608 0.96078431 +v -0.00122116 0.04338539 0.10531361 0.43529412 0.89019608 0.96078431 +v -0.00122116 0.04509986 0.10133124 0.43529412 0.89019608 0.96078431 +v -0.00122116 0.04684273 0.09280854 0.43529412 0.89019608 0.96078431 +v -0.00122116 0.04734475 0.08419214 0.43529412 0.89019608 0.96078431 +v -0.00238343 0.04736370 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.00195883 -0.04737667 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.00304672 -0.04727248 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.00766792 -0.04679887 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.01326544 -0.04552961 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.01489263 -0.04501811 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.00949967 -0.04939424 0.07563962 0.43529412 0.89019608 0.96078431 +v 0.03873322 -0.04939424 0.10916395 0.43529412 0.89019608 0.96078431 +v 0.03269868 -0.01632699 0.11238391 0.43529412 0.89019608 0.96078431 +v 0.02539959 0.00294882 0.11488408 0.43529412 0.89019608 0.96078431 +v 0.02135488 0.01287563 0.11544630 0.43529412 0.89019608 0.96078431 +v 0.02136417 0.02102167 0.11416427 0.43529412 0.89019608 0.96078431 +v 0.02139207 0.02881724 0.11158744 0.43529412 0.89019608 0.96078431 +v 0.02141996 0.03236930 0.10950894 0.43529412 0.89019608 0.96078431 +v 0.02144786 0.03544774 0.10682137 0.43529412 0.89019608 0.96078431 +v 0.02146645 0.03789156 0.10357159 0.43529412 0.89019608 0.96078431 +v 0.01717998 0.03990912 0.10418918 0.43529412 0.89019608 0.96078431 +v 0.01271685 0.04149097 0.10468324 0.43529412 0.89019608 0.96078431 +v 0.00813283 0.04260868 0.10504102 0.43529412 0.89019608 0.96078431 +v 0.00346514 0.04324331 0.10525398 0.43529412 0.89019608 0.96078431 +v 0.00346514 0.04495777 0.10128439 0.43529412 0.89019608 0.96078431 +v 0.00346514 0.04671012 0.09277447 0.43529412 0.89019608 0.96078431 +v 0.00346514 0.04723109 0.08417510 0.43529412 0.89019608 0.96078431 +v 0.00334426 0.04729739 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.01570157 -0.04469606 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.01906752 -0.04335101 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.02023909 -0.04287740 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.01416737 -0.04939424 0.07607406 0.43529412 0.89019608 0.96078431 +v 0.04322425 -0.04939424 0.10549250 0.43529412 0.89019608 0.96078431 +v 0.03872392 -0.03408726 0.10910006 0.43529412 0.89019608 0.96078431 +v 0.03871462 -0.00629599 0.10879339 0.43529412 0.89019608 0.96078431 +v 0.03269868 -0.00124734 0.11210281 0.43529412 0.89019608 0.96078431 +v 0.02921186 0.00873630 0.11301002 0.43529412 0.89019608 0.96078431 +v 0.02540889 0.01095278 0.11430909 0.43529412 0.89019608 0.96078431 +v 0.02542749 0.01890938 0.11306113 0.43529412 0.89019608 0.96078431 +v 0.02546468 0.02651551 0.11055671 0.43529412 0.89019608 0.96078431 +v 0.02549258 0.02999179 0.10855062 0.43529412 0.89019608 0.96078431 +v 0.02552047 0.03302287 0.10596527 0.43529412 0.89019608 0.96078431 +v 0.02554837 0.03545721 0.10283474 0.43529412 0.89019608 0.96078431 +v 0.02148505 0.03964390 0.09987885 0.43529412 0.89019608 0.96078431 +v 0.02556696 0.03720956 0.09926552 0.43529412 0.89019608 0.96078431 +v 0.01718928 0.04165200 0.10039847 0.43529412 0.89019608 0.96078431 +v 0.01272614 0.04322437 0.10080735 0.43529412 0.89019608 0.96078431 +v 0.00813283 0.04433261 0.10110550 0.43529412 0.89019608 0.96078431 +v 0.00814213 0.04610390 0.09265947 0.43529412 0.89019608 0.96078431 +v 0.00813283 0.04663434 0.08411973 0.43529412 0.89019608 0.96078431 +v 0.00908125 0.04653962 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.02491609 -0.04031993 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.02527872 -0.04012101 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.01579455 -0.04939424 0.07624869 0.43529412 0.89019608 0.96078431 +v 0.04484213 -0.04939424 0.10350770 0.43529412 0.89019608 0.96078431 +v 0.04321495 -0.03701415 0.10541158 0.43529412 0.89019608 0.96078431 +v 0.04116934 -0.00907133 0.10698323 0.43529412 0.89019608 0.96078431 +v 0.04118794 -0.00248819 0.10651897 0.43529412 0.89019608 0.96078431 +v 0.03873322 0.00060920 0.10830359 0.43529412 0.89019608 0.96078431 +v 0.03590656 0.00353609 0.10999023 0.43529412 0.89019608 0.96078431 +v 0.03271728 0.00625460 0.11156614 0.43529412 0.89019608 0.96078431 +v 0.03274517 0.01372812 0.11039912 0.43529412 0.89019608 0.96078431 +v 0.02923045 0.01645609 0.11180040 0.43529412 0.89019608 0.96078431 +v 0.02927694 0.02385384 0.10938543 0.43529412 0.89019608 0.96078431 +v 0.02931414 0.02724487 0.10745600 0.43529412 0.89019608 0.96078431 +v 0.02935133 0.03021912 0.10498565 0.43529412 0.89019608 0.96078431 +v 0.02937922 0.03263452 0.10198716 0.43529412 0.89019608 0.96078431 +v 0.02939782 0.03439634 0.09855849 0.43529412 0.89019608 0.96078431 +v 0.02556696 0.03909451 0.09146689 0.43529412 0.89019608 0.96078431 +v 0.02148505 0.04149097 0.09186725 0.43529412 0.89019608 0.96078431 +v 0.02940712 0.03629076 0.09100689 0.43529412 0.89019608 0.96078431 +v 0.01719858 0.04347065 0.09220373 0.43529412 0.89019608 0.96078431 +v 0.01272614 0.04501460 0.09246780 0.43529412 0.89019608 0.96078431 +v 0.01272614 0.04558293 0.08402177 0.43529412 0.89019608 0.96078431 +v 0.01342351 0.04547874 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.02667345 -0.03920221 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.02250785 -0.04939424 0.07783312 0.43529412 0.89019608 0.96078431 +v 0.04552090 -0.04939424 0.10231512 0.43529412 0.89019608 0.96078431 +v 0.04483284 -0.03852969 0.10343529 0.43529412 0.89019608 0.96078431 +v 0.04321495 -0.01196033 0.10508361 0.43529412 0.89019608 0.96078431 +v 0.04323355 -0.00572766 0.10464917 0.43529412 0.89019608 0.96078431 +v 0.04328004 0.00046712 0.10370788 0.43529412 0.89019608 0.96078431 +v 0.04122513 0.00405706 0.10551379 0.43529412 0.89019608 0.96078431 +v 0.03877041 0.00748597 0.10724304 0.43529412 0.89019608 0.96078431 +v 0.03593446 0.01071598 0.10887432 0.43529412 0.89019608 0.96078431 +v 0.03599025 0.01761170 0.10666379 0.43529412 0.89019608 0.96078431 +v 0.03279166 0.02087959 0.10808211 0.43529412 0.89019608 0.96078431 +v 0.03283816 0.02416642 0.10624212 0.43529412 0.89019608 0.96078431 +v 0.03287535 0.02707437 0.10389103 0.43529412 0.89019608 0.96078431 +v 0.03291254 0.02946134 0.10104587 0.43529412 0.89019608 0.96078431 +v 0.03293114 0.03122317 0.09776627 0.43529412 0.89019608 0.96078431 +v 0.03294044 0.03313654 0.09049152 0.43529412 0.89019608 0.96078431 +v 0.02556696 0.03974809 0.08351492 0.43529412 0.89019608 0.96078431 +v 0.02940712 0.03698223 0.08328492 0.43529412 0.89019608 0.96078431 +v 0.02148505 0.04211613 0.08371936 0.43529412 0.89019608 0.96078431 +v 0.03294973 0.03386589 0.08302511 0.43529412 0.89019608 0.96078431 +v 0.01718928 0.04406739 0.08388547 0.43529412 0.89019608 0.96078431 +v 0.01881647 0.04352748 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.02977905 -0.03680576 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.03124816 -0.03566911 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.02940712 -0.04939424 0.08049087 0.43529412 0.89019608 0.96078431 +v 0.04601371 -0.04939424 0.10143772 0.43529412 0.89019608 0.96078431 +v 0.04600441 -0.04006418 0.10138235 0.43529412 0.89019608 0.96078431 +v 0.04601371 -0.01798462 0.10109272 0.43529412 0.89019608 0.96078431 +v 0.04483284 -0.01494406 0.10311585 0.43529412 0.89019608 0.96078431 +v 0.04490722 -0.00322702 0.10183809 0.43529412 0.89019608 0.96078431 +v 0.04499091 0.00238050 0.10011736 0.43529412 0.89019608 0.96078431 +v 0.04336372 0.00643457 0.10185512 0.43529412 0.89019608 0.96078431 +v 0.04129952 0.01034656 0.10353326 0.43529412 0.89019608 0.96078431 +v 0.03883550 0.01408806 0.10514324 0.43529412 0.89019608 0.96078431 +v 0.03603674 0.02078486 0.10491750 0.43529412 0.89019608 0.96078431 +v 0.03608323 0.02361704 0.10269845 0.43529412 0.89019608 0.96078431 +v 0.03612972 0.02597560 0.10001514 0.43529412 0.89019608 0.96078431 +v 0.03614832 0.02772794 0.09690165 0.43529412 0.89019608 0.96078431 +v 0.03615761 0.02965079 0.08992079 0.43529412 0.89019608 0.96078431 +v 0.02771485 0.03846936 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.02552977 0.03989965 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.02397697 0.04091317 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.03216869 0.03484152 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.03616691 0.03066431 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.03533007 -0.03163397 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.03634358 -0.04939424 0.08466491 0.43529412 0.89019608 0.96078431 +v 0.03814743 -0.02816717 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04646932 -0.04939424 0.10012588 0.43529412 0.89019608 0.96078431 +v 0.04673897 -0.04157972 0.09927403 0.43529412 0.89019608 0.96078431 +v 0.04674827 -0.02105359 0.09903126 0.43529412 0.89019608 0.96078431 +v 0.04682265 -0.01085209 0.09797497 0.43529412 0.89019608 0.96078431 +v 0.04608809 -0.00702534 0.09992144 0.43529412 0.89019608 0.96078431 +v 0.04618108 -0.00174937 0.09833275 0.43529412 0.89019608 0.96078431 +v 0.04631125 0.00300566 0.09564944 0.43529412 0.89019608 0.96078431 +v 0.04511178 0.00743861 0.09716572 0.43529412 0.89019608 0.96078431 +v 0.04347530 0.01174844 0.09863941 0.43529412 0.89019608 0.96078431 +v 0.04141110 0.01590672 0.10006199 0.43529412 0.89019608 0.96078431 +v 0.03894707 0.01987554 0.10142069 0.43529412 0.89019608 0.96078431 +v 0.03898427 0.02219621 0.09890348 0.43529412 0.89019608 0.96078431 +v 0.03901216 0.02393908 0.09596036 0.43529412 0.89019608 0.96078431 +v 0.03902146 0.02586193 0.08930746 0.43529412 0.89019608 0.96078431 +v 0.03889129 0.02713120 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.03646445 -0.04939424 0.08475861 0.43529412 0.89019608 0.96078431 +v 0.03932830 -0.02642429 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04034180 -0.02491822 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04673897 -0.04939424 0.09930385 0.43529412 0.89019608 0.96078431 +v 0.04699002 -0.04145658 0.09752776 0.43529412 0.89019608 0.96078431 +v 0.04700862 -0.02352582 0.09725942 0.43529412 0.89019608 0.96078431 +v 0.04691563 -0.04939424 0.09809423 0.43529412 0.89019608 0.96078431 +v 0.04702721 -0.01873291 0.09705924 0.43529412 0.89019608 0.96078431 +v 0.04708300 -0.01394001 0.09638628 0.43529412 0.89019608 0.96078431 +v 0.04712019 -0.01196980 0.09583684 0.43529412 0.89019608 0.96078431 +v 0.04715739 -0.00985752 0.09524907 0.43529412 0.89019608 0.96078431 +v 0.04691563 -0.00594552 0.09652684 0.43529412 0.89019608 0.96078431 +v 0.04704581 -0.00146520 0.09409483 0.43529412 0.89019608 0.96078431 +v 0.04636704 0.00507058 0.09384353 0.43529412 0.89019608 0.96078431 +v 0.04516757 0.00957932 0.09518518 0.43529412 0.89019608 0.96078431 +v 0.04353109 0.01395545 0.09647999 0.43529412 0.89019608 0.96078431 +v 0.04145759 0.01818002 0.09771942 0.43529412 0.89019608 0.96078431 +v 0.04148548 0.01989448 0.09495945 0.43529412 0.89019608 0.96078431 +v 0.04149478 0.02182680 0.08864728 0.43529412 0.89019608 0.96078431 +v 0.04188531 0.02222463 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04144829 0.02294452 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.03681779 -0.04939424 0.08506528 0.43529412 0.89019608 0.96078431 +v 0.04307548 -0.01982221 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04282442 -0.04939424 0.09082374 0.43529412 0.89019608 0.96078431 +v 0.04699002 -0.04278268 0.09753201 0.43529412 0.89019608 0.96078431 +v 0.04699002 -0.04939424 0.09754053 0.43529412 0.89019608 0.96078431 +v 0.04699002 -0.04538752 0.09753627 0.43529412 0.89019608 0.96078431 +v 0.04717598 -0.00935550 0.09501056 0.43529412 0.89019608 0.96078431 +v 0.04726897 -0.00619180 0.09350705 0.43529412 0.89019608 0.96078431 +v 0.04730616 -0.00514039 0.09276595 0.43529412 0.89019608 0.96078431 +v 0.04735265 -0.00351118 0.09162022 0.43529412 0.89019608 0.96078431 +v 0.04713879 0.00204897 0.09046597 0.43529412 0.89019608 0.96078431 +v 0.04639493 0.00668084 0.09164577 0.43529412 0.89019608 0.96078431 +v 0.04519547 0.01122748 0.09279576 0.43529412 0.89019608 0.96078431 +v 0.04355898 0.01564149 0.09389890 0.43529412 0.89019608 0.96078431 +v 0.04356828 0.01755487 0.08794877 0.43529412 0.89019608 0.96078431 +v 0.04348460 0.01871994 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04352179 -0.01867608 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04329863 -0.04939424 0.09130929 0.43529412 0.89019608 0.96078431 +v 0.04684125 -0.04939424 0.09714442 0.43529412 0.89019608 0.96078431 +v 0.04631125 -0.01017010 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04720388 -0.00447734 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04727826 -0.00226086 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04739914 0.00134803 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04739914 -0.00587922 0.08305492 0.43529412 0.89019608 0.96078431 +v 0.04739914 -0.00173041 0.08953746 0.43529412 0.89019608 0.96078431 +v 0.04740844 -0.00043273 0.08673489 0.43529412 0.89019608 0.96078431 +v 0.04715739 0.00385815 0.08567434 0.43529412 0.89019608 0.96078431 +v 0.04641353 0.00853739 0.08645804 0.43529412 0.89019608 0.96078431 +v 0.04521406 0.01312190 0.08722044 0.43529412 0.89019608 0.96078431 +v 0.04428424 0.01695812 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04515827 -0.01447045 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04566967 -0.04939424 0.09469537 0.43529412 0.89019608 0.96078431 +v 0.04687844 0.00710709 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04739914 0.00134803 0.07551185 0.43529412 0.89019608 0.96078431 +v 0.04741774 0.00054290 0.08253530 0.43529412 0.89019608 0.96078431 +v 0.04631125 0.00977824 0.07549907 0.43529412 0.89019608 0.96078431 +v 0.04567897 0.01271460 0.07549907 0.43529412 0.89019608 0.96078431 +f 583 584 596 +f 583 596 606 +f 583 606 619 +f 583 619 633 +f 583 633 648 +f 583 648 662 +f 583 662 676 +f 583 676 691 +f 583 691 706 +f 583 706 725 +f 583 725 744 +f 583 744 765 +f 583 765 784 +f 583 784 803 +f 583 803 824 +f 583 824 844 +f 583 844 867 +f 583 867 888 +f 583 888 910 +f 583 910 933 +f 583 933 957 +f 583 957 978 +f 583 978 995 +f 583 995 1016 +f 583 1016 1018 +f 583 1018 1033 +f 583 1033 1047 +f 583 1047 1034 +f 583 1034 1020 +f 583 1020 1001 +f 583 1001 998 +f 583 998 980 +f 583 980 958 +f 583 958 934 +f 583 934 911 +f 583 911 889 +f 583 889 868 +f 583 868 845 +f 583 845 825 +f 583 825 804 +f 583 804 785 +f 583 785 767 +f 583 767 766 +f 583 766 746 +f 583 746 745 +f 583 745 728 +f 583 728 727 +f 583 727 710 +f 583 710 709 +f 583 709 696 +f 583 696 681 +f 583 681 680 +f 583 680 667 +f 583 667 664 +f 583 664 650 +f 583 650 635 +f 583 635 621 +f 583 621 608 +f 583 608 598 +f 583 598 585 +f 583 585 586 +f 583 586 587 +f 583 587 588 +f 583 588 589 +f 583 589 590 +f 583 590 591 +f 583 591 592 +f 583 592 593 +f 583 593 594 +f 583 594 595 +f 583 595 584 +f 584 595 597 +f 584 597 596 +f 585 598 599 +f 585 599 586 +f 586 600 587 +f 586 599 600 +f 587 600 601 +f 587 601 602 +f 587 602 588 +f 588 603 589 +f 588 602 603 +f 589 603 604 +f 589 604 590 +f 590 604 605 +f 590 605 618 +f 590 618 632 +f 590 632 631 +f 590 631 630 +f 590 630 645 +f 590 645 644 +f 590 644 647 +f 590 647 661 +f 590 661 660 +f 590 660 675 +f 590 675 688 +f 590 688 690 +f 590 690 705 +f 590 705 722 +f 590 722 739 +f 590 739 742 +f 590 742 763 +f 590 763 762 +f 590 762 782 +f 590 782 781 +f 590 781 799 +f 590 799 801 +f 590 801 818 +f 590 818 820 +f 590 820 841 +f 590 841 861 +f 590 861 884 +f 590 884 907 +f 590 907 931 +f 590 931 954 +f 590 954 974 +f 590 974 973 +f 590 973 972 +f 590 972 975 +f 590 975 976 +f 590 976 994 +f 590 994 1015 +f 590 1015 1014 +f 590 1014 1031 +f 590 1031 1045 +f 590 1045 1052 +f 590 1052 1051 +f 590 1051 1048 +f 590 1048 1038 +f 590 1038 1037 +f 590 1037 1036 +f 590 1036 1035 +f 590 1035 1046 +f 590 1046 1032 +f 590 1032 1017 +f 590 1017 997 +f 590 997 996 +f 590 996 979 +f 590 979 977 +f 590 977 956 +f 590 956 955 +f 590 955 932 +f 590 932 909 +f 590 909 908 +f 590 908 887 +f 590 887 886 +f 590 886 885 +f 590 885 866 +f 590 866 865 +f 590 865 864 +f 590 864 863 +f 590 863 862 +f 590 862 843 +f 590 843 842 +f 590 842 823 +f 590 823 822 +f 590 822 821 +f 590 821 802 +f 590 802 783 +f 590 783 764 +f 590 764 743 +f 590 743 726 +f 590 726 708 +f 590 708 707 +f 590 707 692 +f 590 692 677 +f 590 677 663 +f 590 663 649 +f 590 649 634 +f 590 634 620 +f 590 620 607 +f 590 607 597 +f 590 597 595 +f 590 595 594 +f 590 594 593 +f 590 593 592 +f 590 592 591 +f 596 597 606 +f 597 607 606 +f 598 608 599 +f 599 608 609 +f 599 609 600 +f 600 610 611 +f 600 611 612 +f 600 612 601 +f 600 609 610 +f 601 612 613 +f 601 613 614 +f 601 614 615 +f 601 615 602 +f 602 615 616 +f 602 616 604 +f 602 604 603 +f 604 616 617 +f 604 617 618 +f 604 618 605 +f 606 607 620 +f 606 620 619 +f 608 621 609 +f 609 621 622 +f 609 622 623 +f 609 623 610 +f 610 623 611 +f 611 623 624 +f 611 624 614 +f 611 614 613 +f 611 613 612 +f 614 624 625 +f 614 625 615 +f 615 625 626 +f 615 626 627 +f 615 627 616 +f 616 627 628 +f 616 628 617 +f 617 628 629 +f 617 629 630 +f 617 630 631 +f 617 631 632 +f 617 632 618 +f 619 620 633 +f 620 634 633 +f 621 635 622 +f 622 635 636 +f 622 636 637 +f 622 637 623 +f 623 637 638 +f 623 638 624 +f 624 638 639 +f 624 639 625 +f 625 640 626 +f 625 639 640 +f 626 640 641 +f 626 641 627 +f 627 641 642 +f 627 642 628 +f 628 642 643 +f 628 643 629 +f 629 644 645 +f 629 645 630 +f 629 643 646 +f 629 646 647 +f 629 647 644 +f 633 634 649 +f 633 649 648 +f 635 650 636 +f 636 650 651 +f 636 651 652 +f 636 652 637 +f 637 652 638 +f 638 653 639 +f 638 652 653 +f 639 653 654 +f 639 654 640 +f 640 654 655 +f 640 655 641 +f 641 655 656 +f 641 656 642 +f 642 656 657 +f 642 657 643 +f 643 657 658 +f 643 658 646 +f 646 658 659 +f 646 659 660 +f 646 660 661 +f 646 661 647 +f 648 649 662 +f 649 663 662 +f 650 664 651 +f 651 665 666 +f 651 666 652 +f 651 664 667 +f 651 667 665 +f 652 666 668 +f 652 668 653 +f 653 668 654 +f 654 668 669 +f 654 669 655 +f 655 669 670 +f 655 670 656 +f 656 670 671 +f 656 671 657 +f 657 671 672 +f 657 672 658 +f 658 672 673 +f 658 673 659 +f 659 673 674 +f 659 674 675 +f 659 675 660 +f 662 663 677 +f 662 677 676 +f 665 678 679 +f 665 679 666 +f 665 667 680 +f 665 680 681 +f 665 681 678 +f 666 679 682 +f 666 682 668 +f 668 682 683 +f 668 683 669 +f 669 683 670 +f 670 684 671 +f 670 683 684 +f 671 684 685 +f 671 685 672 +f 672 685 686 +f 672 686 673 +f 673 686 687 +f 673 687 674 +f 674 688 675 +f 674 687 689 +f 674 689 690 +f 674 690 688 +f 676 677 691 +f 677 692 691 +f 678 693 694 +f 678 694 695 +f 678 695 679 +f 678 681 696 +f 678 696 693 +f 679 695 697 +f 679 697 682 +f 682 697 683 +f 683 697 698 +f 683 698 684 +f 684 698 699 +f 684 699 700 +f 684 700 685 +f 685 700 701 +f 685 701 686 +f 686 701 702 +f 686 702 687 +f 687 702 703 +f 687 703 689 +f 689 703 704 +f 689 704 690 +f 690 704 705 +f 691 692 707 +f 691 707 708 +f 691 708 706 +f 693 696 709 +f 693 709 710 +f 693 710 711 +f 693 711 712 +f 693 712 713 +f 693 713 694 +f 694 713 714 +f 694 714 715 +f 694 715 697 +f 694 697 695 +f 697 715 698 +f 698 716 699 +f 698 715 716 +f 699 717 700 +f 699 716 717 +f 700 717 718 +f 700 718 701 +f 701 718 719 +f 701 719 702 +f 702 719 720 +f 702 720 703 +f 703 720 721 +f 703 721 704 +f 704 722 705 +f 704 721 723 +f 704 723 724 +f 704 724 722 +f 706 708 725 +f 708 726 725 +f 710 727 711 +f 711 727 728 +f 711 728 729 +f 711 729 730 +f 711 730 731 +f 711 731 712 +f 712 731 732 +f 712 732 713 +f 713 732 714 +f 714 732 733 +f 714 733 716 +f 714 716 715 +f 716 733 717 +f 717 734 718 +f 717 733 734 +f 718 735 719 +f 718 734 735 +f 719 735 736 +f 719 736 720 +f 720 736 737 +f 720 737 721 +f 721 737 738 +f 721 738 723 +f 722 724 739 +f 723 738 740 +f 723 740 724 +f 724 740 741 +f 724 741 742 +f 724 742 739 +f 725 726 743 +f 725 743 744 +f 728 745 729 +f 729 745 746 +f 729 746 747 +f 729 747 748 +f 729 748 749 +f 729 749 730 +f 730 749 750 +f 730 750 751 +f 730 751 731 +f 731 751 752 +f 731 752 732 +f 732 752 753 +f 732 753 754 +f 732 754 733 +f 733 754 734 +f 734 754 755 +f 734 755 735 +f 735 755 756 +f 735 756 736 +f 736 756 757 +f 736 757 737 +f 737 757 758 +f 737 758 738 +f 738 758 759 +f 738 759 740 +f 740 759 760 +f 740 760 741 +f 741 760 761 +f 741 761 762 +f 741 762 763 +f 741 763 742 +f 743 764 765 +f 743 765 744 +f 746 766 747 +f 747 766 767 +f 747 767 768 +f 747 768 769 +f 747 769 748 +f 748 769 770 +f 748 770 771 +f 748 771 749 +f 749 771 750 +f 750 771 772 +f 750 772 751 +f 751 772 773 +f 751 773 753 +f 751 753 752 +f 753 773 774 +f 753 774 755 +f 753 755 754 +f 755 774 756 +f 756 774 775 +f 756 775 757 +f 757 775 776 +f 757 776 758 +f 758 776 777 +f 758 777 759 +f 759 777 778 +f 759 778 760 +f 760 778 779 +f 760 779 761 +f 761 779 780 +f 761 780 781 +f 761 781 782 +f 761 782 762 +f 764 783 765 +f 765 783 784 +f 767 785 786 +f 767 786 768 +f 768 786 769 +f 769 787 770 +f 769 786 787 +f 770 788 789 +f 770 789 790 +f 770 790 791 +f 770 791 771 +f 770 787 788 +f 771 791 772 +f 772 791 792 +f 772 792 793 +f 772 793 773 +f 773 793 774 +f 774 793 775 +f 775 794 776 +f 775 793 794 +f 776 794 795 +f 776 795 777 +f 777 795 796 +f 777 796 778 +f 778 796 797 +f 778 797 779 +f 779 797 798 +f 779 798 780 +f 780 799 781 +f 780 798 800 +f 780 800 801 +f 780 801 799 +f 783 802 803 +f 783 803 784 +f 785 804 805 +f 785 805 786 +f 786 805 787 +f 787 806 807 +f 787 807 788 +f 787 805 806 +f 788 807 808 +f 788 808 789 +f 789 808 809 +f 789 809 810 +f 789 810 811 +f 789 811 790 +f 790 811 791 +f 791 811 812 +f 791 812 792 +f 792 812 813 +f 792 813 794 +f 792 794 793 +f 794 813 795 +f 795 814 796 +f 795 813 814 +f 796 815 797 +f 796 814 815 +f 797 815 816 +f 797 816 798 +f 798 816 817 +f 798 817 800 +f 800 818 801 +f 800 817 819 +f 800 819 820 +f 800 820 818 +f 802 821 803 +f 803 821 822 +f 803 822 823 +f 803 823 824 +f 804 825 826 +f 804 826 805 +f 805 826 827 +f 805 827 806 +f 806 827 828 +f 806 828 807 +f 807 828 808 +f 808 828 829 +f 808 829 830 +f 808 830 809 +f 809 830 831 +f 809 831 832 +f 809 832 810 +f 810 832 833 +f 810 833 811 +f 811 833 834 +f 811 834 835 +f 811 835 812 +f 812 835 813 +f 813 835 814 +f 814 836 815 +f 814 835 836 +f 815 837 816 +f 815 836 837 +f 816 838 817 +f 816 837 838 +f 817 839 819 +f 817 838 839 +f 819 839 840 +f 819 840 841 +f 819 841 820 +f 823 842 824 +f 824 842 843 +f 824 843 844 +f 825 845 846 +f 825 846 826 +f 826 846 847 +f 826 847 827 +f 827 847 828 +f 828 848 849 +f 828 849 829 +f 828 847 848 +f 829 849 850 +f 829 850 830 +f 830 850 851 +f 830 851 831 +f 831 852 853 +f 831 853 832 +f 831 851 852 +f 832 853 854 +f 832 854 833 +f 833 854 855 +f 833 855 834 +f 834 855 856 +f 834 856 836 +f 834 836 835 +f 836 856 837 +f 837 856 857 +f 837 857 838 +f 838 857 858 +f 838 858 839 +f 839 858 859 +f 839 859 840 +f 840 859 860 +f 840 860 861 +f 840 861 841 +f 843 862 844 +f 844 862 863 +f 844 863 864 +f 844 864 865 +f 844 865 866 +f 844 866 867 +f 845 868 869 +f 845 869 846 +f 846 869 870 +f 846 870 847 +f 847 870 871 +f 847 871 848 +f 848 871 872 +f 848 872 849 +f 849 872 873 +f 849 873 850 +f 850 873 874 +f 850 874 851 +f 851 875 852 +f 851 874 875 +f 852 875 876 +f 852 876 877 +f 852 877 853 +f 853 877 878 +f 853 878 854 +f 854 878 879 +f 854 879 855 +f 855 879 880 +f 855 880 856 +f 856 880 857 +f 857 880 881 +f 857 881 858 +f 858 881 882 +f 858 882 859 +f 859 882 883 +f 859 883 860 +f 860 883 884 +f 860 884 861 +f 866 885 867 +f 867 885 886 +f 867 886 887 +f 867 887 888 +f 868 889 890 +f 868 890 869 +f 869 890 891 +f 869 891 892 +f 869 892 870 +f 870 892 893 +f 870 893 894 +f 870 894 871 +f 871 895 872 +f 871 894 895 +f 872 895 896 +f 872 896 873 +f 873 896 897 +f 873 897 874 +f 874 897 898 +f 874 898 875 +f 875 899 876 +f 875 898 899 +f 876 900 877 +f 876 899 901 +f 876 901 900 +f 877 900 902 +f 877 902 878 +f 878 902 903 +f 878 903 879 +f 879 903 904 +f 879 904 880 +f 880 904 881 +f 881 904 905 +f 881 905 882 +f 882 905 906 +f 882 906 883 +f 883 906 884 +f 884 906 907 +f 887 908 888 +f 888 908 909 +f 888 909 910 +f 889 911 912 +f 889 912 913 +f 889 913 890 +f 890 913 891 +f 891 913 914 +f 891 914 915 +f 891 915 916 +f 891 916 892 +f 892 916 917 +f 892 917 893 +f 893 917 918 +f 893 918 919 +f 893 919 894 +f 894 919 895 +f 895 920 896 +f 895 919 920 +f 896 921 897 +f 896 920 921 +f 897 922 898 +f 897 921 922 +f 898 922 923 +f 898 923 899 +f 899 923 924 +f 899 924 901 +f 900 901 925 +f 900 925 926 +f 900 926 902 +f 901 924 927 +f 901 927 925 +f 902 926 928 +f 902 928 903 +f 903 928 929 +f 903 929 904 +f 904 929 905 +f 905 929 930 +f 905 930 906 +f 906 930 907 +f 907 930 931 +f 909 932 910 +f 910 932 933 +f 911 934 935 +f 911 935 912 +f 912 936 913 +f 912 935 936 +f 913 936 937 +f 913 937 914 +f 914 937 938 +f 914 938 939 +f 914 939 915 +f 915 939 940 +f 915 940 916 +f 916 940 941 +f 916 941 917 +f 917 941 918 +f 918 942 943 +f 918 943 919 +f 918 941 942 +f 919 943 920 +f 920 943 944 +f 920 944 921 +f 921 945 922 +f 921 944 945 +f 922 945 946 +f 922 946 923 +f 923 946 947 +f 923 947 924 +f 924 948 927 +f 924 947 948 +f 925 949 926 +f 925 927 950 +f 925 950 949 +f 926 951 928 +f 926 949 951 +f 927 948 952 +f 927 952 950 +f 928 953 929 +f 928 951 953 +f 929 953 930 +f 930 953 931 +f 931 953 954 +f 932 955 933 +f 933 955 956 +f 933 956 957 +f 934 958 959 +f 934 959 935 +f 935 959 960 +f 935 960 961 +f 935 961 936 +f 936 961 937 +f 937 962 938 +f 937 961 962 +f 938 963 964 +f 938 964 939 +f 938 962 963 +f 939 964 965 +f 939 965 940 +f 940 965 966 +f 940 966 941 +f 941 966 942 +f 942 966 967 +f 942 967 943 +f 943 967 944 +f 944 967 968 +f 944 968 945 +f 945 968 969 +f 945 969 946 +f 946 969 970 +f 946 970 947 +f 947 970 971 +f 947 971 948 +f 948 971 952 +f 949 950 972 +f 949 972 973 +f 949 973 974 +f 949 974 951 +f 950 952 975 +f 950 975 972 +f 951 974 954 +f 951 954 953 +f 952 971 976 +f 952 976 975 +f 956 977 957 +f 957 977 979 +f 957 979 978 +f 958 980 959 +f 959 980 981 +f 959 981 982 +f 959 982 960 +f 960 982 983 +f 960 983 984 +f 960 984 961 +f 961 984 962 +f 962 984 985 +f 962 985 963 +f 963 986 987 +f 963 987 964 +f 963 985 986 +f 964 987 988 +f 964 988 965 +f 965 988 989 +f 965 989 966 +f 966 989 990 +f 966 990 967 +f 967 990 968 +f 968 990 991 +f 968 991 969 +f 969 991 992 +f 969 992 970 +f 970 992 993 +f 970 993 971 +f 971 993 994 +f 971 994 976 +f 978 979 996 +f 978 996 997 +f 978 997 995 +f 980 998 981 +f 981 999 1000 +f 981 1000 982 +f 981 998 1001 +f 981 1001 999 +f 982 1000 1002 +f 982 1002 983 +f 983 1002 1003 +f 983 1003 1004 +f 983 1004 1005 +f 983 1005 1006 +f 983 1006 984 +f 984 1006 985 +f 985 1006 1007 +f 985 1007 986 +f 986 1008 987 +f 986 1007 1008 +f 987 1009 988 +f 987 1008 1009 +f 988 1009 1010 +f 988 1010 989 +f 989 1010 1011 +f 989 1011 990 +f 990 1011 991 +f 991 1011 1012 +f 991 1012 992 +f 992 1012 1013 +f 992 1013 993 +f 993 1013 1014 +f 993 1014 1015 +f 993 1015 994 +f 995 997 1016 +f 997 1017 1018 +f 997 1018 1016 +f 999 1001 1019 +f 999 1019 1002 +f 999 1002 1000 +f 1001 1020 1021 +f 1001 1021 1019 +f 1002 1019 1021 +f 1002 1021 1003 +f 1003 1022 1004 +f 1003 1021 1020 +f 1003 1020 1022 +f 1004 1022 1005 +f 1005 1022 1006 +f 1006 1022 1023 +f 1006 1023 1007 +f 1007 1023 1024 +f 1007 1024 1025 +f 1007 1025 1026 +f 1007 1026 1008 +f 1008 1026 1027 +f 1008 1027 1009 +f 1009 1028 1010 +f 1009 1027 1028 +f 1010 1029 1011 +f 1010 1028 1029 +f 1011 1029 1012 +f 1012 1029 1030 +f 1012 1030 1013 +f 1013 1030 1014 +f 1014 1030 1031 +f 1017 1032 1033 +f 1017 1033 1018 +f 1020 1034 1035 +f 1020 1035 1036 +f 1020 1036 1037 +f 1020 1037 1038 +f 1020 1038 1039 +f 1020 1039 1040 +f 1020 1040 1025 +f 1020 1025 1024 +f 1020 1024 1023 +f 1020 1023 1022 +f 1025 1040 1026 +f 1026 1041 1042 +f 1026 1042 1027 +f 1026 1040 1041 +f 1027 1043 1028 +f 1027 1042 1043 +f 1028 1043 1044 +f 1028 1044 1029 +f 1029 1044 1030 +f 1030 1044 1045 +f 1030 1045 1031 +f 1032 1046 1033 +f 1033 1046 1047 +f 1034 1047 1035 +f 1035 1047 1046 +f 1038 1048 1049 +f 1038 1049 1050 +f 1038 1050 1039 +f 1039 1050 1041 +f 1039 1041 1040 +f 1041 1050 1042 +f 1042 1050 1049 +f 1042 1049 1048 +f 1042 1048 1043 +f 1043 1051 1052 +f 1043 1052 1044 +f 1043 1048 1051 +f 1044 1052 1045 + +o geometry_3 +v -0.04741236 -0.10961390 0.05849064 0.38039216 0.78823529 0.52549020 +v -0.04737523 -0.10931793 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04740308 -0.10743357 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04740308 -0.10724612 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04740308 -0.10754209 0.06487051 0.38039216 0.78823529 0.52549020 +v -0.04738452 -0.10739410 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04726384 -0.11147853 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04733810 -0.11161665 0.05849064 0.38039216 0.78823529 0.52549020 +v -0.04734739 -0.11132068 0.06831470 0.38039216 0.78823529 0.52549020 +v -0.04734739 -0.11109377 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04736595 -0.10681203 0.04998512 0.38039216 0.78823529 0.52549020 +v -0.04723599 -0.10577612 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04686468 -0.10166210 0.05849064 0.38039216 0.78823529 0.52549020 +v -0.04712460 -0.10430612 0.05849064 0.38039216 0.78823529 0.52549020 +v -0.04736595 -0.10680216 0.05849064 0.38039216 0.78823529 0.52549020 +v -0.04736595 -0.10680216 0.05423936 0.38039216 0.78823529 0.52549020 +v -0.04679042 -0.10248095 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04685540 -0.11502034 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04685540 -0.11598718 0.06906858 0.38039216 0.78823529 0.52549020 +v -0.04686468 -0.11578000 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04698536 -0.10366485 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04641911 -0.10011317 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04648409 -0.09950149 0.05423936 0.38039216 0.78823529 0.52549020 +v -0.04627987 -0.09913646 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04659549 -0.11705269 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04640983 -0.11837470 0.04986391 0.38039216 0.78823529 0.52549020 +v -0.04606637 -0.12006175 0.05415362 0.38039216 0.78823529 0.52549020 +v -0.04590856 -0.12059450 0.06981063 0.38039216 0.78823529 0.52549020 +v -0.04590856 -0.12042678 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04575075 -0.09690680 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04555582 -0.09572291 0.05849064 0.38039216 0.78823529 0.52549020 +v -0.04576004 -0.09644311 0.04998512 0.38039216 0.78823529 0.52549020 +v -0.04531447 -0.09511123 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04625203 -0.11906530 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04607565 -0.11984470 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04588072 -0.12066356 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04543514 -0.12243939 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04560223 -0.12183758 0.04997921 0.38039216 0.78823529 0.52549020 +v -0.04556510 -0.12196584 0.05849064 0.38039216 0.78823529 0.52549020 +v -0.04449759 -0.12508342 0.07054086 0.38039216 0.78823529 0.52549020 +v -0.04449759 -0.12502422 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04379211 -0.09035593 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04383852 -0.09079989 0.05423936 0.38039216 0.78823529 0.52549020 +v -0.04297522 -0.08918191 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04399632 -0.12667181 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04393135 -0.12683952 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04315159 -0.12850684 0.05418614 0.38039216 0.78823529 0.52549020 +v -0.04265962 -0.12940462 0.07124743 0.38039216 0.78823529 0.52549020 +v -0.04265962 -0.12937503 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04211193 -0.08586701 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04139716 -0.08582755 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04332797 -0.12810234 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04043176 -0.13395274 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04157354 -0.13165402 0.05849064 0.38039216 0.78823529 0.52549020 +v -0.04241826 -0.12981899 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.04039463 -0.13353838 0.07192444 0.38039216 0.78823529 0.52549020 +v -0.04022754 -0.08209829 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.03949421 -0.08090453 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.03600390 -0.07568554 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.03758197 -0.08022379 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04034821 -0.13409086 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04035750 -0.13359757 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.03294989 -0.07207467 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.03554905 -0.07753044 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.04012543 -0.13443617 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.03773049 -0.13743535 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.02935748 -0.06815796 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.03459293 -0.07661292 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.03551192 -0.14091797 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.03765623 -0.13753401 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.02924609 -0.06806917 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.02868912 -0.07114729 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.03101908 -0.07318950 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.03402669 -0.07607031 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.02963596 -0.14705448 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.03469504 -0.14105609 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.03476002 -0.14098703 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.02265536 -0.06284032 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.02729672 -0.07027910 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.02828997 -0.14821863 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.03129757 -0.14434139 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.03147394 -0.14418354 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.01592539 -0.05916039 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.01992624 -0.06584938 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.02247899 -0.06729964 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.02764946 -0.14730111 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.02799292 -0.14842581 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.00931609 -0.05677287 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.01288994 -0.06342240 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.02399207 -0.14965903 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.02430768 -0.15071467 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.00292958 -0.05577643 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.01021652 -0.06256408 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.02364861 -0.14984649 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.02320304 -0.15123755 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.01932286 -0.15212548 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.00328984 -0.05555938 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.00000553 -0.06144924 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.00324520 -0.06179455 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.00968740 -0.06250488 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.02026970 -0.15218467 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.02077097 -0.15229319 0.04286615 0.38039216 0.78823529 0.52549020 +v -0.01559121 -0.15359547 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.00379110 -0.05561858 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.01018689 -0.06256408 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.00851601 -0.06237663 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.02013974 -0.15222413 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.01688151 -0.15364480 0.04410192 0.38039216 0.78823529 0.52549020 +v -0.01021652 -0.15515427 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.00943499 -0.05638811 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.01286960 -0.06341253 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.00955567 -0.05640784 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.01444766 -0.05774958 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.01925788 -0.15236225 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.01282496 -0.15473990 0.04505388 0.38039216 0.78823529 0.52549020 +v -0.01330766 -0.15461165 0.04695187 0.38039216 0.78823529 0.52549020 +v -0.01014226 -0.15517399 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.01739028 -0.06497132 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.01589576 -0.05823301 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.01660303 -0.15275688 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.01595324 -0.15297393 0.04208271 0.38039216 0.78823529 0.52549020 +v -0.00864774 -0.15554890 0.04573089 0.38039216 0.78823529 0.52549020 +v -0.00761736 -0.15578568 0.04773236 0.38039216 0.78823529 0.52549020 +v -0.00792369 -0.15572648 0.04769097 0.38039216 0.78823529 0.52549020 +v -0.00648486 -0.15582513 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.01990590 -0.06583951 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.01871771 -0.05957475 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.01635239 -0.15276676 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.00818360 -0.15469057 0.04388315 0.38039216 0.78823529 0.52549020 +v -0.00440554 -0.15605205 0.04614183 0.38039216 0.78823529 0.52549020 +v -0.00456334 -0.15607178 0.04791566 0.38039216 0.78823529 0.52549020 +v -0.00182494 -0.15632829 0.04808121 0.38039216 0.78823529 0.52549020 +v -0.00591862 -0.15587447 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.02245865 -0.06727991 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02220801 -0.06160710 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.01383678 -0.15279635 0.04184916 0.38039216 0.78823529 0.52549020 +v -0.00416419 -0.15515427 0.04435026 0.38039216 0.78823529 0.52549020 +v -0.00007051 -0.15622963 0.04629260 0.38039216 0.78823529 0.52549020 +v 0.00010586 -0.15634803 0.04827042 0.38039216 0.78823529 0.52549020 +v -0.00092452 -0.15624936 0.07205157 0.38039216 0.78823529 0.52549020 +v -0.00121228 -0.15622963 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.02865950 -0.07111769 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02571688 -0.06392555 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.01644345 -0.15266809 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.00401389 -0.15516413 0.04438278 0.38039216 0.78823529 0.52549020 +v -0.00006122 -0.15531211 0.04451877 0.38039216 0.78823529 0.52549020 +v 0.00423667 -0.15606192 0.04617139 0.38039216 0.78823529 0.52549020 +v 0.00391178 -0.15620991 0.04802209 0.38039216 0.78823529 0.52549020 +v 0.00302064 -0.15617044 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.02825106 -0.06600723 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03099874 -0.07315990 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.01684260 -0.15265823 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.01583079 -0.15299367 0.04220392 0.38039216 0.78823529 0.52549020 +v 0.00803330 -0.15471031 0.04394819 0.38039216 0.78823529 0.52549020 +v 0.00847888 -0.15556863 0.04579002 0.38039216 0.78823529 0.52549020 +v 0.00438520 -0.15615071 0.04798365 0.38039216 0.78823529 0.52549020 +v 0.00328984 -0.15616057 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03122153 -0.06876964 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03451689 -0.07652413 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02011012 -0.15216494 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.01631349 -0.15346722 0.04317362 0.38039216 0.78823529 0.52549020 +v 0.00882234 -0.15558836 0.04764071 0.38039216 0.78823529 0.52549020 +v 0.00813541 -0.15567715 0.04769393 0.38039216 0.78823529 0.52549020 +v 0.01267466 -0.15476950 0.04513666 0.38039216 0.78823529 0.52549020 +v 0.00717001 -0.15565742 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03384854 -0.07174910 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03553800 -0.07750084 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02028649 -0.15212548 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02014725 -0.15219454 0.04191420 0.38039216 0.78823529 0.52549020 +v 0.01674049 -0.15367440 0.04421131 0.38039216 0.78823529 0.52549020 +v 0.00835820 -0.15545024 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.00814470 -0.15548971 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.01434555 -0.15432554 0.04680997 0.38039216 0.78823529 0.52549020 +v 0.01279534 -0.15447353 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03552871 -0.07393930 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03757091 -0.08018433 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02073206 -0.15198736 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02344261 -0.15110930 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02066708 -0.15231292 0.04299328 0.38039216 0.78823529 0.52549020 +v 0.01643416 -0.15324030 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03900045 -0.07944440 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04138611 -0.08579795 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.03910255 -0.08243372 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02435232 -0.15067521 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02172531 -0.15091199 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.01733459 -0.15287527 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03906543 -0.07955292 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04181311 -0.08505802 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04297345 -0.08914244 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02623671 -0.14951105 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02517848 -0.14890924 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04534982 -0.09499284 0.05849064 0.38039216 0.78823529 0.52549020 +v 0.04531269 -0.09506190 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04448654 -0.09297036 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04488569 -0.09401613 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.02813967 -0.14829756 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02558692 -0.14862313 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04612029 -0.09781445 0.05423936 0.38039216 0.78823529 0.52549020 +v 0.04576755 -0.09645297 0.04998512 0.38039216 0.78823529 0.52549020 +v 0.04639877 -0.09984680 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04505278 -0.09471660 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04612029 -0.09857411 0.06406638 0.38039216 0.78823529 0.52549020 +v 0.02879874 -0.14780427 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02967132 -0.14570286 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04674223 -0.10085310 0.05849064 0.38039216 0.78823529 0.52549020 +v 0.04678865 -0.10235270 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04669582 -0.10259935 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.02886372 -0.14775495 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.02972701 -0.14700514 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.03283673 -0.14290099 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04738274 -0.10681203 0.05849064 0.38039216 0.78823529 0.52549020 +v 0.04716924 -0.10481914 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04741988 -0.10979148 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03243757 -0.14419340 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.03560297 -0.14085878 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.03297597 -0.14275300 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04739202 -0.10740397 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04738274 -0.10681203 0.04998512 0.38039216 0.78823529 0.52549020 +v 0.04741059 -0.11005786 0.05849064 0.38039216 0.78823529 0.52549020 +v 0.04741059 -0.10920941 0.05003538 0.38039216 0.78823529 0.52549020 +v 0.04715995 -0.11353061 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04715995 -0.11375752 0.06870198 0.38039216 0.78823529 0.52549020 +v 0.04734561 -0.11161665 0.05849064 0.38039216 0.78823529 0.52549020 +v 0.04738274 -0.11083726 0.05849064 0.38039216 0.78823529 0.52549020 +v 0.03631774 -0.13916187 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03619707 -0.13929998 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04021649 -0.13434737 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.03838779 -0.13671515 0.05849064 0.38039216 0.78823529 0.52549020 +v 0.03905614 -0.13556086 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04739202 -0.10798605 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04732705 -0.11033410 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04643590 -0.11819712 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04642662 -0.11838456 0.06943812 0.38039216 0.78823529 0.52549020 +v 0.04676080 -0.11677644 0.05849064 0.38039216 0.78823529 0.52549020 +v 0.04674223 -0.11626343 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04704856 -0.11361940 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04725278 -0.11165611 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04729919 -0.11088659 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04037429 -0.13407113 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04153463 -0.13154550 0.07154603 0.38039216 0.78823529 0.52549020 +v 0.04137682 -0.13179214 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03963167 -0.13463348 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.03907471 -0.13553126 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04524772 -0.12276496 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04523844 -0.12291295 0.07015948 0.38039216 0.78823529 0.52549020 +v 0.04588822 -0.12070302 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04560974 -0.12183758 0.05849064 0.38039216 0.78823529 0.52549020 +v 0.04622240 -0.11913436 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04639877 -0.11830564 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04070846 -0.13347919 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04153463 -0.13152576 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04357683 -0.12756959 0.05849064 0.38039216 0.78823529 0.52549020 +v 0.04360467 -0.12732295 0.07086606 0.38039216 0.78823529 0.52549020 +v 0.04327049 -0.12796422 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04479286 -0.12404751 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04431016 -0.12577402 0.05418614 0.38039216 0.78823529 0.52549020 +v 0.04545193 -0.12244926 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04560974 -0.12183758 0.04998512 0.38039216 0.78823529 0.52549020 +v 0.04390172 -0.12697764 0.04184916 0.38039216 0.78823529 0.52549020 +v 0.04360467 -0.12726375 0.07205157 0.38039216 0.78823529 0.52549020 +v 0.04403168 -0.12661261 0.04184916 0.38039216 0.78823529 0.52549020 +f 1053 1054 1055 +f 1053 1055 1056 +f 1053 1056 1057 +f 1053 1057 1058 +f 1053 1058 1059 +f 1053 1059 1060 +f 1053 1060 1061 +f 1053 1061 1062 +f 1053 1062 1054 +f 1054 1062 1072 +f 1054 1072 1081 +f 1054 1081 1093 +f 1054 1093 1101 +f 1054 1101 1107 +f 1054 1107 1114 +f 1054 1114 1118 +f 1054 1118 1122 +f 1054 1122 1129 +f 1054 1129 1128 +f 1054 1128 1134 +f 1054 1134 1133 +f 1054 1133 1138 +f 1054 1138 1142 +f 1054 1142 1146 +f 1054 1146 1148 +f 1054 1148 1155 +f 1054 1155 1161 +f 1054 1161 1169 +f 1054 1169 1177 +f 1054 1177 1185 +f 1054 1185 1193 +f 1054 1193 1192 +f 1054 1192 1201 +f 1054 1201 1209 +f 1054 1209 1217 +f 1054 1217 1224 +f 1054 1224 1223 +f 1054 1223 1226 +f 1054 1226 1232 +f 1054 1232 1238 +f 1054 1238 1237 +f 1054 1237 1243 +f 1054 1243 1249 +f 1054 1249 1256 +f 1054 1256 1262 +f 1054 1262 1268 +f 1054 1268 1278 +f 1054 1278 1277 +f 1054 1277 1281 +f 1054 1281 1295 +f 1054 1295 1294 +f 1054 1294 1293 +f 1054 1293 1303 +f 1054 1303 1306 +f 1054 1306 1312 +f 1054 1312 1307 +f 1054 1307 1296 +f 1054 1296 1284 +f 1054 1284 1273 +f 1054 1273 1265 +f 1054 1265 1259 +f 1054 1259 1253 +f 1054 1253 1247 +f 1054 1247 1240 +f 1054 1240 1239 +f 1054 1239 1233 +f 1054 1233 1227 +f 1054 1227 1218 +f 1054 1218 1210 +f 1054 1210 1202 +f 1054 1202 1195 +f 1054 1195 1187 +f 1054 1187 1179 +f 1054 1179 1171 +f 1054 1171 1165 +f 1054 1165 1164 +f 1054 1164 1162 +f 1054 1162 1156 +f 1054 1156 1149 +f 1054 1149 1144 +f 1054 1144 1140 +f 1054 1140 1135 +f 1054 1135 1130 +f 1054 1130 1123 +f 1054 1123 1119 +f 1054 1119 1115 +f 1054 1115 1111 +f 1054 1111 1110 +f 1054 1110 1109 +f 1054 1109 1102 +f 1054 1102 1094 +f 1054 1094 1082 +f 1054 1082 1074 +f 1054 1074 1073 +f 1054 1073 1064 +f 1054 1064 1056 +f 1054 1056 1055 +f 1056 1063 1058 +f 1056 1058 1057 +f 1056 1064 1065 +f 1056 1065 1066 +f 1056 1066 1067 +f 1056 1067 1068 +f 1056 1068 1063 +f 1058 1063 1065 +f 1058 1065 1069 +f 1058 1069 1076 +f 1058 1076 1085 +f 1058 1085 1096 +f 1058 1096 1103 +f 1058 1103 1112 +f 1058 1112 1116 +f 1058 1116 1120 +f 1058 1120 1126 +f 1058 1126 1125 +f 1058 1125 1124 +f 1058 1124 1131 +f 1058 1131 1137 +f 1058 1137 1136 +f 1058 1136 1141 +f 1058 1141 1145 +f 1058 1145 1152 +f 1058 1152 1151 +f 1058 1151 1150 +f 1058 1150 1158 +f 1058 1158 1157 +f 1058 1157 1163 +f 1058 1163 1170 +f 1058 1170 1178 +f 1058 1178 1186 +f 1058 1186 1194 +f 1058 1194 1203 +f 1058 1203 1211 +f 1058 1211 1219 +f 1058 1219 1228 +f 1058 1228 1235 +f 1058 1235 1234 +f 1058 1234 1241 +f 1058 1241 1246 +f 1058 1246 1245 +f 1058 1245 1252 +f 1058 1252 1258 +f 1058 1258 1264 +f 1058 1264 1269 +f 1058 1269 1282 +f 1058 1282 1283 +f 1058 1283 1290 +f 1058 1290 1289 +f 1058 1289 1288 +f 1058 1288 1287 +f 1058 1287 1301 +f 1058 1301 1300 +f 1058 1300 1298 +f 1058 1298 1309 +f 1058 1309 1313 +f 1058 1313 1311 +f 1058 1311 1302 +f 1058 1302 1291 +f 1058 1291 1279 +f 1058 1279 1267 +f 1058 1267 1266 +f 1058 1266 1261 +f 1058 1261 1260 +f 1058 1260 1255 +f 1058 1255 1248 +f 1058 1248 1242 +f 1058 1242 1236 +f 1058 1236 1230 +f 1058 1230 1229 +f 1058 1229 1220 +f 1058 1220 1212 +f 1058 1212 1204 +f 1058 1204 1196 +f 1058 1196 1188 +f 1058 1188 1180 +f 1058 1180 1172 +f 1058 1172 1166 +f 1058 1166 1159 +f 1058 1159 1153 +f 1058 1153 1147 +f 1058 1147 1143 +f 1058 1143 1139 +f 1058 1139 1132 +f 1058 1132 1127 +f 1058 1127 1121 +f 1058 1121 1117 +f 1058 1117 1113 +f 1058 1113 1105 +f 1058 1105 1104 +f 1058 1104 1098 +f 1058 1098 1097 +f 1058 1097 1089 +f 1058 1089 1088 +f 1058 1088 1087 +f 1058 1087 1086 +f 1058 1086 1077 +f 1058 1077 1070 +f 1058 1070 1059 +f 1059 1070 1060 +f 1060 1070 1071 +f 1060 1071 1061 +f 1061 1071 1072 +f 1061 1072 1062 +f 1063 1068 1066 +f 1063 1066 1065 +f 1064 1073 1065 +f 1065 1073 1074 +f 1065 1074 1075 +f 1065 1075 1069 +f 1066 1068 1067 +f 1069 1075 1076 +f 1070 1077 1071 +f 1071 1077 1078 +f 1071 1078 1079 +f 1071 1079 1080 +f 1071 1080 1072 +f 1072 1080 1081 +f 1074 1082 1075 +f 1075 1082 1083 +f 1075 1083 1084 +f 1075 1084 1076 +f 1076 1084 1085 +f 1077 1086 1078 +f 1078 1086 1079 +f 1079 1086 1087 +f 1079 1087 1088 +f 1079 1088 1089 +f 1079 1089 1090 +f 1079 1090 1091 +f 1079 1091 1080 +f 1080 1091 1092 +f 1080 1092 1093 +f 1080 1093 1081 +f 1082 1094 1083 +f 1083 1085 1084 +f 1083 1094 1085 +f 1085 1094 1095 +f 1085 1095 1096 +f 1089 1091 1090 +f 1089 1097 1092 +f 1089 1092 1091 +f 1092 1097 1098 +f 1092 1098 1099 +f 1092 1099 1100 +f 1092 1100 1101 +f 1092 1101 1093 +f 1094 1102 1095 +f 1095 1102 1096 +f 1096 1102 1103 +f 1098 1104 1099 +f 1099 1104 1105 +f 1099 1105 1106 +f 1099 1106 1100 +f 1100 1107 1101 +f 1100 1106 1108 +f 1100 1108 1107 +f 1102 1109 1103 +f 1103 1109 1110 +f 1103 1110 1111 +f 1103 1111 1112 +f 1105 1113 1108 +f 1105 1108 1106 +f 1107 1108 1114 +f 1108 1113 1114 +f 1111 1115 1116 +f 1111 1116 1112 +f 1113 1117 1114 +f 1114 1117 1118 +f 1115 1119 1116 +f 1116 1119 1120 +f 1117 1121 1118 +f 1118 1121 1122 +f 1119 1123 1124 +f 1119 1124 1125 +f 1119 1125 1126 +f 1119 1126 1120 +f 1121 1127 1128 +f 1121 1128 1129 +f 1121 1129 1122 +f 1123 1130 1124 +f 1124 1130 1131 +f 1127 1132 1133 +f 1127 1133 1134 +f 1127 1134 1128 +f 1130 1135 1136 +f 1130 1136 1137 +f 1130 1137 1131 +f 1132 1138 1133 +f 1132 1139 1138 +f 1135 1140 1136 +f 1136 1140 1141 +f 1138 1139 1142 +f 1139 1143 1142 +f 1140 1144 1145 +f 1140 1145 1141 +f 1142 1143 1146 +f 1143 1147 1148 +f 1143 1148 1146 +f 1144 1149 1150 +f 1144 1150 1151 +f 1144 1151 1152 +f 1144 1152 1145 +f 1147 1153 1154 +f 1147 1154 1148 +f 1148 1154 1155 +f 1149 1156 1157 +f 1149 1157 1158 +f 1149 1158 1150 +f 1153 1159 1154 +f 1154 1159 1160 +f 1154 1160 1155 +f 1155 1160 1161 +f 1156 1162 1157 +f 1157 1162 1164 +f 1157 1164 1165 +f 1157 1165 1163 +f 1159 1166 1167 +f 1159 1167 1160 +f 1160 1167 1168 +f 1160 1168 1161 +f 1161 1168 1169 +f 1163 1165 1171 +f 1163 1171 1170 +f 1166 1172 1173 +f 1166 1173 1167 +f 1167 1174 1175 +f 1167 1175 1176 +f 1167 1176 1169 +f 1167 1169 1168 +f 1167 1173 1174 +f 1169 1176 1175 +f 1169 1175 1177 +f 1170 1171 1178 +f 1171 1179 1178 +f 1172 1180 1173 +f 1173 1180 1181 +f 1173 1181 1174 +f 1174 1182 1175 +f 1174 1181 1182 +f 1175 1182 1183 +f 1175 1183 1177 +f 1177 1183 1184 +f 1177 1184 1185 +f 1178 1179 1186 +f 1179 1187 1186 +f 1180 1188 1181 +f 1181 1189 1182 +f 1181 1188 1189 +f 1182 1189 1190 +f 1182 1190 1184 +f 1182 1184 1183 +f 1184 1190 1191 +f 1184 1191 1192 +f 1184 1192 1193 +f 1184 1193 1185 +f 1186 1187 1194 +f 1187 1195 1194 +f 1188 1196 1197 +f 1188 1197 1198 +f 1188 1198 1189 +f 1189 1198 1190 +f 1190 1199 1200 +f 1190 1200 1191 +f 1190 1198 1197 +f 1190 1197 1199 +f 1191 1200 1201 +f 1191 1201 1192 +f 1194 1195 1202 +f 1194 1202 1203 +f 1196 1204 1205 +f 1196 1205 1206 +f 1196 1206 1197 +f 1197 1206 1199 +f 1199 1207 1200 +f 1199 1206 1207 +f 1200 1207 1208 +f 1200 1208 1209 +f 1200 1209 1201 +f 1202 1210 1203 +f 1203 1210 1211 +f 1204 1212 1213 +f 1204 1213 1205 +f 1205 1213 1206 +f 1206 1213 1207 +f 1207 1214 1215 +f 1207 1215 1208 +f 1207 1213 1216 +f 1207 1216 1214 +f 1208 1215 1209 +f 1209 1215 1217 +f 1210 1218 1219 +f 1210 1219 1211 +f 1212 1220 1221 +f 1212 1221 1213 +f 1213 1222 1216 +f 1213 1221 1222 +f 1214 1223 1224 +f 1214 1224 1217 +f 1214 1217 1215 +f 1214 1216 1223 +f 1216 1222 1225 +f 1216 1225 1226 +f 1216 1226 1223 +f 1218 1227 1219 +f 1219 1227 1228 +f 1220 1229 1221 +f 1221 1229 1230 +f 1221 1230 1231 +f 1221 1231 1222 +f 1222 1232 1226 +f 1222 1226 1225 +f 1222 1231 1232 +f 1227 1233 1234 +f 1227 1234 1235 +f 1227 1235 1228 +f 1230 1236 1237 +f 1230 1237 1238 +f 1230 1238 1231 +f 1231 1238 1232 +f 1233 1239 1234 +f 1234 1240 1241 +f 1234 1239 1240 +f 1236 1242 1243 +f 1236 1243 1237 +f 1240 1244 1245 +f 1240 1245 1246 +f 1240 1246 1241 +f 1240 1247 1244 +f 1242 1248 1243 +f 1243 1248 1249 +f 1244 1247 1250 +f 1244 1250 1251 +f 1244 1251 1245 +f 1245 1251 1252 +f 1247 1253 1254 +f 1247 1254 1250 +f 1248 1255 1256 +f 1248 1256 1249 +f 1250 1254 1257 +f 1250 1257 1252 +f 1250 1252 1251 +f 1252 1257 1258 +f 1253 1259 1254 +f 1254 1259 1257 +f 1255 1260 1256 +f 1256 1260 1261 +f 1256 1261 1262 +f 1257 1259 1263 +f 1257 1263 1264 +f 1257 1264 1258 +f 1259 1265 1263 +f 1261 1266 1262 +f 1262 1267 1268 +f 1262 1266 1267 +f 1263 1265 1269 +f 1263 1269 1270 +f 1263 1270 1264 +f 1264 1270 1269 +f 1265 1271 1272 +f 1265 1272 1269 +f 1265 1273 1274 +f 1265 1274 1275 +f 1265 1275 1276 +f 1265 1276 1271 +f 1267 1277 1278 +f 1267 1278 1268 +f 1267 1279 1280 +f 1267 1280 1281 +f 1267 1281 1277 +f 1269 1272 1282 +f 1271 1276 1272 +f 1272 1276 1283 +f 1272 1283 1282 +f 1273 1284 1274 +f 1274 1284 1285 +f 1274 1285 1286 +f 1274 1286 1287 +f 1274 1287 1288 +f 1274 1288 1275 +f 1275 1288 1289 +f 1275 1289 1290 +f 1275 1290 1283 +f 1275 1283 1276 +f 1279 1291 1292 +f 1279 1292 1293 +f 1279 1293 1294 +f 1279 1294 1295 +f 1279 1295 1281 +f 1279 1281 1280 +f 1284 1296 1297 +f 1284 1297 1285 +f 1285 1298 1286 +f 1285 1297 1299 +f 1285 1299 1298 +f 1286 1298 1300 +f 1286 1300 1301 +f 1286 1301 1287 +f 1291 1302 1292 +f 1292 1303 1293 +f 1292 1302 1304 +f 1292 1304 1305 +f 1292 1305 1306 +f 1292 1306 1303 +f 1296 1307 1297 +f 1297 1307 1305 +f 1297 1305 1308 +f 1297 1308 1309 +f 1297 1309 1299 +f 1298 1299 1310 +f 1298 1310 1309 +f 1299 1309 1310 +f 1302 1311 1304 +f 1304 1311 1308 +f 1304 1308 1305 +f 1305 1312 1306 +f 1305 1307 1312 +f 1308 1311 1313 +f 1308 1313 1309 + +o geometry_4 +v -0.04738875 -0.10744775 0.04121534 0.56470588 0.92549020 0.07058824 +v -0.04727741 -0.10863777 0.02825078 0.56470588 0.92549020 0.07058824 +v -0.04722174 -0.11166859 0.03214426 0.56470588 0.92549020 0.07058824 +v -0.04725885 -0.11147335 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04737947 -0.10764298 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04737947 -0.10740126 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04691555 -0.10247385 0.03178208 0.56470588 0.92549020 0.07058824 +v -0.04658152 -0.10286432 0.01718769 0.56470588 0.92549020 0.07058824 +v -0.04707328 -0.10955817 0.02212657 0.56470588 0.92549020 0.07058824 +v -0.04702688 -0.10976270 0.02077660 0.56470588 0.92549020 0.07058824 +v -0.04691555 -0.11285861 0.02310611 0.56470588 0.92549020 0.07058824 +v -0.04219280 -0.15642440 0.00036257 0.56470588 0.92549020 0.07058824 +v -0.04678565 -0.11568490 0.03356007 0.56470588 0.92549020 0.07058824 +v -0.04724957 -0.11164070 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04679493 -0.10248314 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04654441 -0.10085617 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04627533 -0.09913622 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04463304 -0.09305597 0.02929617 0.56470588 0.92549020 0.07058824 +v -0.04430829 -0.09345575 0.01266861 0.56470588 0.92549020 0.07058824 +v -0.04589491 -0.10431466 0.00658556 0.56470588 0.92549020 0.07058824 +v -0.04402066 -0.09403216 0.00603405 0.56470588 0.92549020 0.07058824 +v -0.04681348 -0.11061803 0.01750871 0.56470588 0.92549020 0.07058824 +v -0.04668358 -0.11111077 0.01565663 0.56470588 0.92549020 0.07058824 +v -0.04662791 -0.11379761 0.01877636 0.56470588 0.92549020 0.07058824 +v -0.04104227 -0.15642440 -0.00818169 0.56470588 0.92549020 0.07058824 +v -0.04218352 -0.15642440 0.00082353 0.56470588 0.92549020 0.07058824 +v -0.04659080 -0.11705156 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04685060 -0.11502481 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04639595 -0.11216133 0.01304726 0.56470588 0.92549020 0.07058824 +v -0.04627533 -0.11259829 0.01198540 0.56470588 0.92549020 0.07058824 +v -0.04618255 -0.11292369 0.01117872 0.56470588 0.92549020 0.07058824 +v -0.04531037 -0.09511061 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04452169 -0.09309316 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04297219 -0.08917912 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04047627 -0.08428889 0.02699136 0.56470588 0.92549020 0.07058824 +v -0.04018864 -0.08470726 0.00847056 0.56470588 0.92549020 0.07058824 +v -0.03991957 -0.08532086 0.00107047 0.56470588 0.92549020 0.07058824 +v -0.04364952 -0.09502694 0.00051897 0.56470588 0.92549020 0.07058824 +v -0.04321343 -0.09657954 -0.00392603 0.56470588 0.92549020 0.07058824 +v -0.04544027 -0.10571850 0.00272500 0.56470588 0.92549020 0.07058824 +v -0.03957626 -0.08639931 -0.00510313 0.56470588 0.92549020 0.07058824 +v -0.04058762 -0.15642440 -0.01153190 0.56470588 0.92549020 0.07058824 +v -0.04580213 -0.11424386 0.00893153 0.56470588 0.92549020 0.07058824 +v -0.04167320 -0.15642440 0.00415728 0.56470588 0.92549020 0.07058824 +v -0.04543099 -0.12244382 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04587635 -0.12065880 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04607120 -0.11984066 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04623821 -0.11913409 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04492995 -0.10774525 -0.00025479 0.56470588 0.92549020 0.07058824 +v -0.04139485 -0.08583220 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04039277 -0.08435397 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.03758138 -0.08022610 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.03464010 -0.07656308 0.02495819 0.56470588 0.92549020 0.07058824 +v -0.03438031 -0.07699074 0.00477463 0.56470588 0.92549020 0.07058824 +v -0.03414835 -0.07764153 -0.00330867 0.56470588 0.92549020 0.07058824 +v -0.03386071 -0.07877576 -0.01007493 0.56470588 0.92549020 0.07058824 +v -0.03917729 -0.08807278 -0.01010786 0.56470588 0.92549020 0.07058824 +v -0.04272167 -0.09882012 -0.00739970 0.56470588 0.92549020 0.07058824 +v -0.03873192 -0.09052719 -0.01403426 0.56470588 0.92549020 0.07058824 +v -0.03350813 -0.08057938 -0.01556532 0.56470588 0.92549020 0.07058824 +v -0.03996596 -0.14257186 -0.01424828 0.56470588 0.92549020 0.07058824 +v -0.03773912 -0.14257186 -0.01927771 0.56470588 0.92549020 0.07058824 +v -0.03569785 -0.15642440 -0.02250445 0.56470588 0.92549020 0.07058824 +v -0.04440107 -0.11048787 -0.00246906 0.56470588 0.92549020 0.07058824 +v -0.04386292 -0.11407651 -0.00401657 0.56470588 0.92549020 0.07058824 +v -0.04121855 -0.11096202 -0.01306295 0.56470588 0.92549020 0.07058824 +v -0.04038349 -0.15642440 0.01224057 0.56470588 0.92549020 0.07058824 +v -0.04399282 -0.12667397 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04221135 -0.10188813 -0.00999262 0.56470588 0.92549020 0.07058824 +v -0.03554940 -0.07752997 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.03102149 -0.07318826 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.02734721 -0.07017603 0.02327897 0.56470588 0.92549020 0.07058824 +v -0.02714309 -0.07062229 0.00172076 0.56470588 0.92549020 0.07058824 +v -0.02695752 -0.07130097 -0.00692228 0.56470588 0.92549020 0.07058824 +v -0.02671628 -0.07249099 -0.01416597 0.56470588 0.92549020 0.07058824 +v -0.02643792 -0.07438758 -0.02005970 0.56470588 0.92549020 0.07058824 +v -0.03312771 -0.08320114 -0.01988684 0.56470588 0.92549020 0.07058824 +v -0.03826799 -0.09389270 -0.01698936 0.56470588 0.92549020 0.07058824 +v -0.03271946 -0.08682698 -0.02315473 0.56470588 0.92549020 0.07058824 +v -0.02613173 -0.07716738 -0.02471047 0.56470588 0.92549020 0.07058824 +v -0.04078246 -0.11714453 -0.01379555 0.56470588 0.92549020 0.07058824 +v -0.03695973 -0.11071100 -0.02139319 0.56470588 0.92549020 0.07058824 +v -0.03635663 -0.12823586 -0.02205995 0.56470588 0.92549020 0.07058824 +v -0.03495557 -0.14257186 -0.02390379 0.56470588 0.92549020 0.07058824 +v -0.03142047 -0.14257186 -0.02834055 0.56470588 0.92549020 0.07058824 +v -0.03341535 -0.15642440 -0.02536900 0.56470588 0.92549020 0.07058824 +v -0.04170104 -0.10590444 -0.01183647 0.56470588 0.92549020 0.07058824 +v -0.03735870 -0.10388699 -0.02052066 0.56470588 0.92549020 0.07058824 +v -0.03528960 -0.15642440 0.02312257 0.56470588 0.92549020 0.07058824 +v -0.04043916 -0.13395352 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04332477 -0.12810571 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04374230 -0.12724108 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04392787 -0.12684131 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.03780407 -0.09830878 -0.01910485 0.56470588 0.92549020 0.07058824 +v -0.02868332 -0.07114292 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.02730082 -0.07027830 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.02247601 -0.06729395 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.01891307 -0.06541596 0.02202779 0.56470588 0.92549020 0.07058824 +v -0.01876461 -0.06587152 -0.00054289 0.56470588 0.92549020 0.07058824 +v -0.01863471 -0.06656879 -0.00962220 0.56470588 0.92549020 0.07058824 +v -0.01846770 -0.06780529 -0.01721984 0.56470588 0.92549020 0.07058824 +v -0.02246673 -0.07186809 -0.02188708 0.56470588 0.92549020 0.07058824 +v -0.02220693 -0.07470367 -0.02666956 0.56470588 0.92549020 0.07058824 +v -0.02580699 -0.08100705 -0.02823355 0.56470588 0.92549020 0.07058824 +v -0.03232049 -0.09159634 -0.02550893 0.56470588 0.92549020 0.07058824 +v -0.02548224 -0.08606462 -0.03078530 0.56470588 0.92549020 0.07058824 +v -0.02191930 -0.07863631 -0.03029964 0.56470588 0.92549020 0.07058824 +v -0.03158749 -0.10503982 -0.02809361 0.56470588 0.92549020 0.07058824 +v -0.03106789 -0.12405221 -0.02889206 0.56470588 0.92549020 0.07058824 +v -0.02790392 -0.15642440 -0.03164138 0.56470588 0.92549020 0.07058824 +v -0.03193079 -0.09763940 -0.02710584 0.56470588 0.92549020 0.07058824 +v -0.02734721 -0.15642440 0.03212780 0.56470588 0.92549020 0.07058824 +v -0.02963900 -0.14705301 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.03551228 -0.14091698 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.04012369 -0.13442767 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.01992442 -0.06585292 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.01852337 -0.06536948 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.01289133 -0.06342640 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.00968097 -0.06246881 0.02126226 0.56470588 0.92549020 0.07058824 +v -0.00960675 -0.06292436 -0.00195047 0.56470588 0.92549020 0.07058824 +v -0.00953252 -0.06364023 -0.01127672 0.56470588 0.92549020 0.07058824 +v -0.01402331 -0.06612253 -0.01831463 0.56470588 0.92549020 0.07058824 +v -0.01386557 -0.06811209 -0.02461170 0.56470588 0.92549020 0.07058824 +v -0.01826358 -0.06976696 -0.02340991 0.56470588 0.92549020 0.07058824 +v -0.01804089 -0.07265833 -0.02829940 0.56470588 0.92549020 0.07058824 +v -0.01780893 -0.07665605 -0.03201179 0.56470588 0.92549020 0.07058824 +v -0.02164094 -0.08381475 -0.03292548 0.56470588 0.92549020 0.07058824 +v -0.02517605 -0.09247956 -0.03252214 0.56470588 0.92549020 0.07058824 +v -0.01757697 -0.08193675 -0.03471171 0.56470588 0.92549020 0.07058824 +v -0.02489769 -0.10035413 -0.03361692 0.56470588 0.92549020 0.07058824 +v -0.02448016 -0.12061231 -0.03451415 0.56470588 0.92549020 0.07058824 +v -0.02705030 -0.14257186 -0.03251391 0.56470588 0.92549020 0.07058824 +v -0.02722659 -0.15642440 -0.03222581 0.56470588 0.92549020 0.07058824 +v -0.02431315 -0.15642440 0.03418566 0.56470588 0.92549020 0.07058824 +v -0.02430387 -0.15071604 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.02799671 -0.14842897 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.02828434 -0.14821514 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.01020985 -0.06257108 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.00969025 -0.06250600 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.00325098 -0.06179013 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.00005918 -0.06146473 0.02099885 0.56470588 0.92549020 0.07058824 +v -0.00004062 -0.06192958 -0.00241967 0.56470588 0.92549020 0.07058824 +v -0.00003135 -0.06264545 -0.01183647 0.56470588 0.92549020 0.07058824 +v -0.00475410 -0.06417016 -0.01957404 0.56470588 0.92549020 0.07058824 +v -0.00943973 -0.06490462 -0.01909662 0.56470588 0.92549020 0.07058824 +v -0.00932839 -0.06691278 -0.02547600 0.56470588 0.92549020 0.07058824 +v -0.00920777 -0.06987853 -0.03051366 0.56470588 0.92549020 0.07058824 +v -0.01369856 -0.07104065 -0.02958350 0.56470588 0.92549020 0.07058824 +v -0.01351299 -0.07510345 -0.03336998 0.56470588 0.92549020 0.07058824 +v -0.01333670 -0.08045852 -0.03611929 0.56470588 0.92549020 0.07058824 +v -0.01736356 -0.08863989 -0.03655556 0.56470588 0.92549020 0.07058824 +v -0.01715944 -0.09686775 -0.03772443 0.56470588 0.92549020 0.07058824 +v -0.01699242 -0.10666680 -0.03839118 0.56470588 0.92549020 0.07058824 +v -0.01686252 -0.11803704 -0.03869574 0.56470588 0.92549020 0.07058824 +v -0.02257807 -0.14257186 -0.03574064 0.56470588 0.92549020 0.07058824 +v -0.02424820 -0.14257186 -0.03453885 0.56470588 0.92549020 0.07058824 +v -0.02622452 -0.15642440 -0.03295841 0.56470588 0.92549020 0.07058824 +v -0.01739140 -0.15642440 0.03843310 0.56470588 0.92549020 0.07058824 +v -0.02320901 -0.15123667 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.00000351 -0.06145543 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.00957189 -0.06244092 0.02126226 0.56470588 0.92549020 0.07058824 +v 0.00951622 -0.06290577 -0.00194224 0.56470588 0.92549020 0.07058824 +v 0.00946055 -0.06361234 -0.01126850 0.56470588 0.92549020 0.07058824 +v 0.00470996 -0.06416086 -0.01956581 0.56470588 0.92549020 0.07058824 +v -0.00001279 -0.06391914 -0.01973044 0.56470588 0.92549020 0.07058824 +v -0.00468915 -0.06618761 -0.02599459 0.56470588 0.92549020 0.07058824 +v -0.00461492 -0.06917195 -0.03106517 0.56470588 0.92549020 0.07058824 +v -0.00454069 -0.07329983 -0.03492573 0.56470588 0.92549020 0.07058824 +v -0.00907787 -0.07397851 -0.03434129 0.56470588 0.92549020 0.07058824 +v -0.00894797 -0.07938937 -0.03713176 0.56470588 0.92549020 0.07058824 +v -0.00882735 -0.08626916 -0.03904146 0.56470588 0.92549020 0.07058824 +v -0.00871601 -0.09471084 -0.04025149 0.56470588 0.92549020 0.07058824 +v -0.00862323 -0.10477021 -0.04094292 0.56470588 0.92549020 0.07058824 +v -0.00854900 -0.11645655 -0.04127219 0.56470588 0.92549020 0.07058824 +v -0.01204699 -0.14257186 -0.04049843 0.56470588 0.92549020 0.07058824 +v -0.01671407 -0.14257186 -0.03876159 0.56470588 0.92549020 0.07058824 +v -0.01748418 -0.14257186 -0.03847349 0.56470588 0.92549020 0.07058824 +v -0.01904297 -0.15642440 -0.03762565 0.56470588 0.92549020 0.07058824 +v -0.01918215 -0.15642440 -0.03754333 0.56470588 0.92549020 0.07058824 +v -0.01944194 -0.15642440 -0.03738694 0.56470588 0.92549020 0.07058824 +v -0.02037907 -0.15642440 -0.03679427 0.56470588 0.92549020 0.07058824 +v -0.01718727 -0.15642440 0.03852365 0.56470588 0.92549020 0.07058824 +v -0.02027701 -0.15218496 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.01636149 -0.15642440 0.03887760 0.56470588 0.92549020 0.07058824 +v 0.00957189 -0.06248740 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.01018427 -0.06256178 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.01286575 -0.06340781 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.01880398 -0.06536018 0.02203602 0.56470588 0.92549020 0.07058824 +v 0.01868336 -0.06582503 -0.00052643 0.56470588 0.92549020 0.07058824 +v 0.00939560 -0.06488603 -0.01908015 0.56470588 0.92549020 0.07058824 +v 0.01857202 -0.06652230 -0.00959751 0.56470588 0.92549020 0.07058824 +v 0.01398845 -0.06609464 -0.01828993 0.56470588 0.92549020 0.07058824 +v 0.00468213 -0.06617832 -0.02598635 0.56470588 0.92549020 0.07058824 +v 0.00000577 -0.06594589 -0.02616745 0.56470588 0.92549020 0.07058824 +v 0.00001505 -0.06893023 -0.03124626 0.56470588 0.92549020 0.07058824 +v 0.00003360 -0.07306740 -0.03511505 0.56470588 0.92549020 0.07058824 +v 0.00005216 -0.07852475 -0.03793021 0.56470588 0.92549020 0.07058824 +v -0.00446646 -0.07874788 -0.03773266 0.56470588 0.92549020 0.07058824 +v 0.00007072 -0.08546032 -0.03986461 0.56470588 0.92549020 0.07058824 +v 0.00008927 -0.09397638 -0.04109110 0.56470588 0.92549020 0.07058824 +v 0.00010783 -0.10413801 -0.04179077 0.56470588 0.92549020 0.07058824 +v 0.00011711 -0.11591732 -0.04212002 0.56470588 0.92549020 0.07058824 +v -0.00646134 -0.14257186 -0.04174961 0.56470588 0.92549020 0.07058824 +v -0.00844693 -0.14257186 -0.04130511 0.56470588 0.92549020 0.07058824 +v -0.00636855 -0.15642440 -0.04171669 0.56470588 0.92549020 0.07058824 +v -0.00960675 -0.15642440 -0.04073714 0.56470588 0.92549020 0.07058824 +v -0.01786460 -0.15642440 -0.03823478 0.56470588 0.92549020 0.07058824 +v -0.02013783 -0.15222215 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.00845621 -0.15642440 0.04119064 0.56470588 0.92549020 0.07058824 +v -0.00738919 -0.15642440 0.04147874 0.56470588 0.92549020 0.07058824 +v -0.00716650 -0.15642440 0.04153636 0.56470588 0.92549020 0.07058824 +v -0.00693454 -0.15642440 0.04158575 0.56470588 0.92549020 0.07058824 +v -0.00563555 -0.15642440 0.04181623 0.56470588 0.92549020 0.07058824 +v 0.01878543 -0.06545315 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.01990812 -0.06584362 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.02245971 -0.06727536 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.02724741 -0.07010165 0.02328720 0.56470588 0.92549020 0.07058824 +v 0.02706184 -0.07055721 0.00174546 0.56470588 0.92549020 0.07058824 +v 0.00932137 -0.06690348 -0.02545131 0.56470588 0.92549020 0.07058824 +v 0.01843284 -0.06776811 -0.01718692 0.56470588 0.92549020 0.07058824 +v 0.02690410 -0.07123589 -0.00688935 0.56470588 0.92549020 0.07058824 +v 0.01386783 -0.06808420 -0.02457877 0.56470588 0.92549020 0.07058824 +v 0.00465429 -0.06916266 -0.03105694 0.56470588 0.92549020 0.07058824 +v 0.00461718 -0.07329053 -0.03490927 0.56470588 0.92549020 0.07058824 +v 0.00458006 -0.07873858 -0.03771619 0.56470588 0.92549020 0.07058824 +v 0.00897807 -0.08625986 -0.03900030 0.56470588 0.92549020 0.07058824 +v 0.00890384 -0.09471084 -0.04021032 0.56470588 0.92549020 0.07058824 +v 0.00883889 -0.10477951 -0.04089354 0.56470588 0.92549020 0.07058824 +v 0.00879250 -0.11645655 -0.04121456 0.56470588 0.92549020 0.07058824 +v 0.00498832 -0.14257186 -0.04194716 0.56470588 0.92549020 0.07058824 +v -0.00074579 -0.14257186 -0.04224350 0.56470588 0.92549020 0.07058824 +v 0.00562853 -0.15642440 -0.04182370 0.56470588 0.92549020 0.07058824 +v -0.01926565 -0.15236161 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.00637081 -0.15642440 0.04170922 0.56470588 0.92549020 0.07058824 +v 0.01683695 -0.15265911 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.01644725 -0.15267770 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.01383774 -0.15279857 0.04184916 0.56470588 0.92549020 0.07058824 +v -0.01660273 -0.15276138 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.02866702 -0.07111503 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.03455886 -0.07646081 0.02497465 0.56470588 0.92549020 0.07058824 +v 0.03431761 -0.07690707 0.00480756 0.56470588 0.92549020 0.07058824 +v 0.00923786 -0.06985993 -0.03048074 0.56470588 0.92549020 0.07058824 +v 0.01826583 -0.06973907 -0.02336875 0.56470588 0.92549020 0.07058824 +v 0.02669070 -0.07243520 -0.01411658 0.56470588 0.92549020 0.07058824 +v 0.02246899 -0.07183090 -0.02183770 0.56470588 0.92549020 0.07058824 +v 0.03410421 -0.07755786 -0.00326751 0.56470588 0.92549020 0.07058824 +v 0.01372865 -0.07102206 -0.02954235 0.56470588 0.92549020 0.07058824 +v 0.00915436 -0.07396921 -0.03430836 0.56470588 0.92549020 0.07058824 +v 0.00906157 -0.07938937 -0.03709060 0.56470588 0.92549020 0.07058824 +v 0.01750499 -0.08863989 -0.03647324 0.56470588 0.92549020 0.07058824 +v 0.01345030 -0.08044923 -0.03606167 0.56470588 0.92549020 0.07058824 +v 0.01733798 -0.09686775 -0.03763388 0.56470588 0.92549020 0.07058824 +v 0.01719881 -0.10667609 -0.03829240 0.56470588 0.92549020 0.07058824 +v 0.01708746 -0.11804634 -0.03859697 0.56470588 0.92549020 0.07058824 +v 0.01066675 -0.14257186 -0.04088531 0.56470588 0.92549020 0.07058824 +v 0.00986880 -0.15642440 -0.04094292 0.56470588 0.92549020 0.07058824 +v 0.00959972 -0.15642440 0.04072968 0.56470588 0.92549020 0.07058824 +v 0.02028854 -0.15212919 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.02010297 -0.15216637 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.03099591 -0.07316037 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.03289801 -0.07497329 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.03553310 -0.07750208 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04042286 -0.08417733 0.02700782 0.56470588 0.92549020 0.07058824 +v 0.04014450 -0.08460499 0.00851172 0.56470588 0.92549020 0.07058824 +v 0.01808026 -0.07263974 -0.02824178 0.56470588 0.92549020 0.07058824 +v 0.02644018 -0.07434109 -0.02000208 0.56470588 0.92549020 0.07058824 +v 0.03383514 -0.07871069 -0.01000908 0.56470588 0.92549020 0.07058824 +v 0.02223702 -0.07467578 -0.02660371 0.56470588 0.92549020 0.07058824 +v 0.03988471 -0.08522789 0.00111986 0.56470588 0.92549020 0.07058824 +v 0.01358947 -0.07508485 -0.03332059 0.56470588 0.92549020 0.07058824 +v 0.02529893 -0.09247956 -0.03239866 0.56470588 0.92549020 0.07058824 +v 0.01769056 -0.08192745 -0.03463763 0.56470588 0.92549020 0.07058824 +v 0.02557728 -0.08605532 -0.03067829 0.56470588 0.92549020 0.07058824 +v 0.01788541 -0.07664675 -0.03195417 0.56470588 0.92549020 0.07058824 +v 0.02505768 -0.10035413 -0.03348522 0.56470588 0.92549020 0.07058824 +v 0.02467727 -0.12062161 -0.03436599 0.56470588 0.92549020 0.07058824 +v 0.02125350 -0.14257186 -0.03653909 0.56470588 0.92549020 0.07058824 +v 0.01873904 -0.14257186 -0.03788083 0.56470588 0.92549020 0.07058824 +v 0.01609467 -0.14257186 -0.03907439 0.56470588 0.92549020 0.07058824 +v 0.01311627 -0.15642440 -0.04002100 0.56470588 0.92549020 0.07058824 +v 0.01786686 -0.15642440 0.03821908 0.56470588 0.92549020 0.07058824 +v 0.02344323 -0.15110651 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.03756508 -0.08018891 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04033008 -0.08424241 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04138782 -0.08579501 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04297444 -0.08914193 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04459818 -0.09292582 0.02931263 0.56470588 0.92549020 0.07058824 +v 0.04428271 -0.09334418 0.01270977 0.56470588 0.92549020 0.07058824 +v 0.03351039 -0.08051431 -0.01548300 0.56470588 0.92549020 0.07058824 +v 0.02616182 -0.07713019 -0.02462816 0.56470588 0.92549020 0.07058824 +v 0.03955996 -0.08631564 -0.00502904 0.56470588 0.92549020 0.07058824 +v 0.02199578 -0.07861771 -0.03021733 0.56470588 0.92549020 0.07058824 +v 0.04400436 -0.09392989 0.00609167 0.56470588 0.92549020 0.07058824 +v 0.03239697 -0.09157775 -0.02536900 0.56470588 0.92549020 0.07058824 +v 0.03204439 -0.09763010 -0.02694944 0.56470588 0.92549020 0.07058824 +v 0.02587419 -0.08097916 -0.02813477 0.56470588 0.92549020 0.07058824 +v 0.03277739 -0.08679909 -0.02303126 0.56470588 0.92549020 0.07058824 +v 0.03171964 -0.10503982 -0.02792898 0.56470588 0.92549020 0.07058824 +v 0.03123716 -0.12407080 -0.02870274 0.56470588 0.92549020 0.07058824 +v 0.02596698 -0.14257186 -0.03336998 0.56470588 0.92549020 0.07058824 +v 0.02734947 -0.15642440 -0.03213526 0.56470588 0.92549020 0.07058824 +v 0.02449170 -0.15642440 -0.03393795 0.56470588 0.92549020 0.07058824 +v 0.01718953 -0.15642440 -0.03853934 0.56470588 0.92549020 0.07058824 +v 0.02791546 -0.15642440 0.03163391 0.56470588 0.92549020 0.07058824 +v 0.02422262 -0.15073463 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04531262 -0.09506413 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04690853 -0.10234369 0.03179030 0.56470588 0.92549020 0.07058824 +v 0.04657450 -0.10274346 0.01722884 0.56470588 0.92549020 0.07058824 +v 0.03917954 -0.08800770 -0.01001731 0.56470588 0.92549020 0.07058824 +v 0.03314853 -0.08316395 -0.01978806 0.56470588 0.92549020 0.07058824 +v 0.04364250 -0.09493397 0.00060128 0.56470588 0.92549020 0.07058824 +v 0.04589717 -0.10421239 0.00665964 0.56470588 0.92549020 0.07058824 +v 0.03830736 -0.09385552 -0.01684942 0.56470588 0.92549020 0.07058824 +v 0.03786200 -0.09828089 -0.01894022 0.56470588 0.92549020 0.07058824 +v 0.03744447 -0.10387769 -0.02034780 0.56470588 0.92549020 0.07058824 +v 0.03875273 -0.09047140 -0.01391902 0.56470588 0.92549020 0.07058824 +v 0.03706405 -0.11071100 -0.02120387 0.56470588 0.92549020 0.07058824 +v 0.03377947 -0.14257186 -0.02550893 0.56470588 0.92549020 0.07058824 +v 0.03099591 -0.14257186 -0.02871920 0.56470588 0.92549020 0.07058824 +v 0.03021652 -0.14257186 -0.02960820 0.56470588 0.92549020 0.07058824 +v 0.03529186 -0.15642440 -0.02313004 0.56470588 0.92549020 0.07058824 +v 0.03010518 -0.15642440 0.02906569 0.56470588 0.92549020 0.07058824 +v 0.02972476 -0.14699723 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.02887114 -0.14775029 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.02880619 -0.14780607 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.02814742 -0.14829881 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.02623605 -0.14951672 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.02453809 -0.15055799 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.02435252 -0.15066955 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04639821 -0.09985209 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04716832 -0.10481669 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04739100 -0.10741056 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04739100 -0.10760580 0.03919040 0.56470588 0.92549020 0.07058824 +v 0.04732606 -0.10818221 0.03332136 0.56470588 0.92549020 0.07058824 +v 0.04725183 -0.10880511 0.02689258 0.56470588 0.92549020 0.07058824 +v 0.04678790 -0.10235299 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04698275 -0.10997653 0.01978060 0.56470588 0.92549020 0.07058824 +v 0.04321569 -0.09650516 -0.00382725 0.56470588 0.92549020 0.07058824 +v 0.04544253 -0.10563483 0.00282378 0.56470588 0.92549020 0.07058824 +v 0.04662089 -0.11137109 0.01489934 0.56470588 0.92549020 0.07058824 +v 0.04274248 -0.09876434 -0.00727623 0.56470588 0.92549020 0.07058824 +v 0.04224144 -0.10185095 -0.00984445 0.56470588 0.92549020 0.07058824 +v 0.04174969 -0.10587655 -0.01166360 0.56470588 0.92549020 0.07058824 +v 0.04127648 -0.11095272 -0.01286540 0.56470588 0.92549020 0.07058824 +v 0.04084967 -0.11714453 -0.01358153 0.56470588 0.92549020 0.07058824 +v 0.03690631 -0.14257186 -0.02080053 0.56470588 0.92549020 0.07058824 +v 0.03648878 -0.12824516 -0.02183770 0.56470588 0.92549020 0.07058824 +v 0.03943006 -0.14257186 -0.01562294 0.56470588 0.92549020 0.07058824 +v 0.03894758 -0.15642440 -0.01531014 0.56470588 0.92549020 0.07058824 +v 0.03570011 -0.15642440 0.02248875 0.56470588 0.92549020 0.07058824 +v 0.03243408 -0.14418953 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04740028 -0.10799627 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04722399 -0.11170578 0.03178208 0.56470588 0.92549020 0.07058824 +v 0.04690853 -0.11291439 0.02280978 0.56470588 0.92549020 0.07058824 +v 0.04494148 -0.10768017 -0.00013955 0.56470588 0.92549020 0.07058824 +v 0.04627758 -0.11256110 0.01210064 0.56470588 0.92549020 0.07058824 +v 0.04611057 -0.11312822 0.01076714 0.56470588 0.92549020 0.07058824 +v 0.04661161 -0.11386269 0.01852118 0.56470588 0.92549020 0.07058824 +v 0.04219506 -0.15642440 -0.00037003 0.56470588 0.92549020 0.07058824 +v 0.04441261 -0.11044138 -0.00231266 0.56470588 0.92549020 0.07058824 +v 0.04388374 -0.11404863 -0.00384371 0.56470588 0.92549020 0.07058824 +v 0.04037647 -0.15642440 -0.01224804 0.56470588 0.92549020 0.07058824 +v 0.04058987 -0.15642440 0.01152444 0.56470588 0.92549020 0.07058824 +v 0.04021873 -0.13434400 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.03559805 -0.14086121 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04732606 -0.11032982 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04726111 -0.11165929 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04679718 -0.11571279 0.03322258 0.56470588 0.92549020 0.07058824 +v 0.04168473 -0.15642440 -0.00371201 0.56470588 0.92549020 0.07058824 +v 0.04104452 -0.15642440 0.00817423 0.56470588 0.92549020 0.07058824 +v 0.04704770 -0.11362096 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04674151 -0.11626131 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04639821 -0.11830666 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04622192 -0.11913409 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04588789 -0.12069599 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04545180 -0.12245312 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04390229 -0.12698077 0.04184916 0.56470588 0.92549020 0.07058824 +v 0.04070122 -0.13347938 0.04184916 0.56470588 0.92549020 0.07058824 +f 1314 1315 1316 +f 1314 1316 1317 +f 1314 1317 1318 +f 1314 1318 1319 +f 1314 1319 1320 +f 1314 1320 1315 +f 1315 1320 1321 +f 1315 1321 1322 +f 1315 1322 1316 +f 1316 1323 1324 +f 1316 1324 1325 +f 1316 1325 1326 +f 1316 1326 1327 +f 1316 1327 1317 +f 1316 1322 1323 +f 1317 1327 1341 +f 1317 1341 1340 +f 1317 1340 1361 +f 1317 1361 1360 +f 1317 1360 1359 +f 1317 1359 1358 +f 1317 1358 1381 +f 1317 1381 1406 +f 1317 1406 1405 +f 1317 1405 1404 +f 1317 1404 1403 +f 1317 1403 1428 +f 1317 1428 1427 +f 1317 1427 1426 +f 1317 1426 1450 +f 1317 1450 1449 +f 1317 1449 1448 +f 1317 1448 1472 +f 1317 1472 1496 +f 1317 1496 1521 +f 1317 1521 1546 +f 1317 1546 1551 +f 1317 1551 1550 +f 1317 1550 1549 +f 1317 1549 1548 +f 1317 1548 1572 +f 1317 1572 1571 +f 1317 1571 1595 +f 1317 1595 1618 +f 1317 1618 1642 +f 1317 1642 1641 +f 1317 1641 1640 +f 1317 1640 1639 +f 1317 1639 1638 +f 1317 1638 1637 +f 1317 1637 1636 +f 1317 1636 1664 +f 1317 1664 1678 +f 1317 1678 1677 +f 1317 1677 1691 +f 1317 1691 1690 +f 1317 1690 1689 +f 1317 1689 1688 +f 1317 1688 1687 +f 1317 1687 1686 +f 1317 1686 1685 +f 1317 1685 1684 +f 1317 1684 1680 +f 1317 1680 1679 +f 1317 1679 1665 +f 1317 1665 1645 +f 1317 1645 1644 +f 1317 1644 1649 +f 1317 1649 1643 +f 1317 1643 1619 +f 1317 1619 1599 +f 1317 1599 1598 +f 1317 1598 1597 +f 1317 1597 1596 +f 1317 1596 1575 +f 1317 1575 1574 +f 1317 1574 1573 +f 1317 1573 1552 +f 1317 1552 1529 +f 1317 1529 1528 +f 1317 1528 1527 +f 1317 1527 1500 +f 1317 1500 1499 +f 1317 1499 1498 +f 1317 1498 1473 +f 1317 1473 1453 +f 1317 1453 1452 +f 1317 1452 1451 +f 1317 1451 1431 +f 1317 1431 1430 +f 1317 1430 1429 +f 1317 1429 1410 +f 1317 1410 1409 +f 1317 1409 1408 +f 1317 1408 1384 +f 1317 1384 1383 +f 1317 1383 1365 +f 1317 1365 1364 +f 1317 1364 1363 +f 1317 1363 1347 +f 1317 1347 1346 +f 1317 1346 1345 +f 1317 1345 1330 +f 1317 1330 1329 +f 1317 1329 1328 +f 1317 1328 1319 +f 1317 1319 1318 +f 1319 1328 1320 +f 1320 1328 1329 +f 1320 1329 1330 +f 1320 1330 1331 +f 1320 1331 1332 +f 1320 1332 1321 +f 1321 1333 1323 +f 1321 1323 1322 +f 1321 1332 1334 +f 1321 1334 1333 +f 1323 1335 1324 +f 1323 1333 1335 +f 1324 1335 1336 +f 1324 1336 1337 +f 1324 1337 1325 +f 1325 1338 1355 +f 1325 1355 1376 +f 1325 1376 1399 +f 1325 1399 1423 +f 1325 1423 1446 +f 1325 1446 1470 +f 1325 1470 1494 +f 1325 1494 1493 +f 1325 1493 1492 +f 1325 1492 1491 +f 1325 1491 1520 +f 1325 1520 1519 +f 1325 1519 1518 +f 1325 1518 1545 +f 1325 1545 1569 +f 1325 1569 1593 +f 1325 1593 1616 +f 1325 1616 1615 +f 1325 1615 1614 +f 1325 1614 1634 +f 1325 1634 1662 +f 1325 1662 1675 +f 1325 1675 1682 +f 1325 1682 1672 +f 1325 1672 1683 +f 1325 1683 1676 +f 1325 1676 1663 +f 1325 1663 1635 +f 1325 1635 1617 +f 1325 1617 1594 +f 1325 1594 1570 +f 1325 1570 1547 +f 1325 1547 1526 +f 1325 1526 1525 +f 1325 1525 1524 +f 1325 1524 1523 +f 1325 1523 1522 +f 1325 1522 1497 +f 1325 1497 1495 +f 1325 1495 1471 +f 1325 1471 1447 +f 1325 1447 1425 +f 1325 1425 1402 +f 1325 1402 1380 +f 1325 1380 1357 +f 1325 1357 1339 +f 1325 1339 1340 +f 1325 1340 1341 +f 1325 1341 1327 +f 1325 1327 1326 +f 1325 1337 1336 +f 1325 1336 1342 +f 1325 1342 1343 +f 1325 1343 1344 +f 1325 1344 1338 +f 1330 1345 1331 +f 1331 1346 1347 +f 1331 1347 1348 +f 1331 1348 1349 +f 1331 1349 1332 +f 1331 1345 1346 +f 1332 1349 1350 +f 1332 1350 1334 +f 1333 1334 1351 +f 1333 1351 1352 +f 1333 1352 1353 +f 1333 1353 1344 +f 1333 1344 1343 +f 1333 1343 1342 +f 1333 1342 1336 +f 1333 1336 1335 +f 1334 1350 1354 +f 1334 1354 1351 +f 1338 1344 1356 +f 1338 1356 1355 +f 1339 1357 1358 +f 1339 1358 1359 +f 1339 1359 1360 +f 1339 1360 1361 +f 1339 1361 1340 +f 1344 1353 1362 +f 1344 1362 1356 +f 1347 1363 1348 +f 1348 1363 1364 +f 1348 1364 1365 +f 1348 1365 1366 +f 1348 1366 1367 +f 1348 1367 1349 +f 1349 1367 1368 +f 1349 1368 1350 +f 1350 1368 1369 +f 1350 1369 1354 +f 1351 1354 1370 +f 1351 1370 1352 +f 1352 1371 1353 +f 1352 1370 1372 +f 1352 1372 1371 +f 1353 1371 1362 +f 1354 1369 1373 +f 1354 1373 1370 +f 1355 1374 1375 +f 1355 1375 1376 +f 1355 1356 1362 +f 1355 1362 1377 +f 1355 1377 1378 +f 1355 1378 1379 +f 1355 1379 1374 +f 1357 1380 1358 +f 1358 1380 1381 +f 1362 1371 1382 +f 1362 1382 1377 +f 1365 1383 1366 +f 1366 1383 1384 +f 1366 1384 1385 +f 1366 1385 1386 +f 1366 1386 1367 +f 1367 1386 1387 +f 1367 1387 1368 +f 1368 1387 1388 +f 1368 1388 1369 +f 1369 1388 1389 +f 1369 1389 1373 +f 1370 1373 1390 +f 1370 1390 1372 +f 1371 1372 1391 +f 1371 1391 1382 +f 1372 1390 1392 +f 1372 1392 1391 +f 1373 1389 1393 +f 1373 1393 1390 +f 1374 1379 1394 +f 1374 1394 1375 +f 1375 1394 1379 +f 1375 1379 1395 +f 1375 1395 1396 +f 1375 1396 1376 +f 1376 1397 1398 +f 1376 1398 1399 +f 1376 1396 1397 +f 1377 1382 1400 +f 1377 1400 1378 +f 1378 1400 1379 +f 1379 1400 1401 +f 1379 1401 1395 +f 1380 1402 1403 +f 1380 1403 1404 +f 1380 1404 1405 +f 1380 1405 1406 +f 1380 1406 1381 +f 1382 1391 1407 +f 1382 1407 1400 +f 1384 1408 1385 +f 1385 1408 1409 +f 1385 1409 1410 +f 1385 1410 1411 +f 1385 1411 1412 +f 1385 1412 1386 +f 1386 1412 1413 +f 1386 1413 1387 +f 1387 1413 1414 +f 1387 1414 1388 +f 1388 1414 1415 +f 1388 1415 1389 +f 1389 1415 1416 +f 1389 1416 1393 +f 1390 1393 1417 +f 1390 1417 1392 +f 1391 1392 1418 +f 1391 1418 1407 +f 1392 1417 1419 +f 1392 1419 1418 +f 1393 1416 1420 +f 1393 1420 1417 +f 1395 1401 1421 +f 1395 1421 1422 +f 1395 1422 1397 +f 1395 1397 1396 +f 1397 1422 1398 +f 1398 1423 1399 +f 1398 1422 1423 +f 1400 1407 1401 +f 1401 1407 1424 +f 1401 1424 1421 +f 1402 1425 1426 +f 1402 1426 1427 +f 1402 1427 1428 +f 1402 1428 1403 +f 1407 1418 1424 +f 1410 1429 1411 +f 1411 1429 1430 +f 1411 1430 1431 +f 1411 1431 1432 +f 1411 1432 1433 +f 1411 1433 1412 +f 1412 1433 1434 +f 1412 1434 1413 +f 1413 1434 1435 +f 1413 1435 1414 +f 1414 1435 1436 +f 1414 1436 1437 +f 1414 1437 1415 +f 1415 1438 1416 +f 1415 1437 1438 +f 1416 1438 1439 +f 1416 1439 1420 +f 1417 1440 1419 +f 1417 1420 1440 +f 1418 1419 1441 +f 1418 1441 1424 +f 1419 1440 1441 +f 1420 1439 1442 +f 1420 1442 1440 +f 1421 1424 1443 +f 1421 1443 1444 +f 1421 1444 1422 +f 1422 1444 1445 +f 1422 1445 1423 +f 1423 1445 1446 +f 1424 1441 1443 +f 1425 1447 1448 +f 1425 1448 1449 +f 1425 1449 1450 +f 1425 1450 1426 +f 1431 1451 1432 +f 1432 1451 1452 +f 1432 1452 1453 +f 1432 1453 1454 +f 1432 1454 1455 +f 1432 1455 1433 +f 1433 1455 1456 +f 1433 1456 1434 +f 1434 1456 1457 +f 1434 1457 1458 +f 1434 1458 1435 +f 1435 1459 1436 +f 1435 1458 1459 +f 1436 1460 1461 +f 1436 1461 1437 +f 1436 1459 1460 +f 1437 1461 1438 +f 1438 1461 1462 +f 1438 1462 1439 +f 1439 1462 1463 +f 1439 1463 1442 +f 1440 1442 1464 +f 1440 1464 1441 +f 1441 1464 1465 +f 1441 1465 1443 +f 1442 1463 1464 +f 1443 1465 1466 +f 1443 1466 1444 +f 1444 1466 1467 +f 1444 1467 1468 +f 1444 1468 1469 +f 1444 1469 1445 +f 1445 1469 1470 +f 1445 1470 1446 +f 1447 1471 1472 +f 1447 1472 1448 +f 1453 1473 1454 +f 1454 1473 1474 +f 1454 1474 1455 +f 1455 1474 1475 +f 1455 1475 1456 +f 1456 1475 1476 +f 1456 1476 1477 +f 1456 1477 1478 +f 1456 1478 1457 +f 1457 1478 1479 +f 1457 1479 1458 +f 1458 1479 1459 +f 1459 1479 1480 +f 1459 1480 1460 +f 1460 1480 1481 +f 1460 1481 1482 +f 1460 1482 1461 +f 1461 1482 1462 +f 1462 1483 1463 +f 1462 1482 1483 +f 1463 1484 1464 +f 1463 1483 1484 +f 1464 1485 1465 +f 1464 1484 1485 +f 1465 1486 1466 +f 1465 1485 1486 +f 1466 1486 1487 +f 1466 1487 1467 +f 1467 1487 1488 +f 1467 1488 1489 +f 1467 1489 1490 +f 1467 1490 1468 +f 1468 1490 1491 +f 1468 1491 1492 +f 1468 1492 1493 +f 1468 1493 1494 +f 1468 1494 1470 +f 1468 1470 1469 +f 1471 1495 1472 +f 1472 1495 1497 +f 1472 1497 1496 +f 1473 1498 1474 +f 1474 1499 1500 +f 1474 1500 1501 +f 1474 1501 1475 +f 1474 1498 1499 +f 1475 1501 1502 +f 1475 1502 1476 +f 1476 1503 1477 +f 1476 1502 1504 +f 1476 1504 1505 +f 1476 1505 1503 +f 1477 1503 1506 +f 1477 1506 1478 +f 1478 1506 1507 +f 1478 1507 1479 +f 1479 1507 1508 +f 1479 1508 1480 +f 1480 1508 1509 +f 1480 1509 1481 +f 1481 1509 1510 +f 1481 1510 1511 +f 1481 1511 1482 +f 1482 1511 1483 +f 1483 1511 1484 +f 1484 1511 1512 +f 1484 1512 1513 +f 1484 1513 1485 +f 1485 1513 1514 +f 1485 1514 1486 +f 1486 1514 1515 +f 1486 1515 1487 +f 1487 1515 1516 +f 1487 1516 1517 +f 1487 1517 1488 +f 1488 1517 1518 +f 1488 1518 1519 +f 1488 1519 1520 +f 1488 1520 1489 +f 1489 1520 1490 +f 1490 1520 1491 +f 1496 1497 1522 +f 1496 1522 1523 +f 1496 1523 1524 +f 1496 1524 1525 +f 1496 1525 1526 +f 1496 1526 1521 +f 1500 1527 1501 +f 1501 1528 1529 +f 1501 1529 1530 +f 1501 1530 1502 +f 1501 1527 1528 +f 1502 1530 1531 +f 1502 1531 1504 +f 1503 1505 1532 +f 1503 1532 1506 +f 1504 1533 1505 +f 1504 1531 1534 +f 1504 1534 1533 +f 1505 1533 1535 +f 1505 1535 1532 +f 1506 1532 1536 +f 1506 1536 1508 +f 1506 1508 1507 +f 1508 1536 1509 +f 1509 1537 1510 +f 1509 1536 1537 +f 1510 1538 1512 +f 1510 1512 1511 +f 1510 1537 1538 +f 1512 1539 1513 +f 1512 1538 1539 +f 1513 1540 1514 +f 1513 1539 1540 +f 1514 1540 1541 +f 1514 1541 1515 +f 1515 1542 1543 +f 1515 1543 1544 +f 1515 1544 1516 +f 1515 1541 1542 +f 1516 1544 1518 +f 1516 1518 1517 +f 1518 1544 1545 +f 1521 1526 1546 +f 1526 1547 1548 +f 1526 1548 1549 +f 1526 1549 1550 +f 1526 1550 1551 +f 1526 1551 1546 +f 1529 1552 1530 +f 1530 1552 1553 +f 1530 1553 1531 +f 1531 1553 1554 +f 1531 1554 1534 +f 1532 1535 1555 +f 1532 1555 1536 +f 1533 1556 1535 +f 1533 1534 1557 +f 1533 1557 1558 +f 1533 1558 1556 +f 1534 1554 1559 +f 1534 1559 1557 +f 1535 1556 1560 +f 1535 1560 1555 +f 1536 1555 1537 +f 1537 1561 1538 +f 1537 1555 1561 +f 1538 1561 1562 +f 1538 1562 1539 +f 1539 1563 1540 +f 1539 1562 1564 +f 1539 1564 1563 +f 1540 1563 1565 +f 1540 1565 1541 +f 1541 1566 1542 +f 1541 1565 1566 +f 1542 1566 1567 +f 1542 1567 1568 +f 1542 1568 1543 +f 1543 1568 1545 +f 1543 1545 1544 +f 1545 1568 1569 +f 1547 1570 1571 +f 1547 1571 1572 +f 1547 1572 1548 +f 1552 1573 1553 +f 1553 1573 1574 +f 1553 1574 1575 +f 1553 1575 1576 +f 1553 1576 1554 +f 1554 1576 1577 +f 1554 1577 1559 +f 1555 1560 1561 +f 1556 1558 1578 +f 1556 1578 1560 +f 1557 1579 1558 +f 1557 1559 1580 +f 1557 1580 1579 +f 1558 1579 1581 +f 1558 1581 1578 +f 1559 1577 1582 +f 1559 1582 1580 +f 1560 1578 1583 +f 1560 1583 1561 +f 1561 1583 1562 +f 1562 1583 1564 +f 1563 1584 1565 +f 1563 1564 1585 +f 1563 1585 1586 +f 1563 1586 1584 +f 1564 1583 1587 +f 1564 1587 1585 +f 1565 1588 1566 +f 1565 1584 1588 +f 1566 1588 1589 +f 1566 1589 1567 +f 1567 1589 1590 +f 1567 1590 1591 +f 1567 1591 1592 +f 1567 1592 1568 +f 1568 1592 1593 +f 1568 1593 1569 +f 1570 1594 1571 +f 1571 1594 1595 +f 1575 1596 1576 +f 1576 1597 1598 +f 1576 1598 1599 +f 1576 1599 1600 +f 1576 1600 1577 +f 1576 1596 1597 +f 1577 1600 1601 +f 1577 1601 1582 +f 1578 1581 1587 +f 1578 1587 1583 +f 1579 1580 1602 +f 1579 1602 1603 +f 1579 1603 1581 +f 1580 1582 1604 +f 1580 1604 1602 +f 1581 1603 1605 +f 1581 1605 1587 +f 1582 1601 1606 +f 1582 1606 1604 +f 1584 1586 1607 +f 1584 1607 1608 +f 1584 1608 1588 +f 1585 1587 1605 +f 1585 1605 1586 +f 1586 1605 1609 +f 1586 1609 1610 +f 1586 1610 1607 +f 1588 1608 1611 +f 1588 1611 1589 +f 1589 1611 1612 +f 1589 1612 1613 +f 1589 1613 1590 +f 1590 1613 1614 +f 1590 1614 1615 +f 1590 1615 1616 +f 1590 1616 1591 +f 1591 1616 1592 +f 1592 1616 1593 +f 1594 1617 1618 +f 1594 1618 1595 +f 1599 1619 1600 +f 1600 1619 1620 +f 1600 1620 1601 +f 1601 1620 1621 +f 1601 1621 1606 +f 1602 1604 1622 +f 1602 1622 1623 +f 1602 1623 1603 +f 1603 1623 1609 +f 1603 1609 1605 +f 1604 1606 1624 +f 1604 1624 1622 +f 1606 1621 1625 +f 1606 1625 1624 +f 1607 1626 1627 +f 1607 1627 1608 +f 1607 1610 1626 +f 1608 1627 1628 +f 1608 1628 1611 +f 1609 1623 1610 +f 1610 1623 1629 +f 1610 1629 1626 +f 1611 1628 1630 +f 1611 1630 1612 +f 1612 1630 1631 +f 1612 1631 1632 +f 1612 1632 1633 +f 1612 1633 1613 +f 1613 1633 1614 +f 1614 1633 1634 +f 1617 1635 1636 +f 1617 1636 1637 +f 1617 1637 1638 +f 1617 1638 1639 +f 1617 1639 1640 +f 1617 1640 1641 +f 1617 1641 1642 +f 1617 1642 1618 +f 1619 1643 1620 +f 1620 1644 1645 +f 1620 1645 1646 +f 1620 1646 1647 +f 1620 1647 1648 +f 1620 1648 1621 +f 1620 1643 1649 +f 1620 1649 1644 +f 1621 1648 1650 +f 1621 1650 1625 +f 1622 1624 1651 +f 1622 1651 1629 +f 1622 1629 1623 +f 1624 1625 1651 +f 1625 1652 1651 +f 1625 1650 1653 +f 1625 1653 1652 +f 1626 1629 1654 +f 1626 1654 1655 +f 1626 1655 1627 +f 1627 1655 1656 +f 1627 1656 1628 +f 1628 1656 1657 +f 1628 1657 1630 +f 1629 1651 1654 +f 1630 1657 1658 +f 1630 1658 1659 +f 1630 1659 1660 +f 1630 1660 1631 +f 1631 1634 1632 +f 1631 1660 1634 +f 1632 1634 1633 +f 1634 1659 1661 +f 1634 1661 1662 +f 1634 1660 1659 +f 1635 1663 1636 +f 1636 1663 1664 +f 1645 1665 1646 +f 1646 1665 1666 +f 1646 1666 1647 +f 1647 1666 1648 +f 1648 1666 1667 +f 1648 1667 1650 +f 1650 1667 1653 +f 1651 1652 1654 +f 1652 1668 1654 +f 1652 1653 1669 +f 1652 1669 1670 +f 1652 1670 1668 +f 1653 1667 1671 +f 1653 1671 1672 +f 1653 1672 1669 +f 1654 1668 1655 +f 1655 1668 1673 +f 1655 1673 1656 +f 1656 1673 1674 +f 1656 1674 1657 +f 1657 1674 1675 +f 1657 1675 1658 +f 1658 1675 1661 +f 1658 1661 1659 +f 1661 1675 1662 +f 1663 1676 1677 +f 1663 1677 1678 +f 1663 1678 1664 +f 1665 1679 1666 +f 1666 1679 1680 +f 1666 1680 1681 +f 1666 1681 1672 +f 1666 1672 1667 +f 1667 1672 1671 +f 1668 1670 1672 +f 1668 1672 1682 +f 1668 1682 1675 +f 1668 1675 1673 +f 1669 1672 1670 +f 1672 1681 1684 +f 1672 1684 1685 +f 1672 1685 1686 +f 1672 1686 1687 +f 1672 1687 1688 +f 1672 1688 1689 +f 1672 1689 1683 +f 1673 1675 1674 +f 1676 1683 1689 +f 1676 1689 1690 +f 1676 1690 1691 +f 1676 1691 1677 +f 1680 1684 1681 \ No newline at end of file diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link2.obj.convex.stl b/src/experiments/assets/robots/xarm7/meshes/collision/link2.obj.convex.stl new file mode 100644 index 0000000000000000000000000000000000000000..5f1875471f1914dec86dbf26e6c97546072ad9bf --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link2.obj.convex.stl @@ -0,0 +1,2114 @@ +solid AssimpScene + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex -0.0405877903 -0.191779509 -0.0115330098 + vertex -0.0279150605 -0.191779509 -0.0316497907 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex -0.0279150605 -0.191779509 -0.0316497907 + vertex -0.0178694092 -0.191779509 -0.0382325612 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex -0.0178694092 -0.191779509 -0.0382325612 + vertex 0.0171829797 -0.191779509 -0.0385436751 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex 0.0171829797 -0.191779509 -0.0385436751 + vertex 0.035291601 -0.191779509 -0.0231265575 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex 0.035291601 -0.191779509 -0.0231265575 + vertex 0.0405870415 -0.191779509 0.0115230996 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex 0.0405870415 -0.191779509 0.0115230996 + vertex 0.0178686697 -0.191779509 0.0382226482 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex 0.0178686697 -0.191779509 0.0382226482 + vertex -0.00563452998 -0.191779509 0.0418169796 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex -0.00563452998 -0.191779509 0.0418169796 + vertex -0.0171837304 -0.191779509 0.0385337807 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex -0.0171837304 -0.191779509 0.0385337807 + vertex -0.0352923386 -0.191779509 0.0231166389 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0178686697 -0.191779509 0.0382226482 + vertex 0.00815120991 -0.148103669 0.10417372 + vertex -0.00563452998 -0.191779509 0.0418169796 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0150984898 -0.146597281 0.103468396 + vertex -0.0313267782 -0.138322592 0.0993001089 + vertex -0.0352923386 -0.191779509 0.0231166389 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0404964611 -0.0891975164 0.108555883 + vertex -0.0276626274 -0.10903167 0.113638833 + vertex -0.0276001599 -0.0137505699 0.114717968 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0356971398 -0.191776052 -0.0225042999 + vertex -0.0373587012 -0.103886992 -0.0205206592 + vertex -0.0279150605 -0.191779509 -0.0316497907 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.04219798 -0.191776052 -0.000373390008 + vertex 0.0403805114 -0.191776052 -0.0122453198 + vertex 0.0458971709 -0.104212388 0.00665964 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00010782999 -0.104138009 -0.0417907685 + vertex -0.00636977935 -0.191776052 -0.0417204462 + vertex -0.01699242 -0.106666803 -0.0383911803 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0127261411 0.0455829315 0.0840217695 + vertex -0.00238343002 0.0473636985 0.0754990727 + vertex 0.00346514001 0.0449577682 0.101284385 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0473597795 -0.110705428 0.0781356171 + vertex -0.0421904586 -0.191776052 0.00036347998 + vertex -0.0445605107 -0.110381141 0.101042971 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0388912894 0.0271311998 0.0754990727 + vertex 0.041485481 0.0198944807 0.0949594527 + vertex 0.0456789695 0.0127146002 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0388912894 0.0271311998 0.0754990727 + vertex 0.0219957791 -0.0786177069 -0.030217329 + vertex 0.0277148504 0.0384693593 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403572917 -0.00764103001 0.108048029 + vertex -0.0404964611 -0.0891975164 0.108555883 + vertex -0.0276001599 -0.0137505699 0.114717968 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403572917 -0.00764103001 0.108048029 + vertex -0.0276001599 -0.0137505699 0.114717968 + vertex -0.0312264599 0.0152057689 0.111314841 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0276001599 0.0359118804 0.0990227386 + vertex -0.0150754796 0.0443231389 0.0923996568 + vertex -0.0269399807 0.039018739 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00915435981 -0.0739692077 -0.034308359 + vertex 0.0277148504 0.0384693593 0.0754990727 + vertex 0.0219957791 -0.0786177069 -0.030217329 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00122306996 -0.0954636931 0.11811199 + vertex 0.0171721 -0.111458629 0.115809433 + vertex 0.0034465401 -0.00877769012 0.118909054 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0171427894 0.0343489684 0.110318191 + vertex 0.0171055999 0.0227834899 0.115101293 + vertex 0.0328381583 0.0241664201 0.106242113 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0134235108 0.0454787388 0.0754990727 + vertex -0.00238343002 0.0473636985 0.0754990727 + vertex 0.0127261411 0.0455829315 0.0840217695 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0134235108 0.0454787388 0.0754990727 + vertex 0.0277148504 0.0384693593 0.0754990727 + vertex 0.00915435981 -0.0739692077 -0.034308359 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0134235108 0.0454787388 0.0754990727 + vertex 0.00915435981 -0.0739692077 -0.034308359 + vertex -0.00238343002 0.0473636985 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0387319215 -0.0905271918 -0.0140342601 + vertex -0.0373587012 -0.103886992 -0.0205206592 + vertex -0.0449299514 -0.107745253 -0.000254790008 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0387319215 -0.0905271918 -0.0140342601 + vertex -0.0449299514 -0.107745253 -0.000254790008 + vertex -0.0472565591 0.00391498022 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0387319215 -0.0905271918 -0.0140342601 + vertex -0.0472565591 0.00391498022 0.0754990727 + vertex -0.0414265804 0.0230771303 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0474992692 -0.0916140303 0.0974799097 + vertex -0.0458339304 0.000258729997 0.0992782936 + vertex -0.0472565591 0.00391498022 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0474992692 -0.0916140303 0.0974799097 + vertex -0.0473597795 -0.110705428 0.0781356171 + vertex -0.0445605107 -0.110381141 0.101042971 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0327172801 0.0062545999 0.111566141 + vertex 0.0326986797 -0.01632699 0.112383902 + vertex 0.043280039 0.00046712 0.10370788 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0327172801 0.0062545999 0.111566141 + vertex 0.043280039 0.00046712 0.10370788 + vertex 0.0328381583 0.0241664201 0.106242113 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0327172801 0.0062545999 0.111566141 + vertex 0.0328381583 0.0241664201 0.106242113 + vertex 0.0171055999 0.0227834899 0.115101293 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0445042886 0.0134060597 0.0933920443 + vertex -0.037707299 0.0241474826 0.0995764434 + vertex -0.0414265804 0.0230771303 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0445042886 0.0134060597 0.0933920443 + vertex -0.0414265804 0.0230771303 0.0754990727 + vertex -0.0472565591 0.00391498022 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0445042886 0.0134060597 0.0933920443 + vertex -0.0472565591 0.00391498022 0.0754990727 + vertex -0.0458339304 0.000258729997 0.0992782936 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00122306996 -0.121386155 0.116237171 + vertex 0.0171721 -0.111458629 0.115809433 + vertex -0.00122306996 -0.0954636931 0.11811199 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0404127613 -0.126773596 0.0973160788 + vertex -0.0352923386 -0.191779509 0.0231166389 + vertex -0.0313267782 -0.138322592 0.0993001089 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0404127613 -0.126773596 0.0973160788 + vertex -0.0313267782 -0.138322592 0.0993001089 + vertex -0.0347212404 -0.120706201 0.108169101 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0404127613 -0.126773596 0.0973160788 + vertex -0.0347212404 -0.120706201 0.108169101 + vertex -0.0445605107 -0.110381141 0.101042971 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00897806976 -0.0862598568 -0.0390002988 + vertex 5.21600014e-05 -0.0785247535 -0.0379302092 + vertex 0.00915435981 -0.0739692077 -0.034308359 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00897806976 -0.0862598568 -0.0390002988 + vertex 0.00915435981 -0.0739692077 -0.034308359 + vertex 0.0219957791 -0.0786177069 -0.030217329 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00897806976 -0.0862598568 -0.0390002988 + vertex 0.0171988104 -0.106676087 -0.0382924005 + vertex 0.00010782999 -0.104138009 -0.0417907685 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00897806976 -0.0862598568 -0.0390002988 + vertex 0.00010782999 -0.104138009 -0.0417907685 + vertex 5.21600014e-05 -0.0785247535 -0.0379302092 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0171837304 -0.191779509 0.0385337807 + vertex -0.0150984898 -0.146597281 0.103468396 + vertex -0.0352923386 -0.191779509 0.0231166389 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0088273501 -0.0862691626 -0.0390414596 + vertex 5.21600014e-05 -0.0785247535 -0.0379302092 + vertex 0.00010782999 -0.104138009 -0.0417907685 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0088273501 -0.0862691626 -0.0390414596 + vertex 0.00010782999 -0.104138009 -0.0417907685 + vertex -0.01699242 -0.106666803 -0.0383911803 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00590744987 0.0405911207 0.108746536 + vertex 0.00345584005 0.0376358107 0.111719474 + vertex 0.00346514001 0.0449577682 0.101284385 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0236729793 -0.133677885 0.109083749 + vertex -0.0347212404 -0.120706201 0.108169101 + vertex -0.0313267782 -0.138322592 0.0993001089 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0236729793 -0.133677885 0.109083749 + vertex -0.0313267782 -0.138322592 0.0993001089 + vertex -0.0150984898 -0.146597281 0.103468396 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0236729793 -0.133677885 0.109083749 + vertex -0.0150984898 -0.146597281 0.103468396 + vertex -0.0105508501 -0.137349725 0.111463673 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248976909 -0.100354128 -0.0336169191 + vertex -0.0279150605 -0.191779509 -0.0316497907 + vertex -0.0373587012 -0.103886992 -0.0205206592 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403015018 0.0122599397 0.104483061 + vertex -0.0458339304 0.000258729997 0.0992782936 + vertex -0.0403572917 -0.00764103001 0.108048029 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403015018 0.0122599397 0.104483061 + vertex -0.0403572917 -0.00764103001 0.108048029 + vertex -0.0312264599 0.0152057689 0.111314841 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403015018 0.0122599397 0.104483061 + vertex -0.037707299 0.0241474826 0.0995764434 + vertex -0.0445042886 0.0134060597 0.0933920443 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403015018 0.0122599397 0.104483061 + vertex -0.0445042886 0.0134060597 0.0933920443 + vertex -0.0458339304 0.000258729997 0.0992782936 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312450472 0.0258335192 0.107038602 + vertex -0.037707299 0.0241474826 0.0995764434 + vertex -0.0403015018 0.0122599397 0.104483061 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312450472 0.0258335192 0.107038602 + vertex -0.0403015018 0.0122599397 0.104483061 + vertex -0.0312264599 0.0152057689 0.111314841 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312450472 0.0258335192 0.107038602 + vertex -0.0194363408 0.0366033502 0.107340991 + vertex -0.0276001599 0.0359118804 0.0990227386 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312450472 0.0258335192 0.107038602 + vertex -0.0276001599 0.0359118804 0.0990227386 + vertex -0.037707299 0.0241474826 0.0995764434 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0433140695 -0.0872622281 0.105661757 + vertex 0.043280039 0.00046712 0.10370788 + vertex 0.0326986797 -0.01632699 0.112383902 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0327958986 -0.0919278637 0.112369232 + vertex 0.0389152206 -0.11062175 0.107600279 + vertex 0.0433140695 -0.0872622281 0.105661757 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0327958986 -0.0919278637 0.112369232 + vertex 0.0433140695 -0.0872622281 0.105661757 + vertex 0.0326986797 -0.01632699 0.112383902 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389710218 -0.123248219 0.10242632 + vertex 0.0294200405 -0.137056813 0.1026311 + vertex 0.0356963985 -0.191776052 0.0224943906 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389710218 -0.123248219 0.10242632 + vertex 0.0356963985 -0.191776052 0.0224943906 + vertex 0.0435651615 -0.12145938 0.0944356099 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00347336987 -0.141983956 0.109957442 + vertex 0.00815120991 -0.148103669 0.10417372 + vertex 0.0171907004 -0.135864243 0.110344246 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00347336987 -0.141983956 0.109957442 + vertex -0.00122306996 -0.121386155 0.116237171 + vertex -0.0105508501 -0.137349725 0.111463673 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0127168512 0.0414909683 0.104683243 + vertex 0.00346514001 0.0449577682 0.101284385 + vertex 0.00345584005 0.0376358107 0.111719474 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0127168512 0.0414909683 0.104683243 + vertex 0.00345584005 0.0376358107 0.111719474 + vertex 0.0171427894 0.0343489684 0.110318191 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0127168512 0.0414909683 0.104683243 + vertex 0.0171427894 0.0343489684 0.110318191 + vertex 0.0255669616 0.0372095592 0.0992655158 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0252989307 -0.0924795568 -0.0323986597 + vertex 0.0171988104 -0.106676087 -0.0382924005 + vertex 0.00897806976 -0.0862598568 -0.0390002988 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0252989307 -0.0924795568 -0.0323986597 + vertex 0.00897806976 -0.0862598568 -0.0390002988 + vertex 0.0219957791 -0.0786177069 -0.030217329 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0150382901 0.0448819995 0.0754990727 + vertex -0.0269399807 0.039018739 0.0754990727 + vertex -0.0150754796 0.0443231389 0.0923996568 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0150382901 0.0448819995 0.0754990727 + vertex -0.0150754796 0.0443231389 0.0923996568 + vertex -0.00238343002 0.0473636985 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0150382901 0.0448819995 0.0754990727 + vertex -0.0135129895 -0.0751034468 -0.0333699808 + vertex -0.0269399807 0.039018739 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00563379005 -0.191776052 -0.0418268889 + vertex -0.00636977935 -0.191776052 -0.0417204462 + vertex 0.00010782999 -0.104138009 -0.0417907685 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00563379005 -0.191776052 -0.0418268889 + vertex 0.00010782999 -0.104138009 -0.0417907685 + vertex 0.0171988104 -0.106676087 -0.0382924005 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00563379005 -0.191776052 -0.0418268889 + vertex 0.0171988104 -0.106676087 -0.0382924005 + vertex 0.0171829797 -0.191779509 -0.0385436751 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0178694092 -0.191779509 -0.0382325612 + vertex -0.0279150605 -0.191779509 -0.0316497907 + vertex -0.0248976909 -0.100354128 -0.0336169191 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0178694092 -0.191779509 -0.0382325612 + vertex -0.0248976909 -0.100354128 -0.0336169191 + vertex -0.01699242 -0.106666803 -0.0383911803 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0178694092 -0.191779509 -0.0382325612 + vertex -0.01699242 -0.106666803 -0.0383911803 + vertex -0.00636977935 -0.191776052 -0.0417204462 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00636977935 -0.191776052 -0.0417204462 + vertex 0.00563379005 -0.191776052 -0.0418268889 + vertex 0.0171829797 -0.191779509 -0.0385436751 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00636977935 -0.191776052 -0.0417204462 + vertex 0.0171829797 -0.191779509 -0.0385436751 + vertex -0.0178694092 -0.191779509 -0.0382325612 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0405877903 -0.191779509 -0.0115330098 + vertex -0.0449299514 -0.107745253 -0.000254790008 + vertex -0.0373587012 -0.103886992 -0.0205206592 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0405877903 -0.191779509 -0.0115330098 + vertex -0.0373587012 -0.103886992 -0.0205206592 + vertex -0.0356971398 -0.191776052 -0.0225042999 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0405877903 -0.191779509 -0.0115330098 + vertex -0.0356971398 -0.191776052 -0.0225042999 + vertex -0.0279150605 -0.191779509 -0.0316497907 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0405877903 -0.191779509 -0.0115330098 + vertex -0.0421904586 -0.191776052 0.00036347998 + vertex -0.0449299514 -0.107745253 -0.000254790008 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0273442995 -0.191776052 -0.0321328416 + vertex 0.0171829797 -0.191779509 -0.0385436751 + vertex 0.0171988104 -0.106676087 -0.0382924005 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0273442995 -0.191776052 -0.0321328416 + vertex 0.0171988104 -0.106676087 -0.0382924005 + vertex 0.0252989307 -0.0924795568 -0.0323986597 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0273442995 -0.191776052 -0.0321328416 + vertex 0.0252989307 -0.0924795568 -0.0323986597 + vertex 0.0317196399 -0.10503982 -0.0279289801 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0273442995 -0.191776052 -0.0321328416 + vertex 0.0317196399 -0.10503982 -0.0279289801 + vertex 0.035291601 -0.191779509 -0.0231265575 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0273442995 -0.191776052 -0.0321328416 + vertex 0.035291601 -0.191779509 -0.0231265575 + vertex 0.0171829797 -0.191779509 -0.0385436751 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0255233906 -0.117599256 0.113060907 + vertex 0.0389152206 -0.11062175 0.107600279 + vertex 0.0327958986 -0.0919278637 0.112369232 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0255233906 -0.117599256 0.113060907 + vertex 0.0327958986 -0.0919278637 0.112369232 + vertex 0.0171721 -0.111458629 0.115809433 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0460291915 -0.0393158793 0.102464199 + vertex -0.0458339304 0.000258729997 0.0992782936 + vertex -0.0474992692 -0.0916140303 0.0974799097 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0460291915 -0.0393158793 0.102464199 + vertex -0.0404964611 -0.0891975164 0.108555883 + vertex -0.0403572917 -0.00764103001 0.108048029 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0460291915 -0.0393158793 0.102464199 + vertex -0.0403572917 -0.00764103001 0.108048029 + vertex -0.0458339304 0.000258729997 0.0992782936 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194177404 0.0299254823 0.112213545 + vertex -0.0194363408 0.0366033502 0.107340991 + vertex -0.0312450472 0.0258335192 0.107038602 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194177404 0.0299254823 0.112213545 + vertex -0.0312450472 0.0258335192 0.107038602 + vertex -0.0312264599 0.0152057689 0.111314841 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194177404 0.0299254823 0.112213545 + vertex -0.0312264599 0.0152057689 0.111314841 + vertex -0.0105193602 0.0247915797 0.116268322 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0450717397 -0.108906128 0.0999371931 + vertex 0.0389152206 -0.11062175 0.107600279 + vertex 0.0389710218 -0.123248219 0.10242632 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0450717397 -0.108906128 0.0999371931 + vertex 0.0389710218 -0.123248219 0.10242632 + vertex 0.0435651615 -0.12145938 0.0944356099 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0450717397 -0.108906128 0.0999371931 + vertex 0.0469224192 -0.0929007381 0.0986812487 + vertex 0.0433140695 -0.0872622281 0.105661757 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0450717397 -0.108906128 0.0999371931 + vertex 0.0433140695 -0.0872622281 0.105661757 + vertex 0.0389152206 -0.11062175 0.107600279 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0361576118 0.0296507906 0.089920789 + vertex 0.041485481 0.0198944807 0.0949594527 + vertex 0.0388912894 0.0271311998 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0361576118 0.0296507906 0.089920789 + vertex 0.0388912894 0.0271311998 0.0754990727 + vertex 0.0277148504 0.0384693593 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0361576118 0.0296507906 0.089920789 + vertex 0.0277148504 0.0384693593 0.0754990727 + vertex 0.0255669616 0.0372095592 0.0992655158 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0346667916 0.0314315483 0.0902828202 + vertex -0.037707299 0.0241474826 0.0995764434 + vertex -0.0276001599 0.0359118804 0.0990227386 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0346667916 0.0314315483 0.0902828202 + vertex -0.0276001599 0.0359118804 0.0990227386 + vertex -0.0269399807 0.039018739 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0346667916 0.0314315483 0.0902828202 + vertex -0.0414265804 0.0230771303 0.0754990727 + vertex -0.037707299 0.0241474826 0.0995764434 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0417496897 -0.10587655 -0.0116635989 + vertex 0.0383073613 -0.0938555226 -0.0168494191 + vertex 0.0456789695 0.0127146002 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0417496897 -0.10587655 -0.0116635989 + vertex 0.0458971709 -0.104212388 0.00665964 + vertex 0.0403805114 -0.191776052 -0.0122453198 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0417496897 -0.10587655 -0.0116635989 + vertex 0.0403805114 -0.191776052 -0.0122453198 + vertex 0.035291601 -0.191779509 -0.0231265575 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0417496897 -0.10587655 -0.0116635989 + vertex 0.035291601 -0.191779509 -0.0231265575 + vertex 0.0317196399 -0.10503982 -0.0279289801 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0417496897 -0.10587655 -0.0116635989 + vertex 0.0317196399 -0.10503982 -0.0279289801 + vertex 0.0383073613 -0.0938555226 -0.0168494191 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00454069022 -0.0732998326 -0.0349257253 + vertex 5.21600014e-05 -0.0785247535 -0.0379302092 + vertex -0.0088273501 -0.0862691626 -0.0390414596 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00454069022 -0.0732998326 -0.0349257253 + vertex -0.0088273501 -0.0862691626 -0.0390414596 + vertex -0.0135129895 -0.0751034468 -0.0333699808 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00454069022 -0.0732998326 -0.0349257253 + vertex -0.0135129895 -0.0751034468 -0.0333699808 + vertex -0.0150382901 0.0448819995 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00454069022 -0.0732998326 -0.0349257253 + vertex -0.0150382901 0.0448819995 0.0754990727 + vertex -0.00238343002 0.0473636985 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00454069022 -0.0732998326 -0.0349257253 + vertex -0.00238343002 0.0473636985 0.0754990727 + vertex 0.00915435981 -0.0739692077 -0.034308359 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00454069022 -0.0732998326 -0.0349257253 + vertex 0.00915435981 -0.0739692077 -0.034308359 + vertex 5.21600014e-05 -0.0785247535 -0.0379302092 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0331485309 -0.0831639469 -0.0197880603 + vertex 0.0219957791 -0.0786177069 -0.030217329 + vertex 0.0388912894 0.0271311998 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0331485309 -0.0831639469 -0.0197880603 + vertex 0.0388912894 0.0271311998 0.0754990727 + vertex 0.0456789695 0.0127146002 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0331485309 -0.0831639469 -0.0197880603 + vertex 0.0456789695 0.0127146002 0.0754990727 + vertex 0.0383073613 -0.0938555226 -0.0168494191 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0405870415 -0.191779509 0.0115230996 + vertex 0.0356963985 -0.191776052 0.0224943906 + vertex 0.0178686697 -0.191779509 0.0382226482 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0405870415 -0.191779509 0.0115230996 + vertex 0.035291601 -0.191779509 -0.0231265575 + vertex 0.0403805114 -0.191776052 -0.0122453198 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0405870415 -0.191779509 0.0115230996 + vertex 0.0403805114 -0.191776052 -0.0122453198 + vertex 0.04219798 -0.191776052 -0.000373390008 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0405870415 -0.191779509 0.0115230996 + vertex 0.0435651615 -0.12145938 0.0944356099 + vertex 0.0356963985 -0.191776052 0.0224943906 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex -0.0352923386 -0.191779509 0.0231166389 + vertex -0.0404127613 -0.126773596 0.0973160788 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex -0.0404127613 -0.126773596 0.0973160788 + vertex -0.0445605107 -0.110381141 0.101042971 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex -0.0445605107 -0.110381141 0.101042971 + vertex -0.0421904586 -0.191776052 0.00036347998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0403812602 -0.191779509 0.0122354086 + vertex -0.0421904586 -0.191776052 0.00036347998 + vertex -0.0405877903 -0.191779509 -0.0115330098 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0463949293 0.00668084016 0.0916457623 + vertex 0.043280039 0.00046712 0.10370788 + vertex 0.0472689718 -0.00619179988 0.093507044 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0463949293 0.00668084016 0.0916457623 + vertex 0.0456789695 0.0127146002 0.0754990727 + vertex 0.041485481 0.0198944807 0.0949594527 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0105193602 0.00775119942 0.118219048 + vertex -0.00122306996 -0.0954636931 0.11811199 + vertex 0.0034465401 -0.00877769012 0.118909054 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0105193602 0.00775119942 0.118219048 + vertex 0.0034465401 -0.00877769012 0.118909054 + vertex 0.0034465401 0.0171570405 0.118074231 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0105193602 0.00775119942 0.118219048 + vertex 0.0034465401 0.0171570405 0.118074231 + vertex -0.0105193602 0.0247915797 0.116268322 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0105193602 0.00775119942 0.118219048 + vertex -0.0105193602 0.0247915797 0.116268322 + vertex -0.0312264599 0.0152057689 0.111314841 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0105193602 0.00775119942 0.118219048 + vertex -0.0312264599 0.0152057689 0.111314841 + vertex -0.0276001599 -0.0137505699 0.114717968 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0328795984 -0.121773228 0.108737908 + vertex 0.0389710218 -0.123248219 0.10242632 + vertex 0.0389152206 -0.11062175 0.107600279 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0328795984 -0.121773228 0.108737908 + vertex 0.0389152206 -0.11062175 0.107600279 + vertex 0.0255233906 -0.117599256 0.113060907 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0328795984 -0.121773228 0.108737908 + vertex 0.0255233906 -0.117599256 0.113060907 + vertex 0.0171907004 -0.135864243 0.110344246 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0328795984 -0.121773228 0.108737908 + vertex 0.0171907004 -0.135864243 0.110344246 + vertex 0.0294200405 -0.137056813 0.1026311 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0328795984 -0.121773228 0.108737908 + vertex 0.0294200405 -0.137056813 0.1026311 + vertex 0.0389710218 -0.123248219 0.10242632 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0215151403 -0.144118011 0.102039538 + vertex 0.00815120991 -0.148103669 0.10417372 + vertex 0.0178686697 -0.191779509 0.0382226482 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0215151403 -0.144118011 0.102039538 + vertex 0.0178686697 -0.191779509 0.0382226482 + vertex 0.0356963985 -0.191776052 0.0224943906 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0215151403 -0.144118011 0.102039538 + vertex 0.0356963985 -0.191776052 0.0224943906 + vertex 0.0294200405 -0.137056813 0.1026311 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0215151403 -0.144118011 0.102039538 + vertex 0.0294200405 -0.137056813 0.1026311 + vertex 0.0171907004 -0.135864243 0.110344246 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0215151403 -0.144118011 0.102039538 + vertex 0.0171907004 -0.135864243 0.110344246 + vertex 0.00815120991 -0.148103669 0.10417372 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00591675006 0.0447399095 0.101250313 + vertex -0.00590744987 0.0405911207 0.108746536 + vertex 0.00346514001 0.0449577682 0.101284385 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00591675006 0.0447399095 0.101250313 + vertex 0.00346514001 0.0449577682 0.101284385 + vertex -0.00238343002 0.0473636985 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00591675006 0.0447399095 0.101250313 + vertex -0.00238343002 0.0473636985 0.0754990727 + vertex -0.0150754796 0.0443231389 0.0923996568 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0170869995 0.00611252012 0.117005169 + vertex 0.0171055999 0.0227834899 0.115101293 + vertex 0.0034465401 0.0171570405 0.118074231 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0170869995 0.00611252012 0.117005169 + vertex 0.0034465401 0.0171570405 0.118074231 + vertex 0.0034465401 -0.00877769012 0.118909054 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0170869995 0.00611252012 0.117005169 + vertex 0.0034465401 -0.00877769012 0.118909054 + vertex 0.0171721 -0.111458629 0.115809433 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0170869995 0.00611252012 0.117005169 + vertex 0.0171721 -0.111458629 0.115809433 + vertex 0.0327958986 -0.0919278637 0.112369232 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0170869995 0.00611252012 0.117005169 + vertex 0.0327958986 -0.0919278637 0.112369232 + vertex 0.0326986797 -0.01632699 0.112383902 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0170869995 0.00611252012 0.117005169 + vertex 0.0326986797 -0.01632699 0.112383902 + vertex 0.0327172801 0.0062545999 0.111566141 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0170869995 0.00611252012 0.117005169 + vertex 0.0327172801 0.0062545999 0.111566141 + vertex 0.0171055999 0.0227834899 0.115101293 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0472239889 -0.11170578 0.0317820795 + vertex 0.04219798 -0.191776052 -0.000373390008 + vertex 0.0458971709 -0.104212388 0.00665964 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0470268801 -0.109762698 0.0207765978 + vertex -0.0421904586 -0.191776052 0.00036347998 + vertex -0.0473597795 -0.110705428 0.0781356171 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0470268801 -0.109762698 0.0207765978 + vertex -0.0473597795 -0.110705428 0.0781356171 + vertex -0.0474992692 -0.0916140303 0.0974799097 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0470268801 -0.109762698 0.0207765978 + vertex -0.0474992692 -0.0916140303 0.0974799097 + vertex -0.0472565591 0.00391498022 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0470268801 -0.109762698 0.0207765978 + vertex -0.0472565591 0.00391498022 0.0754990727 + vertex -0.0449299514 -0.107745253 -0.000254790008 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0470268801 -0.109762698 0.0207765978 + vertex -0.0449299514 -0.107745253 -0.000254790008 + vertex -0.0421904586 -0.191776052 0.00036347998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0175769702 -0.0819367468 -0.0347117111 + vertex -0.0135129895 -0.0751034468 -0.0333699808 + vertex -0.0088273501 -0.0862691626 -0.0390414596 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0175769702 -0.0819367468 -0.0347117111 + vertex -0.0088273501 -0.0862691626 -0.0390414596 + vertex -0.01699242 -0.106666803 -0.0383911803 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0175769702 -0.0819367468 -0.0347117111 + vertex -0.01699242 -0.106666803 -0.0383911803 + vertex -0.0248976909 -0.100354128 -0.0336169191 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0175769702 -0.0819367468 -0.0347117111 + vertex -0.0248976909 -0.100354128 -0.0336169191 + vertex -0.0258069877 -0.0810070485 -0.0282335505 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0175769702 -0.0819367468 -0.0347117111 + vertex -0.0258069877 -0.0810070485 -0.0282335505 + vertex -0.0135129895 -0.0751034468 -0.0333699808 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0404778607 -0.109502412 0.106872194 + vertex -0.0445605107 -0.110381141 0.101042971 + vertex -0.0347212404 -0.120706201 0.108169101 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0404778607 -0.109502412 0.106872194 + vertex -0.0347212404 -0.120706201 0.108169101 + vertex -0.0276626274 -0.10903167 0.113638833 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0404778607 -0.109502412 0.106872194 + vertex -0.0276626274 -0.10903167 0.113638833 + vertex -0.0404964611 -0.0891975164 0.108555883 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0471270196 -0.109763943 0.0884744152 + vertex 0.0469224192 -0.0929007381 0.0986812487 + vertex 0.0450717397 -0.108906128 0.0999371931 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0471270196 -0.109763943 0.0884744152 + vertex 0.0450717397 -0.108906128 0.0999371931 + vertex 0.0435651615 -0.12145938 0.0944356099 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0471270196 -0.109763943 0.0884744152 + vertex 0.0435651615 -0.12145938 0.0944356099 + vertex 0.0405870415 -0.191779509 0.0115230996 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0471270196 -0.109763943 0.0884744152 + vertex 0.0405870415 -0.191779509 0.0115230996 + vertex 0.04219798 -0.191776052 -0.000373390008 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0471270196 -0.109763943 0.0884744152 + vertex 0.04219798 -0.191776052 -0.000373390008 + vertex 0.0472239889 -0.11170578 0.0317820795 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0471270196 -0.109763943 0.0884744152 + vertex 0.0472689718 -0.00619179988 0.093507044 + vertex 0.0469224192 -0.0929007381 0.0986812487 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0323204882 -0.0915963426 -0.0255089309 + vertex -0.0258069877 -0.0810070485 -0.0282335505 + vertex -0.0248976909 -0.100354128 -0.0336169191 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0323204882 -0.0915963426 -0.0255089309 + vertex -0.0248976909 -0.100354128 -0.0336169191 + vertex -0.0373587012 -0.103886992 -0.0205206592 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0323204882 -0.0915963426 -0.0255089309 + vertex -0.0373587012 -0.103886992 -0.0205206592 + vertex -0.0387319215 -0.0905271918 -0.0140342601 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0323204882 -0.0915963426 -0.0255089309 + vertex -0.0387319215 -0.0905271918 -0.0140342601 + vertex -0.0414265804 0.0230771303 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0323204882 -0.0915963426 -0.0255089309 + vertex -0.0414265804 0.0230771303 0.0754990727 + vertex -0.0258069877 -0.0810070485 -0.0282335505 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00122306996 -0.148752257 0.104574174 + vertex 0.00815120991 -0.148103669 0.10417372 + vertex 0.00347336987 -0.141983956 0.109957442 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00122306996 -0.148752257 0.104574174 + vertex 0.00347336987 -0.141983956 0.109957442 + vertex -0.0105508501 -0.137349725 0.111463673 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00122306996 -0.148752257 0.104574174 + vertex -0.0105508501 -0.137349725 0.111463673 + vertex -0.0150984898 -0.146597281 0.103468396 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00122306996 -0.148752257 0.104574174 + vertex -0.0150984898 -0.146597281 0.103468396 + vertex -0.0171837304 -0.191779509 0.0385337807 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00122306996 -0.148752257 0.104574174 + vertex -0.0171837304 -0.191779509 0.0385337807 + vertex -0.00563452998 -0.191779509 0.0418169796 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00122306996 -0.148752257 0.104574174 + vertex -0.00563452998 -0.191779509 0.0418169796 + vertex 0.00815120991 -0.148103669 0.10417372 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00590744987 0.0337143391 0.113908716 + vertex 0.00345584005 0.0376358107 0.111719474 + vertex -0.00590744987 0.0405911207 0.108746536 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00590744987 0.0337143391 0.113908716 + vertex -0.00590744987 0.0405911207 0.108746536 + vertex -0.0194363408 0.0366033502 0.107340991 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00590744987 0.0337143391 0.113908716 + vertex -0.0194363408 0.0366033502 0.107340991 + vertex -0.0194177404 0.0299254823 0.112213545 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00590744987 0.0337143391 0.113908716 + vertex -0.0194177404 0.0299254823 0.112213545 + vertex -0.0105193602 0.0247915797 0.116268322 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0460484885 -0.0850444883 0.102658406 + vertex -0.0404964611 -0.0891975164 0.108555883 + vertex -0.0460291915 -0.0393158793 0.102464199 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0460484885 -0.0850444883 0.102658406 + vertex -0.0460291915 -0.0393158793 0.102464199 + vertex -0.0474992692 -0.0916140303 0.0974799097 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0460484885 -0.0850444883 0.102658406 + vertex -0.0474992692 -0.0916140303 0.0974799097 + vertex -0.0445605107 -0.110381141 0.101042971 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0460484885 -0.0850444883 0.102658406 + vertex -0.0445605107 -0.110381141 0.101042971 + vertex -0.0404778607 -0.109502412 0.106872194 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0460484885 -0.0850444883 0.102658406 + vertex -0.0404778607 -0.109502412 0.106872194 + vertex -0.0404964611 -0.0891975164 0.108555883 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0329125412 0.029461341 0.101045862 + vertex 0.041485481 0.0198944807 0.0949594527 + vertex 0.0361576118 0.0296507906 0.089920789 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0329125412 0.029461341 0.101045862 + vertex 0.0361576118 0.0296507906 0.089920789 + vertex 0.0255669616 0.0372095592 0.0992655158 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0329125412 0.029461341 0.101045862 + vertex 0.0255669616 0.0372095592 0.0992655158 + vertex 0.0171427894 0.0343489684 0.110318191 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0329125412 0.029461341 0.101045862 + vertex 0.0171427894 0.0343489684 0.110318191 + vertex 0.0328381583 0.0241664201 0.106242113 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0473991409 0.00134803005 0.0755118504 + vertex 0.0456789695 0.0127146002 0.0754990727 + vertex 0.0463949293 0.00668084016 0.0916457623 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0473991409 0.00134803005 0.0755118504 + vertex 0.0463949293 0.00668084016 0.0916457623 + vertex 0.0472689718 -0.00619179988 0.093507044 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0473991409 0.00134803005 0.0755118504 + vertex 0.0472689718 -0.00619179988 0.093507044 + vertex 0.0471270196 -0.109763943 0.0884744152 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0473991409 0.00134803005 0.0755118504 + vertex 0.0471270196 -0.109763943 0.0884744152 + vertex 0.0472239889 -0.11170578 0.0317820795 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0473991409 0.00134803005 0.0755118504 + vertex 0.0472239889 -0.11170578 0.0317820795 + vertex 0.0458971709 -0.104212388 0.00665964 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0473991409 0.00134803005 0.0755118504 + vertex 0.0458971709 -0.104212388 0.00665964 + vertex 0.0417496897 -0.10587655 -0.0116635989 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0473991409 0.00134803005 0.0755118504 + vertex 0.0417496897 -0.10587655 -0.0116635989 + vertex 0.0456789695 0.0127146002 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0414111018 0.0159067195 0.100061983 + vertex 0.041485481 0.0198944807 0.0949594527 + vertex 0.0329125412 0.029461341 0.101045862 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0414111018 0.0159067195 0.100061983 + vertex 0.0329125412 0.029461341 0.101045862 + vertex 0.0328381583 0.0241664201 0.106242113 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0414111018 0.0159067195 0.100061983 + vertex 0.0328381583 0.0241664201 0.106242113 + vertex 0.043280039 0.00046712 0.10370788 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0414111018 0.0159067195 0.100061983 + vertex 0.043280039 0.00046712 0.10370788 + vertex 0.0463949293 0.00668084016 0.0916457623 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0414111018 0.0159067195 0.100061983 + vertex 0.0463949293 0.00668084016 0.0916457623 + vertex 0.041485481 0.0198944807 0.0949594527 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194880292 -0.119304411 0.114571691 + vertex -0.0105508501 -0.137349725 0.111463673 + vertex -0.00122306996 -0.121386155 0.116237171 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194880292 -0.119304411 0.114571691 + vertex -0.0276626274 -0.10903167 0.113638833 + vertex -0.0347212404 -0.120706201 0.108169101 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194880292 -0.119304411 0.114571691 + vertex -0.0347212404 -0.120706201 0.108169101 + vertex -0.0236729793 -0.133677885 0.109083749 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194880292 -0.119304411 0.114571691 + vertex -0.0236729793 -0.133677885 0.109083749 + vertex -0.0105508501 -0.137349725 0.111463673 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0460137092 -0.0179846194 0.101092719 + vertex 0.0469224192 -0.0929007381 0.0986812487 + vertex 0.0472689718 -0.00619179988 0.093507044 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0460137092 -0.0179846194 0.101092719 + vertex 0.0472689718 -0.00619179988 0.093507044 + vertex 0.043280039 0.00046712 0.10370788 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0460137092 -0.0179846194 0.101092719 + vertex 0.043280039 0.00046712 0.10370788 + vertex 0.0433140695 -0.0872622281 0.105661757 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0460137092 -0.0179846194 0.101092719 + vertex 0.0433140695 -0.0872622281 0.105661757 + vertex 0.0469224192 -0.0929007381 0.0986812487 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0150754796 0.042551849 0.100696616 + vertex -0.0194363408 0.0366033502 0.107340991 + vertex -0.00590744987 0.0405911207 0.108746536 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0150754796 0.042551849 0.100696616 + vertex -0.00590744987 0.0405911207 0.108746536 + vertex -0.00591675006 0.0447399095 0.101250313 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0150754796 0.042551849 0.100696616 + vertex -0.00591675006 0.0447399095 0.101250313 + vertex -0.0150754796 0.0443231389 0.0923996568 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0150754796 0.042551849 0.100696616 + vertex -0.0150754796 0.0443231389 0.0923996568 + vertex -0.0276001599 0.0359118804 0.0990227386 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0150754796 0.042551849 0.100696616 + vertex -0.0276001599 0.0359118804 0.0990227386 + vertex -0.0194363408 0.0366033502 0.107340991 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0171985794 0.0434706509 0.0922037289 + vertex 0.0127261411 0.0455829315 0.0840217695 + vertex 0.00346514001 0.0449577682 0.101284385 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0171985794 0.0434706509 0.0922037289 + vertex 0.00346514001 0.0449577682 0.101284385 + vertex 0.0127168512 0.0414909683 0.104683243 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0171985794 0.0434706509 0.0922037289 + vertex 0.0127168512 0.0414909683 0.104683243 + vertex 0.0255669616 0.0372095592 0.0992655158 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0171985794 0.0434706509 0.0922037289 + vertex 0.0255669616 0.0372095592 0.0992655158 + vertex 0.0277148504 0.0384693593 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0171985794 0.0434706509 0.0922037289 + vertex 0.0277148504 0.0384693593 0.0754990727 + vertex 0.0134235108 0.0454787388 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0171985794 0.0434706509 0.0922037289 + vertex 0.0134235108 0.0454787388 0.0754990727 + vertex 0.0127261411 0.0455829315 0.0840217695 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0346481912 0.0323693007 0.0754990727 + vertex -0.0414265804 0.0230771303 0.0754990727 + vertex -0.0346667916 0.0314315483 0.0902828202 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0346481912 0.0323693007 0.0754990727 + vertex -0.0346667916 0.0314315483 0.0902828202 + vertex -0.0269399807 0.039018739 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0346481912 0.0323693007 0.0754990727 + vertex -0.0269399807 0.039018739 0.0754990727 + vertex -0.0135129895 -0.0751034468 -0.0333699808 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0346481912 0.0323693007 0.0754990727 + vertex -0.0135129895 -0.0751034468 -0.0333699808 + vertex -0.0258069877 -0.0810070485 -0.0282335505 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0346481912 0.0323693007 0.0754990727 + vertex -0.0258069877 -0.0810070485 -0.0282335505 + vertex -0.0414265804 0.0230771303 0.0754990727 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0323969685 -0.0915777534 -0.0253689997 + vertex 0.0252989307 -0.0924795568 -0.0323986597 + vertex 0.0219957791 -0.0786177069 -0.030217329 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0323969685 -0.0915777534 -0.0253689997 + vertex 0.0219957791 -0.0786177069 -0.030217329 + vertex 0.0331485309 -0.0831639469 -0.0197880603 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0323969685 -0.0915777534 -0.0253689997 + vertex 0.0331485309 -0.0831639469 -0.0197880603 + vertex 0.0383073613 -0.0938555226 -0.0168494191 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0323969685 -0.0915777534 -0.0253689997 + vertex 0.0383073613 -0.0938555226 -0.0168494191 + vertex 0.0317196399 -0.10503982 -0.0279289801 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0323969685 -0.0915777534 -0.0253689997 + vertex 0.0317196399 -0.10503982 -0.0279289801 + vertex 0.0252989307 -0.0924795568 -0.0323986597 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0127174594 -0.128886729 0.113811746 + vertex 0.0171721 -0.111458629 0.115809433 + vertex -0.00122306996 -0.121386155 0.116237171 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0127174594 -0.128886729 0.113811746 + vertex -0.00122306996 -0.121386155 0.116237171 + vertex 0.00347336987 -0.141983956 0.109957442 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0127174594 -0.128886729 0.113811746 + vertex 0.00347336987 -0.141983956 0.109957442 + vertex 0.0171907004 -0.135864243 0.110344246 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0127174594 -0.128886729 0.113811746 + vertex 0.0171907004 -0.135864243 0.110344246 + vertex 0.0255233906 -0.117599256 0.113060907 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0127174594 -0.128886729 0.113811746 + vertex 0.0255233906 -0.117599256 0.113060907 + vertex 0.0171721 -0.111458629 0.115809433 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194787309 -0.0944071189 0.116400994 + vertex -0.00122306996 -0.0954636931 0.11811199 + vertex -0.0105193602 0.00775119942 0.118219048 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194787309 -0.0944071189 0.116400994 + vertex -0.0105193602 0.00775119942 0.118219048 + vertex -0.0276001599 -0.0137505699 0.114717968 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194787309 -0.0944071189 0.116400994 + vertex -0.0276001599 -0.0137505699 0.114717968 + vertex -0.0276626274 -0.10903167 0.113638833 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194787309 -0.0944071189 0.116400994 + vertex -0.0276626274 -0.10903167 0.113638833 + vertex -0.0194880292 -0.119304411 0.114571691 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194787309 -0.0944071189 0.116400994 + vertex -0.0194880292 -0.119304411 0.114571691 + vertex -0.00122306996 -0.121386155 0.116237171 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194787309 -0.0944071189 0.116400994 + vertex -0.00122306996 -0.121386155 0.116237171 + vertex -0.00122306996 -0.0954636931 0.11811199 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0034465401 0.0257293191 0.116719797 + vertex 0.0171055999 0.0227834899 0.115101293 + vertex 0.0171427894 0.0343489684 0.110318191 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0034465401 0.0257293191 0.116719797 + vertex 0.0171427894 0.0343489684 0.110318191 + vertex 0.00345584005 0.0376358107 0.111719474 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0034465401 0.0257293191 0.116719797 + vertex 0.00345584005 0.0376358107 0.111719474 + vertex -0.00590744987 0.0337143391 0.113908716 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0034465401 0.0257293191 0.116719797 + vertex -0.00590744987 0.0337143391 0.113908716 + vertex -0.0105193602 0.0247915797 0.116268322 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0034465401 0.0257293191 0.116719797 + vertex -0.0105193602 0.0247915797 0.116268322 + vertex 0.0034465401 0.0171570405 0.118074231 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0034465401 0.0257293191 0.116719797 + vertex 0.0034465401 0.0171570405 0.118074231 + vertex 0.0171055999 0.0227834899 0.115101293 + endloop + endfacet + +endsolid AssimpScene diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link3.obj b/src/experiments/assets/robots/xarm7/meshes/collision/link3.obj new file mode 100644 index 0000000000000000000000000000000000000000..b3a9fdd71ee342197ca66740d3221d1cb73170e4 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link3.obj @@ -0,0 +1,4602 @@ +# https://github.com/mikedh/trimesh + +o geometry_0 +v -0.04241434 0.00021976 -0.08217403 0.54509804 0.71372549 0.60000000 +v -0.04218516 -0.00512667 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.04210583 -0.00572487 -0.08422109 0.54509804 0.71372549 0.60000000 +v -0.04211464 -0.00473410 -0.08200932 0.54509804 0.71372549 0.60000000 +v -0.04099518 0.00489321 -0.06326578 0.54509804 0.71372549 0.60000000 +v -0.04240553 0.00272473 -0.08394344 0.54509804 0.71372549 0.60000000 +v -0.03973469 -0.01507178 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.04016660 -0.01389407 -0.08455050 0.54509804 0.71372549 0.60000000 +v -0.04120673 -0.00971600 -0.08182579 0.54509804 0.71372549 0.60000000 +v -0.04218516 0.00512689 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.04058089 -0.00342554 -0.06474343 0.54509804 0.71372549 0.60000000 +v -0.04019305 -0.00138791 -0.05911519 0.54509804 0.71372549 0.60000000 +v -0.04046630 0.00680933 -0.05738343 0.54509804 0.71372549 0.60000000 +v -0.04214109 0.00498668 -0.08232932 0.54509804 0.71372549 0.60000000 +v -0.03497478 -0.02413828 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.03730184 -0.02036213 -0.08489873 0.54509804 0.71372549 0.60000000 +v -0.03821857 -0.01794128 -0.08143991 0.54509804 0.71372549 0.60000000 +v -0.03957602 -0.01473529 -0.08160461 0.54509804 0.71372549 0.60000000 +v -0.03999031 -0.01373517 -0.08165167 0.54509804 0.71372549 0.60000000 +v -0.03850945 -0.01150126 -0.06630108 0.54509804 0.71372549 0.60000000 +v -0.04136539 0.00958536 -0.08248932 0.54509804 0.71372549 0.60000000 +v -0.04104807 0.01100609 -0.08365167 0.54509804 0.71372549 0.60000000 +v -0.03973469 0.01506265 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.03828909 -0.00936082 -0.06092225 0.54509804 0.71372549 0.60000000 +v -0.03793650 -0.00684650 -0.05558108 0.54509804 0.71372549 0.60000000 +v -0.03962891 0.00101425 -0.05352460 0.54509804 0.71372549 0.60000000 +v -0.03992861 0.00851047 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03914410 0.01525894 -0.05587284 0.54509804 0.71372549 0.60000000 +v -0.03976113 0.01338955 -0.06200461 0.54509804 0.71372549 0.60000000 +v -0.02817868 -0.03181210 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.03253312 -0.02734427 -0.08538814 0.54509804 0.71372549 0.60000000 +v -0.03396991 -0.02534404 -0.08307285 0.54509804 0.71372549 0.60000000 +v -0.03699333 -0.02074536 -0.08307285 0.54509804 0.71372549 0.60000000 +v -0.03765443 -0.01588496 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.03865048 -0.01323044 -0.07172226 0.54509804 0.71372549 0.60000000 +v -0.03623527 -0.02152115 -0.08122814 0.54509804 0.71372549 0.60000000 +v -0.03478967 -0.01905357 -0.06789637 0.54509804 0.71372549 0.60000000 +v -0.03473678 -0.01684770 -0.06275284 0.54509804 0.71372549 0.60000000 +v -0.03786598 0.01955851 -0.05529402 0.54509804 0.71372549 0.60000000 +v -0.04003438 0.01418404 -0.08268226 0.54509804 0.71372549 0.60000000 +v -0.03753984 0.02038104 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03642920 0.02318511 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03616475 0.02383940 -0.05487519 0.54509804 0.71372549 0.60000000 +v -0.03589150 0.02451237 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03436657 0.02753143 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03381124 0.02862501 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03497478 0.02412915 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.03458693 -0.01425860 -0.05765637 0.54509804 0.71372549 0.60000000 +v -0.03478967 -0.01071612 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03768087 -0.00549120 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03929395 0.00023845 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03956721 0.00125727 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03875626 0.01630579 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.01974307 -0.03763522 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.02653916 -0.03318609 -0.08575991 0.54509804 0.71372549 0.60000000 +v -0.03044405 -0.02943798 -0.08308226 0.54509804 0.71372549 0.60000000 +v -0.03354680 -0.02532534 -0.08096462 0.54509804 0.71372549 0.60000000 +v -0.03357325 -0.02528795 -0.08096462 0.54509804 0.71372549 0.60000000 +v -0.03277112 -0.02352139 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.02958903 -0.02572726 -0.06948696 0.54509804 0.71372549 0.60000000 +v -0.02970362 -0.02350269 -0.06457402 0.54509804 0.71372549 0.60000000 +v -0.02973888 -0.02089491 -0.05970814 0.54509804 0.71372549 0.60000000 +v -0.03805109 0.01870794 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03193372 0.03166276 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03132551 0.03263484 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.02918355 0.03548565 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.02847838 0.03642033 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.02817868 0.03180296 -0.10109639 0.54509804 0.71372549 0.60000000 +v -0.01974307 0.03762609 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.02965955 -0.01795998 -0.05489872 0.54509804 0.71372549 0.60000000 +v -0.03342340 -0.01256681 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.03429605 -0.01159473 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.01017036 -0.04126182 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.01168648 -0.04085991 -0.08591991 0.54509804 0.71372549 0.60000000 +v -0.01951389 -0.03775673 -0.08588226 0.54509804 0.71372549 0.60000000 +v -0.02212302 -0.03606494 -0.08310579 0.54509804 0.71372549 0.60000000 +v -0.02650390 -0.03298981 -0.08309638 0.54509804 0.71372549 0.60000000 +v -0.03061152 -0.02862480 -0.08073873 0.54509804 0.71372549 0.60000000 +v -0.03084071 -0.02840047 -0.08074814 0.54509804 0.71372549 0.60000000 +v -0.02724433 -0.03172797 -0.08055991 0.54509804 0.71372549 0.60000000 +v -0.02928052 -0.02729754 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.02534918 -0.03068112 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.02315434 -0.03149430 -0.07104931 0.54509804 0.71372549 0.60000000 +v -0.02344522 -0.02918562 -0.06634814 0.54509804 0.71372549 0.60000000 +v -0.02369203 -0.02652175 -0.06169402 0.54509804 0.71372549 0.60000000 +v -0.02383307 -0.02359616 -0.05709637 0.54509804 0.71372549 0.60000000 +v -0.02616013 0.03896270 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.02528748 0.03991608 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.02292516 0.04205652 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.02179688 0.04307534 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.01804184 0.04583267 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.01406643 0.04816940 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.00990592 0.05006682 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.01017036 0.04125269 -0.10109639 0.54509804 0.71372549 0.60000000 +v 0.00000174 0.04248648 -0.10109639 0.54509804 0.71372549 0.60000000 +v 0.01016503 0.04125269 -0.10109639 0.54509804 0.71372549 0.60000000 +v 0.01974655 0.03762609 -0.10109639 0.54509804 0.71372549 0.60000000 +v 0.03972936 0.01506265 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.02955377 -0.01670749 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.02382425 -0.02075470 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.02495252 -0.01996022 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.00000174 -0.04249561 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.00395603 -0.04231802 -0.08619756 0.54509804 0.71372549 0.60000000 +v -0.00699709 -0.04174786 -0.08608933 0.54509804 0.71372549 0.60000000 +v -0.00677672 -0.04173851 -0.08311520 0.54509804 0.71372549 0.60000000 +v -0.01223299 -0.04049537 -0.08311050 0.54509804 0.71372549 0.60000000 +v -0.01736311 -0.03857926 -0.08311050 0.54509804 0.71372549 0.60000000 +v -0.01897619 -0.03717722 -0.08041873 0.54509804 0.71372549 0.60000000 +v -0.02333063 -0.03463486 -0.08045638 0.54509804 0.71372549 0.60000000 +v -0.02419446 -0.03399927 -0.08047991 0.54509804 0.71372549 0.60000000 +v -0.02602791 -0.03263463 -0.08052697 0.54509804 0.71372549 0.60000000 +v -0.02128563 -0.03349454 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.01719564 -0.03572845 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.01623483 -0.03381233 -0.06806108 0.54509804 0.71372549 0.60000000 +v -0.01668439 -0.03106434 -0.06358578 0.54509804 0.71372549 0.60000000 +v -0.01731904 -0.02497951 -0.05484696 0.54509804 0.71372549 0.60000000 +v -0.01707223 -0.02810137 -0.05917167 0.54509804 0.71372549 0.60000000 +v -0.00657398 0.05117911 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.00556911 0.05150625 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.00119705 0.05245028 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.00327198 0.05291763 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.00452366 0.05294567 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.00692124 0.05297371 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.01031488 0.05278677 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.01463406 0.05225400 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.02313138 0.05019768 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.02507060 0.04948731 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.02951318 0.04759924 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03104693 0.04691691 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03466975 0.04488863 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.02818217 0.03180296 -0.10109639 0.54509804 0.71372549 0.60000000 +v 0.03496945 0.02412915 -0.10109639 0.54509804 0.71372549 0.60000000 +v 0.04533547 0.03427989 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04569687 0.03353214 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04663122 0.03092435 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04730995 0.02841938 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04218864 0.00512689 -0.10110109 0.54509804 0.71372549 0.60000000 +v -0.02252850 -0.02133421 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.00170297 -0.04233672 -0.08662109 0.54509804 0.71372549 0.60000000 +v 0.00000174 -0.04249561 -0.08647520 0.54509804 0.71372549 0.60000000 +v -0.00057121 -0.04249561 -0.08642815 0.54509804 0.71372549 0.60000000 +v -0.00110009 -0.04248627 -0.08639050 0.54509804 0.71372549 0.60000000 +v -0.00221073 -0.04243953 -0.08631050 0.54509804 0.71372549 0.60000000 +v 0.01016503 -0.04126182 -0.10110109 0.54509804 0.71372549 0.60000000 +v 0.00834040 -0.04167308 -0.08719050 0.54509804 0.71372549 0.60000000 +v -0.00213140 -0.04243953 -0.08571285 0.54509804 0.71372549 0.60000000 +v -0.00177000 -0.04216847 -0.08311991 0.54509804 0.71372549 0.60000000 +v -0.00168186 -0.04210304 -0.08252697 0.54509804 0.71372549 0.60000000 +v -0.00591288 -0.04121509 -0.08025873 0.54509804 0.71372549 0.60000000 +v -0.01040836 -0.04039256 -0.08037638 0.54509804 0.71372549 0.60000000 +v -0.01470990 -0.03905595 -0.08040932 0.54509804 0.71372549 0.60000000 +v -0.01576766 -0.03616775 -0.07257873 0.54509804 0.71372549 0.60000000 +v -0.01235639 -0.03560694 -0.06889402 0.54509804 0.71372549 0.60000000 +v -0.01314089 -0.03740155 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.00901564 -0.03425164 -0.06538814 0.54509804 0.71372549 0.60000000 +v -0.01733667 -0.02358682 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.01010866 -0.02823223 -0.05695049 0.54509804 0.71372549 0.60000000 +v -0.01040836 -0.02519448 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03630046 0.04375766 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03791354 0.04261734 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03868041 0.04197240 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04072541 0.04008432 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04271752 0.03801866 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04330810 0.03735503 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04438349 0.03588756 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04743336 0.02761555 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04763609 0.02572747 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04218864 -0.00512667 -0.10110109 0.54509804 0.71372549 0.60000000 +v 0.00224948 -0.04213108 -0.08314815 0.54509804 0.71372549 0.60000000 +v 0.01639699 -0.03920550 -0.08777403 0.54509804 0.71372549 0.60000000 +v 0.01451065 -0.03978501 -0.08763756 0.54509804 0.71372549 0.60000000 +v 0.01012096 -0.04113096 -0.08731756 0.54509804 0.71372549 0.60000000 +v 0.01974655 -0.03763522 -0.10110109 0.54509804 0.71372549 0.60000000 +v 0.01084376 -0.04063558 -0.08321873 0.54509804 0.71372549 0.60000000 +v 0.00663917 -0.04159831 -0.08317638 0.54509804 0.71372549 0.60000000 +v -0.00131164 -0.04145811 -0.08003755 0.54509804 0.71372549 0.60000000 +v -0.00473172 -0.04128052 -0.08020226 0.54509804 0.71372549 0.60000000 +v -0.00485513 -0.03914942 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.00906853 -0.03854187 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.01296460 -0.03959807 -0.08039520 0.54509804 0.71372549 0.60000000 +v -0.01218010 -0.03767261 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.00836336 -0.03696224 -0.06971285 0.54509804 0.71372549 0.60000000 +v -0.00501379 -0.03521437 -0.06625872 0.54509804 0.71372549 0.60000000 +v -0.00631836 -0.02931647 -0.05795284 0.54509804 0.71372549 0.60000000 +v -0.01021443 -0.02520383 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04760965 0.02414785 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04188013 -0.00718299 -0.08469167 0.54509804 0.71372549 0.60000000 +v 0.03972936 -0.01507178 -0.10110109 0.54509804 0.71372549 0.60000000 +v 0.04755676 0.02288601 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.00208200 -0.04123378 -0.07982579 0.54509804 0.71372549 0.60000000 +v 0.00279599 -0.04118704 -0.07978344 0.54509804 0.71372549 0.60000000 +v 0.01486324 -0.03928962 -0.08325638 0.54509804 0.71372549 0.60000000 +v 0.01855657 -0.03804648 -0.08783991 0.54509804 0.71372549 0.60000000 +v 0.01870642 -0.03756044 -0.08328932 0.54509804 0.71372549 0.60000000 +v 0.02243502 -0.03595277 -0.08795756 0.54509804 0.71372549 0.60000000 +v 0.01964959 -0.03745762 -0.08787285 0.54509804 0.71372549 0.60000000 +v 0.02818217 -0.03181210 -0.10110109 0.54509804 0.71372549 0.60000000 +v 0.02376603 -0.03523307 -0.08799991 0.54509804 0.71372549 0.60000000 +v 0.01058813 -0.03940179 -0.07928932 0.54509804 0.71372549 0.60000000 +v 0.00665680 -0.04050472 -0.07952932 0.54509804 0.71372549 0.60000000 +v -0.00057121 -0.03917746 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.00428218 -0.03784085 -0.07051755 0.54509804 0.71372549 0.60000000 +v -0.00172593 -0.03559759 -0.06697402 0.54509804 0.71372549 0.60000000 +v -0.00208733 -0.03439184 -0.06507284 0.54509804 0.71372549 0.60000000 +v -0.00210496 -0.03430772 -0.06494108 0.54509804 0.71372549 0.60000000 +v -0.00113535 -0.03755110 -0.07006578 0.54509804 0.71372549 0.60000000 +v -0.00316272 -0.02988663 -0.05874813 0.54509804 0.71372549 0.60000000 +v -0.00329494 -0.02933516 -0.05798578 0.54509804 0.71372549 0.60000000 +v -0.00339190 -0.02869958 -0.05715755 0.54509804 0.71372549 0.60000000 +v -0.00364752 -0.02689562 -0.05483284 0.54509804 0.71372549 0.60000000 +v -0.00384144 -0.02554967 -0.05310107 0.54509804 0.71372549 0.60000000 +v -0.00384144 -0.02549359 -0.05303049 0.54509804 0.71372549 0.60000000 +v -0.00630955 -0.02538142 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04152754 -0.00857568 -0.08293638 0.54509804 0.71372549 0.60000000 +v 0.04627864 0.01695073 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03969410 -0.01518395 -0.08569403 0.54509804 0.71372549 0.60000000 +v 0.03596550 -0.02263343 -0.08655520 0.54509804 0.71372549 0.60000000 +v 0.03496945 -0.02414763 -0.10110109 0.54509804 0.71372549 0.60000000 +v 0.04040808 -0.01267897 -0.08299756 0.54509804 0.71372549 0.60000000 +v 0.00278717 -0.03879424 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.00007759 -0.03912138 -0.07310108 0.54509804 0.71372549 0.60000000 +v 0.01507479 -0.03761652 -0.07905873 0.54509804 0.71372549 0.60000000 +v 0.01481035 -0.03772869 -0.07907285 0.54509804 0.71372549 0.60000000 +v 0.01800125 -0.03607428 -0.07895050 0.54509804 0.71372549 0.60000000 +v 0.02225872 -0.03554151 -0.08328461 0.54509804 0.71372549 0.60000000 +v 0.01979944 -0.03512090 -0.07888461 0.54509804 0.71372549 0.60000000 +v 0.03119678 -0.02885847 -0.08753873 0.54509804 0.71372549 0.60000000 +v 0.03016546 -0.02993337 -0.08767050 0.54509804 0.71372549 0.60000000 +v 0.02557303 -0.03323282 -0.08323756 0.54509804 0.71372549 0.60000000 +v 0.01120516 -0.03634535 -0.07310108 0.54509804 0.71372549 0.60000000 +v 0.01072035 -0.03652293 -0.07310108 0.54509804 0.71372549 0.60000000 +v 0.00693887 -0.03785020 -0.07310108 0.54509804 0.71372549 0.60000000 +v -0.00058884 -0.03913072 -0.07301167 0.54509804 0.71372549 0.60000000 +v 0.00116528 -0.03446662 -0.06563755 0.54509804 0.71372549 0.60000000 +v -0.00027151 -0.02906411 -0.05793402 0.54509804 0.71372549 0.60000000 +v 0.00198504 -0.03693421 -0.06960932 0.54509804 0.71372549 0.60000000 +v -0.00074750 -0.02520383 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04624338 0.01683856 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03884789 -0.01672619 -0.08303050 0.54509804 0.71372549 0.60000000 +v 0.03676764 -0.02076405 -0.08298344 0.54509804 0.71372549 0.60000000 +v 0.03417613 -0.02458694 -0.08287991 0.54509804 0.71372549 0.60000000 +v 0.03487249 -0.02406351 -0.08678109 0.54509804 0.71372549 0.60000000 +v 0.03236031 -0.02734427 -0.08729873 0.54509804 0.71372549 0.60000000 +v 0.00609266 -0.03653228 -0.07039049 0.54509804 0.71372549 0.60000000 +v 0.01556841 -0.03427033 -0.07310108 0.54509804 0.71372549 0.60000000 +v 0.01417569 -0.03429837 -0.07186814 0.54509804 0.71372549 0.60000000 +v 0.02391588 -0.03239161 -0.07879991 0.54509804 0.71372549 0.60000000 +v 0.02141252 -0.03405535 -0.07885167 0.54509804 0.71372549 0.60000000 +v 0.02088364 -0.02892390 -0.06951049 0.54509804 0.71372549 0.60000000 +v 0.01713742 -0.03084002 -0.06878578 0.54509804 0.71372549 0.60000000 +v 0.03145240 -0.02783031 -0.08295050 0.54509804 0.71372549 0.60000000 +v 0.02863172 -0.03066243 -0.08311991 0.54509804 0.71372549 0.60000000 +v 0.02818217 -0.02894260 -0.07875285 0.54509804 0.71372549 0.60000000 +v 0.02705389 -0.02985859 -0.07876697 0.54509804 0.71372549 0.60000000 +v 0.02435661 -0.03203642 -0.07879520 0.54509804 0.71372549 0.60000000 +v 0.01017385 -0.03564433 -0.07114343 0.54509804 0.71372549 0.60000000 +v 0.00522001 -0.03424229 -0.06646578 0.54509804 0.71372549 0.60000000 +v 0.00365101 -0.02913888 -0.05886108 0.54509804 0.71372549 0.60000000 +v 0.00310450 -0.02648436 -0.05526578 0.54509804 0.71372549 0.60000000 +v 0.00105950 -0.02496081 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04374002 0.01046397 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03870686 -0.01572607 -0.08041403 0.54509804 0.71372549 0.60000000 +v 0.03676764 -0.01935267 -0.08003755 0.54509804 0.71372549 0.60000000 +v 0.03568343 -0.02089491 -0.07979756 0.54509804 0.71372549 0.60000000 +v 0.03447583 -0.02260539 -0.07953403 0.54509804 0.71372549 0.60000000 +v 0.03260712 -0.02466171 -0.07916697 0.54509804 0.71372549 0.60000000 +v 0.03164633 -0.02570856 -0.07897873 0.54509804 0.71372549 0.60000000 +v 0.00926594 -0.03355062 -0.06726108 0.54509804 0.71372549 0.60000000 +v 0.01325016 -0.03240095 -0.06803755 0.54509804 0.71372549 0.60000000 +v 0.02641042 -0.02139029 -0.06387755 0.54509804 0.71372549 0.60000000 +v 0.01919123 -0.02534404 -0.06228696 0.54509804 0.71372549 0.60000000 +v 0.01541856 -0.02688628 -0.06145873 0.54509804 0.71372549 0.60000000 +v 0.02968947 -0.02754056 -0.07885167 0.54509804 0.71372549 0.60000000 +v 0.02827913 -0.02885847 -0.07875755 0.54509804 0.71372549 0.60000000 +v 0.02992747 -0.01907226 -0.06488461 0.54509804 0.71372549 0.60000000 +v 0.00760878 -0.02881174 -0.05975049 0.54509804 0.71372549 0.60000000 +v 0.01049117 -0.02329706 -0.05385402 0.54509804 0.71372549 0.60000000 +v 0.00730027 -0.02350269 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.00290176 -0.02470845 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04331692 0.00961340 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.04150991 0.00623917 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03603602 -0.01291265 -0.06753402 0.54509804 0.71372549 0.60000000 +v 0.03320652 -0.01631492 -0.06616931 0.54509804 0.71372549 0.60000000 +v 0.01154893 -0.02805464 -0.06061166 0.54509804 0.71372549 0.60000000 +v 0.02938096 -0.01745525 -0.06170343 0.54509804 0.71372549 0.60000000 +v 0.02580221 -0.01964242 -0.06062108 0.54509804 0.71372549 0.60000000 +v 0.01853013 -0.02332510 -0.05891284 0.54509804 0.71372549 0.60000000 +v 0.01808058 -0.02117531 -0.05577402 0.54509804 0.71372549 0.60000000 +v 0.01090546 -0.02571791 -0.05712460 0.54509804 0.71372549 0.60000000 +v 0.03275697 -0.01481007 -0.06306814 0.54509804 0.71372549 0.60000000 +v 0.01696112 -0.01947418 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.01045591 -0.02261474 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03864515 0.00166853 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03541018 -0.00986555 -0.06165637 0.54509804 0.71372549 0.60000000 +v 0.03241320 -0.01309024 -0.06016461 0.54509804 0.71372549 0.60000000 +v 0.02898430 -0.01564194 -0.05874813 0.54509804 0.71372549 0.60000000 +v 0.02536148 -0.01772631 -0.05760931 0.54509804 0.71372549 0.60000000 +v 0.02151830 -0.01741786 -0.05388696 0.54509804 0.71372549 0.60000000 +v 0.01831858 -0.01874512 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.01788666 -0.01901618 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03526914 -0.00804291 -0.05896931 0.54509804 0.71372549 0.60000000 +v 0.03581565 -0.00255627 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03221928 -0.01117412 -0.05748696 0.54509804 0.71372549 0.60000000 +v 0.02877275 -0.01365105 -0.05605637 0.54509804 0.71372549 0.60000000 +v 0.02514993 -0.01566064 -0.05488460 0.54509804 0.71372549 0.60000000 +v 0.02154474 -0.01664206 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03488130 -0.00382745 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03221928 -0.00909911 -0.05506813 0.54509804 0.71372549 0.60000000 +v 0.02518519 -0.01398754 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.02878157 -0.01151996 -0.05367049 0.54509804 0.71372549 0.60000000 +v 0.02685997 -0.01257616 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.03257186 -0.00680912 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.02980406 -0.00981882 -0.05303049 0.54509804 0.71372549 0.60000000 +v 0.02892260 -0.01076286 -0.05303049 0.54509804 0.71372549 0.60000000 +f 1 2 3 +f 1 3 4 +f 1 4 5 +f 1 5 6 +f 1 6 2 +f 2 7 8 +f 2 8 9 +f 2 9 3 +f 2 6 10 +f 2 10 23 +f 2 23 47 +f 2 47 69 +f 2 69 98 +f 2 98 137 +f 2 137 168 +f 2 168 188 +f 2 188 218 +f 2 218 197 +f 2 197 173 +f 2 173 144 +f 2 144 102 +f 2 102 73 +f 2 73 54 +f 2 54 30 +f 2 30 15 +f 2 15 7 +f 3 9 4 +f 4 9 11 +f 4 11 12 +f 4 12 5 +f 5 13 14 +f 5 14 6 +f 5 12 13 +f 6 14 10 +f 7 15 16 +f 7 16 8 +f 8 16 17 +f 8 17 18 +f 8 18 19 +f 8 19 9 +f 9 20 11 +f 9 19 20 +f 10 14 21 +f 10 21 22 +f 10 22 23 +f 11 20 24 +f 11 24 12 +f 12 24 25 +f 12 25 26 +f 12 26 13 +f 13 27 28 +f 13 28 14 +f 13 26 27 +f 14 28 29 +f 14 29 21 +f 15 30 31 +f 15 31 32 +f 15 32 16 +f 16 33 17 +f 16 32 33 +f 17 34 20 +f 17 20 35 +f 17 35 18 +f 17 33 36 +f 17 36 34 +f 18 35 19 +f 19 35 20 +f 20 34 37 +f 20 37 38 +f 20 38 24 +f 21 29 28 +f 21 28 22 +f 22 28 39 +f 22 39 40 +f 22 40 23 +f 23 40 41 +f 23 41 42 +f 23 42 43 +f 23 43 44 +f 23 44 45 +f 23 45 46 +f 23 46 47 +f 24 38 48 +f 24 48 25 +f 25 49 50 +f 25 50 51 +f 25 51 26 +f 25 48 49 +f 26 51 52 +f 26 52 27 +f 27 53 28 +f 27 52 51 +f 27 51 50 +f 27 50 49 +f 27 49 72 +f 27 72 71 +f 27 71 99 +f 27 99 101 +f 27 101 100 +f 27 100 138 +f 27 138 156 +f 27 156 158 +f 27 158 185 +f 27 185 213 +f 27 213 212 +f 27 212 237 +f 27 237 260 +f 27 260 279 +f 27 279 278 +f 27 278 292 +f 27 292 291 +f 27 291 300 +f 27 300 299 +f 27 299 306 +f 27 306 309 +f 27 309 311 +f 27 311 314 +f 27 314 313 +f 27 313 312 +f 27 312 307 +f 27 307 302 +f 27 302 293 +f 27 293 281 +f 27 281 280 +f 27 280 261 +f 27 261 238 +f 27 238 215 +f 27 215 189 +f 27 189 186 +f 27 186 167 +f 27 167 166 +f 27 166 136 +f 27 136 135 +f 27 135 134 +f 27 134 133 +f 27 133 165 +f 27 165 164 +f 27 164 163 +f 27 163 162 +f 27 162 161 +f 27 161 160 +f 27 160 159 +f 27 159 130 +f 27 130 129 +f 27 129 128 +f 27 128 127 +f 27 127 126 +f 27 126 125 +f 27 125 124 +f 27 124 123 +f 27 123 122 +f 27 122 121 +f 27 121 120 +f 27 120 119 +f 27 119 118 +f 27 118 93 +f 27 93 92 +f 27 92 91 +f 27 91 90 +f 27 90 89 +f 27 89 88 +f 27 88 87 +f 27 87 67 +f 27 67 66 +f 27 66 65 +f 27 65 64 +f 27 64 46 +f 27 46 45 +f 27 45 44 +f 27 44 42 +f 27 42 41 +f 27 41 63 +f 27 63 53 +f 28 53 39 +f 30 54 55 +f 30 55 56 +f 30 56 31 +f 31 56 32 +f 32 56 57 +f 32 57 58 +f 32 58 36 +f 32 36 33 +f 34 36 37 +f 36 58 37 +f 37 59 60 +f 37 60 61 +f 37 61 38 +f 37 58 57 +f 37 57 59 +f 38 61 62 +f 38 62 48 +f 39 53 63 +f 39 63 41 +f 39 41 40 +f 42 44 43 +f 46 64 47 +f 47 64 65 +f 47 65 66 +f 47 66 67 +f 47 67 68 +f 47 68 69 +f 48 62 70 +f 48 70 71 +f 48 71 72 +f 48 72 49 +f 54 73 74 +f 54 74 75 +f 54 75 76 +f 54 76 55 +f 55 77 56 +f 55 76 77 +f 56 78 79 +f 56 79 57 +f 56 77 80 +f 56 80 78 +f 57 79 59 +f 59 79 60 +f 60 79 81 +f 60 81 82 +f 60 82 61 +f 61 82 83 +f 61 83 84 +f 61 84 62 +f 62 84 85 +f 62 85 86 +f 62 86 70 +f 67 87 68 +f 68 87 88 +f 68 88 89 +f 68 89 90 +f 68 90 91 +f 68 91 69 +f 69 91 92 +f 69 92 93 +f 69 93 94 +f 69 94 95 +f 69 95 96 +f 69 96 97 +f 69 97 98 +f 70 99 71 +f 70 86 100 +f 70 100 101 +f 70 101 99 +f 73 102 103 +f 73 103 104 +f 73 104 74 +f 74 104 105 +f 74 105 106 +f 74 106 107 +f 74 107 75 +f 75 107 76 +f 76 107 108 +f 76 108 109 +f 76 109 77 +f 77 109 110 +f 77 110 111 +f 77 111 80 +f 78 81 79 +f 78 80 81 +f 80 111 82 +f 80 82 81 +f 82 111 110 +f 82 110 109 +f 82 109 83 +f 83 109 112 +f 83 112 84 +f 84 112 113 +f 84 113 114 +f 84 114 85 +f 85 114 115 +f 85 115 86 +f 86 116 100 +f 86 115 117 +f 86 117 116 +f 93 118 94 +f 94 118 119 +f 94 119 120 +f 94 120 95 +f 95 120 121 +f 95 121 122 +f 95 122 123 +f 95 123 124 +f 95 124 96 +f 96 124 125 +f 96 125 126 +f 96 126 127 +f 96 127 97 +f 97 127 128 +f 97 128 129 +f 97 129 130 +f 97 130 131 +f 97 131 98 +f 98 131 132 +f 98 132 133 +f 98 133 134 +f 98 134 135 +f 98 135 136 +f 98 136 137 +f 100 116 138 +f 102 139 140 +f 102 140 141 +f 102 141 142 +f 102 142 143 +f 102 143 103 +f 102 144 145 +f 102 145 139 +f 103 143 146 +f 103 146 105 +f 103 105 104 +f 105 146 147 +f 105 147 148 +f 105 148 149 +f 105 149 150 +f 105 150 106 +f 106 150 151 +f 106 151 107 +f 107 151 108 +f 108 113 112 +f 108 112 109 +f 108 151 113 +f 113 151 152 +f 113 152 114 +f 114 153 115 +f 114 152 154 +f 114 154 153 +f 115 153 155 +f 115 155 117 +f 116 156 138 +f 116 117 157 +f 116 157 158 +f 116 158 156 +f 117 155 157 +f 130 159 131 +f 131 159 160 +f 131 160 161 +f 131 161 162 +f 131 162 163 +f 131 163 164 +f 131 164 132 +f 132 164 165 +f 132 165 133 +f 136 166 137 +f 137 166 167 +f 137 167 168 +f 139 145 169 +f 139 169 140 +f 140 169 146 +f 140 146 141 +f 141 146 142 +f 142 146 143 +f 144 170 171 +f 144 171 172 +f 144 172 145 +f 144 173 170 +f 145 172 174 +f 145 174 175 +f 145 175 169 +f 146 169 147 +f 147 169 148 +f 148 169 176 +f 148 176 177 +f 148 177 149 +f 149 177 178 +f 149 178 179 +f 149 179 150 +f 150 180 151 +f 150 179 181 +f 150 181 154 +f 150 154 180 +f 151 154 152 +f 151 180 154 +f 153 154 181 +f 153 181 179 +f 153 179 182 +f 153 182 155 +f 155 182 183 +f 155 183 184 +f 155 184 157 +f 157 184 158 +f 158 184 185 +f 167 186 168 +f 168 187 188 +f 168 186 189 +f 168 189 187 +f 169 190 176 +f 169 175 191 +f 169 191 190 +f 170 192 174 +f 170 174 171 +f 170 173 193 +f 170 193 194 +f 170 194 192 +f 171 174 172 +f 173 195 196 +f 173 196 193 +f 173 197 198 +f 173 198 195 +f 174 192 199 +f 174 199 200 +f 174 200 175 +f 175 200 191 +f 176 190 201 +f 176 201 178 +f 176 178 177 +f 178 201 202 +f 178 202 182 +f 178 182 179 +f 182 202 183 +f 183 203 204 +f 183 204 205 +f 183 205 184 +f 183 202 206 +f 183 206 203 +f 184 207 208 +f 184 208 209 +f 184 209 210 +f 184 210 211 +f 184 211 212 +f 184 212 213 +f 184 213 185 +f 184 205 207 +f 187 214 188 +f 187 189 215 +f 187 215 214 +f 188 216 217 +f 188 217 218 +f 188 214 219 +f 188 219 216 +f 190 191 201 +f 191 200 220 +f 191 220 221 +f 191 221 201 +f 192 194 222 +f 192 222 223 +f 192 223 199 +f 193 196 194 +f 194 224 222 +f 194 196 195 +f 194 195 198 +f 194 198 225 +f 194 225 226 +f 194 226 224 +f 197 227 228 +f 197 228 198 +f 197 218 227 +f 198 228 229 +f 198 229 225 +f 199 223 230 +f 199 230 231 +f 199 231 232 +f 199 232 200 +f 200 232 220 +f 201 221 233 +f 201 233 202 +f 202 233 206 +f 203 234 205 +f 203 205 204 +f 203 206 234 +f 205 234 235 +f 205 235 207 +f 206 233 220 +f 206 220 236 +f 206 236 234 +f 207 235 208 +f 208 235 209 +f 209 235 210 +f 210 235 211 +f 211 235 212 +f 212 235 237 +f 214 215 219 +f 215 238 219 +f 216 239 217 +f 216 219 239 +f 217 240 241 +f 217 241 242 +f 217 242 218 +f 217 239 240 +f 218 242 243 +f 218 243 227 +f 219 238 239 +f 220 232 244 +f 220 244 236 +f 220 233 221 +f 222 224 245 +f 222 245 246 +f 222 246 230 +f 222 230 223 +f 224 226 245 +f 225 229 247 +f 225 247 248 +f 225 248 226 +f 226 248 249 +f 226 249 250 +f 226 250 245 +f 227 243 241 +f 227 241 251 +f 227 251 228 +f 228 252 229 +f 228 251 252 +f 229 252 253 +f 229 253 254 +f 229 254 255 +f 229 255 247 +f 230 256 231 +f 230 246 256 +f 231 256 232 +f 232 256 244 +f 234 236 257 +f 234 257 258 +f 234 258 235 +f 235 258 259 +f 235 259 237 +f 236 244 257 +f 237 259 260 +f 238 261 239 +f 239 262 263 +f 239 263 240 +f 239 261 262 +f 240 264 265 +f 240 265 241 +f 240 263 264 +f 241 265 266 +f 241 266 267 +f 241 267 251 +f 241 243 242 +f 244 256 268 +f 244 268 257 +f 245 250 246 +f 246 250 269 +f 246 269 256 +f 247 255 270 +f 247 270 249 +f 247 249 248 +f 249 271 250 +f 249 270 271 +f 250 271 272 +f 250 272 269 +f 251 267 252 +f 252 267 273 +f 252 273 274 +f 252 274 253 +f 253 274 275 +f 253 275 270 +f 253 270 254 +f 254 270 255 +f 256 269 268 +f 257 268 276 +f 257 276 258 +f 258 276 259 +f 259 276 277 +f 259 277 278 +f 259 278 279 +f 259 279 260 +f 261 280 262 +f 262 280 263 +f 263 280 281 +f 263 281 282 +f 263 282 264 +f 264 282 265 +f 265 282 283 +f 265 283 266 +f 266 283 267 +f 267 283 275 +f 267 275 273 +f 268 269 284 +f 268 284 276 +f 269 272 284 +f 270 275 285 +f 270 285 286 +f 270 286 271 +f 271 286 287 +f 271 287 272 +f 272 287 288 +f 272 288 289 +f 272 289 284 +f 273 275 274 +f 275 283 290 +f 275 290 285 +f 276 284 289 +f 276 289 277 +f 277 288 291 +f 277 291 292 +f 277 292 278 +f 277 289 288 +f 281 293 294 +f 281 294 282 +f 282 294 283 +f 283 294 290 +f 285 290 295 +f 285 295 296 +f 285 296 286 +f 286 296 297 +f 286 297 287 +f 287 297 298 +f 287 298 288 +f 288 298 299 +f 288 299 300 +f 288 300 291 +f 290 294 301 +f 290 301 295 +f 293 302 301 +f 293 301 294 +f 295 301 302 +f 295 302 303 +f 295 303 296 +f 296 303 304 +f 296 304 297 +f 297 304 305 +f 297 305 298 +f 298 305 306 +f 298 306 299 +f 302 307 303 +f 303 307 308 +f 303 308 304 +f 304 309 305 +f 304 308 310 +f 304 310 311 +f 304 311 309 +f 305 309 306 +f 307 312 308 +f 308 312 313 +f 308 313 310 +f 310 313 314 +f 310 314 311 + +o geometry_1 +v 0.00448426 0.04370853 0.02176533 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.04702420 0.02132607 0.54117647 0.42352941 0.64313725 +v 0.00332338 0.04708496 0.02047684 0.54117647 0.42352941 0.64313725 +v 0.00028423 0.04373457 0.01869785 0.54117647 0.42352941 0.64313725 +v 0.00230598 0.04041890 0.02003026 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.04290999 0.02172873 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.04821333 0.02096735 0.54117647 0.42352941 0.64313725 +v -0.00159839 0.04667701 0.01648691 0.54117647 0.42352941 0.64313725 +v 0.00154945 0.05005344 0.01776808 0.54117647 0.42352941 0.64313725 +v -0.00444624 0.04312699 0.01482505 0.54117647 0.42352941 0.64313725 +v -0.00241144 0.04023662 0.01656744 0.54117647 0.42352941 0.64313725 +v -0.00468972 0.03660848 0.01411491 0.54117647 0.42352941 0.64313725 +v -0.00017230 0.03700775 0.01747524 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.04010643 0.02147250 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05018364 0.02014008 0.54117647 0.42352941 0.64313725 +v -0.00474624 0.04724988 0.01314122 0.54117647 0.42352941 0.64313725 +v -0.00762887 0.04345682 0.01165506 0.54117647 0.42352941 0.64313725 +v -0.00159405 0.05079990 0.01418080 0.54117647 0.42352941 0.64313725 +v -0.00343754 0.04872543 0.01357316 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05283097 0.01852946 0.54117647 0.42352941 0.64313725 +v -0.01008106 0.03955092 0.00980285 0.54117647 0.42352941 0.64313725 +v -0.00692886 0.03943809 0.01280446 0.54117647 0.42352941 0.64313725 +v -0.00897236 0.03564503 0.01047639 0.54117647 0.42352941 0.64313725 +v -0.01052019 0.03180857 0.00787744 0.54117647 0.42352941 0.64313725 +v -0.00648103 0.03291090 0.01137687 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.03653036 0.02056469 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.03669528 0.02060862 0.54117647 0.42352941 0.64313725 +v -0.00657669 0.04811785 0.01054960 0.54117647 0.42352941 0.64313725 +v -0.00920714 0.04471538 0.00940020 0.54117647 0.42352941 0.64313725 +v -0.01155498 0.04115668 0.00791404 0.54117647 0.42352941 0.64313725 +v -0.00371145 0.05132069 0.01135490 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05318684 0.01825858 0.54117647 0.42352941 0.64313725 +v 0.00204511 0.05434125 0.01482505 0.54117647 0.42352941 0.64313725 +v -0.01355934 0.03746778 0.00612772 0.54117647 0.42352941 0.64313725 +v -0.01065497 0.03840519 0.00918057 0.54117647 0.42352941 0.64313725 +v -0.01206803 0.03556691 0.00763585 0.54117647 0.42352941 0.64313725 +v -0.01353325 0.03159158 0.00521992 0.54117647 0.42352941 0.64313725 +v -0.01445500 0.02772908 0.00262097 0.54117647 0.42352941 0.64313725 +v -0.01153324 0.02801551 0.00505886 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.03263315 0.01896872 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.03633073 0.02048416 0.54117647 0.42352941 0.64313725 +v -0.01027671 0.04710232 0.00658162 0.54117647 0.42352941 0.64313725 +v -0.00749843 0.05040931 0.00739425 0.54117647 0.42352941 0.64313725 +v -0.01279412 0.04358701 0.00541759 0.54117647 0.42352941 0.64313725 +v -0.01501587 0.03991547 0.00393143 0.54117647 0.42352941 0.64313725 +v -0.00451580 0.05348195 0.00785547 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05339515 0.01807556 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05585153 0.01556446 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05640703 0.01492754 0.54117647 0.42352941 0.64313725 +v -0.00137231 0.05630287 0.00798726 0.54117647 0.42352941 0.64313725 +v -0.01688545 0.03613977 0.00215975 0.54117647 0.42352941 0.64313725 +v -0.01837241 0.03231200 0.00015381 0.54117647 0.42352941 0.64313725 +v -0.01944199 0.02848422 -0.00204249 0.54117647 0.42352941 0.64313725 +v -0.02007243 0.02473456 -0.00437788 0.54117647 0.42352941 0.64313725 +v -0.02023764 0.02113246 -0.00680845 0.54117647 0.42352941 0.64313725 +v -0.01483761 0.02401414 -0.00011707 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.02539422 0.01423937 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.02907444 0.01686760 0.54117647 0.42352941 0.64313725 +v -0.01407673 0.04569620 0.00210119 0.54117647 0.42352941 0.64313725 +v -0.01140715 0.04913339 0.00292114 0.54117647 0.42352941 0.64313725 +v -0.00850279 0.05231886 0.00338968 0.54117647 0.42352941 0.64313725 +v -0.01645936 0.04205938 0.00093715 0.54117647 0.42352941 0.64313725 +v -0.01852459 0.03829236 -0.00054169 0.54117647 0.42352941 0.64313725 +v -0.00541146 0.05523526 0.00352146 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05724029 0.01377083 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05807354 0.01240180 0.54117647 0.42352941 0.64313725 +v 0.00189293 0.05885472 0.00778959 0.54117647 0.42352941 0.64313725 +v -0.02024200 0.03443854 -0.00228408 0.54117647 0.42352941 0.64313725 +v -0.02351158 0.03232936 -0.00710128 0.54117647 0.42352941 0.64313725 +v -0.02253766 0.02669619 -0.00635454 0.54117647 0.42352941 0.64313725 +v -0.02592464 0.02074187 -0.01310449 0.54117647 0.42352941 0.64313725 +v -0.02588551 0.01706164 -0.01527150 0.54117647 0.42352941 0.64313725 +v -0.02539855 0.01353766 -0.01746779 0.54117647 0.42352941 0.64313725 +v -0.01994634 0.01772131 -0.00930490 0.54117647 0.42352941 0.64313725 +v -0.01469413 0.02062903 -0.00285512 0.54117647 0.42352941 0.64313725 +v -0.01468978 0.02052487 -0.00294297 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.02219139 0.01121581 0.54117647 0.42352941 0.64313725 +v -0.01527674 0.04745819 -0.00196928 0.54117647 0.42352941 0.64313725 +v -0.01781589 0.04388213 -0.00278923 0.54117647 0.42352941 0.64313725 +v -0.01246368 0.05079122 -0.00149342 0.54117647 0.42352941 0.64313725 +v -0.00943323 0.05382914 -0.00136164 0.54117647 0.42352941 0.64313725 +v -0.02005069 0.04012379 -0.00393862 0.54117647 0.42352941 0.64313725 +v -0.02195505 0.03625261 -0.00539549 0.54117647 0.42352941 0.64313725 +v -0.00622016 0.05656327 -0.00153734 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05922795 0.01033729 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06060804 0.00740889 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06095523 0.00646449 0.54117647 0.42352941 0.64313725 +v 0.00119293 0.06020877 0.00284792 0.54117647 0.42352941 0.64313725 +v -0.02520290 0.03381359 -0.01055679 0.54117647 0.42352941 0.64313725 +v -0.02658986 0.02983826 -0.01220401 0.54117647 0.42352941 0.64313725 +v -0.02552029 0.02454360 -0.01099604 0.54117647 0.42352941 0.64313725 +v -0.02830726 0.02202647 -0.01589378 0.54117647 0.42352941 0.64313725 +v -0.02843335 0.01450979 -0.01988371 0.54117647 0.42352941 0.64313725 +v -0.02998119 0.00807809 -0.02656777 0.54117647 0.42352941 0.64313725 +v -0.02884640 0.00465826 -0.02845658 0.54117647 0.42352941 0.64313725 +v -0.02449854 0.01019595 -0.01967873 0.54117647 0.42352941 0.64313725 +v -0.01923329 0.01450111 -0.01182331 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.01940518 0.00785547 0.54117647 0.42352941 0.64313725 +v -0.02552898 -0.00159985 -0.03216099 0.54117647 0.42352941 0.64313725 +v -0.02225070 -0.01034906 -0.03968696 0.54117647 0.42352941 0.64313725 +v -0.02307679 -0.01371681 -0.04385260 0.54117647 0.42352941 0.64313725 +v -0.01714197 -0.01840388 -0.04655404 0.54117647 0.42352941 0.64313725 +v -0.01736372 -0.02173691 -0.05062450 0.54117647 0.42352941 0.64313725 +v -0.01896372 0.04541845 -0.00718913 0.54117647 0.42352941 0.64313725 +v -0.01625936 0.04889903 -0.00671327 0.54117647 0.42352941 0.64313725 +v -0.02138113 0.04167747 -0.00799444 0.54117647 0.42352941 0.64313725 +v -0.01329847 0.05209319 -0.00657417 0.54117647 0.42352941 0.64313725 +v -0.01012454 0.05495751 -0.00674988 0.54117647 0.42352941 0.64313725 +v -0.02346375 0.03778893 -0.00912919 0.54117647 0.42352941 0.64313725 +v -0.00286797 0.05900228 -0.00201320 0.54117647 0.42352941 0.64313725 +v -0.00678104 0.05750068 -0.00720378 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06198812 0.00202066 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06301233 -0.00339687 0.54117647 0.42352941 0.64313725 +v 0.00419730 0.06293422 -0.00374095 0.54117647 0.42352941 0.64313725 +v -0.02661595 0.03509820 -0.01456136 0.54117647 0.42352941 0.64313725 +v -0.02819422 0.03103607 -0.01593038 0.54117647 0.42352941 0.64313725 +v -0.02941597 0.02701734 -0.01751172 0.54117647 0.42352941 0.64313725 +v -0.03083772 0.01920555 -0.02099650 0.54117647 0.42352941 0.64313725 +v -0.03070293 0.01166283 -0.02468627 0.54117647 0.42352941 0.64313725 +v -0.03266381 0.00859887 -0.02963526 0.54117647 0.42352941 0.64313725 +v -0.03055510 0.00155090 -0.03308344 0.54117647 0.42352941 0.64313725 +v -0.02697682 -0.00478533 -0.03647305 0.54117647 0.42352941 0.64313725 +v -0.01042019 -0.02510466 -0.05290133 0.54117647 0.42352941 0.64313725 +v -0.00385058 -0.02549525 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.00375928 -0.02548657 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.00075926 -0.02520014 -0.05302578 0.54117647 0.42352941 0.64313725 +v 0.00105380 -0.02496579 -0.05302578 0.54117647 0.42352941 0.64313725 +v 0.00290598 -0.02471407 -0.05302578 0.54117647 0.42352941 0.64313725 +v 0.00448426 -0.02424536 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02358984 -0.01711060 -0.04815001 0.54117647 0.42352941 0.64313725 +v -0.02808552 -0.00810100 -0.04092421 0.54117647 0.42352941 0.64313725 +v -0.02382463 -0.02043495 -0.05257188 0.54117647 0.42352941 0.64313725 +v -0.01734197 -0.02358570 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.01978112 0.04668569 -0.01220401 0.54117647 0.42352941 0.64313725 +v -0.02238984 0.04302283 -0.01266523 0.54117647 0.42352941 0.64313725 +v -0.01689415 0.05003608 -0.01206491 0.54117647 0.42352941 0.64313725 +v -0.02468115 0.03913429 -0.01345589 0.54117647 0.42352941 0.64313725 +v -0.01376804 0.05304796 -0.01222597 0.54117647 0.42352941 0.64313725 +v -0.01044628 0.05573869 -0.01265791 0.54117647 0.42352941 0.64313725 +v 0.00032336 0.06163225 -0.00888028 0.54117647 0.42352941 0.64313725 +v -0.00331145 0.06009593 -0.01426852 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06305573 -0.00384345 0.54117647 0.42352941 0.64313725 +v -0.02765074 0.03630469 -0.01911501 0.54117647 0.42352941 0.64313725 +v -0.02944640 0.03215576 -0.02017655 0.54117647 0.42352941 0.64313725 +v -0.03194207 0.02397074 -0.02298049 0.54117647 0.42352941 0.64313725 +v -0.03306817 0.01616763 -0.02623100 0.54117647 0.42352941 0.64313725 +v -0.03430296 0.00540472 -0.03468673 0.54117647 0.42352941 0.64313725 +v -0.03498122 0.01299951 -0.03157532 0.54117647 0.42352941 0.64313725 +v -0.03193337 -0.00169533 -0.03783475 0.54117647 0.42352941 0.64313725 +v -0.01084628 -0.02509598 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.01041150 -0.02519146 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.00631582 -0.02538241 -0.05302578 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05294380 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02887683 -0.01146875 -0.04548517 0.54117647 0.42352941 0.64313725 +v -0.02938553 -0.01478442 -0.05014864 0.54117647 0.42352941 0.64313725 +v -0.02955075 -0.01671133 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02495507 -0.01995756 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02382463 -0.02074742 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02253331 -0.02133764 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02015504 0.04770122 -0.01776063 0.54117647 0.42352941 0.64313725 +v -0.02297244 0.04417724 -0.01789973 0.54117647 0.42352941 0.64313725 +v -0.02548116 0.04034946 -0.01835363 0.54117647 0.42352941 0.64313725 +v -0.01707676 0.05088670 -0.01791437 0.54117647 0.42352941 0.64313725 +v -0.01378108 0.05371630 -0.01831702 0.54117647 0.42352941 0.64313725 +v -0.01028976 0.05619872 -0.01896859 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06317725 -0.00671327 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06315989 -0.01030787 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06308177 -0.01636964 0.54117647 0.42352941 0.64313725 +v 0.00426251 0.06299497 -0.01670641 0.54117647 0.42352941 0.64313725 +v -0.00284623 0.06005253 -0.02090865 0.54117647 0.42352941 0.64313725 +v -0.00662886 0.05831658 -0.01984711 0.54117647 0.42352941 0.64313725 +v -0.02819857 0.03747646 -0.02420309 0.54117647 0.42352941 0.64313725 +v -0.03025510 0.03330149 -0.02492787 0.54117647 0.42352941 0.64313725 +v -0.03192468 0.02905708 -0.02593084 0.54117647 0.42352941 0.64313725 +v -0.03414208 0.02081130 -0.02855907 0.54117647 0.42352941 0.64313725 +v -0.03657254 0.00979668 -0.03698552 0.54117647 0.42352941 0.64313725 +v -0.03562470 0.00217584 -0.03981874 0.54117647 0.42352941 0.64313725 +v -0.03600731 0.01766055 -0.03422551 0.54117647 0.42352941 0.64313725 +v -0.03299425 -0.00498496 -0.04268124 0.54117647 0.42352941 0.64313725 +v 0.00327555 0.05291776 -0.05302578 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05481863 -0.04841357 0.54117647 0.42352941 0.64313725 +v -0.03375947 -0.00823120 -0.04760826 0.54117647 0.42352941 0.64313725 +v -0.03427687 -0.01135591 -0.05260117 0.54117647 0.42352941 0.64313725 +v -0.03342469 -0.01257108 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02302897 0.04514937 -0.02363937 0.54117647 0.42352941 0.64313725 +v -0.01999851 0.04849108 -0.02377115 0.54117647 0.42352941 0.64313725 +v -0.02577681 0.04146047 -0.02377115 0.54117647 0.42352941 0.64313725 +v -0.01673327 0.05148560 -0.02415184 0.54117647 0.42352941 0.64313725 +v -0.01324629 0.05409821 -0.02475948 0.54117647 0.42352941 0.64313725 +v -0.00957236 0.05632891 -0.02557943 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06303837 -0.01679426 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06276930 -0.01884413 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06217040 -0.02340510 0.54117647 0.42352941 0.64313725 +v 0.00103206 0.06138054 -0.02216054 0.54117647 0.42352941 0.64313725 +v -0.00184187 0.05956647 -0.02774644 0.54117647 0.42352941 0.64313725 +v -0.00576364 0.05816034 -0.02657509 0.54117647 0.42352941 0.64313725 +v -0.02818552 0.03861351 -0.02977435 0.54117647 0.42352941 0.64313725 +v -0.03052032 0.03449930 -0.03017701 0.54117647 0.42352941 0.64313725 +v -0.03247686 0.03022885 -0.03085786 0.54117647 0.42352941 0.64313725 +v -0.03403774 0.02593237 -0.03178762 0.54117647 0.42352941 0.64313725 +v -0.03786385 0.00668064 -0.04245429 0.54117647 0.42352941 0.64313725 +v -0.03754645 0.01459659 -0.03995052 0.54117647 0.42352941 0.64313725 +v -0.03664645 -0.00099227 -0.04502395 0.54117647 0.42352941 0.64313725 +v -0.03579427 0.02290313 -0.03773226 0.54117647 0.42352941 0.64313725 +v -0.00120709 0.05244906 -0.05302578 0.54117647 0.42352941 0.64313725 +v 0.00432773 0.05479259 -0.04845749 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05500959 -0.04792306 0.54117647 0.42352941 0.64313725 +v -0.03740732 -0.00403019 -0.05027309 0.54117647 0.42352941 0.64313725 +v -0.03768123 -0.00548839 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03479426 -0.01071361 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03430296 -0.01159895 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02251592 0.04594791 -0.02975971 0.54117647 0.42352941 0.64313725 +v -0.02550290 0.04244996 -0.02964258 0.54117647 0.42352941 0.64313725 +v -0.01927242 0.04908130 -0.03011112 0.54117647 0.42352941 0.64313725 +v -0.01580283 0.05183279 -0.03066751 0.54117647 0.42352941 0.64313725 +v -0.01212455 0.05417633 -0.03142890 0.54117647 0.42352941 0.64313725 +v -0.00829409 0.05609456 -0.03235134 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06197076 -0.02454718 0.54117647 0.42352941 0.64313725 +v 0.00216250 0.06051256 -0.02907886 0.54117647 0.42352941 0.64313725 +v -0.00028099 0.05855961 -0.03467209 0.54117647 0.42352941 0.64313725 +v -0.00433319 0.05756144 -0.03343484 0.54117647 0.42352941 0.64313725 +v -0.03018989 0.03574918 -0.03588005 0.54117647 0.42352941 0.64313725 +v -0.02756813 0.03970716 -0.03575559 0.54117647 0.42352941 0.64313725 +v -0.03245512 0.03154818 -0.03625342 0.54117647 0.42352941 0.64313725 +v -0.03432469 0.02721697 -0.03687570 0.54117647 0.42352941 0.64313725 +v -0.03878124 0.01171491 -0.04571945 0.54117647 0.42352941 0.64313725 +v -0.03887255 0.00372084 -0.04796699 0.54117647 0.42352941 0.64313725 +v -0.03720732 0.02007353 -0.04372814 0.54117647 0.42352941 0.64313725 +v -0.03581601 0.02438737 -0.04295944 0.54117647 0.42352941 0.64313725 +v -0.00557668 0.05151164 -0.05302578 0.54117647 0.42352941 0.64313725 +v 0.00013640 0.05477523 -0.04722025 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05698858 -0.04249089 0.54117647 0.42352941 0.64313725 +v -0.03956821 0.00125579 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03929429 0.00024026 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02141157 0.04659021 -0.03617289 0.54117647 0.42352941 0.64313725 +v -0.02462898 0.04332662 -0.03585809 0.54117647 0.42352941 0.64313725 +v -0.01794633 0.04945454 -0.03668536 0.54117647 0.42352941 0.64313725 +v -0.01427239 0.05189355 -0.03737353 0.54117647 0.42352941 0.64313725 +v -0.01042454 0.05388989 -0.03821544 0.54117647 0.42352941 0.64313725 +v -0.00643756 0.05541754 -0.03920377 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.06079899 -0.02993542 0.54117647 0.42352941 0.64313725 +v -0.00235057 0.05645043 -0.04034585 0.54117647 0.42352941 0.64313725 +v 0.00381034 0.05907172 -0.03604843 0.54117647 0.42352941 0.64313725 +v -0.02924640 0.03699907 -0.04194914 0.54117647 0.42352941 0.64313725 +v -0.03181598 0.03297166 -0.04206628 0.54117647 0.42352941 0.64313725 +v -0.02634638 0.04071401 -0.04203699 0.54117647 0.42352941 0.64313725 +v -0.03401600 0.02872725 -0.04240304 0.54117647 0.42352941 0.64313725 +v -0.03974212 0.00910230 -0.05153230 0.54117647 0.42352941 0.64313725 +v -0.03831167 0.01751299 -0.04977527 0.54117647 0.42352941 0.64313725 +v -0.03966386 0.00303514 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03698558 0.02180948 -0.04910174 0.54117647 0.42352941 0.64313725 +v -0.03523774 0.02613200 -0.04861123 0.54117647 0.42352941 0.64313725 +v -0.00990714 0.05007080 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.00954192 0.05086934 -0.05095395 0.54117647 0.42352941 0.64313725 +v -0.00539842 0.05194563 -0.05186907 0.54117647 0.42352941 0.64313725 +v -0.00404624 0.05423709 -0.04607817 0.54117647 0.42352941 0.64313725 +v 0.00179293 0.05697989 -0.04160506 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05907172 -0.03629003 0.54117647 0.42352941 0.64313725 +v -0.01970286 0.04702420 -0.04277641 0.54117647 0.42352941 0.64313725 +v -0.02315506 0.04407308 -0.04231519 0.54117647 0.42352941 0.64313725 +v -0.01602892 0.04954133 -0.04339137 0.54117647 0.42352941 0.64313725 +v -0.01217238 0.05159844 -0.04415276 0.54117647 0.42352941 0.64313725 +v -0.00816800 0.05316948 -0.04505324 0.54117647 0.42352941 0.64313725 +v 0.00448426 0.05961855 -0.03448906 0.54117647 0.42352941 0.64313725 +v -0.02769856 0.03819688 -0.04828911 0.54117647 0.42352941 0.64313725 +v -0.03056380 0.03442986 -0.04820858 0.54117647 0.42352941 0.64313725 +v -0.03308990 0.03037641 -0.04831107 0.54117647 0.42352941 0.64313725 +v -0.02453332 0.04160803 -0.04853070 0.54117647 0.42352941 0.64313725 +v -0.03875950 0.01631518 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03992908 0.00852075 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03754645 0.02038600 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03805080 0.01871948 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03642905 0.02318956 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03436817 0.02753812 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03588992 0.02451756 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.01407239 0.04816993 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.01356369 0.04926358 -0.05015596 0.54117647 0.42352941 0.64313725 +v -0.01742893 0.04717176 -0.04948243 0.54117647 0.42352941 0.64313725 +v -0.02109852 0.04461122 -0.04893336 0.54117647 0.42352941 0.64313725 +v -0.02847683 0.03641752 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02918553 0.03548879 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02528985 0.03992415 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02616812 0.03896070 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03132902 0.03263315 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03193772 0.03166101 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.03381165 0.02863178 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02292897 0.04205938 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.01804198 0.04583507 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.01951155 0.04475878 -0.05302578 0.54117647 0.42352941 0.64313725 +v -0.02179853 0.04307491 -0.05302578 0.54117647 0.42352941 0.64313725 +f 315 316 317 +f 315 317 318 +f 315 318 319 +f 315 319 320 +f 315 320 328 +f 315 328 341 +f 315 341 340 +f 315 340 355 +f 315 355 354 +f 315 354 372 +f 315 372 371 +f 315 371 391 +f 315 391 412 +f 315 412 443 +f 315 443 467 +f 315 467 495 +f 315 495 521 +f 315 521 546 +f 315 546 572 +f 315 572 578 +f 315 578 555 +f 315 555 532 +f 315 532 507 +f 315 507 506 +f 315 506 505 +f 315 505 482 +f 315 482 481 +f 315 481 480 +f 315 480 456 +f 315 456 427 +f 315 427 426 +f 315 426 401 +f 315 401 400 +f 315 400 399 +f 315 399 380 +f 315 380 379 +f 315 379 363 +f 315 363 362 +f 315 362 361 +f 315 361 346 +f 315 346 334 +f 315 334 329 +f 315 329 321 +f 315 321 316 +f 316 321 317 +f 317 322 318 +f 317 321 323 +f 317 323 322 +f 318 322 324 +f 318 324 325 +f 318 325 319 +f 319 325 326 +f 319 326 327 +f 319 327 328 +f 319 328 320 +f 321 329 323 +f 322 323 330 +f 322 330 331 +f 322 331 324 +f 323 332 333 +f 323 333 330 +f 323 329 334 +f 323 334 332 +f 324 331 335 +f 324 335 336 +f 324 336 325 +f 325 336 326 +f 326 337 338 +f 326 338 339 +f 326 339 327 +f 326 336 337 +f 327 339 340 +f 327 340 341 +f 327 341 328 +f 330 342 343 +f 330 343 331 +f 330 333 342 +f 331 344 335 +f 331 343 344 +f 332 345 342 +f 332 342 333 +f 332 334 346 +f 332 346 347 +f 332 347 345 +f 335 344 348 +f 335 348 349 +f 335 349 336 +f 336 349 350 +f 336 350 337 +f 337 350 351 +f 337 351 338 +f 338 351 352 +f 338 352 353 +f 338 353 339 +f 339 354 355 +f 339 355 340 +f 339 353 354 +f 342 356 343 +f 342 345 357 +f 342 357 356 +f 343 356 358 +f 343 358 344 +f 344 359 348 +f 344 358 359 +f 345 347 360 +f 345 360 357 +f 346 361 347 +f 347 361 362 +f 347 362 363 +f 347 363 364 +f 347 364 360 +f 348 365 366 +f 348 366 350 +f 348 350 349 +f 348 359 365 +f 350 366 351 +f 351 366 367 +f 351 367 352 +f 352 368 369 +f 352 369 370 +f 352 370 353 +f 352 367 368 +f 353 370 371 +f 353 371 372 +f 353 372 354 +f 356 373 358 +f 356 357 374 +f 356 374 373 +f 357 360 375 +f 357 375 374 +f 358 376 359 +f 358 373 376 +f 359 376 377 +f 359 377 365 +f 360 364 378 +f 360 378 375 +f 363 379 364 +f 364 379 380 +f 364 380 381 +f 364 381 378 +f 365 377 382 +f 365 382 366 +f 366 383 384 +f 366 384 367 +f 366 382 383 +f 367 384 368 +f 368 384 385 +f 368 385 386 +f 368 386 369 +f 369 386 387 +f 369 387 388 +f 369 388 370 +f 370 388 389 +f 370 389 371 +f 371 389 390 +f 371 390 391 +f 373 374 392 +f 373 392 393 +f 373 393 376 +f 374 375 394 +f 374 394 392 +f 375 378 395 +f 375 395 394 +f 376 396 377 +f 376 393 396 +f 377 397 382 +f 377 396 397 +f 378 381 398 +f 378 398 395 +f 380 399 381 +f 381 399 400 +f 381 400 401 +f 381 401 402 +f 381 402 398 +f 382 397 383 +f 383 397 403 +f 383 403 404 +f 383 404 405 +f 383 405 384 +f 384 405 385 +f 385 405 406 +f 385 406 407 +f 385 407 386 +f 386 407 387 +f 387 407 408 +f 387 408 409 +f 387 409 410 +f 387 410 388 +f 388 390 389 +f 388 410 411 +f 388 411 390 +f 390 411 391 +f 391 411 413 +f 391 413 414 +f 391 414 415 +f 391 415 416 +f 391 416 417 +f 391 417 412 +f 392 418 393 +f 392 394 419 +f 392 419 418 +f 393 418 420 +f 393 420 396 +f 394 395 421 +f 394 421 419 +f 395 398 422 +f 395 422 421 +f 396 420 423 +f 396 423 397 +f 397 423 403 +f 398 402 424 +f 398 424 425 +f 398 425 422 +f 401 426 402 +f 402 426 427 +f 402 427 428 +f 402 428 424 +f 403 423 429 +f 403 429 430 +f 403 430 404 +f 404 430 431 +f 404 431 406 +f 404 406 405 +f 406 432 407 +f 406 431 432 +f 407 433 408 +f 407 432 433 +f 408 433 434 +f 408 434 435 +f 408 435 409 +f 409 435 436 +f 409 436 413 +f 409 413 410 +f 410 413 411 +f 412 417 437 +f 412 437 438 +f 412 438 439 +f 412 439 440 +f 412 440 441 +f 412 441 442 +f 412 442 443 +f 413 436 414 +f 414 436 415 +f 415 444 417 +f 415 417 416 +f 415 436 445 +f 415 445 444 +f 417 444 446 +f 417 446 447 +f 417 447 437 +f 418 419 448 +f 418 448 449 +f 418 449 420 +f 419 421 450 +f 419 450 448 +f 420 449 451 +f 420 451 423 +f 421 422 452 +f 421 452 450 +f 422 425 453 +f 422 453 452 +f 423 451 429 +f 424 428 454 +f 424 454 425 +f 425 454 455 +f 425 455 453 +f 427 456 428 +f 428 456 454 +f 429 451 457 +f 429 457 458 +f 429 458 430 +f 430 458 459 +f 430 459 431 +f 431 459 432 +f 432 459 460 +f 432 460 433 +f 433 460 434 +f 434 461 435 +f 434 460 462 +f 434 462 461 +f 435 463 445 +f 435 445 436 +f 435 461 463 +f 437 447 464 +f 437 464 465 +f 437 465 466 +f 437 466 438 +f 438 466 465 +f 438 465 464 +f 438 464 447 +f 438 447 473 +f 438 473 472 +f 438 472 471 +f 438 471 470 +f 438 470 498 +f 438 498 525 +f 438 525 524 +f 438 524 523 +f 438 523 548 +f 438 548 547 +f 438 547 564 +f 438 564 584 +f 438 584 583 +f 438 583 586 +f 438 586 585 +f 438 585 587 +f 438 587 589 +f 438 589 588 +f 438 588 600 +f 438 600 599 +f 438 599 598 +f 438 598 595 +f 438 595 594 +f 438 594 597 +f 438 597 596 +f 438 596 601 +f 438 601 604 +f 438 604 603 +f 438 603 602 +f 438 602 590 +f 438 590 567 +f 438 567 544 +f 438 544 519 +f 438 519 494 +f 438 494 467 +f 438 467 443 +f 438 443 442 +f 438 442 441 +f 438 441 440 +f 438 440 439 +f 444 445 468 +f 444 468 446 +f 445 463 468 +f 446 468 469 +f 446 469 470 +f 446 470 471 +f 446 471 472 +f 446 472 473 +f 446 473 447 +f 448 474 475 +f 448 475 449 +f 448 450 474 +f 449 476 451 +f 449 475 476 +f 450 452 477 +f 450 477 474 +f 451 476 457 +f 452 478 477 +f 452 453 478 +f 453 479 478 +f 453 455 479 +f 454 456 480 +f 454 480 481 +f 454 481 482 +f 454 482 483 +f 454 483 455 +f 455 483 484 +f 455 484 485 +f 455 485 479 +f 457 486 487 +f 457 487 458 +f 457 476 486 +f 458 487 488 +f 458 488 459 +f 459 489 460 +f 459 488 489 +f 460 489 462 +f 461 462 490 +f 461 490 491 +f 461 491 463 +f 462 489 492 +f 462 492 490 +f 463 493 468 +f 463 491 493 +f 467 494 495 +f 468 493 469 +f 469 493 496 +f 469 496 497 +f 469 497 470 +f 470 497 498 +f 474 499 475 +f 474 477 500 +f 474 500 499 +f 475 499 501 +f 475 501 476 +f 476 501 486 +f 477 502 500 +f 477 478 502 +f 478 503 502 +f 478 479 503 +f 479 485 504 +f 479 504 503 +f 482 505 483 +f 483 506 507 +f 483 507 508 +f 483 508 484 +f 483 505 506 +f 484 508 509 +f 484 509 510 +f 484 510 485 +f 485 510 504 +f 486 511 512 +f 486 512 487 +f 486 501 511 +f 487 513 488 +f 487 512 513 +f 488 513 514 +f 488 514 489 +f 489 514 492 +f 490 515 491 +f 490 492 516 +f 490 516 515 +f 491 517 493 +f 491 515 517 +f 492 514 518 +f 492 518 516 +f 493 517 496 +f 494 519 520 +f 494 520 495 +f 495 520 521 +f 496 517 522 +f 496 522 497 +f 497 522 523 +f 497 523 524 +f 497 524 525 +f 497 525 498 +f 499 500 526 +f 499 526 527 +f 499 527 501 +f 500 502 528 +f 500 528 526 +f 501 527 511 +f 502 529 528 +f 502 503 529 +f 503 530 529 +f 503 504 530 +f 504 510 531 +f 504 531 530 +f 507 532 533 +f 507 533 508 +f 508 533 509 +f 509 533 534 +f 509 534 535 +f 509 535 510 +f 510 535 531 +f 511 536 512 +f 511 527 537 +f 511 537 536 +f 512 536 538 +f 512 538 513 +f 513 538 539 +f 513 539 514 +f 514 539 518 +f 515 516 540 +f 515 540 541 +f 515 541 517 +f 516 518 542 +f 516 542 540 +f 517 541 522 +f 518 539 543 +f 518 543 542 +f 519 544 545 +f 519 545 520 +f 520 545 521 +f 521 545 546 +f 522 541 547 +f 522 547 548 +f 522 548 523 +f 526 549 550 +f 526 550 527 +f 526 528 549 +f 527 550 537 +f 528 529 551 +f 528 551 549 +f 529 552 551 +f 529 530 552 +f 530 553 552 +f 530 531 553 +f 531 554 553 +f 531 535 554 +f 532 555 533 +f 533 555 534 +f 534 556 554 +f 534 554 535 +f 534 555 557 +f 534 557 556 +f 536 537 558 +f 536 558 559 +f 536 559 538 +f 537 550 560 +f 537 560 558 +f 538 559 561 +f 538 561 539 +f 539 561 543 +f 540 562 541 +f 540 542 563 +f 540 563 562 +f 541 564 547 +f 541 562 564 +f 542 543 565 +f 542 565 563 +f 543 561 566 +f 543 566 565 +f 544 567 568 +f 544 568 569 +f 544 569 570 +f 544 570 545 +f 545 571 546 +f 545 570 571 +f 546 571 572 +f 549 573 574 +f 549 574 550 +f 549 551 573 +f 550 574 560 +f 551 552 575 +f 551 575 573 +f 552 576 575 +f 552 553 576 +f 553 577 576 +f 553 554 577 +f 554 556 577 +f 555 578 557 +f 556 557 571 +f 556 571 570 +f 556 570 577 +f 557 578 572 +f 557 572 571 +f 558 579 580 +f 558 580 559 +f 558 560 579 +f 559 581 561 +f 559 580 581 +f 560 574 582 +f 560 582 579 +f 561 581 566 +f 562 563 583 +f 562 583 584 +f 562 584 564 +f 563 565 585 +f 563 585 586 +f 563 586 583 +f 565 566 587 +f 565 587 585 +f 566 588 589 +f 566 589 587 +f 566 581 588 +f 567 590 568 +f 568 591 577 +f 568 577 570 +f 568 570 569 +f 568 590 591 +f 573 592 593 +f 573 593 574 +f 573 575 592 +f 574 593 582 +f 575 576 591 +f 575 591 592 +f 576 577 591 +f 579 594 595 +f 579 595 580 +f 579 582 596 +f 579 596 597 +f 579 597 594 +f 580 595 598 +f 580 598 599 +f 580 599 581 +f 581 599 600 +f 581 600 588 +f 582 593 601 +f 582 601 596 +f 590 602 591 +f 591 602 592 +f 592 602 603 +f 592 603 593 +f 593 603 604 +f 593 604 601 + +o geometry_2 +v 0.05462574 -0.05359229 -0.04214202 0.43529412 0.89019608 0.96078431 +v 0.05472477 -0.05315324 -0.04213377 0.43529412 0.89019608 0.96078431 +v 0.05511260 -0.05260947 -0.04210904 0.43529412 0.89019608 0.96078431 +v 0.05564072 -0.05219055 -0.04207605 0.43529412 0.89019608 0.96078431 +v 0.05564072 -0.05499403 -0.04207605 0.43529412 0.89019608 0.96078431 +v 0.05472477 -0.05403134 -0.04213377 0.43529412 0.89019608 0.96078431 +v 0.04937756 -0.06719075 -0.04208430 0.43529412 0.89019608 0.96078431 +v 0.04936106 -0.02604898 -0.04208430 0.43529412 0.89019608 0.96078431 +v 0.04939407 -0.02604898 -0.04208430 0.43529412 0.89019608 0.96078431 +v 0.05953560 -0.02604898 -0.04158960 0.43529412 0.89019608 0.96078431 +v 0.05814104 -0.05116745 -0.04180397 0.43529412 0.89019608 0.96078431 +v 0.05496407 -0.05440997 -0.04211728 0.43529412 0.89019608 0.96078431 +v 0.05814104 -0.05601714 -0.04180397 0.43529412 0.89019608 0.96078431 +v 0.05952735 -0.06719075 -0.04158960 0.43529412 0.89019608 0.96078431 +v 0.09456474 -0.06719477 0.00204344 0.43529412 0.89019608 0.96078431 +v 0.03939281 -0.06719075 -0.04013021 0.43529412 0.89019608 0.96078431 +v 0.03938456 -0.02604898 -0.04013021 0.43529412 0.89019608 0.96078431 +v 0.06109520 -0.05079285 -0.04129277 0.43529412 0.89019608 0.96078431 +v 0.06109520 -0.05639173 -0.04129277 0.43529412 0.89019608 0.96078431 +v 0.06927279 -0.02604898 -0.03868732 0.43529412 0.89019608 0.96078431 +v 0.06368629 -0.05116745 -0.04066614 0.43529412 0.89019608 0.96078431 +v 0.06368629 -0.05601714 -0.04066614 0.43529412 0.89019608 0.96078431 +v 0.06928105 -0.06719075 -0.03867908 0.43529412 0.89019608 0.96078431 +v 0.09457299 -0.02604898 0.00204344 0.43529412 0.89019608 0.96078431 +v 0.09449873 -0.02604898 0.00317302 0.43529412 0.89019608 0.96078431 +v 0.09285661 -0.06719075 0.01206947 0.43529412 0.89019608 0.96078431 +v 0.08878844 -0.06719075 0.02139467 0.43529412 0.89019608 0.96078431 +v 0.08260780 -0.06719075 0.02947486 0.43529412 0.89019608 0.96078431 +v 0.07467776 -0.06719075 0.03584832 0.43529412 0.89019608 0.96078431 +v 0.06545218 -0.06719075 0.04013577 0.43529412 0.89019608 0.96078431 +v 0.05546743 -0.06719075 0.04208161 0.43529412 0.89019608 0.96078431 +v 0.04531765 -0.06719075 0.04159515 0.43529412 0.89019608 0.96078431 +v 0.03556395 -0.06719075 0.03868463 0.43529412 0.89019608 0.96078431 +v 0.02680048 -0.06719075 0.03352320 0.43529412 0.89019608 0.96078431 +v 0.01952234 -0.06719075 0.02641593 0.43529412 0.89019608 0.96078431 +v 0.01415038 -0.06719075 0.01777508 0.43529412 0.89019608 0.96078431 +v 0.01101467 -0.06719075 0.00809534 0.43529412 0.89019608 0.96078431 +v 0.01027200 -0.06719075 -0.00203788 0.43529412 0.89019608 0.96078431 +v 0.01198839 -0.06719075 -0.01207216 0.43529412 0.89019608 0.96078431 +v 0.01605656 -0.06719075 -0.02139736 0.43529412 0.89019608 0.96078431 +v 0.02222895 -0.06719075 -0.02947755 0.43529412 0.89019608 0.96078431 +v 0.03016724 -0.06719075 -0.03584276 0.43529412 0.89019608 0.96078431 +v 0.07804452 -0.06719075 -0.03352589 0.43529412 0.89019608 0.96078431 +v 0.08532266 -0.06719075 -0.02641862 0.43529412 0.89019608 0.96078431 +v 0.09069462 -0.06719075 -0.01776952 0.43529412 0.89019608 0.96078431 +v 0.09383033 -0.06719075 -0.00809803 0.43529412 0.89019608 0.96078431 +v 0.03015898 -0.02604898 -0.03584276 0.43529412 0.89019608 0.96078431 +v 0.07804452 -0.02604898 -0.03352589 0.43529412 0.89019608 0.96078431 +v 0.06601331 -0.05359229 -0.03994882 0.43529412 0.89019608 0.96078431 +v 0.06584002 -0.05283100 -0.04000654 0.43529412 0.89019608 0.96078431 +v 0.06541093 -0.05219458 -0.04014670 0.43529412 0.89019608 0.96078431 +v 0.06541093 -0.05499403 -0.04014670 0.43529412 0.89019608 0.96078431 +v 0.06584002 -0.05435358 -0.04000654 0.43529412 0.89019608 0.96078431 +v 0.09383033 -0.02604898 -0.00810627 0.43529412 0.89019608 0.96078431 +v 0.09285661 -0.02604898 0.01206947 0.43529412 0.89019608 0.96078431 +v 0.08879669 -0.02604898 0.02138643 0.43529412 0.89019608 0.96078431 +v 0.08689051 -0.05359229 0.02433817 0.43529412 0.89019608 0.96078431 +v 0.08678324 -0.05435358 0.02448658 0.43529412 0.89019608 0.96078431 +v 0.08651918 -0.05499403 0.02485761 0.43529412 0.89019608 0.96078431 +v 0.08542994 -0.05601714 0.02628401 0.43529412 0.89019608 0.96078431 +v 0.08370529 -0.05639173 0.02832055 0.43529412 0.89019608 0.96078431 +v 0.08261605 -0.02604898 0.02947486 0.43529412 0.89019608 0.96078431 +v 0.08160933 -0.05601714 0.03047252 0.43529412 0.89019608 0.96078431 +v 0.07974441 -0.05499403 0.03215452 0.43529412 0.89019608 0.96078431 +v 0.07934006 -0.05457512 0.03249257 0.43529412 0.89019608 0.96078431 +v 0.07903474 -0.05403134 0.03273992 0.43529412 0.89019608 0.96078431 +v 0.07896048 -0.05359229 0.03279764 0.43529412 0.89019608 0.96078431 +v 0.07467776 -0.02604898 0.03584832 0.43529412 0.89019608 0.96078431 +v 0.05546743 -0.02604898 0.04208986 0.43529412 0.89019608 0.96078431 +v 0.06545218 -0.02604898 0.04013577 0.43529412 0.89019608 0.96078431 +v 0.04531765 -0.02604898 0.04159515 0.43529412 0.89019608 0.96078431 +v 0.03556395 -0.02604898 0.03868463 0.43529412 0.89019608 0.96078431 +v 0.02680873 -0.02604898 0.03353145 0.43529412 0.89019608 0.96078431 +v 0.01953059 -0.02604898 0.02642418 0.43529412 0.89019608 0.96078431 +v 0.01952234 -0.02604898 0.02641593 0.43529412 0.89019608 0.96078431 +v 0.01101467 -0.02604898 0.00811183 0.43529412 0.89019608 0.96078431 +v 0.01415038 -0.02604898 0.01777508 0.43529412 0.89019608 0.96078431 +v 0.01028025 -0.02604898 -0.00202964 0.43529412 0.89019608 0.96078431 +v 0.01028025 -0.02604898 -0.00203788 0.43529412 0.89019608 0.96078431 +v 0.01198839 -0.02604898 -0.01207216 0.43529412 0.89019608 0.96078431 +v 0.01604830 -0.02604898 -0.02138087 0.43529412 0.89019608 0.96078431 +v 0.01605656 -0.02604898 -0.02139736 0.43529412 0.89019608 0.96078431 +v 0.02222895 -0.02604898 -0.02946931 0.43529412 0.89019608 0.96078431 +v 0.02223720 -0.02604898 -0.02947755 0.43529412 0.89019608 0.96078431 +v 0.08531441 -0.02604898 -0.02642687 0.43529412 0.89019608 0.96078431 +v 0.08532266 -0.02604898 -0.02641862 0.43529412 0.89019608 0.96078431 +v 0.09068637 -0.02604898 -0.01778601 0.43529412 0.89019608 0.96078431 +v 0.09069462 -0.02604898 -0.01776952 0.43529412 0.89019608 0.96078431 +v 0.08878019 -0.02604898 0.02141116 0.43529412 0.89019608 0.96078431 +v 0.08678324 -0.05283100 0.02448658 0.43529412 0.89019608 0.96078431 +v 0.08651918 -0.05219458 0.02485761 0.43529412 0.89019608 0.96078431 +v 0.08542994 -0.05116745 0.02628401 0.43529412 0.89019608 0.96078431 +v 0.08370529 -0.05079285 0.02832055 0.43529412 0.89019608 0.96078431 +v 0.08160933 -0.05116745 0.03047252 0.43529412 0.89019608 0.96078431 +v 0.07922454 -0.05277461 0.03259151 0.43529412 0.89019608 0.96078431 +v 0.07974441 -0.05219458 0.03215452 0.43529412 0.89019608 0.96078431 +v 0.07903474 -0.05315324 0.03273992 0.43529412 0.89019608 0.96078431 +f 605 606 607 +f 605 607 608 +f 605 608 609 +f 605 609 610 +f 605 610 611 +f 605 611 612 +f 605 612 613 +f 605 613 606 +f 606 613 607 +f 607 613 614 +f 607 614 608 +f 608 614 615 +f 608 615 617 +f 608 617 609 +f 609 611 616 +f 609 616 610 +f 609 617 618 +f 609 618 611 +f 610 616 611 +f 611 618 619 +f 611 619 620 +f 611 620 612 +f 612 620 621 +f 612 621 651 +f 612 651 688 +f 612 688 687 +f 612 687 686 +f 612 686 685 +f 612 685 684 +f 612 684 683 +f 612 683 682 +f 612 682 680 +f 612 680 681 +f 612 681 679 +f 612 679 678 +f 612 678 677 +f 612 677 676 +f 612 676 675 +f 612 675 673 +f 612 673 674 +f 612 674 672 +f 612 672 666 +f 612 666 693 +f 612 693 660 +f 612 660 659 +f 612 659 629 +f 612 629 628 +f 612 628 658 +f 612 658 692 +f 612 692 691 +f 612 691 690 +f 612 690 689 +f 612 689 652 +f 612 652 624 +f 612 624 614 +f 612 614 613 +f 614 622 623 +f 614 623 618 +f 614 618 617 +f 614 617 615 +f 614 624 625 +f 614 625 622 +f 618 623 626 +f 618 626 627 +f 618 627 619 +f 619 628 629 +f 619 629 630 +f 619 630 631 +f 619 631 632 +f 619 632 633 +f 619 633 634 +f 619 634 635 +f 619 635 636 +f 619 636 637 +f 619 637 638 +f 619 638 639 +f 619 639 640 +f 619 640 641 +f 619 641 642 +f 619 642 643 +f 619 643 644 +f 619 644 645 +f 619 645 646 +f 619 646 620 +f 619 627 647 +f 619 647 648 +f 619 648 649 +f 619 649 650 +f 619 650 628 +f 620 646 651 +f 620 651 621 +f 622 625 626 +f 622 626 623 +f 624 652 647 +f 624 647 627 +f 624 627 653 +f 624 653 654 +f 624 654 655 +f 624 655 625 +f 625 655 656 +f 625 656 626 +f 626 656 627 +f 627 656 657 +f 627 657 653 +f 628 650 658 +f 629 659 630 +f 630 660 631 +f 630 659 660 +f 631 660 661 +f 631 661 662 +f 631 662 663 +f 631 663 664 +f 631 664 632 +f 632 664 665 +f 632 665 666 +f 632 666 667 +f 632 667 668 +f 632 668 669 +f 632 669 633 +f 633 669 670 +f 633 670 671 +f 633 671 672 +f 633 672 674 +f 633 674 634 +f 634 673 635 +f 634 674 673 +f 635 673 636 +f 636 675 676 +f 636 676 637 +f 636 673 675 +f 637 676 677 +f 637 677 638 +f 638 677 678 +f 638 678 639 +f 639 678 679 +f 639 679 681 +f 639 681 640 +f 640 680 641 +f 640 681 680 +f 641 680 642 +f 642 682 683 +f 642 683 684 +f 642 684 643 +f 642 680 682 +f 643 684 685 +f 643 685 644 +f 644 685 686 +f 644 686 645 +f 645 686 687 +f 645 687 688 +f 645 688 651 +f 645 651 646 +f 647 652 689 +f 647 689 648 +f 648 689 690 +f 648 690 691 +f 648 691 649 +f 649 691 692 +f 649 692 658 +f 649 658 650 +f 653 657 654 +f 654 657 656 +f 654 656 655 +f 660 693 661 +f 661 694 695 +f 661 695 663 +f 661 663 662 +f 661 693 694 +f 663 695 696 +f 663 696 664 +f 664 696 697 +f 664 697 665 +f 665 697 666 +f 666 698 667 +f 666 697 696 +f 666 696 693 +f 666 672 699 +f 666 699 700 +f 666 700 698 +f 667 698 700 +f 667 700 668 +f 668 700 699 +f 668 699 669 +f 669 699 670 +f 670 699 701 +f 670 701 671 +f 671 701 672 +f 672 701 699 +f 693 695 694 +f 693 696 695 + +o geometry_3 +v 0.09485360 -0.02599329 -0.00241876 0.38039216 0.78823529 0.52549020 +v 0.09383637 -0.02604495 -0.00809177 0.38039216 0.78823529 0.52549020 +v 0.09352679 -0.02599329 -0.01079232 0.38039216 0.78823529 0.52549020 +v 0.09353563 -0.00784521 -0.00738851 0.38039216 0.78823529 0.52549020 +v 0.09373023 -0.00784521 -0.00608512 0.38039216 0.78823529 0.52549020 +v 0.09423442 -0.00784521 -0.00204369 0.38039216 0.78823529 0.52549020 +v 0.09424327 -0.00784521 -0.00194992 0.38039216 0.78823529 0.52549020 +v 0.09455285 -0.02599329 0.00555159 0.38039216 0.78823529 0.52549020 +v 0.09457054 -0.02604495 0.00204463 0.38039216 0.78823529 0.52549020 +v 0.09457054 -0.02604495 0.00202588 0.38039216 0.78823529 0.52549020 +v 0.09068740 -0.02604495 -0.01777809 0.38039216 0.78823529 0.52549020 +v 0.09295183 -0.00784521 -0.01014531 0.38039216 0.78823529 0.52549020 +v 0.09056356 -0.02599329 -0.01873453 0.38039216 0.78823529 0.52549020 +v 0.09090853 -0.00784521 -0.01599648 0.38039216 0.78823529 0.52549020 +v 0.09153656 -0.00784521 -0.01428051 0.38039216 0.78823529 0.52549020 +v 0.09177539 -0.00784521 -0.01360538 0.38039216 0.78823529 0.52549020 +v 0.09399559 -0.00784521 0.00435135 0.38039216 0.78823529 0.52549020 +v 0.09449978 -0.02604495 0.00317924 0.38039216 0.78823529 0.52549020 +v 0.09391598 -0.00784521 0.00632987 0.38039216 0.78823529 0.52549020 +v 0.09383637 -0.00928466 0.00686435 0.38039216 0.78823529 0.52549020 +v 0.09262454 -0.02599329 0.01377511 0.38039216 0.78823529 0.52549020 +v 0.09285453 -0.02604495 0.01206852 0.38039216 0.78823529 0.52549020 +v 0.08532706 -0.02604495 -0.02641420 0.38039216 0.78823529 0.52549020 +v 0.09006822 -0.02599329 -0.01953157 0.38039216 0.78823529 0.52549020 +v 0.08662734 -0.00784521 -0.02370428 0.38039216 0.78823529 0.52549020 +v 0.08863526 -0.00784521 -0.02043175 0.38039216 0.78823529 0.52549020 +v 0.09005053 -0.00784521 -0.01798438 0.38039216 0.78823529 0.52549020 +v 0.09388944 -0.00784521 0.00644239 0.38039216 0.78823529 0.52549020 +v 0.09194345 -0.00784521 0.01447838 0.38039216 0.78823529 0.52549020 +v 0.09174885 -0.00928466 0.01504099 0.38039216 0.78823529 0.52549020 +v 0.08911291 -0.02599329 0.02143602 0.38039216 0.78823529 0.52549020 +v 0.08879448 -0.02604495 0.02137976 0.38039216 0.78823529 0.52549020 +v 0.08531822 -0.02604495 -0.02642357 0.38039216 0.78823529 0.52549020 +v 0.08108125 -0.02599329 -0.03125267 0.38039216 0.78823529 0.52549020 +v 0.08608777 -0.02599329 -0.02592660 0.38039216 0.78823529 0.52549020 +v 0.08564550 -0.00784521 -0.02512019 0.38039216 0.78823529 0.52549020 +v 0.09175769 -0.00784521 0.01489096 0.38039216 0.78823529 0.52549020 +v 0.08840528 -0.00784521 0.02208303 0.38039216 0.78823529 0.52549020 +v 0.08878563 -0.02604495 0.02139851 0.38039216 0.78823529 0.52549020 +v 0.08807799 -0.00928466 0.02262689 0.38039216 0.78823529 0.52549020 +v 0.08630890 -0.00784521 0.02525241 0.38039216 0.78823529 0.52549020 +v 0.08608777 -0.00784521 0.02558061 0.38039216 0.78823529 0.52549020 +v 0.08415946 -0.02599329 0.02826239 0.38039216 0.78823529 0.52549020 +v 0.07803842 -0.02604495 -0.03353125 0.38039216 0.78823529 0.52549020 +v 0.08036477 -0.02599329 -0.03201219 0.38039216 0.78823529 0.52549020 +v 0.08269997 -0.00784521 -0.02837397 0.38039216 0.78823529 0.52549020 +v 0.08443368 -0.00784521 -0.02651734 0.38039216 0.78823529 0.52549020 +v 0.08261151 -0.02604495 0.02947201 0.38039216 0.78823529 0.52549020 +v 0.08581356 -0.00784521 0.02592755 0.38039216 0.78823529 0.52549020 +v 0.08396486 -0.00784521 0.02823426 0.38039216 0.78823529 0.52549020 +v 0.08369066 -0.00784521 0.02855308 0.38039216 0.78823529 0.52549020 +v 0.08183312 -0.02599329 0.03067225 0.38039216 0.78823529 0.52549020 +v 0.08544205 -0.00784521 0.02639639 0.38039216 0.78823529 0.52549020 +v 0.07348302 -0.02599329 -0.03690692 0.38039216 0.78823529 0.52549020 +v 0.07779959 -0.02599329 -0.03384069 0.38039216 0.78823529 0.52549020 +v 0.06927259 -0.02604495 -0.03867916 0.38039216 0.78823529 0.52549020 +v 0.07799420 -0.00784521 -0.03263107 0.38039216 0.78823529 0.52549020 +v 0.07976328 -0.00784521 -0.03136519 0.38039216 0.78823529 0.52549020 +v 0.07990481 -0.00784521 -0.03126204 0.38039216 0.78823529 0.52549020 +v 0.07307613 -0.00784521 -0.03613802 0.38039216 0.78823529 0.52549020 +v 0.07796766 -0.02599329 0.03395416 0.38039216 0.78823529 0.52549020 +v 0.07467715 -0.02604495 0.03584829 0.38039216 0.78823529 0.52549020 +v 0.08166505 -0.00784521 0.03055973 0.38039216 0.78823529 0.52549020 +v 0.08017017 -0.00928466 0.03207878 0.38039216 0.78823529 0.52549020 +v 0.07074978 -0.00784521 -0.03734764 0.38039216 0.78823529 0.52549020 +v 0.06567250 -0.02599329 -0.04037637 0.38039216 0.78823529 0.52549020 +v 0.05953376 -0.02604495 -0.04159537 0.38039216 0.78823529 0.52549020 +v 0.07791458 -0.00784521 0.03389790 0.38039216 0.78823529 0.52549020 +v 0.07689736 -0.00784521 0.03469493 0.38039216 0.78823529 0.52549020 +v 0.07619857 -0.00928466 0.03521066 0.38039216 0.78823529 0.52549020 +v 0.07413758 -0.02599329 0.03653280 0.38039216 0.78823529 0.52549020 +v 0.07927678 -0.00784521 0.03281955 0.38039216 0.78823529 0.52549020 +v 0.07001561 -0.02599329 0.03868011 0.38039216 0.78823529 0.52549020 +v 0.06545136 -0.02604495 0.04013352 0.38039216 0.78823529 0.52549020 +v 0.06878609 -0.00784521 -0.03821969 0.38039216 0.78823529 0.52549020 +v 0.05757892 -0.02599329 -0.04217673 0.38039216 0.78823529 0.52549020 +v 0.02518693 -0.01399136 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.02686756 -0.01257686 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.02893740 -0.01076330 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.02981309 -0.00982089 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.03163525 -0.00784521 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.06625630 -0.00784521 -0.03926990 0.38039216 0.78823529 0.52549020 +v 0.04939689 -0.02604495 -0.04208296 0.38039216 0.78823529 0.52549020 +v 0.05742855 -0.02599329 -0.04218611 0.38039216 0.78823529 0.52549020 +v 0.07243926 -0.00784521 0.03747986 0.38039216 0.78823529 0.52549020 +v 0.07205890 -0.00928466 0.03775180 0.38039216 0.78823529 0.52549020 +v 0.06895416 -0.00784521 0.03922396 0.38039216 0.78823529 0.52549020 +v 0.06764503 -0.00928466 0.03980533 0.38039216 0.78823529 0.52549020 +v 0.06687548 -0.02599329 0.03988972 0.38039216 0.78823529 0.52549020 +v 0.07160779 -0.00784521 0.03798621 0.38039216 0.78823529 0.52549020 +v 0.06528330 -0.02599329 0.04049922 0.38039216 0.78823529 0.52549020 +v 0.06081635 -0.02599329 0.04165258 0.38039216 0.78823529 0.52549020 +v 0.05548255 -0.02604495 0.04208391 0.38039216 0.78823529 0.52549020 +v 0.00448860 -0.02424920 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.00731030 -0.02350276 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.01046812 -0.02261736 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.01696952 -0.01947480 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.01789829 -0.01902230 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.01832287 -0.01874795 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.02155145 -0.01664579 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.00448860 -0.00784521 -0.05302578 0.38039216 0.78823529 0.52549020 +v 0.04936151 -0.02604495 -0.04208296 0.38039216 0.78823529 0.52549020 +v 0.06744159 -0.00784521 0.03988035 0.38039216 0.78823529 0.52549020 +v 0.06712315 -0.00784521 0.03999287 0.38039216 0.78823529 0.52549020 +v 0.06712315 -0.00928466 0.03998349 0.38039216 0.78823529 0.52549020 +v 0.06318693 -0.00928466 0.04128688 0.38039216 0.78823529 0.52549020 +v 0.06302771 -0.00928466 0.04133376 0.38039216 0.78823529 0.52549020 +v 0.06155052 -0.00784521 0.04166195 0.38039216 0.78823529 0.52549020 +v 0.05956030 -0.00784521 0.04207454 0.38039216 0.78823529 0.52549020 +v 0.05826002 -0.00928466 0.04232771 0.38039216 0.78823529 0.52549020 +v 0.05983451 -0.02599329 0.04180260 0.38039216 0.78823529 0.52549020 +v 0.05546486 -0.02604495 0.04208391 0.38039216 0.78823529 0.52549020 +v 0.05620788 -0.02599329 0.04232771 0.38039216 0.78823529 0.52549020 +v 0.05115714 -0.02599329 0.04247774 0.38039216 0.78823529 0.52549020 +v 0.00448860 -0.02419220 -0.05295077 0.38039216 0.78823529 0.52549020 +v 0.03939270 -0.02604495 -0.04013257 0.38039216 0.78823529 0.52549020 +v 0.03016691 -0.02604495 -0.03584734 0.38039216 0.78823529 0.52549020 +v 0.02223255 -0.02604495 -0.02948044 0.38039216 0.78823529 0.52549020 +v 0.02222371 -0.02604495 -0.02947106 0.38039216 0.78823529 0.52549020 +v 0.01605844 -0.02604495 -0.02139757 0.38039216 0.78823529 0.52549020 +v 0.01604959 -0.02604495 -0.02137881 0.38039216 0.78823529 0.52549020 +v 0.01198953 -0.02604495 -0.01206757 0.38039216 0.78823529 0.52549020 +v 0.01037967 -0.02599329 -0.00616014 0.38039216 0.78823529 0.52549020 +v 0.01027352 -0.02604495 -0.00205306 0.38039216 0.78823529 0.52549020 +v 0.00994624 -0.02599329 -0.00113413 0.38039216 0.78823529 0.52549020 +v 0.00995509 -0.02599329 -0.00064653 0.38039216 0.78823529 0.52549020 +v 0.01007008 -0.02599329 0.00351681 0.38039216 0.78823529 0.52549020 +v 0.00448860 -0.00784521 -0.03587547 0.38039216 0.78823529 0.52549020 +v 0.06308963 -0.00784521 0.04132439 0.38039216 0.78823529 0.52549020 +v 0.05858730 -0.00784521 0.04227145 0.38039216 0.78823529 0.52549020 +v 0.05706589 -0.00784521 0.04245899 0.38039216 0.78823529 0.52549020 +v 0.04531915 -0.02604495 0.04159631 0.38039216 0.78823529 0.52549020 +v 0.05501375 -0.00784521 0.04264652 0.38039216 0.78823529 0.52549020 +v 0.05341272 -0.00928466 0.04276842 0.38039216 0.78823529 0.52549020 +v 0.04855658 -0.00928466 0.04263715 0.38039216 0.78823529 0.52549020 +v 0.04656635 -0.02599329 0.04209329 0.38039216 0.78823529 0.52549020 +v 0.00448860 -0.02368269 -0.05229438 0.38039216 0.78823529 0.52549020 +v 0.01027352 -0.02604495 -0.00203431 0.38039216 0.78823529 0.52549020 +v 0.01100769 -0.02604495 0.00809272 0.38039216 0.78823529 0.52549020 +v 0.01049466 -0.02599329 0.00659242 0.38039216 0.78823529 0.52549020 +v 0.00999047 -0.00928466 0.00458577 0.38039216 0.78823529 0.52549020 +v 0.00448860 -0.01287615 -0.04067643 0.38039216 0.78823529 0.52549020 +v 0.00448860 -0.01401274 -0.04181104 0.38039216 0.78823529 0.52549020 +v 0.00448860 -0.01829723 -0.04620879 0.38039216 0.78823529 0.52549020 +v 0.00448860 -0.02099798 -0.04916251 0.38039216 0.78823529 0.52549020 +v 0.00448860 -0.02312686 -0.05162863 0.38039216 0.78823529 0.52549020 +v 0.00997278 -0.00784521 0.00434197 0.38039216 0.78823529 0.52549020 +v 0.04200211 -0.02599329 0.04119311 0.38039216 0.78823529 0.52549020 +v 0.03558032 -0.02604495 0.03868948 0.38039216 0.78823529 0.52549020 +v 0.05400537 -0.00784521 0.04273092 0.38039216 0.78823529 0.52549020 +v 0.05346579 -0.00784521 0.04272154 0.38039216 0.78823529 0.52549020 +v 0.05093600 -0.00784521 0.04265590 0.38039216 0.78823529 0.52549020 +v 0.04791971 -0.00784521 0.04257151 0.38039216 0.78823529 0.52549020 +v 0.04528376 -0.00928466 0.04217768 0.38039216 0.78823529 0.52549020 +v 0.04373581 -0.00928466 0.04195264 0.38039216 0.78823529 0.52549020 +v 0.01415667 -0.02604495 0.01777904 0.38039216 0.78823529 0.52549020 +v 0.01196300 -0.02599329 0.01299683 0.38039216 0.78823529 0.52549020 +v 0.01070695 -0.02599329 0.00809272 0.38039216 0.78823529 0.52549020 +v 0.01074233 -0.00928466 0.00939611 0.38039216 0.78823529 0.52549020 +v 0.01025583 -0.00784521 0.00617046 0.38039216 0.78823529 0.52549020 +v 0.03903004 -0.00928466 0.04072427 0.38039216 0.78823529 0.52549020 +v 0.03717250 -0.02599329 0.03966468 0.38039216 0.78823529 0.52549020 +v 0.04267436 -0.00928466 0.04168071 0.38039216 0.78823529 0.52549020 +v 0.03296207 -0.02599329 0.03777993 0.38039216 0.78823529 0.52549020 +v 0.02895509 -0.02599329 0.03542633 0.38039216 0.78823529 0.52549020 +v 0.02679680 -0.02604495 0.03352282 0.38039216 0.78823529 0.52549020 +v 0.04579680 -0.00784521 0.04227145 0.38039216 0.78823529 0.52549020 +v 0.04337315 -0.00784521 0.04187762 0.38039216 0.78823529 0.52549020 +v 0.04267436 -0.00784521 0.04169946 0.38039216 0.78823529 0.52549020 +v 0.01362594 -0.02599329 0.01733833 0.38039216 0.78823529 0.52549020 +v 0.01951700 -0.02604495 0.02641514 0.38039216 0.78823529 0.52549020 +v 0.01574000 -0.02599329 0.02144540 0.38039216 0.78823529 0.52549020 +v 0.01514736 -0.02599329 0.02030142 0.38039216 0.78823529 0.52549020 +v 0.01086616 -0.00784521 0.00993059 0.38039216 0.78823529 0.52549020 +v 0.01202492 -0.00928466 0.01405642 0.38039216 0.78823529 0.52549020 +v 0.01055657 -0.00784521 0.00807397 0.38039216 0.78823529 0.52549020 +v 0.03820741 -0.00928466 0.04040545 0.38039216 0.78823529 0.52549020 +v 0.04025956 -0.00784521 0.04106183 0.38039216 0.78823529 0.52549020 +v 0.03891505 -0.00784521 0.04068676 0.38039216 0.78823529 0.52549020 +v 0.03711942 -0.00784521 0.03999287 0.38039216 0.78823529 0.52549020 +v 0.03449233 -0.00928466 0.03896141 0.38039216 0.78823529 0.52549020 +v 0.03019345 -0.00928466 0.03668283 0.38039216 0.78823529 0.52549020 +v 0.02617762 -0.00928466 0.03393541 0.38039216 0.78823529 0.52549020 +v 0.02490387 -0.02599329 0.03237884 0.38039216 0.78823529 0.52549020 +v 0.02415201 -0.02599329 0.03166620 0.38039216 0.78823529 0.52549020 +v 0.02156030 -0.02599329 0.02920945 0.38039216 0.78823529 0.52549020 +v 0.01952585 -0.02604495 0.02642453 0.38039216 0.78823529 0.52549020 +v 0.01436896 -0.00928466 0.01962628 0.38039216 0.78823529 0.52549020 +v 0.01426281 -0.00928466 0.01938249 0.38039216 0.78823529 0.52549020 +v 0.01854400 -0.02599329 0.02565562 0.38039216 0.78823529 0.52549020 +v 0.01537734 -0.00784521 0.02130475 0.38039216 0.78823529 0.52549020 +v 0.01805751 -0.00784521 0.02550559 0.38039216 0.78823529 0.52549020 +v 0.01641225 -0.00784521 0.02292695 0.38039216 0.78823529 0.52549020 +v 0.01134382 -0.00784521 0.01163718 0.38039216 0.78823529 0.52549020 +v 0.01264410 -0.00784521 0.01557547 0.38039216 0.78823529 0.52549020 +v 0.01216644 -0.00784521 0.01443149 0.38039216 0.78823529 0.52549020 +v 0.03458963 -0.00784521 0.03900829 0.38039216 0.78823529 0.52549020 +v 0.03141412 -0.00784521 0.03734859 0.38039216 0.78823529 0.52549020 +v 0.03047650 -0.00784521 0.03685161 0.38039216 0.78823529 0.52549020 +v 0.02763712 -0.00784521 0.03495749 0.38039216 0.78823529 0.52549020 +v 0.02661104 -0.00784521 0.03424484 0.38039216 0.78823529 0.52549020 +v 0.02524000 -0.00784521 0.03315712 0.38039216 0.78823529 0.52549020 +v 0.02416970 -0.00784521 0.03227570 0.38039216 0.78823529 0.52549020 +v 0.02409894 -0.00928466 0.03221006 0.38039216 0.78823529 0.52549020 +v 0.02144531 -0.00784521 0.02947201 0.38039216 0.78823529 0.52549020 +v 0.01966737 -0.00784521 0.02760601 0.38039216 0.78823529 0.52549020 +v 0.01889782 -0.00928466 0.02671521 0.38039216 0.78823529 0.52549020 +v 0.01433358 -0.00784521 0.01957002 0.38039216 0.78823529 0.52549020 +v 0.01385592 -0.00784521 0.01845417 0.38039216 0.78823529 0.52549020 +v 0.01883590 -0.00784521 0.02663081 0.38039216 0.78823529 0.52549020 +f 702 703 704 +f 702 704 705 +f 702 705 706 +f 702 706 707 +f 702 707 708 +f 702 708 709 +f 702 709 710 +f 702 710 711 +f 702 711 703 +f 703 711 710 +f 703 710 719 +f 703 719 723 +f 703 723 733 +f 703 733 740 +f 703 740 749 +f 703 749 763 +f 703 763 775 +f 703 775 794 +f 703 794 813 +f 703 813 833 +f 703 833 850 +f 703 850 867 +f 703 867 888 +f 703 888 872 +f 703 872 857 +f 703 857 840 +f 703 840 839 +f 703 839 825 +f 703 825 823 +f 703 823 822 +f 703 822 821 +f 703 821 820 +f 703 820 819 +f 703 819 818 +f 703 818 817 +f 703 817 803 +f 703 803 784 +f 703 784 768 +f 703 768 757 +f 703 757 745 +f 703 745 734 +f 703 734 724 +f 703 724 712 +f 703 712 704 +f 704 713 705 +f 704 712 714 +f 704 714 715 +f 704 715 716 +f 704 716 717 +f 704 717 713 +f 705 713 717 +f 705 717 716 +f 705 716 715 +f 705 715 728 +f 705 728 727 +f 705 727 726 +f 705 726 737 +f 705 737 748 +f 705 748 747 +f 705 747 760 +f 705 760 759 +f 705 759 758 +f 705 758 761 +f 705 761 766 +f 705 766 776 +f 705 776 783 +f 705 783 782 +f 705 782 802 +f 705 802 829 +f 705 829 848 +f 705 848 861 +f 705 861 877 +f 705 877 875 +f 705 875 895 +f 705 895 897 +f 705 897 896 +f 705 896 910 +f 705 910 909 +f 705 909 892 +f 705 892 894 +f 705 894 893 +f 705 893 911 +f 705 911 907 +f 705 907 906 +f 705 906 904 +f 705 904 903 +f 705 903 902 +f 705 902 901 +f 705 901 900 +f 705 900 899 +f 705 899 898 +f 705 898 881 +f 705 881 880 +f 705 880 879 +f 705 879 870 +f 705 870 869 +f 705 869 868 +f 705 868 854 +f 705 854 853 +f 705 853 852 +f 705 852 851 +f 705 851 834 +f 705 834 832 +f 705 832 831 +f 705 831 810 +f 705 810 809 +f 705 809 830 +f 705 830 805 +f 705 805 804 +f 705 804 788 +f 705 788 791 +f 705 791 786 +f 705 786 770 +f 705 770 769 +f 705 769 773 +f 705 773 764 +f 705 764 752 +f 705 752 751 +f 705 751 754 +f 705 754 750 +f 705 750 743 +f 705 743 742 +f 705 742 739 +f 705 739 738 +f 705 738 730 +f 705 730 729 +f 705 729 720 +f 705 720 718 +f 705 718 708 +f 705 708 707 +f 705 707 706 +f 708 718 709 +f 709 719 710 +f 709 718 720 +f 709 720 721 +f 709 721 722 +f 709 722 723 +f 709 723 719 +f 712 724 714 +f 714 724 725 +f 714 725 726 +f 714 726 727 +f 714 727 728 +f 714 728 715 +f 720 729 721 +f 721 730 722 +f 721 729 730 +f 722 730 731 +f 722 731 732 +f 722 732 733 +f 722 733 723 +f 724 734 746 +f 724 746 735 +f 724 735 736 +f 724 736 725 +f 725 736 726 +f 726 736 737 +f 730 738 731 +f 731 738 739 +f 731 739 732 +f 732 740 733 +f 732 739 741 +f 732 741 742 +f 732 742 743 +f 732 743 744 +f 732 744 740 +f 734 745 746 +f 735 746 747 +f 735 747 736 +f 736 748 737 +f 736 747 748 +f 739 742 741 +f 740 744 749 +f 743 750 744 +f 744 751 752 +f 744 752 753 +f 744 753 749 +f 744 750 754 +f 744 754 751 +f 745 755 756 +f 745 756 746 +f 745 757 755 +f 746 758 759 +f 746 759 760 +f 746 760 747 +f 746 756 761 +f 746 761 758 +f 749 753 762 +f 749 762 763 +f 752 764 765 +f 752 765 753 +f 753 765 762 +f 755 766 761 +f 755 761 756 +f 755 757 767 +f 755 767 766 +f 757 768 767 +f 762 769 770 +f 762 770 771 +f 762 771 772 +f 762 772 763 +f 762 765 773 +f 762 773 769 +f 763 772 774 +f 763 774 775 +f 764 773 765 +f 766 767 776 +f 767 768 777 +f 767 777 778 +f 767 778 779 +f 767 779 780 +f 767 780 781 +f 767 781 782 +f 767 782 783 +f 767 783 776 +f 768 784 785 +f 768 785 777 +f 770 786 771 +f 771 786 787 +f 771 787 772 +f 772 787 774 +f 774 788 789 +f 774 789 790 +f 774 790 775 +f 774 787 791 +f 774 791 788 +f 775 790 792 +f 775 792 793 +f 775 793 794 +f 777 785 795 +f 777 795 796 +f 777 796 797 +f 777 797 798 +f 777 798 799 +f 777 799 800 +f 777 800 801 +f 777 801 778 +f 778 801 800 +f 778 800 799 +f 778 799 798 +f 778 798 797 +f 778 797 796 +f 778 796 795 +f 778 795 802 +f 778 802 782 +f 778 782 781 +f 778 781 780 +f 778 780 779 +f 784 803 795 +f 784 795 785 +f 786 791 787 +f 788 804 789 +f 789 804 805 +f 789 805 806 +f 789 806 792 +f 789 792 790 +f 792 806 805 +f 792 805 807 +f 792 807 808 +f 792 808 793 +f 793 809 810 +f 793 810 811 +f 793 811 812 +f 793 812 794 +f 793 808 809 +f 794 812 814 +f 794 814 815 +f 794 815 813 +f 795 816 838 +f 795 838 847 +f 795 847 846 +f 795 846 845 +f 795 845 844 +f 795 844 843 +f 795 843 829 +f 795 829 802 +f 795 803 817 +f 795 817 818 +f 795 818 819 +f 795 819 820 +f 795 820 821 +f 795 821 822 +f 795 822 823 +f 795 823 824 +f 795 824 825 +f 795 825 826 +f 795 826 827 +f 795 827 828 +f 795 828 816 +f 805 830 807 +f 807 830 808 +f 808 830 809 +f 810 831 811 +f 811 814 812 +f 811 831 832 +f 811 832 814 +f 813 815 833 +f 814 832 834 +f 814 834 835 +f 814 835 815 +f 815 835 836 +f 815 836 837 +f 815 837 833 +f 816 828 838 +f 823 825 824 +f 825 839 826 +f 826 839 827 +f 827 839 828 +f 828 839 840 +f 828 840 841 +f 828 841 842 +f 828 842 829 +f 828 829 843 +f 828 843 844 +f 828 844 845 +f 828 845 846 +f 828 846 847 +f 828 847 838 +f 829 842 848 +f 833 849 850 +f 833 837 849 +f 834 851 835 +f 835 851 852 +f 835 852 853 +f 835 853 836 +f 836 853 854 +f 836 854 837 +f 837 854 855 +f 837 855 856 +f 837 856 849 +f 840 857 858 +f 840 858 859 +f 840 859 841 +f 841 859 842 +f 842 859 860 +f 842 860 861 +f 842 861 848 +f 849 862 863 +f 849 863 850 +f 849 856 864 +f 849 864 862 +f 850 863 865 +f 850 865 866 +f 850 866 867 +f 854 868 855 +f 855 868 856 +f 856 868 869 +f 856 869 870 +f 856 870 864 +f 857 871 858 +f 857 872 873 +f 857 873 874 +f 857 874 871 +f 858 875 860 +f 858 860 859 +f 858 871 876 +f 858 876 875 +f 860 875 877 +f 860 877 861 +f 862 878 863 +f 862 864 870 +f 862 870 879 +f 862 879 880 +f 862 880 881 +f 862 881 878 +f 863 882 865 +f 863 878 882 +f 865 883 866 +f 865 882 883 +f 866 883 884 +f 866 884 885 +f 866 885 867 +f 867 885 886 +f 867 886 887 +f 867 887 888 +f 871 874 889 +f 871 889 890 +f 871 890 876 +f 872 891 873 +f 872 888 887 +f 872 887 891 +f 873 892 889 +f 873 889 874 +f 873 891 893 +f 873 893 894 +f 873 894 892 +f 875 876 895 +f 876 890 896 +f 876 896 897 +f 876 897 895 +f 878 881 882 +f 881 898 882 +f 882 898 899 +f 882 899 900 +f 882 900 883 +f 883 900 901 +f 883 901 884 +f 884 901 902 +f 884 902 903 +f 884 903 904 +f 884 904 905 +f 884 905 885 +f 885 905 886 +f 886 905 887 +f 887 905 906 +f 887 906 907 +f 887 907 908 +f 887 908 891 +f 889 892 909 +f 889 909 890 +f 890 909 910 +f 890 910 896 +f 891 908 893 +f 893 908 911 +f 904 906 905 +f 907 911 908 + +o geometry_4 +v 0.09425170 -0.00784521 -0.00194738 0.56470588 0.92549020 0.07058824 +v 0.09373329 -0.00784521 -0.00608127 0.56470588 0.92549020 0.07058824 +v 0.09377723 -0.00715989 -0.00620313 0.56470588 0.92549020 0.07058824 +v 0.09424291 -0.00745360 -0.00204112 0.56470588 0.92549020 0.07058824 +v 0.09424291 0.00113171 -0.00204112 0.56470588 0.92549020 0.07058824 +v 0.09391781 0.00131246 0.00632978 0.56470588 0.92549020 0.07058824 +v 0.09391781 -0.00784521 0.00632978 0.56470588 0.92549020 0.07058824 +v 0.09353120 -0.00784521 -0.00739361 0.56470588 0.92549020 0.07058824 +v 0.09377723 0.00102628 -0.00621250 0.56470588 0.92549020 0.07058824 +v 0.09401446 0.01019147 -0.00205986 0.56470588 0.92549020 0.07058824 +v 0.09404961 0.01068099 0.00213964 0.56470588 0.92549020 0.07058824 +v 0.09367179 0.01113284 0.00632041 0.56470588 0.92549020 0.07058824 +v 0.09288979 0.01153952 0.01044493 0.56470588 0.92549020 0.07058824 +v 0.09194084 0.00146307 0.01448508 0.56470588 0.92549020 0.07058824 +v 0.09194963 -0.00784521 0.01448508 0.56470588 0.92549020 0.07058824 +v 0.09389145 -0.00784521 0.00644227 0.56470588 0.92549020 0.07058824 +v 0.09295129 -0.00784521 -0.01014017 0.56470588 0.92549020 0.07058824 +v 0.09290736 0.00091331 -0.01030890 0.56470588 0.92549020 0.07058824 +v 0.09355756 0.00965678 -0.00622188 0.56470588 0.92549020 0.07058824 +v 0.09304795 0.01962025 -0.00213486 0.56470588 0.92549020 0.07058824 +v 0.09305673 0.02053150 0.00206465 0.56470588 0.92549020 0.07058824 +v 0.09265255 0.02136744 0.00623604 0.56470588 0.92549020 0.07058824 +v 0.09185298 0.02212054 0.01035118 0.56470588 0.92549020 0.07058824 +v 0.09065801 0.02279079 0.01435384 0.56470588 0.92549020 0.07058824 +v 0.09169482 0.01190100 0.01446633 0.56470588 0.92549020 0.07058824 +v 0.09011325 0.01221731 0.01834712 0.56470588 0.92549020 0.07058824 +v 0.08839988 0.00158357 0.02207794 0.56470588 0.92549020 0.07058824 +v 0.08840866 -0.00784521 0.02207794 0.56470588 0.92549020 0.07058824 +v 0.09178268 -0.00784521 -0.01359914 0.56470588 0.92549020 0.07058824 +v 0.09162453 -0.00651976 -0.01431156 0.56470588 0.92549020 0.07058824 +v 0.09290736 -0.00685112 -0.01030890 0.56470588 0.92549020 0.07058824 +v 0.09162453 0.00079282 -0.01431156 0.56470588 0.92549020 0.07058824 +v 0.09143122 0.00848194 -0.01433030 0.56470588 0.92549020 0.07058824 +v 0.09269648 0.00908442 -0.01032765 0.56470588 0.92549020 0.07058824 +v 0.09263498 0.01863370 -0.00630624 0.56470588 0.92549020 0.07058824 +v 0.09105340 0.02919212 -0.00235046 0.56470588 0.92549020 0.07058824 +v 0.09099190 0.03052511 0.00183968 0.56470588 0.92549020 0.07058824 +v 0.09054378 0.03173006 0.00600169 0.56470588 0.92549020 0.07058824 +v 0.08970028 0.03282205 0.01007934 0.56470588 0.92549020 0.07058824 +v 0.08848774 0.03378602 0.01404450 0.56470588 0.92549020 0.07058824 +v 0.08690617 0.03461442 0.01785968 0.56470588 0.92549020 0.07058824 +v 0.08907644 0.02337821 0.01820652 0.56470588 0.92549020 0.07058824 +v 0.08712583 0.02386772 0.02189046 0.56470588 0.92549020 0.07058824 +v 0.08816264 0.01248842 0.02204982 0.56470588 0.92549020 0.07058824 +v 0.08608902 0.00162123 0.02558378 0.56470588 0.92549020 0.07058824 +v 0.08630868 -0.00784521 0.02525569 0.56470588 0.92549020 0.07058824 +v 0.09153666 -0.00784521 -0.01427406 0.56470588 0.92549020 0.07058824 +v 0.09090403 -0.00784521 -0.01599886 0.56470588 0.92549020 0.07058824 +v 0.08996388 -0.00617333 -0.01816423 0.56470588 0.92549020 0.07058824 +v 0.08995509 0.00066479 -0.01816423 0.56470588 0.92549020 0.07058824 +v 0.08977936 0.00784181 -0.01819235 0.56470588 0.92549020 0.07058824 +v 0.09060529 0.01644971 -0.01444279 0.56470588 0.92549020 0.07058824 +v 0.08900615 0.01525982 -0.01832359 0.56470588 0.92549020 0.07058824 +v 0.09181783 0.01757936 -0.01042139 0.56470588 0.92549020 0.07058824 +v 0.09071951 0.02774617 -0.00653122 0.56470588 0.92549020 0.07058824 +v 0.08963877 0.03387639 -0.00254731 0.56470588 0.92549020 0.07058824 +v 0.08904129 0.03674569 0.00578609 0.56470588 0.92549020 0.07058824 +v 0.08695010 0.03902757 0.01378203 0.56470588 0.92549020 0.07058824 +v 0.08344428 0.04069945 0.02114055 0.56470588 0.92549020 0.07058824 +v 0.08497313 0.03531480 0.02147801 0.56470588 0.92549020 0.07058824 +v 0.08270621 0.03586456 0.02488073 0.56470588 0.92549020 0.07058824 +v 0.08483255 0.02426686 0.02534943 0.56470588 0.92549020 0.07058824 +v 0.08584300 0.01269929 0.02554628 0.56470588 0.92549020 0.07058824 +v 0.08608902 -0.00784521 0.02558378 0.56470588 0.92549020 0.07058824 +v 0.08381331 0.01075630 0.02820847 0.56470588 0.92549020 0.07058824 +v 0.08392754 0.00165135 0.02822722 0.56470588 0.92549020 0.07058824 +v 0.08396268 -0.00136104 0.02823660 0.56470588 0.92549020 0.07058824 +v 0.09004295 -0.00784521 -0.01798613 0.56470588 0.92549020 0.07058824 +v 0.08791662 -0.00581185 -0.02182943 0.56470588 0.92549020 0.07058824 +v 0.08791662 0.00053676 -0.02182943 0.56470588 0.92549020 0.07058824 +v 0.08774967 0.00717908 -0.02186692 0.56470588 0.92549020 0.07058824 +v 0.08702918 0.01401721 -0.02201691 0.56470588 0.92549020 0.07058824 +v 0.08739821 0.02272302 -0.01863293 0.56470588 0.92549020 0.07058824 +v 0.08889192 0.02450033 -0.01472401 0.56470588 0.92549020 0.07058824 +v 0.08553547 0.02087040 -0.02236374 0.56470588 0.92549020 0.07058824 +v 0.08999902 0.02617973 -0.01067448 0.56470588 0.92549020 0.07058824 +v 0.08774089 0.03653482 -0.00699991 0.56470588 0.92549020 0.07058824 +v 0.08716976 0.03453158 -0.01117130 0.56470588 0.92549020 0.07058824 +v 0.08794298 0.03834979 -0.00281915 0.56470588 0.92549020 0.07058824 +v 0.08724884 0.04146761 0.00549550 0.56470588 0.92549020 0.07058824 +v 0.08510493 0.04390011 0.01342582 0.56470588 0.92549020 0.07058824 +v 0.08160789 0.04566990 0.02069997 0.56470588 0.92549020 0.07058824 +v 0.07936733 0.04629497 0.02400896 0.56470588 0.92549020 0.07058824 +v 0.07966607 0.03990870 0.02718672 0.56470588 0.92549020 0.07058824 +v 0.08000875 0.03853053 0.02728046 0.56470588 0.92549020 0.07058824 +v 0.08057987 0.03619593 0.02743981 0.56470588 0.92549020 0.07058824 +v 0.08118614 0.03374083 0.02759917 0.56470588 0.92549020 0.07058824 +v 0.08241625 0.02678221 0.02789913 0.56470588 0.92549020 0.07058824 +v 0.08267985 0.02451539 0.02796475 0.56470588 0.92549020 0.07058824 +v 0.08331248 0.01907049 0.02810536 0.56470588 0.92549020 0.07058824 +v 0.08396268 -0.00784521 0.02823660 0.56470588 0.92549020 0.07058824 +v 0.07755731 0.01605810 0.03382344 0.56470588 0.92549020 0.07058824 +v 0.07792634 0.00488214 0.03392656 0.56470588 0.92549020 0.07058824 +v 0.08166940 -0.00784521 0.03056132 0.56470588 0.92549020 0.07058824 +v 0.08369030 -0.00784521 0.02854593 0.56470588 0.92549020 0.07058824 +v 0.08994630 -0.00784521 -0.01815486 0.56470588 0.92549020 0.07058824 +v 0.08862832 -0.00784521 -0.02043272 0.56470588 0.92549020 0.07058824 +v 0.08662500 -0.00784521 -0.02370421 0.56470588 0.92549020 0.07058824 +v 0.08564090 -0.00784521 -0.02512904 0.56470588 0.92549020 0.07058824 +v 0.08552668 0.00040121 -0.02527902 0.56470588 0.92549020 0.07058824 +v 0.08536852 0.00650883 -0.02531652 0.56470588 0.92549020 0.07058824 +v 0.08469196 0.01275200 -0.02547588 0.56470588 0.92549020 0.07058824 +v 0.08330369 0.01896506 -0.02584146 0.56470588 0.92549020 0.07058824 +v 0.08490284 0.02999041 -0.01920473 0.56470588 0.92549020 0.07058824 +v 0.08622960 0.03233254 -0.01524895 0.56470588 0.92549020 0.07058824 +v 0.08319825 0.02749765 -0.02297304 0.56470588 0.92549020 0.07058824 +v 0.08379574 0.04427666 -0.00781544 0.56470588 0.92549020 0.07058824 +v 0.08600115 0.04251442 -0.00317536 0.56470588 0.92549020 0.07058824 +v 0.08341791 0.04198724 -0.01199620 0.56470588 0.92549020 0.07058824 +v 0.08268864 0.03941166 -0.01611135 0.56470588 0.92549020 0.07058824 +v 0.08517522 0.04579792 0.00510180 0.56470588 0.92549020 0.07058824 +v 0.08297859 0.04832080 0.01296651 0.56470588 0.92549020 0.07058824 +v 0.07948156 0.05012070 0.02013754 0.56470588 0.92549020 0.07058824 +v 0.07726736 0.05075330 0.02338091 0.56470588 0.92549020 0.07058824 +v 0.07587030 0.04993242 0.02603372 0.56470588 0.92549020 0.07058824 +v 0.07656443 0.04834339 0.02624932 0.56470588 0.92549020 0.07058824 +v 0.07789120 0.04528582 0.02667115 0.56470588 0.92549020 0.07058824 +v 0.07725857 0.03882424 0.03016762 0.56470588 0.92549020 0.07058824 +v 0.07543976 0.03339441 0.03316727 0.56470588 0.92549020 0.07058824 +v 0.07639749 0.02762568 0.03347661 0.56470588 0.92549020 0.07058824 +v 0.07056324 0.01595267 0.03821043 0.56470588 0.92549020 0.07058824 +v 0.07090591 0.00484448 0.03833229 0.56470588 0.92549020 0.07058824 +v 0.07689832 -0.00784521 0.03469521 0.56470588 0.92549020 0.07058824 +v 0.07794391 -0.00569135 0.03392656 0.56470588 0.92549020 0.07058824 +v 0.07927947 -0.00784521 0.03282043 0.56470588 0.92549020 0.07058824 +v 0.08442837 -0.00784521 -0.02651638 0.56470588 0.92549020 0.07058824 +v 0.08280286 -0.00507381 -0.02847552 0.56470588 0.92549020 0.07058824 +v 0.08552668 -0.00544283 -0.02527902 0.56470588 0.92549020 0.07058824 +v 0.08265349 0.00582351 -0.02851302 0.56470588 0.92549020 0.07058824 +v 0.08202964 0.01147174 -0.02867238 0.56470588 0.92549020 0.07058824 +v 0.08112463 0.02491453 -0.02647888 0.56470588 0.92549020 0.07058824 +v 0.08072924 0.01703713 -0.02904733 0.56470588 0.92549020 0.07058824 +v 0.08009661 0.03354502 -0.02389169 0.56470588 0.92549020 0.07058824 +v 0.08158153 0.03658754 -0.02009526 0.56470588 0.92549020 0.07058824 +v 0.07909495 0.05047466 -0.00908092 0.56470588 0.92549020 0.07058824 +v 0.08145852 0.04966131 -0.00421586 0.56470588 0.92549020 0.07058824 +v 0.08383088 0.04630249 -0.00364405 0.56470588 0.92549020 0.07058824 +v 0.07894558 0.04804215 -0.01325231 0.56470588 0.92549020 0.07058824 +v 0.07847989 0.04521804 -0.01736745 0.56470588 0.92549020 0.07058824 +v 0.07762760 0.04207009 -0.02137011 0.56470588 0.92549020 0.07058824 +v 0.08286437 0.04967637 0.00459561 0.56470588 0.92549020 0.07058824 +v 0.08059744 0.05222938 0.01237595 0.56470588 0.92549020 0.07058824 +v 0.07709162 0.05402174 0.01942512 0.56470588 0.92549020 0.07058824 +v 0.07490378 0.05463928 0.02261225 0.56470588 0.92549020 0.07058824 +v 0.07362094 0.05393890 0.02525569 0.56470588 0.92549020 0.07058824 +v 0.07444688 0.05247790 0.02554628 0.56470588 0.92549020 0.07058824 +v 0.07522009 0.05109973 0.02580875 0.56470588 0.92549020 0.07058824 +v 0.07390212 0.04865969 0.02904275 0.56470588 0.92549020 0.07058824 +v 0.07420964 0.03893720 0.03274544 0.56470588 0.92549020 0.07058824 +v 0.07092348 0.03886942 0.03501393 0.56470588 0.92549020 0.07058824 +v 0.06858627 0.03312329 0.03743240 0.56470588 0.92549020 0.07058824 +v 0.06948250 0.02741481 0.03779798 0.56470588 0.92549020 0.07058824 +v 0.06678503 0.01577946 0.03986961 0.56470588 0.92549020 0.07058824 +v 0.06711013 0.00479176 0.04000085 0.56470588 0.92549020 0.07058824 +v 0.07093227 -0.00566123 0.03834166 0.56470588 0.92549020 0.07058824 +v 0.07160883 -0.00784521 0.03798546 0.56470588 0.92549020 0.07058824 +v 0.07243477 -0.00784521 0.03747926 0.56470588 0.92549020 0.07058824 +v 0.06744403 -0.00784521 0.03988836 0.56470588 0.92549020 0.07058824 +v 0.07791756 -0.00784521 0.03389843 0.56470588 0.92549020 0.07058824 +v 0.08269742 -0.00784521 -0.02837241 0.56470588 0.92549020 0.07058824 +v 0.07990331 -0.00784521 -0.03125957 0.56470588 0.92549020 0.07058824 +v 0.07977151 -0.00470479 -0.03138144 0.56470588 0.92549020 0.07058824 +v 0.07963093 0.00515325 -0.03141893 0.56470588 0.92549020 0.07058824 +v 0.07905102 0.01021407 -0.03157829 0.56470588 0.92549020 0.07058824 +v 0.07869956 0.02230881 -0.02967539 0.56470588 0.92549020 0.07058824 +v 0.07822508 0.03033683 -0.02740690 0.56470588 0.92549020 0.07058824 +v 0.07782969 0.01513932 -0.03193450 0.56470588 0.92549020 0.07058824 +v 0.07639749 0.03860584 -0.02516654 0.56470588 0.92549020 0.07058824 +v 0.07626569 0.05504596 -0.00577193 0.56470588 0.92549020 0.07058824 +v 0.07891922 0.05257580 -0.00492828 0.56470588 0.92549020 0.07058824 +v 0.07405148 0.05247790 -0.01500523 0.56470588 0.92549020 0.07058824 +v 0.07393726 0.05497065 -0.01087133 0.56470588 0.92549020 0.07058824 +v 0.08034264 0.05307284 0.00395818 0.56470588 0.92549020 0.07058824 +v 0.07385818 0.04951069 -0.01908287 0.56470588 0.92549020 0.07058824 +v 0.07328706 0.04614434 -0.02305741 0.56470588 0.92549020 0.07058824 +v 0.07232054 0.04237133 -0.02681635 0.56470588 0.92549020 0.07058824 +v 0.07799663 0.05561078 0.01164478 0.56470588 0.92549020 0.07058824 +v 0.07447324 0.05735797 0.01857210 0.56470588 0.92549020 0.07058824 +v 0.07113436 0.05737303 0.02433705 0.56470588 0.92549020 0.07058824 +v 0.07209209 0.05605510 0.02469326 0.56470588 0.92549020 0.07058824 +v 0.07287409 0.05497065 0.02498385 0.56470588 0.92549020 0.07058824 +v 0.07230297 0.05795291 0.02169361 0.56470588 0.92549020 0.07058824 +v 0.06661809 0.05642413 0.02973642 0.56470588 0.92549020 0.07058824 +v 0.06889380 0.05286950 0.03071131 0.56470588 0.92549020 0.07058824 +v 0.07093227 0.04875759 0.03152683 0.56470588 0.92549020 0.07058824 +v 0.06742645 0.03859831 0.03695432 0.56470588 0.92549020 0.07058824 +v 0.06772519 0.04864463 0.03371096 0.56470588 0.92549020 0.07058824 +v 0.06373611 0.03813139 0.03853851 0.56470588 0.92549020 0.07058824 +v 0.06573065 0.02709851 0.03942904 0.56470588 0.92549020 0.07058824 +v 0.06284867 0.01552340 0.04114446 0.56470588 0.92549020 0.07058824 +v 0.06317377 0.00470139 0.04128507 0.56470588 0.92549020 0.07058824 +v 0.06712771 -0.00562357 0.04001022 0.56470588 0.92549020 0.07058824 +v 0.06319135 -0.00555580 0.04129444 0.56470588 0.92549020 0.07058824 +v 0.06894652 -0.00784521 0.03922281 0.56470588 0.92549020 0.07058824 +v 0.06308591 -0.00784521 0.04132256 0.56470588 0.92549020 0.07058824 +v 0.07976272 -0.00784521 -0.03136269 0.56470588 0.92549020 0.07058824 +v 0.07307618 -0.00784521 -0.03613401 0.56470588 0.92549020 0.07058824 +v 0.07292681 -0.00401194 -0.03621837 0.56470588 0.92549020 0.07058824 +v 0.07280380 0.00388805 -0.03624649 0.56470588 0.92549020 0.07058824 +v 0.04763921 0.02573540 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.04744590 0.02761815 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.07598452 0.02704579 -0.03059403 0.56470588 0.92549020 0.07058824 +v 0.07593180 0.01974075 -0.03253443 0.56470588 0.92549020 0.07058824 +v 0.04661997 0.03098449 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.07476319 0.03487048 -0.02867238 0.56470588 0.92549020 0.07058824 +v 0.04732289 0.02843149 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.07354187 0.05707932 -0.00677494 0.56470588 0.92549020 0.07058824 +v 0.07480713 0.05841984 0.00225213 0.56470588 0.92549020 0.07058824 +v 0.07764517 0.05597980 0.00318015 0.56470588 0.92549020 0.07058824 +v 0.06904317 0.05528695 -0.01730183 0.56470588 0.92549020 0.07058824 +v 0.06913103 0.05222938 -0.02130449 0.56470588 0.92549020 0.07058824 +v 0.06866535 0.05780982 -0.01327105 0.56470588 0.92549020 0.07058824 +v 0.07077411 0.05869095 -0.00793730 0.56470588 0.92549020 0.07058824 +v 0.06883229 0.04870488 -0.02518529 0.56470588 0.92549020 0.07058824 +v 0.07094105 0.03824435 -0.03026594 0.56470588 0.92549020 0.07058824 +v 0.04438819 0.03588716 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.06812937 0.04471346 -0.02885986 0.56470588 0.92549020 0.07058824 +v 0.07520252 0.05847255 0.01075426 0.56470588 0.92549020 0.07058824 +v 0.07166155 0.06015949 0.01755972 0.56470588 0.92549020 0.07058824 +v 0.06952643 0.05909009 0.02368088 0.56470588 0.92549020 0.07058824 +v 0.06413150 0.05942898 0.02860218 0.56470588 0.92549020 0.07058824 +v 0.06950007 0.06072431 0.02059686 0.56470588 0.92549020 0.07058824 +v 0.06834025 0.06034776 0.02320281 0.56470588 0.92549020 0.07058824 +v 0.06021272 0.05587436 0.03358909 0.56470588 0.92549020 0.07058824 +v 0.06238299 0.05236493 0.03465772 0.56470588 0.92549020 0.07058824 +v 0.06431602 0.04830573 0.03557636 0.56470588 0.92549020 0.07058824 +v 0.05990519 0.03746866 0.03976650 0.56470588 0.92549020 0.07058824 +v 0.06183822 0.02663912 0.04069451 0.56470588 0.92549020 0.07058824 +v 0.06072233 0.04772585 0.03710431 0.56470588 0.92549020 0.07058824 +v 0.05880687 0.01519957 0.04203498 0.56470588 0.92549020 0.07058824 +v 0.05912319 0.00459596 0.04218496 0.56470588 0.92549020 0.07058824 +v 0.06155705 -0.00784521 0.04166002 0.56470588 0.92549020 0.07058824 +v 0.07292681 -0.00784521 -0.03621837 0.56470588 0.92549020 0.07058824 +v 0.04756891 0.02289623 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.04762163 0.02415390 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.07274229 0.03099203 -0.03180326 0.56470588 0.92549020 0.07058824 +v 0.04570617 0.03353749 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.04663754 0.03092425 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.04534592 0.03427553 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.07189000 0.06040048 0.00114601 0.56470588 0.92549020 0.07058824 +v 0.07226782 0.06083728 0.00970438 0.56470588 0.92549020 0.07058824 +v 0.06421937 0.05656721 -0.02018899 0.56470588 0.92549020 0.07058824 +v 0.06457083 0.05341927 -0.02404167 0.56470588 0.92549020 0.07058824 +v 0.06359553 0.05915034 -0.01629882 0.56470588 0.92549020 0.07058824 +v 0.06802393 0.05991097 -0.00926840 0.56470588 0.92549020 0.07058824 +v 0.06893773 0.06195939 -0.00012884 0.56470588 0.92549020 0.07058824 +v 0.06453569 0.04976674 -0.02777248 0.56470588 0.92549020 0.07058824 +v 0.04331624 0.03735570 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.06407878 0.04560965 -0.03126895 0.56470588 0.92549020 0.07058824 +v 0.04272754 0.03801842 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.04074179 0.04008191 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.06870049 0.06244890 0.01635986 0.56470588 0.92549020 0.07058824 +v 0.06146040 0.06191421 0.02730858 0.56470588 0.92549020 0.07058824 +v 0.05783157 0.05884157 0.03235174 0.56470588 0.92549020 0.07058824 +v 0.06654780 0.06298361 0.01933139 0.56470588 0.92549020 0.07058824 +v 0.06521225 0.06287817 0.02181547 0.56470588 0.92549020 0.07058824 +v 0.06678503 0.06161297 0.02250914 0.56470588 0.92549020 0.07058824 +v 0.05672447 0.05521917 0.03505142 0.56470588 0.92549020 0.07058824 +v 0.05884202 0.05174739 0.03615754 0.56470588 0.92549020 0.07058824 +v 0.05697049 0.04689744 0.03829479 0.56470588 0.92549020 0.07058824 +v 0.05595125 0.03661766 0.04062890 0.56470588 0.92549020 0.07058824 +v 0.05782278 0.02605924 0.04156629 0.56470588 0.92549020 0.07058824 +v 0.05470357 0.01481549 0.04253180 0.56470588 0.92549020 0.07058824 +v 0.05500231 0.00446793 0.04267240 0.56470588 0.92549020 0.07058824 +v 0.05858721 -0.00784521 0.04227870 0.56470588 0.92549020 0.07058824 +v 0.05914076 -0.00548048 0.04218496 0.56470588 0.92549020 0.07058824 +v 0.05913197 -0.00784521 0.04216621 0.56470588 0.92549020 0.07058824 +v 0.07167913 -0.00784521 -0.03686517 0.56470588 0.92549020 0.07058824 +v 0.04628608 0.01696182 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.06923648 0.06274261 0.00847641 0.56470588 0.92549020 0.07058824 +v 0.05986126 0.05645425 -0.02365734 0.56470588 0.92549020 0.07058824 +v 0.05900896 0.05913528 -0.01997339 0.56470588 0.92549020 0.07058824 +v 0.06044117 0.05319334 -0.02728504 0.56470588 0.92549020 0.07058824 +v 0.05790186 0.06134938 -0.01632695 0.56470588 0.92549020 0.07058824 +v 0.06271687 0.06127407 -0.01245552 0.56470588 0.92549020 0.07058824 +v 0.06598546 0.06314175 -0.00159117 0.56470588 0.92549020 0.07058824 +v 0.06615241 0.06424127 0.00707032 0.56470588 0.92549020 0.07058824 +v 0.03868574 0.04197219 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.03793010 0.04261985 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.06562521 0.06428646 0.01499127 0.56470588 0.92549020 0.07058824 +v 0.05863993 0.06393250 0.02583687 0.56470588 0.92549020 0.07058824 +v 0.05526590 0.06129667 0.03095503 0.56470588 0.92549020 0.07058824 +v 0.05440483 0.05815625 0.03378595 0.56470588 0.92549020 0.07058824 +v 0.06212818 0.06476845 0.02031564 0.56470588 0.92549020 0.07058824 +v 0.06390306 0.06368398 0.02117804 0.56470588 0.92549020 0.07058824 +v 0.06461476 0.06324719 0.02152488 0.56470588 0.92549020 0.07058824 +v 0.06347252 0.06478351 0.01787843 0.56470588 0.92549020 0.07058824 +v 0.05308685 0.05428533 0.03619504 0.56470588 0.92549020 0.07058824 +v 0.05514289 0.05085874 0.03731991 0.56470588 0.92549020 0.07058824 +v 0.05309563 0.04583557 0.03911970 0.56470588 0.92549020 0.07058824 +v 0.05191824 0.03560098 0.04110696 0.56470588 0.92549020 0.07058824 +v 0.05374584 0.02536639 0.04205373 0.56470588 0.92549020 0.07058824 +v 0.04644424 0.01391178 0.04229745 0.56470588 0.92549020 0.07058824 +v 0.04673419 0.00416669 0.04243806 0.56470588 0.92549020 0.07058824 +v 0.05093415 -0.00784521 0.04265366 0.56470588 0.92549020 0.07058824 +v 0.05400943 -0.00784521 0.04273802 0.56470588 0.92549020 0.07058824 +v 0.05501988 -0.00538258 0.04268178 0.56470588 0.92549020 0.07058824 +v 0.05705835 -0.00784521 0.04245681 0.56470588 0.92549020 0.07058824 +v 0.04792037 -0.00784521 0.04256929 0.56470588 0.92549020 0.07058824 +v 0.07074775 -0.00784521 -0.03734324 0.56470588 0.92549020 0.07058824 +v 0.04625093 0.01684132 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.05791065 0.05592708 -0.02558836 0.56470588 0.92549020 0.07058824 +v 0.05581945 0.05713957 -0.02508217 0.56470588 0.92549020 0.07058824 +v 0.05694413 0.05867589 -0.02203565 0.56470588 0.92549020 0.07058824 +v 0.05465964 0.05957960 -0.02172631 0.56470588 0.92549020 0.07058824 +v 0.05574916 0.06095777 -0.01851107 0.56470588 0.92549020 0.07058824 +v 0.05673325 0.05421755 -0.02836304 0.56470588 0.92549020 0.07058824 +v 0.03631338 0.04375703 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.03467909 0.04488667 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.03105904 0.04692004 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.05306049 0.06191421 -0.01794863 0.56470588 0.92549020 0.07058824 +v 0.05112745 0.06389485 -0.01412408 0.56470588 0.92549020 0.07058824 +v 0.05270903 0.06442202 -0.01172436 0.56470588 0.92549020 0.07058824 +v 0.05506381 0.06469313 -0.00932464 0.56470588 0.92549020 0.07058824 +v 0.06027422 0.06448980 -0.00507826 0.56470588 0.92549020 0.07058824 +v 0.06306834 0.06536339 0.00545801 0.56470588 0.92549020 0.07058824 +v 0.06248842 0.06570982 0.01342582 0.56470588 0.92549020 0.07058824 +v 0.05278811 0.06531820 0.02606185 0.56470588 0.92549020 0.07058824 +v 0.05255087 0.06328484 0.02939896 0.56470588 0.92549020 0.07058824 +v 0.05841148 0.06554414 0.02207794 0.56470588 0.92549020 0.07058824 +v 0.05569644 0.06553661 0.02419644 0.56470588 0.92549020 0.07058824 +v 0.05190067 0.06059629 0.03235174 0.56470588 0.92549020 0.07058824 +v 0.05081992 0.05719228 0.03490144 0.56470588 0.92549020 0.07058824 +v 0.06091564 0.06532574 0.01966884 0.56470588 0.92549020 0.07058824 +v 0.05875416 0.06631229 0.01851586 0.56470588 0.92549020 0.07058824 +v 0.04932622 0.05308790 0.03700120 0.56470588 0.92549020 0.07058824 +v 0.05132076 0.04972156 0.03814481 0.56470588 0.92549020 0.07058824 +v 0.04914170 0.04456284 0.03959776 0.56470588 0.92549020 0.07058824 +v 0.04375556 0.03319107 0.04090074 0.56470588 0.92549020 0.07058824 +v 0.04552165 0.02373970 0.04182875 0.56470588 0.92549020 0.07058824 +v 0.04235851 0.01340720 0.04157566 0.56470588 0.92549020 0.07058824 +v 0.04264846 0.00400101 0.04171627 0.56470588 0.92549020 0.07058824 +v 0.04674298 -0.00516418 0.04244743 0.56470588 0.92549020 0.07058824 +v 0.04336896 -0.00784521 0.04187562 0.56470588 0.92549020 0.07058824 +v 0.04675177 -0.00784521 0.04240994 0.56470588 0.92549020 0.07058824 +v 0.06878836 -0.00784521 -0.03822439 0.56470588 0.92549020 0.07058824 +v 0.04374678 0.01047012 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.02952140 0.04759782 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.02507542 0.04948810 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.02314238 0.05019601 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.04902747 0.05979047 -0.02405104 0.56470588 0.92549020 0.07058824 +v 0.05408851 0.06041554 -0.02037647 0.56470588 0.92549020 0.07058824 +v 0.04699779 0.06211001 -0.02039522 0.56470588 0.92549020 0.07058824 +v 0.04463422 0.06402288 -0.01680502 0.56470588 0.92549020 0.07058824 +v 0.04879024 0.06557426 -0.01021516 0.56470588 0.92549020 0.07058824 +v 0.04898354 0.06675662 -0.00550946 0.56470588 0.92549020 0.07058824 +v 0.05151406 0.06692983 -0.00294101 0.56470588 0.92549020 0.07058824 +v 0.05705835 0.06665872 0.00165220 0.56470588 0.92549020 0.07058824 +v 0.05933406 0.06677921 0.01166353 0.56470588 0.92549020 0.07058824 +v 0.05716379 0.06723107 0.01441009 0.56470588 0.92549020 0.07058824 +v 0.04970404 0.06486635 0.02767416 0.56470588 0.92549020 0.07058824 +v 0.04961617 0.06769799 0.02040938 0.56470588 0.92549020 0.07058824 +v 0.04678691 0.06745700 0.02219042 0.56470588 0.92549020 0.07058824 +v 0.04925592 0.06257693 0.03075817 0.56470588 0.92549020 0.07058824 +v 0.05228727 0.06773565 0.01839400 0.56470588 0.92549020 0.07058824 +v 0.04838606 0.05960220 0.03345786 0.56470588 0.92549020 0.07058824 +v 0.04711201 0.05594967 0.03570760 0.56470588 0.92549020 0.07058824 +v 0.05526590 0.06745700 0.01644422 0.56470588 0.92549020 0.07058824 +v 0.04545136 0.05164196 0.03746989 0.56470588 0.92549020 0.07058824 +v 0.04740197 0.04835092 0.03861351 0.56470588 0.92549020 0.07058824 +v 0.04107567 0.04150527 0.03941966 0.56470588 0.92549020 0.07058824 +v 0.04144471 0.02283598 0.04111634 0.56470588 0.92549020 0.07058824 +v 0.03970498 0.03185809 0.04020707 0.56470588 0.92549020 0.07058824 +v 0.03836943 0.01287250 0.04046016 0.56470588 0.92549020 0.07058824 +v 0.03865059 0.00382027 0.04060077 0.56470588 0.92549020 0.07058824 +v 0.03891419 -0.00784521 0.04068514 0.56470588 0.92549020 0.07058824 +v 0.04025853 -0.00784521 0.04106010 0.56470588 0.92549020 0.07058824 +v 0.04266603 -0.00503616 0.04172564 0.56470588 0.92549020 0.07058824 +v 0.04579404 -0.00784521 0.04226933 0.56470588 0.92549020 0.07058824 +v 0.04266603 -0.00784521 0.04169752 0.56470588 0.92549020 0.07058824 +v 0.06625784 -0.00784521 -0.03927426 0.56470588 0.92549020 0.07058824 +v 0.04151500 0.00624524 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.04332502 0.00962665 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.01464582 0.05225950 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.02863396 0.05565597 -0.04068972 0.56470588 0.92549020 0.07058824 +v 0.04176981 0.05982813 -0.02725692 0.56470588 0.92549020 0.07058824 +v 0.03911628 0.06197445 -0.02404167 0.56470588 0.92549020 0.07058824 +v 0.04191918 0.06556673 -0.01332730 0.56470588 0.92549020 0.07058824 +v 0.03610250 0.06373670 -0.02091079 0.56470588 0.92549020 0.07058824 +v 0.04783251 0.06610896 -0.00879033 0.56470588 0.92549020 0.07058824 +v 0.04581161 0.06702021 -0.00605315 0.56470588 0.92549020 0.07058824 +v 0.04396644 0.06764528 -0.00385965 0.56470588 0.92549020 0.07058824 +v 0.04365012 0.06775071 -0.00348470 0.56470588 0.92549020 0.07058824 +v 0.04733168 0.06834566 0.00268333 0.56470588 0.92549020 0.07058824 +v 0.05313078 0.06802936 0.00755776 0.56470588 0.92549020 0.07058824 +v 0.05090779 0.06845862 0.01016371 0.56470588 0.92549020 0.07058824 +v 0.05120653 0.06836072 0.01374454 0.56470588 0.92549020 0.07058824 +v 0.05477386 0.06758503 0.01612551 0.56470588 0.92549020 0.07058824 +v 0.05509896 0.06750972 0.01634111 0.56470588 0.92549020 0.07058824 +v 0.04646181 0.06414337 0.02901463 0.56470588 0.92549020 0.07058824 +v 0.04379071 0.06699008 0.02374650 0.56470588 0.92549020 0.07058824 +v 0.04351833 0.06878245 0.01595678 0.56470588 0.92549020 0.07058824 +v 0.03775437 0.06804442 0.01921890 0.56470588 0.92549020 0.07058824 +v 0.04577646 0.06156778 0.03185492 0.56470588 0.92549020 0.07058824 +v 0.04473087 0.05832193 0.03425464 0.56470588 0.92549020 0.07058824 +v 0.04328988 0.05443595 0.03618566 0.56470588 0.92549020 0.07058824 +v 0.03751713 0.04810240 0.03736678 0.56470588 0.92549020 0.07058824 +v 0.03940624 0.04502976 0.03847290 0.56470588 0.92549020 0.07058824 +v 0.03706023 0.03979573 0.03876349 0.56470588 0.92549020 0.07058824 +v 0.03573347 0.03047992 0.03912907 0.56470588 0.92549020 0.07058824 +v 0.03746441 0.02190214 0.04001022 0.56470588 0.92549020 0.07058824 +v 0.03359834 0.02093064 0.03851977 0.56470588 0.92549020 0.07058824 +v 0.03450336 0.01232274 0.03896034 0.56470588 0.92549020 0.07058824 +v 0.03478453 0.00363199 0.03909157 0.56470588 0.92549020 0.07058824 +v 0.03480210 -0.00476504 0.03910095 0.56470588 0.92549020 0.07058824 +v 0.03866817 -0.00490060 0.04061015 0.56470588 0.92549020 0.07058824 +v 0.03712174 -0.00784521 0.03999147 0.56470588 0.92549020 0.07058824 +v 0.03163016 -0.00784521 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.03258789 -0.00680594 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.03488996 -0.00383120 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.03583012 -0.00255093 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.03869453 0.00172666 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.01032285 0.05278667 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.01714998 0.05549781 -0.04550791 0.56470588 0.92549020 0.07058824 +v 0.02517207 0.05771192 -0.03829000 0.56470588 0.92549020 0.07058824 +v 0.02291393 0.05580658 -0.04289259 0.56470588 0.92549020 0.07058824 +v 0.03362470 0.05915034 -0.03209385 0.56470588 0.92549020 0.07058824 +v 0.03033855 0.06109333 -0.02934730 0.56470588 0.92549020 0.07058824 +v 0.03274605 0.06512240 -0.01789239 0.56470588 0.92549020 0.07058824 +v 0.03886147 0.06677168 -0.00999956 0.56470588 0.92549020 0.07058824 +v 0.02673607 0.06264471 -0.02667574 0.56470588 0.92549020 0.07058824 +v 0.04257817 0.06802183 -0.00234108 0.56470588 0.92549020 0.07058824 +v 0.03547866 0.06763021 -0.00685930 0.56470588 0.92549020 0.07058824 +v 0.04203340 0.06815738 -0.00175990 0.56470588 0.92549020 0.07058824 +v 0.04081208 0.06839837 -0.00056941 0.56470588 0.92549020 0.07058824 +v 0.04035518 0.06848122 -0.00012884 0.56470588 0.92549020 0.07058824 +v 0.04500325 0.06878245 0.00517679 0.56470588 0.92549020 0.07058824 +v 0.04672541 0.06888789 0.01031369 0.56470588 0.92549020 0.07058824 +v 0.04305264 0.06311916 0.03009262 0.56470588 0.92549020 0.07058824 +v 0.04063635 0.06625958 0.02505884 0.56470588 0.92549020 0.07058824 +v 0.03761379 0.06909122 0.01090424 0.56470588 0.92549020 0.07058824 +v 0.03466151 0.06729885 0.02054062 0.56470588 0.92549020 0.07058824 +v 0.03184104 0.06833812 0.01416636 0.56470588 0.92549020 0.07058824 +v 0.04218278 0.06025739 0.03265170 0.56470588 0.92549020 0.07058824 +v 0.04095266 0.05676302 0.03474208 0.56470588 0.92549020 0.07058824 +v 0.03543473 0.05071565 0.03612005 0.56470588 0.92549020 0.07058824 +v 0.03708659 0.05494052 0.03490144 0.56470588 0.92549020 0.07058824 +v 0.03353684 0.04609916 0.03675747 0.56470588 0.92549020 0.07058824 +v 0.02961805 0.04399802 0.03577321 0.56470588 0.92549020 0.07058824 +v 0.03310630 0.03801089 0.03772299 0.56470588 0.92549020 0.07058824 +v 0.02926659 0.03616581 0.03629815 0.56470588 0.92549020 0.07058824 +v 0.03187619 0.02904903 0.03765737 0.56470588 0.92549020 0.07058824 +v 0.02818585 0.02758049 0.03582008 0.56470588 0.92549020 0.07058824 +v 0.03459122 -0.00784521 0.03900721 0.56470588 0.92549020 0.07058824 +v 0.00448860 -0.00784521 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.00692247 0.05298247 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.01155296 0.05469953 -0.04854505 0.56470588 0.92549020 0.07058824 +v 0.01915331 0.05750105 -0.04069910 0.56470588 0.92549020 0.07058824 +v 0.02142901 0.05937627 -0.03594653 0.56470588 0.92549020 0.07058824 +v 0.02396832 0.06110086 -0.03126895 0.56470588 0.92549020 0.07058824 +v 0.02908207 0.06612402 -0.01500523 0.56470588 0.92549020 0.07058824 +v 0.02287000 0.06378942 -0.02407916 0.56470588 0.92549020 0.07058824 +v 0.02004953 0.06230581 -0.02883173 0.56470588 0.92549020 0.07058824 +v 0.03010131 0.06763021 -0.00740299 0.56470588 0.92549020 0.07058824 +v 0.03228915 0.06798417 -0.00481579 0.56470588 0.92549020 0.07058824 +v 0.03582133 0.06854900 -0.00062566 0.56470588 0.92549020 0.07058824 +v 0.03804432 0.06878245 0.00190530 0.56470588 0.92549020 0.07058824 +v 0.04225307 0.06900838 0.00632041 0.56470588 0.92549020 0.07058824 +v 0.04289448 0.06899332 0.00688284 0.56470588 0.92549020 0.07058824 +v 0.03732383 0.06521277 0.02614621 0.56470588 0.92549020 0.07058824 +v 0.03951167 0.06179371 0.03089878 0.56470588 0.92549020 0.07058824 +v 0.03424855 0.06894060 0.00478308 0.56470588 0.92549020 0.07058824 +v 0.03242095 0.06883517 0.00593608 0.56470588 0.92549020 0.07058824 +v 0.03020675 0.06869961 0.00734216 0.56470588 0.92549020 0.07058824 +v 0.03143686 0.06623699 0.02166549 0.56470588 0.92549020 0.07058824 +v 0.02878333 0.06757750 0.01553495 0.56470588 0.92549020 0.07058824 +v 0.02674486 0.06811220 0.00919819 0.56470588 0.92549020 0.07058824 +v 0.02601558 0.06798417 0.00958253 0.56470588 0.92549020 0.07058824 +v 0.03583891 0.06016702 0.03141435 0.56470588 0.92549020 0.07058824 +v 0.03317659 0.05289210 0.03472334 0.56470588 0.92549020 0.07058824 +v 0.03148958 0.04859191 0.03553886 0.56470588 0.92549020 0.07058824 +v 0.03206949 0.05824662 0.03163932 0.56470588 0.92549020 0.07058824 +v 0.02758836 0.04636274 0.03458273 0.56470588 0.92549020 0.07058824 +v 0.02580470 0.04181403 0.03439525 0.56470588 0.92549020 0.07058824 +v 0.02214951 0.03955474 0.03265170 0.56470588 0.92549020 0.07058824 +v 0.02558504 0.03426800 0.03449836 0.56470588 0.92549020 0.07058824 +v 0.03110297 -0.00461442 0.03722617 0.56470588 0.92549020 0.07058824 +v 0.03112055 -0.00784521 0.03719805 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05294481 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.00448860 -0.00784521 -0.03587154 0.56470588 0.92549020 0.07058824 +v 0.00543755 0.05295988 -0.05302578 0.56470588 0.92549020 0.07058824 +v 0.00774840 0.05442089 -0.04954806 0.56470588 0.92549020 0.07058824 +v 0.01322240 0.05678561 -0.04353939 0.56470588 0.92549020 0.07058824 +v 0.01519937 0.05877379 -0.03858059 0.56470588 0.92549020 0.07058824 +v 0.01748387 0.06062641 -0.03366867 0.56470588 0.92549020 0.07058824 +v 0.02557625 0.06653823 -0.01326168 0.56470588 0.92549020 0.07058824 +v 0.02594529 0.06662860 -0.01278361 0.56470588 0.92549020 0.07058824 +v 0.02145537 0.06516759 -0.01915787 0.56470588 0.92549020 0.07058824 +v 0.01775625 0.06348818 -0.02514779 0.56470588 0.92549020 0.07058824 +v 0.01891607 0.06401535 -0.02327301 0.56470588 0.92549020 0.07058824 +v 0.01447009 0.06150000 -0.03129707 0.56470588 0.92549020 0.07058824 +v 0.01679852 0.06291583 -0.02693821 0.56470588 0.92549020 0.07058824 +v 0.02963562 0.06821010 -0.00295976 0.56470588 0.92549020 0.07058824 +v 0.02256247 0.06670391 -0.01178998 0.56470588 0.92549020 0.07058824 +v 0.03557531 0.06888789 0.00378008 0.56470588 0.92549020 0.07058824 +v 0.03388830 0.06385720 0.02697112 0.56470588 0.92549020 0.07058824 +v 0.02627039 0.06817245 -0.00086000 0.56470588 0.92549020 0.07058824 +v 0.01926753 0.06717836 0.00274895 0.56470588 0.92549020 0.07058824 +v 0.02808920 0.06485882 0.02254663 0.56470588 0.92549020 0.07058824 +v 0.02560261 0.06650057 0.01672544 0.56470588 0.92549020 0.07058824 +v 0.02581349 0.06793145 0.00967626 0.56470588 0.92549020 0.07058824 +v 0.02368715 0.06732898 0.01063240 0.56470588 0.92549020 0.07058824 +v 0.02230767 0.06693736 0.01125108 0.56470588 0.92549020 0.07058824 +v 0.03032976 0.06218532 0.02754292 0.56470588 0.92549020 0.07058824 +v 0.02824735 0.05607017 0.03152683 0.56470588 0.92549020 0.07058824 +v 0.02926659 0.05067046 0.03417965 0.56470588 0.92549020 0.07058824 +v 0.02539174 0.04832080 0.03327038 0.56470588 0.92549020 0.07058824 +v 0.02665699 0.06019714 0.02784289 0.56470588 0.92549020 0.07058824 +v 0.02162232 0.04587323 0.03196741 0.56470588 0.92549020 0.07058824 +v 0.01801106 0.04332776 0.03028948 0.56470588 0.92549020 0.07058824 +v 0.03047913 -0.00784521 0.03685121 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05482003 -0.04841382 0.56470588 0.92549020 0.07058824 +v 0.00911031 0.05645425 -0.04461739 0.56470588 0.92549020 0.07058824 +v 0.00997139 -0.00784521 0.00434251 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.01941692 0.00785773 0.56470588 0.92549020 0.07058824 +v 0.01119272 0.05873614 -0.03883369 0.56470588 0.92549020 0.07058824 +v 0.01158811 0.05916540 -0.03773694 0.56470588 0.92549020 0.07058824 +v 0.01005047 0.05747846 -0.04203019 0.56470588 0.92549020 0.07058824 +v 0.01420649 0.06128914 -0.03188763 0.56470588 0.92549020 0.07058824 +v 0.01584957 0.06430905 -0.02168882 0.56470588 0.92549020 0.07058824 +v 0.01286215 0.06277274 -0.02687259 0.56470588 0.92549020 0.07058824 +v 0.01020862 0.06102555 -0.03215947 0.56470588 0.92549020 0.07058824 +v 0.01896000 0.06666625 -0.00981208 0.56470588 0.92549020 0.07058824 +v 0.01539267 0.06558932 -0.01474276 0.56470588 0.92549020 0.07058824 +v 0.01571778 0.06616168 0.00423940 0.56470588 0.92549020 0.07058824 +v 0.01155296 0.06553661 -0.00638123 0.56470588 0.92549020 0.07058824 +v 0.02462731 0.06314928 0.02320281 0.56470588 0.92549020 0.07058824 +v 0.02233402 0.06509981 0.01770970 0.56470588 0.92549020 0.07058824 +v 0.01895122 0.06336768 0.01847836 0.56470588 0.92549020 0.07058824 +v 0.01825708 0.06532574 0.01274153 0.56470588 0.92549020 0.07058824 +v 0.01218559 0.06479857 0.00550488 0.56470588 0.92549020 0.07058824 +v 0.02292272 0.05792279 0.02783351 0.56470588 0.92549020 0.07058824 +v 0.02439886 0.05368285 0.03106751 0.56470588 0.92549020 0.07058824 +v 0.02059429 0.05114491 0.03024261 0.56470588 0.92549020 0.07058824 +v 0.01688638 0.04847142 0.02903338 0.56470588 0.92549020 0.07058824 +v 0.01742236 0.05876626 0.02370900 0.56470588 0.92549020 0.07058824 +v 0.01334541 0.04567742 0.02743981 0.56470588 0.92549020 0.07058824 +v 0.01004168 0.04277047 0.02546192 0.56470588 0.92549020 0.07058824 +v 0.01461946 0.04068439 0.02823660 0.56470588 0.92549020 0.07058824 +v 0.02763230 -0.00784521 0.03495768 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05500830 -0.04791700 0.56470588 0.92549020 0.07058824 +v 0.00593838 0.05699648 -0.04296758 0.56470588 0.92549020 0.07058824 +v 0.01025256 -0.00784521 0.00617043 0.56470588 0.92549020 0.07058824 +v 0.01055130 -0.00784521 0.00807333 0.56470588 0.92549020 0.07058824 +v 0.01086761 -0.00784521 0.00992936 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.02220338 0.01121358 0.56470588 0.92549020 0.07058824 +v 0.00789777 0.05909009 -0.03753072 0.56470588 0.92549020 0.07058824 +v 0.01202744 0.06427893 -0.01987028 0.56470588 0.92549020 0.07058824 +v 0.00894337 0.06275014 -0.02515716 0.56470588 0.92549020 0.07058824 +v 0.00620197 0.06100296 -0.03055653 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05907503 -0.03629336 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05961726 -0.03448420 0.56470588 0.92549020 0.07058824 +v 0.00815258 0.06384214 -0.01821110 0.56470588 0.92549020 0.07058824 +v 0.00780112 0.06437683 -0.01142439 0.56470588 0.92549020 0.07058824 +v 0.00785384 0.06441449 -0.00495640 0.56470588 0.92549020 0.07058824 +v 0.00820530 0.06399275 0.00108039 0.56470588 0.92549020 0.07058824 +v 0.01729935 0.06483622 0.01301337 0.56470588 0.92549020 0.07058824 +v 0.01417135 0.06323213 0.01388515 0.56470588 0.92549020 0.07058824 +v 0.01229982 0.06206482 0.01423198 0.56470588 0.92549020 0.07058824 +v 0.01000653 0.06062641 0.01466318 0.56470588 0.92549020 0.07058824 +v 0.01194836 0.05888675 0.01922827 0.56470588 0.92549020 0.07058824 +v 0.00525303 0.06112345 0.00729529 0.56470588 0.92549020 0.07058824 +v 0.01916209 0.05540744 0.02747731 0.56470588 0.92549020 0.07058824 +v 0.01543661 0.05271135 0.02675552 0.56470588 0.92549020 0.07058824 +v 0.01181656 0.04984959 0.02564940 0.56470588 0.92549020 0.07058824 +v 0.01376717 0.05615301 0.02346528 0.56470588 0.92549020 0.07058824 +v 0.00837224 0.04684473 0.02414957 0.56470588 0.92549020 0.07058824 +v 0.00518274 0.04370431 0.02226542 0.56470588 0.92549020 0.07058824 +v 0.02660428 -0.00784521 0.03424526 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05698895 -0.04248951 0.56470588 0.92549020 0.07058824 +v 0.01134209 -0.00784521 0.01163541 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.02540404 0.01424135 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06079962 -0.02992848 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06197445 -0.02454786 0.56470588 0.92549020 0.07058824 +v 0.00498943 0.06228322 -0.02358235 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06277274 -0.01884853 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06304385 -0.01678627 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06308151 -0.01637382 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06316435 -0.01029953 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06317188 -0.00669995 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06305891 -0.00384091 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06198951 0.00201778 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06301373 -0.00339096 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05807341 0.01240407 0.56470588 0.92549020 0.07058824 +v 0.00898730 0.05987331 0.01474754 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06061135 0.00740778 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05922565 0.01034181 0.56470588 0.92549020 0.07058824 +v 0.00840739 0.05619066 0.01911579 0.56470588 0.92549020 0.07058824 +v 0.00594716 0.05763661 0.01498189 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06095024 0.00646102 0.56470588 0.92549020 0.07058824 +v 0.01014712 0.05331383 0.02286535 0.56470588 0.92549020 0.07058824 +v 0.00664130 0.05028638 0.02187172 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.04820783 0.02096244 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.04702547 0.02131865 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.04496198 0.02159987 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.04370431 0.02175922 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.04291356 0.02173111 0.56470588 0.92549020 0.07058824 +v 0.02524236 -0.00784521 0.03315789 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.04010451 0.02146863 0.56470588 0.92549020 0.07058824 +v 0.01215923 -0.00784521 0.01443821 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.02902644 0.01682855 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.06217026 -0.02340424 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05724500 0.01377266 0.56470588 0.92549020 0.07058824 +v 0.00491914 0.05323099 0.01863772 0.56470588 0.92549020 0.07058824 +v 0.00570993 0.05744081 0.01497252 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05640906 0.01492565 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05585177 0.01556307 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05350211 0.01797217 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05339667 0.01807528 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05283185 0.01852523 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05018848 0.02013754 0.56470588 0.92549020 0.07058824 +v 0.02417041 -0.00784521 0.03227675 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.03669297 0.02060623 0.56470588 0.92549020 0.07058824 +v 0.01882820 -0.00784521 0.02663366 0.56470588 0.92549020 0.07058824 +v 0.01967171 -0.00784521 0.02759917 0.56470588 0.92549020 0.07058824 +v 0.02144659 -0.00784521 0.02947395 0.56470588 0.92549020 0.07058824 +v 0.01385503 -0.00784521 0.01845961 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.03263378 0.01896580 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.02907916 0.01686605 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.05318580 0.01825339 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.03653482 0.02055937 0.56470588 0.92549020 0.07058824 +v 0.01805499 -0.00784521 0.02550879 0.56470588 0.92549020 0.07058824 +v 0.01425921 -0.00784521 0.01938763 0.56470588 0.92549020 0.07058824 +v 0.01433829 -0.00784521 0.01956573 0.56470588 0.92549020 0.07058824 +v 0.00448860 0.03633149 0.02048437 0.56470588 0.92549020 0.07058824 +v 0.01537510 -0.00784521 0.02130928 0.56470588 0.92549020 0.07058824 +f 912 913 914 +f 912 914 915 +f 912 915 916 +f 912 916 917 +f 912 917 918 +f 912 918 927 +f 912 927 926 +f 912 926 939 +f 912 939 957 +f 912 957 975 +f 912 975 1002 +f 912 1002 1006 +f 912 1006 1005 +f 912 1005 1036 +f 912 1036 1070 +f 912 1070 1034 +f 912 1034 1068 +f 912 1068 1067 +f 912 1067 1105 +f 912 1105 1069 +f 912 1069 1106 +f 912 1106 1143 +f 912 1143 1178 +f 912 1178 1176 +f 912 1176 1209 +f 912 1209 1207 +f 912 1207 1206 +f 912 1206 1210 +f 912 1210 1246 +f 912 1246 1280 +f 912 1280 1245 +f 912 1245 1281 +f 912 1281 1278 +f 912 1278 1277 +f 912 1277 1318 +f 912 1318 1355 +f 912 1355 1389 +f 912 1389 1422 +f 912 1422 1451 +f 912 1451 1480 +f 912 1480 1509 +f 912 1509 1523 +f 912 1523 1527 +f 912 1527 1526 +f 912 1526 1525 +f 912 1525 1533 +f 912 1533 1537 +f 912 1537 1535 +f 912 1535 1534 +f 912 1534 1528 +f 912 1528 1511 +f 912 1511 1482 +f 912 1482 1456 +f 912 1456 1455 +f 912 1455 1454 +f 912 1454 1425 +f 912 1425 1391 +f 912 1391 1356 +f 912 1356 1319 +f 912 1319 1282 +f 912 1282 1247 +f 912 1247 1211 +f 912 1211 1179 +f 912 1179 1144 +f 912 1144 1108 +f 912 1108 1107 +f 912 1107 1072 +f 912 1072 1071 +f 912 1071 1037 +f 912 1037 1010 +f 912 1010 1009 +f 912 1009 1008 +f 912 1008 1007 +f 912 1007 979 +f 912 979 959 +f 912 959 958 +f 912 958 940 +f 912 940 928 +f 912 928 919 +f 912 919 913 +f 913 919 914 +f 914 920 915 +f 914 919 920 +f 915 920 916 +f 916 920 921 +f 916 921 922 +f 916 922 917 +f 917 922 923 +f 917 923 924 +f 917 924 925 +f 917 925 926 +f 917 926 927 +f 917 927 918 +f 919 928 920 +f 920 928 929 +f 920 929 930 +f 920 930 921 +f 921 930 931 +f 921 931 932 +f 921 932 922 +f 922 932 933 +f 922 933 923 +f 923 933 934 +f 923 934 924 +f 924 934 935 +f 924 935 936 +f 924 936 925 +f 925 936 937 +f 925 937 938 +f 925 938 926 +f 926 938 939 +f 928 940 941 +f 928 941 942 +f 928 942 929 +f 929 942 941 +f 929 941 943 +f 929 943 944 +f 929 944 945 +f 929 945 930 +f 930 945 946 +f 930 946 931 +f 931 946 947 +f 931 947 948 +f 931 948 932 +f 932 948 949 +f 932 949 933 +f 933 949 950 +f 933 950 934 +f 934 950 951 +f 934 951 935 +f 935 951 952 +f 935 952 953 +f 935 953 936 +f 936 953 937 +f 937 953 954 +f 937 954 955 +f 937 955 938 +f 938 955 956 +f 938 956 939 +f 939 956 957 +f 940 958 941 +f 941 958 959 +f 941 959 943 +f 943 959 960 +f 943 960 961 +f 943 961 962 +f 943 962 944 +f 944 963 945 +f 944 962 964 +f 944 964 963 +f 945 963 965 +f 945 965 946 +f 946 966 947 +f 946 965 966 +f 947 966 967 +f 947 967 948 +f 948 968 949 +f 948 967 968 +f 949 968 950 +f 950 968 969 +f 950 969 951 +f 951 969 952 +f 952 969 970 +f 952 970 971 +f 952 971 953 +f 953 971 954 +f 954 971 972 +f 954 972 973 +f 954 973 955 +f 955 973 974 +f 955 974 956 +f 956 975 957 +f 956 974 976 +f 956 976 977 +f 956 977 978 +f 956 978 1002 +f 956 1002 975 +f 959 979 960 +f 960 979 980 +f 960 980 981 +f 960 981 961 +f 961 981 982 +f 961 982 962 +f 962 982 983 +f 962 983 964 +f 963 964 984 +f 963 984 985 +f 963 985 965 +f 964 983 986 +f 964 986 984 +f 965 985 987 +f 965 987 966 +f 966 988 967 +f 966 987 989 +f 966 989 988 +f 967 988 990 +f 967 990 968 +f 968 990 991 +f 968 991 969 +f 969 992 993 +f 969 993 970 +f 969 991 992 +f 970 993 994 +f 970 994 995 +f 970 995 972 +f 970 972 971 +f 972 995 996 +f 972 996 997 +f 972 997 998 +f 972 998 973 +f 973 998 999 +f 973 999 1000 +f 973 1000 1001 +f 973 1001 974 +f 974 1001 976 +f 976 1001 1003 +f 976 1003 1004 +f 976 1004 1005 +f 976 1005 978 +f 976 978 977 +f 978 1006 1002 +f 978 1005 1006 +f 979 1007 980 +f 980 1007 1008 +f 980 1008 1009 +f 980 1009 981 +f 981 1009 1010 +f 981 1010 1011 +f 981 1011 982 +f 982 1011 1012 +f 982 1012 983 +f 983 1012 1013 +f 983 1013 1014 +f 983 1014 986 +f 984 986 1015 +f 984 1015 985 +f 985 1015 1016 +f 985 1016 987 +f 986 1014 1017 +f 986 1017 1015 +f 987 1016 989 +f 988 1018 1019 +f 988 1019 990 +f 988 989 1020 +f 988 1020 1018 +f 989 1016 1021 +f 989 1021 1020 +f 990 1019 991 +f 991 1022 992 +f 991 1019 1022 +f 992 1022 1023 +f 992 1023 993 +f 993 1024 994 +f 993 1023 1024 +f 994 1024 1025 +f 994 1025 1026 +f 994 1026 1027 +f 994 1027 1028 +f 994 1028 995 +f 995 1028 1029 +f 995 1029 996 +f 996 1029 997 +f 997 1029 998 +f 998 1029 1030 +f 998 1030 1031 +f 998 1031 999 +f 999 1031 1000 +f 1000 1031 1001 +f 1001 1031 1003 +f 1003 1031 1032 +f 1003 1032 1033 +f 1003 1033 1004 +f 1004 1034 1035 +f 1004 1035 1036 +f 1004 1036 1005 +f 1004 1033 1034 +f 1010 1037 1038 +f 1010 1038 1039 +f 1010 1039 1011 +f 1011 1039 1038 +f 1011 1038 1040 +f 1011 1040 1012 +f 1012 1040 1041 +f 1012 1041 1013 +f 1013 1041 1014 +f 1014 1042 1017 +f 1014 1041 1043 +f 1014 1043 1042 +f 1015 1017 1044 +f 1015 1044 1045 +f 1015 1045 1016 +f 1016 1045 1021 +f 1017 1042 1044 +f 1018 1046 1047 +f 1018 1047 1048 +f 1018 1048 1019 +f 1018 1020 1049 +f 1018 1049 1046 +f 1019 1048 1022 +f 1020 1021 1050 +f 1020 1050 1049 +f 1021 1045 1051 +f 1021 1051 1050 +f 1022 1052 1023 +f 1022 1048 1052 +f 1023 1052 1053 +f 1023 1053 1024 +f 1024 1054 1025 +f 1024 1053 1054 +f 1025 1054 1055 +f 1025 1055 1056 +f 1025 1056 1057 +f 1025 1057 1058 +f 1025 1058 1026 +f 1026 1058 1059 +f 1026 1059 1027 +f 1027 1059 1028 +f 1028 1059 1029 +f 1029 1059 1060 +f 1029 1060 1030 +f 1030 1060 1061 +f 1030 1061 1062 +f 1030 1062 1063 +f 1030 1063 1031 +f 1031 1063 1032 +f 1032 1063 1064 +f 1032 1064 1065 +f 1032 1065 1033 +f 1033 1066 1067 +f 1033 1067 1068 +f 1033 1068 1034 +f 1033 1065 1069 +f 1033 1069 1066 +f 1034 1070 1035 +f 1035 1070 1036 +f 1037 1071 1038 +f 1038 1071 1072 +f 1038 1072 1073 +f 1038 1073 1040 +f 1040 1073 1074 +f 1040 1074 1041 +f 1041 1074 1075 +f 1041 1075 1043 +f 1042 1043 1076 +f 1042 1076 1077 +f 1042 1077 1044 +f 1043 1075 1078 +f 1043 1078 1076 +f 1044 1077 1079 +f 1044 1079 1045 +f 1045 1079 1051 +f 1046 1080 1081 +f 1046 1081 1047 +f 1046 1049 1082 +f 1046 1082 1083 +f 1046 1083 1080 +f 1047 1081 1084 +f 1047 1084 1052 +f 1047 1052 1048 +f 1049 1050 1085 +f 1049 1085 1082 +f 1050 1051 1086 +f 1050 1086 1085 +f 1051 1079 1087 +f 1051 1087 1086 +f 1052 1084 1053 +f 1053 1084 1088 +f 1053 1088 1054 +f 1054 1088 1089 +f 1054 1089 1055 +f 1055 1090 1091 +f 1055 1091 1092 +f 1055 1092 1056 +f 1055 1089 1093 +f 1055 1093 1090 +f 1056 1094 1095 +f 1056 1095 1059 +f 1056 1059 1057 +f 1056 1092 1094 +f 1057 1059 1058 +f 1059 1095 1096 +f 1059 1096 1060 +f 1060 1096 1061 +f 1061 1097 1062 +f 1061 1096 1098 +f 1061 1098 1097 +f 1062 1097 1099 +f 1062 1099 1100 +f 1062 1100 1063 +f 1063 1100 1064 +f 1064 1100 1101 +f 1064 1101 1102 +f 1064 1102 1065 +f 1065 1103 1069 +f 1065 1102 1104 +f 1065 1104 1103 +f 1066 1069 1105 +f 1066 1105 1067 +f 1069 1103 1106 +f 1072 1107 1073 +f 1073 1107 1108 +f 1073 1108 1109 +f 1073 1109 1074 +f 1074 1109 1110 +f 1074 1110 1111 +f 1074 1111 1075 +f 1075 1111 1112 +f 1075 1112 1078 +f 1076 1113 1077 +f 1076 1078 1114 +f 1076 1114 1115 +f 1076 1115 1113 +f 1077 1113 1116 +f 1077 1116 1079 +f 1078 1112 1117 +f 1078 1117 1114 +f 1079 1116 1087 +f 1080 1083 1118 +f 1080 1118 1119 +f 1080 1119 1120 +f 1080 1120 1081 +f 1081 1120 1084 +f 1082 1121 1083 +f 1082 1085 1122 +f 1082 1122 1121 +f 1083 1121 1123 +f 1083 1123 1124 +f 1083 1124 1118 +f 1084 1120 1088 +f 1085 1086 1125 +f 1085 1125 1122 +f 1086 1087 1125 +f 1087 1116 1126 +f 1087 1126 1127 +f 1087 1127 1128 +f 1087 1128 1125 +f 1088 1120 1129 +f 1088 1129 1089 +f 1089 1129 1130 +f 1089 1130 1093 +f 1090 1093 1131 +f 1090 1131 1132 +f 1090 1132 1094 +f 1090 1094 1091 +f 1091 1094 1092 +f 1093 1130 1133 +f 1093 1133 1134 +f 1093 1134 1131 +f 1094 1132 1135 +f 1094 1135 1136 +f 1094 1136 1095 +f 1095 1136 1098 +f 1095 1098 1096 +f 1097 1098 1137 +f 1097 1137 1099 +f 1098 1136 1137 +f 1099 1138 1139 +f 1099 1139 1100 +f 1099 1137 1140 +f 1099 1140 1138 +f 1100 1139 1101 +f 1101 1139 1141 +f 1101 1141 1142 +f 1101 1142 1102 +f 1102 1142 1106 +f 1102 1106 1104 +f 1103 1104 1106 +f 1106 1142 1143 +f 1108 1144 1145 +f 1108 1145 1146 +f 1108 1146 1111 +f 1108 1111 1109 +f 1109 1111 1110 +f 1111 1146 1145 +f 1111 1145 1180 +f 1111 1180 1212 +f 1111 1212 1248 +f 1111 1248 1284 +f 1111 1284 1283 +f 1111 1283 1323 +f 1111 1323 1322 +f 1111 1322 1321 +f 1111 1321 1320 +f 1111 1320 1319 +f 1111 1319 1356 +f 1111 1356 1390 +f 1111 1390 1392 +f 1111 1392 1357 +f 1111 1357 1324 +f 1111 1324 1285 +f 1111 1285 1251 +f 1111 1251 1250 +f 1111 1250 1249 +f 1111 1249 1221 +f 1111 1221 1220 +f 1111 1220 1219 +f 1111 1219 1190 +f 1111 1190 1189 +f 1111 1189 1162 +f 1111 1162 1161 +f 1111 1161 1159 +f 1111 1159 1127 +f 1111 1127 1150 +f 1111 1150 1148 +f 1111 1148 1115 +f 1111 1115 1149 +f 1111 1149 1117 +f 1111 1117 1112 +f 1113 1147 1116 +f 1113 1115 1148 +f 1113 1148 1147 +f 1114 1117 1149 +f 1114 1149 1115 +f 1116 1147 1148 +f 1116 1148 1150 +f 1116 1150 1126 +f 1118 1124 1151 +f 1118 1151 1119 +f 1119 1151 1152 +f 1119 1152 1129 +f 1119 1129 1120 +f 1121 1122 1153 +f 1121 1153 1123 +f 1122 1125 1154 +f 1122 1154 1153 +f 1123 1153 1155 +f 1123 1155 1156 +f 1123 1156 1124 +f 1124 1156 1157 +f 1124 1157 1151 +f 1125 1128 1158 +f 1125 1158 1154 +f 1126 1150 1127 +f 1127 1159 1128 +f 1128 1160 1158 +f 1128 1159 1161 +f 1128 1161 1162 +f 1128 1162 1160 +f 1129 1152 1130 +f 1130 1152 1163 +f 1130 1163 1133 +f 1131 1134 1132 +f 1132 1134 1164 +f 1132 1164 1165 +f 1132 1165 1135 +f 1133 1166 1167 +f 1133 1167 1168 +f 1133 1168 1134 +f 1133 1163 1166 +f 1134 1168 1164 +f 1135 1165 1169 +f 1135 1169 1170 +f 1135 1170 1136 +f 1136 1170 1140 +f 1136 1140 1137 +f 1138 1140 1171 +f 1138 1171 1172 +f 1138 1172 1173 +f 1138 1173 1139 +f 1139 1173 1141 +f 1140 1170 1171 +f 1141 1174 1142 +f 1141 1173 1174 +f 1142 1174 1175 +f 1142 1175 1176 +f 1142 1176 1177 +f 1142 1177 1143 +f 1143 1177 1178 +f 1144 1179 1180 +f 1144 1180 1145 +f 1151 1157 1181 +f 1151 1181 1152 +f 1152 1181 1163 +f 1153 1154 1182 +f 1153 1182 1183 +f 1153 1183 1155 +f 1154 1158 1184 +f 1154 1184 1182 +f 1155 1185 1186 +f 1155 1186 1156 +f 1155 1183 1185 +f 1156 1187 1157 +f 1156 1186 1187 +f 1157 1188 1181 +f 1157 1187 1188 +f 1158 1160 1162 +f 1158 1162 1189 +f 1158 1189 1190 +f 1158 1190 1184 +f 1163 1181 1191 +f 1163 1191 1166 +f 1164 1168 1167 +f 1164 1167 1192 +f 1164 1192 1193 +f 1164 1193 1165 +f 1165 1193 1194 +f 1165 1194 1169 +f 1166 1195 1196 +f 1166 1196 1197 +f 1166 1197 1167 +f 1166 1191 1198 +f 1166 1198 1195 +f 1167 1197 1192 +f 1169 1199 1200 +f 1169 1200 1170 +f 1169 1194 1199 +f 1170 1200 1171 +f 1171 1201 1172 +f 1171 1200 1201 +f 1172 1202 1203 +f 1172 1203 1173 +f 1172 1201 1202 +f 1173 1203 1174 +f 1174 1203 1204 +f 1174 1204 1205 +f 1174 1205 1175 +f 1175 1206 1207 +f 1175 1207 1208 +f 1175 1208 1209 +f 1175 1209 1176 +f 1175 1205 1210 +f 1175 1210 1206 +f 1176 1178 1177 +f 1179 1211 1180 +f 1180 1211 1212 +f 1181 1188 1191 +f 1182 1184 1213 +f 1182 1213 1214 +f 1182 1214 1215 +f 1182 1215 1183 +f 1183 1215 1216 +f 1183 1216 1217 +f 1183 1217 1185 +f 1184 1218 1213 +f 1184 1190 1219 +f 1184 1219 1220 +f 1184 1220 1221 +f 1184 1221 1218 +f 1185 1217 1222 +f 1185 1222 1223 +f 1185 1223 1224 +f 1185 1224 1225 +f 1185 1225 1186 +f 1186 1225 1226 +f 1186 1226 1187 +f 1187 1226 1227 +f 1187 1227 1188 +f 1188 1227 1228 +f 1188 1228 1191 +f 1191 1228 1198 +f 1192 1229 1230 +f 1192 1230 1193 +f 1192 1197 1196 +f 1192 1196 1195 +f 1192 1195 1231 +f 1192 1231 1232 +f 1192 1232 1229 +f 1193 1233 1194 +f 1193 1230 1233 +f 1194 1233 1234 +f 1194 1234 1199 +f 1195 1198 1235 +f 1195 1235 1231 +f 1198 1228 1236 +f 1198 1236 1235 +f 1199 1237 1238 +f 1199 1238 1200 +f 1199 1234 1237 +f 1200 1238 1201 +f 1201 1238 1239 +f 1201 1239 1202 +f 1202 1239 1240 +f 1202 1240 1241 +f 1202 1241 1203 +f 1203 1241 1204 +f 1204 1241 1242 +f 1204 1242 1243 +f 1204 1243 1205 +f 1205 1244 1210 +f 1205 1243 1245 +f 1205 1245 1244 +f 1207 1209 1208 +f 1210 1244 1246 +f 1211 1247 1248 +f 1211 1248 1212 +f 1213 1218 1221 +f 1213 1221 1249 +f 1213 1249 1250 +f 1213 1250 1214 +f 1214 1250 1251 +f 1214 1251 1215 +f 1215 1251 1216 +f 1216 1252 1253 +f 1216 1253 1217 +f 1216 1251 1252 +f 1217 1253 1222 +f 1222 1253 1252 +f 1222 1252 1254 +f 1222 1254 1223 +f 1223 1254 1255 +f 1223 1255 1256 +f 1223 1256 1224 +f 1224 1256 1225 +f 1225 1256 1257 +f 1225 1257 1258 +f 1225 1258 1226 +f 1226 1258 1259 +f 1226 1259 1227 +f 1227 1259 1260 +f 1227 1260 1228 +f 1228 1260 1261 +f 1228 1261 1236 +f 1229 1262 1230 +f 1229 1232 1263 +f 1229 1263 1264 +f 1229 1264 1262 +f 1230 1262 1265 +f 1230 1265 1233 +f 1231 1235 1236 +f 1231 1236 1266 +f 1231 1266 1232 +f 1232 1266 1263 +f 1233 1267 1234 +f 1233 1265 1267 +f 1234 1268 1237 +f 1234 1267 1268 +f 1236 1261 1269 +f 1236 1269 1266 +f 1237 1268 1270 +f 1237 1270 1271 +f 1237 1271 1238 +f 1238 1271 1239 +f 1239 1271 1272 +f 1239 1272 1240 +f 1240 1273 1241 +f 1240 1272 1274 +f 1240 1274 1273 +f 1241 1273 1242 +f 1242 1273 1275 +f 1242 1275 1276 +f 1242 1276 1243 +f 1243 1276 1277 +f 1243 1277 1278 +f 1243 1278 1279 +f 1243 1279 1245 +f 1244 1245 1280 +f 1244 1280 1246 +f 1245 1279 1281 +f 1247 1282 1283 +f 1247 1283 1284 +f 1247 1284 1248 +f 1251 1285 1286 +f 1251 1286 1287 +f 1251 1287 1252 +f 1252 1287 1254 +f 1254 1287 1288 +f 1254 1288 1255 +f 1255 1289 1256 +f 1255 1288 1290 +f 1255 1290 1289 +f 1256 1291 1257 +f 1256 1289 1291 +f 1257 1291 1292 +f 1257 1292 1293 +f 1257 1293 1258 +f 1258 1293 1294 +f 1258 1294 1295 +f 1258 1295 1259 +f 1259 1295 1296 +f 1259 1296 1260 +f 1260 1296 1261 +f 1261 1296 1297 +f 1261 1297 1298 +f 1261 1298 1299 +f 1261 1299 1300 +f 1261 1300 1269 +f 1262 1301 1265 +f 1262 1264 1302 +f 1262 1302 1301 +f 1263 1266 1303 +f 1263 1303 1264 +f 1264 1303 1304 +f 1264 1304 1302 +f 1265 1301 1305 +f 1265 1305 1267 +f 1266 1269 1300 +f 1266 1300 1299 +f 1266 1299 1298 +f 1266 1298 1303 +f 1267 1305 1306 +f 1267 1306 1268 +f 1268 1307 1270 +f 1268 1306 1307 +f 1270 1307 1308 +f 1270 1308 1309 +f 1270 1309 1271 +f 1271 1309 1272 +f 1272 1309 1310 +f 1272 1310 1274 +f 1273 1274 1311 +f 1273 1311 1312 +f 1273 1312 1275 +f 1274 1310 1311 +f 1275 1312 1313 +f 1275 1313 1314 +f 1275 1314 1276 +f 1276 1314 1315 +f 1276 1315 1316 +f 1276 1316 1317 +f 1276 1317 1277 +f 1277 1317 1318 +f 1278 1281 1279 +f 1282 1319 1320 +f 1282 1320 1321 +f 1282 1321 1322 +f 1282 1322 1323 +f 1282 1323 1283 +f 1285 1324 1325 +f 1285 1325 1326 +f 1285 1326 1327 +f 1285 1327 1328 +f 1285 1328 1286 +f 1286 1328 1287 +f 1287 1328 1288 +f 1288 1328 1329 +f 1288 1329 1290 +f 1289 1290 1330 +f 1289 1330 1331 +f 1289 1331 1291 +f 1290 1329 1332 +f 1290 1332 1330 +f 1291 1331 1292 +f 1292 1331 1293 +f 1293 1331 1294 +f 1294 1333 1295 +f 1294 1331 1334 +f 1294 1334 1333 +f 1295 1333 1335 +f 1295 1335 1336 +f 1295 1336 1337 +f 1295 1337 1338 +f 1295 1338 1296 +f 1296 1338 1297 +f 1297 1338 1339 +f 1297 1339 1298 +f 1298 1339 1303 +f 1301 1340 1305 +f 1301 1302 1341 +f 1301 1341 1340 +f 1302 1304 1341 +f 1303 1339 1342 +f 1303 1342 1304 +f 1304 1343 1341 +f 1304 1342 1344 +f 1304 1344 1343 +f 1305 1345 1306 +f 1305 1340 1345 +f 1306 1345 1346 +f 1306 1346 1307 +f 1307 1347 1308 +f 1307 1346 1348 +f 1307 1348 1347 +f 1308 1347 1349 +f 1308 1349 1309 +f 1309 1349 1310 +f 1310 1349 1350 +f 1310 1350 1351 +f 1310 1351 1311 +f 1311 1351 1352 +f 1311 1352 1353 +f 1311 1353 1312 +f 1312 1353 1313 +f 1313 1353 1354 +f 1313 1354 1355 +f 1313 1355 1314 +f 1314 1355 1315 +f 1315 1355 1316 +f 1316 1355 1317 +f 1317 1355 1318 +f 1324 1357 1358 +f 1324 1358 1359 +f 1324 1359 1325 +f 1325 1359 1326 +f 1326 1360 1329 +f 1326 1329 1328 +f 1326 1328 1327 +f 1326 1359 1360 +f 1329 1361 1332 +f 1329 1360 1361 +f 1330 1362 1331 +f 1330 1332 1363 +f 1330 1363 1362 +f 1331 1362 1334 +f 1332 1361 1364 +f 1332 1364 1363 +f 1333 1334 1335 +f 1334 1362 1365 +f 1334 1365 1366 +f 1334 1366 1367 +f 1334 1367 1337 +f 1334 1337 1336 +f 1334 1336 1335 +f 1337 1367 1368 +f 1337 1368 1338 +f 1338 1369 1370 +f 1338 1370 1339 +f 1338 1368 1369 +f 1339 1370 1342 +f 1340 1341 1371 +f 1340 1371 1372 +f 1340 1372 1345 +f 1341 1343 1371 +f 1342 1370 1369 +f 1342 1369 1373 +f 1342 1373 1374 +f 1342 1374 1375 +f 1342 1375 1344 +f 1343 1376 1371 +f 1343 1344 1377 +f 1343 1377 1376 +f 1344 1375 1378 +f 1344 1378 1379 +f 1344 1379 1377 +f 1345 1372 1380 +f 1345 1380 1346 +f 1346 1380 1348 +f 1347 1348 1381 +f 1347 1381 1382 +f 1347 1382 1349 +f 1348 1380 1383 +f 1348 1383 1381 +f 1349 1382 1350 +f 1350 1382 1384 +f 1350 1384 1385 +f 1350 1385 1351 +f 1351 1385 1352 +f 1352 1385 1386 +f 1352 1386 1387 +f 1352 1387 1353 +f 1353 1387 1354 +f 1354 1387 1388 +f 1354 1388 1355 +f 1355 1388 1389 +f 1356 1391 1426 +f 1356 1426 1457 +f 1356 1457 1483 +f 1356 1483 1512 +f 1356 1512 1530 +f 1356 1530 1529 +f 1356 1529 1536 +f 1356 1536 1532 +f 1356 1532 1524 +f 1356 1524 1510 +f 1356 1510 1508 +f 1356 1508 1507 +f 1356 1507 1506 +f 1356 1506 1505 +f 1356 1505 1504 +f 1356 1504 1522 +f 1356 1522 1521 +f 1356 1521 1531 +f 1356 1531 1520 +f 1356 1520 1519 +f 1356 1519 1518 +f 1356 1518 1517 +f 1356 1517 1514 +f 1356 1514 1495 +f 1356 1495 1498 +f 1356 1498 1497 +f 1356 1497 1501 +f 1356 1501 1493 +f 1356 1493 1494 +f 1356 1494 1492 +f 1356 1492 1491 +f 1356 1491 1490 +f 1356 1490 1489 +f 1356 1489 1488 +f 1356 1488 1487 +f 1356 1487 1513 +f 1356 1513 1485 +f 1356 1485 1484 +f 1356 1484 1463 +f 1356 1463 1462 +f 1356 1462 1481 +f 1356 1481 1452 +f 1356 1452 1423 +f 1356 1423 1390 +f 1357 1392 1393 +f 1357 1393 1394 +f 1357 1394 1358 +f 1358 1394 1359 +f 1359 1394 1360 +f 1360 1394 1395 +f 1360 1395 1396 +f 1360 1396 1361 +f 1361 1396 1364 +f 1362 1397 1398 +f 1362 1398 1365 +f 1362 1363 1399 +f 1362 1399 1397 +f 1363 1364 1400 +f 1363 1400 1401 +f 1363 1401 1399 +f 1364 1402 1403 +f 1364 1403 1400 +f 1364 1396 1402 +f 1365 1404 1366 +f 1365 1398 1405 +f 1365 1405 1404 +f 1366 1404 1367 +f 1367 1373 1406 +f 1367 1406 1368 +f 1367 1404 1373 +f 1368 1406 1369 +f 1369 1406 1373 +f 1371 1407 1372 +f 1371 1376 1407 +f 1372 1407 1380 +f 1373 1404 1408 +f 1373 1408 1374 +f 1374 1408 1375 +f 1375 1408 1409 +f 1375 1409 1378 +f 1376 1410 1407 +f 1376 1377 1411 +f 1376 1411 1410 +f 1377 1379 1412 +f 1377 1412 1413 +f 1377 1413 1414 +f 1377 1414 1411 +f 1378 1409 1379 +f 1379 1409 1412 +f 1380 1407 1415 +f 1380 1415 1383 +f 1381 1383 1416 +f 1381 1416 1417 +f 1381 1417 1382 +f 1382 1417 1418 +f 1382 1418 1384 +f 1383 1415 1419 +f 1383 1419 1416 +f 1384 1418 1420 +f 1384 1420 1385 +f 1385 1420 1421 +f 1385 1421 1386 +f 1386 1422 1388 +f 1386 1388 1387 +f 1386 1421 1422 +f 1388 1422 1389 +f 1390 1423 1424 +f 1390 1424 1393 +f 1390 1393 1392 +f 1391 1425 1426 +f 1393 1424 1394 +f 1394 1424 1395 +f 1395 1427 1428 +f 1395 1428 1396 +f 1395 1424 1429 +f 1395 1429 1427 +f 1396 1428 1430 +f 1396 1430 1402 +f 1397 1405 1398 +f 1397 1399 1405 +f 1399 1401 1431 +f 1399 1431 1405 +f 1400 1403 1432 +f 1400 1432 1431 +f 1400 1431 1401 +f 1402 1430 1433 +f 1402 1433 1432 +f 1402 1432 1403 +f 1404 1405 1434 +f 1404 1434 1408 +f 1405 1435 1434 +f 1405 1431 1435 +f 1407 1410 1415 +f 1408 1434 1409 +f 1409 1436 1414 +f 1409 1414 1413 +f 1409 1413 1412 +f 1409 1434 1437 +f 1409 1437 1436 +f 1410 1438 1415 +f 1410 1411 1439 +f 1410 1439 1440 +f 1410 1440 1438 +f 1411 1414 1441 +f 1411 1441 1439 +f 1414 1436 1442 +f 1414 1442 1441 +f 1415 1438 1419 +f 1416 1419 1443 +f 1416 1443 1444 +f 1416 1444 1417 +f 1417 1444 1418 +f 1418 1444 1445 +f 1418 1445 1446 +f 1418 1446 1420 +f 1419 1438 1447 +f 1419 1447 1443 +f 1420 1446 1448 +f 1420 1448 1421 +f 1421 1448 1449 +f 1421 1449 1450 +f 1421 1450 1422 +f 1422 1450 1449 +f 1422 1449 1451 +f 1423 1452 1453 +f 1423 1453 1424 +f 1424 1453 1429 +f 1425 1454 1426 +f 1426 1454 1455 +f 1426 1455 1456 +f 1426 1456 1457 +f 1427 1429 1453 +f 1427 1453 1428 +f 1428 1453 1458 +f 1428 1458 1430 +f 1430 1458 1433 +f 1431 1459 1435 +f 1431 1432 1460 +f 1431 1460 1459 +f 1432 1461 1460 +f 1432 1433 1461 +f 1433 1458 1462 +f 1433 1462 1463 +f 1433 1463 1461 +f 1434 1435 1437 +f 1435 1464 1465 +f 1435 1465 1437 +f 1435 1459 1464 +f 1436 1437 1466 +f 1436 1466 1467 +f 1436 1467 1442 +f 1437 1465 1466 +f 1438 1440 1447 +f 1439 1441 1468 +f 1439 1468 1469 +f 1439 1469 1440 +f 1440 1469 1470 +f 1440 1470 1471 +f 1440 1471 1472 +f 1440 1472 1447 +f 1441 1442 1468 +f 1442 1467 1473 +f 1442 1473 1469 +f 1442 1469 1468 +f 1443 1447 1474 +f 1443 1474 1444 +f 1444 1474 1445 +f 1445 1474 1475 +f 1445 1475 1446 +f 1446 1475 1476 +f 1446 1476 1448 +f 1447 1472 1477 +f 1447 1477 1474 +f 1448 1476 1478 +f 1448 1478 1479 +f 1448 1479 1449 +f 1449 1479 1451 +f 1451 1479 1480 +f 1452 1481 1453 +f 1453 1481 1458 +f 1456 1482 1483 +f 1456 1483 1457 +f 1458 1481 1462 +f 1459 1460 1464 +f 1460 1461 1484 +f 1460 1484 1485 +f 1460 1485 1486 +f 1460 1486 1464 +f 1461 1463 1484 +f 1464 1487 1488 +f 1464 1488 1465 +f 1464 1486 1487 +f 1465 1488 1489 +f 1465 1489 1490 +f 1465 1490 1466 +f 1466 1490 1491 +f 1466 1491 1492 +f 1466 1492 1467 +f 1467 1493 1473 +f 1467 1492 1494 +f 1467 1494 1493 +f 1469 1473 1470 +f 1470 1473 1471 +f 1471 1495 1496 +f 1471 1496 1472 +f 1471 1473 1497 +f 1471 1497 1498 +f 1471 1498 1495 +f 1472 1499 1477 +f 1472 1496 1500 +f 1472 1500 1499 +f 1473 1493 1501 +f 1473 1501 1497 +f 1474 1477 1475 +f 1475 1477 1502 +f 1475 1502 1476 +f 1476 1502 1503 +f 1476 1503 1478 +f 1477 1499 1502 +f 1478 1503 1504 +f 1478 1504 1505 +f 1478 1505 1506 +f 1478 1506 1479 +f 1479 1506 1507 +f 1479 1507 1508 +f 1479 1508 1480 +f 1480 1508 1510 +f 1480 1510 1509 +f 1482 1511 1483 +f 1483 1511 1512 +f 1485 1513 1486 +f 1486 1513 1487 +f 1495 1514 1500 +f 1495 1500 1496 +f 1499 1515 1502 +f 1499 1500 1516 +f 1499 1516 1517 +f 1499 1517 1518 +f 1499 1518 1519 +f 1499 1519 1520 +f 1499 1520 1515 +f 1500 1514 1516 +f 1502 1515 1503 +f 1503 1515 1521 +f 1503 1521 1522 +f 1503 1522 1504 +f 1509 1510 1523 +f 1510 1524 1525 +f 1510 1525 1526 +f 1510 1526 1527 +f 1510 1527 1523 +f 1511 1528 1529 +f 1511 1529 1530 +f 1511 1530 1512 +f 1514 1517 1516 +f 1515 1520 1531 +f 1515 1531 1521 +f 1524 1532 1525 +f 1525 1532 1533 +f 1528 1534 1529 +f 1529 1534 1535 +f 1529 1535 1536 +f 1532 1536 1537 +f 1532 1537 1533 +f 1535 1537 1536 \ No newline at end of file diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link3.obj.convex.stl b/src/experiments/assets/robots/xarm7/meshes/collision/link3.obj.convex.stl new file mode 100644 index 0000000000000000000000000000000000000000..4fad3110060e88386fda59758e75945eb49532be --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link3.obj.convex.stl @@ -0,0 +1,2354 @@ +solid AssimpScene + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0222289488 -0.0671907514 -0.0294775497 + vertex 0.0493775569 -0.0671907514 -0.042084299 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0493775569 -0.0671907514 -0.042084299 + vertex 0.0692810491 -0.0671907514 -0.0386790782 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0692810491 -0.0671907514 -0.0386790782 + vertex 0.0780445188 -0.0671907514 -0.0335258916 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0780445188 -0.0671907514 -0.0335258916 + vertex 0.0853226557 -0.0671907514 -0.0264186207 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0853226557 -0.0671907514 -0.0264186207 + vertex 0.0906946212 -0.0671907514 -0.0177695192 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0906946212 -0.0671907514 -0.0177695192 + vertex 0.0938303322 -0.0671907514 -0.00809803046 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0938303322 -0.0671907514 -0.00809803046 + vertex 0.0945647359 -0.0671947673 0.00204344001 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0945647359 -0.0671947673 0.00204344001 + vertex 0.0928566083 -0.0671907514 0.0120694702 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0928566083 -0.0671907514 0.0120694702 + vertex 0.0887884423 -0.0671907514 0.02139467 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0887884423 -0.0671907514 0.02139467 + vertex 0.0826077983 -0.0671907514 0.0294748619 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0826077983 -0.0671907514 0.0294748619 + vertex 0.0746777579 -0.0671907514 0.0358483195 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0746777579 -0.0671907514 0.0358483195 + vertex 0.0654521808 -0.0671907514 0.0401357748 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0654521808 -0.0671907514 0.0401357748 + vertex 0.0554674305 -0.0671907514 0.0420816094 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0554674305 -0.0671907514 0.0420816094 + vertex 0.0453176461 -0.0671907514 0.0415951498 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0453176461 -0.0671907514 0.0415951498 + vertex 0.0355639458 -0.0671907514 0.0386846289 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0355639458 -0.0671907514 0.0386846289 + vertex 0.0268004797 -0.0671907514 0.0335231982 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0268004797 -0.0671907514 0.0335231982 + vertex 0.0195223391 -0.0671907514 0.0264159311 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0195223391 -0.0671907514 0.0264159311 + vertex 0.0141503802 -0.0671907514 0.0177750792 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0141503802 -0.0671907514 0.0177750792 + vertex 0.0110146701 -0.0671907514 0.00809533987 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.0110146701 -0.0671907514 0.00809533987 + vertex 0.010272 -0.0671907514 -0.00203788001 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0197430681 0.0376260951 -0.101101093 + vertex -0.00284623005 0.0600525327 -0.0209086519 + vertex -0.0101703601 0.0412526913 -0.101096392 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0464618094 0.0641433671 0.0290146302 + vertex 0.0544048287 0.0581562482 0.0337859504 + vertex 0.0614603981 0.061914213 0.0273085795 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 1.74000002e-06 0.0424864814 -0.101096392 + vertex -0.0197430681 0.0376260951 -0.101101093 + vertex -0.0101703601 0.0412526913 -0.101096392 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 1.74000002e-06 -0.0424956083 -0.101101093 + vertex 0.0101650301 -0.041261822 -0.101101093 + vertex 0.0692810491 -0.0671907514 -0.0386790782 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 1.74000002e-06 -0.0424956083 -0.101101093 + vertex 0.0692810491 -0.0671907514 -0.0386790782 + vertex 0.0493775569 -0.0671907514 -0.042084299 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0811861306 0.0337408297 0.0275991708 + vertex 0.0838133097 0.0107563008 0.0282084718 + vertex 0.0890764296 0.023378212 0.0182065219 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158028305 0.0518327914 -0.0306675117 + vertex -0.00284623005 0.0600525327 -0.0209086519 + vertex -0.0197430681 0.0376260951 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0401666015 -0.0138940699 -0.0845504999 + vertex -0.0349747799 -0.0241382793 -0.101101093 + vertex -0.033969909 -0.0253440402 -0.0830728486 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00894336961 0.0627501383 -0.0251571592 + vertex -0.0101703601 0.0412526913 -0.101096392 + vertex -0.00284623005 0.0600525327 -0.0209086519 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00894336961 0.0627501383 -0.0251571592 + vertex 1.74000002e-06 0.0424864814 -0.101096392 + vertex -0.0101703601 0.0412526913 -0.101096392 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0164593607 0.0420593806 0.000937149976 + vertex -0.018372409 0.0323119983 0.000153810019 + vertex -0.00444624014 0.0431269892 0.0148250498 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0454513617 0.0516419597 0.03746989 + vertex 0.0437555611 0.03319107 0.0409007408 + vertex 0.0569704883 0.0468974411 0.0382947885 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0454513617 0.0516419597 0.03746989 + vertex 0.0569704883 0.0468974411 0.0382947885 + vertex 0.0544048287 0.0581562482 0.0337859504 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0578227788 0.0260592401 0.04156629 + vertex 0.0569704883 0.0468974411 0.0382947885 + vertex 0.0437555611 0.03319107 0.0409007408 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0578227788 0.0260592401 0.04156629 + vertex 0.0437555611 0.03319107 0.0409007408 + vertex 0.0534127206 -0.00928466022 0.0427684188 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0197465476 -0.0376352221 -0.101101093 + vertex 0.0692810491 -0.0671907514 -0.0386790782 + vertex 0.0101650301 -0.041261822 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0294159688 0.0270173401 -0.0175117198 + vertex -0.0319246799 0.0290570818 -0.0259308405 + vertex -0.0349812172 0.0129995104 -0.0315753184 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0260155797 0.0679841712 0.00958253071 + vertex 0.0314368606 0.0662369877 0.0216654893 + vertex 0.0435183272 0.0687824488 0.0159567799 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0260155797 0.0679841712 0.00958253071 + vertex 0.0435183272 0.0687824488 0.0159567799 + vertex 0.0296356194 0.0682101026 -0.00295975991 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0635955334 0.0591503382 -0.0162988193 + vertex 0.0550638065 0.0646931306 -0.00932464004 + vertex 0.0659854636 0.0631417483 -0.00159116997 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0635955334 0.0591503382 -0.0162988193 + vertex 0.0659854636 0.0631417483 -0.00159116997 + vertex 0.0739372596 0.0549706481 -0.0108713303 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0635955334 0.0591503382 -0.0162988193 + vertex 0.0739372596 0.0549706481 -0.0108713303 + vertex 0.0281821694 0.0318029597 -0.101096392 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0635955334 0.0591503382 -0.0162988193 + vertex 0.0281821694 0.0318029597 -0.101096392 + vertex 0.0197465476 0.0376260951 -0.101096392 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.038289085 -0.00936082006 -0.0609222502 + vertex -0.0401930511 -0.00138790999 -0.0591151901 + vertex -0.0401666015 -0.0138940699 -0.0845504999 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.038289085 -0.00936082006 -0.0609222502 + vertex -0.0401666015 -0.0138940699 -0.0845504999 + vertex -0.033969909 -0.0253440402 -0.0830728486 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0905437768 0.0317300595 0.00600168994 + vertex 0.0879429802 0.0383497886 -0.00281915022 + vertex 0.082864359 0.0496763699 0.00459560985 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.033598341 0.0209306404 0.0385197736 + vertex 0.0216223188 0.0458732322 0.031967409 + vertex 0.0355639458 -0.0671907514 0.0386846289 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0335368402 0.0460991599 0.0367574692 + vertex 0.0437555611 0.03319107 0.0409007408 + vertex 0.0454513617 0.0516419597 0.03746989 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0335368402 0.0460991599 0.0367574692 + vertex 0.0454513617 0.0516419597 0.03746989 + vertex 0.0320694894 0.05824662 0.0316393189 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0335368402 0.0460991599 0.0367574692 + vertex 0.0216223188 0.0458732322 0.031967409 + vertex 0.033598341 0.0209306404 0.0385197736 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0335368402 0.0460991599 0.0367574692 + vertex 0.033598341 0.0209306404 0.0385197736 + vertex 0.0437555611 0.03319107 0.0409007408 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0473316759 0.0683456659 0.00268333009 + vertex 0.0571637861 0.0672310665 0.0144100906 + vertex 0.0659854636 0.0631417483 -0.00159116997 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0473316759 0.0683456659 0.00268333009 + vertex 0.0659854636 0.0631417483 -0.00159116997 + vertex 0.0550638065 0.0646931306 -0.00932464004 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0473316759 0.0683456659 0.00268333009 + vertex 0.0296356194 0.0682101026 -0.00295975991 + vertex 0.0435183272 0.0687824488 0.0159567799 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0473316759 0.0683456659 0.00268333009 + vertex 0.0435183272 0.0687824488 0.0159567799 + vertex 0.0571637861 0.0672310665 0.0144100906 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0366464481 -0.000992269954 -0.0450239517 + vertex -0.0401930511 -0.00138790999 -0.0591151901 + vertex -0.038289085 -0.00936082006 -0.0609222502 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0366464481 -0.000992269954 -0.0450239517 + vertex -0.038289085 -0.00936082006 -0.0609222502 + vertex 0.0141503802 -0.0671907514 0.0177750792 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0366464481 -0.000992269954 -0.0450239517 + vertex 0.0141503802 -0.0671907514 0.0177750792 + vertex -0.0349812172 0.0129995104 -0.0315753184 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.055696439 0.0655366108 0.0241964422 + vertex 0.0571637861 0.0672310665 0.0144100906 + vertex 0.0435183272 0.0687824488 0.0159567799 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.055696439 0.0655366108 0.0241964422 + vertex 0.0464618094 0.0641433671 0.0290146302 + vertex 0.0614603981 0.061914213 0.0273085795 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.055696439 0.0655366108 0.0241964422 + vertex 0.0614603981 0.061914213 0.0273085795 + vertex 0.0695000663 0.0607243143 0.02059686 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0174223594 0.0587662645 0.023709001 + vertex 0.0314368606 0.0662369877 0.0216654893 + vertex 0.0100065302 0.0606264137 0.0146631803 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0174223594 0.0587662645 0.023709001 + vertex 0.0100065302 0.0606264137 0.0146631803 + vertex 0.0101471189 0.053313829 0.0228653513 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0814585164 0.0496613123 -0.00421585981 + vertex 0.082864359 0.0496763699 0.00459560985 + vertex 0.0879429802 0.0383497886 -0.00281915022 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0814585164 0.0496613123 -0.00421585981 + vertex 0.0879429802 0.0383497886 -0.00281915022 + vertex 0.0826886296 0.0394116603 -0.0161113497 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0327460505 0.0651224032 -0.0178923905 + vertex 1.74000002e-06 0.0424864814 -0.101096392 + vertex 0.00894336961 0.0627501383 -0.0251571592 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0327460505 0.0651224032 -0.0178923905 + vertex 0.00894336961 0.0627501383 -0.0251571592 + vertex 0.0296356194 0.0682101026 -0.00295975991 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0327460505 0.0651224032 -0.0178923905 + vertex 0.0296356194 0.0682101026 -0.00295975991 + vertex 0.0473316759 0.0683456659 0.00268333009 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0327460505 0.0651224032 -0.0178923905 + vertex 0.0473316759 0.0683456659 0.00268333009 + vertex 0.0550638065 0.0646931306 -0.00932464004 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0779263377 0.00488214055 0.0339265615 + vertex 0.0838133097 0.0107563008 0.0282084718 + vertex 0.0811861306 0.0337408297 0.0275991708 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0930479467 0.0196202509 -0.00213486003 + vertex 0.0879429802 0.0383497886 -0.00281915022 + vertex 0.0905437768 0.0317300595 0.00600168994 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0170767605 0.0508867018 -0.0179143697 + vertex -0.01012454 0.054957509 -0.00674988003 + vertex -0.00284623005 0.0600525327 -0.0209086519 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0170767605 0.0508867018 -0.0179143697 + vertex -0.00284623005 0.0600525327 -0.0209086519 + vertex -0.0158028305 0.0518327914 -0.0306675117 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0170767605 0.0508867018 -0.0179143697 + vertex -0.0158028305 0.0518327914 -0.0306675117 + vertex -0.0275681298 0.0397071652 -0.0357555896 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0170767605 0.0508867018 -0.0179143697 + vertex -0.0275681298 0.0397071652 -0.0357555896 + vertex -0.0223898403 0.04302283 -0.0126652298 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0919408426 0.00146307005 0.0144850807 + vertex 0.0928566083 -0.0671907514 0.0120694702 + vertex 0.0940496102 0.0106809903 0.00213964004 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0919408426 0.00146307005 0.0144850807 + vertex 0.0890764296 0.023378212 0.0182065219 + vertex 0.0838133097 0.0107563008 0.0282084718 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0919408426 0.00146307005 0.0144850807 + vertex 0.0838133097 0.0107563008 0.0282084718 + vertex 0.0887884423 -0.0671907514 0.02139467 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0919408426 0.00146307005 0.0144850807 + vertex 0.0887884423 -0.0671907514 0.02139467 + vertex 0.0928566083 -0.0671907514 0.0120694702 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0281786807 -0.0318121016 -0.101101093 + vertex 0.010272 -0.0671907514 -0.00203788001 + vertex -0.033969909 -0.0253440402 -0.0830728486 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0281786807 -0.0318121016 -0.101101093 + vertex -0.033969909 -0.0253440402 -0.0830728486 + vertex -0.0349747799 -0.0241382793 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0281786807 -0.0318121016 -0.101101093 + vertex -0.0197430681 -0.0376352221 -0.101101093 + vertex 0.010272 -0.0671907514 -0.00203788001 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0397346877 0.0150626507 -0.101101093 + vertex -0.0421851613 0.00512689026 -0.101101093 + vertex -0.0383116715 0.017512992 -0.0497752726 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0397346877 -0.0150717804 -0.101101093 + vertex -0.0349747799 -0.0241382793 -0.101101093 + vertex -0.0401666015 -0.0138940699 -0.0845504999 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0397346877 -0.0150717804 -0.101101093 + vertex -0.0401666015 -0.0138940699 -0.0845504999 + vertex -0.0421851613 -0.00512667047 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0906946212 -0.0671907514 -0.0177695192 + vertex 0.0853226557 -0.0671907514 -0.0264186207 + vertex 0.042188637 -0.00512667047 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0906946212 -0.0671907514 -0.0177695192 + vertex 0.042188637 -0.00512667047 -0.101101093 + vertex 0.090563558 -0.0259932894 -0.0187345296 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0281786807 0.0318029597 -0.101096392 + vertex -0.0349747799 0.0241291523 -0.101101093 + vertex -0.0275681298 0.0397071652 -0.0357555896 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0281786807 0.0318029597 -0.101096392 + vertex -0.0275681298 0.0397071652 -0.0357555896 + vertex -0.0158028305 0.0518327914 -0.0306675117 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0281786807 0.0318029597 -0.101096392 + vertex -0.0158028305 0.0518327914 -0.0306675117 + vertex -0.0197430681 0.0376260951 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0281786807 0.0318029597 -0.101096392 + vertex -0.0197430681 0.0376260951 -0.101101093 + vertex -0.0349747799 0.0241291523 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0945647359 -0.0671947673 0.00204344001 + vertex 0.0940496102 0.0106809903 0.00213964004 + vertex 0.0928566083 -0.0671907514 0.0120694702 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0268004797 -0.0671907514 0.0335231982 + vertex 0.0355639458 -0.0671907514 0.0386846289 + vertex 0.0216223188 0.0458732322 0.031967409 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0268004797 -0.0671907514 0.0335231982 + vertex -0.00444624014 0.0431269892 0.0148250498 + vertex -0.018372409 0.0323119983 0.000153810019 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0268004797 -0.0671907514 0.0335231982 + vertex -0.018372409 0.0323119983 0.000153810019 + vertex 0.0195223391 -0.0671907514 0.0264159311 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0826077983 -0.0671907514 0.0294748619 + vertex 0.0887884423 -0.0671907514 0.02139467 + vertex 0.0838133097 0.0107563008 0.0282084718 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0826077983 -0.0671907514 0.0294748619 + vertex 0.0838133097 0.0107563008 0.0282084718 + vertex 0.0779263377 0.00488214055 0.0339265615 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0826077983 -0.0671907514 0.0294748619 + vertex 0.0779263377 0.00488214055 0.0339265615 + vertex 0.0746777579 -0.0671907514 0.0358483195 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0115529597 0.0655366108 -0.00638122996 + vertex 0.0296356194 0.0682101026 -0.00295975991 + vertex 0.00894336961 0.0627501383 -0.0251571592 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0115529597 0.0655366108 -0.00638122996 + vertex 0.00894336961 0.0627501383 -0.0251571592 + vertex -0.00284623005 0.0600525327 -0.0209086519 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0115529597 0.0655366108 -0.00638122996 + vertex -0.00284623005 0.0600525327 -0.0209086519 + vertex 0.0082053002 0.0639927536 0.00108038995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0115529597 0.0655366108 -0.00638122996 + vertex 0.0082053002 0.0639927536 0.00108038995 + vertex 0.0260155797 0.0679841712 0.00958253071 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0115529597 0.0655366108 -0.00638122996 + vertex 0.0260155797 0.0679841712 0.00958253071 + vertex 0.0296356194 0.0682101026 -0.00295975991 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0554674305 -0.0671907514 0.0420816094 + vertex 0.0534127206 -0.00928466022 0.0427684188 + vertex 0.0453176461 -0.0671907514 0.0415951498 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0101703601 -0.041261822 -0.101101093 + vertex 1.74000002e-06 -0.0424956083 -0.101101093 + vertex 0.0493775569 -0.0671907514 -0.042084299 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0101703601 -0.041261822 -0.101101093 + vertex 0.0493775569 -0.0671907514 -0.042084299 + vertex 0.0222289488 -0.0671907514 -0.0294775497 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0447308682 0.0583219305 0.0342546403 + vertex 0.0320694894 0.05824662 0.0316393189 + vertex 0.0454513617 0.0516419597 0.03746989 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0447308682 0.0583219305 0.0342546403 + vertex 0.0454513617 0.0516419597 0.03746989 + vertex 0.0544048287 0.0581562482 0.0337859504 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0447308682 0.0583219305 0.0342546403 + vertex 0.0544048287 0.0581562482 0.0337859504 + vertex 0.0464618094 0.0641433671 0.0290146302 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0935267881 -0.0259932894 -0.0107923197 + vertex 0.0906052813 0.0164497104 -0.0144427903 + vertex 0.0930479467 0.0196202509 -0.00213486003 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0935267881 -0.0259932894 -0.0107923197 + vertex 0.0930479467 0.0196202509 -0.00213486003 + vertex 0.0940496102 0.0106809903 0.00213964004 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0935267881 -0.0259932894 -0.0107923197 + vertex 0.0940496102 0.0106809903 0.00213964004 + vertex 0.0945647359 -0.0671947673 0.00204344001 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0935267881 -0.0259932894 -0.0107923197 + vertex 0.0945647359 -0.0671947673 0.00204344001 + vertex 0.0938303322 -0.0671907514 -0.00809803046 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0935267881 -0.0259932894 -0.0107923197 + vertex 0.0938303322 -0.0671907514 -0.00809803046 + vertex 0.0906946212 -0.0671907514 -0.0177695192 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0935267881 -0.0259932894 -0.0107923197 + vertex 0.0906946212 -0.0671907514 -0.0177695192 + vertex 0.090563558 -0.0259932894 -0.0187345296 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0935267881 -0.0259932894 -0.0107923197 + vertex 0.090563558 -0.0259932894 -0.0187345296 + vertex 0.0906052813 0.0164497104 -0.0144427903 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0387812369 0.0117149102 -0.0457194485 + vertex -0.0349812172 0.0129995104 -0.0315753184 + vertex -0.0319246799 0.0290570818 -0.0259308405 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0387812369 0.0117149102 -0.0457194485 + vertex -0.0319246799 0.0290570818 -0.0259308405 + vertex -0.0383116715 0.017512992 -0.0497752726 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0387812369 0.0117149102 -0.0457194485 + vertex -0.0401930511 -0.00138790999 -0.0591151901 + vertex -0.0366464481 -0.000992269954 -0.0450239517 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0387812369 0.0117149102 -0.0457194485 + vertex -0.0366464481 -0.000992269954 -0.0450239517 + vertex -0.0349812172 0.0129995104 -0.0315753184 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0197465476 0.0376260951 -0.101096392 + vertex 0.0281821694 0.0318029597 -0.101096392 + vertex 0.0397293605 0.0150626507 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0197465476 0.0376260951 -0.101096392 + vertex 0.0397293605 0.0150626507 -0.101101093 + vertex -0.0197430681 0.0376260951 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0197465476 0.0376260951 -0.101096392 + vertex -0.0197430681 0.0376260951 -0.101101093 + vertex 1.74000002e-06 0.0424864814 -0.101096392 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0197465476 0.0376260951 -0.101096392 + vertex 1.74000002e-06 0.0424864814 -0.101096392 + vertex 0.0101650301 0.0412526913 -0.101096392 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0101650301 0.0412526913 -0.101096392 + vertex 1.74000002e-06 0.0424864814 -0.101096392 + vertex 0.0327460505 0.0651224032 -0.0178923905 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0101650301 0.0412526913 -0.101096392 + vertex 0.0327460505 0.0651224032 -0.0178923905 + vertex 0.0550638065 0.0646931306 -0.00932464004 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0101650301 0.0412526913 -0.101096392 + vertex 0.0550638065 0.0646931306 -0.00932464004 + vertex 0.0635955334 0.0591503382 -0.0162988193 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0101650301 0.0412526913 -0.101096392 + vertex 0.0635955334 0.0591503382 -0.0162988193 + vertex 0.0197465476 0.0376260951 -0.101096392 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0631737709 0.00470138993 0.0412850715 + vertex 0.0694824979 0.0274148099 0.03779798 + vertex 0.0578227788 0.0260592401 0.04156629 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0631737709 0.00470138993 0.0412850715 + vertex 0.0578227788 0.0260592401 0.04156629 + vertex 0.0534127206 -0.00928466022 0.0427684188 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0631737709 0.00470138993 0.0412850715 + vertex 0.0534127206 -0.00928466022 0.0427684188 + vertex 0.0554674305 -0.0671907514 0.0420816094 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0631737709 0.00470138993 0.0412850715 + vertex 0.0554674305 -0.0671907514 0.0420816094 + vertex 0.0654521808 -0.0671907514 0.0401357748 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0631737709 0.00470138993 0.0412850715 + vertex 0.0654521808 -0.0671907514 0.0401357748 + vertex 0.0746777579 -0.0671907514 0.0358483195 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0631737709 0.00470138993 0.0412850715 + vertex 0.0746777579 -0.0671907514 0.0358483195 + vertex 0.0779263377 0.00488214055 0.0339265615 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0631737709 0.00470138993 0.0412850715 + vertex 0.0779263377 0.00488214055 0.0339265615 + vertex 0.0694824979 0.0274148099 0.03779798 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0424143411 0.000219760012 -0.0821740329 + vertex -0.0401930511 -0.00138790999 -0.0591151901 + vertex -0.0387812369 0.0117149102 -0.0457194485 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0424143411 0.000219760012 -0.0821740329 + vertex -0.0387812369 0.0117149102 -0.0457194485 + vertex -0.0383116715 0.017512992 -0.0497752726 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0424143411 0.000219760012 -0.0821740329 + vertex -0.0383116715 0.017512992 -0.0497752726 + vertex -0.0421851613 0.00512689026 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0424143411 0.000219760012 -0.0821740329 + vertex -0.0421851613 0.00512689026 -0.101101093 + vertex -0.0421851613 -0.00512667047 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0424143411 0.000219760012 -0.0821740329 + vertex -0.0421851613 -0.00512667047 -0.101101093 + vertex -0.0401666015 -0.0138940699 -0.0845504999 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0424143411 0.000219760012 -0.0821740329 + vertex -0.0401666015 -0.0138940699 -0.0845504999 + vertex -0.0401930511 -0.00138790999 -0.0591151901 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0623829886 0.0523649342 0.0346577205 + vertex 0.0544048287 0.0581562482 0.0337859504 + vertex 0.0569704883 0.0468974411 0.0382947885 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0728740916 0.0549706481 0.0249838512 + vertex 0.0770916194 0.0540217422 0.0194251221 + vertex 0.0695000663 0.0607243143 0.02059686 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0728740916 0.0549706481 0.0249838512 + vertex 0.0709322691 0.0487575941 0.03152683 + vertex 0.0793673322 0.0462949723 0.0240089595 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0728740916 0.0549706481 0.0249838512 + vertex 0.0793673322 0.0462949723 0.0240089595 + vertex 0.0770916194 0.0540217422 0.0194251221 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00837223977 0.046844732 0.0241495706 + vertex -0.00444624014 0.0431269892 0.0148250498 + vertex 0.0268004797 -0.0671907514 0.0335231982 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00837223977 0.046844732 0.0241495706 + vertex 0.0268004797 -0.0671907514 0.0335231982 + vertex 0.0216223188 0.0458732322 0.031967409 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0152767403 0.0474581942 -0.00196927995 + vertex -0.00451580016 0.0534819514 0.00785547029 + vertex -0.01012454 0.054957509 -0.00674988003 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0152767403 0.0474581942 -0.00196927995 + vertex -0.01012454 0.054957509 -0.00674988003 + vertex -0.0170767605 0.0508867018 -0.0179143697 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0152767403 0.0474581942 -0.00196927995 + vertex -0.0170767605 0.0508867018 -0.0179143697 + vertex -0.0223898403 0.04302283 -0.0126652298 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.042188637 0.00512689026 -0.101101093 + vertex 0.0906052813 0.0164497104 -0.0144427903 + vertex 0.090563558 -0.0259932894 -0.0187345296 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.042188637 0.00512689026 -0.101101093 + vertex 0.090563558 -0.0259932894 -0.0187345296 + vertex 0.042188637 -0.00512667047 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.034969449 0.0241291523 -0.101096392 + vertex 0.0397293605 0.0150626507 -0.101101093 + vertex 0.0281821694 0.0318029597 -0.101096392 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.034969449 0.0241291523 -0.101096392 + vertex 0.0826886296 0.0394116603 -0.0161113497 + vertex 0.0397293605 0.0150626507 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0748071298 0.0584198423 0.00225213007 + vertex 0.082864359 0.0496763699 0.00459560985 + vertex 0.0814585164 0.0496613123 -0.00421585981 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0748071298 0.0584198423 0.00225213007 + vertex 0.0814585164 0.0496613123 -0.00421585981 + vertex 0.0739372596 0.0549706481 -0.0108713303 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0748071298 0.0584198423 0.00225213007 + vertex 0.0739372596 0.0549706481 -0.0108713303 + vertex 0.0659854636 0.0631417483 -0.00159116997 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0748071298 0.0584198423 0.00225213007 + vertex 0.0659854636 0.0631417483 -0.00159116997 + vertex 0.0722678229 0.06083728 0.00970438123 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0324551202 0.0315481797 -0.0362534188 + vertex -0.0383116715 0.017512992 -0.0497752726 + vertex -0.0319246799 0.0290570818 -0.0259308405 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0324551202 0.0315481797 -0.0362534188 + vertex -0.0319246799 0.0290570818 -0.0259308405 + vertex -0.0223898403 0.04302283 -0.0126652298 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0324551202 0.0315481797 -0.0362534188 + vertex -0.0223898403 0.04302283 -0.0126652298 + vertex -0.0275681298 0.0397071652 -0.0357555896 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0324551202 0.0315481797 -0.0362534188 + vertex -0.0275681298 0.0397071652 -0.0357555896 + vertex -0.0349747799 0.0241291523 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0324551202 0.0315481797 -0.0362534188 + vertex -0.0349747799 0.0241291523 -0.101101093 + vertex -0.0397346877 0.0150626507 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0324551202 0.0315481797 -0.0362534188 + vertex -0.0397346877 0.0150626507 -0.101101093 + vertex -0.0383116715 0.017512992 -0.0497752726 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0780445188 -0.0671907514 -0.0335258916 + vertex 0.0692810491 -0.0671907514 -0.0386790782 + vertex 0.0197465476 -0.0376352221 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0780445188 -0.0671907514 -0.0335258916 + vertex 0.034969449 -0.0241476297 -0.101101093 + vertex 0.0853226557 -0.0671907514 -0.0264186207 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00119293004 0.0602087751 0.00284791994 + vertex -0.01012454 0.054957509 -0.00674988003 + vertex -0.00451580016 0.0534819514 0.00785547029 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00119293004 0.0602087751 0.00284791994 + vertex -0.00451580016 0.0534819514 0.00785547029 + vertex 0.0100065302 0.0606264137 0.0146631803 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00119293004 0.0602087751 0.00284791994 + vertex 0.0082053002 0.0639927536 0.00108038995 + vertex -0.00284623005 0.0600525327 -0.0209086519 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00119293004 0.0602087751 0.00284791994 + vertex -0.00284623005 0.0600525327 -0.0209086519 + vertex -0.01012454 0.054957509 -0.00674988003 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0110146701 -0.0671907514 0.00809533987 + vertex 0.0141503802 -0.0671907514 0.0177750792 + vertex -0.038289085 -0.00936082006 -0.0609222502 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0110146701 -0.0671907514 0.00809533987 + vertex -0.038289085 -0.00936082006 -0.0609222502 + vertex -0.033969909 -0.0253440402 -0.0830728486 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0110146701 -0.0671907514 0.00809533987 + vertex -0.033969909 -0.0253440402 -0.0830728486 + vertex 0.010272 -0.0671907514 -0.00203788001 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0243988596 0.0536828488 0.0310675092 + vertex 0.0320694894 0.05824662 0.0316393189 + vertex 0.0174223594 0.0587662645 0.023709001 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0243988596 0.0536828488 0.0310675092 + vertex 0.0174223594 0.0587662645 0.023709001 + vertex 0.0101471189 0.053313829 0.0228653513 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0243988596 0.0536828488 0.0310675092 + vertex 0.0101471189 0.053313829 0.0228653513 + vertex 0.00837223977 0.046844732 0.0241495706 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0243988596 0.0536828488 0.0310675092 + vertex 0.00837223977 0.046844732 0.0241495706 + vertex 0.0216223188 0.0458732322 0.031967409 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0243988596 0.0536828488 0.0310675092 + vertex 0.0216223188 0.0458732322 0.031967409 + vertex 0.0335368402 0.0460991599 0.0367574692 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0243988596 0.0536828488 0.0310675092 + vertex 0.0335368402 0.0460991599 0.0367574692 + vertex 0.0320694894 0.05824662 0.0316393189 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0182570796 0.065325737 0.0127415303 + vertex 0.0314368606 0.0662369877 0.0216654893 + vertex 0.0260155797 0.0679841712 0.00958253071 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0182570796 0.065325737 0.0127415303 + vertex 0.0260155797 0.0679841712 0.00958253071 + vertex 0.0082053002 0.0639927536 0.00108038995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0182570796 0.065325737 0.0127415303 + vertex 0.0082053002 0.0639927536 0.00108038995 + vertex 0.00119293004 0.0602087751 0.00284791994 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0182570796 0.065325737 0.0127415303 + vertex 0.00119293004 0.0602087751 0.00284791994 + vertex 0.0100065302 0.0606264137 0.0146631803 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0182570796 0.065325737 0.0127415303 + vertex 0.0100065302 0.0606264137 0.0146631803 + vertex 0.0314368606 0.0662369877 0.0216654893 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0666180924 0.0564241298 0.0297364201 + vertex 0.0623829886 0.0523649342 0.0346577205 + vertex 0.0709322691 0.0487575941 0.03152683 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0666180924 0.0564241298 0.0297364201 + vertex 0.0709322691 0.0487575941 0.03152683 + vertex 0.0728740916 0.0549706481 0.0249838512 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0666180924 0.0564241298 0.0297364201 + vertex 0.0728740916 0.0549706481 0.0249838512 + vertex 0.0695000663 0.0607243143 0.02059686 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0666180924 0.0564241298 0.0297364201 + vertex 0.0695000663 0.0607243143 0.02059686 + vertex 0.0614603981 0.061914213 0.0273085795 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0666180924 0.0564241298 0.0297364201 + vertex 0.0614603981 0.061914213 0.0273085795 + vertex 0.0544048287 0.0581562482 0.0337859504 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0666180924 0.0564241298 0.0297364201 + vertex 0.0544048287 0.0581562482 0.0337859504 + vertex 0.0623829886 0.0523649342 0.0346577205 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0829785913 0.0483208001 0.0129665099 + vertex 0.086950101 0.0390275754 0.01378203 + vertex 0.0905437768 0.0317300595 0.00600168994 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0829785913 0.0483208001 0.0129665099 + vertex 0.0905437768 0.0317300595 0.00600168994 + vertex 0.082864359 0.0496763699 0.00459560985 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0829785913 0.0483208001 0.0129665099 + vertex 0.0770916194 0.0540217422 0.0194251221 + vertex 0.0793673322 0.0462949723 0.0240089595 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0829785913 0.0483208001 0.0129665099 + vertex 0.0793673322 0.0462949723 0.0240089595 + vertex 0.086950101 0.0390275754 0.01378203 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0849028379 0.0299904123 -0.0192047302 + vertex 0.0397293605 0.0150626507 -0.101101093 + vertex 0.0826886296 0.0394116603 -0.0161113497 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0849028379 0.0299904123 -0.0192047302 + vertex 0.0906052813 0.0164497104 -0.0144427903 + vertex 0.042188637 0.00512689026 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0849028379 0.0299904123 -0.0192047302 + vertex 0.042188637 0.00512689026 -0.101101093 + vertex 0.0397293605 0.0150626507 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.033888299 0.0638571978 0.0269711204 + vertex 0.0320694894 0.05824662 0.0316393189 + vertex 0.0447308682 0.0583219305 0.0342546403 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.033888299 0.0638571978 0.0269711204 + vertex 0.0447308682 0.0583219305 0.0342546403 + vertex 0.0464618094 0.0641433671 0.0290146302 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.033888299 0.0638571978 0.0269711204 + vertex 0.0314368606 0.0662369877 0.0216654893 + vertex 0.0174223594 0.0587662645 0.023709001 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.033888299 0.0638571978 0.0269711204 + vertex 0.0174223594 0.0587662645 0.023709001 + vertex 0.0320694894 0.05824662 0.0316393189 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00159404997 0.0507999025 0.0141807999 + vertex -0.00444624014 0.0431269892 0.0148250498 + vertex 0.00837223977 0.046844732 0.0241495706 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00159404997 0.0507999025 0.0141807999 + vertex 0.00837223977 0.046844732 0.0241495706 + vertex 0.0101471189 0.053313829 0.0228653513 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00159404997 0.0507999025 0.0141807999 + vertex 0.0101471189 0.053313829 0.0228653513 + vertex 0.0100065302 0.0606264137 0.0146631803 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00159404997 0.0507999025 0.0141807999 + vertex 0.0100065302 0.0606264137 0.0146631803 + vertex -0.00451580016 0.0534819514 0.00785547029 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00159404997 0.0507999025 0.0141807999 + vertex -0.00451580016 0.0534819514 0.00785547029 + vertex -0.0152767403 0.0474581942 -0.00196927995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00159404997 0.0507999025 0.0141807999 + vertex -0.0152767403 0.0474581942 -0.00196927995 + vertex -0.0164593607 0.0420593806 0.000937149976 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00159404997 0.0507999025 0.0141807999 + vertex -0.0164593607 0.0420593806 0.000937149976 + vertex -0.00444624014 0.0431269892 0.0148250498 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0742096379 0.0389371999 0.0327454396 + vertex 0.0694824979 0.0274148099 0.03779798 + vertex 0.0779263377 0.00488214055 0.0339265615 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0742096379 0.0389371999 0.0327454396 + vertex 0.0779263377 0.00488214055 0.0339265615 + vertex 0.0811861306 0.0337408297 0.0275991708 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0742096379 0.0389371999 0.0327454396 + vertex 0.0811861306 0.0337408297 0.0275991708 + vertex 0.0793673322 0.0462949723 0.0240089595 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0742096379 0.0389371999 0.0327454396 + vertex 0.0793673322 0.0462949723 0.0240089595 + vertex 0.0709322691 0.0487575941 0.03152683 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0779966265 0.0556107797 0.0116447797 + vertex 0.0770916194 0.0540217422 0.0194251221 + vertex 0.0829785913 0.0483208001 0.0129665099 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0779966265 0.0556107797 0.0116447797 + vertex 0.0829785913 0.0483208001 0.0129665099 + vertex 0.082864359 0.0496763699 0.00459560985 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0779966265 0.0556107797 0.0116447797 + vertex 0.082864359 0.0496763699 0.00459560985 + vertex 0.0748071298 0.0584198423 0.00225213007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0779966265 0.0556107797 0.0116447797 + vertex 0.0748071298 0.0584198423 0.00225213007 + vertex 0.0722678229 0.06083728 0.00970438123 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0779966265 0.0556107797 0.0116447797 + vertex 0.0722678229 0.06083728 0.00970438123 + vertex 0.0695000663 0.0607243143 0.02059686 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0779966265 0.0556107797 0.0116447797 + vertex 0.0695000663 0.0607243143 0.02059686 + vertex 0.0770916194 0.0540217422 0.0194251221 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex 0.010272 -0.0671907514 -0.00203788001 + vertex -0.0197430681 -0.0376352221 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex -0.0197430681 -0.0376352221 -0.101101093 + vertex -0.0101703601 -0.041261822 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119883902 -0.0671907514 -0.0120721608 + vertex -0.0101703601 -0.041261822 -0.101101093 + vertex 0.0222289488 -0.0671907514 -0.0294775497 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0234637503 0.0377889313 -0.00912918989 + vertex -0.0223898403 0.04302283 -0.0126652298 + vertex -0.0319246799 0.0290570818 -0.0259308405 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0234637503 0.0377889313 -0.00912918989 + vertex -0.0319246799 0.0290570818 -0.0259308405 + vertex -0.0294159688 0.0270173401 -0.0175117198 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0234637503 0.0377889313 -0.00912918989 + vertex -0.0294159688 0.0270173401 -0.0175117198 + vertex -0.018372409 0.0323119983 0.000153810019 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0234637503 0.0377889313 -0.00912918989 + vertex -0.018372409 0.0323119983 0.000153810019 + vertex -0.0164593607 0.0420593806 0.000937149976 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0234637503 0.0377889313 -0.00912918989 + vertex -0.0164593607 0.0420593806 0.000937149976 + vertex -0.0152767403 0.0474581942 -0.00196927995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0234637503 0.0377889313 -0.00912918989 + vertex -0.0152767403 0.0474581942 -0.00196927995 + vertex -0.0223898403 0.04302283 -0.0126652298 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0437907092 0.0669900775 0.0237464998 + vertex 0.0464618094 0.0641433671 0.0290146302 + vertex 0.055696439 0.0655366108 0.0241964422 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0437907092 0.0669900775 0.0237464998 + vertex 0.055696439 0.0655366108 0.0241964422 + vertex 0.0435183272 0.0687824488 0.0159567799 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0437907092 0.0669900775 0.0237464998 + vertex 0.0435183272 0.0687824488 0.0159567799 + vertex 0.0314368606 0.0662369877 0.0216654893 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0437907092 0.0669900775 0.0237464998 + vertex 0.0314368606 0.0662369877 0.0216654893 + vertex 0.033888299 0.0638571978 0.0269711204 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0437907092 0.0669900775 0.0237464998 + vertex 0.033888299 0.0638571978 0.0269711204 + vertex 0.0464618094 0.0641433671 0.0290146302 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0426484607 0.00400101021 0.0417162739 + vertex 0.0437555611 0.03319107 0.0409007408 + vertex 0.033598341 0.0209306404 0.0385197736 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0426484607 0.00400101021 0.0417162739 + vertex 0.033598341 0.0209306404 0.0385197736 + vertex 0.0355639458 -0.0671907514 0.0386846289 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0426484607 0.00400101021 0.0417162739 + vertex 0.0355639458 -0.0671907514 0.0386846289 + vertex 0.0453176461 -0.0671907514 0.0415951498 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0426484607 0.00400101021 0.0417162739 + vertex 0.0453176461 -0.0671907514 0.0415951498 + vertex 0.0534127206 -0.00928466022 0.0427684188 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0426484607 0.00400101021 0.0417162739 + vertex 0.0534127206 -0.00928466022 0.0427684188 + vertex 0.0437555611 0.03319107 0.0409007408 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0899990201 0.0261797309 -0.0106744803 + vertex 0.0906052813 0.0164497104 -0.0144427903 + vertex 0.0849028379 0.0299904123 -0.0192047302 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0899990201 0.0261797309 -0.0106744803 + vertex 0.0849028379 0.0299904123 -0.0192047302 + vertex 0.0826886296 0.0394116603 -0.0161113497 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0899990201 0.0261797309 -0.0106744803 + vertex 0.0826886296 0.0394116603 -0.0161113497 + vertex 0.0879429802 0.0383497886 -0.00281915022 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0899990201 0.0261797309 -0.0106744803 + vertex 0.0879429802 0.0383497886 -0.00281915022 + vertex 0.0930479467 0.0196202509 -0.00213486003 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0899990201 0.0261797309 -0.0106744803 + vertex 0.0930479467 0.0196202509 -0.00213486003 + vertex 0.0906052813 0.0164497104 -0.0144427903 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0918529779 0.0221205391 0.0103511801 + vertex 0.0940496102 0.0106809903 0.00213964004 + vertex 0.0930479467 0.0196202509 -0.00213486003 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0918529779 0.0221205391 0.0103511801 + vertex 0.0930479467 0.0196202509 -0.00213486003 + vertex 0.0905437768 0.0317300595 0.00600168994 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0918529779 0.0221205391 0.0103511801 + vertex 0.0905437768 0.0317300595 0.00600168994 + vertex 0.086950101 0.0390275754 0.01378203 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0918529779 0.0221205391 0.0103511801 + vertex 0.086950101 0.0390275754 0.01378203 + vertex 0.0890764296 0.023378212 0.0182065219 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0918529779 0.0221205391 0.0103511801 + vertex 0.0890764296 0.023378212 0.0182065219 + vertex 0.0919408426 0.00146307005 0.0144850807 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0918529779 0.0221205391 0.0103511801 + vertex 0.0919408426 0.00146307005 0.0144850807 + vertex 0.0940496102 0.0106809903 0.00213964004 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0674264506 0.0385983139 0.0369543247 + vertex 0.0694824979 0.0274148099 0.03779798 + vertex 0.0742096379 0.0389371999 0.0327454396 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0674264506 0.0385983139 0.0369543247 + vertex 0.0742096379 0.0389371999 0.0327454396 + vertex 0.0709322691 0.0487575941 0.03152683 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0674264506 0.0385983139 0.0369543247 + vertex 0.0709322691 0.0487575941 0.03152683 + vertex 0.0623829886 0.0523649342 0.0346577205 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0674264506 0.0385983139 0.0369543247 + vertex 0.0623829886 0.0523649342 0.0346577205 + vertex 0.0569704883 0.0468974411 0.0382947885 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0674264506 0.0385983139 0.0369543247 + vertex 0.0569704883 0.0468974411 0.0382947885 + vertex 0.0578227788 0.0260592401 0.04156629 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0674264506 0.0385983139 0.0369543247 + vertex 0.0578227788 0.0260592401 0.04156629 + vertex 0.0694824979 0.0274148099 0.03779798 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0656252131 0.064286463 0.0149912704 + vertex 0.0571637861 0.0672310665 0.0144100906 + vertex 0.055696439 0.0655366108 0.0241964422 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0656252131 0.064286463 0.0149912704 + vertex 0.055696439 0.0655366108 0.0241964422 + vertex 0.0695000663 0.0607243143 0.02059686 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0656252131 0.064286463 0.0149912704 + vertex 0.0695000663 0.0607243143 0.02059686 + vertex 0.0722678229 0.06083728 0.00970438123 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0656252131 0.064286463 0.0149912704 + vertex 0.0722678229 0.06083728 0.00970438123 + vertex 0.0659854636 0.0631417483 -0.00159116997 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0656252131 0.064286463 0.0149912704 + vertex 0.0659854636 0.0631417483 -0.00159116997 + vertex 0.0571637861 0.0672310665 0.0144100906 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0397293605 -0.0150717804 -0.101101093 + vertex 0.042188637 -0.00512667047 -0.101101093 + vertex 0.0853226557 -0.0671907514 -0.0264186207 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0397293605 -0.0150717804 -0.101101093 + vertex 0.0853226557 -0.0671907514 -0.0264186207 + vertex 0.034969449 -0.0241476297 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0738581792 0.049510695 -0.0190828703 + vertex 0.0826886296 0.0394116603 -0.0161113497 + vertex 0.034969449 0.0241291523 -0.101096392 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0738581792 0.049510695 -0.0190828703 + vertex 0.034969449 0.0241291523 -0.101096392 + vertex 0.0281821694 0.0318029597 -0.101096392 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0738581792 0.049510695 -0.0190828703 + vertex 0.0281821694 0.0318029597 -0.101096392 + vertex 0.0739372596 0.0549706481 -0.0108713303 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0738581792 0.049510695 -0.0190828703 + vertex 0.0739372596 0.0549706481 -0.0108713303 + vertex 0.0814585164 0.0496613123 -0.00421585981 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0738581792 0.049510695 -0.0190828703 + vertex 0.0814585164 0.0496613123 -0.00421585981 + vertex 0.0826886296 0.0394116603 -0.0161113497 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex 0.034969449 -0.0241476297 -0.101101093 + vertex 0.0780445188 -0.0671907514 -0.0335258916 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex 0.0780445188 -0.0671907514 -0.0335258916 + vertex 0.0197465476 -0.0376352221 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex 0.0197465476 -0.0376352221 -0.101101093 + vertex 0.0101650301 -0.041261822 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex 0.0101650301 -0.041261822 -0.101101093 + vertex 1.74000002e-06 -0.0424956083 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex 1.74000002e-06 -0.0424956083 -0.101101093 + vertex -0.0101703601 -0.041261822 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex -0.0101703601 -0.041261822 -0.101101093 + vertex -0.0197430681 -0.0376352221 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex -0.0197430681 -0.0376352221 -0.101101093 + vertex -0.0281786807 -0.0318121016 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex -0.0281786807 -0.0318121016 -0.101101093 + vertex -0.0349747799 -0.0241382793 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex -0.0349747799 -0.0241382793 -0.101101093 + vertex -0.0397346877 -0.0150717804 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex -0.0397346877 -0.0150717804 -0.101101093 + vertex -0.0421851613 -0.00512667047 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex -0.0421851613 -0.00512667047 -0.101101093 + vertex -0.0421851613 0.00512689026 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex -0.0421851613 0.00512689026 -0.101101093 + vertex -0.0397346877 0.0150626507 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex -0.0397346877 0.0150626507 -0.101101093 + vertex -0.0349747799 0.0241291523 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex -0.0349747799 0.0241291523 -0.101101093 + vertex -0.0197430681 0.0376260951 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex -0.0197430681 0.0376260951 -0.101101093 + vertex 0.0397293605 0.0150626507 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex 0.0397293605 0.0150626507 -0.101101093 + vertex 0.042188637 0.00512689026 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex 0.042188637 0.00512689026 -0.101101093 + vertex 0.042188637 -0.00512667047 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex 0.042188637 -0.00512667047 -0.101101093 + vertex 0.0397293605 -0.0150717804 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0281821694 -0.0318121016 -0.101101093 + vertex 0.0397293605 -0.0150717804 -0.101101093 + vertex 0.034969449 -0.0241476297 -0.101101093 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0849731266 0.0353147984 0.0214780103 + vertex 0.086950101 0.0390275754 0.01378203 + vertex 0.0793673322 0.0462949723 0.0240089595 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0849731266 0.0353147984 0.0214780103 + vertex 0.0793673322 0.0462949723 0.0240089595 + vertex 0.0811861306 0.0337408297 0.0275991708 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0849731266 0.0353147984 0.0214780103 + vertex 0.0811861306 0.0337408297 0.0275991708 + vertex 0.0890764296 0.023378212 0.0182065219 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0849731266 0.0353147984 0.0214780103 + vertex 0.0890764296 0.023378212 0.0182065219 + vertex 0.086950101 0.0390275754 0.01378203 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0283072591 0.0220264718 -0.0158937797 + vertex 0.0195223391 -0.0671907514 0.0264159311 + vertex -0.018372409 0.0323119983 0.000153810019 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0283072591 0.0220264718 -0.0158937797 + vertex -0.018372409 0.0323119983 0.000153810019 + vertex -0.0294159688 0.0270173401 -0.0175117198 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0283072591 0.0220264718 -0.0158937797 + vertex -0.0294159688 0.0270173401 -0.0175117198 + vertex -0.0349812172 0.0129995104 -0.0315753184 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0283072591 0.0220264718 -0.0158937797 + vertex -0.0349812172 0.0129995104 -0.0315753184 + vertex 0.0141503802 -0.0671907514 0.0177750792 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0283072591 0.0220264718 -0.0158937797 + vertex 0.0141503802 -0.0671907514 0.0177750792 + vertex 0.0195223391 -0.0671907514 0.0264159311 + endloop + endfacet + +endsolid AssimpScene diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link4.obj b/src/experiments/assets/robots/xarm7/meshes/collision/link4.obj new file mode 100644 index 0000000000000000000000000000000000000000..adb7cd707c2057837ced99baee3d364fea01c039 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link4.obj @@ -0,0 +1,3159 @@ +# https://github.com/mikedh/trimesh + +o geometry_0 +v -0.04273027 -0.00001361 0.06749767 0.54509804 0.71372549 0.60000000 +v -0.04237985 -0.00542601 0.06749767 0.54509804 0.71372549 0.60000000 +v -0.04271434 0.00069379 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.04260284 0.00319436 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.03582659 -0.08164385 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.03616107 -0.08740173 0.06651306 0.54509804 0.71372549 0.60000000 +v -0.04134453 -0.01075616 0.06749767 0.54509804 0.71372549 0.60000000 +v -0.04214093 -0.00703821 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.04266655 0.00000285 0.08133757 0.54509804 0.71372549 0.60000000 +v 0.03635221 -0.08858620 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.03654334 -0.08972133 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.03686190 -0.09151450 0.06651306 0.54509804 0.71372549 0.60000000 +v -0.04204536 0.00067734 0.08677862 0.54509804 0.71372549 0.60000000 +v -0.04188608 0.00840934 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.04185423 0.00857385 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.03617700 -0.07674143 0.06651306 0.54509804 0.71372549 0.60000000 +v -0.04124897 -0.01106873 0.06749767 0.54509804 0.71372549 0.60000000 +v -0.04018179 -0.01452346 0.08133757 0.54509804 0.71372549 0.60000000 +v 0.03737160 -0.09345572 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.03843878 -0.09699271 0.06651306 0.54509804 0.71372549 0.60000000 +v -0.04147196 -0.00692306 0.08677467 0.54509804 0.71372549 0.60000000 +v -0.03954467 -0.01429314 0.08677467 0.54509804 0.71372549 0.60000000 +v -0.04005436 0.00064444 0.09189148 0.54509804 0.71372549 0.60000000 +v -0.03927389 0.00788291 0.09189148 0.54509804 0.71372549 0.60000000 +v -0.04121711 0.00827774 0.08677862 0.54509804 0.71372549 0.60000000 +v -0.03951281 -0.00659404 0.09188753 0.54509804 0.71372549 0.60000000 +v -0.03905090 0.01558202 0.08677862 0.54509804 0.71372549 0.60000000 +v -0.03967209 0.01582878 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.04042071 0.01382175 0.06749767 0.54509804 0.71372549 0.60000000 +v -0.04118525 0.01102507 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.03716454 -0.07150999 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.03706897 -0.07197062 0.06651306 0.54509804 0.71372549 0.60000000 +v -0.03965617 -0.01592180 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.03853434 -0.09730528 0.06651306 0.54509804 0.71372549 0.60000000 +v -0.03690062 -0.02154807 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.03766516 -0.01361864 0.09188753 0.54509804 0.71372549 0.60000000 +v -0.03631128 -0.02120259 0.08677467 0.54509804 0.71372549 0.60000000 +v -0.03459106 -0.02021553 0.09188753 0.54509804 0.71372549 0.60000000 +v -0.03678913 -0.00246481 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.03669355 0.00059509 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.03655021 0.00488881 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.03484591 0.01204503 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.03720325 0.01484171 0.09189148 0.54509804 0.71372549 0.60000000 +v -0.03557860 -0.00971974 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.03390616 0.02132344 0.09189148 0.54509804 0.71372549 0.60000000 +v -0.03559452 0.02237631 0.08677862 0.54509804 0.71372549 0.60000000 +v -0.03690062 0.02130699 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.03835007 0.01883933 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.03976080 -0.06377798 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.03805650 -0.06868040 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.03724418 -0.07123032 0.06651306 0.54509804 0.71372549 0.60000000 +v -0.03731475 -0.02082422 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.03941038 -0.09952617 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.03961745 -0.09998680 0.06651306 0.54509804 0.71372549 0.60000000 +v -0.03436807 -0.02539762 0.06749767 0.54509804 0.71372549 0.60000000 +v -0.03239300 -0.02786528 0.08133362 0.54509804 0.71372549 0.60000000 +v -0.03188330 -0.02742110 0.08677467 0.54509804 0.71372549 0.60000000 +v -0.03293455 -0.01657984 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.03037014 -0.02612146 0.09188753 0.54509804 0.71372549 0.60000000 +v -0.02900034 -0.02279835 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.03170810 -0.01852107 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.03248857 -0.00218515 0.10018752 0.54509804 0.71372549 0.60000000 +v -0.03226557 0.00431303 0.10018752 0.54509804 0.71372549 0.60000000 +v -0.03076835 0.01063024 0.10018752 0.54509804 0.71372549 0.60000000 +v -0.03412915 0.01360788 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.03177181 0.01872417 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.02907998 -0.01463861 0.10018752 0.54509804 0.71372549 0.60000000 +v -0.03140547 -0.00858461 0.10018752 0.54509804 0.71372549 0.60000000 +v -0.02742346 0.02464656 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.02949410 0.02709777 0.09189148 0.54509804 0.71372549 0.60000000 +v -0.03095948 0.02844676 0.08677862 0.54509804 0.71372549 0.60000000 +v -0.03616793 0.02273824 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.03564231 0.02354434 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.04350388 -0.05622694 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.04151288 -0.10350733 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.04265969 -0.10559662 0.06651306 0.54509804 0.71372549 0.60000000 +v -0.03086391 -0.02954329 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.04366316 -0.10704431 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.04568601 -0.10966003 0.06651306 0.54509804 0.71372549 0.60000000 +v -0.02239022 -0.03783463 0.08860550 0.54509804 0.71372549 0.60000000 +v 0.01972339 -0.08363443 0.08956638 0.54509804 0.71372549 0.60000000 +v 0.00435287 -0.06708465 0.08806376 0.54509804 0.71372549 0.60000000 +v -0.02398302 -0.03495569 0.09106109 0.54509804 0.71372549 0.60000000 +v -0.02509798 -0.03173128 0.09324384 0.54509804 0.71372549 0.60000000 +v -0.02559175 -0.02013327 0.10018752 0.54509804 0.71372549 0.60000000 +v -0.01947540 -0.03709433 0.09467528 0.54509804 0.71372549 0.60000000 +v -0.01971432 -0.03390282 0.09667613 0.54509804 0.71372549 0.60000000 +v -0.02735976 -0.00183967 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.02645186 -0.00723563 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.02716862 0.00362208 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.02591031 0.00895223 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.02361668 0.01392045 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.02804466 0.01651972 0.10018752 0.54509804 0.71372549 0.60000000 +v -0.02420601 0.02176762 0.10018752 0.54509804 0.71372549 0.60000000 +v -0.02156197 -0.01695822 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.02449272 -0.01233546 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.02218316 0.02941737 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.02411045 0.03198374 0.09189148 0.54509804 0.71372549 0.60000000 +v -0.02530504 0.03356304 0.08677862 0.54509804 0.71372549 0.60000000 +v -0.02571917 0.03410593 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.03145325 0.02890739 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.03236115 0.02788742 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.04796371 -0.05004133 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.04543116 -0.05339735 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.04739031 -0.11163416 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.04899903 -0.11341088 0.06651306 0.54509804 0.71372549 0.60000000 +v -0.01777110 -0.04267125 0.08969687 0.54509804 0.71372549 0.60000000 +v 0.02725733 -0.09144869 0.08941217 0.54509804 0.71372549 0.60000000 +v 0.02940760 -0.09276478 0.09203383 0.54509804 0.71372549 0.60000000 +v 0.02150732 -0.08422667 0.09238181 0.54509804 0.71372549 0.60000000 +v -0.01256265 -0.04823171 0.09008834 0.54509804 0.71372549 0.60000000 +v -0.01888607 -0.04007198 0.09235809 0.54509804 0.71372549 0.60000000 +v -0.01700656 -0.03370541 0.09841600 0.54509804 0.71372549 0.60000000 +v -0.01057165 -0.03989102 0.09876398 0.54509804 0.71372549 0.60000000 +v 0.02929611 -0.08363443 0.09854254 0.54509804 0.71372549 0.60000000 +v -0.01316792 -0.04596146 0.09287214 0.54509804 0.71372549 0.60000000 +v -0.01321570 -0.04329639 0.09526446 0.54509804 0.71372549 0.60000000 +v -0.01291307 -0.04043390 0.09728904 0.54509804 0.71372549 0.60000000 +v -0.02173717 -0.00146130 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.02159382 0.00288178 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.02102041 -0.00573858 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.01945947 -0.00980199 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.02059036 0.00710971 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.01875864 0.01105797 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.01619424 0.01456205 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.02038329 0.01832935 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.01633758 0.02201439 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.01941169 0.02612716 0.10018752 0.54509804 0.71372549 0.60000000 +v -0.01777110 -0.02089002 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.01412359 -0.01659629 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.01713398 -0.01347059 0.10488122 0.54509804 0.71372549 0.60000000 +v 0.04487368 -0.09437699 0.10060271 0.54509804 0.71372549 0.60000000 +v 0.03520539 -0.08225254 0.10123934 0.54509804 0.71372549 0.60000000 +v -0.02197609 0.02959833 0.09635979 0.54509804 0.71372549 0.60000000 +v -0.01793038 0.03581684 0.09189148 0.54509804 0.71372549 0.60000000 +v -0.01882235 0.03759356 0.08677862 0.54509804 0.71372549 0.60000000 +v -0.02127526 0.03686971 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.02430158 0.03512589 0.06749767 0.54509804 0.71372549 0.60000000 +v -0.02857028 0.03176988 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.05242355 -0.04637274 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.04939723 -0.11378925 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.04899903 -0.11341088 0.07549713 0.54509804 0.71372549 0.60000000 +v 0.03405858 -0.09832524 0.08868854 0.54509804 0.71372549 0.60000000 +v 0.04213407 -0.10632047 0.08892184 0.54509804 0.71372549 0.60000000 +v 0.03646370 -0.10031582 0.09100178 0.54509804 0.71372549 0.60000000 +v 0.03205165 -0.09360379 0.09431544 0.54509804 0.71372549 0.60000000 +v 0.03933074 -0.10191158 0.09306590 0.54509804 0.71372549 0.60000000 +v 0.03585844 -0.09793042 0.09380930 0.54509804 0.71372549 0.60000000 +v 0.02383281 -0.08430893 0.09480181 0.54509804 0.71372549 0.60000000 +v 0.00502185 -0.06647596 0.09192707 0.54509804 0.71372549 0.60000000 +v 0.03819986 -0.09442634 0.09793359 0.54509804 0.71372549 0.60000000 +v -0.01345462 0.00530009 0.10597654 0.54509804 0.71372549 0.60000000 +v -0.00918592 -0.00835430 0.10608726 0.54509804 0.71372549 0.60000000 +v -0.00517206 -0.00290900 0.10673576 0.54509804 0.71372549 0.60000000 +v -0.00859658 0.01048218 0.10617821 0.54509804 0.71372549 0.60000000 +v -0.01297678 0.01749034 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.01165476 0.02481107 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.01383689 0.02946672 0.10018752 0.54509804 0.71372549 0.60000000 +v -0.01566861 0.03338208 0.09635979 0.54509804 0.71372549 0.60000000 +v 0.04121025 -0.08031131 0.10319275 0.54509804 0.71372549 0.60000000 +v -0.00026624 -0.01710628 0.10612681 0.54509804 0.71372549 0.60000000 +v 0.04715139 -0.07777785 0.10455697 0.54509804 0.71372549 0.60000000 +v 0.05283768 -0.07470150 0.10541504 0.54509804 0.71372549 0.60000000 +v 0.05177050 -0.09347217 0.10254820 0.54509804 0.71372549 0.60000000 +v 0.04222964 -0.09950972 0.09732068 0.54509804 0.71372549 0.60000000 +v 0.05323588 -0.10544856 0.09900519 0.54509804 0.71372549 0.60000000 +v 0.06092910 -0.10551436 0.10089137 0.54509804 0.71372549 0.60000000 +v -0.01117692 0.03846546 0.09189148 0.54509804 0.71372549 0.60000000 +v -0.01171847 0.04037379 0.08677862 0.54509804 0.71372549 0.60000000 +v -0.01190960 0.04103184 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.01912498 0.03820225 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.02132304 0.03693551 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.05361815 -0.04546793 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.05365001 -0.11732624 0.07636312 0.54509804 0.71372549 0.60000000 +v 0.05218463 -0.11612531 0.07609818 0.54509804 0.71372549 0.60000000 +v 0.04971579 -0.11408537 0.07564739 0.54509804 0.71372549 0.60000000 +v 0.05490832 -0.11816524 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.05124488 -0.11535211 0.08197025 0.54509804 0.71372549 0.60000000 +v 0.05036884 -0.11443085 0.08461169 0.54509804 0.71372549 0.60000000 +v 0.04909460 -0.11301605 0.08696448 0.54509804 0.71372549 0.60000000 +v 0.04734252 -0.11105838 0.08899301 0.54509804 0.71372549 0.60000000 +v 0.04512853 -0.10854136 0.09068148 0.54509804 0.71372549 0.60000000 +v 0.04243670 -0.10546501 0.09202988 0.54509804 0.71372549 0.60000000 +v 0.04592493 -0.10421473 0.09643888 0.54509804 0.71372549 0.60000000 +v 0.04919017 -0.10844266 0.09523283 0.54509804 0.71372549 0.60000000 +v -0.00048924 0.00196052 0.10690580 0.54509804 0.71372549 0.60000000 +v 0.04496925 -0.05655596 0.10606749 0.54509804 0.71372549 0.60000000 +v -0.00298993 0.01484171 0.10587373 0.54509804 0.71372549 0.60000000 +v -0.00746569 0.01707907 0.10533596 0.54509804 0.71372549 0.60000000 +v -0.00924963 0.01971124 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.00649409 0.02663714 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.00770461 0.03162182 0.10018752 0.54509804 0.71372549 0.60000000 +v -0.00873993 0.03581684 0.09635979 0.54509804 0.71372549 0.60000000 +v 0.05861954 -0.09162965 0.10388079 0.54509804 0.71372549 0.60000000 +v 0.06513409 -0.08884942 0.10465978 0.54509804 0.71372549 0.60000000 +v 0.05820541 -0.07109871 0.10582233 0.54509804 0.71372549 0.60000000 +v 0.05674004 -0.11025227 0.09770819 0.54509804 0.71372549 0.60000000 +v 0.06475182 -0.11074581 0.09952320 0.54509804 0.71372549 0.60000000 +v 0.06863825 -0.10426408 0.10213301 0.54509804 0.71372549 0.60000000 +v -0.00404118 0.03984735 0.09189148 0.54509804 0.71372549 0.60000000 +v -0.00423231 0.04183794 0.08677862 0.54509804 0.71372549 0.60000000 +v -0.01468108 0.04012703 0.06749767 0.54509804 0.71372549 0.60000000 +v -0.00431195 0.04249598 0.08133757 0.54509804 0.71372549 0.60000000 +v -0.00947262 0.04165698 0.06749767 0.54509804 0.71372549 0.60000000 +v -0.01965061 0.03793903 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.06083353 -0.04244093 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.05736123 -0.11972809 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.05645333 -0.11910295 0.07675854 0.54509804 0.71372549 0.60000000 +v 0.05876289 -0.12048484 0.08047950 0.54509804 0.71372549 0.60000000 +v 0.05823727 -0.11999131 0.08371803 0.54509804 0.71372549 0.60000000 +v 0.05736123 -0.11898779 0.08671536 0.54509804 0.71372549 0.60000000 +v 0.05607106 -0.11737559 0.08940030 0.54509804 0.71372549 0.60000000 +v 0.05428713 -0.11508889 0.09172540 0.54509804 0.71372549 0.60000000 +v 0.05199350 -0.11209479 0.09367090 0.54509804 0.71372549 0.60000000 +v 0.05971857 -0.11439794 0.09601182 0.54509804 0.71372549 0.60000000 +v 0.00478293 0.00615555 0.10660527 0.54509804 0.71372549 0.60000000 +v 0.04965208 -0.05257480 0.10614658 0.54509804 0.71372549 0.60000000 +v 0.00768182 0.02038573 0.10488122 0.54509804 0.71372549 0.60000000 +v 0.00347684 0.02150440 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.00085558 0.02176762 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.00515613 0.02115893 0.10488122 0.54509804 0.71372549 0.60000000 +v -0.00107857 0.02739389 0.10310575 0.54509804 0.71372549 0.60000000 +v -0.00128563 0.03252662 0.10018752 0.54509804 0.71372549 0.60000000 +v -0.00369076 0.03652424 0.09635979 0.54509804 0.71372549 0.60000000 +v 0.07598105 -0.10166481 0.10276964 0.54509804 0.71372549 0.60000000 +v 0.07115487 -0.08519728 0.10493263 0.54509804 0.71372549 0.60000000 +v 0.06319087 -0.06700239 0.10581047 0.54509804 0.71372549 0.60000000 +v 0.06796927 -0.11525340 0.09772401 0.54509804 0.71372549 0.60000000 +v 0.07282731 -0.10972584 0.10068970 0.54509804 0.71372549 0.60000000 +v -0.00144491 0.03683681 0.09635979 0.54509804 0.71372549 0.60000000 +v 0.00322199 0.03992961 0.09188753 0.54509804 0.71372549 0.60000000 +v 0.00339720 0.04190374 0.08677862 0.54509804 0.71372549 0.60000000 +v 0.00344498 0.04257824 0.08133757 0.54509804 0.71372549 0.60000000 +v 0.00000453 0.04254533 0.08133757 0.54509804 0.71372549 0.60000000 +v 0.00132656 0.04270984 0.06749767 0.54509804 0.71372549 0.60000000 +v -0.00410489 0.04252888 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.06921165 -0.04081228 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.06293602 -0.12244252 0.07749799 0.54509804 0.71372549 0.60000000 +v 0.05912924 -0.12064935 0.07710256 0.54509804 0.71372549 0.60000000 +v 0.05822134 -0.12022162 0.07700766 0.54509804 0.71372549 0.60000000 +v 0.06390763 -0.12280445 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.06658353 -0.12365990 0.08150760 0.54509804 0.71372549 0.60000000 +v 0.06612162 -0.12319927 0.08507830 0.54509804 0.71372549 0.60000000 +v 0.06527744 -0.12214641 0.08838405 0.54509804 0.71372549 0.60000000 +v 0.06397135 -0.12036968 0.09133789 0.54509804 0.71372549 0.60000000 +v 0.06212370 -0.11778687 0.09388838 0.54509804 0.71372549 0.60000000 +v 0.07056553 -0.11892199 0.09546218 0.54509804 0.71372549 0.60000000 +v 0.01059665 0.00962672 0.10581837 0.54509804 0.71372549 0.60000000 +v 0.01500870 0.01579588 0.10488122 0.54509804 0.71372549 0.60000000 +v 0.01156826 0.01846096 0.10488122 0.54509804 0.71372549 0.60000000 +v 0.05414377 -0.04837977 0.10583419 0.54509804 0.71372549 0.60000000 +v 0.00967282 0.02566653 0.10310575 0.54509804 0.71372549 0.60000000 +v 0.00438473 0.02706487 0.10310575 0.54509804 0.71372549 0.60000000 +v 0.00519706 0.03213180 0.10018752 0.54509804 0.71372549 0.60000000 +v 0.00588196 0.03640908 0.09635979 0.54509804 0.71372549 0.60000000 +v 0.08270266 -0.09786461 0.10284477 0.54509804 0.71372549 0.60000000 +v 0.08055238 -0.10719237 0.10123144 0.54509804 0.71372549 0.60000000 +v 0.08281416 -0.08718786 0.10375821 0.54509804 0.71372549 0.60000000 +v 0.07653853 -0.08082130 0.10473491 0.54509804 0.71372549 0.60000000 +v 0.06771442 -0.06251125 0.10538340 0.54509804 0.71372549 0.60000000 +v 0.07636332 -0.11443085 0.09879166 0.54509804 0.71372549 0.60000000 +v 0.01038958 0.03867933 0.09188753 0.54509804 0.71372549 0.60000000 +v 0.01089928 0.04060411 0.08677467 0.54509804 0.71372549 0.60000000 +v 0.01107449 0.04126215 0.08133757 0.54509804 0.71372549 0.60000000 +v 0.00674207 0.04218341 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.07809947 -0.04051616 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.06494295 -0.12314992 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.06644018 -0.12364345 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.06790556 -0.12407118 0.07786178 0.54509804 0.71372549 0.60000000 +v 0.07297066 -0.12504179 0.07807531 0.54509804 0.71372549 0.60000000 +v 0.07497759 -0.12517340 0.08212842 0.54509804 0.71372549 0.60000000 +v 0.07462717 -0.12472922 0.08598382 0.54509804 0.71372549 0.60000000 +v 0.07384670 -0.12362700 0.08955056 0.54509804 0.71372549 0.60000000 +v 0.07250875 -0.12171868 0.09272979 0.54509804 0.71372549 0.60000000 +v 0.07918258 -0.11828040 0.09640724 0.54509804 0.71372549 0.60000000 +v 0.01784388 0.01250566 0.10488122 0.54509804 0.71372549 0.60000000 +v 0.05541801 -0.04082873 0.10516592 0.54509804 0.71372549 0.60000000 +v 0.01889513 0.01989220 0.10310575 0.54509804 0.71372549 0.60000000 +v 0.01456272 0.02323177 0.10310575 0.54509804 0.71372549 0.60000000 +v 0.06570750 -0.05160418 0.10489704 0.54509804 0.71372549 0.60000000 +v 0.05846026 -0.04398733 0.10508684 0.54509804 0.71372549 0.60000000 +v 0.01730233 0.02759130 0.10018752 0.54509804 0.71372549 0.60000000 +v 0.01147269 0.03047024 0.10018752 0.54509804 0.71372549 0.60000000 +v 0.01300177 0.03451720 0.09635979 0.54509804 0.71372549 0.60000000 +v 0.08759256 -0.10330992 0.10119585 0.54509804 0.71372549 0.60000000 +v 0.08858009 -0.09306090 0.10240585 0.54509804 0.71372549 0.60000000 +v 0.08439103 -0.11196319 0.09922663 0.54509804 0.71372549 0.60000000 +v 0.08759256 -0.08187417 0.10297527 0.54509804 0.71372549 0.60000000 +v 0.08122136 -0.07580372 0.10409036 0.54509804 0.71372549 0.60000000 +v 0.07523243 -0.06101420 0.10426435 0.54509804 0.71372549 0.60000000 +v 0.01720676 0.03617876 0.09188753 0.54509804 0.71372549 0.60000000 +v 0.01806688 0.03797194 0.08677467 0.54509804 0.71372549 0.60000000 +v 0.01835358 0.03858062 0.08133757 0.54509804 0.71372549 0.60000000 +v 0.01714305 0.03913996 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.01203017 0.04099893 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.08735364 -0.04189805 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.07351221 -0.12510760 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.07457939 -0.12517340 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.07811540 -0.12535436 0.07814253 0.54509804 0.71372549 0.60000000 +v 0.08351499 -0.12486083 0.08229450 0.54509804 0.71372549 0.60000000 +v 0.08330793 -0.12438375 0.08637925 0.54509804 0.71372549 0.60000000 +v 0.08260709 -0.12321572 0.09015161 0.54509804 0.71372549 0.60000000 +v 0.08125322 -0.12120869 0.09352064 0.54509804 0.71372549 0.60000000 +v 0.08744920 -0.11586209 0.09672358 0.54509804 0.71372549 0.60000000 +v 0.02246300 0.01574652 0.10310575 0.54509804 0.71372549 0.60000000 +v 0.06218741 -0.04002262 0.10409432 0.54509804 0.71372549 0.60000000 +v 0.06602606 -0.03541632 0.10248098 0.54509804 0.71372549 0.60000000 +v 0.02243115 0.02361014 0.10018752 0.54509804 0.71372549 0.60000000 +v 0.06954614 -0.03077712 0.10024683 0.54509804 0.71372549 0.60000000 +v 0.02994916 0.01530234 0.10020333 0.54509804 0.71372549 0.60000000 +v 0.07526429 -0.05319994 0.10339046 0.54509804 0.71372549 0.60000000 +v 0.02150732 0.02976284 0.09635979 0.54509804 0.71372549 0.60000000 +v 0.01958003 0.03124344 0.09635979 0.54509804 0.71372549 0.60000000 +v 0.09370891 -0.09829234 0.10062644 0.54509804 0.71372549 0.60000000 +v 0.09171790 -0.10801493 0.09907637 0.54509804 0.71372549 0.60000000 +v 0.09348591 -0.08743463 0.10148056 0.54509804 0.71372549 0.60000000 +v 0.09116042 -0.07573791 0.10182458 0.54509804 0.71372549 0.60000000 +v 0.08515557 -0.07029261 0.10297131 0.54509804 0.71372549 0.60000000 +v 0.08378576 -0.06905877 0.10323229 0.54509804 0.71372549 0.60000000 +v 0.02346646 0.03247727 0.09188753 0.54509804 0.71372549 0.60000000 +v 0.02128433 0.03685326 0.08133757 0.54509804 0.71372549 0.60000000 +v 0.02462921 0.03408948 0.08677467 0.54509804 0.71372549 0.60000000 +v 0.02196923 0.03663939 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.02134804 0.03696841 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.09565212 -0.04467828 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.07609255 -0.12525566 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.08060017 -0.12517340 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.08327607 -0.12497598 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.08340349 -0.12495954 0.07805158 0.54509804 0.71372549 0.60000000 +v 0.08808632 -0.12400538 0.07784201 0.54509804 0.71372549 0.60000000 +v 0.09179754 -0.12273864 0.08200979 0.54509804 0.71372549 0.60000000 +v 0.09171790 -0.12216286 0.08625667 0.54509804 0.71372549 0.60000000 +v 0.09106486 -0.12092903 0.09018720 0.54509804 0.71372549 0.60000000 +v 0.08966319 -0.11885619 0.09370253 0.54509804 0.71372549 0.60000000 +v 0.09498314 -0.11188093 0.09645074 0.54509804 0.71372549 0.60000000 +v 0.07844989 -0.04788624 0.10165454 0.54509804 0.71372549 0.60000000 +v 0.03109597 0.02203084 0.09604741 0.54509804 0.71372549 0.60000000 +v 0.02539375 0.02673585 0.09635979 0.54509804 0.71372549 0.60000000 +v 0.03647963 0.01548331 0.09690548 0.54509804 0.71372549 0.60000000 +v 0.07260432 -0.02625307 0.09717042 0.54509804 0.71372549 0.60000000 +v 0.05959115 -0.01727079 0.09951133 0.54509804 0.71372549 0.60000000 +v 0.08110986 -0.04245738 0.09932944 0.54509804 0.71372549 0.60000000 +v 0.08829339 -0.06520922 0.10161104 0.54509804 0.71372549 0.60000000 +v 0.09804132 -0.10281639 0.09838042 0.54509804 0.71372549 0.60000000 +v 0.09872622 -0.09236995 0.09956274 0.54509804 0.71372549 0.60000000 +v 0.09732456 -0.08119967 0.10011238 0.54509804 0.71372549 0.60000000 +v 0.09173383 -0.07623145 0.10167036 0.54509804 0.71372549 0.60000000 +v 0.09147899 -0.07601758 0.10174154 0.54509804 0.71372549 0.60000000 +v 0.09447345 -0.07057228 0.10019937 0.54509804 0.71372549 0.60000000 +v 0.03007658 0.02772291 0.09015952 0.54509804 0.71372549 0.60000000 +v 0.02794223 0.02652198 0.09434312 0.54509804 0.71372549 0.60000000 +v 0.03002880 0.02652198 0.09231854 0.54509804 0.71372549 0.60000000 +v 0.03329403 0.02494268 0.09022674 0.54509804 0.71372549 0.60000000 +v 0.02502741 0.03463236 0.08133757 0.54509804 0.71372549 0.60000000 +v 0.03037921 0.02907190 0.08677467 0.54509804 0.71372549 0.60000000 +v 0.03087298 0.02954898 0.08133362 0.54509804 0.71372549 0.60000000 +v 0.02644500 0.03356304 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.10336127 -0.04915297 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.08386541 -0.12487728 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.08601568 -0.12443310 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.09034810 -0.12326508 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.09151084 -0.12285380 0.07758893 0.54509804 0.71372549 0.60000000 +v 0.09326292 -0.12226156 0.07745844 0.54509804 0.71372549 0.60000000 +v 0.09805725 -0.11994196 0.07694044 0.54509804 0.71372549 0.60000000 +v 0.09944298 -0.11900424 0.08131384 0.54509804 0.71372549 0.60000000 +v 0.09944298 -0.11831330 0.08565562 0.54509804 0.71372549 0.60000000 +v 0.09880586 -0.11698076 0.08969292 0.54509804 0.71372549 0.60000000 +v 0.09734049 -0.11485857 0.09331501 0.54509804 0.71372549 0.60000000 +v 0.10148176 -0.10655078 0.09564407 0.54509804 0.71372549 0.60000000 +v 0.09079408 -0.05912233 0.09965764 0.54509804 0.71372549 0.60000000 +v 0.03440899 0.02125764 0.09405841 0.54509804 0.71372549 0.60000000 +v 0.03955373 0.01515429 0.09484927 0.54509804 0.71372549 0.60000000 +v 0.07387856 -0.02414734 0.09518538 0.54509804 0.71372549 0.60000000 +v 0.08314865 -0.03709433 0.09621348 0.54509804 0.71372549 0.60000000 +v 0.09251430 -0.05293672 0.09717042 0.54509804 0.71372549 0.60000000 +v 0.10318606 -0.09664724 0.09719414 0.54509804 0.71372549 0.60000000 +v 0.10258079 -0.08582242 0.09805222 0.54509804 0.71372549 0.60000000 +v 0.10019160 -0.07542534 0.09840019 0.54509804 0.71372549 0.60000000 +v 0.09662373 -0.06410700 0.09811943 0.54509804 0.71372549 0.60000000 +v 0.03748310 0.02010606 0.09177681 0.54509804 0.71372549 0.60000000 +v 0.04014307 0.01846096 0.08919468 0.54509804 0.71372549 0.60000000 +v 0.03617700 0.02293565 0.08790164 0.54509804 0.71372549 0.60000000 +v 0.10949354 -0.05468054 0.06806708 0.54509804 0.71372549 0.60000000 +v 0.03049071 0.02994381 0.06749767 0.54509804 0.71372549 0.60000000 +v 0.10581418 -0.05175224 0.08005244 0.54509804 0.71372549 0.60000000 +v 0.10575047 -0.05114355 0.07584115 0.54509804 0.71372549 0.60000000 +v 0.10743883 -0.05272286 0.07340138 0.54509804 0.71372549 0.60000000 +v 0.10866529 -0.05387443 0.07079552 0.54509804 0.71372549 0.60000000 +v 0.10672207 -0.05188385 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.10653094 -0.05171934 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.10498592 -0.05045261 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.09297621 -0.12237672 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.09552470 -0.12114288 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.10078093 -0.11819814 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.10262858 -0.11694786 0.07628008 0.54509804 0.71372549 0.60000000 +v 0.10614866 -0.11388796 0.08024224 0.54509804 0.71372549 0.60000000 +v 0.10618052 -0.11303251 0.08462356 0.54509804 0.71372549 0.60000000 +v 0.10551155 -0.11161771 0.08871621 0.54509804 0.71372549 0.60000000 +v 0.10398246 -0.10947907 0.09241345 0.54509804 0.71372549 0.60000000 +v 0.10673800 -0.10020067 0.09435498 0.54509804 0.71372549 0.60000000 +v 0.04240485 0.01446335 0.09244508 0.54509804 0.71372549 0.60000000 +v 0.07481831 -0.02223901 0.09280887 0.54509804 0.71372549 0.60000000 +v 0.08383355 -0.03451151 0.09424427 0.54509804 0.71372549 0.60000000 +v 0.09340627 -0.04683337 0.09400701 0.54509804 0.71372549 0.60000000 +v 0.09788204 -0.05755947 0.09554917 0.54509804 0.71372549 0.60000000 +v 0.10960504 -0.09213964 0.09360763 0.54509804 0.71372549 0.60000000 +v 0.10702470 -0.08978713 0.09552940 0.54509804 0.71372549 0.60000000 +v 0.10651501 -0.08932650 0.09590505 0.54509804 0.71372549 0.60000000 +v 0.10283564 -0.08605274 0.09791382 0.54509804 0.71372549 0.60000000 +v 0.10528856 -0.07971907 0.09618976 0.54509804 0.71372549 0.60000000 +v 0.10203925 -0.06859814 0.09620162 0.54509804 0.71372549 0.60000000 +v 0.04479404 0.01324597 0.08968500 0.54509804 0.71372549 0.60000000 +v 0.09987304 -0.04606017 0.08425186 0.54509804 0.71372549 0.60000000 +v 0.11113412 -0.05688498 0.07210438 0.54509804 0.71372549 0.60000000 +v 0.11199424 -0.05778979 0.06916637 0.54509804 0.71372549 0.60000000 +v 0.11148454 -0.05708239 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.10985989 -0.05509181 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.10949354 -0.05469699 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.10463550 -0.05199901 0.08438235 0.54509804 0.71372549 0.60000000 +v 0.10758218 -0.05472989 0.08196630 0.54509804 0.71372549 0.60000000 +v 0.11001917 -0.05698369 0.07931299 0.54509804 0.71372549 0.60000000 +v 0.10807595 -0.05390733 0.07758893 0.54509804 0.71372549 0.60000000 +v 0.10985989 -0.05560180 0.07492772 0.54509804 0.71372549 0.60000000 +v 0.10180032 -0.11752365 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.10353647 -0.11605950 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.10731141 -0.11286799 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.10567083 -0.11434859 0.07570275 0.54509804 0.71372549 0.60000000 +v 0.10678578 -0.11339443 0.07549318 0.54509804 0.71372549 0.60000000 +v 0.11041736 -0.10939682 0.07460742 0.54509804 0.71372549 0.60000000 +v 0.11167568 -0.10760365 0.07885430 0.54509804 0.71372549 0.60000000 +v 0.11165975 -0.10660013 0.08321584 0.54509804 0.71372549 0.60000000 +v 0.11094299 -0.10511954 0.08731245 0.54509804 0.71372549 0.60000000 +v 0.10933426 -0.10301380 0.09104923 0.54509804 0.71372549 0.60000000 +v 0.11194646 -0.09440988 0.09116390 0.54509804 0.71372549 0.60000000 +v 0.11059258 -0.09309380 0.09257952 0.54509804 0.71372549 0.60000000 +v 0.06593049 -0.01152936 0.09184799 0.54509804 0.71372549 0.60000000 +v 0.07521651 -0.02077487 0.08998948 0.54509804 0.71372549 0.60000000 +v 0.08400876 -0.03013553 0.08918282 0.54509804 0.71372549 0.60000000 +v 0.08418396 -0.03214256 0.09191521 0.54509804 0.71372549 0.60000000 +v 0.09346998 -0.04388863 0.09208129 0.54509804 0.71372549 0.60000000 +v 0.09820059 -0.05114355 0.09237390 0.54509804 0.71372549 0.60000000 +v 0.10286750 -0.06172160 0.09355623 0.54509804 0.71372549 0.60000000 +v 0.11315698 -0.08649692 0.09054308 0.54509804 0.71372549 0.60000000 +v 0.10965282 -0.08340412 0.09357204 0.54509804 0.71372549 0.60000000 +v 0.10688135 -0.07254641 0.09389234 0.54509804 0.71372549 0.60000000 +v 0.09241874 -0.03873944 0.08731245 0.54509804 0.71372549 0.60000000 +v 0.10121099 -0.04880750 0.08651765 0.54509804 0.71372549 0.60000000 +v 0.11326848 -0.06014229 0.07343697 0.54509804 0.71372549 0.60000000 +v 0.11271100 -0.05874395 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11237651 -0.05828332 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11181903 -0.05752657 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11417637 -0.06112936 0.07030915 0.54509804 0.71372549 0.60000000 +v 0.10578232 -0.05512471 0.08630807 0.54509804 0.71372549 0.60000000 +v 0.10896792 -0.05795430 0.08376548 0.54509804 0.71372549 0.60000000 +v 0.11158011 -0.06029035 0.08096587 0.54509804 0.71372549 0.60000000 +v 0.11360296 -0.06216578 0.07794877 0.54509804 0.71372549 0.60000000 +v 0.11189867 -0.05877685 0.07645406 0.54509804 0.71372549 0.60000000 +v 0.10794853 -0.11217705 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.10941391 -0.11054839 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11357111 -0.10488922 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11121376 -0.10826169 0.07435435 0.54509804 0.71372549 0.60000000 +v 0.11357111 -0.10488922 0.07360700 0.54509804 0.71372549 0.60000000 +v 0.11589660 -0.10006906 0.07885034 0.54509804 0.71372549 0.60000000 +v 0.11572138 -0.09932876 0.08147992 0.54509804 0.71372549 0.60000000 +v 0.11565768 -0.09908199 0.08236172 0.54509804 0.71372549 0.60000000 +v 0.11495684 -0.09784816 0.08554886 0.54509804 0.71372549 0.60000000 +v 0.11381003 -0.09640046 0.08831288 0.54509804 0.71372549 0.60000000 +v 0.11337997 -0.09593983 0.08898115 0.54509804 0.71372549 0.60000000 +v 0.11322069 -0.09575888 0.08923026 0.54509804 0.71372549 0.60000000 +v 0.11575324 -0.08898103 0.08713055 0.54509804 0.71372549 0.60000000 +v 0.09319921 -0.04115775 0.08985899 0.54509804 0.71372549 0.60000000 +v 0.10208703 -0.05181805 0.08855804 0.54509804 0.71372549 0.60000000 +v 0.10264451 -0.05502601 0.09038886 0.54509804 0.71372549 0.60000000 +v 0.10732734 -0.06537373 0.09119949 0.54509804 0.71372549 0.60000000 +v 0.11439936 -0.07878136 0.08815075 0.54509804 0.71372549 0.60000000 +v 0.11103856 -0.07593533 0.09120344 0.54509804 0.71372549 0.60000000 +v 0.11505241 -0.06359702 0.07476560 0.54509804 0.71372549 0.60000000 +v 0.11379410 -0.06038906 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11599216 -0.06468279 0.07146379 0.54509804 0.71372549 0.60000000 +v 0.11482942 -0.06213287 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.10659465 -0.05843138 0.08806771 0.54509804 0.71372549 0.60000000 +v 0.11001917 -0.06134322 0.08544209 0.54509804 0.71372549 0.60000000 +v 0.11280656 -0.06377798 0.08253966 0.54509804 0.71372549 0.60000000 +v 0.11497277 -0.06571921 0.07940394 0.54509804 0.71372549 0.60000000 +v 0.11538690 -0.10163191 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11502056 -0.10225705 0.07302177 0.54509804 0.71372549 0.60000000 +v 0.11560989 -0.10117128 0.07346860 0.54509804 0.71372549 0.60000000 +v 0.11597623 -0.10041453 0.07261448 0.54509804 0.71372549 0.60000000 +v 0.11637444 -0.09952617 0.07241677 0.54509804 0.71372549 0.60000000 +v 0.11690006 -0.09824299 0.07213601 0.54509804 0.71372549 0.60000000 +v 0.11841322 -0.09350508 0.07514916 0.54509804 0.71372549 0.60000000 +v 0.11823801 -0.09238640 0.07936044 0.54509804 0.71372549 0.60000000 +v 0.11740975 -0.09092226 0.08338587 0.54509804 0.71372549 0.60000000 +v 0.11858842 -0.08291058 0.08110822 0.54509804 0.71372549 0.60000000 +v 0.11691599 -0.08108452 0.08477382 0.54509804 0.71372549 0.60000000 +v 0.11115005 -0.06851589 0.08849478 0.54509804 0.71372549 0.60000000 +v 0.11427194 -0.07113161 0.08548163 0.54509804 0.71372549 0.60000000 +v 0.11648593 -0.06724916 0.07608236 0.54509804 0.71372549 0.60000000 +v 0.11675671 -0.06619629 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11545061 -0.06333380 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11744161 -0.06840073 0.07263030 0.54509804 0.71372549 0.60000000 +v 0.11737790 -0.06766044 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11709120 -0.06696949 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11664521 -0.07325380 0.08218378 0.54509804 0.71372549 0.60000000 +v 0.11826987 -0.07493181 0.07865658 0.54509804 0.71372549 0.60000000 +v 0.11637444 -0.09952617 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11672485 -0.09865427 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11766460 -0.09582468 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11819023 -0.09431118 0.07126608 0.54509804 0.71372549 0.60000000 +v 0.11855657 -0.09317605 0.07101300 0.54509804 0.71372549 0.60000000 +v 0.11952818 -0.08840524 0.06995722 0.54509804 0.71372549 0.60000000 +v 0.11981488 -0.08541115 0.07318389 0.54509804 0.71372549 0.60000000 +v 0.11951225 -0.08430893 0.07722119 0.54509804 0.71372549 0.60000000 +v 0.11924147 -0.07623145 0.07495540 0.54509804 0.71372549 0.60000000 +v 0.11852471 -0.07226674 0.07379680 0.54509804 0.71372549 0.60000000 +v 0.11885920 -0.07244770 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11862028 -0.07165805 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11806280 -0.06984843 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11795130 -0.09493632 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11873178 -0.09241931 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11944854 -0.08886587 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11986267 -0.08397990 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11999009 -0.08277898 0.06870768 0.54509804 0.71372549 0.60000000 +v 0.11967153 -0.07725141 0.07114350 0.54509804 0.71372549 0.60000000 +v 0.11893884 -0.07287543 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11997416 -0.08249931 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11979895 -0.07817267 0.06651306 0.54509804 0.71372549 0.60000000 +v 0.11978303 -0.07790946 0.06762816 0.54509804 0.71372549 0.60000000 +v 0.11914591 -0.07412571 0.06651306 0.54509804 0.71372549 0.60000000 +f 1 2 3 +f 1 3 4 +f 1 4 5 +f 1 5 6 +f 1 6 2 +f 2 7 8 +f 2 8 9 +f 2 9 3 +f 2 6 10 +f 2 10 11 +f 2 11 12 +f 2 12 7 +f 3 9 13 +f 3 13 14 +f 3 14 4 +f 4 14 15 +f 4 15 16 +f 4 16 5 +f 5 16 32 +f 5 32 31 +f 5 31 51 +f 5 51 50 +f 5 50 49 +f 5 49 74 +f 5 74 104 +f 5 104 103 +f 5 103 140 +f 5 140 173 +f 5 173 206 +f 5 206 237 +f 5 237 266 +f 5 266 296 +f 5 296 325 +f 5 325 358 +f 5 358 391 +f 5 391 390 +f 5 390 389 +f 5 389 418 +f 5 418 417 +f 5 417 416 +f 5 416 451 +f 5 451 450 +f 5 450 449 +f 5 449 478 +f 5 478 480 +f 5 480 500 +f 5 500 499 +f 5 499 503 +f 5 503 502 +f 5 502 518 +f 5 518 517 +f 5 517 516 +f 5 516 525 +f 5 525 529 +f 5 529 527 +f 5 527 526 +f 5 526 522 +f 5 522 521 +f 5 521 520 +f 5 520 519 +f 5 519 508 +f 5 508 507 +f 5 507 506 +f 5 506 485 +f 5 485 460 +f 5 460 459 +f 5 459 458 +f 5 458 426 +f 5 426 425 +f 5 425 424 +f 5 424 394 +f 5 394 393 +f 5 393 392 +f 5 392 361 +f 5 361 360 +f 5 360 359 +f 5 359 328 +f 5 328 327 +f 5 327 326 +f 5 326 298 +f 5 298 297 +f 5 297 268 +f 5 268 267 +f 5 267 241 +f 5 241 207 +f 5 207 177 +f 5 177 141 +f 5 141 106 +f 5 106 105 +f 5 105 79 +f 5 79 78 +f 5 78 76 +f 5 76 75 +f 5 75 54 +f 5 54 53 +f 5 53 34 +f 5 34 20 +f 5 20 19 +f 5 19 12 +f 5 12 11 +f 5 11 10 +f 5 10 6 +f 7 17 18 +f 7 18 8 +f 7 12 19 +f 7 19 20 +f 7 20 34 +f 7 34 17 +f 8 21 13 +f 8 13 9 +f 8 18 22 +f 8 22 21 +f 13 23 24 +f 13 24 25 +f 13 25 14 +f 13 21 26 +f 13 26 23 +f 14 25 27 +f 14 27 28 +f 14 28 29 +f 14 29 30 +f 14 30 15 +f 15 30 31 +f 15 31 32 +f 15 32 16 +f 17 33 18 +f 17 34 33 +f 18 33 35 +f 18 35 22 +f 21 22 26 +f 22 36 26 +f 22 35 37 +f 22 37 38 +f 22 38 36 +f 23 26 39 +f 23 39 40 +f 23 40 41 +f 23 41 24 +f 24 41 42 +f 24 42 43 +f 24 43 27 +f 24 27 25 +f 26 36 44 +f 26 44 39 +f 27 43 45 +f 27 45 46 +f 27 46 47 +f 27 47 28 +f 28 47 48 +f 28 48 29 +f 29 48 49 +f 29 49 50 +f 29 50 51 +f 29 51 31 +f 29 31 30 +f 33 52 35 +f 33 34 53 +f 33 53 54 +f 33 54 52 +f 35 52 55 +f 35 55 56 +f 35 56 57 +f 35 57 37 +f 36 38 58 +f 36 58 44 +f 37 57 38 +f 38 57 59 +f 38 59 60 +f 38 60 61 +f 38 61 58 +f 39 62 40 +f 39 44 62 +f 40 62 41 +f 41 62 63 +f 41 63 64 +f 41 64 42 +f 42 64 65 +f 42 65 43 +f 43 65 66 +f 43 66 45 +f 44 58 67 +f 44 67 68 +f 44 68 62 +f 45 66 69 +f 45 69 70 +f 45 70 71 +f 45 71 46 +f 46 72 47 +f 46 71 72 +f 47 72 48 +f 48 72 73 +f 48 73 74 +f 48 74 49 +f 52 54 75 +f 52 75 76 +f 52 76 55 +f 55 77 56 +f 55 76 78 +f 55 78 79 +f 55 79 77 +f 56 80 57 +f 56 77 81 +f 56 81 82 +f 56 82 80 +f 57 80 83 +f 57 83 59 +f 58 61 67 +f 59 83 84 +f 59 84 60 +f 60 85 67 +f 60 67 61 +f 60 84 86 +f 60 86 87 +f 60 87 85 +f 62 88 63 +f 62 68 89 +f 62 89 88 +f 63 88 90 +f 63 90 91 +f 63 91 64 +f 64 91 92 +f 64 92 93 +f 64 93 66 +f 64 66 65 +f 66 94 69 +f 66 93 94 +f 67 85 95 +f 67 95 96 +f 67 96 89 +f 67 89 68 +f 69 94 97 +f 69 97 70 +f 70 97 98 +f 70 98 71 +f 71 98 99 +f 71 99 100 +f 71 100 101 +f 71 101 72 +f 72 101 102 +f 72 102 73 +f 73 102 103 +f 73 103 104 +f 73 104 74 +f 77 79 105 +f 77 105 106 +f 77 106 81 +f 80 82 81 +f 80 81 107 +f 80 107 83 +f 81 106 108 +f 81 108 109 +f 81 109 110 +f 81 110 111 +f 81 111 107 +f 83 107 112 +f 83 112 84 +f 84 112 86 +f 85 87 113 +f 85 113 114 +f 85 114 115 +f 85 115 95 +f 86 112 116 +f 86 116 117 +f 86 117 87 +f 87 117 118 +f 87 118 113 +f 88 119 120 +f 88 120 90 +f 88 89 121 +f 88 121 119 +f 89 96 122 +f 89 122 121 +f 90 120 91 +f 91 120 123 +f 91 123 92 +f 92 123 124 +f 92 124 125 +f 92 125 126 +f 92 126 94 +f 92 94 93 +f 94 126 127 +f 94 127 128 +f 94 128 97 +f 95 129 130 +f 95 130 131 +f 95 131 96 +f 95 115 132 +f 95 132 133 +f 95 133 129 +f 96 131 122 +f 97 134 98 +f 97 128 134 +f 98 135 136 +f 98 136 99 +f 98 134 135 +f 99 136 137 +f 99 137 100 +f 100 138 139 +f 100 139 101 +f 100 137 138 +f 101 139 102 +f 102 139 103 +f 103 139 140 +f 106 141 142 +f 106 142 143 +f 106 143 108 +f 107 111 112 +f 108 143 144 +f 108 144 145 +f 108 145 109 +f 109 146 110 +f 109 145 147 +f 109 147 148 +f 109 148 146 +f 110 146 149 +f 110 149 116 +f 110 116 112 +f 110 112 150 +f 110 150 111 +f 111 150 112 +f 113 118 115 +f 113 115 114 +f 115 151 132 +f 115 118 151 +f 116 149 117 +f 117 149 118 +f 118 149 151 +f 119 152 120 +f 119 121 152 +f 120 152 123 +f 121 122 153 +f 121 153 154 +f 121 154 152 +f 122 131 153 +f 123 152 124 +f 124 155 125 +f 124 152 155 +f 125 156 127 +f 125 127 126 +f 125 155 156 +f 127 157 158 +f 127 158 128 +f 127 156 157 +f 128 158 159 +f 128 159 134 +f 129 133 160 +f 129 160 130 +f 130 161 153 +f 130 153 131 +f 130 160 162 +f 130 162 163 +f 130 163 161 +f 132 164 133 +f 132 151 165 +f 132 165 166 +f 132 166 167 +f 132 167 164 +f 133 164 160 +f 134 159 135 +f 135 159 168 +f 135 168 136 +f 136 168 169 +f 136 169 170 +f 136 170 171 +f 136 171 137 +f 137 171 138 +f 138 171 172 +f 138 172 173 +f 138 173 140 +f 138 140 139 +f 141 174 175 +f 141 175 176 +f 141 176 142 +f 141 177 174 +f 142 176 178 +f 142 178 179 +f 142 179 144 +f 142 144 143 +f 144 179 180 +f 144 180 181 +f 144 181 182 +f 144 182 145 +f 145 182 183 +f 145 183 147 +f 146 148 165 +f 146 165 151 +f 146 151 149 +f 147 184 148 +f 147 183 185 +f 147 185 184 +f 148 184 165 +f 152 154 155 +f 153 161 154 +f 154 186 155 +f 154 161 163 +f 154 163 187 +f 154 187 186 +f 155 186 188 +f 155 188 189 +f 155 189 190 +f 155 190 156 +f 156 190 157 +f 157 190 191 +f 157 191 158 +f 158 192 159 +f 158 191 192 +f 159 193 168 +f 159 192 193 +f 160 164 162 +f 162 164 194 +f 162 194 163 +f 163 194 195 +f 163 195 196 +f 163 196 187 +f 164 167 194 +f 165 184 166 +f 166 197 198 +f 166 198 167 +f 166 184 197 +f 167 198 199 +f 167 199 194 +f 168 200 201 +f 168 201 169 +f 168 193 200 +f 169 201 170 +f 170 202 171 +f 170 201 203 +f 170 203 204 +f 170 204 202 +f 171 205 172 +f 171 202 205 +f 172 205 173 +f 173 205 202 +f 173 202 206 +f 174 178 175 +f 174 177 207 +f 174 207 208 +f 174 208 209 +f 174 209 210 +f 174 210 178 +f 175 178 176 +f 178 210 179 +f 179 210 211 +f 179 211 180 +f 180 211 212 +f 180 212 181 +f 181 212 213 +f 181 213 182 +f 182 213 214 +f 182 214 183 +f 183 214 185 +f 184 185 197 +f 185 214 215 +f 185 215 197 +f 186 216 188 +f 186 187 217 +f 186 217 216 +f 187 196 217 +f 188 216 218 +f 188 218 219 +f 188 219 220 +f 188 220 221 +f 188 221 190 +f 188 190 189 +f 190 221 191 +f 191 221 220 +f 191 220 222 +f 191 222 223 +f 191 223 192 +f 192 223 193 +f 193 223 224 +f 193 224 200 +f 194 199 195 +f 195 199 225 +f 195 225 226 +f 195 226 196 +f 196 227 217 +f 196 226 227 +f 197 215 228 +f 197 228 198 +f 198 228 229 +f 198 229 199 +f 199 229 225 +f 200 224 230 +f 200 230 231 +f 200 231 201 +f 201 232 233 +f 201 233 234 +f 201 234 203 +f 201 231 232 +f 202 204 206 +f 203 234 235 +f 203 235 236 +f 203 236 204 +f 204 236 237 +f 204 237 206 +f 207 238 239 +f 207 239 240 +f 207 240 208 +f 207 241 238 +f 208 240 209 +f 209 239 238 +f 209 238 242 +f 209 242 243 +f 209 243 210 +f 209 240 239 +f 210 243 211 +f 211 243 244 +f 211 244 212 +f 212 244 245 +f 212 245 213 +f 213 245 246 +f 213 246 214 +f 214 246 215 +f 215 246 247 +f 215 247 228 +f 216 248 249 +f 216 249 250 +f 216 250 218 +f 216 217 251 +f 216 251 248 +f 217 227 251 +f 218 250 252 +f 218 252 219 +f 219 252 253 +f 219 253 220 +f 220 253 222 +f 222 253 223 +f 223 253 254 +f 223 254 255 +f 223 255 230 +f 223 230 224 +f 225 256 226 +f 225 229 257 +f 225 257 256 +f 226 256 258 +f 226 258 259 +f 226 259 227 +f 227 260 251 +f 227 259 260 +f 228 261 229 +f 228 247 261 +f 229 261 257 +f 230 255 231 +f 231 255 262 +f 231 262 263 +f 231 263 232 +f 232 263 264 +f 232 264 233 +f 233 265 235 +f 233 235 234 +f 233 264 265 +f 235 265 266 +f 235 266 237 +f 235 237 236 +f 238 241 242 +f 241 267 242 +f 242 267 268 +f 242 268 269 +f 242 269 270 +f 242 270 271 +f 242 271 272 +f 242 272 243 +f 243 272 273 +f 243 273 244 +f 244 273 245 +f 245 273 274 +f 245 274 246 +f 246 274 247 +f 247 275 261 +f 247 274 275 +f 248 276 249 +f 248 251 277 +f 248 277 276 +f 249 276 278 +f 249 278 250 +f 250 278 279 +f 250 279 252 +f 251 260 280 +f 251 280 281 +f 251 281 277 +f 252 279 282 +f 252 282 283 +f 252 283 254 +f 252 254 253 +f 254 283 255 +f 255 283 284 +f 255 284 262 +f 256 257 285 +f 256 285 286 +f 256 286 258 +f 257 261 287 +f 257 287 285 +f 258 288 289 +f 258 289 259 +f 258 286 288 +f 259 289 260 +f 260 289 290 +f 260 290 280 +f 261 275 287 +f 262 284 291 +f 262 291 263 +f 263 291 292 +f 263 292 264 +f 264 292 293 +f 264 293 294 +f 264 294 295 +f 264 295 265 +f 265 295 296 +f 265 296 266 +f 268 297 269 +f 269 297 270 +f 270 297 271 +f 271 297 298 +f 271 298 299 +f 271 299 300 +f 271 300 272 +f 272 301 302 +f 272 302 273 +f 272 300 301 +f 273 302 303 +f 273 303 274 +f 274 303 275 +f 275 303 304 +f 275 304 287 +f 276 305 278 +f 276 277 281 +f 276 281 280 +f 276 280 306 +f 276 306 307 +f 276 307 305 +f 278 308 282 +f 278 282 279 +f 278 305 309 +f 278 309 310 +f 278 310 308 +f 280 311 306 +f 280 290 311 +f 282 308 312 +f 282 312 313 +f 282 313 284 +f 282 284 283 +f 284 313 291 +f 285 314 286 +f 285 287 315 +f 285 315 314 +f 286 316 288 +f 286 314 316 +f 287 304 315 +f 288 316 317 +f 288 317 318 +f 288 318 319 +f 288 319 289 +f 289 319 290 +f 290 319 311 +f 291 313 320 +f 291 320 292 +f 292 321 293 +f 292 320 322 +f 292 322 321 +f 293 321 323 +f 293 323 324 +f 293 324 294 +f 294 324 325 +f 294 325 295 +f 295 325 296 +f 298 326 299 +f 299 326 327 +f 299 327 328 +f 299 328 329 +f 299 329 300 +f 300 329 330 +f 300 330 331 +f 300 331 301 +f 301 331 332 +f 301 332 333 +f 301 333 302 +f 302 333 334 +f 302 334 303 +f 303 334 304 +f 304 335 315 +f 304 334 335 +f 305 307 309 +f 306 311 307 +f 307 311 336 +f 307 336 309 +f 308 337 338 +f 308 338 312 +f 308 310 339 +f 308 339 337 +f 309 340 341 +f 309 341 310 +f 309 336 342 +f 309 342 340 +f 310 341 340 +f 310 340 339 +f 311 319 343 +f 311 343 336 +f 312 320 313 +f 312 338 320 +f 314 315 344 +f 314 344 345 +f 314 345 316 +f 315 335 344 +f 316 345 346 +f 316 346 347 +f 316 347 348 +f 316 348 317 +f 317 348 349 +f 317 349 343 +f 317 343 318 +f 318 343 319 +f 320 350 322 +f 320 338 351 +f 320 351 352 +f 320 352 353 +f 320 353 350 +f 321 322 354 +f 321 354 323 +f 322 350 353 +f 322 353 355 +f 322 355 356 +f 322 356 354 +f 323 354 357 +f 323 357 358 +f 323 358 325 +f 323 325 324 +f 328 359 329 +f 329 359 330 +f 330 359 360 +f 330 360 361 +f 330 361 362 +f 330 362 331 +f 331 363 364 +f 331 364 365 +f 331 365 332 +f 331 362 363 +f 332 365 366 +f 332 366 333 +f 333 366 367 +f 333 367 368 +f 333 368 334 +f 334 368 335 +f 335 368 369 +f 335 369 344 +f 336 343 370 +f 336 370 342 +f 337 371 338 +f 337 339 372 +f 337 372 371 +f 338 371 351 +f 339 340 373 +f 339 373 372 +f 340 342 374 +f 340 374 373 +f 342 370 375 +f 342 375 374 +f 343 349 370 +f 344 376 345 +f 344 369 376 +f 345 377 346 +f 345 376 377 +f 346 377 378 +f 346 378 349 +f 346 349 347 +f 347 349 348 +f 349 378 379 +f 349 379 370 +f 351 371 352 +f 352 371 380 +f 352 380 353 +f 353 380 381 +f 353 381 382 +f 353 382 355 +f 354 356 357 +f 355 382 356 +f 356 383 384 +f 356 384 357 +f 356 382 381 +f 356 381 385 +f 356 385 386 +f 356 386 387 +f 356 387 388 +f 356 388 383 +f 357 384 389 +f 357 389 390 +f 357 390 391 +f 357 391 358 +f 361 392 362 +f 362 392 363 +f 363 392 364 +f 364 392 393 +f 364 393 394 +f 364 394 395 +f 364 395 365 +f 365 395 396 +f 365 396 366 +f 366 396 397 +f 366 397 367 +f 367 397 398 +f 367 398 368 +f 368 398 399 +f 368 399 369 +f 369 399 400 +f 369 400 376 +f 370 379 375 +f 371 372 401 +f 371 401 380 +f 372 373 402 +f 372 402 401 +f 373 374 403 +f 373 403 402 +f 374 375 404 +f 374 404 403 +f 375 379 405 +f 375 405 404 +f 376 400 406 +f 376 406 407 +f 376 407 408 +f 376 408 409 +f 376 409 377 +f 377 409 410 +f 377 410 378 +f 378 410 411 +f 378 411 379 +f 379 411 405 +f 380 401 412 +f 380 412 381 +f 381 412 413 +f 381 413 385 +f 383 388 414 +f 383 414 415 +f 383 415 416 +f 383 416 417 +f 383 417 418 +f 383 418 384 +f 384 418 389 +f 385 413 419 +f 385 419 420 +f 385 420 421 +f 385 421 422 +f 385 422 386 +f 386 422 387 +f 387 422 423 +f 387 423 388 +f 388 423 414 +f 394 424 395 +f 395 424 425 +f 395 425 426 +f 395 426 427 +f 395 427 396 +f 396 427 428 +f 396 428 429 +f 396 429 430 +f 396 430 397 +f 397 430 431 +f 397 431 398 +f 398 431 432 +f 398 432 399 +f 399 432 433 +f 399 433 400 +f 400 433 434 +f 400 434 435 +f 400 435 406 +f 401 402 436 +f 401 436 437 +f 401 437 438 +f 401 438 412 +f 402 403 439 +f 402 439 436 +f 403 404 440 +f 403 440 439 +f 404 405 441 +f 404 441 440 +f 405 411 442 +f 405 442 441 +f 406 435 443 +f 406 443 444 +f 406 444 407 +f 407 444 408 +f 408 444 410 +f 408 410 409 +f 410 445 411 +f 410 444 445 +f 411 445 442 +f 412 438 446 +f 412 446 413 +f 413 447 419 +f 413 446 447 +f 414 448 415 +f 414 423 448 +f 415 449 450 +f 415 450 451 +f 415 451 416 +f 415 448 452 +f 415 452 449 +f 419 453 454 +f 419 454 420 +f 419 447 453 +f 420 454 455 +f 420 455 421 +f 421 455 456 +f 421 456 457 +f 421 457 423 +f 421 423 422 +f 423 457 448 +f 426 458 428 +f 426 428 427 +f 428 458 429 +f 429 459 460 +f 429 460 461 +f 429 461 430 +f 429 458 459 +f 430 461 460 +f 430 460 462 +f 430 462 463 +f 430 463 431 +f 431 463 464 +f 431 464 465 +f 431 465 432 +f 432 465 466 +f 432 466 467 +f 432 467 433 +f 433 467 468 +f 433 468 469 +f 433 469 434 +f 434 470 443 +f 434 443 435 +f 434 469 470 +f 436 439 438 +f 436 438 437 +f 438 439 471 +f 438 471 446 +f 439 440 471 +f 440 441 472 +f 440 472 471 +f 441 473 472 +f 441 442 473 +f 442 445 474 +f 442 474 473 +f 443 470 475 +f 443 475 476 +f 443 476 444 +f 444 476 445 +f 445 476 474 +f 446 471 447 +f 447 472 453 +f 447 471 472 +f 448 457 477 +f 448 477 452 +f 449 452 478 +f 452 477 479 +f 452 479 480 +f 452 480 478 +f 453 472 481 +f 453 481 482 +f 453 482 454 +f 454 482 483 +f 454 483 455 +f 455 483 484 +f 455 484 456 +f 456 484 477 +f 456 477 457 +f 460 485 462 +f 462 485 486 +f 462 486 487 +f 462 487 463 +f 463 487 488 +f 463 488 489 +f 463 489 490 +f 463 490 491 +f 463 491 492 +f 463 492 464 +f 464 492 465 +f 465 492 493 +f 465 493 466 +f 466 493 467 +f 467 493 470 +f 467 470 468 +f 468 470 469 +f 470 493 494 +f 470 494 495 +f 470 495 475 +f 472 473 481 +f 473 474 481 +f 474 476 496 +f 474 496 481 +f 475 497 496 +f 475 496 476 +f 475 495 497 +f 477 484 498 +f 477 498 479 +f 479 499 500 +f 479 500 480 +f 479 498 501 +f 479 501 502 +f 479 502 503 +f 479 503 499 +f 481 496 482 +f 482 496 497 +f 482 497 483 +f 483 497 504 +f 483 504 484 +f 484 504 505 +f 484 505 498 +f 485 506 488 +f 485 488 487 +f 485 487 486 +f 488 506 489 +f 489 506 490 +f 490 506 507 +f 490 507 508 +f 490 508 509 +f 490 509 491 +f 491 509 510 +f 491 510 511 +f 491 511 512 +f 491 512 492 +f 492 512 513 +f 492 513 493 +f 493 513 494 +f 494 513 514 +f 494 514 505 +f 494 505 495 +f 495 505 504 +f 495 504 497 +f 498 505 515 +f 498 515 501 +f 501 515 516 +f 501 516 517 +f 501 517 518 +f 501 518 502 +f 505 514 515 +f 508 519 510 +f 508 510 509 +f 510 519 520 +f 510 520 511 +f 511 520 521 +f 511 521 522 +f 511 522 523 +f 511 523 512 +f 512 523 524 +f 512 524 513 +f 513 524 514 +f 514 524 515 +f 515 524 516 +f 516 524 525 +f 522 526 523 +f 523 526 527 +f 523 527 528 +f 523 528 524 +f 524 528 525 +f 525 528 529 +f 527 529 528 + +o geometry_1 +v 0.07810513 -0.04051056 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.08493115 -0.04161887 0.03452299 0.54117647 0.42352941 0.64313725 +v 0.08076062 -0.04116547 0.03368002 0.54117647 0.42352941 0.64313725 +v 0.08068570 -0.04135439 0.01988310 0.54117647 0.42352941 0.64313725 +v 0.08061910 -0.04151812 0.00792150 0.54117647 0.42352941 0.64313725 +v 0.07649019 -0.04115288 0.01900812 0.54117647 0.42352941 0.64313725 +v 0.06922297 -0.04081283 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.08736188 -0.04190854 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.08909336 -0.04252567 0.02039528 0.54117647 0.42352941 0.64313725 +v 0.08909336 -0.04253827 0.01932823 0.54117647 0.42352941 0.64313725 +v 0.08500607 -0.04212265 0.00540327 0.54117647 0.42352941 0.64313725 +v 0.07599073 -0.04188335 0.00146587 0.54117647 0.42352941 0.64313725 +v 0.08030277 -0.04305464 -0.00841499 0.54117647 0.42352941 0.64313725 +v 0.07201998 -0.04166925 0.01162415 0.54117647 0.42352941 0.64313725 +v 0.06774123 -0.04243751 0.01151745 0.54117647 0.42352941 0.64313725 +v 0.06084028 -0.04246270 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.09042527 -0.04289091 0.04868270 0.54117647 0.42352941 0.64313725 +v 0.08903509 -0.04247530 0.03472572 0.54117647 0.42352941 0.64313725 +v 0.09565301 -0.04469192 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.09109955 -0.04309242 0.05990803 0.54117647 0.42352941 0.64313725 +v 0.09149079 -0.04321837 0.05479688 0.54117647 0.42352941 0.64313725 +v 0.09409634 -0.04412517 0.02163306 0.54117647 0.42352941 0.64313725 +v 0.09452921 -0.04459116 0.00746267 0.54117647 0.42352941 0.64313725 +v 0.08937639 -0.04313020 0.00594746 0.54117647 0.42352941 0.64313725 +v 0.08948461 -0.04336950 0.00087899 0.54117647 0.42352941 0.64313725 +v 0.08508932 -0.04362139 -0.00883114 0.54117647 0.42352941 0.64313725 +v 0.07112926 -0.04276496 -0.00309043 0.54117647 0.42352941 0.64313725 +v 0.07164538 -0.04212265 0.00550997 0.54117647 0.42352941 0.64313725 +v 0.07543299 -0.04328134 -0.00908723 0.54117647 0.42352941 0.64313725 +v 0.08511429 -0.04498159 -0.01547884 0.54117647 0.42352941 0.64313725 +v 0.08027780 -0.04321837 -0.00917260 0.54117647 0.42352941 0.64313725 +v 0.07529980 -0.04360879 -0.01154144 0.54117647 0.42352941 0.64313725 +v 0.06730003 -0.04289091 0.00609685 0.54117647 0.42352941 0.64313725 +v 0.06123153 -0.04460376 0.00739865 0.54117647 0.42352941 0.64313725 +v 0.05939183 -0.04306723 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.09658534 -0.04518310 0.06445366 0.54117647 0.42352941 0.64313725 +v 0.09986516 -0.04689595 0.05479688 0.54117647 0.42352941 0.64313725 +v 0.09866645 -0.04621584 0.04464926 0.54117647 0.42352941 0.64313725 +v 0.09775909 -0.04574985 0.03552601 0.54117647 0.42352941 0.64313725 +v 0.09575290 -0.04480527 0.03977286 0.54117647 0.42352941 0.64313725 +v 0.09384661 -0.04401181 0.04410507 0.54117647 0.42352941 0.64313725 +v 0.10336974 -0.04916295 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.10099728 -0.04757604 0.06090039 0.54117647 0.42352941 0.64313725 +v 0.09884959 -0.04631660 0.02250803 0.54117647 0.42352941 0.64313725 +v 0.09941565 -0.04682038 0.00882849 0.54117647 0.42352941 0.64313725 +v 0.10042290 -0.04835690 -0.00418949 0.54117647 0.42352941 0.64313725 +v 0.09531170 -0.04608990 -0.00617419 0.54117647 0.42352941 0.64313725 +v 0.08977597 -0.04464154 -0.00804152 0.54117647 0.42352941 0.64313725 +v 0.08989251 -0.04515791 -0.01159479 0.54117647 0.42352941 0.64313725 +v 0.07063813 -0.04377252 -0.00855371 0.54117647 0.42352941 0.64313725 +v 0.06656748 -0.04364658 -0.00287702 0.54117647 0.42352941 0.64313725 +v 0.08510597 -0.04687076 -0.02160370 0.54117647 0.42352941 0.64313725 +v 0.07999477 -0.04532164 -0.01867998 0.54117647 0.42352941 0.64313725 +v 0.08007802 -0.04469192 -0.01584164 0.54117647 0.42352941 0.64313725 +v 0.08997575 -0.04590098 -0.01420906 0.54117647 0.42352941 0.64313725 +v 0.09018386 -0.04772718 -0.02060067 0.54117647 0.42352941 0.64313725 +v 0.07007206 -0.04494380 -0.01488130 0.54117647 0.42352941 0.64313725 +v 0.07460887 -0.04648033 -0.02190247 0.54117647 0.42352941 0.64313725 +v 0.05957497 -0.04640476 -0.00567268 0.54117647 0.42352941 0.64313725 +v 0.05540443 -0.04736194 0.00922330 0.54117647 0.42352941 0.64313725 +v 0.05362301 -0.04548537 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.09999003 -0.04697151 0.04868270 0.54117647 0.42352941 0.64313725 +v 0.10654135 -0.05173221 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.10355288 -0.04930148 0.06607557 0.54117647 0.42352941 0.64313725 +v 0.10327818 -0.04907478 0.02359642 0.54117647 0.42352941 0.64313725 +v 0.10212108 -0.04829393 0.04062649 0.54117647 0.42352941 0.64313725 +v 0.10389418 -0.04960375 0.01050375 0.54117647 0.42352941 0.64313725 +v 0.10500966 -0.05119065 -0.00180997 0.54117647 0.42352941 0.64313725 +v 0.10098896 -0.04972969 -0.01021830 0.54117647 0.42352941 0.64313725 +v 0.09574457 -0.04743751 -0.01252312 0.54117647 0.42352941 0.64313725 +v 0.06520228 -0.04595136 -0.01428375 0.54117647 0.42352941 0.64313725 +v 0.08506434 -0.04935186 -0.02706697 0.54117647 0.42352941 0.64313725 +v 0.07966179 -0.04884808 -0.02736575 0.54117647 0.42352941 0.64313725 +v 0.09612750 -0.04930148 -0.01837054 0.54117647 0.42352941 0.64313725 +v 0.09641885 -0.05174481 -0.02362041 0.54117647 0.42352941 0.64313725 +v 0.09028375 -0.05035942 -0.02588256 0.54117647 0.42352941 0.64313725 +v 0.07004709 -0.04503197 -0.01513739 0.54117647 0.42352941 0.64313725 +v 0.07421762 -0.04916295 -0.02729106 0.54117647 0.42352941 0.64313725 +v 0.06905648 -0.04852063 -0.02471947 0.54117647 0.42352941 0.64313725 +v 0.05860101 -0.04794128 -0.01169083 0.54117647 0.42352941 0.64313725 +v 0.05363133 -0.04930148 -0.00297305 0.54117647 0.42352941 0.64313725 +v 0.05019335 -0.05092617 0.01146410 0.54117647 0.42352941 0.64313725 +v 0.05244094 -0.04639217 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.10526771 -0.05063649 0.06157263 0.54117647 0.42352941 0.64313725 +v 0.10672449 -0.05189594 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.10755692 -0.05257604 0.01787705 0.54117647 0.42352941 0.64313725 +v 0.10455181 -0.05005715 0.05185183 0.54117647 0.42352941 0.64313725 +v 0.10520945 -0.05057352 0.03671043 0.54117647 0.42352941 0.64313725 +v 0.10793152 -0.05296646 0.01243511 0.54117647 0.42352941 0.64313725 +v 0.10810634 -0.05315538 0.00978883 0.54117647 0.42352941 0.64313725 +v 0.10878062 -0.05412515 0.00290638 0.54117647 0.42352941 0.64313725 +v 0.10901370 -0.05457855 0.00088966 0.54117647 0.42352941 0.64313725 +v 0.10945490 -0.05547276 -0.00297305 0.54117647 0.42352941 0.64313725 +v 0.10563399 -0.05256344 -0.00746532 0.54117647 0.42352941 0.64313725 +v 0.10151340 -0.05159367 -0.01577762 0.54117647 0.42352941 0.64313725 +v 0.06446140 -0.04813020 -0.01983239 0.54117647 0.42352941 0.64313725 +v 0.05765203 -0.04999418 -0.01722880 0.54117647 0.42352941 0.64313725 +v 0.09032538 -0.05139216 -0.02795263 0.54117647 0.42352941 0.64313725 +v 0.08496445 -0.05247528 -0.03174064 0.54117647 0.42352941 0.64313725 +v 0.07937044 -0.05319316 -0.03350127 0.54117647 0.42352941 0.64313725 +v 0.07406778 -0.05017050 -0.02930777 0.54117647 0.42352941 0.64313725 +v 0.10191297 -0.05401181 -0.02077140 0.54117647 0.42352941 0.64313725 +v 0.09655204 -0.05480525 -0.02815536 0.54117647 0.42352941 0.64313725 +v 0.06842383 -0.05265161 -0.03113242 0.54117647 0.42352941 0.64313725 +v 0.06392864 -0.04969191 -0.02380181 0.54117647 0.42352941 0.64313725 +v 0.05259910 -0.05090098 -0.00854303 0.54117647 0.42352941 0.64313725 +v 0.04849517 -0.05296646 0.00019608 0.54117647 0.42352941 0.64313725 +v 0.04797905 -0.05005715 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.10674945 -0.05192113 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.10717400 -0.05229896 0.06194610 0.54117647 0.42352941 0.64313725 +v 0.10830612 -0.05338208 0.04639922 0.54117647 0.42352941 0.64313725 +v 0.10933836 -0.05446520 0.04666598 0.54117647 0.42352941 0.64313725 +v 0.11075351 -0.05593876 0.01370490 0.54117647 0.42352941 0.64313725 +v 0.11179406 -0.05756344 0.00287437 0.54117647 0.42352941 0.64313725 +v 0.10966301 -0.05603951 -0.00464832 0.54117647 0.42352941 0.64313725 +v 0.11237677 -0.05893623 -0.00204472 0.54117647 0.42352941 0.64313725 +v 0.11007090 -0.05718560 -0.00803086 0.54117647 0.42352941 0.64313725 +v 0.10621670 -0.05442742 -0.01268318 0.54117647 0.42352941 0.64313725 +v 0.05681958 -0.05260123 -0.02219057 0.54117647 0.42352941 0.64313725 +v 0.05158352 -0.05300425 -0.01366487 0.54117647 0.42352941 0.64313725 +v 0.09024213 -0.05596394 -0.03339457 0.54117647 0.42352941 0.64313725 +v 0.08480629 -0.05629140 -0.03555000 0.54117647 0.42352941 0.64313725 +v 0.07923725 -0.05610248 -0.03583810 0.54117647 0.42352941 0.64313725 +v 0.07370151 -0.05472969 -0.03474971 0.54117647 0.42352941 0.64313725 +v 0.10668286 -0.05680777 -0.01739953 0.54117647 0.42352941 0.64313725 +v 0.10212941 -0.05702188 -0.02512495 0.54117647 0.42352941 0.64313725 +v 0.10209611 -0.06066167 -0.02879559 0.54117647 0.42352941 0.64313725 +v 0.09648545 -0.05852061 -0.03191137 0.54117647 0.42352941 0.64313725 +v 0.06317944 -0.05396143 -0.03003337 0.54117647 0.42352941 0.64313725 +v 0.06322106 -0.05369694 -0.02965990 0.54117647 0.42352941 0.64313725 +v 0.06377048 -0.05057352 -0.02509294 0.54117647 0.42352941 0.64313725 +v 0.06809918 -0.05772717 -0.03582743 0.54117647 0.42352941 0.64313725 +v 0.04750456 -0.05461634 -0.00489374 0.54117647 0.42352941 0.64313725 +v 0.04388343 -0.05796646 0.00127380 0.54117647 0.42352941 0.64313725 +v 0.04426636 -0.05732414 0.00346124 0.54117647 0.42352941 0.64313725 +v 0.04480745 -0.05641734 0.00656635 0.54117647 0.42352941 0.64313725 +v 0.04544010 -0.05340727 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.10950484 -0.05471709 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.10972960 -0.05495639 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.10987111 -0.05510752 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11076183 -0.05610248 0.06278907 0.54117647 0.42352941 0.64313725 +v 0.11162757 -0.05718560 0.05479688 0.54117647 0.42352941 0.64313725 +v 0.11305937 -0.05897402 0.01807979 0.54117647 0.42352941 0.64313725 +v 0.11325083 -0.05923850 0.01554022 0.54117647 0.42352941 0.64313725 +v 0.11360046 -0.05974228 0.01080253 0.54117647 0.42352941 0.64313725 +v 0.11414155 -0.06081280 0.00530724 0.54117647 0.42352941 0.64313725 +v 0.11419981 -0.06092615 0.00475237 0.54117647 0.42352941 0.64313725 +v 0.11477420 -0.06248786 -0.00034812 0.54117647 0.42352941 0.64313725 +v 0.11290953 -0.06073724 -0.00657967 0.54117647 0.42352941 0.64313725 +v 0.11055372 -0.05928888 -0.01239508 0.54117647 0.42352941 0.64313725 +v 0.05618693 -0.05581281 -0.02649077 0.54117647 0.42352941 0.64313725 +v 0.05070114 -0.05562389 -0.01826383 0.54117647 0.42352941 0.64313725 +v 0.04653060 -0.05673220 -0.00956740 0.54117647 0.42352941 0.64313725 +v 0.09018386 -0.05703447 -0.03414150 0.54117647 0.42352941 0.64313725 +v 0.08992580 -0.06150550 -0.03724660 0.54117647 0.42352941 0.64313725 +v 0.08458153 -0.06077502 -0.03842036 0.54117647 0.42352941 0.64313725 +v 0.07911238 -0.05896142 -0.03812158 0.54117647 0.42352941 0.64313725 +v 0.07351005 -0.06053573 -0.03871913 0.54117647 0.42352941 0.64313725 +v 0.11087837 -0.06180776 -0.01622577 0.54117647 0.42352941 0.64313725 +v 0.10694092 -0.05975487 -0.02155034 0.54117647 0.42352941 0.64313725 +v 0.10693259 -0.06328131 -0.02509294 0.54117647 0.42352941 0.64313725 +v 0.10661627 -0.06737451 -0.02802732 0.54117647 0.42352941 0.64313725 +v 0.10177978 -0.06489340 -0.03174064 0.54117647 0.42352941 0.64313725 +v 0.09618577 -0.06287829 -0.03485642 0.54117647 0.42352941 0.64313725 +v 0.06297133 -0.05766419 -0.03320250 0.54117647 0.42352941 0.64313725 +v 0.05585395 -0.05961633 -0.03008672 0.54117647 0.42352941 0.64313725 +v 0.06813247 -0.06422590 -0.03916729 0.54117647 0.42352941 0.64313725 +v 0.06285479 -0.05980525 -0.03502715 0.54117647 0.42352941 0.64313725 +v 0.04287618 -0.06017049 -0.00383736 0.54117647 0.42352941 0.64313725 +v 0.04340062 -0.05901180 -0.00116974 0.54117647 0.42352941 0.64313725 +v 0.04091162 -0.06208484 0.00709987 0.54117647 0.42352941 0.64313725 +v 0.04210201 -0.05996898 0.01655391 0.54117647 0.42352941 0.64313725 +v 0.04350884 -0.05624102 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11148605 -0.05708485 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11182735 -0.05755084 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11271807 -0.05877250 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11349224 -0.05983044 0.06361069 0.54117647 0.42352941 0.64313725 +v 0.11500728 -0.06239970 0.06418689 0.54117647 0.42352941 0.64313725 +v 0.11520707 -0.06273975 0.06426159 0.54117647 0.42352941 0.64313725 +v 0.11520707 -0.06273975 0.04868270 0.54117647 0.42352941 0.64313725 +v 0.11721326 -0.06669441 0.01605240 0.54117647 0.42352941 0.64313725 +v 0.11765445 -0.06799164 0.01036504 0.54117647 0.42352941 0.64313725 +v 0.11790418 -0.06873471 0.00705719 0.54117647 0.42352941 0.64313725 +v 0.11513215 -0.06392363 -0.00357060 0.54117647 0.42352941 0.64313725 +v 0.11525702 -0.06444000 -0.00471234 0.54117647 0.42352941 0.64313725 +v 0.11334240 -0.06301683 -0.01069847 0.54117647 0.42352941 0.64313725 +v 0.11066194 -0.06010752 -0.01363285 0.54117647 0.42352941 0.64313725 +v 0.05004351 -0.05881029 -0.02230795 0.54117647 0.42352941 0.64313725 +v 0.04568983 -0.05933925 -0.01378224 0.54117647 0.42352941 0.64313725 +v 0.04201044 -0.06285310 -0.00821225 0.54117647 0.42352941 0.64313725 +v 0.04260147 -0.06101432 -0.00522452 0.54117647 0.42352941 0.64313725 +v 0.09562804 -0.06781532 -0.03700118 0.54117647 0.42352941 0.64313725 +v 0.08948461 -0.06651809 -0.03907125 0.54117647 0.42352941 0.64313725 +v 0.08428185 -0.06587577 -0.04039439 0.54117647 0.42352941 0.64313725 +v 0.07889595 -0.06602690 -0.04099194 0.54117647 0.42352941 0.64313725 +v 0.07906244 -0.06051054 -0.03875114 0.54117647 0.42352941 0.64313725 +v 0.07353502 -0.06755083 -0.04113066 0.54117647 0.42352941 0.64313725 +v 0.11358381 -0.06580020 -0.01439046 0.54117647 0.42352941 0.64313725 +v 0.11098659 -0.06479265 -0.01960832 0.54117647 0.42352941 0.64313725 +v 0.11091999 -0.06635436 -0.02093146 0.54117647 0.42352941 0.64313725 +v 0.11083675 -0.06836947 -0.02262806 0.54117647 0.42352941 0.64313725 +v 0.11041220 -0.07218559 -0.02506093 0.54117647 0.42352941 0.64313725 +v 0.10595864 -0.07198408 -0.03036415 0.54117647 0.42352941 0.64313725 +v 0.10114712 -0.06967929 -0.03398144 0.54117647 0.42352941 0.64313725 +v 0.04970221 -0.06255084 -0.02575451 0.54117647 0.42352941 0.64313725 +v 0.05587060 -0.06401179 -0.03294641 0.54117647 0.42352941 0.64313725 +v 0.04974383 -0.06682035 -0.02859285 0.54117647 0.42352941 0.64313725 +v 0.06311285 -0.06668181 -0.03818561 0.54117647 0.42352941 0.64313725 +v 0.06293803 -0.06205965 -0.03606218 0.54117647 0.42352941 0.64313725 +v 0.06855702 -0.07180775 -0.04098127 0.54117647 0.42352941 0.64313725 +v 0.03952976 -0.06580020 -0.00095633 0.54117647 0.42352941 0.64313725 +v 0.04021237 -0.06372212 0.00289571 0.54117647 0.42352941 0.64313725 +v 0.03842262 -0.06733673 0.01085588 0.54117647 0.42352941 0.64313725 +v 0.03926338 -0.06528383 0.01947762 0.54117647 0.42352941 0.64313725 +v 0.03977117 -0.06379769 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11379192 -0.06039719 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11469096 -0.06192111 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11482415 -0.06214781 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11545681 -0.06335688 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11710504 -0.06697149 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11674708 -0.06614025 0.06500852 0.54117647 0.42352941 0.64313725 +v 0.11702180 -0.06661884 0.05479688 0.54117647 0.42352941 0.64313725 +v 0.11737142 -0.06752564 0.06531797 0.54117647 0.42352941 0.64313725 +v 0.11840365 -0.07067425 0.04162952 0.54117647 0.42352941 0.64313725 +v 0.11870333 -0.07179516 0.05479688 0.54117647 0.42352941 0.64313725 +v 0.11870333 -0.07179516 0.05185183 0.54117647 0.42352941 0.64313725 +v 0.11927771 -0.07401178 0.02336167 0.54117647 0.42352941 0.64313725 +v 0.11956907 -0.07534679 0.01526278 0.54117647 0.42352941 0.64313725 +v 0.11827878 -0.07086317 0.00258627 0.54117647 0.42352941 0.64313725 +v 0.11852852 -0.07231153 -0.00047616 0.54117647 0.42352941 0.64313725 +v 0.11562329 -0.06704705 -0.00887382 0.54117647 0.42352941 0.64313725 +v 0.04505718 -0.06247527 -0.01752758 0.54117647 0.42352941 0.64313725 +v 0.04137779 -0.06595134 -0.01195759 0.54117647 0.42352941 0.64313725 +v 0.04186892 -0.06355839 -0.00907656 0.54117647 0.42352941 0.64313725 +v 0.03893040 -0.06830650 -0.00444558 0.54117647 0.42352941 0.64313725 +v 0.10022311 -0.07495636 -0.03559268 0.54117647 0.42352941 0.64313725 +v 0.09484554 -0.07326871 -0.03840968 0.54117647 0.42352941 0.64313725 +v 0.08930980 -0.06852060 -0.03979685 0.54117647 0.42352941 0.64313725 +v 0.08392390 -0.07151808 -0.04153614 0.54117647 0.42352941 0.64313725 +v 0.07873778 -0.07421329 -0.04226172 0.54117647 0.42352941 0.64313725 +v 0.07379308 -0.07587576 -0.04218703 0.54117647 0.42352941 0.64313725 +v 0.11571486 -0.06881027 -0.01092255 0.54117647 0.42352941 0.64313725 +v 0.11577313 -0.07009491 -0.01241642 0.54117647 0.42352941 0.64313725 +v 0.11359213 -0.06907476 -0.01764495 0.54117647 0.42352941 0.64313725 +v 0.11331743 -0.07282790 -0.02047262 0.54117647 0.42352941 0.64313725 +v 0.11273472 -0.07703445 -0.02290549 0.54117647 0.42352941 0.64313725 +v 0.10999598 -0.07465410 -0.02625602 0.54117647 0.42352941 0.64313725 +v 0.10965468 -0.07665661 -0.02721636 0.54117647 0.42352941 0.64313725 +v 0.10498468 -0.07703445 -0.03217813 0.54117647 0.42352941 0.64313725 +v 0.04478247 -0.07020826 -0.02358840 0.54117647 0.42352941 0.64313725 +v 0.04473253 -0.06610247 -0.02079274 0.54117647 0.42352941 0.64313725 +v 0.05626185 -0.06894881 -0.03510184 0.54117647 0.42352941 0.64313725 +v 0.05020167 -0.07156846 -0.03085499 0.54117647 0.42352941 0.64313725 +v 0.04523199 -0.07472966 -0.02593590 0.54117647 0.42352941 0.64313725 +v 0.06314614 -0.06704705 -0.03827097 0.54117647 0.42352941 0.64313725 +v 0.05701937 -0.07433924 -0.03661705 0.54117647 0.42352941 0.64313725 +v 0.06393697 -0.07460372 -0.03990355 0.54117647 0.42352941 0.64313725 +v 0.06969746 -0.08381026 -0.04172820 0.54117647 0.42352941 0.64313725 +v 0.06541039 -0.08465408 -0.04067183 0.54117647 0.42352941 0.64313725 +v 0.03742369 -0.07087577 0.00358929 0.54117647 0.42352941 0.64313725 +v 0.03804802 -0.06869693 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.03727385 -0.07096392 0.02250803 0.54117647 0.42352941 0.64313725 +v 0.11737974 -0.06767677 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11806235 -0.06986821 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11867003 -0.07179516 0.06626764 0.54117647 0.42352941 0.64313725 +v 0.11886981 -0.07246266 0.06641703 0.54117647 0.42352941 0.64313725 +v 0.11911954 -0.07396140 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11954409 -0.07596392 0.04292065 0.54117647 0.42352941 0.64313725 +v 0.11979382 -0.07819313 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11990205 -0.07787828 0.00833765 0.54117647 0.42352941 0.64313725 +v 0.12011847 -0.08185812 0.00247956 0.54117647 0.42352941 0.64313725 +v 0.11854516 -0.07268936 -0.00092432 0.54117647 0.42352941 0.64313725 +v 0.04101983 -0.06949037 -0.01521208 0.54117647 0.42352941 0.64313725 +v 0.04131119 -0.06658106 -0.01253379 0.54117647 0.42352941 0.64313725 +v 0.03848921 -0.07124100 -0.00760404 0.54117647 0.42352941 0.64313725 +v 0.03664951 -0.07601430 -0.00247154 0.54117647 0.42352941 0.64313725 +v 0.10401072 -0.08870949 -0.03340524 0.54117647 0.42352941 0.64313725 +v 0.10317828 -0.08838204 -0.03398144 0.54117647 0.42352941 0.64313725 +v 0.10223762 -0.08801680 -0.03463234 0.54117647 0.42352941 0.64313725 +v 0.09973197 -0.08705962 -0.03636096 0.54117647 0.42352941 0.64313725 +v 0.09710978 -0.08624098 -0.03783348 0.54117647 0.42352941 0.64313725 +v 0.08837746 -0.07689591 -0.04103462 0.54117647 0.42352941 0.64313725 +v 0.09273946 -0.08518305 -0.03974349 0.54117647 0.42352941 0.64313725 +v 0.09235654 -0.08508229 -0.03990355 0.54117647 0.42352941 0.64313725 +v 0.08367417 -0.08387323 -0.04208033 0.54117647 0.42352941 0.64313725 +v 0.08307481 -0.08384804 -0.04213368 0.54117647 0.42352941 0.64313725 +v 0.07861292 -0.08364653 -0.04249648 0.54117647 0.42352941 0.64313725 +v 0.07584921 -0.08365912 -0.04245380 0.54117647 0.42352941 0.64313725 +v 0.07500012 -0.08368431 -0.04241111 0.54117647 0.42352941 0.64313725 +v 0.07415103 -0.08372210 -0.04234709 0.54117647 0.42352941 0.64313725 +v 0.06972244 -0.08406215 -0.04173887 0.54117647 0.42352941 0.64313725 +v 0.11865338 -0.07540976 -0.00412546 0.54117647 0.42352941 0.64313725 +v 0.11873662 -0.07753822 -0.00663302 0.54117647 0.42352941 0.64313725 +v 0.11725488 -0.07826870 -0.01323804 0.54117647 0.42352941 0.64313725 +v 0.11572318 -0.07194629 -0.01404900 0.54117647 0.42352941 0.64313725 +v 0.11566491 -0.07358357 -0.01550019 0.54117647 0.42352941 0.64313725 +v 0.11547345 -0.07552311 -0.01682333 0.54117647 0.42352941 0.64313725 +v 0.11526535 -0.07761379 -0.01824250 0.54117647 0.42352941 0.64313725 +v 0.11450782 -0.08228633 -0.02076073 0.54117647 0.42352941 0.64313725 +v 0.11184401 -0.08160623 -0.02498623 0.54117647 0.42352941 0.64313725 +v 0.10848094 -0.08198406 -0.02916906 0.54117647 0.42352941 0.64313725 +v 0.10639984 -0.08983040 -0.03137785 0.54117647 0.42352941 0.64313725 +v 0.04139443 -0.07796643 -0.02061134 0.54117647 0.42352941 0.64313725 +v 0.04101151 -0.07348281 -0.01806110 0.54117647 0.42352941 0.64313725 +v 0.05105909 -0.07671958 -0.03260495 0.54117647 0.42352941 0.64313725 +v 0.04608108 -0.07961631 -0.02790994 0.54117647 0.42352941 0.64313725 +v 0.04395835 -0.08121580 -0.02537037 0.54117647 0.42352941 0.64313725 +v 0.05809322 -0.08005711 -0.03762007 0.54117647 0.42352941 0.64313725 +v 0.05226613 -0.08218557 -0.03394943 0.54117647 0.42352941 0.64313725 +v 0.06444475 -0.08483041 -0.04036238 0.54117647 0.42352941 0.64313725 +v 0.05974146 -0.08586315 -0.03849505 0.54117647 0.42352941 0.64313725 +v 0.06759971 -0.10097648 -0.04126937 0.54117647 0.42352941 0.64313725 +v 0.06520228 -0.12796637 -0.04060780 0.54117647 0.42352941 0.64313725 +v 0.03616670 -0.07620321 0.00807089 0.54117647 0.42352941 0.64313725 +v 0.03677438 -0.07289087 0.01465457 0.54117647 0.42352941 0.64313725 +v 0.03724055 -0.07125360 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.03715730 -0.07153068 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11862008 -0.07166921 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11886149 -0.07246266 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11893641 -0.07289087 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11980215 -0.07833168 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11997696 -0.08103948 0.05479688 0.54117647 0.42352941 0.64313725 +v 0.11998529 -0.08251303 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.12023502 -0.09334425 0.00451762 0.54117647 0.42352941 0.64313725 +v 0.12025999 -0.09925104 0.00049485 0.54117647 0.42352941 0.64313725 +v 0.12007686 -0.08732411 -0.00252489 0.54117647 0.42352941 0.64313725 +v 0.03825613 -0.07459113 -0.01047439 0.54117647 0.42352941 0.64313725 +v 0.03646638 -0.08261378 -0.00759337 0.54117647 0.42352941 0.64313725 +v 0.03547577 -0.08705962 -0.00217277 0.54117647 0.42352941 0.64313725 +v 0.03565891 -0.08097651 0.00256492 0.54117647 0.42352941 0.64313725 +v 0.10639984 -0.12796637 -0.03137785 0.54117647 0.42352941 0.64313725 +v 0.10240411 -0.12796637 -0.03461100 0.54117647 0.42352941 0.64313725 +v 0.10318661 -0.10097648 -0.03403479 0.54117647 0.42352941 0.64313725 +v 0.09973197 -0.12796637 -0.03636096 0.54117647 0.42352941 0.64313725 +v 0.09732621 -0.10097648 -0.03771611 0.54117647 0.42352941 0.64313725 +v 0.09494543 -0.12796637 -0.03885785 0.54117647 0.42352941 0.64313725 +v 0.09415461 -0.10097648 -0.03919930 0.54117647 0.42352941 0.64313725 +v 0.08746178 -0.08426366 -0.04137608 0.54117647 0.42352941 0.64313725 +v 0.08517256 -0.08402436 -0.04180289 0.54117647 0.42352941 0.64313725 +v 0.09371341 -0.12796637 -0.03931668 0.54117647 0.42352941 0.64313725 +v 0.08985921 -0.12796637 -0.04073585 0.54117647 0.42352941 0.64313725 +v 0.08518088 -0.10097648 -0.04184558 0.54117647 0.42352941 0.64313725 +v 0.08457320 -0.12796637 -0.04194161 0.54117647 0.42352941 0.64313725 +v 0.07918730 -0.12796637 -0.04247513 0.54117647 0.42352941 0.64313725 +v 0.07584921 -0.12796637 -0.04245380 0.54117647 0.42352941 0.64313725 +v 0.07418432 -0.10097648 -0.04234709 0.54117647 0.42352941 0.64313725 +v 0.07152883 -0.10097648 -0.04204832 0.54117647 0.42352941 0.64313725 +v 0.07047164 -0.12796637 -0.04187759 0.54117647 0.42352941 0.64313725 +v 0.11991037 -0.09056088 -0.00479770 0.54117647 0.42352941 0.64313725 +v 0.11871165 -0.07794125 -0.00693180 0.54117647 0.42352941 0.64313725 +v 0.11847024 -0.08150547 -0.00962075 0.54117647 0.42352941 0.64313725 +v 0.11828711 -0.08427625 -0.01169083 0.54117647 0.42352941 0.64313725 +v 0.11613941 -0.08622839 -0.01789037 0.54117647 0.42352941 0.64313725 +v 0.11416652 -0.08387323 -0.02145431 0.54117647 0.42352941 0.64313725 +v 0.11418316 -0.09513266 -0.02185979 0.54117647 0.42352941 0.64313725 +v 0.11332575 -0.08779010 -0.02316158 0.54117647 0.42352941 0.64313725 +v 0.11192725 -0.09325609 -0.02523165 0.54117647 0.42352941 0.64313725 +v 0.10928841 -0.09149287 -0.02839011 0.54117647 0.42352941 0.64313725 +v 0.10853089 -0.09100169 -0.02928644 0.54117647 0.42352941 0.64313725 +v 0.10811466 -0.12796637 -0.02972392 0.54117647 0.42352941 0.64313725 +v 0.04143606 -0.07821832 -0.02072872 0.54117647 0.42352941 0.64313725 +v 0.04218525 -0.08281530 -0.02285214 0.54117647 0.42352941 0.64313725 +v 0.04062859 -0.08491857 -0.02036592 0.54117647 0.42352941 0.64313725 +v 0.03861408 -0.08237449 -0.01544683 0.54117647 0.42352941 0.64313725 +v 0.03828942 -0.07831908 -0.01307799 0.54117647 0.42352941 0.64313725 +v 0.04727147 -0.08475484 -0.02956386 0.54117647 0.42352941 0.64313725 +v 0.04388343 -0.09013267 -0.02566915 0.54117647 0.42352941 0.64313725 +v 0.04222687 -0.08306718 -0.02296952 0.54117647 0.42352941 0.64313725 +v 0.05936686 -0.08597650 -0.03830298 0.54117647 0.42352941 0.64313725 +v 0.05861766 -0.10097648 -0.03795085 0.54117647 0.42352941 0.64313725 +v 0.05596217 -0.08698406 -0.03649967 0.54117647 0.42352941 0.64313725 +v 0.05189985 -0.08852058 -0.03373602 0.54117647 0.42352941 0.64313725 +v 0.04802900 -0.09038456 -0.03038549 0.54117647 0.42352941 0.64313725 +v 0.06039909 -0.12796637 -0.03879382 0.54117647 0.42352941 0.64313725 +v 0.05974146 -0.12796637 -0.03849505 0.54117647 0.42352941 0.64313725 +v 0.06799096 -0.16917539 -0.04104529 0.54117647 0.42352941 0.64313725 +v 0.03616670 -0.07675737 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.03669946 -0.07353319 0.04868270 0.54117647 0.42352941 0.64313725 +v 0.11960236 -0.08711000 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11992701 -0.16917539 0.00119910 0.54117647 0.42352941 0.64313725 +v 0.12022669 -0.12796637 0.00139117 0.54117647 0.42352941 0.64313725 +v 0.12021005 -0.10097648 -0.00154321 0.54117647 0.42352941 0.64313725 +v 0.12011847 -0.09665659 -0.00321847 0.54117647 0.42352941 0.64313725 +v 0.03709071 -0.09037196 -0.01210697 0.54117647 0.42352941 0.64313725 +v 0.03577545 -0.09417548 -0.00650498 0.54117647 0.42352941 0.64313725 +v 0.03532593 -0.10097648 -0.00258891 0.54117647 0.42352941 0.64313725 +v 0.03526766 -0.09806717 -0.00090298 0.54117647 0.42352941 0.64313725 +v 0.03522604 -0.09597649 0.00031345 0.54117647 0.42352941 0.64313725 +v 0.03523436 -0.09496893 0.00097502 0.54117647 0.42352941 0.64313725 +v 0.03526766 -0.09160622 0.00317314 0.54117647 0.42352941 0.64313725 +v 0.03528431 -0.08999413 0.00424019 0.54117647 0.42352941 0.64313725 +v 0.03582540 -0.08165661 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.03585870 -0.08030900 0.05479688 0.54117647 0.42352941 0.64313725 +v 0.03593361 -0.07898659 0.04868270 0.54117647 0.42352941 0.64313725 +v 0.03530928 -0.08925106 0.00482706 0.54117647 0.42352941 0.64313725 +v 0.03541750 -0.08621580 0.00730261 0.54117647 0.42352941 0.64313725 +v 0.10841434 -0.16917539 -0.02897699 0.54117647 0.42352941 0.64313725 +v 0.10381926 -0.15632906 -0.03318115 0.54117647 0.42352941 0.64313725 +v 0.10346132 -0.15697137 -0.03345859 0.54117647 0.42352941 0.64313725 +v 0.10201286 -0.15799152 -0.03452564 0.54117647 0.42352941 0.64313725 +v 0.09987348 -0.16917539 -0.03593414 0.54117647 0.42352941 0.64313725 +v 0.09716805 -0.15799152 -0.03746001 0.54117647 0.42352941 0.64313725 +v 0.09490381 -0.15697137 -0.03854841 0.54117647 0.42352941 0.64313725 +v 0.09406304 -0.15601420 -0.03891120 0.54117647 0.42352941 0.64313725 +v 0.09397148 -0.15557339 -0.03895388 0.54117647 0.42352941 0.64313725 +v 0.08981759 -0.16917539 -0.04042641 0.54117647 0.42352941 0.64313725 +v 0.08471472 -0.12796637 -0.04190960 0.54117647 0.42352941 0.64313725 +v 0.07893757 -0.16917539 -0.04217636 0.54117647 0.42352941 0.64313725 +v 0.11967728 -0.10087573 -0.00682509 0.54117647 0.42352941 0.64313725 +v 0.11964399 -0.09407473 -0.00695314 0.54117647 0.42352941 0.64313725 +v 0.11881987 -0.09153065 -0.01068780 0.54117647 0.42352941 0.64313725 +v 0.11756288 -0.08874728 -0.01404900 0.54117647 0.42352941 0.64313725 +v 0.11657227 -0.09480521 -0.01725014 0.54117647 0.42352941 0.64313725 +v 0.11608114 -0.09710999 -0.01831719 0.54117647 0.42352941 0.64313725 +v 0.11250163 -0.10097648 -0.02445271 0.54117647 0.42352941 0.64313725 +v 0.11462436 -0.12796637 -0.02110218 0.54117647 0.42352941 0.64313725 +v 0.11164422 -0.12796637 -0.02562646 0.54117647 0.42352941 0.64313725 +v 0.04077843 -0.09563644 -0.02096346 0.54117647 0.42352941 0.64313725 +v 0.03923009 -0.08668179 -0.01764495 0.54117647 0.42352941 0.64313725 +v 0.03804802 -0.08850798 -0.01489197 0.54117647 0.42352941 0.64313725 +v 0.04667212 -0.12796637 -0.02899833 0.54117647 0.42352941 0.64313725 +v 0.04544843 -0.10097648 -0.02762184 0.54117647 0.42352941 0.64313725 +v 0.04452441 -0.09253821 -0.02651211 0.54117647 0.42352941 0.64313725 +v 0.04355046 -0.09325609 -0.02524232 0.54117647 0.42352941 0.64313725 +v 0.04110308 -0.09534677 -0.02146498 0.54117647 0.42352941 0.64313725 +v 0.05592887 -0.12796637 -0.03641431 0.54117647 0.42352941 0.64313725 +v 0.05499654 -0.12796637 -0.03590213 0.54117647 0.42352941 0.64313725 +v 0.05176666 -0.12796637 -0.03355462 0.54117647 0.42352941 0.64313725 +v 0.05060957 -0.12796637 -0.03271165 0.54117647 0.42352941 0.64313725 +v 0.05077606 -0.10097648 -0.03285037 0.54117647 0.42352941 0.64313725 +v 0.05769365 -0.16917539 -0.03711856 0.54117647 0.42352941 0.64313725 +v 0.03591696 -0.08033419 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11945253 -0.08888582 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11818721 -0.16917539 0.01206164 0.54117647 0.42352941 0.64313725 +v 0.11880322 -0.16917539 -0.00975947 0.54117647 0.42352941 0.64313725 +v 0.12005188 -0.12796637 -0.00389071 0.54117647 0.42352941 0.64313725 +v 0.12011015 -0.12796637 -0.00216210 0.54117647 0.42352941 0.64313725 +v 0.03679935 -0.10097648 -0.01136004 0.54117647 0.42352941 0.64313725 +v 0.03649968 -0.10097648 -0.01019696 0.54117647 0.42352941 0.64313725 +v 0.03628324 -0.10097648 -0.00931131 0.54117647 0.42352941 0.64313725 +v 0.03583372 -0.10097648 -0.00701716 0.54117647 0.42352941 0.64313725 +v 0.03568388 -0.12796637 -0.00606749 0.54117647 0.42352941 0.64313725 +v 0.03527598 -0.10098908 -0.00166058 0.54117647 0.42352941 0.64313725 +v 0.03532593 -0.12796637 -0.00258891 0.54117647 0.42352941 0.64313725 +v 0.03532593 -0.12796637 0.00302375 0.54117647 0.42352941 0.64313725 +v 0.03557567 -0.16917539 -0.00119108 0.54117647 0.42352941 0.64313725 +v 0.03615005 -0.08741227 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11487409 -0.16917539 -0.02005648 0.54117647 0.42352941 0.64313725 +v 0.11917782 -0.12796637 -0.00941801 0.54117647 0.42352941 0.64313725 +v 0.11813726 -0.09996893 -0.01318469 0.54117647 0.42352941 0.64313725 +v 0.11868668 -0.10097648 -0.01137071 0.54117647 0.42352941 0.64313725 +v 0.11701347 -0.12796637 -0.01623645 0.54117647 0.42352941 0.64313725 +v 0.11653065 -0.10097648 -0.01734617 0.54117647 0.42352941 0.64313725 +v 0.04323413 -0.12796637 -0.02480484 0.54117647 0.42352941 0.64313725 +v 0.04036221 -0.12796637 -0.02021653 0.54117647 0.42352941 0.64313725 +v 0.04017907 -0.10097648 -0.01987508 0.54117647 0.42352941 0.64313725 +v 0.03851419 -0.09820570 -0.01634315 0.54117647 0.42352941 0.64313725 +v 0.04876987 -0.16917539 -0.03066293 0.54117647 0.42352941 0.64313725 +v 0.11873662 -0.09243745 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11368370 -0.16917539 0.02212390 0.54117647 0.42352941 0.64313725 +v 0.11795413 -0.09495634 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11868668 -0.12796637 -0.01137071 0.54117647 0.42352941 0.64313725 +v 0.03825613 -0.12796637 -0.01570293 0.54117647 0.42352941 0.64313725 +v 0.03679935 -0.12796637 -0.01136004 0.54117647 0.42352941 0.64313725 +v 0.03635816 -0.12796637 -0.00928997 0.54117647 0.42352941 0.64313725 +v 0.03731547 -0.16917539 -0.01206429 0.54117647 0.42352941 0.64313725 +v 0.03669946 -0.16917539 0.00976749 0.54117647 0.42352941 0.64313725 +v 0.03634983 -0.08859614 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11824548 -0.10097648 -0.01283257 0.54117647 0.42352941 0.64313725 +v 0.04181898 -0.16917539 -0.02211588 0.54117647 0.42352941 0.64313725 +v 0.10673281 -0.16917539 0.03067095 0.54117647 0.42352941 0.64313725 +v 0.11673044 -0.09867170 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11637248 -0.09952812 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11610611 -0.10012006 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11588968 -0.10058605 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11551508 -0.10137950 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11538188 -0.10164399 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11504058 -0.10227371 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.11358381 -0.10489335 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.04062859 -0.16917539 0.02005383 0.54117647 0.42352941 0.64313725 +v 0.03737374 -0.09347020 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.03684930 -0.09153065 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.03654130 -0.08972965 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.09780903 -0.16917539 0.03712658 0.54117647 0.42352941 0.64313725 +v 0.10942160 -0.11054826 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.04708834 -0.16917539 0.02898501 0.54117647 0.42352941 0.64313725 +v 0.03962966 -0.09999412 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.03942987 -0.09952812 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.03903862 -0.09857094 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.03853083 -0.09729890 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.03827278 -0.09645508 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.08751172 -0.16917539 0.04105331 0.54117647 0.42352941 0.64313725 +v 0.10794818 -0.11217294 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.10730719 -0.11287823 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.10180475 -0.11753817 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.10078917 -0.11819309 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.05562919 -0.16917539 0.03593149 0.54117647 0.42352941 0.64313725 +v 0.04569816 -0.10966665 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.04368365 -0.10704701 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.04359208 -0.10692106 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.04266807 -0.10559864 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.04153595 -0.10352056 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.04141941 -0.10330646 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.07656511 -0.16917539 0.04217371 0.54117647 0.42352941 0.64313725 +v 0.09552814 -0.12114018 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.09298087 -0.12237444 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.09267286 -0.12248779 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.09035035 -0.12326864 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.08602165 -0.12443993 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.08387395 -0.12486814 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.06568509 -0.16917539 0.04043443 0.54117647 0.42352941 0.64313725 +v 0.05492162 -0.11816790 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.04941085 -0.11378503 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.04900295 -0.11340720 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.04740467 -0.11164398 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.08327459 -0.12496889 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.08310811 -0.12498149 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.08060245 -0.12517041 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.07610727 -0.12525857 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.07459222 -0.12517041 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.07353502 -0.12510744 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.06645926 -0.12364648 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.06391199 -0.12281525 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.05737732 -0.11972961 0.06651306 0.54117647 0.42352941 0.64313725 +v 0.05644499 -0.11913767 0.06651306 0.54117647 0.42352941 0.64313725 +f 530 531 532 +f 530 532 533 +f 530 533 534 +f 530 534 535 +f 530 535 536 +f 530 536 545 +f 530 545 564 +f 530 564 590 +f 530 590 612 +f 530 612 637 +f 530 637 666 +f 530 666 702 +f 530 702 744 +f 530 744 790 +f 530 790 845 +f 530 845 846 +f 530 846 906 +f 530 906 961 +f 530 961 921 +f 530 921 976 +f 530 976 997 +f 530 997 1012 +f 530 1012 1011 +f 530 1011 1010 +f 530 1010 1020 +f 530 1020 1019 +f 530 1019 1018 +f 530 1018 1017 +f 530 1017 1016 +f 530 1016 1032 +f 530 1032 1031 +f 530 1031 1030 +f 530 1030 1029 +f 530 1029 1028 +f 530 1028 1027 +f 530 1027 1044 +f 530 1044 1043 +f 530 1043 1042 +f 530 1042 1041 +f 530 1041 1054 +f 530 1054 1053 +f 530 1053 1052 +f 530 1052 1051 +f 530 1051 1050 +f 530 1050 1049 +f 530 1049 1048 +f 530 1048 1047 +f 530 1047 1046 +f 530 1046 1045 +f 530 1045 1039 +f 530 1039 1038 +f 530 1038 1037 +f 530 1037 1036 +f 530 1036 1035 +f 530 1035 1034 +f 530 1034 1025 +f 530 1025 1024 +f 530 1024 1023 +f 530 1023 1022 +f 530 1022 1014 +f 530 1014 1008 +f 530 1008 1007 +f 530 1007 1006 +f 530 1006 1005 +f 530 1005 1004 +f 530 1004 1003 +f 530 1003 1002 +f 530 1002 1001 +f 530 1001 990 +f 530 990 988 +f 530 988 962 +f 530 962 908 +f 530 908 852 +f 530 852 850 +f 530 850 798 +f 530 798 796 +f 530 796 849 +f 530 849 848 +f 530 848 847 +f 530 847 793 +f 530 793 792 +f 530 792 749 +f 530 749 748 +f 530 748 747 +f 530 747 746 +f 530 746 745 +f 530 745 705 +f 530 705 704 +f 530 704 703 +f 530 703 669 +f 530 669 668 +f 530 668 667 +f 530 667 638 +f 530 638 614 +f 530 614 592 +f 530 592 571 +f 530 571 548 +f 530 548 537 +f 530 537 531 +f 531 534 533 +f 531 533 532 +f 531 537 538 +f 531 538 539 +f 531 539 540 +f 531 540 534 +f 534 541 535 +f 534 540 542 +f 534 542 541 +f 535 541 543 +f 535 543 536 +f 536 543 544 +f 536 544 545 +f 537 546 547 +f 537 547 538 +f 537 548 549 +f 537 549 550 +f 537 550 546 +f 538 547 551 +f 538 551 539 +f 539 551 552 +f 539 552 553 +f 539 553 540 +f 540 553 554 +f 540 554 555 +f 540 555 542 +f 541 556 557 +f 541 557 543 +f 541 542 558 +f 541 558 556 +f 542 555 559 +f 542 559 560 +f 542 560 561 +f 542 561 558 +f 543 557 544 +f 544 557 556 +f 544 556 562 +f 544 562 563 +f 544 563 545 +f 545 563 564 +f 546 550 547 +f 547 550 551 +f 548 565 566 +f 548 566 567 +f 548 567 568 +f 548 568 569 +f 548 569 551 +f 548 551 570 +f 548 570 549 +f 548 571 572 +f 548 572 565 +f 549 570 550 +f 550 570 551 +f 551 569 568 +f 551 568 573 +f 551 573 574 +f 551 574 552 +f 552 554 553 +f 552 574 575 +f 552 575 576 +f 552 576 554 +f 554 576 577 +f 554 577 555 +f 555 577 578 +f 555 578 559 +f 556 558 561 +f 556 561 579 +f 556 579 580 +f 556 580 562 +f 559 581 582 +f 559 582 583 +f 559 583 560 +f 559 578 584 +f 559 584 585 +f 559 585 581 +f 560 583 561 +f 561 586 579 +f 561 583 582 +f 561 582 587 +f 561 587 586 +f 562 580 563 +f 563 580 588 +f 563 588 589 +f 563 589 590 +f 563 590 564 +f 565 572 566 +f 566 591 573 +f 566 573 567 +f 566 572 591 +f 567 573 568 +f 571 592 593 +f 571 593 594 +f 571 594 595 +f 571 595 572 +f 572 595 591 +f 573 591 595 +f 573 595 594 +f 573 594 574 +f 574 594 596 +f 574 596 575 +f 575 596 597 +f 575 597 598 +f 575 598 599 +f 575 599 576 +f 576 578 577 +f 576 599 578 +f 578 599 584 +f 579 586 580 +f 580 586 600 +f 580 600 588 +f 581 585 601 +f 581 601 602 +f 581 602 582 +f 582 602 587 +f 584 599 585 +f 585 599 603 +f 585 603 604 +f 585 604 605 +f 585 605 601 +f 586 587 606 +f 586 606 600 +f 587 602 607 +f 587 607 608 +f 587 608 606 +f 588 600 609 +f 588 609 610 +f 588 610 589 +f 589 610 611 +f 589 611 590 +f 590 611 612 +f 592 613 593 +f 592 614 615 +f 592 615 613 +f 593 613 616 +f 593 616 594 +f 594 616 617 +f 594 617 596 +f 596 617 615 +f 596 615 618 +f 596 618 619 +f 596 619 597 +f 597 619 620 +f 597 620 621 +f 597 621 622 +f 597 622 623 +f 597 623 598 +f 598 603 599 +f 598 623 624 +f 598 624 603 +f 600 606 608 +f 600 608 625 +f 600 625 626 +f 600 626 609 +f 601 605 627 +f 601 627 628 +f 601 628 602 +f 602 628 629 +f 602 629 630 +f 602 630 607 +f 603 624 604 +f 604 627 605 +f 604 624 631 +f 604 631 632 +f 604 632 627 +f 607 630 608 +f 608 630 633 +f 608 633 634 +f 608 634 625 +f 609 626 635 +f 609 635 610 +f 610 635 636 +f 610 636 611 +f 611 636 637 +f 611 637 612 +f 613 615 617 +f 613 617 616 +f 614 638 639 +f 614 639 615 +f 615 640 641 +f 615 641 618 +f 615 639 640 +f 618 641 642 +f 618 642 619 +f 619 642 620 +f 620 642 643 +f 620 643 621 +f 621 643 622 +f 622 644 623 +f 622 643 645 +f 622 645 644 +f 623 644 646 +f 623 646 647 +f 623 647 624 +f 624 647 631 +f 625 634 626 +f 626 634 648 +f 626 648 649 +f 626 649 635 +f 627 632 650 +f 627 650 628 +f 628 650 651 +f 628 651 629 +f 629 651 652 +f 629 652 653 +f 629 653 630 +f 630 653 633 +f 631 647 654 +f 631 654 655 +f 631 655 632 +f 632 655 656 +f 632 656 657 +f 632 657 650 +f 633 658 659 +f 633 659 660 +f 633 660 634 +f 633 653 661 +f 633 661 658 +f 634 660 648 +f 635 649 662 +f 635 662 636 +f 636 662 663 +f 636 663 664 +f 636 664 665 +f 636 665 637 +f 637 665 666 +f 638 667 639 +f 639 667 640 +f 640 667 641 +f 641 667 668 +f 641 668 669 +f 641 669 642 +f 642 669 670 +f 642 670 671 +f 642 671 672 +f 642 672 673 +f 642 673 674 +f 642 674 643 +f 643 674 675 +f 643 675 676 +f 643 676 645 +f 644 645 646 +f 645 676 677 +f 645 677 678 +f 645 678 646 +f 646 678 679 +f 646 679 647 +f 647 679 654 +f 648 659 658 +f 648 658 680 +f 648 680 681 +f 648 681 649 +f 648 660 659 +f 649 681 682 +f 649 682 662 +f 650 657 683 +f 650 683 651 +f 651 683 684 +f 651 684 685 +f 651 685 686 +f 651 686 652 +f 652 686 653 +f 653 686 687 +f 653 687 661 +f 654 679 688 +f 654 688 689 +f 654 689 655 +f 655 689 690 +f 655 690 656 +f 656 690 691 +f 656 691 692 +f 656 692 657 +f 657 692 693 +f 657 693 684 +f 657 684 683 +f 658 661 694 +f 658 694 695 +f 658 695 680 +f 661 687 696 +f 661 696 697 +f 661 697 694 +f 662 682 698 +f 662 698 699 +f 662 699 663 +f 663 699 700 +f 663 700 701 +f 663 701 664 +f 664 701 665 +f 665 701 666 +f 666 701 702 +f 669 703 670 +f 670 703 671 +f 671 703 704 +f 671 704 705 +f 671 705 706 +f 671 706 672 +f 672 706 673 +f 673 706 674 +f 674 706 707 +f 674 707 708 +f 674 708 709 +f 674 709 710 +f 674 710 676 +f 674 676 675 +f 676 710 711 +f 676 711 712 +f 676 712 677 +f 677 712 713 +f 677 713 678 +f 678 713 714 +f 678 714 715 +f 678 715 679 +f 679 715 716 +f 679 716 688 +f 680 695 717 +f 680 717 681 +f 681 717 718 +f 681 718 682 +f 682 718 719 +f 682 719 720 +f 682 720 698 +f 684 693 721 +f 684 721 722 +f 684 722 723 +f 684 723 685 +f 685 723 724 +f 685 724 725 +f 685 725 686 +f 686 725 687 +f 687 725 724 +f 687 724 726 +f 687 726 696 +f 688 716 715 +f 688 715 727 +f 688 727 728 +f 688 728 689 +f 689 728 690 +f 690 728 729 +f 690 729 730 +f 690 730 691 +f 691 730 731 +f 691 731 732 +f 691 732 692 +f 692 732 733 +f 692 733 693 +f 693 733 721 +f 694 697 695 +f 695 734 717 +f 695 697 735 +f 695 735 736 +f 695 736 734 +f 696 737 738 +f 696 738 697 +f 696 726 739 +f 696 739 737 +f 697 738 735 +f 698 720 740 +f 698 740 741 +f 698 741 700 +f 698 700 699 +f 700 741 742 +f 700 742 743 +f 700 743 702 +f 700 702 701 +f 702 743 744 +f 705 745 706 +f 706 745 707 +f 707 745 708 +f 708 745 746 +f 708 746 747 +f 708 747 748 +f 708 748 749 +f 708 749 750 +f 708 750 751 +f 708 751 710 +f 708 710 709 +f 710 751 752 +f 710 752 711 +f 711 752 712 +f 712 714 713 +f 712 752 753 +f 712 753 754 +f 712 754 755 +f 712 755 756 +f 712 756 757 +f 712 757 758 +f 712 758 714 +f 714 758 759 +f 714 759 760 +f 714 760 715 +f 715 760 727 +f 717 734 761 +f 717 761 718 +f 718 761 762 +f 718 762 763 +f 718 763 719 +f 719 763 762 +f 719 762 764 +f 719 764 740 +f 719 740 720 +f 721 733 765 +f 721 765 766 +f 721 766 767 +f 721 767 722 +f 722 767 723 +f 723 767 768 +f 723 768 724 +f 724 768 769 +f 724 769 726 +f 726 769 770 +f 726 770 739 +f 727 760 771 +f 727 771 772 +f 727 772 773 +f 727 773 728 +f 728 773 729 +f 729 773 730 +f 730 773 774 +f 730 774 731 +f 731 774 775 +f 731 775 776 +f 731 776 732 +f 732 776 777 +f 732 777 778 +f 732 778 733 +f 733 778 765 +f 734 736 779 +f 734 779 780 +f 734 780 761 +f 735 737 781 +f 735 781 782 +f 735 782 736 +f 735 738 737 +f 736 782 783 +f 736 783 779 +f 737 784 785 +f 737 785 781 +f 737 739 784 +f 739 786 784 +f 739 770 787 +f 739 787 788 +f 739 788 786 +f 740 764 789 +f 740 789 742 +f 740 742 741 +f 742 790 744 +f 742 744 743 +f 742 789 791 +f 742 791 790 +f 749 792 752 +f 749 752 750 +f 750 752 751 +f 752 792 793 +f 752 793 794 +f 752 794 753 +f 753 794 754 +f 754 794 795 +f 754 795 756 +f 754 756 755 +f 756 795 757 +f 757 759 758 +f 757 795 796 +f 757 796 797 +f 757 797 798 +f 757 798 799 +f 757 799 759 +f 759 799 800 +f 759 800 801 +f 759 801 771 +f 759 771 760 +f 761 780 802 +f 761 802 803 +f 761 803 762 +f 762 803 804 +f 762 804 764 +f 764 804 805 +f 764 805 789 +f 765 778 806 +f 765 806 807 +f 765 807 808 +f 765 808 809 +f 765 809 810 +f 765 810 766 +f 766 811 767 +f 766 810 812 +f 766 812 813 +f 766 813 811 +f 767 811 768 +f 768 811 814 +f 768 814 769 +f 769 814 815 +f 769 815 816 +f 769 816 817 +f 769 817 770 +f 770 817 818 +f 770 818 819 +f 770 819 820 +f 770 820 787 +f 771 801 772 +f 772 801 821 +f 772 821 822 +f 772 822 823 +f 772 823 824 +f 772 824 773 +f 773 824 825 +f 773 825 774 +f 774 825 826 +f 774 826 827 +f 774 827 775 +f 775 827 828 +f 775 828 829 +f 775 829 777 +f 775 777 776 +f 777 829 830 +f 777 830 778 +f 778 830 831 +f 778 831 806 +f 779 783 832 +f 779 832 833 +f 779 833 780 +f 780 833 802 +f 781 785 834 +f 781 834 782 +f 782 834 835 +f 782 835 783 +f 783 835 836 +f 783 836 832 +f 784 786 785 +f 785 786 837 +f 785 837 838 +f 785 838 834 +f 786 788 839 +f 786 839 840 +f 786 840 837 +f 787 820 788 +f 788 841 842 +f 788 842 839 +f 788 820 841 +f 789 805 843 +f 789 843 844 +f 789 844 791 +f 790 791 845 +f 791 844 846 +f 791 846 845 +f 793 847 794 +f 794 847 795 +f 795 848 849 +f 795 849 796 +f 795 847 848 +f 796 798 797 +f 798 850 799 +f 799 850 851 +f 799 851 800 +f 800 822 821 +f 800 821 801 +f 800 851 852 +f 800 852 853 +f 800 853 854 +f 800 854 855 +f 800 855 822 +f 802 833 856 +f 802 856 804 +f 802 804 803 +f 804 856 805 +f 805 856 857 +f 805 857 858 +f 805 858 859 +f 805 859 843 +f 806 831 860 +f 806 860 861 +f 806 861 862 +f 806 862 807 +f 807 862 808 +f 808 862 809 +f 809 862 861 +f 809 861 863 +f 809 863 864 +f 809 864 810 +f 810 864 865 +f 810 865 866 +f 810 866 812 +f 811 813 867 +f 811 867 868 +f 811 868 814 +f 812 866 813 +f 813 866 865 +f 813 865 869 +f 813 869 870 +f 813 870 867 +f 814 868 871 +f 814 871 872 +f 814 872 873 +f 814 873 815 +f 815 873 816 +f 816 873 874 +f 816 874 817 +f 817 874 818 +f 818 874 875 +f 818 875 819 +f 819 875 876 +f 819 876 820 +f 820 876 877 +f 820 877 841 +f 822 855 878 +f 822 878 879 +f 822 879 823 +f 823 827 826 +f 823 826 825 +f 823 825 824 +f 823 879 880 +f 823 880 881 +f 823 881 882 +f 823 882 827 +f 827 882 828 +f 828 883 829 +f 828 882 884 +f 828 884 883 +f 829 883 885 +f 829 885 886 +f 829 886 830 +f 830 886 887 +f 830 887 888 +f 830 888 831 +f 831 888 889 +f 831 889 860 +f 832 836 890 +f 832 890 897 +f 832 897 891 +f 832 891 892 +f 832 892 893 +f 832 893 833 +f 833 893 894 +f 833 894 856 +f 834 838 895 +f 834 895 835 +f 835 895 896 +f 835 896 836 +f 836 897 890 +f 836 896 897 +f 837 840 898 +f 837 898 899 +f 837 899 900 +f 837 900 838 +f 838 900 901 +f 838 901 902 +f 838 902 895 +f 839 842 903 +f 839 903 840 +f 840 903 904 +f 840 904 899 +f 840 899 898 +f 841 877 842 +f 842 877 905 +f 842 905 903 +f 843 906 907 +f 843 907 844 +f 843 859 906 +f 844 907 846 +f 846 907 906 +f 850 852 851 +f 852 908 909 +f 852 909 910 +f 852 910 854 +f 852 854 853 +f 854 911 855 +f 854 910 911 +f 855 911 912 +f 855 912 878 +f 856 894 857 +f 857 894 893 +f 857 893 913 +f 857 913 914 +f 857 914 858 +f 858 914 915 +f 858 915 916 +f 858 916 917 +f 858 917 918 +f 858 918 919 +f 858 919 920 +f 858 920 859 +f 859 921 922 +f 859 922 923 +f 859 923 906 +f 859 920 924 +f 859 924 925 +f 859 925 921 +f 860 889 926 +f 860 926 927 +f 860 927 861 +f 861 927 928 +f 861 928 929 +f 861 929 930 +f 861 930 863 +f 863 930 931 +f 863 931 865 +f 863 865 864 +f 865 931 932 +f 865 932 933 +f 865 933 934 +f 865 934 935 +f 865 935 869 +f 867 870 936 +f 867 936 872 +f 867 872 871 +f 867 871 868 +f 869 935 870 +f 870 935 936 +f 872 936 935 +f 872 935 937 +f 872 937 873 +f 873 937 874 +f 874 937 905 +f 874 905 877 +f 874 877 875 +f 875 877 876 +f 878 881 879 +f 878 912 938 +f 878 938 939 +f 878 939 940 +f 878 940 881 +f 879 881 880 +f 881 940 941 +f 881 941 882 +f 882 941 942 +f 882 942 943 +f 882 943 884 +f 883 884 885 +f 884 944 885 +f 884 943 945 +f 884 945 944 +f 885 944 886 +f 886 944 946 +f 886 946 887 +f 887 946 888 +f 888 946 889 +f 889 946 926 +f 891 897 892 +f 892 947 948 +f 892 948 893 +f 892 897 947 +f 893 948 949 +f 893 949 913 +f 895 902 950 +f 895 950 951 +f 895 951 952 +f 895 952 896 +f 896 952 953 +f 896 953 897 +f 897 953 954 +f 897 954 947 +f 899 904 955 +f 899 955 956 +f 899 956 900 +f 900 956 901 +f 901 956 957 +f 901 957 958 +f 901 958 959 +f 901 959 902 +f 902 959 958 +f 902 958 950 +f 903 905 960 +f 903 960 904 +f 904 960 955 +f 905 937 935 +f 905 935 930 +f 905 930 926 +f 905 926 977 +f 905 977 964 +f 905 964 909 +f 905 909 963 +f 905 963 989 +f 905 989 1000 +f 905 1000 1013 +f 905 1013 1021 +f 905 1021 1033 +f 905 1033 1040 +f 905 1040 1026 +f 905 1026 1015 +f 905 1015 1009 +f 905 1009 996 +f 905 996 975 +f 905 975 995 +f 905 995 999 +f 905 999 987 +f 905 987 960 +f 906 923 922 +f 906 922 961 +f 908 962 909 +f 909 964 965 +f 909 965 966 +f 909 966 910 +f 909 962 963 +f 910 966 911 +f 911 966 965 +f 911 965 912 +f 912 965 938 +f 913 949 967 +f 913 967 968 +f 913 968 969 +f 913 969 914 +f 914 969 970 +f 914 970 971 +f 914 971 915 +f 915 972 916 +f 915 971 973 +f 915 973 972 +f 916 972 917 +f 917 972 973 +f 917 973 974 +f 917 974 921 +f 917 921 918 +f 918 921 919 +f 919 921 920 +f 920 921 924 +f 921 961 922 +f 921 925 924 +f 921 974 975 +f 921 975 976 +f 926 930 928 +f 926 928 927 +f 926 946 977 +f 928 930 929 +f 930 935 932 +f 930 932 931 +f 932 935 933 +f 933 935 934 +f 938 965 978 +f 938 978 939 +f 939 978 940 +f 940 979 941 +f 940 978 980 +f 940 980 979 +f 941 979 942 +f 942 979 981 +f 942 981 982 +f 942 982 943 +f 943 982 981 +f 943 981 945 +f 944 945 946 +f 945 981 977 +f 945 977 946 +f 947 954 983 +f 947 983 984 +f 947 984 985 +f 947 985 948 +f 948 985 986 +f 948 986 949 +f 949 986 967 +f 950 958 987 +f 950 987 983 +f 950 983 951 +f 951 983 952 +f 952 983 953 +f 953 983 954 +f 955 960 956 +f 956 960 987 +f 956 987 957 +f 957 987 958 +f 962 988 963 +f 963 988 990 +f 963 990 989 +f 964 977 981 +f 964 981 991 +f 964 991 978 +f 964 978 965 +f 967 986 992 +f 967 992 993 +f 967 993 968 +f 968 993 969 +f 969 993 994 +f 969 994 971 +f 969 971 970 +f 971 994 995 +f 971 995 975 +f 971 975 973 +f 973 975 974 +f 975 996 976 +f 976 996 997 +f 978 991 980 +f 979 980 998 +f 979 998 991 +f 979 991 981 +f 980 991 998 +f 983 987 999 +f 983 999 984 +f 984 999 992 +f 984 992 986 +f 984 986 985 +f 989 990 1001 +f 989 1001 1002 +f 989 1002 1003 +f 989 1003 1004 +f 989 1004 1005 +f 989 1005 1006 +f 989 1006 1007 +f 989 1007 1008 +f 989 1008 1000 +f 992 999 995 +f 992 995 993 +f 993 995 994 +f 996 1009 1010 +f 996 1010 1011 +f 996 1011 1012 +f 996 1012 997 +f 1000 1008 1014 +f 1000 1014 1013 +f 1009 1015 1016 +f 1009 1016 1017 +f 1009 1017 1018 +f 1009 1018 1019 +f 1009 1019 1020 +f 1009 1020 1010 +f 1013 1014 1022 +f 1013 1022 1023 +f 1013 1023 1024 +f 1013 1024 1025 +f 1013 1025 1021 +f 1015 1026 1027 +f 1015 1027 1028 +f 1015 1028 1029 +f 1015 1029 1030 +f 1015 1030 1031 +f 1015 1031 1032 +f 1015 1032 1016 +f 1021 1025 1034 +f 1021 1034 1035 +f 1021 1035 1036 +f 1021 1036 1037 +f 1021 1037 1038 +f 1021 1038 1039 +f 1021 1039 1033 +f 1026 1040 1041 +f 1026 1041 1042 +f 1026 1042 1043 +f 1026 1043 1044 +f 1026 1044 1027 +f 1033 1039 1045 +f 1033 1045 1046 +f 1033 1046 1047 +f 1033 1047 1048 +f 1033 1048 1049 +f 1033 1049 1050 +f 1033 1050 1051 +f 1033 1051 1040 +f 1040 1051 1052 +f 1040 1052 1053 +f 1040 1053 1054 +f 1040 1054 1041 \ No newline at end of file diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link4.obj.convex.stl b/src/experiments/assets/robots/xarm7/meshes/collision/link4.obj.convex.stl new file mode 100644 index 0000000000000000000000000000000000000000..ed14d6f3a663bb331ae0d20c00c68f02e2410e79 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link4.obj.convex.stl @@ -0,0 +1,2210 @@ +solid AssimpScene + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0470883399 -0.169175386 0.0289850123 + vertex 0.0406285897 -0.169175386 0.0200538319 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0406285897 -0.169175386 0.0200538319 + vertex 0.036699459 -0.169175386 0.00976749137 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.036699459 -0.169175386 0.00976749137 + vertex 0.0355756693 -0.169175386 -0.00119108008 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0355756693 -0.169175386 -0.00119108008 + vertex 0.0373154692 -0.169175386 -0.0120642902 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0373154692 -0.169175386 -0.0120642902 + vertex 0.0418189801 -0.169175386 -0.0221158806 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0418189801 -0.169175386 -0.0221158806 + vertex 0.0487698726 -0.169175386 -0.0306629296 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0487698726 -0.169175386 -0.0306629296 + vertex 0.0576936491 -0.169175386 -0.0371185616 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0576936491 -0.169175386 -0.0371185616 + vertex 0.0679909587 -0.169175386 -0.0410452895 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0679909587 -0.169175386 -0.0410452895 + vertex 0.0789375678 -0.169175386 -0.0421763584 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0789375678 -0.169175386 -0.0421763584 + vertex 0.089817591 -0.169175386 -0.0404264107 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.089817591 -0.169175386 -0.0404264107 + vertex 0.0998734832 -0.169175386 -0.035934139 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0998734832 -0.169175386 -0.035934139 + vertex 0.108414337 -0.169175386 -0.0289769899 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.108414337 -0.169175386 -0.0289769899 + vertex 0.114874087 -0.169175386 -0.0200564805 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.114874087 -0.169175386 -0.0200564805 + vertex 0.118803211 -0.169175386 -0.00975946989 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.118803211 -0.169175386 -0.00975946989 + vertex 0.119927011 -0.169175386 0.00119910005 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.119927011 -0.169175386 0.00119910005 + vertex 0.118187204 -0.169175386 0.0120616397 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.118187204 -0.169175386 0.0120616397 + vertex 0.113683701 -0.169175386 0.0221238993 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.113683701 -0.169175386 0.0221238993 + vertex 0.106732808 -0.169175386 0.0306709502 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.106732808 -0.169175386 0.0306709502 + vertex 0.0978090316 -0.169175386 0.0371265784 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0978090316 -0.169175386 0.0371265784 + vertex 0.0875117183 -0.169175386 0.04105331 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0875117183 -0.169175386 0.04105331 + vertex 0.0656850934 -0.169175386 0.040434435 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0324885696 -0.00218515028 0.100187518 + vertex -0.0215619691 -0.0169582199 0.103105754 + vertex -0.0215938203 0.00288178003 0.10488122 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0324885696 -0.00218515028 0.100187518 + vertex -0.0215938203 0.00288178003 0.10488122 + vertex -0.0280446596 0.0165197197 0.100187518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0791123807 -0.058961425 -0.0381215811 + vertex 0.00132656016 0.0427098386 0.0674976707 + vertex 0.0849644393 -0.0524752848 -0.0317406394 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0964854509 -0.0585206151 -0.0319113694 + vertex 0.106940918 -0.0597548746 -0.0215503424 + vertex 0.105958641 -0.0719840825 -0.0303641502 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0964854509 -0.0585206151 -0.0319113694 + vertex 0.105958641 -0.0719840825 -0.0303641502 + vertex 0.0948455334 -0.0732687116 -0.0384096801 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0931992084 -0.0411577486 0.0898589939 + vertex 0.110019162 -0.0569836944 0.0793129951 + vertex 0.0303792097 0.029071901 0.086774677 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0931992084 -0.0411577486 0.0898589939 + vertex 0.0303792097 0.029071901 0.086774677 + vertex 0.0395537317 0.0151542909 0.0948492736 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.114874087 -0.169175386 -0.0200564805 + vertex 0.116139412 -0.0862284005 -0.0178903695 + vertex 0.118803211 -0.169175386 -0.00975946989 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0789375678 -0.169175386 -0.0421763584 + vertex 0.0679909587 -0.169175386 -0.0410452895 + vertex 0.0787377805 -0.0742132887 -0.0422617197 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.118187204 -0.169175386 0.0120616397 + vertex 0.119512253 -0.0843089372 0.0772211924 + vertex 0.114956841 -0.0978481621 0.0855488628 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.118187204 -0.169175386 0.0120616397 + vertex 0.114956841 -0.0978481621 0.0855488628 + vertex 0.113683701 -0.169175386 0.0221238993 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0195800308 0.0312434398 0.0963597894 + vertex 0.0145627204 0.0232317708 0.103105754 + vertex 0.0395537317 0.0151542909 0.0948492736 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.103982463 -0.10947907 0.0924134478 + vertex 0.113683701 -0.169175386 0.0221238993 + vertex 0.114956841 -0.0978481621 0.0855488628 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.103982463 -0.10947907 0.0924134478 + vertex 0.114956841 -0.0978481621 0.0855488628 + vertex 0.106738001 -0.100200668 0.0943549797 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.07526429 -0.0531999432 0.10339047 + vertex 0.076538533 -0.0808213055 0.104734913 + vertex 0.0973245576 -0.0811996683 0.100112379 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.07526429 -0.0531999432 0.10339047 + vertex 0.0973245576 -0.0811996683 0.100112379 + vertex 0.0925142989 -0.0529367216 0.09717042 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.105633989 -0.0525634438 -0.00746532017 + vertex 0.0264449995 0.0335630402 0.0674976707 + vertex 0.11419981 -0.0609261505 0.00475237006 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00519705983 0.0321318023 0.100187518 + vertex 0.00322199007 0.0399296135 0.0918875411 + vertex -0.00873992965 0.0358168408 0.0963597894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00519705983 0.0321318023 0.100187518 + vertex -0.00873992965 0.0358168408 0.0963597894 + vertex -0.0116547598 0.0248110704 0.103105754 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00519705983 0.0321318023 0.100187518 + vertex 0.0145627204 0.0232317708 0.103105754 + vertex 0.0195800308 0.0312434398 0.0963597894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0964188501 -0.0517448112 -0.0236204099 + vertex 0.106940918 -0.0597548746 -0.0215503424 + vertex 0.0964854509 -0.0585206151 -0.0319113694 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0964188501 -0.0517448112 -0.0236204099 + vertex 0.0964854509 -0.0585206151 -0.0319113694 + vertex 0.0849644393 -0.0524752848 -0.0317406394 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0964188501 -0.0517448112 -0.0236204099 + vertex 0.0264449995 0.0335630402 0.0674976707 + vertex 0.105633989 -0.0525634438 -0.00746532017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0964188501 -0.0517448112 -0.0236204099 + vertex 0.105633989 -0.0525634438 -0.00746532017 + vertex 0.106940918 -0.0597548746 -0.0215503424 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0383500718 0.0188393295 0.0674976707 + vertex -0.0355945192 0.0223763119 0.0867786184 + vertex -0.0285702795 0.0317698829 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0383500718 0.0188393295 0.0674976707 + vertex -0.0285702795 0.0317698829 0.0674976707 + vertex 0.0631128475 -0.0666818097 -0.0381856114 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0171430502 0.0391399637 0.0674976707 + vertex 0.0264449995 0.0335630402 0.0674976707 + vertex 0.0964188501 -0.0517448112 -0.0236204099 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0171430502 0.0391399637 0.0674976707 + vertex 0.0964188501 -0.0517448112 -0.0236204099 + vertex 0.0849644393 -0.0524752848 -0.0317406394 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0171430502 0.0391399637 0.0674976707 + vertex 0.0849644393 -0.0524752848 -0.0317406394 + vertex 0.00132656016 0.0427098386 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.116645209 -0.073253803 0.0821837857 + vertex 0.11744161 -0.0684007332 0.0726303011 + vertex 0.110019162 -0.0569836944 0.0793129951 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.09370891 -0.0982923433 0.100626439 + vertex 0.0973245576 -0.0811996683 0.100112379 + vertex 0.076538533 -0.0808213055 0.104734913 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.09370891 -0.0982923433 0.100626439 + vertex 0.076538533 -0.0808213055 0.104734913 + vertex 0.0805523768 -0.107192375 0.101231441 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0680991784 -0.0577271692 -0.0358274318 + vertex -0.0146810804 0.0401270352 0.0674976707 + vertex 0.00132656016 0.0427098386 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0680991784 -0.0577271692 -0.0358274318 + vertex 0.00132656016 0.0427098386 0.0674976707 + vertex 0.0791123807 -0.058961425 -0.0381215811 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0680991784 -0.0577271692 -0.0358274318 + vertex 0.0631128475 -0.0666818097 -0.0381856114 + vertex -0.0285702795 0.0317698829 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0680991784 -0.0577271692 -0.0358274318 + vertex -0.0285702795 0.0317698829 0.0674976707 + vertex -0.0146810804 0.0401270352 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0875117183 -0.169175386 0.04105331 + vertex 0.0978090316 -0.169175386 0.0371265784 + vertex 0.0896631852 -0.118856192 0.0937025324 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0197143201 -0.0339028202 0.0966761336 + vertex 0.0470883399 -0.169175386 0.0289850123 + vertex 0.0320516489 -0.0936037898 0.0943154469 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0559621714 -0.0869840607 -0.0364996716 + vertex 0.0487698726 -0.169175386 -0.0306629296 + vertex 0.0472714715 -0.084754847 -0.0295638591 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106594652 -0.0584313832 0.0880677104 + vertex 0.111038558 -0.075935334 0.0912034437 + vertex 0.116645209 -0.073253803 0.0821837857 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106594652 -0.0584313832 0.0880677104 + vertex 0.116645209 -0.073253803 0.0821837857 + vertex 0.110019162 -0.0569836944 0.0793129951 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106594652 -0.0584313832 0.0880677104 + vertex 0.110019162 -0.0569836944 0.0793129951 + vertex 0.0931992084 -0.0411577486 0.0898589939 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0423798487 -0.00542601012 0.0674976707 + vertex -0.0396561697 -0.0159217995 0.0674976707 + vertex -0.0414719544 -0.00692305993 0.086774677 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0423798487 -0.00542601012 0.0674976707 + vertex -0.0418542288 0.00857384969 0.0674976707 + vertex 0.0472714715 -0.084754847 -0.0295638591 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0423798487 -0.00542601012 0.0674976707 + vertex 0.0472714715 -0.084754847 -0.0295638591 + vertex 0.0487698726 -0.169175386 -0.0306629296 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.119910359 -0.0905608907 -0.00479770033 + vertex 0.118803211 -0.169175386 -0.00975946989 + vertex 0.116139412 -0.0862284005 -0.0178903695 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.119910359 -0.0905608907 -0.00479770033 + vertex 0.116139412 -0.0862284005 -0.0178903695 + vertex 0.115773119 -0.0700949132 -0.0124164196 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0257191677 0.0341059305 0.0813375711 + vertex -0.0146810804 0.0401270352 0.0674976707 + vertex -0.0285702795 0.0317698829 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.115753248 -0.0889810324 0.0871305466 + vertex 0.114956841 -0.0978481621 0.0855488628 + vertex 0.119512253 -0.0843089372 0.0772211924 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.115753248 -0.0889810324 0.0871305466 + vertex 0.119512253 -0.0843089372 0.0772211924 + vertex 0.116645209 -0.073253803 0.0821837857 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.115753248 -0.0889810324 0.0871305466 + vertex 0.116645209 -0.073253803 0.0821837857 + vertex 0.111038558 -0.075935334 0.0912034437 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.115753248 -0.0889810324 0.0871305466 + vertex 0.106738001 -0.100200668 0.0943549797 + vertex 0.114956841 -0.0978481621 0.0855488628 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0899258032 -0.061505504 -0.0372465998 + vertex 0.0791123807 -0.058961425 -0.0381215811 + vertex 0.0849644393 -0.0524752848 -0.0317406394 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0899258032 -0.061505504 -0.0372465998 + vertex 0.0849644393 -0.0524752848 -0.0317406394 + vertex 0.0964854509 -0.0585206151 -0.0319113694 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0899258032 -0.061505504 -0.0372465998 + vertex 0.0964854509 -0.0585206151 -0.0319113694 + vertex 0.0948455334 -0.0732687116 -0.0384096801 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0502016693 -0.0715684667 -0.0308549907 + vertex 0.0631128475 -0.0666818097 -0.0381856114 + vertex 0.0559621714 -0.0869840607 -0.0364996716 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0502016693 -0.0715684667 -0.0308549907 + vertex 0.0559621714 -0.0869840607 -0.0364996716 + vertex 0.0472714715 -0.084754847 -0.0295638591 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0502016693 -0.0715684667 -0.0308549907 + vertex 0.0472714715 -0.084754847 -0.0295638591 + vertex -0.0418542288 0.00857384969 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0502016693 -0.0715684667 -0.0308549907 + vertex -0.0418542288 0.00857384969 0.0674976707 + vertex -0.0383500718 0.0188393295 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0502016693 -0.0715684667 -0.0308549907 + vertex -0.0383500718 0.0188393295 0.0674976707 + vertex 0.0631128475 -0.0666818097 -0.0381856114 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0369006209 -0.0215480719 0.0813375711 + vertex 0.036699459 -0.169175386 0.00976749137 + vertex -0.0345910601 -0.0202155299 0.0918875411 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0034449799 0.0425782427 0.0813375711 + vertex 0.0180668794 0.0379719399 0.086774677 + vertex 0.0171430502 0.0391399637 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0034449799 0.0425782427 0.0813375711 + vertex 0.0171430502 0.0391399637 0.0674976707 + vertex 0.00132656016 0.0427098386 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0949831381 -0.111880928 0.0964507386 + vertex 0.103982463 -0.10947907 0.0924134478 + vertex 0.106738001 -0.100200668 0.0943549797 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0949831381 -0.111880928 0.0964507386 + vertex 0.106738001 -0.100200668 0.0943549797 + vertex 0.09370891 -0.0982923433 0.100626439 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0949831381 -0.111880928 0.0964507386 + vertex 0.09370891 -0.0982923433 0.100626439 + vertex 0.0805523768 -0.107192375 0.101231441 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0949831381 -0.111880928 0.0964507386 + vertex 0.0896631852 -0.118856192 0.0937025324 + vertex 0.103982463 -0.10947907 0.0924134478 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0654103905 -0.0846540779 -0.0406718291 + vertex 0.0787377805 -0.0742132887 -0.0422617197 + vertex 0.0679909587 -0.169175386 -0.0410452895 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0654103905 -0.0846540779 -0.0406718291 + vertex 0.0559621714 -0.0869840607 -0.0364996716 + vertex 0.0631128475 -0.0666818097 -0.0381856114 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0418860801 0.00840933993 0.0813375711 + vertex -0.0418542288 0.00857384969 0.0674976707 + vertex -0.0423798487 -0.00542601012 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0418860801 0.00840933993 0.0813375711 + vertex -0.0423798487 -0.00542601012 0.0674976707 + vertex -0.0414719544 -0.00692305993 0.086774677 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0418860801 0.00840933993 0.0813375711 + vertex -0.0383500718 0.0188393295 0.0674976707 + vertex -0.0418542288 0.00857384969 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194116905 0.0261271596 0.100187518 + vertex -0.0116547598 0.0248110704 0.103105754 + vertex -0.00873992965 0.0358168408 0.0963597894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194116905 0.0261271596 0.100187518 + vertex -0.00873992965 0.0358168408 0.0963597894 + vertex -0.0241104476 0.0319837406 0.0918914825 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0576936491 -0.169175386 -0.0371185616 + vertex 0.0487698726 -0.169175386 -0.0306629296 + vertex 0.0559621714 -0.0869840607 -0.0364996716 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0576936491 -0.169175386 -0.0371185616 + vertex 0.0559621714 -0.0869840607 -0.0364996716 + vertex 0.0654103905 -0.0846540779 -0.0406718291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0576936491 -0.169175386 -0.0371185616 + vertex 0.0654103905 -0.0846540779 -0.0406718291 + vertex 0.0679909587 -0.169175386 -0.0410452895 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.089817591 -0.169175386 -0.0404264107 + vertex 0.0948455334 -0.0732687116 -0.0384096801 + vertex 0.0998734832 -0.169175386 -0.035934139 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.119927011 -0.169175386 0.00119910005 + vertex 0.119512253 -0.0843089372 0.0772211924 + vertex 0.118187204 -0.169175386 0.0120616397 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.119927011 -0.169175386 0.00119910005 + vertex 0.118803211 -0.169175386 -0.00975946989 + vertex 0.119910359 -0.0905608907 -0.00479770033 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.119927011 -0.169175386 0.00119910005 + vertex 0.119910359 -0.0905608907 -0.00479770033 + vertex 0.119902052 -0.0778782889 0.00833765045 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0448736809 -0.0943769887 0.100602709 + vertex -0.0197143201 -0.0339028202 0.0966761336 + vertex 0.0320516489 -0.0936037898 0.0943154469 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.108414337 -0.169175386 -0.0289769899 + vertex 0.0998734832 -0.169175386 -0.035934139 + vertex 0.10811466 -0.127966389 -0.0297239199 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0418189801 -0.169175386 -0.0221158806 + vertex 0.0373154692 -0.169175386 -0.0120642902 + vertex -0.0396561697 -0.0159217995 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0418189801 -0.169175386 -0.0221158806 + vertex -0.0396561697 -0.0159217995 0.0674976707 + vertex -0.0423798487 -0.00542601012 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0418189801 -0.169175386 -0.0221158806 + vertex -0.0423798487 -0.00542601012 0.0674976707 + vertex 0.0487698726 -0.169175386 -0.0306629296 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110553719 -0.0592888854 -0.0123950802 + vertex 0.106940918 -0.0597548746 -0.0215503424 + vertex 0.105633989 -0.0525634438 -0.00746532017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110553719 -0.0592888854 -0.0123950802 + vertex 0.105633989 -0.0525634438 -0.00746532017 + vertex 0.11419981 -0.0609261505 0.00475237006 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110553719 -0.0592888854 -0.0123950802 + vertex 0.11419981 -0.0609261505 0.00475237006 + vertex 0.115773119 -0.0700949132 -0.0124164196 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.000855579972 0.0217676219 0.10488122 + vertex -0.0215938203 0.00288178003 0.10488122 + vertex -0.000489239988 0.00196051993 0.106905811 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.000855579972 0.0217676219 0.10488122 + vertex 0.0145627204 0.0232317708 0.103105754 + vertex 0.00519705983 0.0321318023 0.100187518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.000855579972 0.0217676219 0.10488122 + vertex 0.00519705983 0.0321318023 0.100187518 + vertex -0.0116547598 0.0248110704 0.103105754 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106515013 -0.0893265009 0.0959050506 + vertex 0.0973245576 -0.0811996683 0.100112379 + vertex 0.09370891 -0.0982923433 0.100626439 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106515013 -0.0893265009 0.0959050506 + vertex 0.09370891 -0.0982923433 0.100626439 + vertex 0.106738001 -0.100200668 0.0943549797 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106515013 -0.0893265009 0.0959050506 + vertex 0.106738001 -0.100200668 0.0943549797 + vertex 0.115753248 -0.0889810324 0.0871305466 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106515013 -0.0893265009 0.0959050506 + vertex 0.115753248 -0.0889810324 0.0871305466 + vertex 0.111038558 -0.075935334 0.0912034437 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110836744 -0.0683694705 -0.0226280596 + vertex 0.106940918 -0.0597548746 -0.0215503424 + vertex 0.110553719 -0.0592888854 -0.0123950802 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110836744 -0.0683694705 -0.0226280596 + vertex 0.110553719 -0.0592888854 -0.0123950802 + vertex 0.115773119 -0.0700949132 -0.0124164196 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110836744 -0.0683694705 -0.0226280596 + vertex 0.115773119 -0.0700949132 -0.0124164196 + vertex 0.116139412 -0.0862284005 -0.0178903695 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110836744 -0.0683694705 -0.0226280596 + vertex 0.105958641 -0.0719840825 -0.0303641502 + vertex 0.106940918 -0.0597548746 -0.0215503424 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0735350177 -0.0675508305 -0.0411306582 + vertex 0.0631128475 -0.0666818097 -0.0381856114 + vertex 0.0680991784 -0.0577271692 -0.0358274318 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0735350177 -0.0675508305 -0.0411306582 + vertex 0.0680991784 -0.0577271692 -0.0358274318 + vertex 0.0791123807 -0.058961425 -0.0381215811 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0735350177 -0.0675508305 -0.0411306582 + vertex 0.0787377805 -0.0742132887 -0.0422617197 + vertex 0.0654103905 -0.0846540779 -0.0406718291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0735350177 -0.0675508305 -0.0411306582 + vertex 0.0654103905 -0.0846540779 -0.0406718291 + vertex 0.0631128475 -0.0666818097 -0.0381856114 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0355756693 -0.169175386 -0.00119108008 + vertex 0.036699459 -0.169175386 0.00976749137 + vertex -0.0369006209 -0.0215480719 0.0813375711 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0355756693 -0.169175386 -0.00119108008 + vertex -0.0369006209 -0.0215480719 0.0813375711 + vertex -0.0396561697 -0.0159217995 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0355756693 -0.169175386 -0.00119108008 + vertex -0.0396561697 -0.0159217995 0.0674976707 + vertex 0.0373154692 -0.169175386 -0.0120642902 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0838335529 -0.0345115103 0.094244279 + vertex 0.0925142989 -0.0529367216 0.09717042 + vertex 0.106594652 -0.0584313832 0.0880677104 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0838335529 -0.0345115103 0.094244279 + vertex 0.106594652 -0.0584313832 0.0880677104 + vertex 0.0931992084 -0.0411577486 0.0898589939 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0838335529 -0.0345115103 0.094244279 + vertex 0.0931992084 -0.0411577486 0.0898589939 + vertex 0.0395537317 0.0151542909 0.0948492736 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0791825801 -0.118280411 0.0964072421 + vertex 0.0705655292 -0.118921995 0.0954621881 + vertex 0.0656850934 -0.169175386 0.040434435 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0791825801 -0.118280411 0.0964072421 + vertex 0.0656850934 -0.169175386 0.040434435 + vertex 0.0875117183 -0.169175386 0.04105331 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0791825801 -0.118280411 0.0964072421 + vertex 0.0875117183 -0.169175386 0.04105331 + vertex 0.0896631852 -0.118856192 0.0937025324 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0791825801 -0.118280411 0.0964072421 + vertex 0.0896631852 -0.118856192 0.0937025324 + vertex 0.0949831381 -0.111880928 0.0964507386 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0791825801 -0.118280411 0.0964072421 + vertex 0.0949831381 -0.111880928 0.0964507386 + vertex 0.0805523768 -0.107192375 0.101231441 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0406285897 -0.169175386 0.0200538319 + vertex -0.0345910601 -0.0202155299 0.0918875411 + vertex 0.036699459 -0.169175386 0.00976749137 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0406285897 -0.169175386 0.0200538319 + vertex 0.0470883399 -0.169175386 0.0289850123 + vertex -0.0197143201 -0.0339028202 0.0966761336 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0406285897 -0.169175386 0.0200538319 + vertex -0.0197143201 -0.0339028202 0.0966761336 + vertex -0.0345910601 -0.0202155299 0.0918875411 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0491901711 -0.108442657 0.0952328295 + vertex 0.0567400418 -0.110252276 0.097708188 + vertex 0.0448736809 -0.0943769887 0.100602709 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0491901711 -0.108442657 0.0952328295 + vertex 0.0448736809 -0.0943769887 0.100602709 + vertex 0.0320516489 -0.0936037898 0.0943154469 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0491901711 -0.108442657 0.0952328295 + vertex 0.0320516489 -0.0936037898 0.0943154469 + vertex 0.0470883399 -0.169175386 0.0289850123 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0686382502 -0.104264088 0.102133021 + vertex 0.0805523768 -0.107192375 0.101231441 + vertex 0.076538533 -0.0808213055 0.104734913 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0686382502 -0.104264088 0.102133021 + vertex 0.076538533 -0.0808213055 0.104734913 + vertex 0.0586195402 -0.0916296467 0.103880793 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0686382502 -0.104264088 0.102133021 + vertex 0.0586195402 -0.0916296467 0.103880793 + vertex 0.0448736809 -0.0943769887 0.100602709 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0686382502 -0.104264088 0.102133021 + vertex 0.0448736809 -0.0943769887 0.100602709 + vertex 0.0567400418 -0.110252276 0.097708188 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0686382502 -0.104264088 0.102133021 + vertex 0.0567400418 -0.110252276 0.097708188 + vertex 0.0705655292 -0.118921995 0.0954621881 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0686382502 -0.104264088 0.102133021 + vertex 0.0705655292 -0.118921995 0.0954621881 + vertex 0.0791825801 -0.118280411 0.0964072421 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0686382502 -0.104264088 0.102133021 + vertex 0.0791825801 -0.118280411 0.0964072421 + vertex 0.0805523768 -0.107192375 0.101231441 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106732808 -0.169175386 0.0306709502 + vertex 0.113683701 -0.169175386 0.0221238993 + vertex 0.103982463 -0.10947907 0.0924134478 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106732808 -0.169175386 0.0306709502 + vertex 0.103982463 -0.10947907 0.0924134478 + vertex 0.0896631852 -0.118856192 0.0937025324 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106732808 -0.169175386 0.0306709502 + vertex 0.0896631852 -0.118856192 0.0937025324 + vertex 0.0978090316 -0.169175386 0.0371265784 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.10203924 -0.0685981363 0.096201621 + vertex 0.0925142989 -0.0529367216 0.09717042 + vertex 0.0973245576 -0.0811996683 0.100112379 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.10203924 -0.0685981363 0.096201621 + vertex 0.0973245576 -0.0811996683 0.100112379 + vertex 0.106515013 -0.0893265009 0.0959050506 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.10203924 -0.0685981363 0.096201621 + vertex 0.106515013 -0.0893265009 0.0959050506 + vertex 0.111038558 -0.075935334 0.0912034437 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.10203924 -0.0685981363 0.096201621 + vertex 0.111038558 -0.075935334 0.0912034437 + vertex 0.106594652 -0.0584313832 0.0880677104 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.10203924 -0.0685981363 0.096201621 + vertex 0.106594652 -0.0584313832 0.0880677104 + vertex 0.0925142989 -0.0529367216 0.09717042 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0695461407 -0.030777121 0.100246839 + vertex 0.07526429 -0.0531999432 0.10339047 + vertex 0.0925142989 -0.0529367216 0.09717042 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0695461407 -0.030777121 0.100246839 + vertex 0.0925142989 -0.0529367216 0.09717042 + vertex 0.0838335529 -0.0345115103 0.094244279 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0695461407 -0.030777121 0.100246839 + vertex 0.0838335529 -0.0345115103 0.094244279 + vertex 0.0395537317 0.0151542909 0.0948492736 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0695461407 -0.030777121 0.100246839 + vertex 0.0395537317 0.0151542909 0.0948492736 + vertex 0.0145627204 0.0232317708 0.103105754 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.109493539 -0.0546805449 0.0680670813 + vertex 0.110019162 -0.0569836944 0.0793129951 + vertex 0.11744161 -0.0684007332 0.0726303011 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.109493539 -0.0546805449 0.0680670813 + vertex 0.11744161 -0.0684007332 0.0726303011 + vertex 0.11419981 -0.0609261505 0.00475237006 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.109493539 -0.0546805449 0.0680670813 + vertex 0.11419981 -0.0609261505 0.00475237006 + vertex 0.0264449995 0.0335630402 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.109493539 -0.0546805449 0.0680670813 + vertex 0.0264449995 0.0335630402 0.0674976707 + vertex 0.0303792097 0.029071901 0.086774677 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.109493539 -0.0546805449 0.0680670813 + vertex 0.0303792097 0.029071901 0.086774677 + vertex 0.110019162 -0.0569836944 0.0793129951 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0842818469 -0.0658757687 -0.0403943881 + vertex 0.0791123807 -0.058961425 -0.0381215811 + vertex 0.0899258032 -0.061505504 -0.0372465998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0842818469 -0.0658757687 -0.0403943881 + vertex 0.0899258032 -0.061505504 -0.0372465998 + vertex 0.0948455334 -0.0732687116 -0.0384096801 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0842818469 -0.0658757687 -0.0403943881 + vertex 0.0787377805 -0.0742132887 -0.0422617197 + vertex 0.0735350177 -0.0675508305 -0.0411306582 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0842818469 -0.0658757687 -0.0403943881 + vertex 0.0735350177 -0.0675508305 -0.0411306582 + vertex 0.0791123807 -0.058961425 -0.0381215811 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0178438798 0.0125056598 0.10488122 + vertex 0.07526429 -0.0531999432 0.10339047 + vertex 0.0695461407 -0.030777121 0.100246839 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0178438798 0.0125056598 0.10488122 + vertex 0.0695461407 -0.030777121 0.100246839 + vertex 0.0145627204 0.0232317708 0.103105754 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0178438798 0.0125056598 0.10488122 + vertex 0.0145627204 0.0232317708 0.103105754 + vertex -0.000855579972 0.0217676219 0.10488122 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0178438798 0.0125056598 0.10488122 + vertex -0.000855579972 0.0217676219 0.10488122 + vertex -0.000489239988 0.00196051993 0.106905811 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.104010724 -0.0887094885 -0.0334052406 + vertex 0.10811466 -0.127966389 -0.0297239199 + vertex 0.0998734832 -0.169175386 -0.035934139 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.104010724 -0.0887094885 -0.0334052406 + vertex 0.0998734832 -0.169175386 -0.035934139 + vertex 0.0948455334 -0.0732687116 -0.0384096801 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.104010724 -0.0887094885 -0.0334052406 + vertex 0.0948455334 -0.0732687116 -0.0384096801 + vertex 0.105958641 -0.0719840825 -0.0303641502 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.02742346 0.0246465597 0.0963597894 + vertex -0.0241104476 0.0319837406 0.0918914825 + vertex -0.0339061618 0.0213234406 0.0918914825 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.02742346 0.0246465597 0.0963597894 + vertex -0.0339061618 0.0213234406 0.0918914825 + vertex -0.0280446596 0.0165197197 0.100187518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.02742346 0.0246465597 0.0963597894 + vertex -0.0280446596 0.0165197197 0.100187518 + vertex -0.0194116905 0.0261271596 0.100187518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.02742346 0.0246465597 0.0963597894 + vertex -0.0194116905 0.0261271596 0.100187518 + vertex -0.0241104476 0.0319837406 0.0918914825 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.111844003 -0.0816062316 -0.0249862298 + vertex 0.116139412 -0.0862284005 -0.0178903695 + vertex 0.114874087 -0.169175386 -0.0200564805 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.111844003 -0.0816062316 -0.0249862298 + vertex 0.114874087 -0.169175386 -0.0200564805 + vertex 0.108414337 -0.169175386 -0.0289769899 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.111844003 -0.0816062316 -0.0249862298 + vertex 0.108414337 -0.169175386 -0.0289769899 + vertex 0.10811466 -0.127966389 -0.0297239199 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.111844003 -0.0816062316 -0.0249862298 + vertex 0.10811466 -0.127966389 -0.0297239199 + vertex 0.104010724 -0.0887094885 -0.0334052406 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.111844003 -0.0816062316 -0.0249862298 + vertex 0.104010724 -0.0887094885 -0.0334052406 + vertex 0.105958641 -0.0719840825 -0.0303641502 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.111844003 -0.0816062316 -0.0249862298 + vertex 0.105958641 -0.0719840825 -0.0303641502 + vertex 0.110836744 -0.0683694705 -0.0226280596 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.111844003 -0.0816062316 -0.0249862298 + vertex 0.110836744 -0.0683694705 -0.0226280596 + vertex 0.116139412 -0.0862284005 -0.0178903695 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0255917497 -0.02013327 0.100187518 + vertex -0.0215619691 -0.0169582199 0.103105754 + vertex -0.0324885696 -0.00218515028 0.100187518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0255917497 -0.02013327 0.100187518 + vertex -0.0324885696 -0.00218515028 0.100187518 + vertex -0.0355786011 -0.0097197406 0.0963597894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0255917497 -0.02013327 0.100187518 + vertex -0.0355786011 -0.0097197406 0.0963597894 + vertex -0.0345910601 -0.0202155299 0.0918875411 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0255917497 -0.02013327 0.100187518 + vertex -0.0345910601 -0.0202155299 0.0918875411 + vertex -0.0197143201 -0.0339028202 0.0966761336 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0255917497 -0.02013327 0.100187518 + vertex -0.0197143201 -0.0339028202 0.0966761336 + vertex 0.0448736809 -0.0943769887 0.100602709 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0255917497 -0.02013327 0.100187518 + vertex 0.0448736809 -0.0943769887 0.100602709 + vertex -0.0215619691 -0.0169582199 0.103105754 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.087461777 -0.0842636675 -0.0413760841 + vertex 0.0948455334 -0.0732687116 -0.0384096801 + vertex 0.089817591 -0.169175386 -0.0404264107 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.087461777 -0.0842636675 -0.0413760841 + vertex 0.089817591 -0.169175386 -0.0404264107 + vertex 0.0789375678 -0.169175386 -0.0421763584 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.087461777 -0.0842636675 -0.0413760841 + vertex 0.0789375678 -0.169175386 -0.0421763584 + vertex 0.0787377805 -0.0742132887 -0.0422617197 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.087461777 -0.0842636675 -0.0413760841 + vertex 0.0787377805 -0.0742132887 -0.0422617197 + vertex 0.0842818469 -0.0658757687 -0.0403943881 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.087461777 -0.0842636675 -0.0413760841 + vertex 0.0842818469 -0.0658757687 -0.0403943881 + vertex 0.0948455334 -0.0732687116 -0.0384096801 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0656850934 -0.169175386 0.040434435 + vertex 0.0705655292 -0.118921995 0.0954621881 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0705655292 -0.118921995 0.0954621881 + vertex 0.0567400418 -0.110252276 0.097708188 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0567400418 -0.110252276 0.097708188 + vertex 0.0491901711 -0.108442657 0.0952328295 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0556291901 -0.169175386 0.0359314904 + vertex 0.0491901711 -0.108442657 0.0952328295 + vertex 0.0470883399 -0.169175386 0.0289850123 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0203832909 0.0183293503 0.103105754 + vertex -0.0116547598 0.0248110704 0.103105754 + vertex -0.0194116905 0.0261271596 0.100187518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0203832909 0.0183293503 0.103105754 + vertex -0.0194116905 0.0261271596 0.100187518 + vertex -0.0280446596 0.0165197197 0.100187518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0203832909 0.0183293503 0.103105754 + vertex -0.0280446596 0.0165197197 0.100187518 + vertex -0.0215938203 0.00288178003 0.10488122 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0203832909 0.0183293503 0.103105754 + vertex -0.0215938203 0.00288178003 0.10488122 + vertex -0.000855579972 0.0217676219 0.10488122 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0203832909 0.0183293503 0.103105754 + vertex -0.000855579972 0.0217676219 0.10488122 + vertex -0.0116547598 0.0248110704 0.103105754 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.118528523 -0.072311528 -0.000476159999 + vertex 0.119902052 -0.0778782889 0.00833765045 + vertex 0.119910359 -0.0905608907 -0.00479770033 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.118528523 -0.072311528 -0.000476159999 + vertex 0.119910359 -0.0905608907 -0.00479770033 + vertex 0.115773119 -0.0700949132 -0.0124164196 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.118528523 -0.072311528 -0.000476159999 + vertex 0.115773119 -0.0700949132 -0.0124164196 + vertex 0.11419981 -0.0609261505 0.00475237006 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.118528523 -0.072311528 -0.000476159999 + vertex 0.11419981 -0.0609261505 0.00475237006 + vertex 0.11744161 -0.0684007332 0.0726303011 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0103895804 0.0386793315 0.0918875411 + vertex 0.00322199007 0.0399296135 0.0918875411 + vertex 0.00519705983 0.0321318023 0.100187518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0103895804 0.0386793315 0.0918875411 + vertex 0.00519705983 0.0321318023 0.100187518 + vertex 0.0195800308 0.0312434398 0.0963597894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0103895804 0.0386793315 0.0918875411 + vertex 0.0180668794 0.0379719399 0.086774677 + vertex 0.0034449799 0.0425782427 0.0813375711 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0103895804 0.0386793315 0.0918875411 + vertex 0.0034449799 0.0425782427 0.0813375711 + vertex 0.00322199007 0.0399296135 0.0918875411 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0234664604 0.0324772745 0.0918875411 + vertex 0.0180668794 0.0379719399 0.086774677 + vertex 0.0103895804 0.0386793315 0.0918875411 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0234664604 0.0324772745 0.0918875411 + vertex 0.0103895804 0.0386793315 0.0918875411 + vertex 0.0195800308 0.0312434398 0.0963597894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0234664604 0.0324772745 0.0918875411 + vertex 0.0195800308 0.0312434398 0.0963597894 + vertex 0.0395537317 0.0151542909 0.0948492736 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0234664604 0.0324772745 0.0918875411 + vertex 0.0395537317 0.0151542909 0.0948492736 + vertex 0.0303792097 0.029071901 0.086774677 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0400543585 0.000644440064 0.0918914825 + vertex -0.0414719544 -0.00692305993 0.086774677 + vertex -0.0355786011 -0.0097197406 0.0963597894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0400543585 0.000644440064 0.0918914825 + vertex -0.0392738916 0.00788291078 0.0918914825 + vertex -0.0418860801 0.00840933993 0.0813375711 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0400543585 0.000644440064 0.0918914825 + vertex -0.0418860801 0.00840933993 0.0813375711 + vertex -0.0414719544 -0.00692305993 0.086774677 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0582054108 -0.0710987076 0.10582234 + vertex 0.076538533 -0.0808213055 0.104734913 + vertex 0.07526429 -0.0531999432 0.10339047 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0582054108 -0.0710987076 0.10582234 + vertex 0.07526429 -0.0531999432 0.10339047 + vertex 0.0178438798 0.0125056598 0.10488122 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0582054108 -0.0710987076 0.10582234 + vertex 0.0178438798 0.0125056598 0.10488122 + vertex -0.000489239988 0.00196051993 0.106905811 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0582054108 -0.0710987076 0.10582234 + vertex 0.0586195402 -0.0916296467 0.103880793 + vertex 0.076538533 -0.0808213055 0.104734913 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00423231022 0.0418379456 0.0867786184 + vertex 0.00322199007 0.0399296135 0.0918875411 + vertex 0.0034449799 0.0425782427 0.0813375711 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00423231022 0.0418379456 0.0867786184 + vertex 0.0034449799 0.0425782427 0.0813375711 + vertex 0.00132656016 0.0427098386 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00423231022 0.0418379456 0.0867786184 + vertex 0.00132656016 0.0427098386 0.0674976707 + vertex -0.0146810804 0.0401270352 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00423231022 0.0418379456 0.0867786184 + vertex -0.0146810804 0.0401270352 0.0674976707 + vertex -0.0117184687 0.040373791 0.0867786184 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00423231022 0.0418379456 0.0867786184 + vertex -0.0117184687 0.040373791 0.0867786184 + vertex -0.00873992965 0.0358168408 0.0963597894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00423231022 0.0418379456 0.0867786184 + vertex -0.00873992965 0.0358168408 0.0963597894 + vertex 0.00322199007 0.0399296135 0.0918875411 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0171339791 -0.013470591 0.10488122 + vertex -0.0215619691 -0.0169582199 0.103105754 + vertex 0.0448736809 -0.0943769887 0.100602709 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0171339791 -0.013470591 0.10488122 + vertex 0.0448736809 -0.0943769887 0.100602709 + vertex 0.0586195402 -0.0916296467 0.103880793 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0171339791 -0.013470591 0.10488122 + vertex 0.0586195402 -0.0916296467 0.103880793 + vertex 0.0582054108 -0.0710987076 0.10582234 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0171339791 -0.013470591 0.10488122 + vertex 0.0582054108 -0.0710987076 0.10582234 + vertex -0.000489239988 0.00196051993 0.106905811 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0171339791 -0.013470591 0.10488122 + vertex -0.000489239988 0.00196051993 0.106905811 + vertex -0.0215938203 0.00288178003 0.10488122 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0171339791 -0.013470591 0.10488122 + vertex -0.0215938203 0.00288178003 0.10488122 + vertex -0.0215619691 -0.0169582199 0.103105754 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0309594776 0.02844676 0.0867786184 + vertex -0.0257191677 0.0341059305 0.0813375711 + vertex -0.0285702795 0.0317698829 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0309594776 0.02844676 0.0867786184 + vertex -0.0285702795 0.0317698829 0.0674976707 + vertex -0.0355945192 0.0223763119 0.0867786184 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0309594776 0.02844676 0.0867786184 + vertex -0.0355945192 0.0223763119 0.0867786184 + vertex -0.0339061618 0.0213234406 0.0918914825 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0309594776 0.02844676 0.0867786184 + vertex -0.0339061618 0.0213234406 0.0918914825 + vertex -0.0241104476 0.0319837406 0.0918914825 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0188223496 0.0375935584 0.0867786184 + vertex -0.0117184687 0.040373791 0.0867786184 + vertex -0.0146810804 0.0401270352 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0188223496 0.0375935584 0.0867786184 + vertex -0.0146810804 0.0401270352 0.0674976707 + vertex -0.0257191677 0.0341059305 0.0813375711 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0188223496 0.0375935584 0.0867786184 + vertex -0.0257191677 0.0341059305 0.0813375711 + vertex -0.0309594776 0.02844676 0.0867786184 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0188223496 0.0375935584 0.0867786184 + vertex -0.0309594776 0.02844676 0.0867786184 + vertex -0.0241104476 0.0319837406 0.0918914825 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0188223496 0.0375935584 0.0867786184 + vertex -0.0241104476 0.0319837406 0.0918914825 + vertex -0.00873992965 0.0358168408 0.0963597894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0188223496 0.0375935584 0.0867786184 + vertex -0.00873992965 0.0358168408 0.0963597894 + vertex -0.0117184687 0.040373791 0.0867786184 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0390508994 0.0155820213 0.0867786184 + vertex -0.0355945192 0.0223763119 0.0867786184 + vertex -0.0383500718 0.0188393295 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0390508994 0.0155820213 0.0867786184 + vertex -0.0383500718 0.0188393295 0.0674976707 + vertex -0.0418860801 0.00840933993 0.0813375711 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0390508994 0.0155820213 0.0867786184 + vertex -0.0418860801 0.00840933993 0.0813375711 + vertex -0.0392738916 0.00788291078 0.0918914825 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0390508994 0.0155820213 0.0867786184 + vertex -0.0392738916 0.00788291078 0.0918914825 + vertex -0.0339061618 0.0213234406 0.0918914825 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0390508994 0.0155820213 0.0867786184 + vertex -0.0339061618 0.0213234406 0.0918914825 + vertex -0.0355945192 0.0223763119 0.0867786184 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0395446718 -0.0142931398 0.086774677 + vertex -0.0414719544 -0.00692305993 0.086774677 + vertex -0.0396561697 -0.0159217995 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0395446718 -0.0142931398 0.086774677 + vertex -0.0396561697 -0.0159217995 0.0674976707 + vertex -0.0369006209 -0.0215480719 0.0813375711 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0395446718 -0.0142931398 0.086774677 + vertex -0.0369006209 -0.0215480719 0.0813375711 + vertex -0.0345910601 -0.0202155299 0.0918875411 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0395446718 -0.0142931398 0.086774677 + vertex -0.0345910601 -0.0202155299 0.0918875411 + vertex -0.0355786011 -0.0097197406 0.0963597894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0395446718 -0.0142931398 0.086774677 + vertex -0.0355786011 -0.0097197406 0.0963597894 + vertex -0.0414719544 -0.00692305993 0.086774677 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0365502089 0.00488881022 0.0963597894 + vertex -0.0392738916 0.00788291078 0.0918914825 + vertex -0.0400543585 0.000644440064 0.0918914825 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0365502089 0.00488881022 0.0963597894 + vertex -0.0400543585 0.000644440064 0.0918914825 + vertex -0.0355786011 -0.0097197406 0.0963597894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0365502089 0.00488881022 0.0963597894 + vertex -0.0355786011 -0.0097197406 0.0963597894 + vertex -0.0324885696 -0.00218515028 0.100187518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0365502089 0.00488881022 0.0963597894 + vertex -0.0324885696 -0.00218515028 0.100187518 + vertex -0.0280446596 0.0165197197 0.100187518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0365502089 0.00488881022 0.0963597894 + vertex -0.0280446596 0.0165197197 0.100187518 + vertex -0.0339061618 0.0213234406 0.0918914825 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0365502089 0.00488881022 0.0963597894 + vertex -0.0339061618 0.0213234406 0.0918914825 + vertex -0.0392738916 0.00788291078 0.0918914825 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.119671531 -0.0772514194 0.0711435005 + vertex 0.119902052 -0.0778782889 0.00833765045 + vertex 0.118528523 -0.072311528 -0.000476159999 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.119671531 -0.0772514194 0.0711435005 + vertex 0.118528523 -0.072311528 -0.000476159999 + vertex 0.11744161 -0.0684007332 0.0726303011 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.119671531 -0.0772514194 0.0711435005 + vertex 0.11744161 -0.0684007332 0.0726303011 + vertex 0.116645209 -0.073253803 0.0821837857 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.119671531 -0.0772514194 0.0711435005 + vertex 0.116645209 -0.073253803 0.0821837857 + vertex 0.119512253 -0.0843089372 0.0772211924 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.119671531 -0.0772514194 0.0711435005 + vertex 0.119512253 -0.0843089372 0.0772211924 + vertex 0.119927011 -0.169175386 0.00119910005 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.119671531 -0.0772514194 0.0711435005 + vertex 0.119927011 -0.169175386 0.00119910005 + vertex 0.119902052 -0.0778782889 0.00833765045 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0250274092 0.0346323587 0.0813375711 + vertex 0.0264449995 0.0335630402 0.0674976707 + vertex 0.0171430502 0.0391399637 0.0674976707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0250274092 0.0346323587 0.0813375711 + vertex 0.0171430502 0.0391399637 0.0674976707 + vertex 0.0180668794 0.0379719399 0.086774677 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0250274092 0.0346323587 0.0813375711 + vertex 0.0180668794 0.0379719399 0.086774677 + vertex 0.0234664604 0.0324772745 0.0918875411 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0250274092 0.0346323587 0.0813375711 + vertex 0.0234664604 0.0324772745 0.0918875411 + vertex 0.0303792097 0.029071901 0.086774677 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0250274092 0.0346323587 0.0813375711 + vertex 0.0303792097 0.029071901 0.086774677 + vertex 0.0264449995 0.0335630402 0.0674976707 + endloop + endfacet + +endsolid AssimpScene diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link5.obj b/src/experiments/assets/robots/xarm7/meshes/collision/link5.obj new file mode 100644 index 0000000000000000000000000000000000000000..e85144488f5e3617cdfd4c972195d14570733d63 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link5.obj @@ -0,0 +1,3562 @@ +# https://github.com/mikedh/trimesh + +o geometry_0 +v -0.03680368 0.00474838 0.00716793 0.54509804 0.71372549 0.60000000 +v -0.03701018 0.04821255 0.00729132 0.54509804 0.71372549 0.60000000 +v -0.03757070 0.05732755 0.00410965 0.54509804 0.71372549 0.60000000 +v -0.03754857 0.04797268 0.00366016 0.54509804 0.71372549 0.60000000 +v -0.03749695 0.01805309 -0.00037641 0.54509804 0.71372549 0.60000000 +v -0.03740844 0.00475638 -0.00260622 0.54509804 0.71372549 0.60000000 +v -0.03546139 0.00475638 -0.01218647 0.54509804 0.71372549 0.60000000 +v -0.03109526 0.00475638 -0.02094707 0.54509804 0.71372549 0.60000000 +v -0.02461246 0.00475638 -0.02828869 0.54509804 0.71372549 0.60000000 +v -0.01644810 0.00475638 -0.03369136 0.54509804 0.71372549 0.60000000 +v -0.00717008 0.00475638 -0.03680252 0.54509804 0.71372549 0.60000000 +v 0.00259469 0.00475638 -0.03740183 0.54509804 0.71372549 0.60000000 +v 0.01218984 0.00475638 -0.03545405 0.54509804 0.71372549 0.60000000 +v 0.02095159 0.00475638 -0.03109138 0.54509804 0.71372549 0.60000000 +v 0.02828992 0.00475638 -0.02461348 0.54509804 0.71372549 0.60000000 +v 0.03369595 0.00475638 -0.01645220 0.54509804 0.71372549 0.60000000 +v 0.03680092 0.00475638 -0.00718042 0.54509804 0.71372549 0.60000000 +v 0.03740568 0.00475638 0.00259373 0.54509804 0.71372549 0.60000000 +v 0.03545863 0.00475638 0.01219161 0.54509804 0.71372549 0.60000000 +v 0.03109250 0.00475638 0.02095221 0.54509804 0.71372549 0.60000000 +v 0.02460969 0.00475638 0.02828502 0.54509804 0.71372549 0.60000000 +v 0.01645271 0.00475638 0.03369650 0.54509804 0.71372549 0.60000000 +v 0.00716732 0.00475638 0.03680766 0.54509804 0.71372549 0.60000000 +v -0.00259745 0.00475638 0.03740697 0.54509804 0.71372549 0.60000000 +v -0.01218523 0.00475638 0.03545919 0.54509804 0.71372549 0.60000000 +v -0.02095435 0.00475638 0.03109652 0.54509804 0.71372549 0.60000000 +v -0.02828531 0.00475638 0.02460980 0.54509804 0.71372549 0.60000000 +v -0.03369134 0.00475638 0.01644852 0.54509804 0.71372549 0.60000000 +v -0.03500412 0.04841244 0.01398956 0.54509804 0.71372549 0.60000000 +v -0.03578590 0.05820707 0.01168043 0.54509804 0.71372549 0.60000000 +v -0.03701018 0.04827651 0.00729132 0.54509804 0.71372549 0.60000000 +v -0.03709131 0.05765537 0.00695640 0.54509804 0.71372549 0.60000000 +v -0.03710606 0.05764738 0.00688590 0.54509804 0.71372549 0.60000000 +v -0.03705443 0.06018999 0.00645404 0.54509804 0.71372549 0.60000000 +v -0.03759282 0.06209294 0.00207373 0.54509804 0.71372549 0.60000000 +v -0.03762970 0.05722361 0.00324593 0.54509804 0.71372549 0.60000000 +v -0.03786571 0.05681583 -0.00029709 0.54509804 0.71372549 0.60000000 +v -0.03728307 0.07263116 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03727569 0.07247925 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03718719 0.07089611 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03717244 0.07076818 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03651604 0.06926501 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03646442 0.06916106 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03643492 0.06910510 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03437723 0.06693029 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03414123 0.06670641 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03406010 0.06663445 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03166316 0.06512328 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03136815 0.06495537 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03113952 0.06482744 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.02607275 0.06279655 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.02520247 0.06248473 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.01989970 0.06118144 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.01788626 0.06077366 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.01316613 0.06003007 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.00808461 0.05959831 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.00646206 0.05949436 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.00037752 0.05928648 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.00220381 0.05931846 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.00335434 0.05935044 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.00720420 0.05952635 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.01438028 0.06026195 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.02465394 0.06254869 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.02930033 0.06433971 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.02980184 0.06454759 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03385820 0.06713018 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03396146 0.06720214 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03407209 0.06728209 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03573888 0.06924102 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03579051 0.06932098 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03629203 0.07041638 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03632890 0.07057629 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03655753 0.07199151 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03732455 0.03805012 0.00342220 0.54509804 0.71372549 0.60000000 +v 0.03697792 0.01805309 0.00613675 0.54509804 0.71372549 0.60000000 +v 0.03743518 0.01805309 -0.00192758 0.54509804 0.71372549 0.60000000 +v 0.03747943 0.03805012 -0.00064082 0.54509804 0.71372549 0.60000000 +v 0.03658703 0.03805012 0.00815504 0.54509804 0.71372549 0.60000000 +v 0.03545125 0.03805012 0.01216517 0.54509804 0.71372549 0.60000000 +v 0.03478748 0.01805309 0.01394549 0.54509804 0.71372549 0.60000000 +v 0.03360007 0.03805012 0.01660716 0.54509804 0.71372549 0.60000000 +v 0.03118838 0.03805012 0.02078475 0.54509804 0.71372549 0.60000000 +v 0.03106300 0.03805012 0.02096102 0.54509804 0.71372549 0.60000000 +v 0.03098187 0.01805309 0.02109322 0.54509804 0.71372549 0.60000000 +v 0.02835630 0.03805012 0.02451285 0.54509804 0.71372549 0.60000000 +v 0.02623224 0.01805309 0.02676910 0.54509804 0.71372549 0.60000000 +v 0.02528821 0.03805012 0.02766808 0.54509804 0.71372549 0.60000000 +v 0.02163748 0.03805012 0.03061178 0.54509804 0.71372549 0.60000000 +v 0.01987481 0.01805309 0.03178398 0.54509804 0.71372549 0.60000000 +v 0.01764750 0.03805012 0.03307074 0.54509804 0.71372549 0.60000000 +v 0.01404839 0.03805012 0.03471005 0.54509804 0.71372549 0.60000000 +v 0.01336987 0.03805012 0.03501851 0.54509804 0.71372549 0.60000000 +v 0.01259548 0.01805309 0.03530937 0.54509804 0.71372549 0.60000000 +v 0.01194646 0.01805309 0.03553852 0.54509804 0.71372549 0.60000000 +v 0.00889312 0.03805012 0.03641986 0.54509804 0.71372549 0.60000000 +v 0.00716732 0.01805309 0.03680766 0.54509804 0.71372549 0.60000000 +v 0.00427624 0.03805012 0.03723952 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.01805309 0.03749511 0.54509804 0.71372549 0.60000000 +v -0.00088641 0.03805012 0.03747748 0.54509804 0.71372549 0.60000000 +v -0.00259745 0.01805309 0.03740697 0.54509804 0.71372549 0.60000000 +v -0.00530416 0.03805012 0.03711613 0.54509804 0.71372549 0.60000000 +v -0.00959653 0.03805012 0.03622596 0.54509804 0.71372549 0.60000000 +v -0.00986941 0.03805012 0.03616427 0.54509804 0.71372549 0.60000000 +v -0.00957440 0.04982766 0.03626122 0.54509804 0.71372549 0.60000000 +v -0.01218523 0.01805309 0.03545919 0.54509804 0.71372549 0.60000000 +v -0.01428716 0.03805012 0.03465716 0.54509804 0.71372549 0.60000000 +v -0.01616784 0.04968374 0.03389040 0.54509804 0.71372549 0.60000000 +v -0.01848366 0.03805012 0.03262125 0.54509804 0.71372549 0.60000000 +v -0.02220076 0.04945187 0.03033856 0.54509804 0.71372549 0.60000000 +v -0.02609487 0.03805012 0.02691893 0.54509804 0.71372549 0.60000000 +v -0.02747404 0.04915603 0.02572911 0.54509804 0.71372549 0.60000000 +v -0.02919246 0.03805012 0.02353455 0.54509804 0.71372549 0.60000000 +v -0.03178853 0.04880423 0.02021187 0.54509804 0.71372549 0.60000000 +v -0.03411173 0.05867881 0.01572582 0.54509804 0.71372549 0.60000000 +v -0.03499675 0.05843095 0.01359295 0.54509804 0.71372549 0.60000000 +v -0.03481974 0.06164519 0.01336380 0.54509804 0.71372549 0.60000000 +v -0.03694380 0.06312437 0.00559031 0.54509804 0.71372549 0.60000000 +v -0.03751907 0.06455559 0.00090155 0.54509804 0.71372549 0.60000000 +v -0.03779195 0.06317235 -0.00257096 0.54509804 0.71372549 0.60000000 +v -0.03782883 0.06095756 -0.00149572 0.54509804 0.71372549 0.60000000 +v -0.03726831 0.07285504 -0.04621531 0.54509804 0.71372549 0.60000000 +v -0.03717244 0.07331879 -0.04418821 0.54509804 0.71372549 0.60000000 +v -0.03677418 0.07421429 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03775508 0.06513128 -0.00402519 0.54509804 0.71372549 0.60000000 +v -0.03770345 0.06681036 -0.00585839 0.54509804 0.71372549 0.60000000 +v -0.03765183 0.06822558 -0.00803532 0.54509804 0.71372549 0.60000000 +v -0.03754120 0.07027246 -0.01341154 0.54509804 0.71372549 0.60000000 +v -0.03743795 0.07142382 -0.01985420 0.54509804 0.71372549 0.60000000 +v 0.03655016 0.07203949 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03651328 0.07274310 -0.04418821 0.54509804 0.71372549 0.60000000 +v 0.03655016 0.07235931 -0.04622413 0.54509804 0.71372549 0.60000000 +v 0.03677142 0.07027246 -0.01341154 0.54509804 0.71372549 0.60000000 +v 0.03682304 0.06936095 -0.01053835 0.54509804 0.71372549 0.60000000 +v 0.03688204 0.06820159 -0.00798244 0.54509804 0.71372549 0.60000000 +v 0.03693367 0.06676238 -0.00578789 0.54509804 0.71372549 0.60000000 +v 0.03698530 0.06504332 -0.00395468 0.54509804 0.71372549 0.60000000 +v 0.03702955 0.06305241 -0.00250046 0.54509804 0.71372549 0.60000000 +v 0.03706642 0.05695176 0.00089273 0.54509804 0.71372549 0.60000000 +v 0.03688204 0.05915855 0.00291983 0.54509804 0.71372549 0.60000000 +v 0.03664603 0.05745548 0.00517608 0.54509804 0.71372549 0.60000000 +v 0.03654278 0.04796469 0.00728250 0.54509804 0.71372549 0.60000000 +v 0.03705905 0.06079765 -0.00142522 0.54509804 0.71372549 0.60000000 +v 0.03573151 0.05794321 0.00941536 0.54509804 0.71372549 0.60000000 +v 0.03439660 0.04842044 0.01433328 0.54509804 0.71372549 0.60000000 +v 0.03472111 0.03805012 0.01391905 0.54509804 0.71372549 0.60000000 +v 0.03241267 0.05889469 0.01753258 0.54509804 0.71372549 0.60000000 +v 0.03091550 0.04883621 0.02083763 0.54509804 0.71372549 0.60000000 +v 0.02733852 0.05972623 0.02463624 0.54509804 0.71372549 0.60000000 +v 0.02622486 0.04919601 0.02652232 0.54509804 0.71372549 0.60000000 +v 0.02631337 0.03805012 0.02661927 0.54509804 0.71372549 0.60000000 +v 0.02051645 0.04949984 0.03118465 0.54509804 0.71372549 0.60000000 +v 0.02058283 0.03805012 0.03126397 0.54509804 0.71372549 0.60000000 +v 0.01400414 0.05584037 0.03445445 0.54509804 0.71372549 0.60000000 +v 0.01400414 0.04972372 0.03463953 0.54509804 0.71372549 0.60000000 +v 0.00694607 0.04985965 0.03675477 0.54509804 0.71372549 0.60000000 +v -0.00037752 0.05533665 0.03733646 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.04990762 0.03743342 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.04814059 0.03745985 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.04446261 0.03747748 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.04106447 0.03748629 0.54509804 0.71372549 0.60000000 +v -0.00265646 0.04989962 0.03737172 0.54509804 0.71372549 0.60000000 +v -0.00655794 0.06111747 0.03641986 0.54509804 0.71372549 0.60000000 +v -0.00749459 0.06109349 0.03625241 0.54509804 0.71372549 0.60000000 +v -0.00957440 0.06102952 0.03572360 0.54509804 0.71372549 0.60000000 +v -0.01174271 0.06096556 0.03516834 0.54509804 0.71372549 0.60000000 +v -0.01583596 0.06078166 0.03359073 0.54509804 0.71372549 0.60000000 +v -0.01618259 0.06075767 0.03340565 0.54509804 0.71372549 0.60000000 +v -0.02003983 0.06051780 0.03134330 0.54509804 0.71372549 0.60000000 +v -0.02109448 0.06042985 0.03061178 0.54509804 0.71372549 0.60000000 +v -0.02352830 0.06022996 0.02891078 0.54509804 0.71372549 0.60000000 +v -0.02678077 0.05988615 0.02600233 0.54509804 0.71372549 0.60000000 +v -0.02745929 0.05979820 0.02525318 0.54509804 0.71372549 0.60000000 +v -0.02959072 0.05951835 0.02289118 0.54509804 0.71372549 0.60000000 +v -0.02654476 0.05991813 0.02625792 0.54509804 0.71372549 0.60000000 +v -0.03142715 0.05922251 0.02033527 0.54509804 0.71372549 0.60000000 +v -0.03181066 0.05915855 0.01979764 0.54509804 0.71372549 0.60000000 +v -0.03197291 0.05912657 0.01956849 0.54509804 0.71372549 0.60000000 +v -0.03130177 0.06290849 0.01973594 0.54509804 0.71372549 0.60000000 +v -0.03462062 0.06495537 0.01237669 0.54509804 0.71372549 0.60000000 +v -0.03679630 0.06580291 0.00432998 0.54509804 0.71372549 0.60000000 +v -0.03743057 0.06674639 -0.00066726 0.54509804 0.71372549 0.60000000 +v -0.03666355 0.07463806 -0.04215230 0.54509804 0.71372549 0.60000000 +v -0.03675205 0.07401440 -0.01782710 0.54509804 0.71372549 0.60000000 +v -0.03660455 0.07466205 -0.02561821 0.54509804 0.71372549 0.60000000 +v -0.03664880 0.07448614 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03731994 0.06864935 -0.00264147 0.54509804 0.71372549 0.60000000 +v -0.03720931 0.07026446 -0.00501230 0.54509804 0.71372549 0.60000000 +v -0.03696593 0.07263116 -0.01082920 0.54509804 0.71372549 0.60000000 +v 0.03651328 0.07221539 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03620352 0.07395843 -0.04622413 0.54509804 0.71372549 0.60000000 +v 0.03598227 0.07403039 -0.01791523 0.54509804 0.71372549 0.60000000 +v 0.03659441 0.07195153 -0.02718701 0.54509804 0.71372549 0.60000000 +v 0.03666816 0.07143981 -0.01993352 0.54509804 0.71372549 0.60000000 +v 0.03619615 0.07263916 -0.01082920 0.54509804 0.71372549 0.60000000 +v 0.03632153 0.07157574 -0.00771803 0.54509804 0.71372549 0.60000000 +v 0.03643953 0.07023248 -0.00495061 0.54509804 0.71372549 0.60000000 +v 0.03655753 0.06859338 -0.00256216 0.54509804 0.71372549 0.60000000 +v 0.03666079 0.06665044 -0.00057912 0.54509804 0.71372549 0.60000000 +v 0.03675666 0.06441966 0.00098086 0.54509804 0.71372549 0.60000000 +v 0.03683042 0.06190904 0.00214425 0.54509804 0.71372549 0.60000000 +v 0.03629203 0.05994212 0.00650692 0.54509804 0.71372549 0.60000000 +v 0.03406471 0.06135734 0.01342550 0.54509804 0.71372549 0.60000000 +v 0.03425647 0.05844694 0.01368990 0.54509804 0.71372549 0.60000000 +v 0.03618877 0.06292448 0.00566964 0.54509804 0.71372549 0.60000000 +v 0.03416059 0.05847093 0.01389261 0.54509804 0.71372549 0.60000000 +v 0.03054674 0.06258867 0.01980646 0.54509804 0.71372549 0.60000000 +v 0.03077537 0.05919853 0.02014137 0.54509804 0.71372549 0.60000000 +v 0.03014848 0.05931846 0.02113729 0.54509804 0.71372549 0.60000000 +v 0.02587823 0.06363609 0.02538538 0.54509804 0.71372549 0.60000000 +v 0.02612161 0.05987016 0.02581725 0.54509804 0.71372549 0.60000000 +v 0.02384267 0.06012602 0.02802061 0.54509804 0.71372549 0.60000000 +v 0.02049433 0.06042186 0.03055890 0.54509804 0.71372549 0.60000000 +v 0.02035420 0.06043785 0.03064704 0.54509804 0.71372549 0.60000000 +v 0.01671822 0.06068571 0.03278871 0.54509804 0.71372549 0.60000000 +v 0.01398202 0.06082963 0.03400497 0.54509804 0.71372549 0.60000000 +v 0.01272823 0.06089360 0.03456022 0.54509804 0.71372549 0.60000000 +v 0.00853174 0.06105351 0.03585580 0.54509804 0.71372549 0.60000000 +v 0.00694607 0.05604026 0.03659613 0.54509804 0.71372549 0.60000000 +v -0.00037752 0.06118144 0.03693986 0.54509804 0.71372549 0.60000000 +v -0.00185993 0.06117344 0.03690461 0.54509804 0.71372549 0.60000000 +v -0.00265646 0.06116545 0.03682528 0.54509804 0.71372549 0.60000000 +v 0.00419511 0.06114146 0.03665783 0.54509804 0.71372549 0.60000000 +v -0.00759785 0.06585088 0.03537106 0.54509804 0.71372549 0.60000000 +v -0.01455267 0.06547509 0.03328227 0.54509804 0.71372549 0.60000000 +v -0.02097648 0.06484343 0.02988026 0.54509804 0.71372549 0.60000000 +v -0.02662589 0.06397990 0.02530606 0.54509804 0.71372549 0.60000000 +v -0.03103626 0.06654650 0.01861663 0.54509804 0.71372549 0.60000000 +v -0.03433298 0.06796972 0.01092247 0.54509804 0.71372549 0.60000000 +v -0.03661192 0.06818560 0.00263780 0.54509804 0.71372549 0.60000000 +v -0.03622104 0.07537366 -0.04418821 0.54509804 0.71372549 0.60000000 +v -0.03613991 0.07548560 -0.04621531 0.54509804 0.71372549 0.60000000 +v -0.03567527 0.07459808 -0.00833498 0.54509804 0.71372549 0.60000000 +v -0.03523276 0.07610925 -0.01588813 0.54509804 0.71372549 0.60000000 +v -0.03492300 0.07681287 -0.02429619 0.54509804 0.71372549 0.60000000 +v -0.03579327 0.07579743 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03639804 0.07025646 0.00050494 0.54509804 0.71372549 0.60000000 +v -0.03616203 0.07201550 -0.00205097 0.54509804 0.71372549 0.60000000 +v -0.03591865 0.07345471 -0.00501230 0.54509804 0.71372549 0.60000000 +v 0.03582001 0.07461407 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03593801 0.07455011 -0.04418821 0.54509804 0.71372549 0.60000000 +v 0.03582739 0.07467804 -0.02581211 0.54509804 0.71372549 0.60000000 +v 0.03446297 0.07612524 -0.01598508 0.54509804 0.71372549 0.60000000 +v 0.03466948 0.07548560 -0.01201901 0.54509804 0.71372549 0.60000000 +v 0.03490549 0.07460608 -0.00833498 0.54509804 0.71372549 0.60000000 +v 0.03514887 0.07344672 -0.00497704 0.54509804 0.71372549 0.60000000 +v 0.03539962 0.07197552 -0.00198928 0.54509804 0.71372549 0.60000000 +v 0.03564301 0.07019250 0.00058426 0.54509804 0.71372549 0.60000000 +v 0.03585689 0.06808165 0.00272593 0.54509804 0.71372549 0.60000000 +v 0.03604127 0.06565099 0.00441812 0.54509804 0.71372549 0.60000000 +v 0.03386558 0.06473149 0.01246483 0.54509804 0.71372549 0.60000000 +v 0.03028860 0.06629863 0.01871359 0.54509804 0.71372549 0.60000000 +v 0.02560535 0.06762591 0.02418675 0.54509804 0.71372549 0.60000000 +v 0.01997806 0.06868133 0.02867281 0.54509804 0.71372549 0.60000000 +v 0.02022144 0.06448363 0.02996840 0.54509804 0.71372549 0.60000000 +v 0.01379764 0.06509130 0.03337040 0.54509804 0.71372549 0.60000000 +v 0.00683544 0.06546709 0.03545919 0.54509804 0.71372549 0.60000000 +v -0.00037752 0.06606676 0.03605851 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.06975274 0.03487750 0.54509804 0.71372549 0.60000000 +v -0.00750197 0.07022448 0.03392565 0.54509804 0.71372549 0.60000000 +v -0.01436829 0.06974474 0.03188092 0.54509804 0.71372549 0.60000000 +v -0.02072572 0.06896117 0.02855824 0.54509804 0.71372549 0.60000000 +v -0.02635301 0.06788976 0.02408099 0.54509804 0.71372549 0.60000000 +v -0.03067488 0.06983270 0.01697733 0.54509804 0.71372549 0.60000000 +v -0.03397160 0.07064025 0.00897469 0.54509804 0.71372549 0.60000000 +v -0.03428136 0.07748450 -0.04215230 0.54509804 0.71372549 0.60000000 +v -0.03568265 0.07597333 -0.04621531 0.54509804 0.71372549 0.60000000 +v -0.03402322 0.07625317 -0.00592890 0.54509804 0.71372549 0.60000000 +v -0.03335945 0.07780432 -0.01402849 0.54509804 0.71372549 0.60000000 +v -0.03068225 0.07990717 -0.02184604 0.54509804 0.71372549 0.60000000 +v -0.03379459 0.07788428 -0.04418821 0.54509804 0.71372549 0.60000000 +v -0.03556464 0.07603729 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03420023 0.07754847 -0.04621531 0.54509804 0.71372549 0.60000000 +v -0.03355859 0.07295098 0.00652454 0.54509804 0.71372549 0.60000000 +v -0.03310132 0.07488593 0.00358965 0.54509804 0.71372549 0.60000000 +v 0.03574626 0.07472601 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03585689 0.07471002 -0.04215230 0.54509804 0.71372549 0.60000000 +v 0.03576101 0.07486993 -0.03412322 0.54509804 0.71372549 0.60000000 +v 0.03415321 0.07682886 -0.02450771 0.54509804 0.71372549 0.60000000 +v 0.03050986 0.07925153 -0.01236274 0.54509804 0.71372549 0.60000000 +v 0.03091550 0.07860389 -0.00783262 0.54509804 0.71372549 0.60000000 +v 0.03137276 0.07768439 -0.00361977 0.54509804 0.71372549 0.60000000 +v 0.03185215 0.07644507 0.00023172 0.54509804 0.71372549 0.60000000 +v 0.03233891 0.07484595 0.00366016 0.54509804 0.71372549 0.60000000 +v 0.03280355 0.07287902 0.00662149 0.54509804 0.71372549 0.60000000 +v 0.03322394 0.07052831 0.00908045 0.54509804 0.71372549 0.60000000 +v 0.03358532 0.06780181 0.01102823 0.54509804 0.71372549 0.60000000 +v 0.02992722 0.06964879 0.01709191 0.54509804 0.71372549 0.60000000 +v 0.02522184 0.07119994 0.02239762 0.54509804 0.71372549 0.60000000 +v 0.01963880 0.07243927 0.02674266 0.54509804 0.71372549 0.60000000 +v 0.01336250 0.07334277 0.02996840 0.54509804 0.71372549 0.60000000 +v 0.01361326 0.06945690 0.03200430 0.54509804 0.71372549 0.60000000 +v 0.00673956 0.06992864 0.03404903 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.07036840 0.03457784 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.07311090 0.03322938 0.54509804 0.71372549 0.60000000 +v -0.00736922 0.07411035 0.03180160 0.54509804 0.71372549 0.60000000 +v -0.01411016 0.07355066 0.02982738 0.54509804 0.71372549 0.60000000 +v -0.02038646 0.07264715 0.02661046 0.54509804 0.71372549 0.60000000 +v -0.02596949 0.07139184 0.02227423 0.54509804 0.71372549 0.60000000 +v -0.03021024 0.07271911 0.01478277 0.54509804 0.71372549 0.60000000 +v -0.03262193 0.07645307 0.00018765 0.54509804 0.71372549 0.60000000 +v -0.03214254 0.07768439 -0.00361977 0.54509804 0.71372549 0.60000000 +v -0.03128702 0.07923554 -0.01224816 0.54509804 0.71372549 0.60000000 +v -0.02676602 0.08155427 -0.00897836 0.54509804 0.71372549 0.60000000 +v -0.02598424 0.08210596 -0.01966030 0.54509804 0.71372549 0.60000000 +v -0.02950959 0.08053083 -0.04418821 0.54509804 0.71372549 0.60000000 +v -0.03032824 0.08010707 -0.04621531 0.54509804 0.71372549 0.60000000 +v -0.03327095 0.07814014 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03331520 0.07810816 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.02967923 0.07518976 0.01203297 0.54509804 0.71372549 0.60000000 +v -0.02908921 0.07722864 0.00872791 0.54509804 0.71372549 0.60000000 +v 0.03558400 0.07495789 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03440397 0.07664496 -0.04622413 0.54509804 0.71372549 0.60000000 +v 0.03445560 0.07659699 -0.04418821 0.54509804 0.71372549 0.60000000 +v 0.02989772 0.07992316 -0.02208401 0.54509804 0.71372549 0.60000000 +v 0.03400571 0.07703675 -0.03347983 0.54509804 0.71372549 0.60000000 +v 0.02598148 0.08157026 -0.00910175 0.54509804 0.71372549 0.60000000 +v 0.02709514 0.08007508 0.00065477 0.54509804 0.71372549 0.60000000 +v 0.02770728 0.07882776 0.00497337 0.54509804 0.71372549 0.60000000 +v 0.02833417 0.07718866 0.00881605 0.54509804 0.71372549 0.60000000 +v 0.02892419 0.07510980 0.01213873 0.54509804 0.71372549 0.60000000 +v 0.02946995 0.07259918 0.01490616 0.54509804 0.71372549 0.60000000 +v 0.02474245 0.07431824 0.01998272 0.54509804 0.71372549 0.60000000 +v 0.01921104 0.07569348 0.02415150 0.54509804 0.71372549 0.60000000 +v 0.01303799 0.07669294 0.02723622 0.54509804 0.71372549 0.60000000 +v 0.00643718 0.07730060 0.02913112 0.54509804 0.71372549 0.60000000 +v 0.00660681 0.07389447 0.03195143 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.07425427 0.03241854 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.07604528 0.03113177 0.54509804 0.71372549 0.60000000 +v -0.00719959 0.07744452 0.02898129 0.54509804 0.71372549 0.60000000 +v -0.01379302 0.07683686 0.02708639 0.54509804 0.71372549 0.60000000 +v -0.01995870 0.07582941 0.02401049 0.54509804 0.71372549 0.60000000 +v -0.02549011 0.07445416 0.01985934 0.54509804 0.71372549 0.60000000 +v -0.02847707 0.07884376 0.00492049 0.54509804 0.71372549 0.60000000 +v -0.02786492 0.08007508 0.00065477 0.54509804 0.71372549 0.60000000 +v -0.02302678 0.08197005 0.00436524 0.54509804 0.71372549 0.60000000 +v -0.02188363 0.08332130 -0.00617568 0.54509804 0.71372549 0.60000000 +v -0.02106498 0.08373707 -0.01778303 0.54509804 0.71372549 0.60000000 +v -0.02303416 0.08304145 -0.04621531 0.54509804 0.71372549 0.60000000 +v -0.02553436 0.08220991 -0.04621531 0.54509804 0.71372549 0.60000000 +v -0.02796080 0.08124244 -0.04621531 0.54509804 0.71372549 0.60000000 +v -0.02949484 0.08051484 -0.04621531 0.54509804 0.71372549 0.60000000 +v -0.03019549 0.07996314 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03038724 0.07986719 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.03292432 0.07836402 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.02492959 0.07703675 0.01682750 0.54509804 0.71372549 0.60000000 +v -0.02431007 0.07913160 0.01320516 0.54509804 0.71372549 0.60000000 +v 0.03404258 0.07685285 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03399096 0.07690082 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.03398358 0.07706074 -0.04215230 0.54509804 0.71372549 0.60000000 +v 0.02519971 0.08211397 -0.01992470 0.54509804 0.71372549 0.60000000 +v 0.03135801 0.07906763 -0.04418821 0.54509804 0.71372549 0.60000000 +v 0.03079012 0.07941944 -0.04622413 0.54509804 0.71372549 0.60000000 +v 0.02961008 0.08009907 -0.03229883 0.54509804 0.71372549 0.60000000 +v 0.02109909 0.08333729 -0.00630788 0.54509804 0.71372549 0.60000000 +v 0.02225700 0.08197804 0.00436524 0.54509804 0.71372549 0.60000000 +v 0.02290602 0.08075470 0.00908045 0.54509804 0.71372549 0.60000000 +v 0.02355504 0.07909162 0.01330211 0.54509804 0.71372549 0.60000000 +v 0.02418193 0.07695679 0.01695089 0.54509804 0.71372549 0.60000000 +v 0.01870215 0.07841199 0.02087288 0.54509804 0.71372549 0.60000000 +v 0.01266185 0.07947541 0.02379015 0.54509804 0.71372549 0.60000000 +v 0.00623805 0.08011506 0.02557928 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.07745251 0.02972162 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.07854792 0.02861111 0.54509804 0.71372549 0.60000000 +v -0.00700045 0.08020301 0.02543827 0.54509804 0.71372549 0.60000000 +v -0.01341689 0.07956336 0.02365794 0.54509804 0.71372549 0.60000000 +v -0.01945718 0.07849995 0.02074950 0.54509804 0.71372549 0.60000000 +v -0.02366843 0.08077070 0.00902757 0.54509804 0.71372549 0.60000000 +v -0.01776089 0.08343324 0.00737064 0.54509804 0.71372549 0.60000000 +v -0.01832878 0.08226588 0.01237669 0.54509804 0.71372549 0.60000000 +v -0.01673573 0.08465657 -0.00389299 0.54509804 0.71372549 0.60000000 +v -0.01600559 0.08492842 -0.01627592 0.54509804 0.71372549 0.60000000 +v -0.01944981 0.08391297 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.02206801 0.08332930 -0.04215230 0.54509804 0.71372549 0.60000000 +v -0.02297516 0.08305744 -0.04621531 0.54509804 0.71372549 0.60000000 +v -0.02560811 0.08197804 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.02572611 0.08193006 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.01890404 0.08063477 0.01685394 0.54509804 0.71372549 0.60000000 +v 0.03368858 0.07713269 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.02028045 0.08374507 -0.01807388 0.54509804 0.71372549 0.60000000 +v 0.02652725 0.08153028 -0.04418821 0.54509804 0.71372549 0.60000000 +v 0.02476457 0.08220991 -0.04622413 0.54509804 0.71372549 0.60000000 +v 0.02483095 0.08221790 -0.03125003 0.54509804 0.71372549 0.60000000 +v 0.02275852 0.08288954 -0.04215230 0.54509804 0.71372549 0.60000000 +v 0.02969859 0.07989918 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.02956584 0.08011506 -0.04215230 0.54509804 0.71372549 0.60000000 +v 0.01595120 0.08466456 -0.00403400 0.54509804 0.71372549 0.60000000 +v 0.01699110 0.08343324 0.00737064 0.54509804 0.71372549 0.60000000 +v 0.01756637 0.08224989 0.01243839 0.54509804 0.71372549 0.60000000 +v 0.01814901 0.08059480 0.01695970 0.54509804 0.71372549 0.60000000 +v 0.01224884 0.08167420 0.01966544 0.54509804 0.71372549 0.60000000 +v 0.00601679 0.08232984 0.02133119 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.08065876 0.02564979 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.08029896 0.02616097 0.54509804 0.71372549 0.60000000 +v -0.00677920 0.08237782 0.02121661 0.54509804 0.71372549 0.60000000 +v -0.01301125 0.08172218 0.01955968 0.54509804 0.71372549 0.60000000 +v -0.01258349 0.08333729 0.01485328 0.54509804 0.71372549 0.60000000 +v -0.01215573 0.08447267 0.00960045 0.54509804 0.71372549 0.60000000 +v -0.01138870 0.08558406 -0.00221843 0.54509804 0.71372549 0.60000000 +v -0.01085031 0.08575196 -0.01516543 0.54509804 0.71372549 0.60000000 +v -0.01379302 0.08512831 -0.04621531 0.54509804 0.71372549 0.60000000 +v -0.01615309 0.08472053 -0.04215230 0.54509804 0.71372549 0.60000000 +v -0.01643335 0.08450465 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.01522105 0.08492842 -0.01657558 0.54509804 0.71372549 0.60000000 +v 0.02230125 0.08303346 -0.04622413 0.54509804 0.71372549 0.60000000 +v 0.01982318 0.08372908 -0.04621531 0.54509804 0.71372549 0.60000000 +v 0.01732299 0.08432875 -0.04621531 0.54509804 0.71372549 0.60000000 +v 0.02958796 0.07995515 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.02932983 0.08007508 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.02483095 0.08200203 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.02469820 0.08205000 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.01061155 0.08559206 -0.00236826 0.54509804 0.71372549 0.60000000 +v 0.01138594 0.08448066 0.00960045 0.54509804 0.71372549 0.60000000 +v 0.01181370 0.08332930 0.01491497 0.54509804 0.71372549 0.60000000 +v 0.00578078 0.08397694 0.01643089 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.08385700 0.01815833 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.08241779 0.02220372 0.54509804 0.71372549 0.60000000 +v -0.00655057 0.08399293 0.01636920 0.54509804 0.71372549 0.60000000 +v -0.00632931 0.08510433 0.01095772 0.54509804 0.71372549 0.60000000 +v -0.00591630 0.08614375 -0.00118725 0.54509804 0.71372549 0.60000000 +v -0.00562867 0.08623170 -0.01448679 0.54509804 0.71372549 0.60000000 +v -0.00674970 0.08584792 -0.05229661 0.54509804 0.71372549 0.60000000 +v -0.01309975 0.08515230 -0.05242881 0.54509804 0.71372549 0.60000000 +v -0.01309975 0.08514430 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.01006578 0.08575196 -0.01548271 0.54509804 0.71372549 0.60000000 +v 0.01481542 0.08482448 -0.04621531 0.54509804 0.71372549 0.60000000 +v 0.01229309 0.08524025 -0.04621531 0.54509804 0.71372549 0.60000000 +v 0.01995594 0.08347322 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.01484492 0.08475251 -0.05177662 0.54509804 0.71372549 0.60000000 +v 0.00514652 0.08614375 -0.00134589 0.54509804 0.71372549 0.60000000 +v 0.00555215 0.08510433 0.01095772 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.08497639 0.01339906 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.08416084 0.01687156 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.08577595 0.00774080 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.08626368 0.00088392 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.08643159 -0.01032683 0.54509804 0.71372549 0.60000000 +v -0.00247945 0.08611976 -0.04621531 0.54509804 0.71372549 0.60000000 +v -0.00540741 0.08599983 -0.04418821 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.08613576 -0.04843631 0.54509804 0.71372549 0.60000000 +v -0.00038489 0.08600782 -0.05254339 0.54509804 0.71372549 0.60000000 +v -0.00675707 0.08583991 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.00485151 0.08623170 -0.01481289 0.54509804 0.71372549 0.60000000 +v 0.00976340 0.08556008 -0.04855088 0.54509804 0.71372549 0.60000000 +v 0.00722632 0.08582393 -0.04621531 0.54509804 0.71372549 0.60000000 +v 0.01716073 0.08414484 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.01486704 0.08469654 -0.05245525 0.54509804 0.71372549 0.60000000 +v 0.00984452 0.08534419 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.00966014 0.08536818 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.00215218 0.08611177 -0.04621531 0.54509804 0.71372549 0.60000000 +v 0.00088364 0.08613576 -0.04621531 0.54509804 0.71372549 0.60000000 +v 0.00216693 0.08599983 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.00468925 0.08599983 -0.04621531 0.54509804 0.71372549 0.60000000 +v 0.00342072 0.08606379 -0.04621531 0.54509804 0.71372549 0.60000000 +v 0.00473350 0.08582393 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.00443849 0.08584792 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.01486704 0.08468855 -0.05254339 0.54509804 0.71372549 0.60000000 +v 0.00247669 0.08598384 -0.05254339 0.54509804 0.71372549 0.60000000 +f 1 2 3 +f 1 3 4 +f 1 4 5 +f 1 5 6 +f 1 6 7 +f 1 7 8 +f 1 8 9 +f 1 9 10 +f 1 10 11 +f 1 11 12 +f 1 12 13 +f 1 13 14 +f 1 14 15 +f 1 15 16 +f 1 16 17 +f 1 17 18 +f 1 18 19 +f 1 19 20 +f 1 20 21 +f 1 21 22 +f 1 22 23 +f 1 23 24 +f 1 24 25 +f 1 25 26 +f 1 26 27 +f 1 27 28 +f 1 28 29 +f 1 29 30 +f 1 30 2 +f 2 31 32 +f 2 32 33 +f 2 33 3 +f 2 30 31 +f 3 33 34 +f 3 34 35 +f 3 35 36 +f 3 36 4 +f 4 36 37 +f 4 37 5 +f 5 37 6 +f 6 37 38 +f 6 38 39 +f 6 39 40 +f 6 40 41 +f 6 41 7 +f 7 41 8 +f 8 41 42 +f 8 42 43 +f 8 43 9 +f 9 43 44 +f 9 44 10 +f 10 44 45 +f 10 45 46 +f 10 46 47 +f 10 47 11 +f 11 47 48 +f 11 48 49 +f 11 49 50 +f 11 50 51 +f 11 51 52 +f 11 52 53 +f 11 53 12 +f 12 53 54 +f 12 54 55 +f 12 55 56 +f 12 56 57 +f 12 57 58 +f 12 58 59 +f 12 59 60 +f 12 60 61 +f 12 61 62 +f 12 62 63 +f 12 63 64 +f 12 64 65 +f 12 65 13 +f 13 65 66 +f 13 66 67 +f 13 67 68 +f 13 68 14 +f 14 68 69 +f 14 69 70 +f 14 70 15 +f 15 70 71 +f 15 71 16 +f 16 71 72 +f 16 72 17 +f 17 72 73 +f 17 73 18 +f 18 74 75 +f 18 75 19 +f 18 73 76 +f 18 76 77 +f 18 77 74 +f 19 78 79 +f 19 79 80 +f 19 80 20 +f 19 75 78 +f 20 80 81 +f 20 81 82 +f 20 82 83 +f 20 83 84 +f 20 84 85 +f 20 85 86 +f 20 86 21 +f 21 86 87 +f 21 87 88 +f 21 88 89 +f 21 89 22 +f 22 89 90 +f 22 90 91 +f 22 91 92 +f 22 92 93 +f 22 93 94 +f 22 94 23 +f 23 94 95 +f 23 95 96 +f 23 96 97 +f 23 97 98 +f 23 98 24 +f 24 98 99 +f 24 99 100 +f 24 100 101 +f 24 101 25 +f 25 101 102 +f 25 102 103 +f 25 103 104 +f 25 104 105 +f 25 105 106 +f 25 106 107 +f 25 107 26 +f 26 107 108 +f 26 108 109 +f 26 109 110 +f 26 110 27 +f 27 111 112 +f 27 112 113 +f 27 113 28 +f 27 110 111 +f 28 113 29 +f 29 113 114 +f 29 114 115 +f 29 115 30 +f 30 115 116 +f 30 116 117 +f 30 117 34 +f 30 34 32 +f 30 32 31 +f 32 34 33 +f 34 117 35 +f 35 117 118 +f 35 118 119 +f 35 119 120 +f 35 120 37 +f 35 37 36 +f 37 120 38 +f 38 121 122 +f 38 122 123 +f 38 123 185 +f 38 185 235 +f 38 235 271 +f 38 271 308 +f 38 308 307 +f 38 307 344 +f 38 344 343 +f 38 343 342 +f 38 342 376 +f 38 376 375 +f 38 375 372 +f 38 372 402 +f 38 402 423 +f 38 423 440 +f 38 440 439 +f 38 439 450 +f 38 450 456 +f 38 456 454 +f 38 454 453 +f 38 453 447 +f 38 447 446 +f 38 446 455 +f 38 455 444 +f 38 444 427 +f 38 427 410 +f 38 410 409 +f 38 409 408 +f 38 408 407 +f 38 407 384 +f 38 384 378 +f 38 378 348 +f 38 348 347 +f 38 347 311 +f 38 311 275 +f 38 275 239 +f 38 239 189 +f 38 189 129 +f 38 129 73 +f 38 73 72 +f 38 72 71 +f 38 71 70 +f 38 70 69 +f 38 69 68 +f 38 68 67 +f 38 67 66 +f 38 66 65 +f 38 65 64 +f 38 64 63 +f 38 63 62 +f 38 62 61 +f 38 61 60 +f 38 60 59 +f 38 59 58 +f 38 58 57 +f 38 57 56 +f 38 56 55 +f 38 55 54 +f 38 54 53 +f 38 53 52 +f 38 52 51 +f 38 51 50 +f 38 50 49 +f 38 49 48 +f 38 48 47 +f 38 47 46 +f 38 46 45 +f 38 45 44 +f 38 44 43 +f 38 43 42 +f 38 42 41 +f 38 41 40 +f 38 40 39 +f 38 120 119 +f 38 119 124 +f 38 124 125 +f 38 125 126 +f 38 126 127 +f 38 127 128 +f 38 128 121 +f 73 129 130 +f 73 130 131 +f 73 131 132 +f 73 132 133 +f 73 133 134 +f 73 134 135 +f 73 135 136 +f 73 136 137 +f 73 137 77 +f 73 77 76 +f 74 77 138 +f 74 138 139 +f 74 139 140 +f 74 140 141 +f 74 141 78 +f 74 78 75 +f 77 137 142 +f 77 142 138 +f 78 143 79 +f 78 141 143 +f 79 143 144 +f 79 144 145 +f 79 145 80 +f 80 145 81 +f 81 145 144 +f 81 144 146 +f 81 146 147 +f 81 147 82 +f 82 147 83 +f 83 147 85 +f 83 85 84 +f 85 147 148 +f 85 148 149 +f 85 149 150 +f 85 150 86 +f 86 150 87 +f 87 150 149 +f 87 149 151 +f 87 151 88 +f 88 151 152 +f 88 152 89 +f 89 152 90 +f 90 152 151 +f 90 151 153 +f 90 153 154 +f 90 154 91 +f 91 154 92 +f 92 94 93 +f 92 154 95 +f 92 95 94 +f 95 155 96 +f 95 154 155 +f 96 155 97 +f 97 156 157 +f 97 157 158 +f 97 158 159 +f 97 159 160 +f 97 160 98 +f 97 155 156 +f 98 160 99 +f 99 160 159 +f 99 159 161 +f 99 161 100 +f 100 161 101 +f 101 161 104 +f 101 104 102 +f 102 104 103 +f 104 162 163 +f 104 163 164 +f 104 164 165 +f 104 165 107 +f 104 107 106 +f 104 106 105 +f 104 161 162 +f 107 165 166 +f 107 166 167 +f 107 167 168 +f 107 168 109 +f 107 109 108 +f 109 168 169 +f 109 169 170 +f 109 170 111 +f 109 111 110 +f 111 171 172 +f 111 172 173 +f 111 173 113 +f 111 113 112 +f 111 170 174 +f 111 174 171 +f 113 173 175 +f 113 175 176 +f 113 176 177 +f 113 177 114 +f 114 116 115 +f 114 177 178 +f 114 178 116 +f 116 178 179 +f 116 179 117 +f 117 180 118 +f 117 179 180 +f 118 180 181 +f 118 181 124 +f 118 124 119 +f 121 128 122 +f 122 182 123 +f 122 128 183 +f 122 183 184 +f 122 184 182 +f 123 182 185 +f 124 181 125 +f 125 181 186 +f 125 186 126 +f 126 186 187 +f 126 187 127 +f 127 187 188 +f 127 188 128 +f 128 188 183 +f 129 189 130 +f 130 189 190 +f 130 190 191 +f 130 191 192 +f 130 192 193 +f 130 193 131 +f 131 193 132 +f 132 193 194 +f 132 194 195 +f 132 195 133 +f 133 195 196 +f 133 196 134 +f 134 196 197 +f 134 197 135 +f 135 197 198 +f 135 198 136 +f 136 198 199 +f 136 199 137 +f 137 199 200 +f 137 200 142 +f 138 200 139 +f 138 142 200 +f 139 200 140 +f 140 201 141 +f 140 200 201 +f 141 201 143 +f 143 202 203 +f 143 203 144 +f 143 201 204 +f 143 204 202 +f 144 203 205 +f 144 205 146 +f 146 206 207 +f 146 207 147 +f 146 205 202 +f 146 202 206 +f 147 207 208 +f 147 208 148 +f 148 209 210 +f 148 210 149 +f 148 208 206 +f 148 206 209 +f 149 211 151 +f 149 210 211 +f 151 211 212 +f 151 212 213 +f 151 213 214 +f 151 214 153 +f 153 215 216 +f 153 216 217 +f 153 217 218 +f 153 218 154 +f 153 214 215 +f 154 218 155 +f 155 218 156 +f 156 219 220 +f 156 220 221 +f 156 221 161 +f 156 161 157 +f 156 218 222 +f 156 222 219 +f 157 161 158 +f 158 161 159 +f 161 221 162 +f 162 221 223 +f 162 223 163 +f 163 223 164 +f 164 223 165 +f 165 223 224 +f 165 224 166 +f 166 224 168 +f 166 168 167 +f 168 224 225 +f 168 225 169 +f 169 225 170 +f 170 225 226 +f 170 226 174 +f 171 226 172 +f 171 174 226 +f 172 226 173 +f 173 226 178 +f 173 178 175 +f 175 178 176 +f 176 178 177 +f 178 227 179 +f 178 226 227 +f 179 227 228 +f 179 228 180 +f 180 229 181 +f 180 228 229 +f 181 229 186 +f 182 230 231 +f 182 231 185 +f 182 184 230 +f 183 188 232 +f 183 232 233 +f 183 233 184 +f 184 233 234 +f 184 234 230 +f 185 231 235 +f 186 229 236 +f 186 236 187 +f 187 236 237 +f 187 237 188 +f 188 237 238 +f 188 238 232 +f 189 239 190 +f 190 239 240 +f 190 240 241 +f 190 241 191 +f 191 193 192 +f 191 241 242 +f 191 242 243 +f 191 243 244 +f 191 244 194 +f 191 194 193 +f 194 244 245 +f 194 245 195 +f 195 245 246 +f 195 246 196 +f 196 246 247 +f 196 247 197 +f 197 247 248 +f 197 248 198 +f 198 248 249 +f 198 249 199 +f 199 249 204 +f 199 204 200 +f 200 204 201 +f 202 205 203 +f 202 204 250 +f 202 250 206 +f 204 249 250 +f 206 208 207 +f 206 250 251 +f 206 251 209 +f 209 251 252 +f 209 252 253 +f 209 253 254 +f 209 254 211 +f 209 211 210 +f 211 254 212 +f 212 254 213 +f 213 254 214 +f 214 254 255 +f 214 255 215 +f 215 255 216 +f 216 255 217 +f 217 255 256 +f 217 256 222 +f 217 222 218 +f 219 257 220 +f 219 222 257 +f 220 257 223 +f 220 223 221 +f 222 256 257 +f 223 257 258 +f 223 258 259 +f 223 259 224 +f 224 260 225 +f 224 259 260 +f 225 260 261 +f 225 261 262 +f 225 262 226 +f 226 262 227 +f 227 262 263 +f 227 263 228 +f 228 263 264 +f 228 264 229 +f 229 264 236 +f 230 234 231 +f 231 234 265 +f 231 265 266 +f 231 266 235 +f 232 238 267 +f 232 267 233 +f 233 267 268 +f 233 268 234 +f 234 268 269 +f 234 269 270 +f 234 270 265 +f 235 266 272 +f 235 272 271 +f 236 264 273 +f 236 273 237 +f 237 273 274 +f 237 274 238 +f 238 274 267 +f 239 275 276 +f 239 276 240 +f 240 276 277 +f 240 277 241 +f 241 278 242 +f 241 277 278 +f 242 279 280 +f 242 280 243 +f 242 278 279 +f 243 280 281 +f 243 281 244 +f 244 281 282 +f 244 282 245 +f 245 282 283 +f 245 283 246 +f 246 283 284 +f 246 284 247 +f 247 284 285 +f 247 285 248 +f 248 285 286 +f 248 286 249 +f 249 286 250 +f 250 286 251 +f 251 286 287 +f 251 287 252 +f 252 287 288 +f 252 288 289 +f 252 289 253 +f 253 289 290 +f 253 290 291 +f 253 291 254 +f 254 291 255 +f 255 291 292 +f 255 292 256 +f 256 292 257 +f 257 292 258 +f 258 292 293 +f 258 293 259 +f 259 293 294 +f 259 294 295 +f 259 295 260 +f 260 295 296 +f 260 296 261 +f 261 296 297 +f 261 297 262 +f 262 298 263 +f 262 297 298 +f 263 299 264 +f 263 298 299 +f 264 299 273 +f 265 270 272 +f 265 272 266 +f 267 274 300 +f 267 300 301 +f 267 301 268 +f 268 302 269 +f 268 301 302 +f 269 302 303 +f 269 303 304 +f 269 304 305 +f 269 305 306 +f 269 306 270 +f 270 306 307 +f 270 307 308 +f 270 308 272 +f 271 272 308 +f 273 299 309 +f 273 309 274 +f 274 309 310 +f 274 310 300 +f 275 311 276 +f 276 311 312 +f 276 312 313 +f 276 313 277 +f 277 313 278 +f 278 314 279 +f 278 313 315 +f 278 315 314 +f 279 316 317 +f 279 317 280 +f 279 314 316 +f 280 317 281 +f 281 317 318 +f 281 318 282 +f 282 318 319 +f 282 319 283 +f 283 319 320 +f 283 320 284 +f 284 320 321 +f 284 321 285 +f 285 321 287 +f 285 287 286 +f 287 321 288 +f 288 322 323 +f 288 323 289 +f 288 321 322 +f 289 324 290 +f 289 323 324 +f 290 324 325 +f 290 325 326 +f 290 326 291 +f 291 326 292 +f 292 326 294 +f 292 294 293 +f 294 326 327 +f 294 327 295 +f 295 327 328 +f 295 328 329 +f 295 329 296 +f 296 329 330 +f 296 330 297 +f 297 330 331 +f 297 331 332 +f 297 332 298 +f 298 332 299 +f 299 332 309 +f 300 310 333 +f 300 333 301 +f 301 333 334 +f 301 334 302 +f 302 334 303 +f 303 334 335 +f 303 335 336 +f 303 336 304 +f 304 336 337 +f 304 337 338 +f 304 338 339 +f 304 339 340 +f 304 340 305 +f 305 340 341 +f 305 341 306 +f 306 341 342 +f 306 342 343 +f 306 343 344 +f 306 344 307 +f 309 332 345 +f 309 345 310 +f 310 345 346 +f 310 346 333 +f 311 347 312 +f 312 347 348 +f 312 348 349 +f 312 349 313 +f 313 349 315 +f 314 350 316 +f 314 315 351 +f 314 351 352 +f 314 352 353 +f 314 353 350 +f 315 349 351 +f 316 350 354 +f 316 354 355 +f 316 355 317 +f 317 355 356 +f 317 356 318 +f 318 356 357 +f 318 357 319 +f 319 357 358 +f 319 358 320 +f 320 358 322 +f 320 322 321 +f 322 358 323 +f 323 358 359 +f 323 359 360 +f 323 360 324 +f 324 360 361 +f 324 361 325 +f 325 362 328 +f 325 328 326 +f 325 361 363 +f 325 363 362 +f 326 328 327 +f 328 362 329 +f 329 362 363 +f 329 363 364 +f 329 364 365 +f 329 365 330 +f 330 365 366 +f 330 366 331 +f 331 366 345 +f 331 345 332 +f 333 346 367 +f 333 367 334 +f 334 367 335 +f 335 368 336 +f 335 367 369 +f 335 369 368 +f 336 368 370 +f 336 370 337 +f 337 370 371 +f 337 371 372 +f 337 372 373 +f 337 373 338 +f 338 373 374 +f 338 374 372 +f 338 372 375 +f 338 375 339 +f 339 375 340 +f 340 375 376 +f 340 376 342 +f 340 342 341 +f 345 366 346 +f 346 366 377 +f 346 377 367 +f 348 378 351 +f 348 351 349 +f 350 379 354 +f 350 353 380 +f 350 380 381 +f 350 381 382 +f 350 382 383 +f 350 383 379 +f 351 378 352 +f 352 378 384 +f 352 384 385 +f 352 385 353 +f 353 385 380 +f 354 386 387 +f 354 387 355 +f 354 379 386 +f 355 387 388 +f 355 388 356 +f 356 388 389 +f 356 389 357 +f 357 389 359 +f 357 359 358 +f 359 389 360 +f 360 389 390 +f 360 390 361 +f 361 390 391 +f 361 391 392 +f 361 392 393 +f 361 393 363 +f 363 393 364 +f 364 393 392 +f 364 392 394 +f 364 394 395 +f 364 395 365 +f 365 395 377 +f 365 377 366 +f 367 377 369 +f 368 369 396 +f 368 396 397 +f 368 397 370 +f 369 377 395 +f 369 395 396 +f 370 397 398 +f 370 398 371 +f 371 398 399 +f 371 399 400 +f 371 400 401 +f 371 401 372 +f 372 400 402 +f 372 374 373 +f 372 401 400 +f 379 403 386 +f 379 383 404 +f 379 404 405 +f 379 405 406 +f 379 406 403 +f 380 385 407 +f 380 407 408 +f 380 408 409 +f 380 409 381 +f 381 404 383 +f 381 383 382 +f 381 409 410 +f 381 410 404 +f 384 407 385 +f 386 411 412 +f 386 412 387 +f 386 403 411 +f 387 412 413 +f 387 413 388 +f 388 413 390 +f 388 390 389 +f 390 413 391 +f 391 413 414 +f 391 414 415 +f 391 415 416 +f 391 416 392 +f 392 416 394 +f 394 415 417 +f 394 417 396 +f 394 396 395 +f 394 416 415 +f 396 417 397 +f 397 417 418 +f 397 418 398 +f 398 419 399 +f 398 418 419 +f 399 419 420 +f 399 420 421 +f 399 421 422 +f 399 422 400 +f 400 422 402 +f 402 422 423 +f 403 424 411 +f 403 406 425 +f 403 425 426 +f 403 426 424 +f 404 410 427 +f 404 427 405 +f 405 427 428 +f 405 428 406 +f 406 428 425 +f 411 424 429 +f 411 429 430 +f 411 430 412 +f 412 430 414 +f 412 414 413 +f 414 430 431 +f 414 431 432 +f 414 432 415 +f 415 432 417 +f 417 432 431 +f 417 431 418 +f 418 433 419 +f 418 431 433 +f 419 434 435 +f 419 435 420 +f 419 433 434 +f 420 435 436 +f 420 436 437 +f 420 437 421 +f 421 437 436 +f 421 436 438 +f 421 438 439 +f 421 439 440 +f 421 440 422 +f 422 440 423 +f 424 441 429 +f 424 426 442 +f 424 442 443 +f 424 443 441 +f 425 428 426 +f 426 428 442 +f 427 444 428 +f 428 444 445 +f 428 445 446 +f 428 446 447 +f 428 447 442 +f 429 441 435 +f 429 435 434 +f 429 434 433 +f 429 433 430 +f 430 433 431 +f 435 438 436 +f 435 441 448 +f 435 448 449 +f 435 449 438 +f 438 449 448 +f 438 448 450 +f 438 450 439 +f 441 443 451 +f 441 451 452 +f 441 452 448 +f 442 447 453 +f 442 453 454 +f 442 454 443 +f 443 454 451 +f 444 455 445 +f 445 455 446 +f 448 452 450 +f 450 452 451 +f 450 451 456 +f 451 454 456 + +o geometry_1 +v 0.03820767 0.04242533 -0.10574771 0.54117647 0.42352941 0.64313725 +v 0.03804888 0.04242533 -0.10491582 0.54117647 0.42352941 0.64313725 +v 0.03819254 0.04242533 -0.10743923 0.54117647 0.42352941 0.64313725 +v 0.03658959 0.07073228 -0.06248916 0.54117647 0.42352941 0.64313725 +v 0.03655935 0.07193111 -0.05358788 0.54117647 0.42352941 0.64313725 +v 0.03655935 0.07199084 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03632496 0.07057442 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03629471 0.07041657 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03767839 0.04242533 -0.10402846 0.54117647 0.42352941 0.64313725 +v 0.03579568 0.06932013 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03801108 0.04242533 -0.10920470 0.54117647 0.42352941 0.64313725 +v 0.03705082 0.05882928 -0.08963667 0.54117647 0.42352941 0.64313725 +v 0.03673326 0.06487890 -0.08103118 0.54117647 0.42352941 0.64313725 +v 0.03666521 0.06794638 -0.07193579 0.54117647 0.42352941 0.64313725 +v 0.03652155 0.06940119 -0.07178790 0.54117647 0.42352941 0.64313725 +v 0.03639301 0.07218709 -0.06238748 0.54117647 0.42352941 0.64313725 +v 0.03655179 0.07204203 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03702814 0.04242533 -0.10303019 0.54117647 0.42352941 0.64313725 +v 0.03571251 0.06920921 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03407176 0.06728510 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03766327 0.04242533 -0.11104411 0.54117647 0.42352941 0.64313725 +v 0.03732302 0.05307403 -0.09709600 0.54117647 0.42352941 0.64313725 +v 0.03676350 0.06023290 -0.08939635 0.54117647 0.42352941 0.64313725 +v 0.03632496 0.06624412 -0.08082783 0.54117647 0.42352941 0.64313725 +v 0.03601496 0.07074081 -0.07163076 0.54117647 0.42352941 0.64313725 +v 0.03583349 0.07351817 -0.06228581 0.54117647 0.42352941 0.64313725 +v 0.03575788 0.07471274 -0.05348620 0.54117647 0.42352941 0.64313725 +v 0.03581837 0.07461461 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03651399 0.07221695 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03615106 0.04242533 -0.10217981 0.54117647 0.42352941 0.64313725 +v 0.03396591 0.06720404 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03386005 0.06712725 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.02979976 0.06454613 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03711887 0.04242533 -0.11324402 0.54117647 0.42352941 0.64313725 +v 0.03564447 0.06274148 -0.08889721 0.54117647 0.42352941 0.64313725 +v 0.03650642 0.05578314 -0.09655065 0.54117647 0.42352941 0.64313725 +v 0.03494128 0.06860339 -0.08038415 0.54117647 0.42352941 0.64313725 +v 0.03443469 0.07300195 -0.07127952 0.54117647 0.42352941 0.64313725 +v 0.03412469 0.07571959 -0.06204548 0.54117647 0.42352941 0.64313725 +v 0.03399615 0.07688429 -0.05337528 0.54117647 0.42352941 0.64313725 +v 0.03558397 0.07496445 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03577301 0.07468288 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03520592 0.04242533 -0.10155126 0.54117647 0.42352941 0.64313725 +v 0.02955025 0.06444374 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.02930073 0.06434562 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.02465067 0.06255377 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03643838 0.04242533 -0.11538846 0.54117647 0.42352941 0.64313725 +v 0.03413225 0.06496850 -0.08837959 0.54117647 0.42352941 0.64313725 +v 0.03548568 0.04972498 -0.10771653 0.54117647 0.42352941 0.64313725 +v 0.03417006 0.05113713 -0.10881648 0.54117647 0.42352941 0.64313725 +v 0.03375420 0.05646148 -0.10181008 0.54117647 0.42352941 0.64313725 +v 0.03378444 0.06068939 -0.09551540 0.54117647 0.42352941 0.64313725 +v 0.03237808 0.06703339 -0.08788970 0.54117647 0.42352941 0.64313725 +v 0.03317955 0.07060855 -0.07993123 0.54117647 0.42352941 0.64313725 +v 0.03248394 0.07484073 -0.07091903 0.54117647 0.42352941 0.64313725 +v 0.03206052 0.07745598 -0.06180516 0.54117647 0.42352941 0.64313725 +v 0.02959561 0.07994750 -0.05314420 0.54117647 0.42352941 0.64313725 +v 0.02970146 0.07990057 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03368615 0.07713174 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03398859 0.07689709 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03404152 0.07685443 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03409445 0.04242533 -0.10088575 0.54117647 0.42352941 0.64313725 +v 0.01438274 0.06027129 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.03573520 0.04242533 -0.11706149 0.54117647 0.42352941 0.64313725 +v 0.03463128 0.04443903 -0.11696905 0.54117647 0.42352941 0.64313725 +v 0.03190174 0.05891461 -0.10160672 0.54117647 0.42352941 0.64313725 +v 0.03200759 0.06299320 -0.09505324 0.54117647 0.42352941 0.64313725 +v 0.03325517 0.04988710 -0.11236590 0.54117647 0.42352941 0.64313725 +v 0.03153125 0.05569355 -0.10710648 0.54117647 0.42352941 0.64313725 +v 0.03041220 0.06897029 -0.08742753 0.54117647 0.42352941 0.64313725 +v 0.02961829 0.06158532 -0.10108910 0.54117647 0.42352941 0.64313725 +v 0.02954268 0.06661529 -0.09285334 0.54117647 0.42352941 0.64313725 +v 0.03120612 0.07239613 -0.07947831 0.54117647 0.42352941 0.64313725 +v 0.03073733 0.07458902 -0.07506002 0.54117647 0.42352941 0.64313725 +v 0.03034416 0.07641073 -0.07054930 0.54117647 0.42352941 0.64313725 +v 0.02982244 0.07888945 -0.06155559 0.54117647 0.42352941 0.64313725 +v 0.02485482 0.08192706 -0.05496513 0.54117647 0.42352941 0.64313725 +v 0.02483214 0.08199533 -0.05290387 0.54117647 0.42352941 0.64313725 +v 0.02933097 0.08007549 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.02961073 0.04242533 -0.09918498 0.54117647 0.42352941 0.64313725 +v 0.00719973 0.05953749 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.02505897 0.04242533 -0.09775228 0.54117647 0.42352941 0.64313725 +v 0.03500177 0.04242533 -0.11867906 0.54117647 0.42352941 0.64313725 +v 0.03280906 0.04406786 -0.12021345 0.54117647 0.42352941 0.64313725 +v 0.02994342 0.05547170 -0.10981476 0.54117647 0.42352941 0.64313725 +v 0.02895292 0.05133765 -0.11639597 0.54117647 0.42352941 0.64313725 +v 0.02852950 0.05978920 -0.10543344 0.54117647 0.42352941 0.64313725 +v 0.02765242 0.07274171 -0.08383189 0.54117647 0.42352941 0.64313725 +v 0.02769022 0.06728083 -0.09424907 0.54117647 0.42352941 0.64313725 +v 0.02907390 0.07401733 -0.07905312 0.54117647 0.42352941 0.64313725 +v 0.02626118 0.07730665 -0.07457013 0.54117647 0.42352941 0.64313725 +v 0.02580752 0.07880840 -0.06979135 0.54117647 0.42352941 0.64313725 +v 0.02529336 0.08048079 -0.06445798 0.54117647 0.42352941 0.64313725 +v 0.02513458 0.08100128 -0.06104721 0.54117647 0.42352941 0.64313725 +v 0.01998549 0.08331788 -0.05681378 0.54117647 0.42352941 0.64313725 +v 0.01995525 0.08347573 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.02469604 0.08205079 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.02482458 0.08200386 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.02491531 0.08196546 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.00335871 0.05935404 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.01550178 0.04242533 -0.09592211 0.54117647 0.42352941 0.64313725 +v 0.01671911 0.04242533 -0.09614394 0.54117647 0.42352941 0.64313725 +v 0.03361810 0.04242533 -0.12081426 0.54117647 0.42352941 0.64313725 +v 0.03349712 0.04242533 -0.12099912 0.54117647 0.42352941 0.64313725 +v 0.03284687 0.04357297 -0.12070334 0.54117647 0.42352941 0.64313725 +v 0.03016269 0.04314634 -0.12430822 0.54117647 0.42352941 0.64313725 +v 0.02982244 0.04694335 -0.12054621 0.54117647 0.42352941 0.64313725 +v 0.02764485 0.05616284 -0.11169114 0.54117647 0.42352941 0.64313725 +v 0.02645777 0.04910637 -0.12130415 0.54117647 0.42352941 0.64313725 +v 0.02626874 0.04997669 -0.12042604 0.54117647 0.42352941 0.64313725 +v 0.02446921 0.05826613 -0.11201466 0.54117647 0.42352941 0.64313725 +v 0.02600410 0.06121841 -0.10632080 0.54117647 0.42352941 0.64313725 +v 0.02592849 0.06714858 -0.09673551 0.54117647 0.42352941 0.64313725 +v 0.02753900 0.07325793 -0.08287059 0.54117647 0.42352941 0.64313725 +v 0.02591337 0.07248999 -0.08658639 0.54117647 0.42352941 0.64313725 +v 0.02442384 0.07685869 -0.07826744 0.54117647 0.42352941 0.64313725 +v 0.02623094 0.07740051 -0.07427434 0.54117647 0.42352941 0.64313725 +v 0.02187576 0.07821111 -0.07760192 0.54117647 0.42352941 0.64313725 +v 0.02059038 0.08171375 -0.06664864 0.54117647 0.42352941 0.64313725 +v 0.01519934 0.08388957 -0.06193456 0.54117647 0.42352941 0.64313725 +v 0.01486665 0.08469163 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.01628813 0.08435460 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.01992501 0.08348427 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.00220943 0.05931991 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.00770632 0.04242533 -0.09512718 0.54117647 0.42352941 0.64313725 +v 0.03293004 0.04242533 -0.12182178 0.54117647 0.42352941 0.64313725 +v 0.03078270 0.04242533 -0.12434519 0.54117647 0.42352941 0.64313725 +v 0.03010976 0.04242533 -0.12513088 0.54117647 0.42352941 0.64313725 +v 0.02614776 0.04242533 -0.12890213 0.54117647 0.42352941 0.64313725 +v 0.02186064 0.05642735 -0.11635900 0.54117647 0.42352941 0.64313725 +v 0.02151283 0.04242533 -0.13261793 0.54117647 0.42352941 0.64313725 +v 0.01814059 0.04242533 -0.13527075 0.54117647 0.42352941 0.64313725 +v 0.00872707 0.04242533 -0.14239732 0.54117647 0.42352941 0.64313725 +v 0.01945622 0.06523727 -0.10613593 0.54117647 0.42352941 0.64313725 +v 0.02287382 0.06312972 -0.10625609 0.54117647 0.42352941 0.64313725 +v 0.02177747 0.06645744 -0.10230921 0.54117647 0.42352941 0.64313725 +v 0.01953183 0.07259239 -0.09323231 0.54117647 0.42352941 0.64313725 +v 0.02367530 0.07330486 -0.08751996 0.54117647 0.42352941 0.64313725 +v 0.01756595 0.07778448 -0.08324032 0.54117647 0.42352941 0.64313725 +v 0.01672667 0.07998163 -0.07720446 0.54117647 0.42352941 0.64313725 +v 0.01613691 0.08151323 -0.07298953 0.54117647 0.42352941 0.64313725 +v 0.01575886 0.08247742 -0.06850653 0.54117647 0.42352941 0.64313725 +v 0.01001245 0.08488788 -0.06083461 0.54117647 0.42352941 0.64313725 +v 0.01074587 0.08281019 -0.07253660 0.54117647 0.42352941 0.64313725 +v 0.00984610 0.08534438 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.00038402 0.05929004 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.00112063 0.04242533 -0.09472972 0.54117647 0.42352941 0.64313725 +v 0.00366871 0.04242533 -0.09484064 0.54117647 0.42352941 0.64313725 +v 0.01746010 0.06016890 -0.11440867 0.54117647 0.42352941 0.64313725 +v 0.00391067 0.04242533 -0.14586355 0.54117647 0.42352941 0.64313725 +v 0.01550178 0.06783119 -0.10469398 0.54117647 0.42352941 0.64313725 +v 0.01454153 0.07099679 -0.09961018 0.54117647 0.42352941 0.64313725 +v 0.01351322 0.07435864 -0.09421210 0.54117647 0.42352941 0.64313725 +v 0.01947134 0.07274171 -0.09295501 0.54117647 0.42352941 0.64313725 +v 0.01795913 0.07674777 -0.08523687 0.54117647 0.42352941 0.64313725 +v 0.01193296 0.07926062 -0.08370249 0.54117647 0.42352941 0.64313725 +v 0.01118441 0.08148337 -0.07671457 0.54117647 0.42352941 0.64313725 +v 0.00476507 0.08569421 -0.05730368 0.54117647 0.42352941 0.64313725 +v 0.00509775 0.08417967 -0.06939389 0.54117647 0.42352941 0.64313725 +v 0.00230772 0.08481109 -0.06660242 0.54117647 0.42352941 0.64313725 +v 0.00574801 0.08100981 -0.08173367 0.54117647 0.42352941 0.64313725 +v 0.00261772 0.08205505 -0.07917328 0.54117647 0.42352941 0.64313725 +v 0.00965708 0.08536571 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.00646312 0.05950336 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.00675800 0.04242533 -0.09498854 0.54117647 0.42352941 0.64313725 +v -0.00251624 0.04242533 -0.09477594 0.54117647 0.42352941 0.64313725 +v -0.00031597 0.04242533 -0.09472972 0.54117647 0.42352941 0.64313725 +v -0.00086793 0.04242533 -0.14697275 0.54117647 0.42352941 0.64313725 +v 0.00856828 0.06505382 -0.11158022 0.54117647 0.42352941 0.64313725 +v 0.01191028 0.06828342 -0.10578469 0.54117647 0.42352941 0.64313725 +v 0.00746437 0.07193964 -0.10142186 0.54117647 0.42352941 0.64313725 +v 0.00722997 0.07320673 -0.09906482 0.54117647 0.42352941 0.64313725 +v 0.00660997 0.07656859 -0.09277939 0.54117647 0.42352941 0.64313725 +v 0.00655704 0.07685443 -0.09207690 0.54117647 0.42352941 0.64313725 +v -0.00038402 0.08515239 -0.06454117 0.54117647 0.42352941 0.64313725 +v -0.00038402 0.08561742 -0.05972542 0.54117647 0.42352941 0.64313725 +v -0.00038402 0.08585633 -0.05723897 0.54117647 0.42352941 0.64313725 +v 0.00217162 0.08596299 -0.05458615 0.54117647 0.42352941 0.64313725 +v 0.00473482 0.08582647 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.00037646 0.08393223 -0.07186185 0.54117647 0.42352941 0.64313725 +v 0.00595215 0.07995176 -0.08436800 0.54117647 0.42352941 0.64313725 +v 0.00305627 0.07796366 -0.09052403 0.54117647 0.42352941 0.64313725 +v -0.00034621 0.07966166 -0.08663261 0.54117647 0.42352941 0.64313725 +v -0.00035378 0.08044239 -0.08428481 0.54117647 0.42352941 0.64313725 +v -0.00036134 0.08213185 -0.07920101 0.54117647 0.42352941 0.64313725 +v -0.00036890 0.08283579 -0.07633559 0.54117647 0.42352941 0.64313725 +v -0.00808119 0.05960575 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.01749471 0.04242533 -0.09629184 0.54117647 0.42352941 0.64313725 +v -0.01334369 0.04242533 -0.09572800 0.54117647 0.42352941 0.64313725 +v -0.00815680 0.04242533 -0.09511794 0.54117647 0.42352941 0.64313725 +v 0.00421311 0.06534820 -0.11206087 0.54117647 0.42352941 0.64313725 +v -0.00581287 0.04242533 -0.14456025 0.54117647 0.42352941 0.64313725 +v -0.01645129 0.06323638 -0.11148779 0.54117647 0.42352941 0.64313725 +v -0.01542298 0.06741309 -0.10597880 0.54117647 0.42352941 0.64313725 +v -0.01051585 0.06889776 -0.10577544 0.54117647 0.42352941 0.64313725 +v -0.00543481 0.06979795 -0.10563679 0.54117647 0.42352941 0.64313725 +v -0.00027816 0.06977662 -0.10607123 0.54117647 0.42352941 0.64313725 +v 0.00791803 0.06912815 -0.10557209 0.54117647 0.42352941 0.64313725 +v 0.00363847 0.07211882 -0.10196721 0.54117647 0.42352941 0.64313725 +v -0.00030841 0.07380828 -0.09928666 0.54117647 0.42352941 0.64313725 +v -0.00033109 0.07688855 -0.09322307 0.54117647 0.42352941 0.64313725 +v -0.00687141 0.08540411 -0.05982709 0.54117647 0.42352941 0.64313725 +v -0.00715117 0.08430767 -0.06809059 0.54117647 0.42352941 0.64313725 +v -0.00675800 0.08583927 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.00039158 0.08600992 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.00185406 0.08600565 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.00247406 0.08598859 -0.05254339 0.54117647 0.42352941 0.64313725 +v 0.00443994 0.08584780 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.00399065 0.08278886 -0.07639105 0.54117647 0.42352941 0.64313725 +v -0.00033109 0.07741758 -0.09196598 0.54117647 0.42352941 0.64313725 +v -0.00429309 0.08027174 -0.08459909 0.54117647 0.42352941 0.64313725 +v -0.00465602 0.07713600 -0.09230798 0.54117647 0.42352941 0.64313725 +v -0.01316222 0.06003664 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.02544140 0.04242533 -0.09775228 0.54117647 0.42352941 0.64313725 +v 0.00382749 0.06993021 -0.10523009 0.54117647 0.42352941 0.64313725 +v -0.01099976 0.04242533 -0.14077051 0.54117647 0.42352941 0.64313725 +v -0.02711995 0.05341960 -0.11671025 0.54117647 0.42352941 0.64313725 +v -0.02241697 0.05659800 -0.11649765 0.54117647 0.42352941 0.64313725 +v -0.02138866 0.06091977 -0.11171887 0.54117647 0.42352941 0.64313725 +v -0.02008816 0.06538233 -0.10624685 0.54117647 0.42352941 0.64313725 +v -0.01863644 0.06983209 -0.10000764 0.54117647 0.42352941 0.64313725 +v -0.01428126 0.07155568 -0.09972109 0.54117647 0.42352941 0.64313725 +v -0.00972950 0.07281423 -0.09949925 0.54117647 0.42352941 0.64313725 +v -0.00504920 0.07357790 -0.09935136 0.54117647 0.42352941 0.64313725 +v -0.00030841 0.07357364 -0.09973958 0.54117647 0.42352941 0.64313725 +v -0.01332101 0.08459777 -0.06010439 0.54117647 0.42352941 0.64313725 +v -0.01310173 0.08514386 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.00759728 0.08243049 -0.07652970 0.54117647 0.42352941 0.64313725 +v -0.01383516 0.08326242 -0.06849729 0.54117647 0.42352941 0.64313725 +v -0.00820972 0.07978964 -0.08474698 0.54117647 0.42352941 0.64313725 +v -0.00894315 0.07651312 -0.09245588 0.54117647 0.42352941 0.64313725 +v -0.01788789 0.06077898 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03327466 0.04242533 -0.10037737 0.54117647 0.42352941 0.64313725 +v -0.02724849 0.04242533 -0.09823293 0.54117647 0.42352941 0.64313725 +v -0.02184989 0.04242533 -0.13275658 0.54117647 0.42352941 0.64313725 +v -0.02787606 0.04917037 -0.12087897 0.54117647 0.42352941 0.64313725 +v -0.03128610 0.04969939 -0.11692284 0.54117647 0.42352941 0.64313725 +v -0.02998560 0.05467390 -0.11223650 0.54117647 0.42352941 0.64313725 +v -0.02593286 0.05804428 -0.11196844 0.54117647 0.42352941 0.64313725 +v -0.02442065 0.06286521 -0.10655188 0.54117647 0.42352941 0.64313725 +v -0.02272697 0.06769040 -0.10035888 0.54117647 0.42352941 0.64313725 +v -0.02101061 0.07232361 -0.09338945 0.54117647 0.42352941 0.64313725 +v -0.01716959 0.07408133 -0.09301047 0.54117647 0.42352941 0.64313725 +v -0.01313198 0.07548921 -0.09269620 0.54117647 0.42352941 0.64313725 +v -0.01967986 0.08321549 -0.06053883 0.54117647 0.42352941 0.64313725 +v -0.01939254 0.08392796 -0.05264507 0.54117647 0.42352941 0.64313725 +v -0.01642860 0.08450391 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.01117366 0.08183747 -0.07674230 0.54117647 0.42352941 0.64313725 +v -0.01467444 0.08100981 -0.07702884 0.54117647 0.42352941 0.64313725 +v -0.01711666 0.08247742 -0.06878383 0.54117647 0.42352941 0.64313725 +v -0.01206587 0.07899184 -0.08497806 0.54117647 0.42352941 0.64313725 +v -0.01915059 0.06103496 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03384174 0.04242533 -0.10061769 0.54117647 0.42352941 0.64313725 +v -0.02779289 0.04242533 -0.12804250 0.54117647 0.42352941 0.64313725 +v -0.02811045 0.04545868 -0.12461325 0.54117647 0.42352941 0.64313725 +v -0.03209513 0.04519416 -0.12105459 0.54117647 0.42352941 0.64313725 +v -0.03479444 0.04550987 -0.11712619 0.54117647 0.42352941 0.64313725 +v -0.03345613 0.05087688 -0.11250455 0.54117647 0.42352941 0.64313725 +v -0.03174733 0.05657240 -0.10720815 0.54117647 0.42352941 0.64313725 +v -0.02832972 0.05990439 -0.10687539 0.54117647 0.42352941 0.64313725 +v -0.02648482 0.06517328 -0.10073786 0.54117647 0.42352941 0.64313725 +v -0.02460968 0.07025018 -0.09380539 0.54117647 0.42352941 0.64313725 +v -0.02610677 0.07297635 -0.08656791 0.54117647 0.42352941 0.64313725 +v -0.02287819 0.07486206 -0.08609650 0.54117647 0.42352941 0.64313725 +v -0.01943035 0.07650459 -0.08567131 0.54117647 0.42352941 0.64313725 +v -0.01581616 0.07789114 -0.08529233 0.54117647 0.42352941 0.64313725 +v -0.02591774 0.08101834 -0.06094553 0.54117647 0.42352941 0.64313725 +v -0.02564554 0.08185880 -0.05575081 0.54117647 0.42352941 0.64313725 +v -0.02034524 0.08151750 -0.06911659 0.54117647 0.42352941 0.64313725 +v -0.02612945 0.08033573 -0.06516047 0.54117647 0.42352941 0.64313725 +v -0.01944547 0.08391516 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.01939254 0.08392796 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.01809960 0.07996030 -0.07737084 0.54117647 0.42352941 0.64313725 +v -0.02082915 0.08024614 -0.07346093 0.54117647 0.42352941 0.64313725 +v -0.01989913 0.06118855 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03524054 0.04242533 -0.10141262 0.54117647 0.42352941 0.64313725 +v -0.02520700 0.06248551 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.02781557 0.04242533 -0.12802402 0.54117647 0.42352941 0.64313725 +v -0.02975877 0.04242533 -0.12616613 0.54117647 0.42352941 0.64313725 +v -0.03123318 0.04242533 -0.12475190 0.54117647 0.42352941 0.64313725 +v -0.03227660 0.04242533 -0.12374438 0.54117647 0.42352941 0.64313725 +v -0.03428784 0.04242533 -0.12116550 0.54117647 0.42352941 0.64313725 +v -0.03533883 0.04242533 -0.11976977 0.54117647 0.42352941 0.64313725 +v -0.03608738 0.04242533 -0.11829085 0.54117647 0.42352941 0.64313725 +v -0.03618567 0.04671724 -0.11275412 0.54117647 0.42352941 0.64313725 +v -0.03570932 0.04889732 -0.11101638 0.54117647 0.42352941 0.64313725 +v -0.03459785 0.05686251 -0.10167143 0.54117647 0.42352941 0.64313725 +v -0.03280587 0.05899567 -0.10181008 0.54117647 0.42352941 0.64313725 +v -0.02984194 0.06233618 -0.10114456 0.54117647 0.42352941 0.64313725 +v -0.02790630 0.06789945 -0.09425831 0.54117647 0.42352941 0.64313725 +v -0.02856411 0.07257105 -0.08430330 0.54117647 0.42352941 0.64313725 +v -0.02460212 0.07722986 -0.07821198 0.54117647 0.42352941 0.64313725 +v -0.02141891 0.07869747 -0.07777755 0.54117647 0.42352941 0.64313725 +v -0.03040901 0.07975978 -0.05547351 0.54117647 0.42352941 0.64313725 +v -0.02561530 0.08196546 -0.05285766 0.54117647 0.42352941 0.64313725 +v -0.02549432 0.08201666 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03019730 0.07996030 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.02572115 0.08193133 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.02702166 0.07749437 -0.07412645 0.54117647 0.42352941 0.64313725 +v -0.03074926 0.07822391 -0.06459663 0.54117647 0.42352941 0.64313725 +v -0.03063585 0.07875720 -0.06142618 0.54117647 0.42352941 0.64313725 +v -0.02706703 0.07733226 -0.07462559 0.54117647 0.42352941 0.64313725 +v -0.03641250 0.04242533 -0.10215208 0.54117647 0.42352941 0.64313725 +v -0.02606896 0.06280121 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03666202 0.04242533 -0.11709846 0.54117647 0.42352941 0.64313725 +v -0.03790203 0.04361137 -0.11275412 0.54117647 0.42352941 0.64313725 +v -0.03710812 0.04242533 -0.11616489 0.54117647 0.42352941 0.64313725 +v -0.03633689 0.05018574 -0.10760561 0.54117647 0.42352941 0.64313725 +v -0.03647299 0.05794189 -0.09594059 0.54117647 0.42352941 0.64313725 +v -0.03570176 0.05631216 -0.10008158 0.54117647 0.42352941 0.64313725 +v -0.03536907 0.06461866 -0.08830564 0.54117647 0.42352941 0.64313725 +v -0.03394759 0.06401284 -0.09189203 0.54117647 0.42352941 0.64313725 +v -0.03284368 0.06331744 -0.09489610 0.54117647 0.42352941 0.64313725 +v -0.03049219 0.06642757 -0.09332474 0.54117647 0.42352941 0.64313725 +v -0.03122561 0.06920494 -0.08725191 0.54117647 0.42352941 0.64313725 +v -0.03251099 0.07033124 -0.08313865 0.54117647 0.42352941 0.64313725 +v -0.03142220 0.07519057 -0.07375672 0.54117647 0.42352941 0.64313725 +v -0.02764923 0.07548067 -0.07839685 0.54117647 0.42352941 0.64313725 +v -0.03338808 0.07705921 -0.06176818 0.54117647 0.42352941 0.64313725 +v -0.03321417 0.07817271 -0.05324588 0.54117647 0.42352941 0.64313725 +v -0.03038633 0.07987070 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03031828 0.07990483 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03117268 0.07631687 -0.07035519 0.54117647 0.42352941 0.64313725 +v -0.03379638 0.07446529 -0.07086357 0.54117647 0.42352941 0.64313725 +v -0.03726690 0.04242533 -0.10301170 0.54117647 0.42352941 0.64313725 +v -0.03113488 0.06482771 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03815155 0.04242533 -0.11363223 0.54117647 0.42352941 0.64313725 +v -0.03703251 0.06167064 -0.08893419 0.54117647 0.42352941 0.64313725 +v -0.03718373 0.05634203 -0.09626411 0.54117647 0.42352941 0.64313725 +v -0.03648055 0.06755388 -0.08042112 0.54117647 0.42352941 0.64313725 +v -0.03446175 0.07025018 -0.07986653 0.54117647 0.42352941 0.64313725 +v -0.03258660 0.07001980 -0.08357308 0.54117647 0.42352941 0.64313725 +v -0.03584542 0.07467434 -0.06207321 0.54117647 0.42352941 0.64313725 +v -0.03574713 0.07583905 -0.05339377 0.54117647 0.42352941 0.64313725 +v -0.03331246 0.07811299 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03292685 0.07836470 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03608738 0.07195671 -0.07130725 0.54117647 0.42352941 0.64313725 +v -0.03747861 0.04242533 -0.10323354 0.54117647 0.42352941 0.64313725 +v -0.03136927 0.06495570 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03861277 0.04242533 -0.11124747 0.54117647 0.42352941 0.64313725 +v -0.03753154 0.06000678 -0.08924846 0.54117647 0.42352941 0.64313725 +v -0.03717617 0.06597108 -0.08068918 0.54117647 0.42352941 0.64313725 +v -0.03693422 0.07042510 -0.07151984 0.54117647 0.42352941 0.64313725 +v -0.03678300 0.07316834 -0.06221186 0.54117647 0.42352941 0.64313725 +v -0.03672251 0.07434584 -0.05345847 0.54117647 0.42352941 0.64313725 +v -0.03665446 0.07448663 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03579249 0.07579638 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03556567 0.07603956 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03824228 0.04242533 -0.10441668 0.54117647 0.42352941 0.64313725 +v -0.03166415 0.06512208 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03406101 0.06663235 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03898326 0.04242533 -0.10886270 0.54117647 0.42352941 0.64313725 +v -0.03747105 0.06420056 -0.08093875 0.54117647 0.42352941 0.64313725 +v -0.03736520 0.06866739 -0.07171395 0.54117647 0.42352941 0.64313725 +v -0.03730471 0.07141915 -0.06234127 0.54117647 0.42352941 0.64313725 +v -0.03728203 0.07259665 -0.05351393 0.54117647 0.42352941 0.64313725 +v -0.03728203 0.07263078 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03676787 0.07421358 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03670738 0.07436290 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03830277 0.04242533 -0.10452760 0.54117647 0.42352941 0.64313725 +v -0.03437858 0.06693526 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03903619 0.04242533 -0.10743923 0.54117647 0.42352941 0.64313725 +v -0.03727447 0.07248146 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03871107 0.04242533 -0.10547042 0.54117647 0.42352941 0.64313725 +v -0.03643519 0.06911108 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03894546 0.04242533 -0.10655188 0.54117647 0.42352941 0.64313725 +v -0.03717617 0.07077067 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03718373 0.07089866 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03885473 0.04242533 -0.10595107 0.54117647 0.42352941 0.64313725 +v -0.03646543 0.06916654 -0.05254339 0.54117647 0.42352941 0.64313725 +v -0.03651080 0.06926467 -0.05254339 0.54117647 0.42352941 0.64313725 +f 457 458 465 +f 457 465 474 +f 457 474 486 +f 457 486 499 +f 457 499 518 +f 457 518 536 +f 457 536 538 +f 457 538 558 +f 457 558 557 +f 457 557 581 +f 457 581 604 +f 457 604 603 +f 457 603 623 +f 457 623 622 +f 457 622 621 +f 457 621 646 +f 457 646 645 +f 457 645 644 +f 457 644 670 +f 457 670 690 +f 457 690 689 +f 457 689 709 +f 457 709 732 +f 457 732 759 +f 457 759 781 +f 457 781 794 +f 457 794 805 +f 457 805 816 +f 457 816 820 +f 457 820 825 +f 457 825 822 +f 457 822 818 +f 457 818 808 +f 457 808 796 +f 457 796 783 +f 457 783 763 +f 457 763 761 +f 457 761 740 +f 457 740 739 +f 457 739 738 +f 457 738 737 +f 457 737 736 +f 457 736 735 +f 457 735 734 +f 457 734 710 +f 457 710 691 +f 457 691 672 +f 457 672 648 +f 457 648 624 +f 457 624 606 +f 457 606 589 +f 457 589 588 +f 457 588 587 +f 457 587 585 +f 457 585 584 +f 457 584 583 +f 457 583 582 +f 457 582 560 +f 457 560 559 +f 457 559 539 +f 457 539 520 +f 457 520 503 +f 457 503 490 +f 457 490 477 +f 457 477 467 +f 457 467 459 +f 457 459 460 +f 457 460 461 +f 457 461 462 +f 457 462 463 +f 457 463 464 +f 457 464 458 +f 458 464 466 +f 458 466 465 +f 459 467 468 +f 459 468 469 +f 459 469 470 +f 459 470 460 +f 460 470 471 +f 460 471 472 +f 460 472 461 +f 461 472 473 +f 461 473 462 +f 462 473 485 +f 462 485 484 +f 462 484 498 +f 462 498 497 +f 462 497 517 +f 462 517 516 +f 462 516 515 +f 462 515 514 +f 462 514 535 +f 462 535 555 +f 462 555 554 +f 462 554 553 +f 462 553 552 +f 462 552 579 +f 462 579 578 +f 462 578 577 +f 462 577 601 +f 462 601 619 +f 462 619 635 +f 462 635 664 +f 462 664 663 +f 462 663 662 +f 462 662 661 +f 462 661 660 +f 462 660 683 +f 462 683 703 +f 462 703 728 +f 462 728 727 +f 462 727 752 +f 462 752 754 +f 462 754 753 +f 462 753 778 +f 462 778 777 +f 462 777 792 +f 462 792 791 +f 462 791 804 +f 462 804 803 +f 462 803 802 +f 462 802 815 +f 462 815 814 +f 462 814 813 +f 462 813 819 +f 462 819 824 +f 462 824 823 +f 462 823 827 +f 462 827 826 +f 462 826 821 +f 462 821 817 +f 462 817 807 +f 462 807 806 +f 462 806 795 +f 462 795 782 +f 462 782 760 +f 462 760 733 +f 462 733 731 +f 462 731 708 +f 462 708 688 +f 462 688 669 +f 462 669 643 +f 462 643 620 +f 462 620 602 +f 462 602 580 +f 462 580 556 +f 462 556 537 +f 462 537 519 +f 462 519 502 +f 462 502 501 +f 462 501 500 +f 462 500 489 +f 462 489 488 +f 462 488 487 +f 462 487 476 +f 462 476 475 +f 462 475 466 +f 462 466 464 +f 462 464 463 +f 465 466 475 +f 465 475 476 +f 465 476 474 +f 467 477 478 +f 467 478 468 +f 468 479 469 +f 468 478 479 +f 469 479 480 +f 469 480 471 +f 469 471 470 +f 471 480 481 +f 471 481 472 +f 472 482 483 +f 472 483 484 +f 472 484 485 +f 472 485 473 +f 472 481 482 +f 474 476 487 +f 474 487 488 +f 474 488 489 +f 474 489 486 +f 477 490 479 +f 477 479 478 +f 479 491 480 +f 479 490 492 +f 479 492 491 +f 480 491 493 +f 480 493 481 +f 481 493 494 +f 481 494 482 +f 482 495 483 +f 482 494 495 +f 483 495 496 +f 483 496 497 +f 483 497 498 +f 483 498 484 +f 486 489 500 +f 486 500 501 +f 486 501 502 +f 486 502 499 +f 490 503 492 +f 491 504 493 +f 491 492 505 +f 491 505 506 +f 491 506 507 +f 491 507 508 +f 491 508 504 +f 492 503 505 +f 493 504 509 +f 493 509 510 +f 493 510 494 +f 494 510 511 +f 494 511 495 +f 495 512 496 +f 495 511 512 +f 496 512 513 +f 496 513 514 +f 496 514 515 +f 496 515 516 +f 496 516 517 +f 496 517 497 +f 499 502 518 +f 502 519 518 +f 503 520 521 +f 503 521 505 +f 504 508 522 +f 504 522 523 +f 504 523 509 +f 505 521 506 +f 506 521 524 +f 506 524 507 +f 507 524 525 +f 507 525 508 +f 508 525 522 +f 509 526 510 +f 509 523 527 +f 509 527 528 +f 509 528 526 +f 510 526 529 +f 510 529 530 +f 510 530 511 +f 511 530 531 +f 511 531 512 +f 512 532 513 +f 512 531 532 +f 513 532 533 +f 513 533 534 +f 513 534 535 +f 513 535 514 +f 518 519 536 +f 519 537 538 +f 519 538 536 +f 520 539 521 +f 521 539 540 +f 521 540 524 +f 522 525 527 +f 522 527 523 +f 524 541 525 +f 524 540 542 +f 524 542 541 +f 525 543 527 +f 525 541 543 +f 526 544 529 +f 526 528 545 +f 526 545 544 +f 527 543 545 +f 527 545 528 +f 529 544 546 +f 529 546 530 +f 530 547 531 +f 530 546 547 +f 531 547 548 +f 531 548 549 +f 531 549 532 +f 532 549 550 +f 532 550 533 +f 533 550 551 +f 533 551 552 +f 533 552 553 +f 533 553 534 +f 534 553 554 +f 534 554 555 +f 534 555 535 +f 537 556 557 +f 537 557 558 +f 537 558 538 +f 539 559 540 +f 540 559 560 +f 540 560 561 +f 540 561 562 +f 540 562 563 +f 540 563 542 +f 541 542 564 +f 541 564 543 +f 542 563 565 +f 542 565 566 +f 542 566 567 +f 542 567 564 +f 543 568 569 +f 543 569 545 +f 543 564 568 +f 544 570 546 +f 544 545 571 +f 544 571 570 +f 545 569 571 +f 546 570 572 +f 546 572 547 +f 547 573 548 +f 547 572 574 +f 547 574 573 +f 548 573 574 +f 548 574 549 +f 549 551 550 +f 549 574 575 +f 549 575 551 +f 551 576 577 +f 551 577 578 +f 551 578 579 +f 551 579 552 +f 551 575 576 +f 556 580 581 +f 556 581 557 +f 560 582 561 +f 561 582 583 +f 561 583 562 +f 562 583 584 +f 562 584 585 +f 562 585 563 +f 563 585 565 +f 564 567 568 +f 565 586 566 +f 565 585 587 +f 565 587 588 +f 565 588 589 +f 565 589 586 +f 566 586 567 +f 567 586 590 +f 567 590 591 +f 567 591 568 +f 568 591 592 +f 568 592 569 +f 569 592 593 +f 569 593 594 +f 569 594 571 +f 570 571 594 +f 570 594 572 +f 572 594 595 +f 572 595 574 +f 574 596 597 +f 574 597 575 +f 574 595 596 +f 575 597 598 +f 575 598 576 +f 576 599 577 +f 576 598 600 +f 576 600 599 +f 577 599 601 +f 580 602 603 +f 580 603 604 +f 580 604 581 +f 586 605 590 +f 586 589 606 +f 586 606 605 +f 590 607 592 +f 590 592 591 +f 590 605 607 +f 592 607 593 +f 593 607 608 +f 593 608 609 +f 593 609 610 +f 593 610 594 +f 594 611 595 +f 594 610 611 +f 595 612 596 +f 595 611 609 +f 595 609 612 +f 596 612 597 +f 597 612 613 +f 597 613 600 +f 597 600 598 +f 599 614 601 +f 599 600 615 +f 599 615 616 +f 599 616 614 +f 600 613 617 +f 600 617 618 +f 600 618 615 +f 601 614 619 +f 602 620 621 +f 602 621 622 +f 602 622 623 +f 602 623 603 +f 605 606 607 +f 606 624 625 +f 606 625 626 +f 606 626 607 +f 607 626 608 +f 608 626 609 +f 609 626 627 +f 609 627 628 +f 609 628 629 +f 609 629 612 +f 609 611 610 +f 612 617 613 +f 612 629 630 +f 612 630 617 +f 614 631 632 +f 614 632 633 +f 614 633 634 +f 614 634 635 +f 614 635 619 +f 614 616 631 +f 615 618 636 +f 615 636 616 +f 616 636 631 +f 617 630 637 +f 617 637 638 +f 617 638 639 +f 617 639 618 +f 618 639 640 +f 618 640 641 +f 618 641 642 +f 618 642 636 +f 620 643 644 +f 620 644 645 +f 620 645 646 +f 620 646 621 +f 624 647 625 +f 624 648 649 +f 624 649 650 +f 624 650 651 +f 624 651 652 +f 624 652 653 +f 624 653 647 +f 625 647 654 +f 625 654 626 +f 626 654 627 +f 627 654 655 +f 627 655 628 +f 628 655 629 +f 629 655 656 +f 629 656 657 +f 629 657 638 +f 629 638 630 +f 630 638 637 +f 631 658 632 +f 631 636 659 +f 631 659 658 +f 632 658 633 +f 633 658 660 +f 633 660 661 +f 633 661 634 +f 634 661 662 +f 634 662 663 +f 634 663 664 +f 634 664 635 +f 636 642 665 +f 636 665 659 +f 638 657 666 +f 638 666 639 +f 639 667 640 +f 639 666 657 +f 639 657 668 +f 639 668 667 +f 640 667 641 +f 641 667 665 +f 641 665 642 +f 643 669 670 +f 643 670 644 +f 647 653 671 +f 647 671 654 +f 648 672 673 +f 648 673 674 +f 648 674 675 +f 648 675 649 +f 649 675 676 +f 649 676 650 +f 650 676 677 +f 650 677 678 +f 650 678 651 +f 651 678 679 +f 651 679 652 +f 652 679 680 +f 652 680 681 +f 652 681 653 +f 653 681 655 +f 653 655 671 +f 654 671 655 +f 655 681 656 +f 656 681 680 +f 656 680 657 +f 657 680 668 +f 658 659 682 +f 658 682 683 +f 658 683 660 +f 659 665 684 +f 659 684 685 +f 659 685 682 +f 665 667 684 +f 667 668 686 +f 667 686 684 +f 668 680 687 +f 668 687 686 +f 669 688 689 +f 669 689 690 +f 669 690 670 +f 672 691 692 +f 672 692 673 +f 673 692 693 +f 673 693 694 +f 673 694 695 +f 673 695 674 +f 674 695 675 +f 675 695 696 +f 675 696 676 +f 676 696 697 +f 676 697 677 +f 677 697 698 +f 677 698 699 +f 677 699 678 +f 678 699 700 +f 678 700 679 +f 679 700 687 +f 679 687 680 +f 682 701 702 +f 682 702 683 +f 682 685 701 +f 683 702 703 +f 684 704 685 +f 684 686 704 +f 685 704 705 +f 685 705 706 +f 685 706 701 +f 686 707 704 +f 686 687 707 +f 687 700 707 +f 688 708 709 +f 688 709 689 +f 691 710 711 +f 691 711 692 +f 692 712 693 +f 692 711 712 +f 693 712 713 +f 693 713 714 +f 693 714 694 +f 694 714 715 +f 694 715 716 +f 694 716 695 +f 695 716 696 +f 696 716 717 +f 696 717 697 +f 697 717 718 +f 697 718 698 +f 698 718 719 +f 698 719 720 +f 698 720 721 +f 698 721 699 +f 699 721 722 +f 699 722 700 +f 700 722 707 +f 701 723 724 +f 701 724 702 +f 701 706 725 +f 701 725 726 +f 701 726 723 +f 702 724 727 +f 702 727 728 +f 702 728 703 +f 704 707 705 +f 705 729 730 +f 705 730 725 +f 705 725 706 +f 705 707 722 +f 705 722 729 +f 708 731 709 +f 709 731 733 +f 709 733 732 +f 710 734 711 +f 711 734 735 +f 711 735 736 +f 711 736 712 +f 712 737 738 +f 712 738 713 +f 712 736 737 +f 713 738 739 +f 713 739 740 +f 713 740 741 +f 713 741 742 +f 713 742 714 +f 714 742 743 +f 714 743 744 +f 714 744 715 +f 715 744 745 +f 715 745 716 +f 716 745 717 +f 717 745 746 +f 717 746 718 +f 718 746 747 +f 718 747 719 +f 719 747 748 +f 719 748 720 +f 720 748 721 +f 721 748 749 +f 721 749 722 +f 722 749 729 +f 723 750 724 +f 723 726 750 +f 724 751 752 +f 724 752 727 +f 724 750 753 +f 724 753 754 +f 724 754 751 +f 725 730 726 +f 726 730 755 +f 726 755 756 +f 726 756 757 +f 726 757 750 +f 729 749 730 +f 730 749 758 +f 730 758 755 +f 732 733 759 +f 733 760 759 +f 740 761 741 +f 741 762 742 +f 741 761 763 +f 741 763 762 +f 742 762 764 +f 742 764 765 +f 742 765 766 +f 742 766 743 +f 743 766 765 +f 743 765 767 +f 743 767 744 +f 744 767 768 +f 744 768 769 +f 744 769 745 +f 745 769 770 +f 745 770 746 +f 746 770 771 +f 746 771 747 +f 747 771 772 +f 747 772 773 +f 747 773 774 +f 747 774 748 +f 748 774 758 +f 748 758 749 +f 750 757 775 +f 750 775 776 +f 750 776 777 +f 750 777 778 +f 750 778 753 +f 751 754 752 +f 755 758 756 +f 756 775 757 +f 756 758 779 +f 756 779 780 +f 756 780 775 +f 758 773 779 +f 758 774 773 +f 759 760 782 +f 759 782 781 +f 762 763 783 +f 762 783 784 +f 762 784 785 +f 762 785 764 +f 764 785 765 +f 765 785 784 +f 765 784 767 +f 767 784 786 +f 767 786 787 +f 767 787 768 +f 768 770 769 +f 768 787 788 +f 768 788 771 +f 768 771 770 +f 771 788 772 +f 772 788 787 +f 772 787 773 +f 773 780 779 +f 773 787 780 +f 775 789 790 +f 775 790 776 +f 775 780 789 +f 776 790 791 +f 776 791 792 +f 776 792 777 +f 780 787 793 +f 780 793 789 +f 781 782 794 +f 782 795 794 +f 783 796 797 +f 783 797 784 +f 784 797 798 +f 784 798 786 +f 786 798 799 +f 786 799 793 +f 786 793 787 +f 789 800 801 +f 789 801 790 +f 789 793 800 +f 790 801 802 +f 790 802 803 +f 790 803 804 +f 790 804 791 +f 793 799 800 +f 794 795 806 +f 794 806 807 +f 794 807 805 +f 796 808 797 +f 797 809 798 +f 797 808 809 +f 798 809 810 +f 798 810 799 +f 799 810 811 +f 799 811 800 +f 800 811 812 +f 800 812 801 +f 801 812 813 +f 801 813 814 +f 801 814 815 +f 801 815 802 +f 805 807 817 +f 805 817 816 +f 808 818 810 +f 808 810 809 +f 810 818 811 +f 811 818 812 +f 812 818 813 +f 813 818 819 +f 816 817 821 +f 816 821 820 +f 818 822 823 +f 818 823 824 +f 818 824 819 +f 820 821 826 +f 820 826 825 +f 822 825 823 +f 823 825 827 +f 825 826 827 + +o geometry_2 +v -0.04240547 -0.00290046 -0.14987752 0.43529412 0.89019608 0.96078431 +v -0.04226427 0.00042682 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.04204832 -0.00428960 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.04147522 -0.00931378 -0.15063602 0.43529412 0.89019608 0.96078431 +v -0.04232241 -0.00272578 -0.14312763 0.43529412 0.89019608 0.96078431 +v -0.04221443 0.00759709 -0.13383408 0.43529412 0.89019608 0.96078431 +v -0.04233072 0.00354613 -0.14910369 0.43529412 0.89019608 0.96078431 +v -0.04002170 -0.01358101 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.04130910 -0.00893114 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.04204832 0.01800314 -0.12571275 0.43529412 0.89019608 0.96078431 +v -0.04194034 0.00523473 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.04110146 0.00985964 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.03955658 -0.01551915 -0.15137154 0.43529412 0.89019608 0.96078431 +v -0.04077753 -0.01154305 -0.14443010 0.43529412 0.89019608 0.96078431 +v -0.04106823 -0.00989605 -0.14419259 0.43529412 0.89019608 0.96078431 +v -0.04227258 -0.00303355 -0.14317360 0.43529412 0.89019608 0.96078431 +v -0.04177422 -0.00341619 -0.13922020 0.43529412 0.89019608 0.96078431 +v -0.04213138 0.00933559 -0.12998028 0.43529412 0.89019608 0.96078431 +v -0.03601831 -0.02210715 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.03825257 -0.01797301 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.03902501 -0.01605983 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.04186559 0.01263791 -0.12621076 0.43529412 0.89019608 0.96078431 +v -0.04166625 0.02268628 -0.12192025 0.43529412 0.89019608 0.96078431 +v -0.04137555 0.02425842 -0.12458650 0.43529412 0.89019608 0.96078431 +v -0.04097687 0.02801824 -0.12167508 0.43529412 0.89019608 0.96078431 +v -0.04059480 0.03162001 -0.11888624 0.43529412 0.89019608 0.96078431 +v -0.03973930 0.01439305 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.03898348 0.04242533 -0.10887250 0.43529412 0.89019608 0.96078431 +v -0.04004662 -0.01340633 -0.14470593 0.43529412 0.89019608 0.96078431 +v -0.03752166 -0.01983628 -0.14565597 0.43529412 0.89019608 0.96078431 +v -0.04081075 -0.00859010 -0.13993273 0.43529412 0.89019608 0.96078431 +v -0.03933232 -0.01361428 -0.14060695 0.43529412 0.89019608 0.96078431 +v -0.04097687 -0.00291709 -0.13521317 0.43529412 0.89019608 0.96078431 +v -0.04135063 0.00403691 -0.13062385 0.43529412 0.89019608 0.96078431 +v -0.04184898 0.00225682 -0.13450064 0.43529412 0.89019608 0.96078431 +v -0.02483870 -0.03419347 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.03017102 -0.02959351 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.03260462 -0.02682356 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.03326909 -0.02605829 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.03297838 -0.02671542 -0.15269700 0.43529412 0.89019608 0.96078431 +v -0.03669938 -0.02136683 -0.15206108 0.43529412 0.89019608 0.96078431 +v -0.04141708 0.01751237 -0.12241825 0.43529412 0.89019608 0.96078431 +v -0.04077753 0.00745568 -0.12683901 0.43529412 0.89019608 0.96078431 +v -0.04081906 0.02375933 -0.11844187 0.43529412 0.89019608 0.96078431 +v -0.03885058 0.04242533 -0.10596108 0.43529412 0.89019608 0.96078431 +v -0.04097687 0.02864210 -0.11792088 0.43529412 0.89019608 0.96078431 +v -0.04003001 0.03554619 -0.11350778 0.43529412 0.89019608 0.96078431 +v -0.03903331 0.04242533 -0.10744744 0.43529412 0.89019608 0.96078431 +v -0.03890873 0.01650587 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.03860972 0.04242533 -0.11125526 0.43529412 0.89019608 0.96078431 +v -0.03276243 -0.02707310 -0.14672859 0.43529412 0.89019608 0.96078431 +v -0.03478905 -0.02300551 -0.14181749 0.43529412 0.89019608 0.96078431 +v -0.03733062 -0.01843883 -0.14123520 0.43529412 0.89019608 0.96078431 +v -0.03970608 -0.00791632 -0.13589505 0.43529412 0.89019608 0.96078431 +v -0.03806153 -0.01272423 -0.13650032 0.43529412 0.89019608 0.96078431 +v -0.04006323 -0.00099559 -0.13132872 0.43529412 0.89019608 0.96078431 +v -0.01906617 -0.03763720 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.02088514 -0.03673884 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.02399981 -0.03473416 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.02156621 -0.03667229 -0.14814599 0.43529412 0.89019608 0.96078431 +v -0.02452308 -0.03450124 -0.14782420 0.43529412 0.89019608 0.96078431 +v -0.02844342 -0.03160651 -0.14740281 0.43529412 0.89019608 0.96078431 +v -0.02850986 -0.03119893 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.04018782 0.01251314 -0.12305417 0.43529412 0.89019608 0.96078431 +v -0.03824426 0.04242533 -0.10442876 0.43529412 0.89019608 0.96078431 +v -0.03830240 0.04242533 -0.10454368 0.43529412 0.89019608 0.96078431 +v -0.03870939 0.04242533 -0.10547840 0.43529412 0.89019608 0.96078431 +v -0.03846852 -0.00575359 -0.13199529 0.43529412 0.89019608 0.96078431 +v -0.03914959 0.00260618 -0.12755921 0.43529412 0.89019608 0.96078431 +v -0.03894195 0.04242533 -0.10655869 0.43529412 0.89019608 0.96078431 +v -0.03814459 0.04242533 -0.11363803 0.43529412 0.89019608 0.96078431 +v -0.03782897 0.01870187 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.03683228 0.02072319 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.03523756 0.02322696 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.02814441 -0.03105752 -0.14282882 0.43529412 0.89019608 0.96078431 +v -0.03171590 -0.02723115 -0.14235381 0.43529412 0.89019608 0.96078431 +v -0.03056970 -0.02577547 -0.13797136 0.43529412 0.89019608 0.96078431 +v -0.03351826 -0.02169956 -0.13753464 0.43529412 0.89019608 0.96078431 +v -0.03600169 -0.01733251 -0.13705196 0.43529412 0.89019608 0.96078431 +v -0.03662463 -0.01027869 -0.13258523 0.43529412 0.89019608 0.96078431 +v -0.01657443 -0.03887661 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.01379198 -0.03988311 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.01908278 -0.03770374 -0.16726941 0.43529412 0.89019608 0.96078431 +v -0.02409948 -0.03440142 -0.14324255 0.43529412 0.89019608 0.96078431 +v -0.02003795 -0.03738765 -0.14825325 0.43529412 0.89019608 0.96078431 +v -0.01966419 -0.03720466 -0.14359499 0.43529412 0.89019608 0.96078431 +v -0.03748013 0.04242533 -0.10324121 0.43529412 0.89019608 0.96078431 +v -0.03725587 -0.00186900 -0.12824109 0.43529412 0.89019608 0.96078431 +v -0.03641698 0.04242533 -0.10216091 0.43529412 0.89019608 0.96078431 +v -0.03710637 0.04242533 -0.11617403 0.43529412 0.89019608 0.96078431 +v -0.02418254 0.03465615 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.02446494 0.03443988 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.02790354 0.03173647 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.02850986 0.03114587 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.03125908 0.02844246 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.03429070 0.02469928 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.02330213 -0.03277938 -0.13869921 0.43529412 0.89019608 0.96078431 +v -0.02716432 -0.02949369 -0.13836210 0.43529412 0.89019608 0.96078431 +v -0.02923247 -0.02255633 -0.13386472 0.43529412 0.89019608 0.96078431 +v -0.02600982 -0.02611651 -0.13419418 0.43529412 0.89019608 0.96078431 +v -0.03204813 -0.01869669 -0.13350463 0.43529412 0.89019608 0.96078431 +v -0.03449834 -0.01458751 -0.13307557 0.43529412 0.89019608 0.96078431 +v -0.01412422 -0.04013265 -0.14865932 0.43529412 0.89019608 0.96078431 +v -0.00826863 -0.04140534 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.01212252 -0.04048202 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.01904956 -0.03555765 -0.13898269 0.43529412 0.89019608 0.96078431 +v -0.01488835 -0.03941729 -0.14387080 0.43529412 0.89019608 0.96078431 +v -0.01445645 -0.03777029 -0.13921254 0.43529412 0.89019608 0.96078431 +v -0.03524587 0.04242533 -0.10141774 0.43529412 0.89019608 0.96078431 +v -0.03056970 -0.01380560 -0.12972744 0.43529412 0.89019608 0.96078431 +v -0.03657479 0.04242533 -0.11728496 0.43529412 0.89019608 0.96078431 +v -0.02007947 0.03718488 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.01582691 0.03918124 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.01832695 -0.03201411 -0.13473049 0.43529412 0.89019608 0.96078431 +v -0.02236357 -0.02929406 -0.13448532 0.43529412 0.89019608 0.96078431 +v -0.02786201 -0.01739074 -0.13007988 0.43529412 0.89019608 0.96078431 +v -0.02135857 -0.02375415 -0.13066216 0.43529412 0.89019608 0.96078431 +v -0.02480548 -0.02072633 -0.13038634 0.43529412 0.89019608 0.96078431 +v -0.01318566 -0.04043211 -0.14870529 0.43529412 0.89019608 0.96078431 +v -0.00755433 -0.04158002 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.01141653 -0.04098943 -0.14878957 0.43529412 0.89019608 0.96078431 +v -0.01419897 -0.03624806 -0.13702131 0.43529412 0.89019608 0.96078431 +v -0.00958925 -0.03936739 -0.13938109 0.43529412 0.89019608 0.96078431 +v -0.00986334 -0.04100607 -0.14406235 0.43529412 0.89019608 0.96078431 +v -0.00943974 -0.03784516 -0.13717455 0.43529412 0.89019608 0.96078431 +v -0.03383388 0.04242533 -0.10062859 0.43529412 0.89019608 0.96078431 +v -0.03608475 0.04242533 -0.11829630 0.43529412 0.89019608 0.96078431 +v -0.03533723 0.04242533 -0.11978265 0.43529412 0.89019608 0.96078431 +v -0.01530364 0.03936424 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.01134177 0.04071179 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.01033677 0.04092806 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.01336839 -0.02848720 -0.13109121 0.43529412 0.89019608 0.96078431 +v -0.01753790 -0.02636606 -0.13089968 0.43529412 0.89019608 0.96078431 +v -0.01393318 -0.03420179 -0.13492969 0.43529412 0.89019608 0.96078431 +v -0.02724738 0.04242533 -0.09823050 0.43529412 0.89019608 0.96078431 +v -0.03326909 0.04242533 -0.10038342 0.43529412 0.89019608 0.96078431 +v 0.00195581 -0.04221220 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.00277019 -0.04217061 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.00296122 -0.04244511 -0.14900409 0.43529412 0.89019608 0.96078431 +v -0.00761247 -0.04177966 -0.15433659 0.43529412 0.89019608 0.96078431 +v -0.00468052 -0.04194602 -0.14418493 0.43529412 0.89019608 0.96078431 +v -0.00926532 -0.03579057 -0.13507526 0.43529412 0.89019608 0.96078431 +v -0.00448949 -0.03878511 -0.13725882 0.43529412 0.89019608 0.96078431 +v -0.00455593 -0.04030734 -0.13947304 0.43529412 0.89019608 0.96078431 +v -0.00441474 -0.03673052 -0.13515953 0.43529412 0.89019608 0.96078431 +v -0.03428239 0.04242533 -0.12117707 0.43529412 0.89019608 0.96078431 +v -0.00196452 0.04221738 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.00521209 0.04188465 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.00664069 0.04173492 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.00891648 -0.03004270 -0.13123678 0.43529412 0.89019608 0.96078431 +v -0.01749637 0.04242533 -0.09628445 0.43529412 0.89019608 0.96078431 +v -0.02544502 0.04242533 -0.09774782 0.43529412 0.89019608 0.96078431 +v 0.00431466 -0.04224547 -0.15439022 0.43529412 0.89019608 0.96078431 +v 0.00142424 -0.04252830 -0.14901175 0.43529412 0.89019608 0.96078431 +v 0.00007870 -0.04255325 -0.14901942 0.43529412 0.89019608 0.96078431 +v 0.01431484 -0.03970011 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.00662367 -0.04173807 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.00313524 -0.04209575 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.00166552 -0.04243679 -0.15441320 0.43529412 0.89019608 0.96078431 +v 0.00007870 -0.04235361 -0.14517328 0.43529412 0.89019608 0.96078431 +v 0.00007040 -0.04175470 -0.14227719 0.43529412 0.89019608 0.96078431 +v -0.00426523 -0.03096601 -0.13132106 0.43529412 0.89019608 0.96078431 +v 0.00007040 -0.04057352 -0.13950368 0.43529412 0.89019608 0.96078431 +v 0.00006209 -0.03902633 -0.13730479 0.43529412 0.89019608 0.96078431 +v 0.00006209 -0.03880175 -0.13699067 0.43529412 0.89019608 0.96078431 +v 0.00004548 -0.03643938 -0.13471516 0.43529412 0.89019608 0.96078431 +v 0.00003717 -0.03334501 -0.13254693 0.43529412 0.89019608 0.96078431 +v 0.00005378 -0.03697174 -0.13522083 0.43529412 0.89019608 0.96078431 +v -0.03228070 0.04242533 -0.12375137 0.43529412 0.89019608 0.96078431 +v 0.00276148 0.04216747 -0.17299265 0.43529412 0.89019608 0.96078431 +v -0.00002097 0.04219242 -0.17300031 0.43529412 0.89019608 0.96078431 +v -0.03123416 0.04242533 -0.12476271 0.43529412 0.89019608 0.96078431 +v -0.02976404 0.04242533 -0.12617245 0.43529412 0.89019608 0.96078431 +v -0.02782048 0.04242533 -0.12803422 0.43529412 0.89019608 0.96078431 +v -0.02184861 0.04242533 -0.13276911 0.43529412 0.89019608 0.96078431 +v -0.01099293 0.04242533 -0.14077551 0.43529412 0.89019608 0.96078431 +v -0.00581011 0.04242533 -0.14456035 0.43529412 0.89019608 0.96078431 +v -0.00086816 0.04242533 -0.14696610 0.43529412 0.89019608 0.96078431 +v 0.00391598 0.04242533 -0.14587049 0.43529412 0.89019608 0.96078431 +v 0.00873335 0.04242533 -0.14239211 0.43529412 0.89019608 0.96078431 +v 0.01814382 0.04242533 -0.13526680 0.43529412 0.89019608 0.96078431 +v 0.02151597 0.04242533 -0.13263120 0.43529412 0.89019608 0.96078431 +v 0.02614230 0.04242533 -0.12890765 0.43529412 0.89019608 0.96078431 +v -0.00675697 0.04242533 -0.09498963 0.43529412 0.89019608 0.96078431 +v -0.00816065 0.04242533 -0.09511988 0.43529412 0.89019608 0.96078431 +v -0.01334347 0.04242533 -0.09572515 0.43529412 0.89019608 0.96078431 +v 0.00624161 -0.04208743 -0.14895046 0.43529412 0.89019608 0.96078431 +v 0.00623330 -0.04173807 -0.14415429 0.43529412 0.89019608 0.96078431 +v 0.01559394 -0.03958366 -0.14858271 0.43529412 0.89019608 0.96078431 +v 0.01133306 -0.04070661 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.00879979 -0.04126393 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.02006246 -0.03718802 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.01581819 -0.03918438 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.01020347 -0.04121402 -0.15426763 0.43529412 0.89019608 0.96078431 +v 0.00615024 -0.04113084 -0.14177152 0.43529412 0.89019608 0.96078431 +v 0.00002056 -0.03120724 -0.13139002 0.43529412 0.89019608 0.96078431 +v 0.00002056 -0.02929406 -0.13036336 0.43529412 0.89019608 0.96078431 +v -0.00251271 0.04242533 -0.09477511 0.43529412 0.89019608 0.96078431 +v 0.00605057 -0.04009938 -0.13945005 0.43529412 0.89019608 0.96078431 +v 0.00595090 -0.03857716 -0.13724350 0.43529412 0.89019608 0.96078431 +v 0.00582632 -0.03652257 -0.13514422 0.43529412 0.89019608 0.96078431 +v 0.00556884 -0.03075806 -0.13129808 0.43529412 0.89019608 0.96078431 +v 0.00517016 0.04187633 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.03011248 0.04242533 -0.12513813 0.43529412 0.89019608 0.96078431 +v 0.03078525 0.04242533 -0.12435664 0.43529412 0.89019608 0.96078431 +v 0.03293645 0.04242533 -0.12183597 0.43529412 0.89019608 0.96078431 +v 0.03361753 0.04242533 -0.12081697 0.43529412 0.89019608 0.96078431 +v 0.03500459 0.04242533 -0.11868704 0.43529412 0.89019608 0.96078431 +v 0.01099252 -0.04110589 -0.14880489 0.43529412 0.89019608 0.96078431 +v 0.01238790 -0.04029902 -0.14397807 0.43529412 0.89019608 0.96078431 +v 0.01861725 -0.03818620 -0.14837584 0.43529412 0.89019608 0.96078431 +v 0.01824349 -0.03793666 -0.14367926 0.43529412 0.89019608 0.96078431 +v 0.02416552 -0.03466761 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.02125019 -0.03672220 -0.15373132 0.43529412 0.89019608 0.96078431 +v 0.01999601 -0.03754570 -0.14827624 0.43529412 0.89019608 0.96078431 +v 0.01957242 -0.03742093 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.01222178 -0.03969179 -0.14160297 0.43529412 0.89019608 0.96078431 +v 0.00111693 0.04242533 -0.09473680 0.43529412 0.89019608 0.96078431 +v -0.00030336 0.04242533 -0.09472914 0.43529412 0.89019608 0.96078431 +v 0.01202244 -0.03865202 -0.13930448 0.43529412 0.89019608 0.96078431 +v 0.01180649 -0.03712979 -0.13709793 0.43529412 0.89019608 0.96078431 +v 0.01158224 -0.03508352 -0.13501396 0.43529412 0.89019608 0.96078431 +v 0.01107558 -0.02934397 -0.13116783 0.43529412 0.89019608 0.96078431 +v 0.01550257 0.04242533 -0.09591669 0.43529412 0.89019608 0.96078431 +v 0.00770343 0.04242533 -0.09512754 0.43529412 0.89019608 0.96078431 +v 0.00366681 0.04242533 -0.09484406 0.43529412 0.89019608 0.96078431 +v 0.00754562 0.04157688 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.01211381 0.04048719 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.01525340 0.03934761 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.03573550 0.04242533 -0.11707044 0.43529412 0.89019608 0.96078431 +v 0.02087643 0.03673570 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.01998771 0.03717656 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.01656572 0.03887347 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.02368379 -0.03473416 -0.14342643 0.43529412 0.89019608 0.96078431 +v 0.01797770 -0.03732943 -0.14133481 0.43529412 0.89019608 0.96078431 +v 0.02522867 -0.03423506 -0.14778590 0.43529412 0.89019608 0.96078431 +v 0.02419875 -0.03498370 -0.14790082 0.43529412 0.89019608 0.96078431 +v 0.03874220 -0.01682510 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.03124206 -0.02844560 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.02887491 -0.03078302 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.02789483 -0.03173961 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.02114221 -0.03684698 -0.14817664 0.43529412 0.89019608 0.96078431 +v 0.02371701 -0.03475079 -0.14370225 0.43529412 0.89019608 0.96078431 +v 0.01767869 -0.03629797 -0.13905930 0.43529412 0.89019608 0.96078431 +v 0.01734646 -0.03477574 -0.13687574 0.43529412 0.89019608 0.96078431 +v 0.01698931 -0.03274611 -0.13479944 0.43529412 0.89019608 0.96078431 +v 0.01622518 -0.02707310 -0.13096097 0.43529412 0.89019608 0.96078431 +v 0.01671522 0.04242533 -0.09613888 0.43529412 0.89019608 0.96078431 +v 0.02850115 0.03119578 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.03625877 0.04242533 -0.11581393 0.43529412 0.89019608 0.96078431 +v 0.02482999 0.03419033 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.02701441 -0.03219711 -0.14337280 0.43529412 0.89019608 0.96078431 +v 0.02610077 -0.03076638 -0.13882946 0.43529412 0.89019608 0.96078431 +v 0.02294457 -0.03323688 -0.13912060 0.43529412 0.89019608 0.96078431 +v 0.02287813 -0.03309547 -0.13872986 0.43529412 0.89019608 0.96078431 +v 0.02851776 -0.03153997 -0.14738750 0.43529412 0.89019608 0.96078431 +v 0.03890001 -0.01649237 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.03756278 -0.01981133 -0.15172397 0.43529412 0.89019608 0.96078431 +v 0.03683187 -0.02070969 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.03607604 -0.02189920 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.03428199 -0.02470242 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.03160752 -0.02841233 -0.14692779 0.43529412 0.89019608 0.96078431 +v 0.03059421 -0.02939388 -0.15286556 0.43529412 0.89019608 0.96078431 +v 0.02193957 -0.02961015 -0.13450830 0.43529412 0.89019608 0.96078431 +v 0.02093457 -0.02421997 -0.13076942 0.43529412 0.89019608 0.96078431 +v 0.02505424 0.04242533 -0.09774782 0.43529412 0.89019608 0.96078431 +v 0.03643319 0.04242533 -0.11539254 0.43529412 0.89019608 0.96078431 +v 0.02869218 0.03102110 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.03002942 -0.02931070 -0.14300504 0.43529412 0.89019608 0.96078431 +v 0.02898289 -0.02793820 -0.13853065 0.43529412 0.89019608 0.96078431 +v 0.02499610 -0.02748901 -0.13459258 0.43529412 0.89019608 0.96078431 +v 0.03062744 -0.02941052 -0.14707337 0.43529412 0.89019608 0.96078431 +v 0.03890001 -0.01690828 -0.14522691 0.43529412 0.89019608 0.96078431 +v 0.04065254 -0.01142660 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.04052795 -0.01195896 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.03997146 -0.01439619 -0.15107274 0.43529412 0.89019608 0.96078431 +v 0.03679034 -0.02116719 -0.14585517 0.43529412 0.89019608 0.96078431 +v 0.03441488 -0.02484383 -0.15232158 0.43529412 0.89019608 0.96078431 +v 0.03339327 -0.02618306 -0.14659835 0.43529412 0.89019608 0.96078431 +v 0.03273711 -0.02613315 -0.14259898 0.43529412 0.89019608 0.96078431 +v 0.02638317 -0.01961169 -0.13049361 0.43529412 0.89019608 0.96078431 +v 0.03409095 0.04242533 -0.10089675 0.43529412 0.89019608 0.96078431 +v 0.02960582 0.04242533 -0.09918054 0.43529412 0.89019608 0.96078431 +v 0.03712257 0.04242533 -0.11325495 0.43529412 0.89019608 0.96078431 +v 0.03158260 0.02807646 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.02929020 0.03045546 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.03450624 0.02439151 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.03157430 -0.02485215 -0.13820120 0.43529412 0.89019608 0.96078431 +v 0.02772040 -0.02476897 -0.13433975 0.43529412 0.89019608 0.96078431 +v 0.04048642 -0.01255787 -0.14458334 0.43529412 0.89019608 0.96078431 +v 0.03885018 -0.01526128 -0.14119690 0.43529412 0.89019608 0.96078431 +v 0.04160770 -0.00738396 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.04159109 -0.00870655 -0.15039851 0.43529412 0.89019608 0.96078431 +v 0.03581856 -0.02269774 -0.14608502 0.43529412 0.89019608 0.96078431 +v 0.03512088 -0.02270606 -0.14216227 0.43529412 0.89019608 0.96078431 +v 0.03439827 -0.02492701 -0.14641446 0.43529412 0.89019608 0.96078431 +v 0.03086830 -0.01398028 -0.12994963 0.43529412 0.89019608 0.96078431 +v 0.03520393 0.04242533 -0.10156331 0.43529412 0.89019608 0.96078431 +v 0.03766245 0.04242533 -0.11105606 0.43529412 0.89019608 0.96078431 +v 0.03525377 0.02329351 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.03386670 -0.02155815 -0.13784111 0.43529412 0.89019608 0.96078431 +v 0.03239657 -0.01871333 -0.13376512 0.43529412 0.89019608 0.96078431 +v 0.04086018 -0.01107723 -0.14436881 0.43529412 0.89019608 0.96078431 +v 0.04020402 -0.01131846 -0.14066825 0.43529412 0.89019608 0.96078431 +v 0.03826047 -0.01502005 -0.13908995 0.43529412 0.89019608 0.96078431 +v 0.04177382 -0.00636082 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.04238014 -0.00347441 -0.14671327 0.43529412 0.89019608 0.96078431 +v 0.04157448 -0.00822410 -0.14394742 0.43529412 0.89019608 0.96078431 +v 0.03464744 -0.00781651 -0.12924476 0.43529412 0.89019608 0.96078431 +v 0.03615079 0.04242533 -0.10218390 0.43529412 0.89019608 0.96078431 +v 0.03801129 0.04242533 -0.10920961 0.43529412 0.89019608 0.96078431 +v 0.03762923 0.01922592 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.03759600 -0.01442946 -0.13702131 0.43529412 0.89019608 0.96078431 +v 0.03687340 -0.01344792 -0.13499864 0.43529412 0.89019608 0.96078431 +v 0.03613418 -0.01202551 -0.13303727 0.43529412 0.89019608 0.96078431 +v 0.04122564 -0.00725919 -0.14010895 0.43529412 0.89019608 0.96078431 +v 0.04076051 -0.00715937 -0.13807096 0.43529412 0.89019608 0.96078431 +v 0.04024555 -0.00675178 -0.13604063 0.43529412 0.89019608 0.96078431 +v 0.04222233 -0.00167769 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.04227217 -0.00274241 -0.14313529 0.43529412 0.89019608 0.96078431 +v 0.04222233 -0.00387369 -0.14330385 0.43529412 0.89019608 0.96078431 +v 0.04176551 -0.00694310 -0.14375588 0.43529412 0.89019608 0.96078431 +v 0.04225556 0.00021054 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.04244659 0.00122536 -0.14254535 0.43529412 0.89019608 0.96078431 +v 0.04189841 -0.00311673 -0.13953432 0.43529412 0.89019608 0.96078431 +v 0.03794485 -0.00111205 -0.12831005 0.43529412 0.89019608 0.96078431 +v 0.03644980 0.04242533 -0.10247504 0.43529412 0.89019608 0.96078431 +v 0.03819402 0.04242533 -0.10744744 0.43529412 0.89019608 0.96078431 +v 0.04069407 0.01139018 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.04045320 0.01209723 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.03917411 0.01584041 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.03826877 0.01791164 -0.17299265 0.43529412 0.89019608 0.96078431 +v 0.03968076 -0.00597819 -0.13405626 0.43529412 0.89019608 0.96078431 +v 0.03909935 -0.00479701 -0.13211021 0.43529412 0.89019608 0.96078431 +v 0.03940667 0.00251468 -0.12777373 0.43529412 0.89019608 0.96078431 +v 0.04117580 -0.00274241 -0.13550431 0.43529412 0.89019608 0.96078431 +v 0.04124225 0.00305536 -0.13102992 0.43529412 0.89019608 0.96078431 +v 0.04031200 -0.00095400 -0.13158156 0.43529412 0.89019608 0.96078431 +v 0.04222233 0.00107563 -0.13895204 0.43529412 0.89019608 0.96078431 +v 0.04197316 0.00490200 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.04238014 0.00294723 -0.14926459 0.43529412 0.89019608 0.96078431 +v 0.04178213 0.01146505 -0.13001859 0.43529412 0.89019608 0.96078431 +v 0.04200638 0.00559241 -0.13439338 0.43529412 0.89019608 0.96078431 +v 0.04179874 0.00138341 -0.13494501 0.43529412 0.89019608 0.96078431 +v 0.03855117 0.00768859 -0.12398889 0.43529412 0.89019608 0.96078431 +v 0.03703121 0.04242533 -0.10304200 0.43529412 0.89019608 0.96078431 +v 0.03820233 0.04242533 -0.10575422 0.43529412 0.89019608 0.96078431 +v 0.04009605 0.02922437 -0.11798983 0.43529412 0.89019608 0.96078431 +v 0.04027877 0.02752747 -0.12168274 0.43529412 0.89019608 0.96078431 +v 0.03945650 0.03310897 -0.11764506 0.43529412 0.89019608 0.96078431 +v 0.04170737 0.00678191 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.04061932 0.00638264 -0.12721443 0.43529412 0.89019608 0.96078431 +v 0.03996315 0.01138187 -0.12341426 0.43529412 0.89019608 0.96078431 +v 0.04172398 0.00721446 -0.13050127 0.43529412 0.89019608 0.96078431 +v 0.04129208 0.01045023 -0.12669344 0.43529412 0.89019608 0.96078431 +v 0.04181535 0.00603327 -0.17300031 0.43529412 0.89019608 0.96078431 +v 0.04144159 0.01576555 -0.12958953 0.43529412 0.89019608 0.96078431 +v 0.04151634 0.01460932 -0.12622608 0.43529412 0.89019608 0.96078431 +v 0.03767906 0.04242533 -0.10403801 0.43529412 0.89019608 0.96078431 +v 0.03805282 0.04242533 -0.10492676 0.43529412 0.89019608 0.96078431 +v 0.04101799 0.01930910 -0.12241059 0.43529412 0.89019608 0.96078431 +v 0.04074390 0.01530805 -0.12288562 0.43529412 0.89019608 0.96078431 +f 828 829 830 +f 828 830 831 +f 828 831 832 +f 828 832 833 +f 828 833 834 +f 828 834 829 +f 829 835 836 +f 829 836 830 +f 829 834 837 +f 829 837 838 +f 829 838 839 +f 829 839 854 +f 829 854 876 +f 829 876 901 +f 829 901 920 +f 829 920 919 +f 829 919 940 +f 829 940 958 +f 829 958 976 +f 829 976 998 +f 829 998 1030 +f 829 1030 1056 +f 829 1056 1076 +f 829 1076 1095 +f 829 1095 1114 +f 829 1114 1127 +f 829 1127 1139 +f 829 1139 1158 +f 829 1158 1178 +f 829 1178 1183 +f 829 1183 1167 +f 829 1167 1150 +f 829 1150 1146 +f 829 1146 1133 +f 829 1133 1119 +f 829 1119 1101 +f 829 1101 1084 +f 829 1084 1065 +f 829 1065 1040 +f 829 1040 1019 +f 829 1019 983 +f 829 983 964 +f 829 964 947 +f 829 947 931 +f 829 931 909 +f 829 909 884 +f 829 884 863 +f 829 863 846 +f 829 846 835 +f 830 836 831 +f 831 836 835 +f 831 835 840 +f 831 840 841 +f 831 841 842 +f 831 842 843 +f 831 843 832 +f 832 843 844 +f 832 844 845 +f 832 845 833 +f 833 845 837 +f 833 837 834 +f 835 846 847 +f 835 847 848 +f 835 848 840 +f 837 845 849 +f 837 849 850 +f 837 850 838 +f 838 850 851 +f 838 851 852 +f 838 852 853 +f 838 853 839 +f 839 853 855 +f 839 855 854 +f 840 856 841 +f 840 848 847 +f 840 847 857 +f 840 857 856 +f 841 858 844 +f 841 844 842 +f 841 856 859 +f 841 859 858 +f 842 844 843 +f 844 860 861 +f 844 861 862 +f 844 862 845 +f 844 858 860 +f 845 861 849 +f 845 862 861 +f 846 863 864 +f 846 864 865 +f 846 865 866 +f 846 866 867 +f 846 867 868 +f 846 868 847 +f 847 868 857 +f 849 869 850 +f 849 861 870 +f 849 870 869 +f 850 871 872 +f 850 872 873 +f 850 873 853 +f 850 853 852 +f 850 852 851 +f 850 869 871 +f 853 873 874 +f 853 874 875 +f 853 875 855 +f 854 855 877 +f 854 877 876 +f 855 875 897 +f 855 897 872 +f 855 872 894 +f 855 894 893 +f 855 893 892 +f 855 892 914 +f 855 914 916 +f 855 916 936 +f 855 936 953 +f 855 953 963 +f 855 963 962 +f 855 962 979 +f 855 979 978 +f 855 978 1013 +f 855 1013 1012 +f 855 1012 1011 +f 855 1011 1025 +f 855 1025 1046 +f 855 1046 1045 +f 855 1045 1053 +f 855 1053 1052 +f 855 1052 1051 +f 855 1051 1075 +f 855 1075 1093 +f 855 1093 1110 +f 855 1110 1109 +f 855 1109 1125 +f 855 1125 1137 +f 855 1137 1154 +f 855 1154 1173 +f 855 1173 1186 +f 855 1186 1187 +f 855 1187 1174 +f 855 1174 1155 +f 855 1155 1138 +f 855 1138 1126 +f 855 1126 1111 +f 855 1111 1094 +f 855 1094 1077 +f 855 1077 1057 +f 855 1057 1035 +f 855 1035 1034 +f 855 1034 1033 +f 855 1033 1032 +f 855 1032 1031 +f 855 1031 1010 +f 855 1010 1009 +f 855 1009 1008 +f 855 1008 1007 +f 855 1007 1006 +f 855 1006 1005 +f 855 1005 1004 +f 855 1004 1003 +f 855 1003 1002 +f 855 1002 1001 +f 855 1001 1000 +f 855 1000 999 +f 855 999 996 +f 855 996 973 +f 855 973 955 +f 855 955 954 +f 855 954 938 +f 855 938 917 +f 855 917 898 +f 855 898 877 +f 856 857 859 +f 857 868 878 +f 857 878 879 +f 857 879 880 +f 857 880 859 +f 858 859 881 +f 858 881 860 +f 859 882 881 +f 859 880 882 +f 860 881 861 +f 861 881 883 +f 861 883 870 +f 863 884 885 +f 863 885 886 +f 863 886 887 +f 863 887 888 +f 863 888 889 +f 863 889 890 +f 863 890 864 +f 864 878 865 +f 864 890 889 +f 864 889 878 +f 865 878 866 +f 866 878 867 +f 867 878 868 +f 869 870 891 +f 869 891 892 +f 869 892 893 +f 869 893 894 +f 869 894 871 +f 870 883 895 +f 870 895 896 +f 870 896 891 +f 871 894 872 +f 872 897 873 +f 873 897 875 +f 873 875 874 +f 876 877 898 +f 876 898 899 +f 876 899 900 +f 876 900 901 +f 878 889 902 +f 878 902 903 +f 878 903 879 +f 879 904 905 +f 879 905 906 +f 879 906 880 +f 879 903 904 +f 880 906 882 +f 881 882 883 +f 882 907 895 +f 882 895 883 +f 882 906 907 +f 884 908 885 +f 884 909 908 +f 885 908 910 +f 885 910 887 +f 885 887 886 +f 887 911 888 +f 887 910 908 +f 887 908 912 +f 887 912 913 +f 887 913 911 +f 888 911 889 +f 889 911 902 +f 891 896 914 +f 891 914 892 +f 895 907 896 +f 896 907 915 +f 896 915 916 +f 896 916 914 +f 898 917 918 +f 898 918 919 +f 898 919 920 +f 898 920 921 +f 898 921 922 +f 898 922 923 +f 898 923 901 +f 898 901 900 +f 898 900 899 +f 901 923 922 +f 901 922 920 +f 902 911 924 +f 902 924 925 +f 902 925 903 +f 903 925 904 +f 904 926 905 +f 904 925 927 +f 904 927 926 +f 905 926 928 +f 905 928 929 +f 905 929 906 +f 906 929 907 +f 907 929 915 +f 908 909 930 +f 908 930 912 +f 909 931 932 +f 909 932 930 +f 911 913 933 +f 911 933 924 +f 912 930 913 +f 913 930 934 +f 913 934 935 +f 913 935 933 +f 915 929 916 +f 916 929 928 +f 916 928 937 +f 916 937 936 +f 917 938 939 +f 917 939 918 +f 918 939 919 +f 919 939 940 +f 920 922 921 +f 924 941 942 +f 924 942 925 +f 924 933 941 +f 925 942 927 +f 926 943 937 +f 926 937 928 +f 926 927 943 +f 927 942 944 +f 927 944 945 +f 927 945 943 +f 930 932 946 +f 930 946 934 +f 931 947 932 +f 932 947 948 +f 932 948 946 +f 933 935 949 +f 933 949 941 +f 934 950 935 +f 934 946 951 +f 934 951 950 +f 935 950 952 +f 935 952 949 +f 936 937 943 +f 936 943 953 +f 938 954 939 +f 939 954 940 +f 940 954 955 +f 940 955 956 +f 940 956 957 +f 940 957 958 +f 941 959 960 +f 941 960 942 +f 941 949 961 +f 941 961 959 +f 942 960 944 +f 943 945 953 +f 944 960 962 +f 944 962 963 +f 944 963 945 +f 945 963 953 +f 946 948 951 +f 947 964 965 +f 947 965 966 +f 947 966 967 +f 947 967 948 +f 948 967 966 +f 948 966 968 +f 948 968 951 +f 949 969 961 +f 949 952 969 +f 950 970 952 +f 950 951 971 +f 950 971 970 +f 951 968 971 +f 952 970 972 +f 952 972 969 +f 955 973 974 +f 955 974 975 +f 955 975 976 +f 955 976 957 +f 955 957 956 +f 957 976 958 +f 959 961 977 +f 959 977 978 +f 959 978 979 +f 959 979 960 +f 960 979 962 +f 961 969 977 +f 964 980 981 +f 964 981 982 +f 964 982 965 +f 964 983 984 +f 964 984 985 +f 964 985 980 +f 965 982 986 +f 965 986 966 +f 966 986 982 +f 966 982 987 +f 966 987 968 +f 968 987 988 +f 968 988 971 +f 969 972 989 +f 969 989 977 +f 970 971 990 +f 970 990 991 +f 970 991 992 +f 970 992 972 +f 971 988 990 +f 972 993 994 +f 972 994 989 +f 972 992 995 +f 972 995 993 +f 973 996 974 +f 974 997 998 +f 974 998 976 +f 974 976 975 +f 974 996 999 +f 974 999 1000 +f 974 1000 1001 +f 974 1001 1002 +f 974 1002 1003 +f 974 1003 1004 +f 974 1004 1005 +f 974 1005 1006 +f 974 1006 1007 +f 974 1007 1008 +f 974 1008 1009 +f 974 1009 1010 +f 974 1010 997 +f 977 989 1011 +f 977 1011 1012 +f 977 1012 1013 +f 977 1013 978 +f 980 985 984 +f 980 984 1014 +f 980 1014 981 +f 981 987 982 +f 981 1014 1015 +f 981 1015 987 +f 983 1016 1017 +f 983 1017 1018 +f 983 1018 984 +f 983 1019 1020 +f 983 1020 1016 +f 984 1018 1021 +f 984 1021 1014 +f 987 1015 988 +f 988 1015 1022 +f 988 1022 990 +f 989 994 1023 +f 989 1023 1024 +f 989 1024 1025 +f 989 1025 1011 +f 990 1022 1026 +f 990 1026 1027 +f 990 1027 991 +f 991 1027 992 +f 992 1027 1028 +f 992 1028 995 +f 993 995 1028 +f 993 1028 994 +f 994 1029 1023 +f 994 1028 1029 +f 997 1030 998 +f 997 1010 1031 +f 997 1031 1032 +f 997 1032 1033 +f 997 1033 1034 +f 997 1034 1035 +f 997 1035 1030 +f 1014 1021 1036 +f 1014 1036 1015 +f 1015 1036 1037 +f 1015 1037 1022 +f 1016 1037 1036 +f 1016 1036 1017 +f 1016 1020 1038 +f 1016 1038 1039 +f 1016 1039 1037 +f 1017 1036 1021 +f 1017 1021 1018 +f 1019 1040 1041 +f 1019 1041 1042 +f 1019 1042 1043 +f 1019 1043 1020 +f 1020 1043 1042 +f 1020 1042 1038 +f 1022 1037 1044 +f 1022 1044 1026 +f 1023 1029 1024 +f 1024 1029 1045 +f 1024 1045 1046 +f 1024 1046 1025 +f 1026 1044 1047 +f 1026 1047 1027 +f 1027 1047 1048 +f 1027 1048 1028 +f 1028 1049 1029 +f 1028 1048 1049 +f 1029 1049 1050 +f 1029 1050 1051 +f 1029 1051 1052 +f 1029 1052 1053 +f 1029 1053 1045 +f 1030 1054 1055 +f 1030 1055 1056 +f 1030 1035 1054 +f 1035 1057 1058 +f 1035 1058 1059 +f 1035 1059 1060 +f 1035 1060 1055 +f 1035 1055 1054 +f 1037 1039 1044 +f 1038 1042 1039 +f 1039 1042 1061 +f 1039 1061 1062 +f 1039 1062 1044 +f 1040 1063 1064 +f 1040 1064 1041 +f 1040 1065 1066 +f 1040 1066 1067 +f 1040 1067 1068 +f 1040 1068 1063 +f 1041 1064 1069 +f 1041 1069 1042 +f 1042 1069 1064 +f 1042 1064 1070 +f 1042 1070 1061 +f 1044 1062 1047 +f 1047 1062 1071 +f 1047 1071 1048 +f 1048 1071 1072 +f 1048 1072 1049 +f 1049 1072 1073 +f 1049 1073 1050 +f 1050 1073 1074 +f 1050 1074 1051 +f 1051 1074 1075 +f 1055 1060 1056 +f 1056 1060 1059 +f 1056 1059 1058 +f 1056 1058 1076 +f 1057 1077 1078 +f 1057 1078 1058 +f 1058 1078 1076 +f 1061 1070 1063 +f 1061 1063 1079 +f 1061 1079 1080 +f 1061 1080 1081 +f 1061 1081 1062 +f 1062 1081 1082 +f 1062 1082 1071 +f 1063 1070 1064 +f 1063 1068 1083 +f 1063 1083 1079 +f 1065 1084 1085 +f 1065 1085 1086 +f 1065 1086 1087 +f 1065 1087 1088 +f 1065 1088 1066 +f 1066 1089 1090 +f 1066 1090 1083 +f 1066 1083 1067 +f 1066 1088 1089 +f 1067 1083 1068 +f 1071 1082 1072 +f 1072 1082 1091 +f 1072 1091 1073 +f 1073 1091 1074 +f 1074 1091 1092 +f 1074 1092 1093 +f 1074 1093 1075 +f 1076 1078 1094 +f 1076 1094 1095 +f 1077 1094 1078 +f 1079 1083 1096 +f 1079 1096 1080 +f 1080 1082 1081 +f 1080 1096 1097 +f 1080 1097 1098 +f 1080 1098 1082 +f 1082 1098 1091 +f 1083 1090 1099 +f 1083 1099 1096 +f 1084 1100 1085 +f 1084 1101 1102 +f 1084 1102 1103 +f 1084 1103 1100 +f 1085 1104 1086 +f 1085 1100 1104 +f 1086 1104 1105 +f 1086 1105 1087 +f 1087 1105 1088 +f 1088 1105 1089 +f 1089 1106 1107 +f 1089 1107 1096 +f 1089 1096 1099 +f 1089 1099 1090 +f 1089 1105 1106 +f 1091 1098 1092 +f 1092 1098 1108 +f 1092 1108 1109 +f 1092 1109 1110 +f 1092 1110 1093 +f 1094 1111 1112 +f 1094 1112 1113 +f 1094 1113 1095 +f 1095 1113 1112 +f 1095 1112 1114 +f 1096 1107 1097 +f 1097 1107 1115 +f 1097 1115 1116 +f 1097 1116 1098 +f 1098 1116 1108 +f 1100 1103 1117 +f 1100 1117 1118 +f 1100 1118 1104 +f 1101 1119 1102 +f 1102 1119 1120 +f 1102 1120 1103 +f 1103 1120 1117 +f 1104 1121 1105 +f 1104 1118 1122 +f 1104 1122 1121 +f 1105 1121 1123 +f 1105 1123 1106 +f 1106 1123 1107 +f 1107 1123 1122 +f 1107 1122 1115 +f 1108 1116 1124 +f 1108 1124 1109 +f 1109 1124 1125 +f 1111 1126 1127 +f 1111 1127 1114 +f 1111 1114 1112 +f 1115 1122 1128 +f 1115 1128 1129 +f 1115 1129 1116 +f 1116 1129 1124 +f 1117 1120 1130 +f 1117 1130 1131 +f 1117 1131 1118 +f 1118 1131 1132 +f 1118 1132 1122 +f 1119 1133 1120 +f 1120 1133 1134 +f 1120 1134 1135 +f 1120 1135 1130 +f 1121 1122 1123 +f 1122 1132 1128 +f 1124 1129 1136 +f 1124 1136 1137 +f 1124 1137 1125 +f 1126 1138 1139 +f 1126 1139 1127 +f 1128 1132 1140 +f 1128 1140 1141 +f 1128 1141 1129 +f 1129 1141 1142 +f 1129 1142 1136 +f 1130 1135 1131 +f 1131 1135 1143 +f 1131 1143 1144 +f 1131 1144 1145 +f 1131 1145 1132 +f 1132 1145 1140 +f 1133 1146 1134 +f 1134 1147 1148 +f 1134 1148 1149 +f 1134 1149 1135 +f 1134 1146 1150 +f 1134 1150 1151 +f 1134 1151 1147 +f 1135 1149 1152 +f 1135 1152 1143 +f 1136 1142 1153 +f 1136 1153 1137 +f 1137 1153 1154 +f 1138 1155 1156 +f 1138 1156 1157 +f 1138 1157 1158 +f 1138 1158 1159 +f 1138 1159 1139 +f 1139 1159 1158 +f 1140 1145 1160 +f 1140 1160 1161 +f 1140 1161 1141 +f 1141 1161 1142 +f 1142 1161 1162 +f 1142 1162 1153 +f 1143 1152 1163 +f 1143 1163 1144 +f 1144 1163 1145 +f 1145 1163 1164 +f 1145 1164 1165 +f 1145 1165 1160 +f 1147 1151 1166 +f 1147 1166 1148 +f 1148 1166 1152 +f 1148 1152 1149 +f 1150 1167 1168 +f 1150 1168 1151 +f 1151 1168 1169 +f 1151 1169 1170 +f 1151 1170 1166 +f 1152 1166 1171 +f 1152 1171 1163 +f 1153 1162 1172 +f 1153 1172 1173 +f 1153 1173 1154 +f 1155 1174 1175 +f 1155 1175 1176 +f 1155 1176 1177 +f 1155 1177 1178 +f 1155 1178 1156 +f 1156 1178 1158 +f 1156 1158 1157 +f 1160 1165 1161 +f 1161 1165 1179 +f 1161 1179 1162 +f 1162 1179 1180 +f 1162 1180 1172 +f 1163 1171 1164 +f 1164 1181 1182 +f 1164 1182 1179 +f 1164 1179 1165 +f 1164 1171 1181 +f 1166 1170 1181 +f 1166 1181 1171 +f 1167 1183 1176 +f 1167 1176 1184 +f 1167 1184 1168 +f 1168 1184 1169 +f 1169 1184 1185 +f 1169 1185 1181 +f 1169 1181 1170 +f 1172 1180 1173 +f 1173 1180 1186 +f 1174 1187 1188 +f 1174 1188 1175 +f 1175 1188 1185 +f 1175 1185 1184 +f 1175 1184 1176 +f 1176 1183 1178 +f 1176 1178 1177 +f 1179 1182 1189 +f 1179 1189 1180 +f 1180 1189 1186 +f 1181 1185 1182 +f 1182 1185 1188 +f 1182 1188 1189 +f 1186 1189 1187 +f 1187 1189 1188 \ No newline at end of file diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link5.obj.convex.stl b/src/experiments/assets/robots/xarm7/meshes/collision/link5.obj.convex.stl new file mode 100644 index 0000000000000000000000000000000000000000..57db1a8fc136c1f7c4f5fcfdcf5e5ae89dd73ae0 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link5.obj.convex.stl @@ -0,0 +1,2130 @@ +solid AssimpScene + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex -0.00664068945 0.041734919 -0.173000291 + vertex 0.0352537706 0.0232935082 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex 0.0352537706 0.0232935082 -0.173000291 + vertex 0.0422555618 0.000210539991 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex 0.0422555618 0.000210539991 -0.173000291 + vertex 0.0416077003 -0.00738395983 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex 0.0416077003 -0.00738395983 -0.173000291 + vertex 0.0389000103 -0.0164923705 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex 0.0389000103 -0.0164923705 -0.173000291 + vertex 0.0241655204 -0.0346676111 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex 0.0241655204 -0.0346676111 -0.173000291 + vertex 0.0143148396 -0.0397001095 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex 0.0143148396 -0.0397001095 -0.173000291 + vertex 0.00195581 -0.0422121994 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex 0.00195581 -0.0422121994 -0.173000291 + vertex -0.0248387009 -0.0341934711 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex -0.0248387009 -0.0341934711 -0.173000291 + vertex -0.0400216989 -0.0135810096 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex -0.0400216989 -0.0135810096 -0.173000291 + vertex -0.0422642715 0.000426819985 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex -0.0422642715 0.000426819985 -0.173000291 + vertex -0.0411014594 0.00985964015 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0175659508 0.0777844787 -0.0832403153 + vertex 0.0121138096 0.0404871851 -0.172992647 + vertex -0.000346209999 0.0796616599 -0.0866326094 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0310924985 0.00475637941 0.0209522098 + vertex 0.0123878988 -0.0402990207 -0.143978059 + vertex 0.0354586318 0.00475637941 0.0121916095 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158161595 0.0778911412 -0.0852923244 + vertex -0.000346209999 0.0796616599 -0.0866326094 + vertex -0.00664068945 0.041734919 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0367903411 -0.0211671907 -0.145855173 + vertex 0.0285177603 -0.0315399691 -0.147387505 + vertex 0.0342819914 -0.0247024205 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00195581 -0.0422121994 -0.173000291 + vertex 7.87000026e-05 -0.0425532497 -0.149019405 + vertex -0.0121225202 -0.0404820181 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0359822698 0.0740303919 -0.0179152284 + vertex 0.0366607904 0.0666504428 -0.000579119951 + vertex 0.0363930091 0.0721870884 -0.0623874813 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0125834905 0.0833372921 0.0148532791 + vertex -0.00591629976 0.086143747 -0.0011872499 + vertex -0.0218836293 0.0833213031 -0.00617568009 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248387009 -0.0341934711 -0.173000291 + vertex -0.0284434203 -0.0316065103 -0.147402808 + vertex -0.0332690887 -0.0260582902 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248387009 -0.0341934711 -0.173000291 + vertex -0.0332690887 -0.0260582902 -0.172992647 + vertex -0.0400216989 -0.0135810096 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248387009 -0.0341934711 -0.173000291 + vertex 0.00195581 -0.0422121994 -0.173000291 + vertex -0.0121225202 -0.0404820181 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0241655204 -0.0346676111 -0.173000291 + vertex 0.0342819914 -0.0247024205 -0.172992647 + vertex 0.0285177603 -0.0315399691 -0.147387505 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0136132604 0.0694568977 0.0320042968 + vertex 0.0192110408 0.0756934807 0.0241514985 + vertex 0.00643717963 0.0773006007 0.0291311201 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0349412784 0.068603389 -0.0803841501 + vertex 0.0320605189 0.0774559751 -0.0618051514 + vertex 0.0363930091 0.0721870884 -0.0623874813 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0349412784 0.068603389 -0.0803841501 + vertex 0.0363930091 0.0721870884 -0.0623874813 + vertex 0.0406940691 0.0113901803 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00601678994 0.0823298395 0.0213311892 + vertex -0.00700044958 0.0802030116 0.0254382677 + vertex 0.00643717963 0.0773006007 0.0291311201 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0256053489 0.06762591 0.024186749 + vertex 0.0192110408 0.0756934807 0.0241514985 + vertex 0.0136132604 0.0694568977 0.0320042968 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0256053489 0.06762591 0.024186749 + vertex 0.0294699501 0.07259918 0.0149061587 + vertex 0.0192110408 0.0756934807 0.0241514985 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00694607012 0.0560402609 0.0365961306 + vertex 0.0164527092 0.00475637941 0.0336964987 + vertex 0.01671822 0.0606857091 0.0327887088 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0375216603 -0.0198362805 -0.145655975 + vertex -0.0332690887 -0.0260582902 -0.172992647 + vertex -0.0284434203 -0.0316065103 -0.147402808 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0375216603 -0.0198362805 -0.145655975 + vertex -0.0284434203 -0.0316065103 -0.147402808 + vertex -0.0368036814 0.00474837981 0.00716792932 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0375216603 -0.0198362805 -0.145655975 + vertex -0.0368036814 0.00474837981 0.00716792932 + vertex -0.0407775305 -0.0115430504 -0.144430101 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0375216603 -0.0198362805 -0.145655975 + vertex -0.0407775305 -0.0115430504 -0.144430101 + vertex -0.0400216989 -0.0135810096 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0375216603 -0.0198362805 -0.145655975 + vertex -0.0400216989 -0.0135810096 -0.173000291 + vertex -0.0332690887 -0.0260582902 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0374056809 0.00475637941 0.00259373011 + vertex 0.0354586318 0.00475637941 0.0121916095 + vertex 0.0285177603 -0.0315399691 -0.147387505 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0374056809 0.00475637941 0.00259373011 + vertex 0.0285177603 -0.0315399691 -0.147387505 + vertex 0.0367903411 -0.0211671907 -0.145855173 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0374056809 0.00475637941 0.00259373011 + vertex 0.0367903411 -0.0211671907 -0.145855173 + vertex 0.0415744781 -0.00822409987 -0.143947408 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0374056809 0.00475637941 0.00259373011 + vertex 0.0366607904 0.0666504428 -0.000579119951 + vertex 0.0357315093 0.0579432063 0.00941535924 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0374056809 0.00475637941 0.00259373011 + vertex 0.0357315093 0.0579432063 0.00941535924 + vertex 0.0354586318 0.00475637941 0.0121916095 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0252882093 0.0380501188 0.0276680775 + vertex 0.01671822 0.0606857091 0.0327887088 + vertex 0.0164527092 0.00475637941 0.0336964987 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0252882093 0.0380501188 0.0276680775 + vertex 0.0310924985 0.00475637941 0.0209522098 + vertex 0.0301484801 0.0593184605 0.0211372878 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0210990906 0.0833372921 -0.00630787993 + vertex 0.01138594 0.0844806582 0.00960045028 + vertex 0.0229060184 0.0807546973 0.00908044912 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0210990906 0.0833372921 -0.00630787993 + vertex 0.0229060184 0.0807546973 0.00908044912 + vertex 0.0309154987 0.0786038935 -0.00783262029 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0261294506 0.0803357288 -0.0651604608 + vertex -0.0158161595 0.0778911412 -0.0852923244 + vertex -0.0314222015 0.0751905665 -0.0737567171 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0353996195 0.0719755217 -0.00198928011 + vertex 0.0366607904 0.0666504428 -0.000579119951 + vertex 0.0359822698 0.0740303919 -0.0179152284 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0353996195 0.0719755217 -0.00198928011 + vertex 0.0359822698 0.0740303919 -0.0179152284 + vertex 0.0309154987 0.0786038935 -0.00783262029 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0352537706 0.0232935082 -0.173000291 + vertex 0.0292901993 0.0304554608 -0.172992647 + vertex 0.0349412784 0.068603389 -0.0803841501 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0352537706 0.0232935082 -0.173000291 + vertex 0.0349412784 0.068603389 -0.0803841501 + vertex 0.0406940691 0.0113901803 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.042446591 0.00122535997 -0.142545357 + vertex 0.0366607904 0.0666504428 -0.000579119951 + vertex 0.0374056809 0.00475637941 0.00259373011 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.042446591 0.00122535997 -0.142545357 + vertex 0.0374056809 0.00475637941 0.00259373011 + vertex 0.0415744781 -0.00822409987 -0.143947408 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.042446591 0.00122535997 -0.142545357 + vertex 0.0415744781 -0.00822409987 -0.143947408 + vertex 0.0416077003 -0.00738395983 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.042446591 0.00122535997 -0.142545357 + vertex 0.0363930091 0.0721870884 -0.0623874813 + vertex 0.0366607904 0.0666504428 -0.000579119951 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312870182 0.0792355388 -0.0122481594 + vertex -0.0356752686 0.0745980814 -0.00833498035 + vertex -0.0331013203 0.0748859271 0.00358964968 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312870182 0.0792355388 -0.0122481594 + vertex -0.0218836293 0.0833213031 -0.00617568009 + vertex -0.0303282402 0.0801070705 -0.0462153107 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312870182 0.0792355388 -0.0122481594 + vertex -0.0303282402 0.0801070705 -0.0462153107 + vertex -0.0357471295 0.0758390501 -0.05339377 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312870182 0.0792355388 -0.0122481594 + vertex -0.0357471295 0.0758390501 -0.05339377 + vertex -0.0356752686 0.0745980814 -0.00833498035 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0366119184 0.0681855977 0.00263780006 + vertex -0.0348197408 0.0616451912 0.0133637991 + vertex -0.0306748804 0.0698326901 0.0169773307 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0366119184 0.0681855977 0.00263780006 + vertex -0.0306748804 0.0698326901 0.0169773307 + vertex -0.0331013203 0.0748859271 0.00358964968 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0366119184 0.0681855977 0.00263780006 + vertex -0.0331013203 0.0748859271 0.00358964968 + vertex -0.0356752686 0.0745980814 -0.00833498035 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0200398304 0.0605177954 0.0313432962 + vertex -0.0207257196 0.0689611733 0.0285582375 + vertex -0.0266258903 0.0639799014 0.025306059 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0200398304 0.0605177954 0.0313432962 + vertex -0.0266258903 0.0639799014 0.025306059 + vertex -0.0274740402 0.0491560288 0.0257291086 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0200398304 0.0605177954 0.0313432962 + vertex -0.0274740402 0.0491560288 0.0257291086 + vertex -0.02095435 0.00475637941 0.031096518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00716731977 0.00475637941 0.0368076563 + vertex 0.0164527092 0.00475637941 0.0336964987 + vertex 0.00694607012 0.0560402609 0.0365961306 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00716731977 0.00475637941 0.0368076563 + vertex 0.00694607012 0.0560402609 0.0365961306 + vertex -0.00038488998 0.0180530902 0.0374951102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00716731977 0.00475637941 0.0368076563 + vertex -0.00038488998 0.0180530902 0.0374951102 + vertex -0.00259745005 0.00475637941 0.0374069661 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0282853078 0.00475637941 0.0246097986 + vertex -0.02095435 0.00475637941 0.031096518 + vertex -0.0274740402 0.0491560288 0.0257291086 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0282853078 0.00475637941 0.0246097986 + vertex -0.0336913392 0.00475637941 0.0164485183 + vertex -0.0148883499 -0.0394172892 -0.143870786 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.012185229 0.00475637941 0.0354591869 + vertex -0.0117427101 0.0609655604 0.0351683386 + vertex -0.0200398304 0.0605177954 0.0313432962 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.012185229 0.00475637941 0.0354591869 + vertex -0.0200398304 0.0605177954 0.0313432962 + vertex -0.02095435 0.00475637941 0.031096518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0247645695 0.0822099075 -0.0462241247 + vertex 0.0148449196 0.0847525001 -0.0517766178 + vertex 0.0210990906 0.0833372921 -0.00630787993 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0247645695 0.0822099075 -0.0462241247 + vertex 0.0210990906 0.0833372921 -0.00630787993 + vertex 0.0309154987 0.0786038935 -0.00783262029 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0247645695 0.0822099075 -0.0462241247 + vertex 0.0320605189 0.0774559751 -0.0618051514 + vertex 0.0205903798 0.081713751 -0.0666486397 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0247645695 0.0822099075 -0.0462241247 + vertex 0.0205903798 0.081713751 -0.0666486397 + vertex 0.0148449196 0.0847525001 -0.0517766178 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0246096887 0.00475637941 0.0282850172 + vertex 0.0310924985 0.00475637941 0.0209522098 + vertex 0.0252882093 0.0380501188 0.0276680775 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0246096887 0.00475637941 0.0282850172 + vertex 0.0252882093 0.0380501188 0.0276680775 + vertex 0.0164527092 0.00475637941 0.0336964987 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0246096887 0.00475637941 0.0282850172 + vertex 0.0123878988 -0.0402990207 -0.143978059 + vertex 0.0310924985 0.00475637941 0.0209522098 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.08497639 0.0133990599 + vertex -0.0125834905 0.0833372921 0.0148532791 + vertex -0.00700044958 0.0802030116 0.0254382677 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.08497639 0.0133990599 + vertex -0.00700044958 0.0802030116 0.0254382677 + vertex 0.00601678994 0.0823298395 0.0213311892 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.08497639 0.0133990599 + vertex 0.00601678994 0.0823298395 0.0213311892 + vertex 0.01138594 0.0844806582 0.00960045028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.08497639 0.0133990599 + vertex -0.00591629976 0.086143747 -0.0011872499 + vertex -0.0125834905 0.0833372921 0.0148532791 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0335853212 0.0678018108 0.0110282302 + vertex 0.0294699501 0.07259918 0.0149061587 + vertex 0.0256053489 0.06762591 0.024186749 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0335853212 0.0678018108 0.0110282302 + vertex 0.0256053489 0.06762591 0.024186749 + vertex 0.0301484801 0.0593184605 0.0211372878 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0335853212 0.0678018108 0.0110282302 + vertex 0.0301484801 0.0593184605 0.0211372878 + vertex 0.0357315093 0.0579432063 0.00941535924 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0335853212 0.0678018108 0.0110282302 + vertex 0.0357315093 0.0579432063 0.00941535924 + vertex 0.0366607904 0.0666504428 -0.000579119951 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0335853212 0.0678018108 0.0110282302 + vertex 0.0366607904 0.0666504428 -0.000579119951 + vertex 0.0353996195 0.0719755217 -0.00198928011 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0335853212 0.0678018108 0.0110282302 + vertex 0.0353996195 0.0719755217 -0.00198928011 + vertex 0.0294699501 0.07259918 0.0149061587 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0307373274 0.0745890215 -0.0750600174 + vertex 0.0320605189 0.0774559751 -0.0618051514 + vertex 0.0349412784 0.068603389 -0.0803841501 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0307373274 0.0745890215 -0.0750600174 + vertex 0.0349412784 0.068603389 -0.0803841501 + vertex 0.0292901993 0.0304554608 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0307373274 0.0745890215 -0.0750600174 + vertex 0.0175659508 0.0777844787 -0.0832403153 + vertex 0.0205903798 0.081713751 -0.0666486397 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0307373274 0.0745890215 -0.0750600174 + vertex 0.0205903798 0.081713751 -0.0666486397 + vertex 0.0320605189 0.0774559751 -0.0618051514 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0364805497 0.0675538778 -0.0804211199 + vertex -0.0368322805 0.0207231902 -0.172992647 + vertex -0.0411014594 0.00985964015 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0364805497 0.0675538778 -0.0804211199 + vertex -0.0411014594 0.00985964015 -0.173000291 + vertex -0.0373652019 0.0686673895 -0.0717139393 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0075972802 0.0824304894 -0.0765296891 + vertex -0.000346209999 0.0796616599 -0.0866326094 + vertex -0.0158161595 0.0778911412 -0.0852923244 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0075972802 0.0824304894 -0.0765296891 + vertex -0.0158161595 0.0778911412 -0.0852923244 + vertex -0.0261294506 0.0803357288 -0.0651604608 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0075972802 0.0824304894 -0.0765296891 + vertex -0.0261294506 0.0803357288 -0.0651604608 + vertex -0.0133210104 0.0845977664 -0.060104385 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0075972802 0.0824304894 -0.0765296891 + vertex -0.0133210104 0.0845977664 -0.060104385 + vertex 0.00230772002 0.084811084 -0.0666024163 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0075972802 0.0824304894 -0.0765296891 + vertex 0.00230772002 0.084811084 -0.0666024163 + vertex -0.000346209999 0.0796616599 -0.0866326094 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0423224084 -0.00272578001 -0.14312762 + vertex -0.0422642715 0.000426819985 -0.173000291 + vertex -0.0400216989 -0.0135810096 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0423224084 -0.00272578001 -0.14312762 + vertex -0.0400216989 -0.0135810096 -0.173000291 + vertex -0.0407775305 -0.0115430504 -0.144430101 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0423224084 -0.00272578001 -0.14312762 + vertex -0.0407775305 -0.0115430504 -0.144430101 + vertex -0.0368036814 0.00474837981 0.00716792932 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00468051992 -0.04194602 -0.144184932 + vertex -0.0148883499 -0.0394172892 -0.143870786 + vertex -0.0121225202 -0.0404820181 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00468051992 -0.04194602 -0.144184932 + vertex -0.0121225202 -0.0404820181 -0.172992647 + vertex 7.87000026e-05 -0.0425532497 -0.149019405 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00468051992 -0.04194602 -0.144184932 + vertex 0.00716731977 0.00475637941 0.0368076563 + vertex -0.00259745005 0.00475637941 0.0374069661 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00468051992 -0.04194602 -0.144184932 + vertex -0.00259745005 0.00475637941 0.0374069661 + vertex -0.012185229 0.00475637941 0.0354591869 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00468051992 -0.04194602 -0.144184932 + vertex -0.012185229 0.00475637941 0.0354591869 + vertex -0.02095435 0.00475637941 0.031096518 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00468051992 -0.04194602 -0.144184932 + vertex -0.02095435 0.00475637941 0.031096518 + vertex -0.0282853078 0.00475637941 0.0246097986 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00468051992 -0.04194602 -0.144184932 + vertex -0.0282853078 0.00475637941 0.0246097986 + vertex -0.0148883499 -0.0394172892 -0.143870786 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0181490108 0.0805948004 0.0169596989 + vertex 0.0229060184 0.0807546973 0.00908044912 + vertex 0.01138594 0.0844806582 0.00960045028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0181490108 0.0805948004 0.0169596989 + vertex 0.01138594 0.0844806582 0.00960045028 + vertex 0.00601678994 0.0823298395 0.0213311892 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0199960098 -0.0375456996 -0.148276225 + vertex 0.0123878988 -0.0402990207 -0.143978059 + vertex 0.0143148396 -0.0397001095 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0199960098 -0.0375456996 -0.148276225 + vertex 0.0143148396 -0.0397001095 -0.173000291 + vertex 0.0241655204 -0.0346676111 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0199960098 -0.0375456996 -0.148276225 + vertex 0.0241655204 -0.0346676111 -0.173000291 + vertex 0.0285177603 -0.0315399691 -0.147387505 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0199960098 -0.0375456996 -0.148276225 + vertex 0.0285177603 -0.0315399691 -0.147387505 + vertex 0.0354586318 0.00475637941 0.0121916095 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0199960098 -0.0375456996 -0.148276225 + vertex 0.0354586318 0.00475637941 0.0121916095 + vertex 0.0123878988 -0.0402990207 -0.143978059 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.02087643 0.0367356986 -0.172992647 + vertex 0.0121138096 0.0404871851 -0.172992647 + vertex 0.0175659508 0.0777844787 -0.0832403153 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.02087643 0.0367356986 -0.172992647 + vertex 0.0175659508 0.0777844787 -0.0832403153 + vertex 0.0307373274 0.0745890215 -0.0750600174 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.02087643 0.0367356986 -0.172992647 + vertex 0.0307373274 0.0745890215 -0.0750600174 + vertex 0.0292901993 0.0304554608 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.02087643 0.0367356986 -0.172992647 + vertex 0.0292901993 0.0304554608 -0.172992647 + vertex 0.0352537706 0.0232935082 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.02087643 0.0367356986 -0.172992647 + vertex 0.0352537706 0.0232935082 -0.173000291 + vertex -0.00664068945 0.041734919 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.02087643 0.0367356986 -0.172992647 + vertex -0.00664068945 0.041734919 -0.173000291 + vertex 0.0121138096 0.0404871851 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0374379493 0.0714238212 -0.0198541991 + vertex -0.0378288291 0.0609575547 -0.00149571989 + vertex -0.0366119184 0.0681855977 0.00263780006 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0374379493 0.0714238212 -0.0198541991 + vertex -0.0366119184 0.0681855977 0.00263780006 + vertex -0.0356752686 0.0745980814 -0.00833498035 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0374379493 0.0714238212 -0.0198541991 + vertex -0.0356752686 0.0745980814 -0.00833498035 + vertex -0.0357471295 0.0758390501 -0.05339377 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0374379493 0.0714238212 -0.0198541991 + vertex -0.0357471295 0.0758390501 -0.05339377 + vertex -0.0373652019 0.0686673895 -0.0717139393 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.0731109008 0.0332293771 + vertex 0.00643717963 0.0773006007 0.0291311201 + vertex -0.00700044958 0.0802030116 0.0254382677 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.0731109008 0.0332293771 + vertex -0.00700044958 0.0802030116 0.0254382677 + vertex -0.00736921979 0.0741103515 0.0318016 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.0731109008 0.0332293771 + vertex -0.00736921979 0.0741103515 0.0318016 + vertex -0.000377519988 0.0660667568 0.0360585079 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.0731109008 0.0332293771 + vertex 0.0136132604 0.0694568977 0.0320042968 + vertex 0.00643717963 0.0773006007 0.0291311201 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0283341706 0.0771886632 0.00881604943 + vertex 0.0309154987 0.0786038935 -0.00783262029 + vertex 0.0229060184 0.0807546973 0.00908044912 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0283341706 0.0771886632 0.00881604943 + vertex 0.0229060184 0.0807546973 0.00908044912 + vertex 0.0181490108 0.0805948004 0.0169596989 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0283341706 0.0771886632 0.00881604943 + vertex 0.0181490108 0.0805948004 0.0169596989 + vertex 0.0192110408 0.0756934807 0.0241514985 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0283341706 0.0771886632 0.00881604943 + vertex 0.0192110408 0.0756934807 0.0241514985 + vertex 0.0294699501 0.07259918 0.0149061587 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0283341706 0.0771886632 0.00881604943 + vertex 0.0294699501 0.07259918 0.0149061587 + vertex 0.0353996195 0.0719755217 -0.00198928011 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0283341706 0.0771886632 0.00881604943 + vertex 0.0353996195 0.0719755217 -0.00198928011 + vertex 0.0309154987 0.0786038935 -0.00783262029 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.02384267 0.0601260178 0.0280206073 + vertex 0.01671822 0.0606857091 0.0327887088 + vertex 0.0252882093 0.0380501188 0.0276680775 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.02384267 0.0601260178 0.0280206073 + vertex 0.0252882093 0.0380501188 0.0276680775 + vertex 0.0301484801 0.0593184605 0.0211372878 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.02384267 0.0601260178 0.0280206073 + vertex 0.0301484801 0.0593184605 0.0211372878 + vertex 0.0256053489 0.06762591 0.024186749 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.02384267 0.0601260178 0.0280206073 + vertex 0.0256053489 0.06762591 0.024186749 + vertex 0.0136132604 0.0694568977 0.0320042968 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.02384267 0.0601260178 0.0280206073 + vertex 0.0136132604 0.0694568977 0.0320042968 + vertex 0.01671822 0.0606857091 0.0327887088 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389000103 -0.0164923705 -0.173000291 + vertex 0.0416077003 -0.00738395983 -0.173000291 + vertex 0.0415744781 -0.00822409987 -0.143947408 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389000103 -0.0164923705 -0.173000291 + vertex 0.0415744781 -0.00822409987 -0.143947408 + vertex 0.0367903411 -0.0211671907 -0.145855173 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389000103 -0.0164923705 -0.173000291 + vertex 0.0367903411 -0.0211671907 -0.145855173 + vertex 0.0342819914 -0.0247024205 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389000103 -0.0164923705 -0.173000291 + vertex 0.0342819914 -0.0247024205 -0.172992647 + vertex 0.0241655204 -0.0346676111 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00265646004 0.0498996191 0.0373717211 + vertex -0.000377519988 0.0660667568 0.0360585079 + vertex -0.0117427101 0.0609655604 0.0351683386 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00265646004 0.0498996191 0.0373717211 + vertex -0.0117427101 0.0609655604 0.0351683386 + vertex -0.012185229 0.00475637941 0.0354591869 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00265646004 0.0498996191 0.0373717211 + vertex -0.012185229 0.00475637941 0.0354591869 + vertex -0.00259745005 0.00475637941 0.0374069661 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00265646004 0.0498996191 0.0373717211 + vertex -0.00259745005 0.00475637941 0.0374069661 + vertex -0.00038488998 0.0180530902 0.0374951102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00265646004 0.0498996191 0.0373717211 + vertex -0.00038488998 0.0180530902 0.0374951102 + vertex 0.00694607012 0.0560402609 0.0365961306 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00265646004 0.0498996191 0.0373717211 + vertex 0.00694607012 0.0560402609 0.0365961306 + vertex -0.000377519988 0.0660667568 0.0360585079 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0420483202 0.0180031396 -0.125712752 + vertex -0.0423224084 -0.00272578001 -0.14312762 + vertex -0.0368036814 0.00474837981 0.00716792932 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0420483202 0.0180031396 -0.125712752 + vertex -0.0368036814 0.00474837981 0.00716792932 + vertex -0.0378288291 0.0609575547 -0.00149571989 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0420483202 0.0180031396 -0.125712752 + vertex -0.0378288291 0.0609575547 -0.00149571989 + vertex -0.0374379493 0.0714238212 -0.0198541991 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0420483202 0.0180031396 -0.125712752 + vertex -0.0374379493 0.0714238212 -0.0198541991 + vertex -0.0373652019 0.0686673895 -0.0717139393 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0420483202 0.0180031396 -0.125712752 + vertex -0.0373652019 0.0686673895 -0.0717139393 + vertex -0.0411014594 0.00985964015 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0420483202 0.0180031396 -0.125712752 + vertex -0.0411014594 0.00985964015 -0.173000291 + vertex -0.0422642715 0.000426819985 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0420483202 0.0180031396 -0.125712752 + vertex -0.0422642715 0.000426819985 -0.173000291 + vertex -0.0423224084 -0.00272578001 -0.14312762 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0422555618 0.000210539991 -0.173000291 + vertex 0.0406940691 0.0113901803 -0.172992647 + vertex 0.0363930091 0.0721870884 -0.0623874813 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0422555618 0.000210539991 -0.173000291 + vertex 0.0363930091 0.0721870884 -0.0623874813 + vertex 0.042446591 0.00122535997 -0.142545357 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0422555618 0.000210539991 -0.173000291 + vertex 0.042446591 0.00122535997 -0.142545357 + vertex 0.0416077003 -0.00738395983 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0422555618 0.000210539991 -0.173000291 + vertex 0.0352537706 0.0232935082 -0.173000291 + vertex 0.0406940691 0.0113901803 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312590785 0.0284424592 -0.172992647 + vertex -0.0368322805 0.0207231902 -0.172992647 + vertex -0.0364805497 0.0675538778 -0.0804211199 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312590785 0.0284424592 -0.172992647 + vertex -0.0364805497 0.0675538778 -0.0804211199 + vertex -0.0314222015 0.0751905665 -0.0737567171 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312590785 0.0284424592 -0.172992647 + vertex -0.0314222015 0.0751905665 -0.0737567171 + vertex -0.0241825394 0.0346561484 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312590785 0.0284424592 -0.172992647 + vertex -0.0411014594 0.00985964015 -0.173000291 + vertex -0.0368322805 0.0207231902 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0143682892 0.0697447434 0.0318809189 + vertex -0.0117427101 0.0609655604 0.0351683386 + vertex -0.000377519988 0.0660667568 0.0360585079 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0143682892 0.0697447434 0.0318809189 + vertex -0.000377519988 0.0660667568 0.0360585079 + vertex -0.00736921979 0.0741103515 0.0318016 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0143682892 0.0697447434 0.0318809189 + vertex -0.00736921979 0.0741103515 0.0318016 + vertex -0.0199586991 0.0758294091 0.0240104906 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0143682892 0.0697447434 0.0318809189 + vertex -0.0199586991 0.0758294091 0.0240104906 + vertex -0.0207257196 0.0689611733 0.0285582375 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0143682892 0.0697447434 0.0318809189 + vertex -0.0207257196 0.0689611733 0.0285582375 + vertex -0.0200398304 0.0605177954 0.0313432962 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0143682892 0.0697447434 0.0318809189 + vertex -0.0200398304 0.0605177954 0.0313432962 + vertex -0.0117427101 0.0609655604 0.0351683386 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00514652021 0.086143747 -0.00134588988 + vertex 0.01138594 0.0844806582 0.00960045028 + vertex 0.0210990906 0.0833372921 -0.00630787993 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00514652021 0.086143747 -0.00134588988 + vertex 0.0210990906 0.0833372921 -0.00630787993 + vertex 0.0148449196 0.0847525001 -0.0517766178 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00514652021 0.086143747 -0.00134588988 + vertex -0.00591629976 0.086143747 -0.0011872499 + vertex -0.00038488998 0.08497639 0.0133990599 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00514652021 0.086143747 -0.00134588988 + vertex -0.00038488998 0.08497639 0.0133990599 + vertex 0.01138594 0.0844806582 0.00960045028 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0344039686 0.0766449571 -0.0462241247 + vertex 0.0320605189 0.0774559751 -0.0618051514 + vertex 0.0247645695 0.0822099075 -0.0462241247 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0344039686 0.0766449571 -0.0462241247 + vertex 0.0247645695 0.0822099075 -0.0462241247 + vertex 0.0309154987 0.0786038935 -0.00783262029 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0344039686 0.0766449571 -0.0462241247 + vertex 0.0309154987 0.0786038935 -0.00783262029 + vertex 0.0359822698 0.0740303919 -0.0179152284 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0344039686 0.0766449571 -0.0462241247 + vertex 0.0359822698 0.0740303919 -0.0179152284 + vertex 0.0363930091 0.0721870884 -0.0623874813 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0344039686 0.0766449571 -0.0462241247 + vertex 0.0363930091 0.0721870884 -0.0623874813 + vertex 0.0320605189 0.0774559751 -0.0618051514 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex -0.0241825394 0.0346561484 -0.172992647 + vertex -0.0314222015 0.0751905665 -0.0737567171 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex -0.0314222015 0.0751905665 -0.0737567171 + vertex -0.0158161595 0.0778911412 -0.0852923244 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex -0.0158161595 0.0778911412 -0.0852923244 + vertex -0.00664068945 0.041734919 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex -0.0411014594 0.00985964015 -0.173000291 + vertex -0.0312590785 0.0284424592 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0158269107 0.0391812399 -0.173000291 + vertex -0.0312590785 0.0284424592 -0.172992647 + vertex -0.0241825394 0.0346561484 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.010745869 0.0828101933 -0.0725365952 + vertex 0.00230772002 0.084811084 -0.0666024163 + vertex 0.0148449196 0.0847525001 -0.0517766178 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.010745869 0.0828101933 -0.0725365952 + vertex 0.0148449196 0.0847525001 -0.0517766178 + vertex 0.0205903798 0.081713751 -0.0666486397 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.010745869 0.0828101933 -0.0725365952 + vertex 0.0205903798 0.081713751 -0.0666486397 + vertex 0.0175659508 0.0777844787 -0.0832403153 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.010745869 0.0828101933 -0.0725365952 + vertex 0.0175659508 0.0777844787 -0.0832403153 + vertex -0.000346209999 0.0796616599 -0.0866326094 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.010745869 0.0828101933 -0.0725365952 + vertex -0.000346209999 0.0796616599 -0.0866326094 + vertex 0.00230772002 0.084811084 -0.0666024163 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00276147993 0.0421674699 -0.172992647 + vertex 0.0121138096 0.0404871851 -0.172992647 + vertex -0.00664068945 0.041734919 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00276147993 0.0421674699 -0.172992647 + vertex -0.00664068945 0.041734919 -0.173000291 + vertex -0.000346209999 0.0796616599 -0.0866326094 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00276147993 0.0421674699 -0.172992647 + vertex -0.000346209999 0.0796616599 -0.0866326094 + vertex 0.0121138096 0.0404871851 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.0861357599 -0.0484363064 + vertex -0.00591629976 0.086143747 -0.0011872499 + vertex 0.00514652021 0.086143747 -0.00134588988 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.0861357599 -0.0484363064 + vertex 0.00514652021 0.086143747 -0.00134588988 + vertex 0.0148449196 0.0847525001 -0.0517766178 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.0861357599 -0.0484363064 + vertex 0.0148449196 0.0847525001 -0.0517766178 + vertex 0.00230772002 0.084811084 -0.0666024163 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.0861357599 -0.0484363064 + vertex 0.00230772002 0.084811084 -0.0666024163 + vertex -0.0133210104 0.0845977664 -0.060104385 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00038488998 0.0861357599 -0.0484363064 + vertex -0.0133210104 0.0845977664 -0.060104385 + vertex -0.00591629976 0.086143747 -0.0011872499 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0319729112 0.0591265708 0.0195684899 + vertex -0.0274740402 0.0491560288 0.0257291086 + vertex -0.0266258903 0.0639799014 0.025306059 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0319729112 0.0591265708 0.0195684899 + vertex -0.0266258903 0.0639799014 0.025306059 + vertex -0.0306748804 0.0698326901 0.0169773307 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0319729112 0.0591265708 0.0195684899 + vertex -0.0306748804 0.0698326901 0.0169773307 + vertex -0.0348197408 0.0616451912 0.0133637991 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0319729112 0.0591265708 0.0195684899 + vertex -0.0348197408 0.0616451912 0.0133637991 + vertex -0.0336913392 0.00475637941 0.0164485183 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0319729112 0.0591265708 0.0195684899 + vertex -0.0336913392 0.00475637941 0.0164485183 + vertex -0.0282853078 0.00475637941 0.0246097986 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0319729112 0.0591265708 0.0195684899 + vertex -0.0282853078 0.00475637941 0.0246097986 + vertex -0.0274740402 0.0491560288 0.0257291086 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0360873789 0.071956709 -0.0713072494 + vertex -0.0314222015 0.0751905665 -0.0737567171 + vertex -0.0364805497 0.0675538778 -0.0804211199 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0360873789 0.071956709 -0.0713072494 + vertex -0.0364805497 0.0675538778 -0.0804211199 + vertex -0.0373652019 0.0686673895 -0.0717139393 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0360873789 0.071956709 -0.0713072494 + vertex -0.0373652019 0.0686673895 -0.0717139393 + vertex -0.0357471295 0.0758390501 -0.05339377 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00683543971 0.065467082 0.0354591869 + vertex -0.000377519988 0.0660667568 0.0360585079 + vertex 0.00694607012 0.0560402609 0.0365961306 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00683543971 0.065467082 0.0354591869 + vertex 0.00694607012 0.0560402609 0.0365961306 + vertex 0.01671822 0.0606857091 0.0327887088 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00683543971 0.065467082 0.0354591869 + vertex 0.01671822 0.0606857091 0.0327887088 + vertex 0.0136132604 0.0694568977 0.0320042968 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00683543971 0.065467082 0.0354591869 + vertex 0.0136132604 0.0694568977 0.0320042968 + vertex -0.00038488998 0.0731109008 0.0332293771 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00683543971 0.065467082 0.0354591869 + vertex -0.00038488998 0.0731109008 0.0332293771 + vertex -0.000377519988 0.0660667568 0.0360585079 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0126618501 0.0794754103 0.023790149 + vertex 0.0192110408 0.0756934807 0.0241514985 + vertex 0.0181490108 0.0805948004 0.0169596989 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0126618501 0.0794754103 0.023790149 + vertex 0.0181490108 0.0805948004 0.0169596989 + vertex 0.00601678994 0.0823298395 0.0213311892 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0126618501 0.0794754103 0.023790149 + vertex 0.00601678994 0.0823298395 0.0213311892 + vertex 0.00643717963 0.0773006007 0.0291311201 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0126618501 0.0794754103 0.023790149 + vertex 0.00643717963 0.0773006007 0.0291311201 + vertex 0.0192110408 0.0756934807 0.0241514985 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0215662085 -0.0366722867 -0.148145989 + vertex -0.0284434203 -0.0316065103 -0.147402808 + vertex -0.0248387009 -0.0341934711 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0215662085 -0.0366722867 -0.148145989 + vertex -0.0248387009 -0.0341934711 -0.173000291 + vertex -0.0121225202 -0.0404820181 -0.172992647 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0215662085 -0.0366722867 -0.148145989 + vertex -0.0121225202 -0.0404820181 -0.172992647 + vertex -0.0148883499 -0.0394172892 -0.143870786 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0215662085 -0.0366722867 -0.148145989 + vertex -0.0148883499 -0.0394172892 -0.143870786 + vertex -0.0336913392 0.00475637941 0.0164485183 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0215662085 -0.0366722867 -0.148145989 + vertex -0.0336913392 0.00475637941 0.0164485183 + vertex -0.0368036814 0.00474837981 0.00716792932 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0215662085 -0.0366722867 -0.148145989 + vertex -0.0368036814 0.00474837981 0.00716792932 + vertex -0.0284434203 -0.0316065103 -0.147402808 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0371060595 0.057647381 0.0068858997 + vertex -0.0348197408 0.0616451912 0.0133637991 + vertex -0.0366119184 0.0681855977 0.00263780006 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0371060595 0.057647381 0.0068858997 + vertex -0.0366119184 0.0681855977 0.00263780006 + vertex -0.0378288291 0.0609575547 -0.00149571989 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0371060595 0.057647381 0.0068858997 + vertex -0.0378288291 0.0609575547 -0.00149571989 + vertex -0.0368036814 0.00474837981 0.00716792932 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0371060595 0.057647381 0.0068858997 + vertex -0.0368036814 0.00474837981 0.00716792932 + vertex -0.0336913392 0.00475637941 0.0164485183 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0371060595 0.057647381 0.0068858997 + vertex -0.0336913392 0.00475637941 0.0164485183 + vertex -0.0348197408 0.0616451912 0.0133637991 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0333880782 0.0770592093 -0.0617681779 + vertex -0.0357471295 0.0758390501 -0.05339377 + vertex -0.0303282402 0.0801070705 -0.0462153107 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0333880782 0.0770592093 -0.0617681779 + vertex -0.0303282402 0.0801070705 -0.0462153107 + vertex -0.0261294506 0.0803357288 -0.0651604608 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0333880782 0.0770592093 -0.0617681779 + vertex -0.0261294506 0.0803357288 -0.0651604608 + vertex -0.0314222015 0.0751905665 -0.0737567171 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0333880782 0.0770592093 -0.0617681779 + vertex -0.0314222015 0.0751905665 -0.0737567171 + vertex -0.0360873789 0.071956709 -0.0713072494 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0333880782 0.0770592093 -0.0617681779 + vertex -0.0360873789 0.071956709 -0.0713072494 + vertex -0.0357471295 0.0758390501 -0.05339377 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0296792295 0.0751897618 0.0120329699 + vertex -0.0331013203 0.0748859271 0.00358964968 + vertex -0.0306748804 0.0698326901 0.0169773307 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0296792295 0.0751897618 0.0120329699 + vertex -0.0199586991 0.0758294091 0.0240104906 + vertex -0.0243100692 0.0791315958 0.0132051595 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0230341572 0.0830414519 -0.0462153107 + vertex -0.0303282402 0.0801070705 -0.0462153107 + vertex -0.0218836293 0.0833213031 -0.00617568009 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0230341572 0.0830414519 -0.0462153107 + vertex -0.0218836293 0.0833213031 -0.00617568009 + vertex -0.00591629976 0.086143747 -0.0011872499 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0230341572 0.0830414519 -0.0462153107 + vertex -0.00591629976 0.086143747 -0.0011872499 + vertex -0.0133210104 0.0845977664 -0.060104385 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0230341572 0.0830414519 -0.0462153107 + vertex -0.0133210104 0.0845977664 -0.060104385 + vertex -0.0261294506 0.0803357288 -0.0651604608 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0230341572 0.0830414519 -0.0462153107 + vertex -0.0261294506 0.0803357288 -0.0651604608 + vertex -0.0303282402 0.0801070705 -0.0462153107 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.02786492 0.0800750777 0.000654769945 + vertex -0.0218836293 0.0833213031 -0.00617568009 + vertex -0.0312870182 0.0792355388 -0.0122481594 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.02786492 0.0800750777 0.000654769945 + vertex -0.0312870182 0.0792355388 -0.0122481594 + vertex -0.0331013203 0.0748859271 0.00358964968 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.02786492 0.0800750777 0.000654769945 + vertex -0.0331013203 0.0748859271 0.00358964968 + vertex -0.0296792295 0.0751897618 0.0120329699 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.02786492 0.0800750777 0.000654769945 + vertex -0.0296792295 0.0751897618 0.0120329699 + vertex -0.0243100692 0.0791315958 0.0132051595 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.02786492 0.0800750777 0.000654769945 + vertex -0.0243100692 0.0791315958 0.0132051595 + vertex -0.0125834905 0.0833372921 0.0148532791 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.02786492 0.0800750777 0.000654769945 + vertex -0.0125834905 0.0833372921 0.0148532791 + vertex -0.0218836293 0.0833213031 -0.00617568009 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0134168891 0.0795633569 0.0236579403 + vertex -0.0125834905 0.0833372921 0.0148532791 + vertex -0.0243100692 0.0791315958 0.0132051595 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0134168891 0.0795633569 0.0236579403 + vertex -0.0243100692 0.0791315958 0.0132051595 + vertex -0.0199586991 0.0758294091 0.0240104906 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0134168891 0.0795633569 0.0236579403 + vertex -0.0199586991 0.0758294091 0.0240104906 + vertex -0.00736921979 0.0741103515 0.0318016 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0134168891 0.0795633569 0.0236579403 + vertex -0.00736921979 0.0741103515 0.0318016 + vertex -0.00700044958 0.0802030116 0.0254382677 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0134168891 0.0795633569 0.0236579403 + vertex -0.00700044958 0.0802030116 0.0254382677 + vertex -0.0125834905 0.0833372921 0.0148532791 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0259694904 0.0713918358 0.0222742297 + vertex -0.0207257196 0.0689611733 0.0285582375 + vertex -0.0199586991 0.0758294091 0.0240104906 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0259694904 0.0713918358 0.0222742297 + vertex -0.0199586991 0.0758294091 0.0240104906 + vertex -0.0296792295 0.0751897618 0.0120329699 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0259694904 0.0713918358 0.0222742297 + vertex -0.0296792295 0.0751897618 0.0120329699 + vertex -0.0306748804 0.0698326901 0.0169773307 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0259694904 0.0713918358 0.0222742297 + vertex -0.0306748804 0.0698326901 0.0169773307 + vertex -0.0266258903 0.0639799014 0.025306059 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0259694904 0.0713918358 0.0222742297 + vertex -0.0266258903 0.0639799014 0.025306059 + vertex -0.0207257196 0.0689611733 0.0285582375 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0336000696 0.0380501188 0.0166071579 + vertex 0.0354586318 0.00475637941 0.0121916095 + vertex 0.0357315093 0.0579432063 0.00941535924 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0336000696 0.0380501188 0.0166071579 + vertex 0.0357315093 0.0579432063 0.00941535924 + vertex 0.0301484801 0.0593184605 0.0211372878 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0336000696 0.0380501188 0.0166071579 + vertex 0.0301484801 0.0593184605 0.0211372878 + vertex 0.0310924985 0.00475637941 0.0209522098 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0336000696 0.0380501188 0.0166071579 + vertex 0.0310924985 0.00475637941 0.0209522098 + vertex 0.0354586318 0.00475637941 0.0121916095 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00623330008 -0.0417380705 -0.144154295 + vertex 0.0123878988 -0.0402990207 -0.143978059 + vertex 0.0246096887 0.00475637941 0.0282850172 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00623330008 -0.0417380705 -0.144154295 + vertex 0.0246096887 0.00475637941 0.0282850172 + vertex 0.0164527092 0.00475637941 0.0336964987 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00623330008 -0.0417380705 -0.144154295 + vertex 0.0164527092 0.00475637941 0.0336964987 + vertex 0.00716731977 0.00475637941 0.0368076563 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00623330008 -0.0417380705 -0.144154295 + vertex 0.00716731977 0.00475637941 0.0368076563 + vertex -0.00468051992 -0.04194602 -0.144184932 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00623330008 -0.0417380705 -0.144154295 + vertex -0.00468051992 -0.04194602 -0.144184932 + vertex 7.87000026e-05 -0.0425532497 -0.149019405 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00623330008 -0.0417380705 -0.144154295 + vertex 7.87000026e-05 -0.0425532497 -0.149019405 + vertex 0.00195581 -0.0422121994 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00623330008 -0.0417380705 -0.144154295 + vertex 0.00195581 -0.0422121994 -0.173000291 + vertex 0.0143148396 -0.0397001095 -0.173000291 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00623330008 -0.0417380705 -0.144154295 + vertex 0.0143148396 -0.0397001095 -0.173000291 + vertex 0.0123878988 -0.0402990207 -0.143978059 + endloop + endfacet + +endsolid AssimpScene diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link6.obj b/src/experiments/assets/robots/xarm7/meshes/collision/link6.obj new file mode 100644 index 0000000000000000000000000000000000000000..b79add388b7063f52c4381f371549f186954d701 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link6.obj @@ -0,0 +1,4522 @@ +# https://github.com/mikedh/trimesh + +o geometry_0 +v -0.03749430 -0.00000299 0.02634940 0.54509804 0.71372549 0.60000000 +v -0.03721995 -0.00000299 0.03614689 0.54509804 0.71372549 0.60000000 +v -0.03743802 0.00195718 0.02633111 0.54509804 0.71372549 0.60000000 +v -0.03748726 -0.00031867 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.03727623 -0.00403344 0.02626405 0.54509804 0.71372549 0.60000000 +v -0.03718478 -0.00404812 0.03303145 0.54509804 0.71372549 0.60000000 +v -0.03624216 -0.00000299 0.04227414 0.54509804 0.71372549 0.60000000 +v -0.03646726 0.00428441 0.03995127 0.54509804 0.71372549 0.60000000 +v -0.03718478 0.00404214 0.03303755 0.54509804 0.71372549 0.60000000 +v -0.03646726 -0.00429773 0.03995127 0.54509804 0.71372549 0.60000000 +v -0.03687526 0.00675114 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.01721866 -0.00439656 0.54509804 0.71372549 0.60000000 +v -0.03682602 -0.00703608 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.03678381 -0.00702874 0.02606895 0.54509804 0.71372549 0.60000000 +v -0.03662201 -0.00801250 0.02600798 0.54509804 0.71372549 0.60000000 +v -0.03643208 -0.00846032 0.03272051 0.54509804 0.71372549 0.60000000 +v -0.03457497 -0.00000299 0.04674916 0.54509804 0.71372549 0.60000000 +v -0.03469456 0.00444592 0.04584074 0.54509804 0.71372549 0.60000000 +v -0.03573566 0.00437985 0.04304843 0.54509804 0.71372549 0.60000000 +v -0.03573566 -0.00438583 0.04304233 0.54509804 0.71372549 0.60000000 +v -0.03469456 -0.00445190 0.04584074 0.54509804 0.71372549 0.60000000 +v -0.03563015 0.00894623 0.03957937 0.54509804 0.71372549 0.60000000 +v -0.03643208 0.00845435 0.03272051 0.54509804 0.71372549 0.60000000 +v -0.03650947 0.00851308 0.02596531 0.54509804 0.71372549 0.60000000 +v -0.03563015 -0.00895220 0.03957937 0.54509804 0.71372549 0.60000000 +v -0.03506035 0.01327767 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.01783534 -0.00437217 0.54509804 0.71372549 0.60000000 +v 0.02596417 -0.02706353 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.02300967 -0.02961101 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.02295339 -0.02965506 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.01970344 -0.03190888 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.01856385 -0.03258429 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.01531390 -0.03417738 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.01322464 -0.03499228 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.00972145 -0.03604945 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.00906020 -0.03624767 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.00759702 -0.03658537 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.00399534 -0.03722408 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.00024594 -0.03749571 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.00000027 -0.03749571 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.00666197 -0.03690106 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.01318297 -0.03510240 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.01987281 -0.03179142 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.02570443 -0.02729846 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.02729423 -0.02570536 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.03170488 -0.02000841 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.03490559 -0.01368743 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.03173302 0.01995838 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.02722389 0.02577280 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.02480401 0.02810738 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.01897942 0.03232871 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.01259207 0.03531667 -0.00433559 0.54509804 0.71372549 0.60000000 +v -0.00590224 0.03702723 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.01837997 -0.00435998 0.54509804 0.71372549 0.60000000 +v -0.03555277 -0.01189612 0.02558731 0.54509804 0.71372549 0.60000000 +v -0.03517994 -0.01271102 0.03219010 0.54509804 0.71372549 0.60000000 +v -0.03345648 -0.00000299 0.04834651 0.54509804 0.71372549 0.60000000 +v -0.03330172 0.00448263 0.04830993 0.54509804 0.71372549 0.60000000 +v -0.03330172 -0.00448861 0.04830383 0.54509804 0.71372549 0.60000000 +v -0.03378711 0.00926191 0.04542616 0.54509804 0.71372549 0.60000000 +v -0.03486339 0.00912976 0.04265214 0.54509804 0.71372549 0.60000000 +v -0.03486339 -0.00913574 0.04265214 0.54509804 0.71372549 0.60000000 +v -0.03379413 -0.00926788 0.04542616 0.54509804 0.71372549 0.60000000 +v -0.03423028 0.01341716 0.03895750 0.54509804 0.71372549 0.60000000 +v -0.03517994 0.01270504 0.03219010 0.54509804 0.71372549 0.60000000 +v -0.03423028 -0.01341579 0.03895140 0.54509804 0.71372549 0.60000000 +v -0.03424435 0.01525252 0.02506908 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.01969272 -0.00406734 0.54509804 0.71372549 0.60000000 +v 0.02753990 -0.02545575 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.01994968 -0.00400027 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02088938 -0.00366495 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02113165 -0.00354301 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02186579 -0.00310405 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02215211 -0.00290285 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02273942 -0.00237244 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02298903 -0.00213466 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02384798 -0.00087263 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02469959 0.00088933 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02530158 0.00247449 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02843638 0.01074170 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02901635 0.01236953 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.03211444 0.02243528 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.03258429 0.02419115 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.03289263 0.02564827 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.03303946 0.02639208 0.54509804 0.71372549 0.60000000 +v 0.00438224 -0.03724610 0.00966257 0.54509804 0.71372549 0.60000000 +v 0.00272209 -0.03740027 0.00455348 0.54509804 0.71372549 0.60000000 +v 0.00219450 -0.03742230 0.00265739 0.54509804 0.71372549 0.60000000 +v 0.00668253 -0.03688637 0.00165143 0.54509804 0.71372549 0.60000000 +v 0.00196236 -0.03745166 0.01071121 0.54509804 0.71372549 0.60000000 +v 0.00125891 -0.03748103 0.01098557 0.54509804 0.71372549 0.60000000 +v -0.00000027 -0.03750305 0.01148550 0.54509804 0.71372549 0.60000000 +v -0.00174483 -0.03745900 0.01218053 0.54509804 0.71372549 0.60000000 +v -0.00473451 -0.03718737 0.01852116 0.54509804 0.71372549 0.60000000 +v -0.00589520 -0.03703320 0.01382666 0.54509804 0.71372549 0.60000000 +v -0.00851908 -0.03649728 0.02028922 0.54509804 0.71372549 0.60000000 +v -0.00995413 -0.03615223 0.01543620 0.54509804 0.71372549 0.60000000 +v -0.01225442 -0.03540340 0.02202070 0.54509804 0.71372549 0.60000000 +v -0.01387939 -0.03483077 0.01699697 0.54509804 0.71372549 0.60000000 +v -0.01590534 -0.03391309 0.02369121 0.54509804 0.71372549 0.60000000 +v -0.01762176 -0.03309819 0.01847848 0.54509804 0.71372549 0.60000000 +v -0.01942964 -0.03201900 0.02528247 0.54509804 0.71372549 0.60000000 +v -0.02099130 -0.03105727 0.01981367 0.54509804 0.71372549 0.60000000 +v -0.02113199 -0.03096917 0.01986854 0.54509804 0.71372549 0.60000000 +v -0.02438194 -0.02848776 0.02115496 0.54509804 0.71372549 0.60000000 +v -0.02590140 -0.02701948 0.02816624 0.54509804 0.71372549 0.60000000 +v -0.02711134 -0.02588156 0.02224018 0.54509804 0.71372549 0.60000000 +v -0.02732237 -0.02567599 0.02232554 0.54509804 0.71372549 0.60000000 +v -0.02974928 -0.02279815 0.02328883 0.54509804 0.71372549 0.60000000 +v -0.02993922 -0.02257057 0.02336199 0.54509804 0.71372549 0.60000000 +v -0.03219730 -0.01921553 0.02425821 0.54509804 0.71372549 0.60000000 +v -0.03399814 -0.01578708 0.02497153 0.54509804 0.71372549 0.60000000 +v -0.03406848 -0.01564759 0.02500202 0.54509804 0.71372549 0.60000000 +v -0.03553870 -0.01194017 0.02558121 0.54509804 0.71372549 0.60000000 +v -0.03344945 0.01674283 0.03145239 0.54509804 0.71372549 0.60000000 +v -0.03129688 0.02050165 0.03052568 0.54509804 0.71372549 0.60000000 +v -0.03071302 0.02150008 0.02366683 0.54509804 0.71372549 0.60000000 +v -0.02876445 0.02393744 0.02942217 0.54509804 0.71372549 0.60000000 +v -0.02602099 0.02699148 0.02180731 0.54509804 0.71372549 0.60000000 +v -0.02277807 0.02970781 0.02678227 0.54509804 0.71372549 0.60000000 +v -0.02061847 0.03130825 0.01966735 0.54509804 0.71372549 0.60000000 +v -0.01942964 0.03201302 0.02528857 0.54509804 0.71372549 0.60000000 +v -0.01590534 0.03390712 0.02369121 0.54509804 0.71372549 0.60000000 +v -0.01417484 0.03470733 0.01711281 0.54509804 0.71372549 0.60000000 +v -0.01225442 0.03539743 0.02202070 0.54509804 0.71372549 0.60000000 +v -0.00851908 0.03649130 0.02028922 0.54509804 0.71372549 0.60000000 +v -0.00720362 0.03679230 0.01434488 0.54509804 0.71372549 0.60000000 +v -0.00473451 0.03718140 0.01852116 0.54509804 0.71372549 0.60000000 +v -0.00000027 0.03749708 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.00024594 0.03748974 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.00223671 0.03740164 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.00575397 0.03694647 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.00941193 0.03613891 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.01080476 0.03574982 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.01480741 0.03435494 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.01669970 0.03352536 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.01989337 0.03178544 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.02041393 0.03145507 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.02360760 0.02912784 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.02407188 0.02871672 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.02656210 0.02647024 -0.00433559 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.01882780 -0.00432949 0.54509804 0.71372549 0.60000000 +v -0.03344945 -0.01674881 0.03145239 0.54509804 0.71372549 0.60000000 +v -0.03207068 -0.00000299 0.05030357 0.54509804 0.71372549 0.60000000 +v -0.03155012 0.00449731 0.05042551 0.54509804 0.71372549 0.60000000 +v -0.03238020 0.00934266 0.04787706 0.54509804 0.71372549 0.60000000 +v -0.03238723 -0.00934864 0.04787706 0.54509804 0.71372549 0.60000000 +v -0.03155716 -0.00450329 0.05042551 0.54509804 0.71372549 0.60000000 +v -0.03228875 0.01386499 0.04472504 0.54509804 0.71372549 0.60000000 +v -0.03340724 0.01367411 0.04198759 0.54509804 0.71372549 0.60000000 +v -0.03340724 -0.01368009 0.04198149 0.54509804 0.71372549 0.60000000 +v -0.03228875 -0.01387096 0.04472504 0.54509804 0.71372549 0.60000000 +v -0.03231689 0.01761646 0.03809176 0.54509804 0.71372549 0.60000000 +v -0.03231689 -0.01762244 0.03808567 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.03298807 0.02898320 0.54509804 0.71372549 0.60000000 +v 0.00639411 -0.03685701 0.02764801 0.54509804 0.71372549 0.60000000 +v 0.00705536 -0.03686435 0.02241699 0.54509804 0.71372549 0.60000000 +v 0.00479728 -0.03718737 0.01896622 0.54509804 0.71372549 0.60000000 +v 0.00286278 -0.03738559 0.01493017 0.54509804 0.71372549 0.60000000 +v 0.00113229 -0.03742964 0.02102693 0.54509804 0.71372549 0.60000000 +v -0.00092883 -0.03748103 0.01672262 0.54509804 0.71372549 0.60000000 +v -0.00257491 -0.03730483 0.02309373 0.54509804 0.71372549 0.60000000 +v -0.00631727 -0.03679093 0.02513615 0.54509804 0.71372549 0.60000000 +v -0.01005261 -0.03588059 0.02712369 0.54509804 0.71372549 0.60000000 +v -0.01374574 -0.03455914 0.02905636 0.54509804 0.71372549 0.60000000 +v -0.01735445 -0.03281187 0.03090368 0.54509804 0.71372549 0.60000000 +v -0.02084358 -0.03063147 0.03264126 0.54509804 0.71372549 0.60000000 +v -0.02277807 -0.02971379 0.02677617 0.54509804 0.71372549 0.60000000 +v -0.02720279 -0.02495653 0.03571402 0.54509804 0.71372549 0.60000000 +v -0.02876445 -0.02394342 0.02942217 0.54509804 0.71372549 0.60000000 +v -0.02414277 -0.02801058 0.03425080 0.54509804 0.71372549 0.60000000 +v -0.03129688 -0.02050762 0.03051959 0.54509804 0.71372549 0.60000000 +v -0.02995329 0.02147806 0.03700044 0.54509804 0.71372549 0.60000000 +v -0.02720279 0.02495056 0.03571402 0.54509804 0.71372549 0.60000000 +v -0.02590140 0.02701350 0.02816624 0.54509804 0.71372549 0.60000000 +v -0.02084358 0.03062549 0.03264126 0.54509804 0.71372549 0.60000000 +v -0.02414277 0.02800460 0.03425080 0.54509804 0.71372549 0.60000000 +v -0.01735445 0.03280590 0.03090368 0.54509804 0.71372549 0.60000000 +v -0.01373870 0.03455316 0.02905636 0.54509804 0.71372549 0.60000000 +v -0.01004558 0.03587462 0.02712369 0.54509804 0.71372549 0.60000000 +v -0.00631727 0.03678496 0.02513615 0.54509804 0.71372549 0.60000000 +v -0.00257491 0.03729886 0.02309373 0.54509804 0.71372549 0.60000000 +v -0.00092883 0.03747505 0.01672871 0.54509804 0.71372549 0.60000000 +v -0.00000027 0.03749708 0.01148550 0.54509804 0.71372549 0.60000000 +v 0.00196236 0.03744569 0.01071121 0.54509804 0.71372549 0.60000000 +v 0.00255326 0.03740164 0.00393161 0.54509804 0.71372549 0.60000000 +v 0.00277837 0.03738696 0.00474248 0.54509804 0.71372549 0.60000000 +v 0.00386872 0.03728418 0.00807131 0.54509804 0.71372549 0.60000000 +v 0.00441038 0.03723279 0.00974183 0.54509804 0.71372549 0.60000000 +v 0.00747040 0.03674825 0.00270617 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.03303348 0.02639208 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02873140 0.00347436 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02848913 0.00269397 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02805599 0.00131001 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02760082 0.00046256 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02707224 -0.00042757 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02650695 -0.00107382 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02553053 -0.00205540 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02533966 -0.00220172 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02335747 -0.00348205 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02091277 -0.00412830 0.54509804 0.71372549 0.60000000 +v -0.03179633 -0.00000299 0.05051696 0.54509804 0.71372549 0.60000000 +v -0.02942570 0.00448997 0.05218747 0.54509804 0.71372549 0.60000000 +v -0.02942570 -0.00449595 0.05218747 0.54509804 0.71372549 0.60000000 +v -0.03062157 0.00937203 0.04998044 0.54509804 0.71372549 0.60000000 +v -0.03084667 0.01397511 0.04715154 0.54509804 0.71372549 0.60000000 +v -0.03062157 -0.00937800 0.04998044 0.54509804 0.71372549 0.60000000 +v -0.03085371 -0.01398109 0.04714545 0.54509804 0.71372549 0.60000000 +v -0.03024170 0.01815973 0.04376175 0.54509804 0.71372549 0.60000000 +v -0.03141647 0.01793215 0.04106698 0.54509804 0.71372549 0.60000000 +v -0.03141647 -0.01793812 0.04106088 0.54509804 0.71372549 0.60000000 +v -0.03024170 -0.01816571 0.04375565 0.54509804 0.71372549 0.60000000 +v -0.02995329 -0.02148404 0.03700044 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.03298073 0.02913562 0.54509804 0.71372549 0.60000000 +v 0.00977069 -0.03633576 0.02972091 0.54509804 0.71372549 0.60000000 +v 0.00295423 -0.03691574 0.03017207 0.54509804 0.71372549 0.60000000 +v 0.00353810 -0.03722408 0.02472766 0.54509804 0.71372549 0.60000000 +v 0.00652777 -0.03640918 0.03242177 0.54509804 0.71372549 0.60000000 +v -0.00005655 -0.03721674 0.02703224 0.54509804 0.71372549 0.60000000 +v -0.00370043 -0.03683498 0.02931243 0.54509804 0.71372549 0.60000000 +v -0.00738653 -0.03604945 0.03154384 0.54509804 0.71372549 0.60000000 +v -0.01106558 -0.03485279 0.03369600 0.54509804 0.71372549 0.60000000 +v -0.01470947 -0.03322299 0.03575061 0.54509804 0.71372549 0.60000000 +v -0.01826190 -0.03113803 0.03768937 0.54509804 0.71372549 0.60000000 +v -0.02166661 -0.02858320 0.03948182 0.54509804 0.71372549 0.60000000 +v -0.02614057 -0.02531627 0.03854292 0.54509804 0.71372549 0.60000000 +v -0.02896845 -0.02183642 0.03990860 0.54509804 0.71372549 0.60000000 +v -0.02896845 0.02183045 0.03990860 0.54509804 0.71372549 0.60000000 +v -0.02484622 0.02555990 0.04110966 0.54509804 0.71372549 0.60000000 +v -0.02165958 0.02857723 0.03948182 0.54509804 0.71372549 0.60000000 +v -0.01826190 0.03113205 0.03768937 0.54509804 0.71372549 0.60000000 +v -0.01470947 0.03321702 0.03575670 0.54509804 0.71372549 0.60000000 +v -0.01106558 0.03484682 0.03369600 0.54509804 0.71372549 0.60000000 +v -0.00738653 0.03604347 0.03154384 0.54509804 0.71372549 0.60000000 +v -0.00370043 0.03682901 0.02931852 0.54509804 0.71372549 0.60000000 +v 0.00113229 0.03742366 0.02103303 0.54509804 0.71372549 0.60000000 +v -0.00005655 0.03721076 0.02703224 0.54509804 0.71372549 0.60000000 +v 0.00286982 0.03737961 0.01493017 0.54509804 0.71372549 0.60000000 +v 0.00480431 0.03718140 0.01896622 0.54509804 0.71372549 0.60000000 +v 0.00535300 0.03710798 0.01203421 0.54509804 0.71372549 0.60000000 +v 0.00706239 0.03685837 0.02241699 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.03301880 0.02717856 0.54509804 0.71372549 0.60000000 +v -0.02960859 -0.00000299 0.05219357 0.54509804 0.71372549 0.60000000 +v -0.02840569 -0.00000299 0.05311418 0.54509804 0.71372549 0.60000000 +v -0.02691437 0.00444592 0.05358363 0.54509804 0.71372549 0.60000000 +v -0.02599284 0.00926191 0.05313247 0.54509804 0.71372549 0.60000000 +v -0.02849010 0.00934266 0.05173631 0.54509804 0.71372549 0.60000000 +v -0.02849714 -0.00934864 0.05173631 0.54509804 0.71372549 0.60000000 +v -0.02692140 -0.00445190 0.05358363 0.54509804 0.71372549 0.60000000 +v -0.02907397 0.01401182 0.04923664 0.54509804 0.71372549 0.60000000 +v -0.02877149 0.01829188 0.04614558 0.54509804 0.71372549 0.60000000 +v -0.02907397 -0.01401779 0.04923664 0.54509804 0.71372549 0.60000000 +v -0.02877149 -0.01829785 0.04613949 0.54509804 0.71372549 0.60000000 +v -0.02773741 0.02208006 0.04254240 0.54509804 0.71372549 0.60000000 +v -0.02773741 -0.02207869 0.04254240 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.03295136 0.02928804 0.54509804 0.71372549 0.60000000 +v 0.01548272 -0.03495557 0.03429348 0.54509804 0.71372549 0.60000000 +v 0.01069925 -0.03574111 0.03377526 0.54509804 0.71372549 0.60000000 +v 0.01821915 -0.03500696 0.03136094 0.54509804 0.71372549 0.60000000 +v 0.01371002 -0.03571174 0.03094026 0.54509804 0.71372549 0.60000000 +v 0.00319340 -0.03609350 0.03506777 0.54509804 0.71372549 0.60000000 +v -0.00056303 -0.03659271 0.03265955 0.54509804 0.71372549 0.60000000 +v -0.00412954 -0.03588059 0.03507387 0.54509804 0.71372549 0.60000000 +v -0.00773121 -0.03475002 0.03740283 0.54509804 0.71372549 0.60000000 +v -0.01132586 -0.03318629 0.03961595 0.54509804 0.71372549 0.60000000 +v -0.01666506 -0.03121144 0.03983543 0.54509804 0.71372549 0.60000000 +v -0.02008384 -0.02869333 0.04170104 0.54509804 0.71372549 0.60000000 +v -0.02329862 -0.02569068 0.04338985 0.54509804 0.71372549 0.60000000 +v -0.02484622 -0.02556588 0.04110966 0.54509804 0.71372549 0.60000000 +v -0.02329862 0.02568470 0.04338985 0.54509804 0.71372549 0.60000000 +v -0.02621795 0.02221220 0.04488355 0.54509804 0.71372549 0.60000000 +v -0.02008384 0.02868735 0.04170104 0.54509804 0.71372549 0.60000000 +v -0.01666506 0.03120547 0.03983543 0.54509804 0.71372549 0.60000000 +v -0.01131882 0.03318031 0.03962205 0.54509804 0.71372549 0.60000000 +v -0.00773121 0.03474404 0.03740283 0.54509804 0.71372549 0.60000000 +v -0.00412954 0.03587462 0.03507996 0.54509804 0.71372549 0.60000000 +v -0.00056303 0.03658674 0.03265955 0.54509804 0.71372549 0.60000000 +v 0.00353810 0.03721810 0.02472766 0.54509804 0.71372549 0.60000000 +v 0.00295423 0.03690976 0.03017207 0.54509804 0.71372549 0.60000000 +v 0.00639411 0.03684369 0.02764801 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.03297475 0.02913562 0.54509804 0.71372549 0.60000000 +v -0.02714651 -0.00000299 0.05360192 0.54509804 0.71372549 0.60000000 +v -0.02374883 -0.00000299 0.05491272 0.54509804 0.71372549 0.60000000 +v -0.02403022 0.00438719 0.05463227 0.54509804 0.71372549 0.60000000 +v -0.02312276 0.00912976 0.05417501 0.54509804 0.71372549 0.60000000 +v -0.02445932 0.01384296 0.05235818 0.54509804 0.71372549 0.60000000 +v -0.02694251 0.01396043 0.05097421 0.54509804 0.71372549 0.60000000 +v -0.02599284 -0.00926788 0.05313247 0.54509804 0.71372549 0.60000000 +v -0.02694251 -0.01396640 0.05097421 0.54509804 0.71372549 0.60000000 +v -0.02403725 -0.00439317 0.05462618 0.54509804 0.71372549 0.60000000 +v -0.02697065 0.01832858 0.04820019 0.54509804 0.71372549 0.60000000 +v -0.02697768 -0.01832722 0.04820019 0.54509804 0.71372549 0.60000000 +v -0.02622499 -0.02221818 0.04488355 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.03246683 0.03152555 0.54509804 0.71372549 0.60000000 +v 0.00759702 -0.03536670 0.03654318 0.54509804 0.71372549 0.60000000 +v 0.02084303 -0.03411131 0.03408619 0.54509804 0.71372549 0.60000000 +v 0.01265484 -0.03447838 0.03713457 0.54509804 0.71372549 0.60000000 +v -0.00021131 -0.03538138 0.03762841 0.54509804 0.71372549 0.60000000 +v -0.00365119 -0.03426548 0.04007930 0.54509804 0.71372549 0.60000000 +v -0.00711218 -0.03272377 0.04240217 0.54509804 0.71372549 0.60000000 +v -0.01281014 -0.03100588 0.04328010 0.54509804 0.71372549 0.60000000 +v -0.01485719 -0.03116739 0.04170104 0.54509804 0.71372549 0.60000000 +v -0.01826190 -0.02867130 0.04362152 0.54509804 0.71372549 0.60000000 +v -0.02147668 -0.02569802 0.04536520 0.54509804 0.71372549 0.60000000 +v -0.02441008 -0.02224020 0.04690158 0.54509804 0.71372549 0.60000000 +v -0.02147668 0.02569204 0.04536520 0.54509804 0.71372549 0.60000000 +v -0.02441008 0.02223423 0.04690158 0.54509804 0.71372549 0.60000000 +v -0.01826190 0.02866533 0.04362762 0.54509804 0.71372549 0.60000000 +v -0.01485016 0.03116142 0.04170104 0.54509804 0.71372549 0.60000000 +v -0.00711218 0.03271046 0.04240217 0.54509804 0.71372549 0.60000000 +v -0.01281014 0.03099990 0.04328010 0.54509804 0.71372549 0.60000000 +v -0.00365119 0.03425950 0.04007930 0.54509804 0.71372549 0.60000000 +v -0.00021131 0.03537540 0.03762841 0.54509804 0.71372549 0.60000000 +v 0.00319340 0.03608752 0.03506777 0.54509804 0.71372549 0.60000000 +v 0.00652777 0.03640320 0.03242177 0.54509804 0.71372549 0.60000000 +v 0.00977069 0.03632979 0.02972091 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.03294539 0.02928804 0.54509804 0.71372549 0.60000000 +v 0.01371002 0.03570577 0.03094026 0.54509804 0.71372549 0.60000000 +v 0.01821915 0.03500099 0.03136094 0.54509804 0.71372549 0.60000000 +v 0.01069925 0.03573513 0.03377526 0.54509804 0.71372549 0.60000000 +v 0.01548272 0.03494960 0.03429348 0.54509804 0.71372549 0.60000000 +v -0.01696755 -0.00006906 0.05699781 0.54509804 0.71372549 0.60000000 +v -0.01655955 0.00380722 0.05694904 0.54509804 0.71372549 0.60000000 +v -0.01534258 0.00751465 0.05679662 0.54509804 0.71372549 0.60000000 +v -0.01444215 0.00885079 0.05676004 0.54509804 0.71372549 0.60000000 +v -0.01424519 0.00923988 0.05672346 0.54509804 0.71372549 0.60000000 +v -0.01411153 0.00937203 0.05672956 0.54509804 0.71372549 0.60000000 +v -0.02161737 0.01365209 0.05340073 0.54509804 0.71372549 0.60000000 +v -0.02238413 0.01810100 0.05129734 0.54509804 0.71372549 0.60000000 +v -0.02484622 0.01825517 0.04991947 0.54509804 0.71372549 0.60000000 +v -0.02312979 -0.00913574 0.05417501 0.54509804 0.71372549 0.60000000 +v -0.02445932 -0.01384894 0.05235818 0.54509804 0.71372549 0.60000000 +v -0.02484622 -0.01826115 0.04991947 0.54509804 0.71372549 0.60000000 +v -0.01527926 -0.00765277 0.05679052 0.54509804 0.71372549 0.60000000 +v -0.01653141 -0.00395268 0.05694294 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.03240810 0.03175113 0.54509804 0.71372549 0.60000000 +v 0.00442445 -0.03460319 0.03919527 0.54509804 0.71372549 0.60000000 +v 0.01833874 -0.03350931 0.03695776 0.54509804 0.71372549 0.60000000 +v 0.00976365 -0.03361209 0.03983543 0.54509804 0.71372549 0.60000000 +v 0.00119560 -0.03344324 0.04171933 0.54509804 0.71372549 0.60000000 +v -0.00204028 -0.03187217 0.04408488 0.54509804 0.71372549 0.60000000 +v -0.00525506 -0.02988264 0.04629191 0.54509804 0.71372549 0.60000000 +v -0.01053096 -0.03073425 0.04456652 0.54509804 0.71372549 0.60000000 +v -0.01384422 -0.02828221 0.04656626 0.54509804 0.71372549 0.60000000 +v -0.01618672 -0.02853916 0.04524936 0.54509804 0.71372549 0.60000000 +v -0.01937336 -0.02558790 0.04702961 0.54509804 0.71372549 0.60000000 +v -0.02229269 -0.02215211 0.04859648 0.54509804 0.71372549 0.60000000 +v -0.01937336 0.02558192 0.04702961 0.54509804 0.71372549 0.60000000 +v -0.02229269 0.02214613 0.04859648 0.54509804 0.71372549 0.60000000 +v -0.01617968 0.02853318 0.04524936 0.54509804 0.71372549 0.60000000 +v -0.00204028 0.03186619 0.04408488 0.54509804 0.71372549 0.60000000 +v -0.01052392 0.03072827 0.04457262 0.54509804 0.71372549 0.60000000 +v -0.00525506 0.02987667 0.04629191 0.54509804 0.71372549 0.60000000 +v -0.01384422 0.02827623 0.04656626 0.54509804 0.71372549 0.60000000 +v 0.00119560 0.03342992 0.04171933 0.54509804 0.71372549 0.60000000 +v 0.00442445 0.03459721 0.03919527 0.54509804 0.71372549 0.60000000 +v 0.00759702 0.03536072 0.03654318 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.03243883 0.03159871 0.54509804 0.71372549 0.60000000 +v 0.01265484 0.03447241 0.03713457 0.54509804 0.71372549 0.60000000 +v 0.02084303 0.03410533 0.03408619 0.54509804 0.71372549 0.60000000 +v -0.01454064 0.00194983 0.05747336 0.54509804 0.71372549 0.60000000 +v -0.01454064 -0.00229352 0.05746117 0.54509804 0.71372549 0.60000000 +v -0.01454767 0.00339610 0.05739410 0.54509804 0.71372549 0.60000000 +v -0.01455471 0.00401278 0.05735752 0.54509804 0.71372549 0.60000000 +v -0.01462505 0.00795513 0.05688198 0.54509804 0.71372549 0.60000000 +v -0.01462505 0.00804323 0.05686978 0.54509804 0.71372549 0.60000000 +v -0.01458284 0.00835891 0.05682101 0.54509804 0.71372549 0.60000000 +v -0.01453360 0.00867459 0.05677223 0.54509804 0.71372549 0.60000000 +v -0.01364022 0.00977581 0.05674175 0.54509804 0.71372549 0.60000000 +v -0.01379498 0.00968037 0.05672956 0.54509804 0.71372549 0.60000000 +v -0.01335180 0.01086968 0.05654665 0.54509804 0.71372549 0.60000000 +v -0.01304932 0.00820474 0.05711975 0.54509804 0.71372549 0.60000000 +v -0.01069978 0.01371816 0.05621133 0.54509804 0.71372549 0.60000000 +v -0.01959143 0.01785139 0.05233379 0.54509804 0.71372549 0.60000000 +v -0.01985874 0.02194791 0.04995606 0.54509804 0.71372549 0.60000000 +v -0.01424519 -0.00924586 0.05672346 0.54509804 0.71372549 0.60000000 +v -0.01437181 -0.00899625 0.05674785 0.54509804 0.71372549 0.60000000 +v -0.01444215 -0.00885676 0.05676004 0.54509804 0.71372549 0.60000000 +v -0.02162441 -0.01365806 0.05340073 0.54509804 0.71372549 0.60000000 +v -0.02238413 -0.01810697 0.05129734 0.54509804 0.71372549 0.60000000 +v -0.01459691 -0.00826211 0.05683930 0.54509804 0.71372549 0.60000000 +v -0.01462505 -0.00804920 0.05686978 0.54509804 0.71372549 0.60000000 +v -0.01458988 -0.00632397 0.05713194 0.54509804 0.71372549 0.60000000 +v -0.01453360 -0.00868057 0.05677223 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.03155649 0.03371429 0.54509804 0.71372549 0.60000000 +v 0.02459243 -0.03252556 0.03614689 0.54509804 0.71372549 0.60000000 +v 0.01577114 -0.03250353 0.03966472 0.54509804 0.71372549 0.60000000 +v 0.00682322 -0.03236405 0.04237778 0.54509804 0.71372549 0.60000000 +v 0.00386872 -0.03073425 0.04474942 0.54509804 0.71372549 0.60000000 +v 0.00093532 -0.02871535 0.04693816 0.54509804 0.71372549 0.60000000 +v -0.00837839 -0.02745997 0.04830993 0.54509804 0.71372549 0.60000000 +v -0.01430850 -0.02502261 0.04940125 0.54509804 0.71372549 0.60000000 +v -0.01698162 -0.02535298 0.04837090 0.54509804 0.71372549 0.60000000 +v -0.01986577 -0.02195389 0.04995606 0.54509804 0.71372549 0.60000000 +v -0.01698162 0.02534700 0.04837090 0.54509804 0.71372549 0.60000000 +v 0.00682322 0.03235807 0.04237778 0.54509804 0.71372549 0.60000000 +v 0.00386872 0.03072827 0.04474942 0.54509804 0.71372549 0.60000000 +v -0.00837839 0.02745399 0.04830993 0.54509804 0.71372549 0.60000000 +v 0.00093532 0.02870938 0.04693816 0.54509804 0.71372549 0.60000000 +v -0.01430147 0.02501663 0.04940125 0.54509804 0.71372549 0.60000000 +v 0.00976365 0.03360612 0.03983543 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.03239478 0.03174503 0.54509804 0.71372549 0.60000000 +v 0.01833874 0.03350334 0.03695776 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.03236541 0.03183648 0.54509804 0.71372549 0.60000000 +v -0.01300711 0.00345483 0.05760139 0.54509804 0.71372549 0.60000000 +v -0.01299304 -0.00122167 0.05768065 0.54509804 0.71372549 0.60000000 +v -0.01302821 -0.00572197 0.05742459 0.54509804 0.71372549 0.60000000 +v -0.01302118 -0.00466480 0.05748555 0.54509804 0.71372549 0.60000000 +v -0.01300008 -0.00222744 0.05762578 0.54509804 0.71372549 0.60000000 +v -0.01307042 0.00804323 0.05713804 0.54509804 0.71372549 0.60000000 +v -0.01264131 0.01034110 0.05677833 0.54509804 0.71372549 0.60000000 +v -0.01297194 0.00835157 0.05710755 0.54509804 0.71372549 0.60000000 +v -0.01282421 0.00847637 0.05710755 0.54509804 0.71372549 0.60000000 +v -0.01173386 0.01086234 0.05680882 0.54509804 0.71372549 0.60000000 +v -0.01151579 0.00815335 0.05729656 0.54509804 0.71372549 0.60000000 +v -0.01094600 0.01131017 0.05677833 0.54509804 0.71372549 0.60000000 +v -0.00937026 0.01222051 0.05670517 0.54509804 0.71372549 0.60000000 +v -0.00818846 0.01289592 0.05665030 0.54509804 0.71372549 0.60000000 +v -0.00749908 0.01592793 0.05580895 0.54509804 0.71372549 0.60000000 +v -0.01199414 0.01509835 0.05533949 0.54509804 0.71372549 0.60000000 +v -0.01712231 0.02165425 0.05099250 0.54509804 0.71372549 0.60000000 +v -0.01396381 -0.00952483 0.05672956 0.54509804 0.71372549 0.60000000 +v -0.01959143 -0.01785737 0.05233379 0.54509804 0.71372549 0.60000000 +v -0.01058724 -0.01381957 0.05619914 0.54509804 0.71372549 0.60000000 +v -0.01326739 -0.01099312 0.05653446 0.54509804 0.71372549 0.60000000 +v -0.01304932 -0.00821071 0.05711975 0.54509804 0.71372549 0.60000000 +v -0.01307042 -0.00804920 0.05713804 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.03132156 0.03419593 0.54509804 0.71372549 0.60000000 +v 0.02239766 -0.03137295 0.03882947 0.54509804 0.71372549 0.60000000 +v 0.01316837 -0.03113803 0.04218879 0.54509804 0.71372549 0.60000000 +v 0.01055855 -0.02941279 0.04452384 0.54509804 0.71372549 0.60000000 +v 0.00796985 -0.02734250 0.04665161 0.54509804 0.71372549 0.60000000 +v 0.00409382 -0.01961197 0.05330927 0.54509804 0.71372549 0.60000000 +v -0.00016207 -0.01986158 0.05384579 0.54509804 0.71372549 0.60000000 +v -0.01134696 -0.02458946 0.05012067 0.54509804 0.71372549 0.60000000 +v -0.00436871 -0.01917882 0.05437621 0.54509804 0.71372549 0.60000000 +v -0.00833619 -0.01760776 0.05487614 0.54509804 0.71372549 0.60000000 +v -0.01712231 -0.02166023 0.05099250 0.54509804 0.71372549 0.60000000 +v 0.01577114 0.03249756 0.03966472 0.54509804 0.71372549 0.60000000 +v 0.01317540 0.03112471 0.04218879 0.54509804 0.71372549 0.60000000 +v 0.01055855 0.02940681 0.04452384 0.54509804 0.71372549 0.60000000 +v -0.01134696 0.02458349 0.05012067 0.54509804 0.71372549 0.60000000 +v -0.00451644 0.01912880 0.05439450 0.54509804 0.71372549 0.60000000 +v -0.00031683 0.01984092 0.05386408 0.54509804 0.71372549 0.60000000 +v 0.00797688 0.02733653 0.04665161 0.54509804 0.71372549 0.60000000 +v 0.00393906 0.01962802 0.05332756 0.54509804 0.71372549 0.60000000 +v -0.00847688 0.01752103 0.05489443 0.54509804 0.71372549 0.60000000 +v 0.02459243 0.03251958 0.03614689 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.03149178 0.03385451 0.54509804 0.71372549 0.60000000 +v -0.01065054 0.00244171 0.05781478 0.54509804 0.71372549 0.60000000 +v -0.01068572 0.00585548 0.05760749 0.54509804 0.71372549 0.60000000 +v -0.01068572 -0.00586145 0.05760749 0.54509804 0.71372549 0.60000000 +v -0.01065054 -0.00132445 0.05782087 0.54509804 0.71372549 0.60000000 +v -0.01065054 -0.00061967 0.05785136 0.54509804 0.71372549 0.60000000 +v -0.01065054 0.00104684 0.05783307 0.54509804 0.71372549 0.60000000 +v -0.01273277 -0.00581741 0.05744898 0.54509804 0.71372549 0.60000000 +v -0.01038323 0.00987125 0.05712584 0.54509804 0.71372549 0.60000000 +v -0.01058020 0.00650153 0.05755262 0.54509804 0.71372549 0.60000000 +v -0.01018626 0.00716226 0.05750385 0.54509804 0.71372549 0.60000000 +v -0.00969385 0.00758072 0.05747946 0.54509804 0.71372549 0.60000000 +v -0.00645797 0.01213975 0.05683930 0.54509804 0.71372549 0.60000000 +v -0.00635948 0.01396777 0.05640033 0.54509804 0.71372549 0.60000000 +v -0.00450940 0.01504696 0.05614427 0.54509804 0.71372549 0.60000000 +v -0.00390443 0.01738888 0.05535169 0.54509804 0.71372549 0.60000000 +v -0.01379498 -0.00968635 0.05672956 0.54509804 0.71372549 0.60000000 +v -0.01363318 -0.00978178 0.05674175 0.54509804 0.71372549 0.60000000 +v -0.01297194 -0.00835755 0.05710755 0.54509804 0.71372549 0.60000000 +v -0.01187455 -0.01520710 0.05532121 0.54509804 0.71372549 0.60000000 +v -0.00737245 -0.01599998 0.05579065 0.54509804 0.71372549 0.60000000 +v -0.00818846 -0.01290189 0.05665030 0.54509804 0.71372549 0.60000000 +v -0.00925771 -0.01229255 0.05669907 0.54509804 0.71372549 0.60000000 +v -0.01094600 -0.01131614 0.05677833 0.54509804 0.71372549 0.60000000 +v -0.01173386 -0.01086832 0.05680882 0.54509804 0.71372549 0.60000000 +v -0.01251470 -0.01042049 0.05678443 0.54509804 0.71372549 0.60000000 +v -0.01282421 -0.00848235 0.05710755 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.03027907 0.03577499 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02979454 0.03643344 0.54509804 0.71372549 0.60000000 +v 0.02016772 -0.02986062 0.04130475 0.54509804 0.71372549 0.60000000 +v 0.01794481 -0.02803994 0.04356665 0.54509804 0.71372549 0.60000000 +v 0.00820199 -0.01844468 0.05279105 0.54509804 0.71372549 0.60000000 +v 0.00766033 -0.01676349 0.05389456 0.54509804 0.71372549 0.60000000 +v 0.00392500 -0.01782066 0.05436401 0.54509804 0.71372549 0.60000000 +v 0.00272209 -0.01798217 0.05451643 0.54509804 0.71372549 0.60000000 +v 0.00211712 -0.01803356 0.05459569 0.54509804 0.71372549 0.60000000 +v 0.02414223 -0.02452339 0.04401781 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02330471 0.04172543 0.54509804 0.71372549 0.60000000 +v 0.00155436 -0.01806293 0.05466275 0.54509804 0.71372549 0.60000000 +v 0.00118153 -0.01807761 0.05470543 0.54509804 0.71372549 0.60000000 +v 0.00085794 -0.01807027 0.05475421 0.54509804 0.71372549 0.60000000 +v 0.00005600 -0.01804824 0.05485175 0.54509804 0.71372549 0.60000000 +v -0.00376374 -0.01743156 0.05533340 0.54509804 0.71372549 0.60000000 +v 0.02239766 0.03135964 0.03882947 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.03131559 0.03419593 0.54509804 0.71372549 0.60000000 +v 0.02017475 0.02985464 0.04130475 0.54509804 0.71372549 0.60000000 +v 0.01795184 0.02802662 0.04356665 0.54509804 0.71372549 0.60000000 +v -0.00008468 0.01803493 0.05487004 0.54509804 0.71372549 0.60000000 +v 0.00085794 0.01806429 0.05475421 0.54509804 0.71372549 0.60000000 +v 0.00151215 0.01805695 0.05466885 0.54509804 0.71372549 0.60000000 +v 0.00155436 0.01805695 0.05466275 0.54509804 0.71372549 0.60000000 +v 0.00208195 0.01802758 0.05459569 0.54509804 0.71372549 0.60000000 +v 0.00265175 0.01798354 0.05452863 0.54509804 0.71372549 0.60000000 +v 0.00378431 0.01783671 0.05438230 0.54509804 0.71372549 0.60000000 +v 0.00752667 0.01680891 0.05391285 0.54509804 0.71372549 0.60000000 +v 0.00805426 0.01849744 0.05280934 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02445134 0.04098163 0.54509804 0.71372549 0.60000000 +v 0.02592196 0.02671250 0.04207294 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.03141837 0.03400083 0.54509804 0.71372549 0.60000000 +v -0.00690114 0.00128176 0.05787575 0.54509804 0.71372549 0.60000000 +v -0.01058020 -0.00651484 0.05755262 0.54509804 0.71372549 0.60000000 +v -0.00996820 -0.00736645 0.05749165 0.54509804 0.71372549 0.60000000 +v -0.00977826 -0.00753530 0.05747946 0.54509804 0.71372549 0.60000000 +v -0.00673231 -0.00357093 0.05780259 0.54509804 0.71372549 0.60000000 +v -0.00692928 -0.00339473 0.05781478 0.54509804 0.71372549 0.60000000 +v -0.00705590 -0.00315981 0.05782697 0.54509804 0.71372549 0.60000000 +v -0.00709811 -0.00231554 0.05785746 0.54509804 0.71372549 0.60000000 +v -0.00690114 -0.00015716 0.05788794 0.54509804 0.71372549 0.60000000 +v -0.01094600 -0.00898156 0.05722339 0.54509804 0.71372549 0.60000000 +v -0.00634541 0.00951886 0.05726607 0.54509804 0.71372549 0.60000000 +v -0.00591631 0.01245543 0.05675394 0.54509804 0.71372549 0.60000000 +v -0.00472747 0.01045856 0.05707707 0.54509804 0.71372549 0.60000000 +v -0.00408030 0.01083297 0.05699781 0.54509804 0.71372549 0.60000000 +v -0.00243421 0.01449635 0.05619304 0.54509804 0.71372549 0.60000000 +v -0.00335574 0.01572237 0.05591259 0.54509804 0.71372549 0.60000000 +v 0.00009821 0.01778532 0.05495540 0.54509804 0.71372549 0.60000000 +v -0.00312360 0.01586186 0.05586382 0.54509804 0.71372549 0.60000000 +v -0.00450940 -0.01505293 0.05614427 0.54509804 0.71372549 0.60000000 +v -0.00664086 -0.01381223 0.05643691 0.54509804 0.71372549 0.60000000 +v -0.00645797 -0.01214573 0.05683930 0.54509804 0.71372549 0.60000000 +v -0.00813218 -0.01118400 0.05696124 0.54509804 0.71372549 0.60000000 +v -0.01038323 -0.00987722 0.05712584 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02866396 0.03766499 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02790045 0.03843318 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02569068 0.04004882 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.02225489 0.04224975 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.01889251 0.04376175 0.54509804 0.71372549 0.60000000 +v 0.01107911 -0.01492079 0.05346169 0.54509804 0.71372549 0.60000000 +v 0.00711867 -0.01499420 0.05463837 0.54509804 0.71372549 0.60000000 +v 0.00562735 -0.01585315 0.05472372 0.54509804 0.71372549 0.60000000 +v 0.00222967 -0.01779129 0.05467495 0.54509804 0.71372549 0.60000000 +v 0.00147698 -0.01653590 0.05524195 0.54509804 0.71372549 0.60000000 +v 0.00215933 -0.01783534 0.05466885 0.54509804 0.71372549 0.60000000 +v 0.00194126 -0.01791610 0.05466885 0.54509804 0.71372549 0.60000000 +v 0.00033035 -0.01791610 0.05488224 0.54509804 0.71372549 0.60000000 +v 0.00017559 -0.01783534 0.05493101 0.54509804 0.71372549 0.60000000 +v 0.00009118 -0.01778395 0.05495540 0.54509804 0.71372549 0.60000000 +v -0.00312360 -0.01586783 0.05586382 0.54509804 0.71372549 0.60000000 +v -0.00324319 -0.01580176 0.05588820 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02978857 0.03643344 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02789448 0.03843318 0.54509804 0.71372549 0.60000000 +v 0.00017559 0.01782937 0.05493101 0.54509804 0.71372549 0.60000000 +v 0.00033035 0.01791012 0.05488224 0.54509804 0.71372549 0.60000000 +v 0.00215933 0.01782937 0.05467495 0.54509804 0.71372549 0.60000000 +v 0.00184981 0.01794683 0.05466885 0.54509804 0.71372549 0.60000000 +v 0.00147698 0.01652993 0.05524195 0.54509804 0.71372549 0.60000000 +v 0.00562735 0.01584718 0.05472372 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.01793215 0.04414584 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.02329874 0.04172543 0.54509804 0.71372549 0.60000000 +v 0.00693577 0.01509101 0.05465056 0.54509804 0.71372549 0.60000000 +v 0.00711867 0.01498823 0.05463837 0.54509804 0.71372549 0.60000000 +v 0.01095952 0.01498823 0.05347998 0.54509804 0.71372549 0.60000000 +v -0.00626803 -0.00015716 0.05786965 0.54509804 0.71372549 0.60000000 +v -0.00563493 -0.00015716 0.05784526 0.54509804 0.71372549 0.60000000 +v -0.00436168 0.00128176 0.05777210 0.54509804 0.71372549 0.60000000 +v -0.00185035 0.00437251 0.05748555 0.54509804 0.71372549 0.60000000 +v -0.00934212 -0.00779225 0.05745507 0.54509804 0.71372549 0.60000000 +v -0.00660569 -0.00362232 0.05779649 0.54509804 0.71372549 0.60000000 +v -0.00629617 -0.00369573 0.05778430 0.54509804 0.71372549 0.60000000 +v -0.00657052 -0.00939269 0.05728436 0.54509804 0.71372549 0.60000000 +v -0.00016910 0.00437251 0.05732094 0.54509804 0.71372549 0.60000000 +v -0.00387630 0.01095044 0.05696124 0.54509804 0.71372549 0.60000000 +v 0.00058359 0.01507633 0.05577236 0.54509804 0.71372549 0.60000000 +v -0.00213173 0.01197824 0.05663810 0.54509804 0.71372549 0.60000000 +v 0.00035146 0.01343919 0.05617475 0.54509804 0.71372549 0.60000000 +v 0.00114636 0.01658866 0.05526634 0.54509804 0.71372549 0.60000000 +v 0.00101270 0.01654461 0.05529682 0.54509804 0.71372549 0.60000000 +v -0.00243421 -0.01450233 0.05619304 0.54509804 0.71372549 0.60000000 +v -0.00408030 -0.01083895 0.05699781 0.54509804 0.71372549 0.60000000 +v -0.00473451 -0.01045720 0.05707707 0.54509804 0.71372549 0.60000000 +v -0.00634541 -0.00952483 0.05726607 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.01793812 0.04414584 0.54509804 0.71372549 0.60000000 +v 0.01069221 -0.01290924 0.05419331 0.54509804 0.71372549 0.60000000 +v 0.01005910 -0.01328365 0.05427256 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.01705715 0.04441410 0.54509804 0.71372549 0.60000000 +v 0.00911648 -0.01213104 0.05482127 0.54509804 0.71372549 0.60000000 +v 0.00514197 -0.01443625 0.05521756 0.54509804 0.71372549 0.60000000 +v 0.00512087 -0.01445094 0.05521756 0.54509804 0.71372549 0.60000000 +v 0.00132926 -0.01659464 0.05524195 0.54509804 0.71372549 0.60000000 +v 0.00101270 -0.01655059 0.05529682 0.54509804 0.71372549 0.60000000 +v 0.00114636 -0.01659464 0.05526634 0.54509804 0.71372549 0.60000000 +v 0.00157546 -0.01508230 0.05564433 0.54509804 0.71372549 0.60000000 +v -0.00212470 -0.01468586 0.05611379 0.54509804 0.71372549 0.60000000 +v 0.00132926 0.01658866 0.05524195 0.54509804 0.71372549 0.60000000 +v 0.00417824 0.01476064 0.05531511 0.54509804 0.71372549 0.60000000 +v 0.00514197 0.01443028 0.05521756 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.01705117 0.04441410 0.54509804 0.71372549 0.60000000 +v 0.00911648 0.01212507 0.05482127 0.54509804 0.71372549 0.60000000 +v 0.00998876 0.01331438 0.05428475 0.54509804 0.71372549 0.60000000 +v 0.01069221 0.01290326 0.05419331 0.54509804 0.71372549 0.60000000 +v -0.00341202 -0.00318183 0.05766236 0.54509804 0.71372549 0.60000000 +v -0.00436168 -0.00015716 0.05778430 0.54509804 0.71372549 0.60000000 +v -0.00437574 0.00014384 0.05778430 0.54509804 0.71372549 0.60000000 +v -0.00422802 0.00128176 0.05776600 0.54509804 0.71372549 0.60000000 +v -0.00309546 0.00128176 0.05769284 0.54509804 0.71372549 0.60000000 +v -0.00183628 0.00258854 0.05754652 0.54509804 0.71372549 0.60000000 +v -0.00015503 0.00235361 0.05740020 0.54509804 0.71372549 0.60000000 +v -0.00648611 -0.00367371 0.05779039 0.54509804 0.71372549 0.60000000 +v -0.00322208 -0.00369573 0.05762578 0.54509804 0.71372549 0.60000000 +v 0.00149808 0.00435783 0.05711975 0.54509804 0.71372549 0.60000000 +v 0.00044994 0.01347589 0.05615646 0.54509804 0.71372549 0.60000000 +v 0.00095643 0.01367411 0.05605281 0.54509804 0.71372549 0.60000000 +v 0.00134332 0.01368145 0.05600404 0.54509804 0.71372549 0.60000000 +v 0.00161767 0.01368879 0.05596746 0.54509804 0.71372549 0.60000000 +v 0.00233519 0.01343919 0.05591869 0.54509804 0.71372549 0.60000000 +v 0.00035146 -0.01344516 0.05617475 0.54509804 0.71372549 0.60000000 +v -0.00387630 -0.01096375 0.05696124 0.54509804 0.71372549 0.60000000 +v -0.00404512 -0.01086098 0.05699172 0.54509804 0.71372549 0.60000000 +v -0.00016207 -0.00369573 0.05735143 0.54509804 0.71372549 0.60000000 +v -0.00183628 -0.00369573 0.05750385 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.01284316 0.04560906 0.54509804 0.71372549 0.60000000 +v 0.01315429 -0.01146297 0.05366288 0.54509804 0.71372549 0.60000000 +v 0.01289402 -0.00991393 0.05410795 0.54509804 0.71372549 0.60000000 +v 0.01131828 -0.01083895 0.05440669 0.54509804 0.71372549 0.60000000 +v 0.00916572 -0.00948078 0.05526024 0.54509804 0.71372549 0.60000000 +v 0.00769550 -0.01033973 0.05546753 0.54509804 0.71372549 0.60000000 +v 0.00685136 -0.01083161 0.05558337 0.54509804 0.71372549 0.60000000 +v 0.00233519 -0.01344516 0.05591869 0.54509804 0.71372549 0.60000000 +v 0.00597908 -0.01133817 0.05565043 0.54509804 0.71372549 0.60000000 +v 0.00161767 -0.01369477 0.05596746 0.54509804 0.71372549 0.60000000 +v 0.00106194 -0.01368009 0.05604062 0.54509804 0.71372549 0.60000000 +v 0.00095643 -0.01368009 0.05605281 0.54509804 0.71372549 0.60000000 +v 0.00597908 0.01133219 0.05565043 0.54509804 0.71372549 0.60000000 +v 0.00645039 0.01106056 0.05561385 0.54509804 0.71372549 0.60000000 +v 0.00685136 0.01082563 0.05558337 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.01283719 0.04560906 0.54509804 0.71372549 0.60000000 +v 0.00769550 0.01033376 0.05546753 0.54509804 0.71372549 0.60000000 +v 0.00916572 0.00947481 0.05526024 0.54509804 0.71372549 0.60000000 +v 0.01044600 0.01134688 0.05457130 0.54509804 0.71372549 0.60000000 +v 0.01289402 0.00990795 0.05410795 0.54509804 0.71372549 0.60000000 +v 0.01304174 0.01152307 0.05368727 0.54509804 0.71372549 0.60000000 +v -0.00183628 -0.00231554 0.05756481 0.54509804 0.71372549 0.60000000 +v -0.00183628 -0.00214669 0.05757091 0.54509804 0.71372549 0.60000000 +v -0.00183628 -0.00095737 0.05758920 0.54509804 0.71372549 0.60000000 +v -0.00182925 -0.00015716 0.05759530 0.54509804 0.71372549 0.60000000 +v -0.00183628 0.00128176 0.05758920 0.54509804 0.71372549 0.60000000 +v -0.00015503 0.00034206 0.05743068 0.54509804 0.71372549 0.60000000 +v 0.00151215 0.00082659 0.05722949 0.54509804 0.71372549 0.60000000 +v 0.00150512 0.00183237 0.05721120 0.54509804 0.71372549 0.60000000 +v 0.00312306 0.00282347 0.05696124 0.54509804 0.71372549 0.60000000 +v 0.00279244 0.00432846 0.05694904 0.54509804 0.71372549 0.60000000 +v 0.00149808 -0.00369573 0.05715633 0.54509804 0.71372549 0.60000000 +v -0.00015503 -0.00191176 0.05740630 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.01208699 0.04578587 0.54509804 0.71372549 0.60000000 +v 0.01403361 -0.01094173 0.05347389 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.01172726 0.04585294 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.00901093 0.04634677 0.54509804 0.71372549 0.60000000 +v 0.01367485 -0.00815933 0.05412014 0.54509804 0.71372549 0.60000000 +v 0.01238050 -0.00759403 0.05461398 0.54509804 0.71372549 0.60000000 +v 0.01110725 -0.00834286 0.05487004 0.54509804 0.71372549 0.60000000 +v 0.00946820 -0.00369573 0.05571749 0.54509804 0.71372549 0.60000000 +v 0.00932048 -0.00369573 0.05575408 0.54509804 0.71372549 0.60000000 +v 0.00784323 -0.00369573 0.05608330 0.54509804 0.71372549 0.60000000 +v 0.00312306 -0.00369573 0.05693075 0.54509804 0.71372549 0.60000000 +v 0.00430486 0.00435783 0.05671127 0.54509804 0.71372549 0.60000000 +v 0.00460734 0.00435783 0.05665640 0.54509804 0.71372549 0.60000000 +v 0.00759702 0.00435783 0.05608330 0.54509804 0.71372549 0.60000000 +v 0.00828640 0.00435783 0.05594917 0.54509804 0.71372549 0.60000000 +v 0.01403361 0.01093576 0.05347389 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.01208102 0.04578587 0.54509804 0.71372549 0.60000000 +v 0.01238050 0.00758806 0.05462008 0.54509804 0.71372549 0.60000000 +v 0.00868034 0.00429175 0.05586991 0.54509804 0.71372549 0.60000000 +v 0.00902503 0.00409353 0.05580285 0.54509804 0.71372549 0.60000000 +v 0.01311209 0.00897559 0.05418721 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.00914444 0.04632848 0.54509804 0.71372549 0.60000000 +v -0.00015503 -0.00167684 0.05741239 0.54509804 0.71372549 0.60000000 +v -0.00015503 -0.00113357 0.05741849 0.54509804 0.71372549 0.60000000 +v -0.00015503 0.00003372 0.05743068 0.54509804 0.71372549 0.60000000 +v 0.00151215 0.00018055 0.05723559 0.54509804 0.71372549 0.60000000 +v 0.00313009 0.00135518 0.05699781 0.54509804 0.71372549 0.60000000 +v 0.00346775 0.00282347 0.05690636 0.54509804 0.71372549 0.60000000 +v 0.00401644 0.00366039 0.05679052 0.54509804 0.71372549 0.60000000 +v 0.00313009 -0.00205859 0.05698562 0.54509804 0.71372549 0.60000000 +v 0.00150512 -0.00168418 0.05721730 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.00854108 0.04640774 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.00594955 0.04673087 0.54509804 0.71372549 0.60000000 +v 0.01525058 -0.00487770 0.05391895 0.54509804 0.71372549 0.60000000 +v 0.01325981 -0.00651484 0.05446156 0.54509804 0.71372549 0.60000000 +v 0.01294326 -0.00709482 0.05449814 0.54509804 0.71372549 0.60000000 +v 0.01285885 -0.00716823 0.05451643 0.54509804 0.71372549 0.60000000 +v 0.01258450 -0.00742518 0.05457130 0.54509804 0.71372549 0.60000000 +v 0.01335126 -0.00600094 0.05448595 0.54509804 0.71372549 0.60000000 +v 0.01340754 -0.00086194 0.05472982 0.54509804 0.71372549 0.60000000 +v 0.00946820 -0.00331398 0.05573578 0.54509804 0.71372549 0.60000000 +v 0.01337237 -0.00585411 0.05449204 0.54509804 0.71372549 0.60000000 +v 0.00947524 -0.00254312 0.05576627 0.54509804 0.71372549 0.60000000 +v 0.00785729 -0.00079586 0.05616256 0.54509804 0.71372549 0.60000000 +v 0.00549370 0.00282347 0.05657714 0.54509804 0.71372549 0.60000000 +v 0.00785026 0.00282347 0.05611988 0.54509804 0.71372549 0.60000000 +v 0.01337237 0.00585548 0.05449204 0.54509804 0.71372549 0.60000000 +v 0.01306988 0.00686126 0.05448595 0.54509804 0.71372549 0.60000000 +v 0.01245788 0.00753667 0.05460179 0.54509804 0.71372549 0.60000000 +v 0.00942599 0.00346951 0.05574188 0.54509804 0.71372549 0.60000000 +v 0.00926420 0.00382190 0.05576017 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.00879940 0.04637726 0.54509804 0.71372549 0.60000000 +v 0.01294326 0.00708884 0.05449814 0.54509804 0.71372549 0.60000000 +v 0.01489182 0.00581143 0.05396772 0.54509804 0.71372549 0.60000000 +v 0.00151215 -0.00067840 0.05722949 0.54509804 0.71372549 0.60000000 +v 0.00151215 -0.00017184 0.05723559 0.54509804 0.71372549 0.60000000 +v 0.00313009 0.00064306 0.05700391 0.54509804 0.71372549 0.60000000 +v 0.00313009 -0.00042879 0.05701001 0.54509804 0.71372549 0.60000000 +v 0.00452293 0.00282347 0.05673565 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.00559716 0.04676135 0.54509804 0.71372549 0.60000000 +v 0.01560934 -0.00388661 0.05385798 0.54509804 0.71372549 0.60000000 +v 0.01340754 -0.00066372 0.05473592 0.54509804 0.71372549 0.60000000 +v 0.01338643 -0.00429773 0.05456520 0.54509804 0.71372549 0.60000000 +v 0.00946820 0.00316117 0.05574188 0.54509804 0.71372549 0.60000000 +v 0.01325981 0.00650887 0.05446156 0.54509804 0.71372549 0.60000000 +v 0.01340754 0.00191313 0.05471762 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.00855713 0.04640774 0.54509804 0.71372549 0.60000000 +v 0.01559528 0.00517273 0.05376043 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.00562790 0.04676135 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.00594358 0.04673087 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.00282944 0.04695645 0.54509804 0.71372549 0.60000000 +v 0.01560934 -0.00329195 0.05387627 0.54509804 0.71372549 0.60000000 +v 0.03436339 -0.00000299 0.04707229 0.54509804 0.71372549 0.60000000 +v 0.01562341 0.00073116 0.05397992 0.54509804 0.71372549 0.60000000 +v 0.01560934 0.00284549 0.05387627 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.00282347 0.04695645 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.00321990 0.04693206 0.54509804 0.71372549 0.60000000 +v 0.03436339 0.00044484 0.04706010 0.54509804 0.71372549 0.60000000 +f 1 2 3 +f 1 3 4 +f 1 4 5 +f 1 5 6 +f 1 6 2 +f 2 7 8 +f 2 8 9 +f 2 9 3 +f 2 6 10 +f 2 10 7 +f 3 9 11 +f 3 11 4 +f 4 12 13 +f 4 13 5 +f 4 11 12 +f 5 13 14 +f 5 14 6 +f 6 14 15 +f 6 15 16 +f 6 16 10 +f 7 17 18 +f 7 18 19 +f 7 19 8 +f 7 10 20 +f 7 20 21 +f 7 21 17 +f 8 19 22 +f 8 22 23 +f 8 23 9 +f 9 23 24 +f 9 24 11 +f 10 16 25 +f 10 25 20 +f 11 24 26 +f 11 26 12 +f 12 27 28 +f 12 28 29 +f 12 29 30 +f 12 30 31 +f 12 31 32 +f 12 32 33 +f 12 33 34 +f 12 34 35 +f 12 35 36 +f 12 36 37 +f 12 37 38 +f 12 38 39 +f 12 39 40 +f 12 40 41 +f 12 41 42 +f 12 42 43 +f 12 43 44 +f 12 44 45 +f 12 45 46 +f 12 46 47 +f 12 47 13 +f 12 26 48 +f 12 48 49 +f 12 49 50 +f 12 50 51 +f 12 51 52 +f 12 52 53 +f 12 53 54 +f 12 54 142 +f 12 142 201 +f 12 201 200 +f 12 200 199 +f 12 199 198 +f 12 198 197 +f 12 197 196 +f 12 196 195 +f 12 195 194 +f 12 194 193 +f 12 193 192 +f 12 192 191 +f 12 191 242 +f 12 242 281 +f 12 281 317 +f 12 317 358 +f 12 358 402 +f 12 402 404 +f 12 404 449 +f 12 449 507 +f 12 507 493 +f 12 493 548 +f 12 548 549 +f 12 549 505 +f 12 505 557 +f 12 557 556 +f 12 556 595 +f 12 595 634 +f 12 634 668 +f 12 668 673 +f 12 673 703 +f 12 703 718 +f 12 718 721 +f 12 721 720 +f 12 720 728 +f 12 728 727 +f 12 727 729 +f 12 729 724 +f 12 724 722 +f 12 722 711 +f 12 711 684 +f 12 684 683 +f 12 683 655 +f 12 655 654 +f 12 654 652 +f 12 652 619 +f 12 619 583 +f 12 583 580 +f 12 580 535 +f 12 535 534 +f 12 534 486 +f 12 486 533 +f 12 533 532 +f 12 532 531 +f 12 531 477 +f 12 477 476 +f 12 476 428 +f 12 428 385 +f 12 385 336 +f 12 336 294 +f 12 294 256 +f 12 256 214 +f 12 214 155 +f 12 155 85 +f 12 85 84 +f 12 84 83 +f 12 83 82 +f 12 82 81 +f 12 81 80 +f 12 80 79 +f 12 79 78 +f 12 78 77 +f 12 77 76 +f 12 76 75 +f 12 75 74 +f 12 74 73 +f 12 73 72 +f 12 72 71 +f 12 71 70 +f 12 70 68 +f 12 68 27 +f 13 55 15 +f 13 15 14 +f 13 47 55 +f 15 55 16 +f 16 55 56 +f 16 56 25 +f 17 57 58 +f 17 58 18 +f 17 21 59 +f 17 59 57 +f 18 58 60 +f 18 60 61 +f 18 61 19 +f 19 61 22 +f 20 25 62 +f 20 62 21 +f 21 62 63 +f 21 63 59 +f 22 61 64 +f 22 64 65 +f 22 65 23 +f 23 65 24 +f 24 65 26 +f 25 56 66 +f 25 66 62 +f 26 65 67 +f 26 67 48 +f 27 68 69 +f 27 69 28 +f 28 69 68 +f 28 68 70 +f 28 70 71 +f 28 71 72 +f 28 72 73 +f 28 73 29 +f 29 73 74 +f 29 74 75 +f 29 75 76 +f 29 76 30 +f 30 76 77 +f 30 77 31 +f 31 77 78 +f 31 78 79 +f 31 79 80 +f 31 80 81 +f 31 81 32 +f 32 82 33 +f 32 81 82 +f 33 82 83 +f 33 83 84 +f 33 84 34 +f 34 84 85 +f 34 85 35 +f 35 85 36 +f 36 85 37 +f 37 85 38 +f 38 86 87 +f 38 87 88 +f 38 88 39 +f 38 85 89 +f 38 89 86 +f 39 88 90 +f 39 90 91 +f 39 91 92 +f 39 92 40 +f 40 92 93 +f 40 93 41 +f 41 93 94 +f 41 94 95 +f 41 95 96 +f 41 96 97 +f 41 97 42 +f 42 97 98 +f 42 98 99 +f 42 99 100 +f 42 100 101 +f 42 101 43 +f 43 101 102 +f 43 102 103 +f 43 103 104 +f 43 104 105 +f 43 105 44 +f 44 105 106 +f 44 106 107 +f 44 107 108 +f 44 108 45 +f 45 108 109 +f 45 109 110 +f 45 110 46 +f 46 111 112 +f 46 112 47 +f 46 110 111 +f 47 112 113 +f 47 113 114 +f 47 114 55 +f 48 67 115 +f 48 115 116 +f 48 116 117 +f 48 117 49 +f 49 117 118 +f 49 118 119 +f 49 119 50 +f 50 119 120 +f 50 120 121 +f 50 121 51 +f 51 121 122 +f 51 122 123 +f 51 123 124 +f 51 124 52 +f 52 124 125 +f 52 125 126 +f 52 126 53 +f 53 126 127 +f 53 127 128 +f 53 128 129 +f 53 129 54 +f 54 129 130 +f 54 130 131 +f 54 131 132 +f 54 132 133 +f 54 133 134 +f 54 134 135 +f 54 135 136 +f 54 136 137 +f 54 137 138 +f 54 138 139 +f 54 139 140 +f 54 140 141 +f 54 141 142 +f 55 114 56 +f 56 113 143 +f 56 143 66 +f 56 114 113 +f 57 144 58 +f 57 59 144 +f 58 144 145 +f 58 145 146 +f 58 146 60 +f 59 63 147 +f 59 147 148 +f 59 148 144 +f 60 146 149 +f 60 149 150 +f 60 150 61 +f 61 150 64 +f 62 66 151 +f 62 151 63 +f 63 151 152 +f 63 152 147 +f 64 150 153 +f 64 153 115 +f 64 115 65 +f 65 115 67 +f 66 143 154 +f 66 154 151 +f 85 86 89 +f 85 155 156 +f 85 156 157 +f 85 157 158 +f 85 158 86 +f 86 158 159 +f 86 159 87 +f 87 90 88 +f 87 159 90 +f 90 159 160 +f 90 160 91 +f 91 160 92 +f 92 161 93 +f 92 160 161 +f 93 161 94 +f 94 161 162 +f 94 162 163 +f 94 163 96 +f 94 96 95 +f 96 163 164 +f 96 164 98 +f 96 98 97 +f 98 164 165 +f 98 165 100 +f 98 100 99 +f 100 165 166 +f 100 166 102 +f 100 102 101 +f 102 166 167 +f 102 167 168 +f 102 168 104 +f 102 104 103 +f 104 168 105 +f 105 168 106 +f 106 169 170 +f 106 170 108 +f 106 108 107 +f 106 168 171 +f 106 171 169 +f 108 170 109 +f 109 170 110 +f 110 170 172 +f 110 172 111 +f 111 172 143 +f 111 143 112 +f 112 143 113 +f 115 153 116 +f 116 153 173 +f 116 173 118 +f 116 118 117 +f 118 174 175 +f 118 175 119 +f 118 173 174 +f 119 175 120 +f 120 176 122 +f 120 122 121 +f 120 175 177 +f 120 177 176 +f 122 178 123 +f 122 176 178 +f 123 179 125 +f 123 125 124 +f 123 178 179 +f 125 180 126 +f 125 179 180 +f 126 181 128 +f 126 128 127 +f 126 180 181 +f 128 182 183 +f 128 183 129 +f 128 181 182 +f 129 183 184 +f 129 184 185 +f 129 185 130 +f 130 185 131 +f 131 185 186 +f 131 186 187 +f 131 187 188 +f 131 188 189 +f 131 189 132 +f 132 189 190 +f 132 190 191 +f 132 191 133 +f 133 191 134 +f 134 191 135 +f 135 191 192 +f 135 192 193 +f 135 193 194 +f 135 194 136 +f 136 194 195 +f 136 195 196 +f 136 196 137 +f 137 196 197 +f 137 197 198 +f 137 198 138 +f 138 198 199 +f 138 199 200 +f 138 200 139 +f 139 200 201 +f 139 201 140 +f 140 201 141 +f 141 201 142 +f 143 172 154 +f 144 202 203 +f 144 203 145 +f 144 148 204 +f 144 204 202 +f 145 203 205 +f 145 205 146 +f 146 205 206 +f 146 206 149 +f 147 207 148 +f 147 152 208 +f 147 208 207 +f 148 207 204 +f 149 206 209 +f 149 209 210 +f 149 210 150 +f 150 210 153 +f 151 154 211 +f 151 211 152 +f 152 211 212 +f 152 212 208 +f 153 210 173 +f 154 172 213 +f 154 213 211 +f 155 214 215 +f 155 215 156 +f 156 216 217 +f 156 217 158 +f 156 158 157 +f 156 215 218 +f 156 218 216 +f 158 217 159 +f 159 217 160 +f 160 217 219 +f 160 219 162 +f 160 162 161 +f 162 219 220 +f 162 220 163 +f 163 220 221 +f 163 221 164 +f 164 221 222 +f 164 222 165 +f 165 223 166 +f 165 222 223 +f 166 223 224 +f 166 224 167 +f 167 224 225 +f 167 225 171 +f 167 171 168 +f 169 171 226 +f 169 226 227 +f 169 227 213 +f 169 213 170 +f 170 213 172 +f 171 225 226 +f 173 210 228 +f 173 228 174 +f 174 228 229 +f 174 229 177 +f 174 177 175 +f 176 177 230 +f 176 230 231 +f 176 231 178 +f 177 229 230 +f 178 231 232 +f 178 232 179 +f 179 232 233 +f 179 233 180 +f 180 233 234 +f 180 234 181 +f 181 234 235 +f 181 235 182 +f 182 236 183 +f 182 235 237 +f 182 237 236 +f 183 236 184 +f 184 236 185 +f 185 187 186 +f 185 236 238 +f 185 238 187 +f 187 238 188 +f 188 238 189 +f 189 238 239 +f 189 239 240 +f 189 240 191 +f 189 191 190 +f 191 240 239 +f 191 239 241 +f 191 241 242 +f 202 243 203 +f 202 204 243 +f 203 243 244 +f 203 244 245 +f 203 245 246 +f 203 246 247 +f 203 247 205 +f 204 207 248 +f 204 248 249 +f 204 249 244 +f 204 244 243 +f 205 247 250 +f 205 250 206 +f 206 250 251 +f 206 251 209 +f 207 208 252 +f 207 252 248 +f 208 212 253 +f 208 253 252 +f 209 251 254 +f 209 254 228 +f 209 228 210 +f 211 213 227 +f 211 227 212 +f 212 227 255 +f 212 255 253 +f 214 256 257 +f 214 257 258 +f 214 258 259 +f 214 259 260 +f 214 260 215 +f 215 260 258 +f 215 258 218 +f 216 218 261 +f 216 261 262 +f 216 262 219 +f 216 219 217 +f 218 258 261 +f 219 262 220 +f 220 262 263 +f 220 263 221 +f 221 263 264 +f 221 264 222 +f 222 264 265 +f 222 265 223 +f 223 265 266 +f 223 266 224 +f 224 266 267 +f 224 267 225 +f 225 267 268 +f 225 268 269 +f 225 269 226 +f 226 269 255 +f 226 255 227 +f 228 254 229 +f 229 270 230 +f 229 254 271 +f 229 271 270 +f 230 270 272 +f 230 272 231 +f 231 272 273 +f 231 273 232 +f 232 274 233 +f 232 273 274 +f 233 275 234 +f 233 274 275 +f 234 275 276 +f 234 276 235 +f 235 277 237 +f 235 276 277 +f 236 237 278 +f 236 278 238 +f 237 277 279 +f 237 279 278 +f 238 278 239 +f 239 278 280 +f 239 280 241 +f 241 280 242 +f 242 280 281 +f 244 282 245 +f 244 249 282 +f 245 282 283 +f 245 283 284 +f 245 284 246 +f 246 284 285 +f 246 285 286 +f 246 286 287 +f 246 287 247 +f 247 287 250 +f 248 288 249 +f 248 252 289 +f 248 289 288 +f 249 288 290 +f 249 290 283 +f 249 283 282 +f 250 287 291 +f 250 291 251 +f 251 291 271 +f 251 271 254 +f 252 253 292 +f 252 292 289 +f 253 255 293 +f 253 293 292 +f 255 269 293 +f 256 294 257 +f 257 295 258 +f 257 294 296 +f 257 296 297 +f 257 297 295 +f 258 260 259 +f 258 295 261 +f 261 295 298 +f 261 298 262 +f 262 298 263 +f 263 298 299 +f 263 299 264 +f 264 299 300 +f 264 300 265 +f 265 300 301 +f 265 301 302 +f 265 302 266 +f 266 302 303 +f 266 303 267 +f 267 303 304 +f 267 304 268 +f 268 304 305 +f 268 305 293 +f 268 293 269 +f 270 306 272 +f 270 271 307 +f 270 307 306 +f 271 291 307 +f 272 306 308 +f 272 308 273 +f 273 308 309 +f 273 309 274 +f 274 310 275 +f 274 309 311 +f 274 311 310 +f 275 310 312 +f 275 312 276 +f 276 312 313 +f 276 313 277 +f 277 313 314 +f 277 314 279 +f 278 279 280 +f 279 314 315 +f 279 315 280 +f 280 315 316 +f 280 316 281 +f 281 316 318 +f 281 318 319 +f 281 319 320 +f 281 320 321 +f 281 321 317 +f 283 322 284 +f 283 290 322 +f 284 322 323 +f 284 323 324 +f 284 324 285 +f 285 324 325 +f 285 325 326 +f 285 326 327 +f 285 327 328 +f 285 328 286 +f 286 328 329 +f 286 329 330 +f 286 330 287 +f 287 330 291 +f 288 331 290 +f 288 289 332 +f 288 332 331 +f 289 292 333 +f 289 333 332 +f 290 331 334 +f 290 334 335 +f 290 335 322 +f 291 330 307 +f 292 293 305 +f 292 305 333 +f 294 336 296 +f 295 297 337 +f 295 337 298 +f 296 336 338 +f 296 338 297 +f 297 338 339 +f 297 339 337 +f 298 337 299 +f 299 337 340 +f 299 340 300 +f 300 340 341 +f 300 341 342 +f 300 342 343 +f 300 343 301 +f 301 343 344 +f 301 344 345 +f 301 345 302 +f 302 345 303 +f 303 345 346 +f 303 346 304 +f 304 346 347 +f 304 347 305 +f 305 347 333 +f 306 348 308 +f 306 307 349 +f 306 349 348 +f 307 330 349 +f 308 348 350 +f 308 350 309 +f 309 350 311 +f 310 351 312 +f 310 311 352 +f 310 352 353 +f 310 353 351 +f 311 350 354 +f 311 354 352 +f 312 351 355 +f 312 355 356 +f 312 356 313 +f 313 356 357 +f 313 357 314 +f 314 357 320 +f 314 320 315 +f 315 320 316 +f 316 320 318 +f 317 321 358 +f 318 320 319 +f 320 357 321 +f 321 357 359 +f 321 359 360 +f 321 360 358 +f 322 361 323 +f 322 335 362 +f 322 362 361 +f 323 361 363 +f 323 363 364 +f 323 364 324 +f 324 365 366 +f 324 366 367 +f 324 367 368 +f 324 368 325 +f 324 364 365 +f 325 327 326 +f 325 368 367 +f 325 367 366 +f 325 366 327 +f 327 369 370 +f 327 370 371 +f 327 371 328 +f 327 366 372 +f 327 372 369 +f 328 373 374 +f 328 374 329 +f 328 371 373 +f 329 374 375 +f 329 375 349 +f 329 349 330 +f 331 376 377 +f 331 377 378 +f 331 378 334 +f 331 332 379 +f 331 379 376 +f 332 333 380 +f 332 380 379 +f 333 347 380 +f 334 381 382 +f 334 382 383 +f 334 383 335 +f 334 378 384 +f 334 384 381 +f 335 383 362 +f 336 385 338 +f 337 339 340 +f 338 385 386 +f 338 386 387 +f 338 387 339 +f 339 387 388 +f 339 388 340 +f 340 388 341 +f 341 388 389 +f 341 389 342 +f 342 389 390 +f 342 390 391 +f 342 391 343 +f 343 391 344 +f 344 391 392 +f 344 392 393 +f 344 393 345 +f 345 393 346 +f 346 393 394 +f 346 394 347 +f 347 394 380 +f 348 395 350 +f 348 349 375 +f 348 375 395 +f 350 395 354 +f 351 396 355 +f 351 353 397 +f 351 397 396 +f 352 354 398 +f 352 398 353 +f 353 398 399 +f 353 399 397 +f 354 395 400 +f 354 400 398 +f 355 396 401 +f 355 401 356 +f 356 401 359 +f 356 359 357 +f 358 360 402 +f 359 401 403 +f 359 403 360 +f 360 403 404 +f 360 404 402 +f 361 405 363 +f 361 362 406 +f 361 406 405 +f 362 383 407 +f 362 407 408 +f 362 408 409 +f 362 409 406 +f 363 405 364 +f 364 405 410 +f 364 410 365 +f 365 410 372 +f 365 372 366 +f 369 411 371 +f 369 371 370 +f 369 372 412 +f 369 412 413 +f 369 413 411 +f 371 411 414 +f 371 414 373 +f 372 415 413 +f 372 413 412 +f 372 410 415 +f 373 414 416 +f 373 416 417 +f 373 417 418 +f 373 418 419 +f 373 419 420 +f 373 420 374 +f 374 421 375 +f 374 420 421 +f 375 421 395 +f 376 422 377 +f 376 379 422 +f 377 422 378 +f 378 422 381 +f 378 381 384 +f 379 380 423 +f 379 423 424 +f 379 424 425 +f 379 425 422 +f 380 394 423 +f 381 426 382 +f 381 422 426 +f 382 426 383 +f 383 426 427 +f 383 427 407 +f 385 428 386 +f 386 428 387 +f 387 428 429 +f 387 429 430 +f 387 430 388 +f 388 430 389 +f 389 430 431 +f 389 431 390 +f 390 431 432 +f 390 432 433 +f 390 433 434 +f 390 434 391 +f 391 435 392 +f 391 434 436 +f 391 436 435 +f 392 435 437 +f 392 437 438 +f 392 438 393 +f 393 438 394 +f 394 438 423 +f 395 421 400 +f 396 439 401 +f 396 397 440 +f 396 440 439 +f 397 399 441 +f 397 441 440 +f 398 400 442 +f 398 442 443 +f 398 443 444 +f 398 444 399 +f 399 445 441 +f 399 444 446 +f 399 446 445 +f 400 421 447 +f 400 447 442 +f 401 439 403 +f 403 439 448 +f 403 448 449 +f 403 449 404 +f 405 450 451 +f 405 451 415 +f 405 415 410 +f 405 406 450 +f 406 409 452 +f 406 452 453 +f 406 453 454 +f 406 454 455 +f 406 455 450 +f 407 427 456 +f 407 456 408 +f 408 456 409 +f 409 456 452 +f 411 413 414 +f 413 457 414 +f 413 415 457 +f 414 457 416 +f 415 451 458 +f 415 458 459 +f 415 459 460 +f 415 460 457 +f 416 457 417 +f 417 457 418 +f 418 457 461 +f 418 461 462 +f 418 462 419 +f 419 462 463 +f 419 463 464 +f 419 464 443 +f 419 443 447 +f 419 447 420 +f 420 447 421 +f 422 425 465 +f 422 465 466 +f 422 466 467 +f 422 467 426 +f 423 438 468 +f 423 468 424 +f 424 468 437 +f 424 437 469 +f 424 469 470 +f 424 470 471 +f 424 471 472 +f 424 472 473 +f 424 473 425 +f 425 473 474 +f 425 474 466 +f 425 466 465 +f 426 467 475 +f 426 475 427 +f 427 475 456 +f 428 476 429 +f 429 476 477 +f 429 477 478 +f 429 478 430 +f 430 478 431 +f 431 479 433 +f 431 433 432 +f 431 478 479 +f 433 480 481 +f 433 481 482 +f 433 482 483 +f 433 483 484 +f 433 484 434 +f 433 479 485 +f 433 485 486 +f 433 486 480 +f 434 484 487 +f 434 487 488 +f 434 488 489 +f 434 489 490 +f 434 490 491 +f 434 491 436 +f 435 436 437 +f 436 491 469 +f 436 469 437 +f 437 468 438 +f 439 440 492 +f 439 492 493 +f 439 493 448 +f 440 441 494 +f 440 494 492 +f 441 445 446 +f 441 446 495 +f 441 495 494 +f 442 447 443 +f 443 464 444 +f 444 464 496 +f 444 496 497 +f 444 497 498 +f 444 498 499 +f 444 499 446 +f 446 499 500 +f 446 500 501 +f 446 501 502 +f 446 502 503 +f 446 503 504 +f 446 504 505 +f 446 505 506 +f 446 506 495 +f 448 493 507 +f 448 507 449 +f 450 455 508 +f 450 508 451 +f 451 460 458 +f 451 508 460 +f 452 456 509 +f 452 509 510 +f 452 510 511 +f 452 511 512 +f 452 512 513 +f 452 513 514 +f 452 514 453 +f 453 514 454 +f 454 514 515 +f 454 515 516 +f 454 516 508 +f 454 508 455 +f 456 475 517 +f 456 517 509 +f 457 460 518 +f 457 518 461 +f 458 460 459 +f 460 508 518 +f 461 519 463 +f 461 463 462 +f 461 518 520 +f 461 520 521 +f 461 521 519 +f 463 522 523 +f 463 523 464 +f 463 519 522 +f 464 524 496 +f 464 523 525 +f 464 525 524 +f 466 474 475 +f 466 475 467 +f 469 526 527 +f 469 527 470 +f 469 491 526 +f 470 528 529 +f 470 529 530 +f 470 530 471 +f 470 527 528 +f 471 530 472 +f 472 530 473 +f 473 530 517 +f 473 517 475 +f 473 475 474 +f 477 531 478 +f 478 531 532 +f 478 532 479 +f 479 532 533 +f 479 533 486 +f 479 486 485 +f 480 486 481 +f 481 486 534 +f 481 534 535 +f 481 535 536 +f 481 536 537 +f 481 537 538 +f 481 538 482 +f 482 539 483 +f 482 538 540 +f 482 540 539 +f 483 539 541 +f 483 541 484 +f 484 541 542 +f 484 542 487 +f 487 542 489 +f 487 489 488 +f 489 542 543 +f 489 543 490 +f 490 543 544 +f 490 544 491 +f 491 544 545 +f 491 545 546 +f 491 546 547 +f 491 547 526 +f 492 494 548 +f 492 548 493 +f 494 495 549 +f 494 549 548 +f 495 506 549 +f 496 524 550 +f 496 550 551 +f 496 551 497 +f 497 551 552 +f 497 552 553 +f 497 553 498 +f 498 553 499 +f 499 553 500 +f 500 553 501 +f 501 553 552 +f 501 552 502 +f 502 552 554 +f 502 554 555 +f 502 555 503 +f 503 556 557 +f 503 557 504 +f 503 555 558 +f 503 558 559 +f 503 559 560 +f 503 560 556 +f 504 557 505 +f 505 549 506 +f 508 561 562 +f 508 562 563 +f 508 563 564 +f 508 564 518 +f 508 516 561 +f 509 517 510 +f 510 517 511 +f 511 565 512 +f 511 517 530 +f 511 530 565 +f 512 566 567 +f 512 567 515 +f 512 515 514 +f 512 514 513 +f 512 565 568 +f 512 568 566 +f 515 567 562 +f 515 562 561 +f 515 561 516 +f 518 564 520 +f 519 521 522 +f 520 564 521 +f 521 564 569 +f 521 569 570 +f 521 570 522 +f 522 571 525 +f 522 525 523 +f 522 570 572 +f 522 572 573 +f 522 573 571 +f 524 574 550 +f 524 525 575 +f 524 575 574 +f 525 571 575 +f 526 547 576 +f 526 576 528 +f 526 528 527 +f 528 576 577 +f 528 577 578 +f 528 578 579 +f 528 579 568 +f 528 568 529 +f 529 568 530 +f 530 568 565 +f 535 580 536 +f 536 581 582 +f 536 582 537 +f 536 580 583 +f 536 583 581 +f 537 582 584 +f 537 584 585 +f 537 585 538 +f 538 585 586 +f 538 586 540 +f 539 540 587 +f 539 587 541 +f 540 588 589 +f 540 589 587 +f 540 586 590 +f 540 590 588 +f 541 587 542 +f 542 587 589 +f 542 589 543 +f 543 589 544 +f 544 589 588 +f 544 588 545 +f 545 588 546 +f 546 588 591 +f 546 591 576 +f 546 576 547 +f 550 574 551 +f 551 574 552 +f 552 574 592 +f 552 592 554 +f 554 575 571 +f 554 571 593 +f 554 593 555 +f 554 592 574 +f 554 574 575 +f 555 593 594 +f 555 594 558 +f 556 560 595 +f 558 594 559 +f 559 594 596 +f 559 596 597 +f 559 597 560 +f 560 597 598 +f 560 598 595 +f 562 567 599 +f 562 599 600 +f 562 600 601 +f 562 601 602 +f 562 602 563 +f 563 602 564 +f 564 602 603 +f 564 603 604 +f 564 604 605 +f 564 605 569 +f 566 568 606 +f 566 606 567 +f 567 607 599 +f 567 606 568 +f 567 568 579 +f 567 579 607 +f 569 605 608 +f 569 608 573 +f 569 573 572 +f 569 572 570 +f 571 573 609 +f 571 609 610 +f 571 610 611 +f 571 611 612 +f 571 612 593 +f 573 613 609 +f 573 608 613 +f 576 591 590 +f 576 590 614 +f 576 614 615 +f 576 615 616 +f 576 616 577 +f 577 616 617 +f 577 617 618 +f 577 618 607 +f 577 607 578 +f 578 607 579 +f 581 584 582 +f 581 583 619 +f 581 619 620 +f 581 620 621 +f 581 621 622 +f 581 622 584 +f 584 622 623 +f 584 623 624 +f 584 624 625 +f 584 625 585 +f 585 626 586 +f 585 625 627 +f 585 627 626 +f 586 626 590 +f 588 590 591 +f 590 626 628 +f 590 628 629 +f 590 629 630 +f 590 630 614 +f 593 612 613 +f 593 613 594 +f 594 613 631 +f 594 631 632 +f 594 632 633 +f 594 633 596 +f 595 598 634 +f 596 598 597 +f 596 633 635 +f 596 635 636 +f 596 636 637 +f 596 637 598 +f 598 637 638 +f 598 638 639 +f 598 639 634 +f 599 607 640 +f 599 640 641 +f 599 641 600 +f 600 641 642 +f 600 642 643 +f 600 643 603 +f 600 603 601 +f 601 603 602 +f 603 643 644 +f 603 644 604 +f 604 644 605 +f 605 644 645 +f 605 645 646 +f 605 646 647 +f 605 647 608 +f 607 618 640 +f 608 647 648 +f 608 648 649 +f 608 649 613 +f 609 613 612 +f 609 612 611 +f 609 611 610 +f 613 649 631 +f 614 630 629 +f 614 629 628 +f 614 628 626 +f 614 626 650 +f 614 650 615 +f 615 650 617 +f 615 617 616 +f 617 650 651 +f 617 651 641 +f 617 641 640 +f 617 640 618 +f 619 652 653 +f 619 653 620 +f 620 653 621 +f 621 623 622 +f 621 653 652 +f 621 652 654 +f 621 654 655 +f 621 655 656 +f 621 656 657 +f 621 657 658 +f 621 658 623 +f 623 658 659 +f 623 659 660 +f 623 660 661 +f 623 661 624 +f 624 661 625 +f 625 661 662 +f 625 662 627 +f 626 627 662 +f 626 662 650 +f 631 649 633 +f 631 633 632 +f 633 649 663 +f 633 663 664 +f 633 664 665 +f 633 665 666 +f 633 666 635 +f 634 639 667 +f 634 667 668 +f 635 666 636 +f 636 669 638 +f 636 638 637 +f 636 666 670 +f 636 670 671 +f 636 671 669 +f 638 667 639 +f 638 669 672 +f 638 672 673 +f 638 673 668 +f 638 668 667 +f 641 651 674 +f 641 674 642 +f 642 674 675 +f 642 675 676 +f 642 676 643 +f 643 676 645 +f 643 645 644 +f 645 676 707 +f 645 707 677 +f 645 677 646 +f 646 678 647 +f 646 677 678 +f 647 678 648 +f 648 679 680 +f 648 680 649 +f 648 678 679 +f 649 680 663 +f 650 662 681 +f 650 681 682 +f 650 682 651 +f 651 682 674 +f 655 683 656 +f 656 684 685 +f 656 685 686 +f 656 686 687 +f 656 687 688 +f 656 688 689 +f 656 689 657 +f 656 683 684 +f 657 689 690 +f 657 690 659 +f 657 659 658 +f 659 691 692 +f 659 692 660 +f 659 690 693 +f 659 693 691 +f 660 692 694 +f 660 694 661 +f 661 694 695 +f 661 695 681 +f 661 681 662 +f 663 680 696 +f 663 696 664 +f 664 696 665 +f 665 696 697 +f 665 697 666 +f 666 697 670 +f 669 698 699 +f 669 699 700 +f 669 700 672 +f 669 671 698 +f 670 697 671 +f 671 697 701 +f 671 701 702 +f 671 702 698 +f 672 703 673 +f 672 700 704 +f 672 704 699 +f 672 699 705 +f 672 705 703 +f 674 682 706 +f 674 706 707 +f 674 707 675 +f 675 707 676 +f 677 708 678 +f 677 707 709 +f 677 709 708 +f 678 708 696 +f 678 696 710 +f 678 710 679 +f 679 710 680 +f 680 710 696 +f 681 695 709 +f 681 709 682 +f 682 709 706 +f 684 711 685 +f 685 693 690 +f 685 690 686 +f 685 711 712 +f 685 712 693 +f 686 690 688 +f 686 688 687 +f 688 690 689 +f 691 713 694 +f 691 694 692 +f 691 693 714 +f 691 714 712 +f 691 712 723 +f 691 723 713 +f 693 712 714 +f 694 713 715 +f 694 715 695 +f 695 715 697 +f 695 697 696 +f 695 696 709 +f 696 708 709 +f 697 715 701 +f 698 705 716 +f 698 716 699 +f 698 702 701 +f 698 701 717 +f 698 717 705 +f 699 704 700 +f 699 716 705 +f 701 715 717 +f 703 705 718 +f 705 719 720 +f 705 720 721 +f 705 721 718 +f 705 717 719 +f 706 709 707 +f 711 722 712 +f 712 722 724 +f 712 724 723 +f 713 723 725 +f 713 725 717 +f 713 717 715 +f 717 725 726 +f 717 726 719 +f 719 726 727 +f 719 727 728 +f 719 728 720 +f 723 724 725 +f 724 729 725 +f 725 729 727 +f 725 727 726 + +o geometry_1 +v 0.07888390 0.06851706 -0.03738841 0.54117647 0.42352941 0.64313725 +v 0.08743498 0.06851706 -0.03570972 0.54117647 0.42352941 0.64313725 +v 0.07986746 0.03502314 -0.03729311 0.54117647 0.42352941 0.64313725 +v 0.07986746 0.03495084 -0.03729311 0.54117647 0.42352941 0.64313725 +v 0.07888390 0.03495084 -0.03730044 0.54117647 0.42352941 0.64313725 +v 0.07491296 0.03495084 -0.03732976 0.54117647 0.42352941 0.64313725 +v 0.07264491 0.03495084 -0.03734442 0.54117647 0.42352941 0.64313725 +v 0.07263757 0.03495084 -0.03734442 0.54117647 0.42352941 0.64313725 +v 0.07264491 0.03502314 -0.03734442 0.54117647 0.42352941 0.64313725 +v 0.07019335 0.06851706 -0.03704387 0.54117647 0.42352941 0.64313725 +v 0.08854332 0.03502314 -0.03533587 0.54117647 0.42352941 0.64313725 +v 0.08854332 0.03495084 -0.03533587 0.54117647 0.42352941 0.64313725 +v 0.08742764 0.03495084 -0.03570239 0.54117647 0.42352941 0.64313725 +v 0.08688448 0.03495084 -0.03587832 0.54117647 0.42352941 0.64313725 +v 0.08688448 0.03502314 -0.03587832 0.54117647 0.42352941 0.64313725 +v 0.08147491 0.03502314 -0.03697056 0.54117647 0.42352941 0.64313725 +v 0.09536217 0.06851706 -0.03211045 0.54117647 0.42352941 0.64313725 +v 0.09015812 0.03495084 -0.03472011 0.54117647 0.42352941 0.64313725 +v 0.08147491 0.03495084 -0.03697056 0.54117647 0.42352941 0.64313725 +v 0.07019335 0.03495084 -0.03704387 0.54117647 0.42352941 0.64313725 +v 0.07009793 0.03502314 -0.03702921 0.54117647 0.42352941 0.64313725 +v 0.06923181 0.03502314 -0.03686061 0.54117647 0.42352941 0.64313725 +v 0.06758032 0.03502314 -0.03653807 0.54117647 0.42352941 0.64313725 +v 0.06180374 0.06851706 -0.03470544 0.54117647 0.42352941 0.64313725 +v 0.10224708 0.06851706 -0.02678118 0.54117647 0.42352941 0.64313725 +v 0.09903216 0.03501985 -0.02958876 0.54117647 0.42352941 0.64313725 +v 0.09536217 0.03495084 -0.03211045 0.54117647 0.42352941 0.64313725 +v 0.07009793 0.03495084 -0.03702921 0.54117647 0.42352941 0.64313725 +v 0.06923181 0.03495084 -0.03686061 0.54117647 0.42352941 0.64313725 +v 0.06758032 0.03495084 -0.03653807 0.54117647 0.42352941 0.64313725 +v 0.06364608 0.03502314 -0.03540184 0.54117647 0.42352941 0.64313725 +v 0.06302952 0.03495084 -0.03511595 0.54117647 0.42352941 0.64313725 +v 0.05687861 0.03495084 -0.03225706 0.54117647 0.42352941 0.64313725 +v 0.05687861 0.03502314 -0.03225706 0.54117647 0.42352941 0.64313725 +v 0.05463992 0.06851706 -0.03082028 0.54117647 0.42352941 0.64313725 +v 0.10771537 0.06851706 -0.02000781 0.54117647 0.42352941 0.64313725 +v 0.10324532 0.03502314 -0.02576224 0.54117647 0.42352941 0.64313725 +v 0.10201220 0.03495084 -0.02700843 0.54117647 0.42352941 0.64313725 +v 0.10201220 0.03502314 -0.02700843 0.54117647 0.42352941 0.64313725 +v 0.10074238 0.03502314 -0.02817398 0.54117647 0.42352941 0.64313725 +v 0.09989094 0.03502314 -0.02889969 0.54117647 0.42352941 0.64313725 +v 0.09903216 0.03495084 -0.02958876 0.54117647 0.42352941 0.64313725 +v 0.06365342 0.03495084 -0.03540184 0.54117647 0.42352941 0.64313725 +v 0.05428026 0.03495084 -0.03035847 0.54117647 0.42352941 0.64313725 +v 0.05418484 0.06851706 -0.03049774 0.54117647 0.42352941 0.64313725 +v 0.10771537 0.05968350 -0.02000781 0.54117647 0.42352941 0.64313725 +v 0.10764197 0.06057408 -0.02011776 0.54117647 0.42352941 0.64313725 +v 0.11147344 0.06851706 -0.01214952 0.54117647 0.42352941 0.64313725 +v 0.10942559 0.06269374 -0.01698031 0.54117647 0.42352941 0.64313725 +v 0.10880169 0.06227967 -0.01816052 0.54117647 0.42352941 0.64313725 +v 0.10817779 0.06166842 -0.01924544 0.54117647 0.42352941 0.64313725 +v 0.10764197 0.05996612 -0.02011776 0.54117647 0.42352941 0.64313725 +v 0.10530785 0.03495084 -0.02310860 0.54117647 0.42352941 0.64313725 +v 0.10323797 0.03495084 -0.02576224 0.54117647 0.42352941 0.64313725 +v 0.10074238 0.03495084 -0.02817398 0.54117647 0.42352941 0.64313725 +v 0.09989094 0.03495084 -0.02889969 0.54117647 0.42352941 0.64313725 +v 0.05112406 0.03495084 -0.02804936 0.54117647 0.42352941 0.64313725 +v 0.05112406 0.03502314 -0.02804936 0.54117647 0.42352941 0.64313725 +v 0.04774033 0.06851706 -0.02464068 0.54117647 0.42352941 0.64313725 +v 0.10769335 0.03495084 -0.02003713 0.54117647 0.42352941 0.64313725 +v 0.10817779 0.05886850 -0.01924544 0.54117647 0.42352941 0.64313725 +v 0.11331578 0.06851706 -0.00363881 0.54117647 0.42352941 0.64313725 +v 0.11223680 0.06102759 -0.00962783 0.54117647 0.42352941 0.64313725 +v 0.11211936 0.06166842 -0.01006033 0.54117647 0.42352941 0.64313725 +v 0.11189182 0.06228624 -0.01085202 0.54117647 0.42352941 0.64313725 +v 0.11160556 0.06269374 -0.01175367 0.54117647 0.42352941 0.64313725 +v 0.11147344 0.05772486 -0.01214952 0.54117647 0.42352941 0.64313725 +v 0.11104038 0.03502314 -0.01334439 0.54117647 0.42352941 0.64313725 +v 0.11068806 0.06306838 -0.01423871 0.54117647 0.42352941 0.64313725 +v 0.10942559 0.05784317 -0.01698031 0.54117647 0.42352941 0.64313725 +v 0.10880169 0.05825725 -0.01816052 0.54117647 0.42352941 0.64313725 +v 0.04780639 0.03495084 -0.02456737 0.54117647 0.42352941 0.64313725 +v 0.04672741 0.03502314 -0.02343848 0.54117647 0.42352941 0.64313725 +v 0.04281520 0.06851706 -0.01745680 0.54117647 0.42352941 0.64313725 +v 0.10875030 0.03495084 -0.01793328 0.54117647 0.42352941 0.64313725 +v 0.11315429 0.06851706 0.00505515 0.54117647 0.42352941 0.64313725 +v 0.11349194 0.03502314 -0.00076526 0.54117647 0.42352941 0.64313725 +v 0.11334514 0.03502314 -0.00334560 0.54117647 0.42352941 0.64313725 +v 0.11334514 0.03495084 -0.00334560 0.54117647 0.42352941 0.64313725 +v 0.11330844 0.03495084 -0.00364615 0.54117647 0.42352941 0.64313725 +v 0.11302952 0.03502314 -0.00591860 0.54117647 0.42352941 0.64313725 +v 0.11288272 0.03502314 -0.00673961 0.54117647 0.42352941 0.64313725 +v 0.11228084 0.06026846 -0.00945923 0.54117647 0.42352941 0.64313725 +v 0.11223680 0.05950932 -0.00962783 0.54117647 0.42352941 0.64313725 +v 0.11211936 0.05886850 -0.01006033 0.54117647 0.42352941 0.64313725 +v 0.11189182 0.05824739 -0.01085202 0.54117647 0.42352941 0.64313725 +v 0.11159088 0.05786946 -0.01179032 0.54117647 0.42352941 0.64313725 +v 0.11104038 0.03495084 -0.01334439 0.54117647 0.42352941 0.64313725 +v 0.11068806 0.05746854 -0.01423871 0.54117647 0.42352941 0.64313725 +v 0.04672741 0.03495084 -0.02343115 0.54117647 0.42352941 0.64313725 +v 0.04284456 0.03502314 -0.01751544 0.54117647 0.42352941 0.64313725 +v 0.04247756 0.03495084 -0.01680438 0.54117647 0.42352941 0.64313725 +v 0.04082606 0.06851706 -0.01299985 0.54117647 0.42352941 0.64313725 +v 0.11294144 0.03495084 0.00641862 0.54117647 0.42352941 0.64313725 +v 0.11098166 0.06851706 0.01349255 0.54117647 0.42352941 0.64313725 +v 0.11332312 0.03495084 0.00141923 0.54117647 0.42352941 0.64313725 +v 0.11348459 0.03495084 -0.00076526 0.54117647 0.42352941 0.64313725 +v 0.11302952 0.03495084 -0.00590394 0.54117647 0.42352941 0.64313725 +v 0.11288272 0.03495084 -0.00673961 0.54117647 0.42352941 0.64313725 +v 0.11138536 0.03495084 -0.01212020 0.54117647 0.42352941 0.64313725 +v 0.04285190 0.03495084 -0.01751544 0.54117647 0.42352941 0.64313725 +v 0.04282254 0.03495084 -0.01746413 0.54117647 0.42352941 0.64313725 +v 0.04132518 0.03495084 -0.01386485 0.54117647 0.42352941 0.64313725 +v 0.03999664 0.03502314 -0.01046350 0.54117647 0.42352941 0.64313725 +v 0.03998930 0.03495084 -0.01044151 0.54117647 0.42352941 0.64313725 +v 0.03968836 0.06851706 -0.00933461 0.54117647 0.42352941 0.64313725 +v 0.11109910 0.03502314 0.01319200 0.54117647 0.42352941 0.64313725 +v 0.11109910 0.03495084 0.01318467 0.54117647 0.42352941 0.64313725 +v 0.10955036 0.03502314 0.01673996 0.54117647 0.42352941 0.64313725 +v 0.10955036 0.03495084 0.01673996 0.54117647 0.42352941 0.64313725 +v 0.11097432 0.03502314 0.01348522 0.54117647 0.42352941 0.64313725 +v 0.10692999 0.06851706 0.02119690 0.54117647 0.42352941 0.64313725 +v 0.03943146 0.03495084 -0.00750198 0.54117647 0.42352941 0.64313725 +v 0.03866077 0.03502314 -0.00341157 0.54117647 0.42352941 0.64313725 +v 0.03850662 0.06851706 -0.00070662 0.54117647 0.42352941 0.64313725 +v 0.11097432 0.03495084 0.01347789 0.54117647 0.42352941 0.64313725 +v 0.10784015 0.03502314 0.01980410 0.54117647 0.42352941 0.64313725 +v 0.10784015 0.03495084 0.01980410 0.54117647 0.42352941 0.64313725 +v 0.10120480 0.06851706 0.02775769 0.54117647 0.42352941 0.64313725 +v 0.10477203 0.03502314 0.02404846 0.54117647 0.42352941 0.64313725 +v 0.10588037 0.03502314 0.02265566 0.54117647 0.42352941 0.64313725 +v 0.10690063 0.03502314 0.02117490 0.54117647 0.42352941 0.64313725 +v 0.03866077 0.03495084 -0.00340424 0.54117647 0.42352941 0.64313725 +v 0.03863140 0.03495084 0.00022435 0.54117647 0.42352941 0.64313725 +v 0.03864608 0.03495084 0.00311990 0.54117647 0.42352941 0.64313725 +v 0.03869747 0.03502314 0.00383829 0.54117647 0.42352941 0.64313725 +v 0.03935806 0.06851706 0.00795069 0.54117647 0.42352941 0.64313725 +v 0.10588037 0.03495084 0.02264833 0.54117647 0.42352941 0.64313725 +v 0.10085982 0.03502314 0.02807290 0.54117647 0.42352941 0.64313725 +v 0.10105800 0.03502314 0.02789697 0.54117647 0.42352941 0.64313725 +v 0.10116076 0.03502314 0.02780167 0.54117647 0.42352941 0.64313725 +v 0.10121214 0.03495084 0.02775036 0.54117647 0.42352941 0.64313725 +v 0.09412905 0.06851706 0.03282306 0.54117647 0.42352941 0.64313725 +v 0.09781373 0.03502314 0.03049929 0.54117647 0.42352941 0.64313725 +v 0.09822476 0.03502314 0.03019874 0.54117647 0.42352941 0.64313725 +v 0.09847432 0.03502314 0.03001548 0.54117647 0.42352941 0.64313725 +v 0.09862112 0.03502314 0.02990552 0.54117647 0.42352941 0.64313725 +v 0.09912758 0.03502314 0.02951701 0.54117647 0.42352941 0.64313725 +v 0.09934044 0.03502314 0.02934840 0.54117647 0.42352941 0.64313725 +v 0.09959734 0.03495084 0.02914315 0.54117647 0.42352941 0.64313725 +v 0.10014784 0.03502314 0.02868866 0.54117647 0.42352941 0.64313725 +v 0.10068366 0.03502314 0.02822684 0.54117647 0.42352941 0.64313725 +v 0.03871948 0.03495084 0.00400689 0.54117647 0.42352941 0.64313725 +v 0.03904978 0.03495084 0.00590549 0.54117647 0.42352941 0.64313725 +v 0.03937274 0.03495084 0.00751086 0.54117647 0.42352941 0.64313725 +v 0.03995260 0.03495084 0.01023781 0.54117647 0.42352941 0.64313725 +v 0.04014344 0.03502314 0.01096353 0.54117647 0.42352941 0.64313725 +v 0.04032694 0.03495084 0.01152064 0.54117647 0.42352941 0.64313725 +v 0.04217662 0.06851706 0.01619017 0.54117647 0.42352941 0.64313725 +v 0.10085982 0.03495084 0.02807290 0.54117647 0.42352941 0.64313725 +v 0.10111672 0.03495084 0.02783832 0.54117647 0.42352941 0.64313725 +v 0.09019482 0.03502314 0.03470699 0.54117647 0.42352941 0.64313725 +v 0.09119306 0.03502314 0.03427450 0.54117647 0.42352941 0.64313725 +v 0.09161144 0.03502314 0.03408390 0.54117647 0.42352941 0.64313725 +v 0.09218395 0.03502314 0.03382000 0.54117647 0.42352941 0.64313725 +v 0.09316017 0.03502314 0.03333619 0.54117647 0.42352941 0.64313725 +v 0.09363727 0.03502314 0.03308696 0.54117647 0.42352941 0.64313725 +v 0.09412905 0.03502314 0.03282306 0.54117647 0.42352941 0.64313725 +v 0.09450339 0.03502314 0.03261047 0.54117647 0.42352941 0.64313725 +v 0.09507591 0.03502314 0.03228060 0.54117647 0.42352941 0.64313725 +v 0.09553833 0.03502314 0.03200204 0.54117647 0.42352941 0.64313725 +v 0.09600074 0.03502314 0.03171615 0.54117647 0.42352941 0.64313725 +v 0.09660263 0.03502314 0.03132764 0.54117647 0.42352941 0.64313725 +v 0.09701366 0.03495084 0.03105641 0.54117647 0.42352941 0.64313725 +v 0.09741736 0.03495084 0.03077785 0.54117647 0.42352941 0.64313725 +v 0.08606975 0.06851706 0.03612178 0.54117647 0.42352941 0.64313725 +v 0.09771830 0.03495084 0.03056526 0.54117647 0.42352941 0.64313725 +v 0.09782106 0.03495084 0.03049196 0.54117647 0.42352941 0.64313725 +v 0.09822476 0.03495084 0.03019874 0.54117647 0.42352941 0.64313725 +v 0.09881930 0.03495084 0.02975158 0.54117647 0.42352941 0.64313725 +v 0.09920832 0.03495084 0.02945103 0.54117647 0.42352941 0.64313725 +v 0.10032400 0.03495084 0.02853472 0.54117647 0.42352941 0.64313725 +v 0.10068366 0.03495084 0.02822684 0.54117647 0.42352941 0.64313725 +v 0.04014344 0.03495084 0.01094154 0.54117647 0.42352941 0.64313725 +v 0.04071596 0.03495084 0.01263488 0.54117647 0.42352941 0.64313725 +v 0.04095818 0.03502314 0.01335327 0.54117647 0.42352941 0.64313725 +v 0.04118572 0.03495084 0.01390305 0.54117647 0.42352941 0.64313725 +v 0.04172154 0.03495084 0.01517856 0.54117647 0.42352941 0.64313725 +v 0.04193440 0.03502314 0.01566237 0.54117647 0.42352941 0.64313725 +v 0.04303540 0.03495084 0.01783220 0.54117647 0.42352941 0.64313725 +v 0.04335836 0.03495084 0.01844063 0.54117647 0.42352941 0.64313725 +v 0.04353452 0.03502314 0.01875584 0.54117647 0.42352941 0.64313725 +v 0.04682283 0.06851706 0.02354998 0.54117647 0.42352941 0.64313725 +v 0.08917456 0.03502314 0.03510284 0.54117647 0.42352941 0.64313725 +v 0.08978378 0.03495084 0.03486093 0.54117647 0.42352941 0.64313725 +v 0.08982048 0.03495084 0.03484627 0.54117647 0.42352941 0.64313725 +v 0.09070127 0.03495084 0.03448708 0.54117647 0.42352941 0.64313725 +v 0.09161144 0.03495084 0.03408390 0.54117647 0.42352941 0.64313725 +v 0.09250691 0.03495084 0.03365873 0.54117647 0.42352941 0.64313725 +v 0.09319687 0.03495084 0.03331420 0.54117647 0.42352941 0.64313725 +v 0.09362993 0.03495084 0.03308696 0.54117647 0.42352941 0.64313725 +v 0.09407033 0.03495084 0.03285238 0.54117647 0.42352941 0.64313725 +v 0.09450339 0.03495084 0.03261047 0.54117647 0.42352941 0.64313725 +v 0.09535482 0.03495084 0.03211200 0.54117647 0.42352941 0.64313725 +v 0.09546492 0.03495084 0.03204603 0.54117647 0.42352941 0.64313725 +v 0.09577321 0.03495084 0.03185543 0.54117647 0.42352941 0.64313725 +v 0.09619159 0.03495084 0.03159153 0.54117647 0.42352941 0.64313725 +v 0.09660263 0.03495084 0.03132764 0.54117647 0.42352941 0.64313725 +v 0.07746728 0.06851706 0.03747059 0.54117647 0.42352941 0.64313725 +v 0.08180521 0.03502314 0.03704542 0.54117647 0.42352941 0.64313725 +v 0.08394849 0.03502314 0.03664224 0.54117647 0.42352941 0.64313725 +v 0.08606975 0.03502314 0.03612178 0.54117647 0.42352941 0.64313725 +v 0.08814696 0.03502314 0.03546937 0.54117647 0.42352941 0.64313725 +v 0.04253628 0.03495084 0.01683525 0.54117647 0.42352941 0.64313725 +v 0.04352718 0.03495084 0.01874118 0.54117647 0.42352941 0.64313725 +v 0.04537685 0.03502314 0.02163672 0.54117647 0.42352941 0.64313725 +v 0.04555301 0.03495084 0.02187863 0.54117647 0.42352941 0.64313725 +v 0.04621361 0.03502314 0.02277295 0.54117647 0.42352941 0.64313725 +v 0.04682283 0.03502314 0.02354998 0.54117647 0.42352941 0.64313725 +v 0.04695495 0.03495084 0.02371125 0.54117647 0.42352941 0.64313725 +v 0.04897345 0.03502314 0.02599104 0.54117647 0.42352941 0.64313725 +v 0.05303980 0.06851706 0.02964162 0.54117647 0.42352941 0.64313725 +v 0.08886628 0.03495084 0.03520547 0.54117647 0.42352941 0.64313725 +v 0.07352571 0.06269374 0.03741195 0.54117647 0.42352941 0.64313725 +v 0.07447256 0.06228624 0.03746326 0.54117647 0.42352941 0.64313725 +v 0.07530198 0.06166842 0.03749258 0.54117647 0.42352941 0.64313725 +v 0.07591854 0.06026846 0.03749991 0.54117647 0.42352941 0.64313725 +v 0.07746728 0.03502314 0.03747059 0.54117647 0.42352941 0.64313725 +v 0.06879141 0.06851706 0.03679618 0.54117647 0.42352941 0.64313725 +v 0.08045465 0.03495084 0.03717004 0.54117647 0.42352941 0.64313725 +v 0.08124737 0.03495084 0.03707474 0.54117647 0.42352941 0.64313725 +v 0.08510820 0.03495084 0.03634169 0.54117647 0.42352941 0.64313725 +v 0.08606240 0.03495084 0.03609246 0.54117647 0.42352941 0.64313725 +v 0.08700192 0.03495084 0.03582123 0.54117647 0.42352941 0.64313725 +v 0.04500985 0.03495084 0.02104295 0.54117647 0.42352941 0.64313725 +v 0.04648519 0.03495084 0.02310282 0.54117647 0.42352941 0.64313725 +v 0.04822477 0.03495084 0.02513337 0.54117647 0.42352941 0.64313725 +v 0.04931109 0.03495084 0.02632091 0.54117647 0.42352941 0.64313725 +v 0.05012583 0.03495084 0.02706129 0.54117647 0.42352941 0.64313725 +v 0.05303980 0.03502314 0.02964162 0.54117647 0.42352941 0.64313725 +v 0.05664374 0.03502314 0.03211200 0.54117647 0.42352941 0.64313725 +v 0.06049723 0.06851706 0.03414254 0.54117647 0.42352941 0.64313725 +v 0.07089799 0.06306838 0.03714805 0.54117647 0.42352941 0.64313725 +v 0.07311467 0.03502314 0.03738262 0.54117647 0.42352941 0.64313725 +v 0.07352571 0.05784317 0.03741195 0.54117647 0.42352941 0.64313725 +v 0.07447256 0.05824739 0.03746326 0.54117647 0.42352941 0.64313725 +v 0.07530198 0.05886850 0.03749258 0.54117647 0.42352941 0.64313725 +v 0.07644702 0.03495084 0.03740462 0.54117647 0.42352941 0.64313725 +v 0.07645436 0.03495084 0.03740462 0.54117647 0.42352941 0.64313725 +v 0.07723240 0.03495084 0.03738262 0.54117647 0.42352941 0.64313725 +v 0.07845818 0.03495084 0.03734597 0.54117647 0.42352941 0.64313725 +v 0.06541502 0.06166842 0.03596784 0.54117647 0.42352941 0.64313725 +v 0.06662612 0.06227967 0.03630504 0.54117647 0.42352941 0.64313725 +v 0.06792530 0.06269374 0.03661292 0.54117647 0.42352941 0.64313725 +v 0.06879141 0.03502314 0.03679618 0.54117647 0.42352941 0.64313725 +v 0.05229112 0.03495084 0.02897455 0.54117647 0.42352941 0.64313725 +v 0.05296640 0.03495084 0.02956099 0.54117647 0.42352941 0.64313725 +v 0.05334074 0.03495084 0.02983955 0.54117647 0.42352941 0.64313725 +v 0.05542530 0.03495084 0.03126899 0.54117647 0.42352941 0.64313725 +v 0.05623270 0.03495084 0.03179679 0.54117647 0.42352941 0.64313725 +v 0.05698871 0.03495084 0.03225128 0.54117647 0.42352941 0.64313725 +v 0.05780345 0.03495084 0.03269111 0.54117647 0.42352941 0.64313725 +v 0.05872829 0.03495084 0.03318958 0.54117647 0.42352941 0.64313725 +v 0.06049723 0.03502314 0.03414254 0.54117647 0.42352941 0.64313725 +v 0.06439476 0.06026846 0.03565263 0.54117647 0.42352941 0.64313725 +v 0.06449752 0.06071540 0.03568928 0.54117647 0.42352941 0.64313725 +v 0.06473974 0.06109332 0.03576258 0.54117647 0.42352941 0.64313725 +v 0.07089799 0.05746854 0.03714805 0.54117647 0.42352941 0.64313725 +v 0.07246875 0.03495084 0.03721402 0.54117647 0.42352941 0.64313725 +v 0.06541502 0.05886850 0.03596784 0.54117647 0.42352941 0.64313725 +v 0.06489388 0.05928257 0.03581390 0.54117647 0.42352941 0.64313725 +v 0.06662612 0.05825725 0.03630504 0.54117647 0.42352941 0.64313725 +v 0.06614902 0.03495084 0.03604847 0.54117647 0.42352941 0.64313725 +v 0.06811613 0.03495084 0.03652496 0.54117647 0.42352941 0.64313725 +v 0.07054567 0.03495084 0.03691347 0.54117647 0.42352941 0.64313725 +v 0.06457092 0.03502314 0.03571127 0.54117647 0.42352941 0.64313725 +v 0.05875765 0.03495084 0.03320424 0.54117647 0.42352941 0.64313725 +v 0.06051925 0.03495084 0.03403992 0.54117647 0.42352941 0.64313725 +v 0.06396904 0.03495084 0.03537407 0.54117647 0.42352941 0.64313725 +v 0.06449752 0.05982481 0.03568928 0.54117647 0.42352941 0.64313725 +v 0.06424062 0.03495084 0.03547670 0.54117647 0.42352941 0.64313725 +f 730 731 732 +f 730 732 733 +f 730 733 734 +f 730 734 735 +f 730 735 736 +f 730 736 737 +f 730 737 738 +f 730 738 739 +f 730 739 753 +f 730 753 764 +f 730 764 774 +f 730 774 788 +f 730 788 803 +f 730 803 822 +f 730 822 835 +f 730 835 844 +f 730 844 856 +f 730 856 878 +f 730 878 912 +f 730 912 941 +f 730 941 961 +f 730 961 948 +f 730 948 928 +f 730 928 895 +f 730 895 862 +f 730 862 848 +f 730 848 841 +f 730 841 824 +f 730 824 805 +f 730 805 791 +f 730 791 777 +f 730 777 765 +f 730 765 754 +f 730 754 746 +f 730 746 731 +f 731 740 741 +f 731 741 742 +f 731 742 743 +f 731 743 744 +f 731 744 745 +f 731 745 732 +f 731 746 747 +f 731 747 740 +f 732 745 748 +f 732 748 733 +f 733 748 743 +f 733 743 742 +f 733 742 741 +f 733 741 747 +f 733 747 756 +f 733 756 771 +f 733 771 785 +f 733 785 784 +f 733 784 767 +f 733 767 783 +f 733 783 782 +f 733 782 789 +f 733 789 804 +f 733 804 817 +f 733 817 829 +f 733 829 828 +f 733 828 827 +f 733 827 809 +f 733 809 808 +f 733 808 826 +f 733 826 825 +f 733 825 823 +f 733 823 837 +f 733 837 845 +f 733 845 839 +f 733 839 847 +f 733 847 857 +f 733 857 861 +f 733 861 880 +f 733 880 879 +f 733 879 902 +f 733 902 901 +f 733 901 869 +f 733 869 900 +f 733 900 899 +f 733 899 898 +f 733 898 897 +f 733 897 896 +f 733 896 894 +f 733 894 893 +f 733 893 927 +f 733 927 926 +f 733 926 925 +f 733 925 924 +f 733 924 923 +f 733 923 922 +f 733 922 921 +f 733 921 920 +f 733 920 919 +f 733 919 918 +f 733 918 917 +f 733 917 916 +f 733 916 915 +f 733 915 914 +f 733 914 942 +f 733 942 953 +f 733 953 952 +f 733 952 951 +f 733 951 950 +f 733 950 949 +f 733 949 970 +f 733 970 969 +f 733 969 968 +f 733 968 967 +f 733 967 988 +f 733 988 994 +f 733 994 993 +f 733 993 992 +f 733 992 1000 +f 733 1000 998 +f 733 998 997 +f 733 997 996 +f 733 996 982 +f 733 982 981 +f 733 981 980 +f 733 980 979 +f 733 979 978 +f 733 978 977 +f 733 977 976 +f 733 976 975 +f 733 975 958 +f 733 958 957 +f 733 957 956 +f 733 956 939 +f 733 939 955 +f 733 955 936 +f 733 936 954 +f 733 954 934 +f 733 934 910 +f 733 910 909 +f 733 909 933 +f 733 933 907 +f 733 907 906 +f 733 906 904 +f 733 904 877 +f 733 877 903 +f 733 903 875 +f 733 875 874 +f 733 874 873 +f 733 873 872 +f 733 872 854 +f 733 854 853 +f 733 853 852 +f 733 852 842 +f 733 842 834 +f 733 834 832 +f 733 832 821 +f 733 821 831 +f 733 831 830 +f 733 830 819 +f 733 819 801 +f 733 801 786 +f 733 786 773 +f 733 773 762 +f 733 762 761 +f 733 761 772 +f 733 772 759 +f 733 759 758 +f 733 758 757 +f 733 757 749 +f 733 749 737 +f 733 737 736 +f 733 736 735 +f 733 735 734 +f 737 749 739 +f 737 739 738 +f 739 749 757 +f 739 757 750 +f 739 750 751 +f 739 751 752 +f 739 752 753 +f 740 747 741 +f 743 748 745 +f 743 745 744 +f 746 754 755 +f 746 755 771 +f 746 771 756 +f 746 756 747 +f 750 757 758 +f 750 758 751 +f 751 758 759 +f 751 759 752 +f 752 759 760 +f 752 760 753 +f 753 760 761 +f 753 761 762 +f 753 762 763 +f 753 763 764 +f 754 765 766 +f 754 766 767 +f 754 767 768 +f 754 768 769 +f 754 769 770 +f 754 770 755 +f 755 770 785 +f 755 785 771 +f 759 772 760 +f 760 772 761 +f 762 773 774 +f 762 774 764 +f 762 764 763 +f 765 775 781 +f 765 781 776 +f 765 776 766 +f 765 777 778 +f 765 778 779 +f 765 779 780 +f 765 780 790 +f 765 790 775 +f 766 776 781 +f 766 781 782 +f 766 782 783 +f 766 783 767 +f 767 784 769 +f 767 769 768 +f 769 784 785 +f 769 785 770 +f 773 786 774 +f 774 786 787 +f 774 787 788 +f 775 789 781 +f 775 790 789 +f 777 791 792 +f 777 792 793 +f 777 793 794 +f 777 794 795 +f 777 795 796 +f 777 796 817 +f 777 817 797 +f 777 797 798 +f 777 798 778 +f 778 798 818 +f 778 818 799 +f 778 799 800 +f 778 800 779 +f 779 800 790 +f 779 790 780 +f 781 789 782 +f 786 801 802 +f 786 802 788 +f 786 788 787 +f 788 802 803 +f 789 790 800 +f 789 800 799 +f 789 799 804 +f 791 805 806 +f 791 806 807 +f 791 807 808 +f 791 808 809 +f 791 809 810 +f 791 810 811 +f 791 811 812 +f 791 812 792 +f 792 812 813 +f 792 813 814 +f 792 814 793 +f 793 814 815 +f 793 815 794 +f 794 815 795 +f 795 815 816 +f 795 816 796 +f 796 816 817 +f 797 817 818 +f 797 818 798 +f 799 818 817 +f 799 817 804 +f 801 819 802 +f 802 819 820 +f 802 820 803 +f 803 820 821 +f 803 821 822 +f 805 823 806 +f 805 824 823 +f 806 825 826 +f 806 826 808 +f 806 808 807 +f 806 823 825 +f 809 827 810 +f 810 827 828 +f 810 828 811 +f 811 828 812 +f 812 828 813 +f 813 828 814 +f 814 828 829 +f 814 829 817 +f 814 817 815 +f 815 817 816 +f 819 830 820 +f 820 830 831 +f 820 831 821 +f 821 832 822 +f 822 832 833 +f 822 833 834 +f 822 834 835 +f 823 836 837 +f 823 824 836 +f 824 838 839 +f 824 839 840 +f 824 840 836 +f 824 841 838 +f 832 834 833 +f 834 842 835 +f 835 842 843 +f 835 843 844 +f 836 840 845 +f 836 845 837 +f 838 846 847 +f 838 847 839 +f 838 841 846 +f 839 845 840 +f 841 848 849 +f 841 849 850 +f 841 850 851 +f 841 851 847 +f 841 847 846 +f 842 852 843 +f 843 852 844 +f 844 852 853 +f 844 853 854 +f 844 854 855 +f 844 855 856 +f 847 851 850 +f 847 850 857 +f 848 858 859 +f 848 859 860 +f 848 860 861 +f 848 861 849 +f 848 862 863 +f 848 863 864 +f 848 864 865 +f 848 865 866 +f 848 866 867 +f 848 867 868 +f 848 868 869 +f 848 869 870 +f 848 870 871 +f 848 871 858 +f 849 861 857 +f 849 857 850 +f 854 872 855 +f 855 872 856 +f 856 872 873 +f 856 873 874 +f 856 874 875 +f 856 875 876 +f 856 876 877 +f 856 877 878 +f 858 871 902 +f 858 902 879 +f 858 879 859 +f 859 879 880 +f 859 880 861 +f 859 861 860 +f 862 881 882 +f 862 882 883 +f 862 883 884 +f 862 884 885 +f 862 885 886 +f 862 886 887 +f 862 887 922 +f 862 922 888 +f 862 888 889 +f 862 889 890 +f 862 890 891 +f 862 891 892 +f 862 892 893 +f 862 893 894 +f 862 894 863 +f 862 895 881 +f 863 894 896 +f 863 896 897 +f 863 897 898 +f 863 898 864 +f 864 898 865 +f 865 898 866 +f 866 898 899 +f 866 899 867 +f 867 899 900 +f 867 900 869 +f 867 869 868 +f 869 901 870 +f 870 901 902 +f 870 902 871 +f 875 903 876 +f 876 903 877 +f 877 904 905 +f 877 905 878 +f 878 905 906 +f 878 906 907 +f 878 907 908 +f 878 908 909 +f 878 909 910 +f 878 910 911 +f 878 911 912 +f 881 913 914 +f 881 914 915 +f 881 915 916 +f 881 916 882 +f 881 895 913 +f 882 916 917 +f 882 917 883 +f 883 917 884 +f 884 917 918 +f 884 918 885 +f 885 918 919 +f 885 919 886 +f 886 919 920 +f 886 920 921 +f 886 921 887 +f 887 921 922 +f 888 922 889 +f 889 922 923 +f 889 923 924 +f 889 924 890 +f 890 924 925 +f 890 925 891 +f 891 925 926 +f 891 926 927 +f 891 927 892 +f 892 927 893 +f 895 928 929 +f 895 929 930 +f 895 930 931 +f 895 931 932 +f 895 932 913 +f 904 906 905 +f 907 933 908 +f 908 933 909 +f 910 934 911 +f 911 934 935 +f 911 935 912 +f 912 935 936 +f 912 936 937 +f 912 937 938 +f 912 938 939 +f 912 939 940 +f 912 940 941 +f 913 932 942 +f 913 942 914 +f 928 943 944 +f 928 944 945 +f 928 945 946 +f 928 946 947 +f 928 947 929 +f 928 948 943 +f 929 947 949 +f 929 949 950 +f 929 950 930 +f 930 950 951 +f 930 951 931 +f 931 951 952 +f 931 952 953 +f 931 953 932 +f 932 953 942 +f 934 954 935 +f 935 954 936 +f 936 955 937 +f 937 955 939 +f 937 939 938 +f 939 956 940 +f 940 956 957 +f 940 957 941 +f 941 957 958 +f 941 958 959 +f 941 959 960 +f 941 960 961 +f 943 962 963 +f 943 963 964 +f 943 964 965 +f 943 965 944 +f 943 948 962 +f 944 965 966 +f 944 966 945 +f 945 966 946 +f 946 966 947 +f 947 966 963 +f 947 963 967 +f 947 967 968 +f 947 968 969 +f 947 969 970 +f 947 970 949 +f 948 961 971 +f 948 971 972 +f 948 972 973 +f 948 973 974 +f 948 974 987 +f 948 987 962 +f 958 975 959 +f 959 975 976 +f 959 976 977 +f 959 977 978 +f 959 978 960 +f 960 978 979 +f 960 979 980 +f 960 980 981 +f 960 981 982 +f 960 982 983 +f 960 983 961 +f 961 983 984 +f 961 984 985 +f 961 985 986 +f 961 986 971 +f 962 987 963 +f 963 965 964 +f 963 987 974 +f 963 974 988 +f 963 988 967 +f 963 966 965 +f 971 989 991 +f 971 991 972 +f 971 986 990 +f 971 990 989 +f 972 991 973 +f 973 991 974 +f 974 992 993 +f 974 993 994 +f 974 994 988 +f 974 991 995 +f 974 995 992 +f 982 996 983 +f 983 996 997 +f 983 997 998 +f 983 998 995 +f 983 995 984 +f 984 995 999 +f 984 999 985 +f 985 999 990 +f 985 990 986 +f 989 990 995 +f 989 995 991 +f 990 999 995 +f 992 995 1000 +f 995 998 1000 + +o geometry_2 +v 0.11349187 0.03494756 -0.00076551 0.43529412 0.89019608 0.96078431 +v 0.11346864 -0.01254724 0.00143603 0.43529412 0.89019608 0.96078431 +v 0.11344541 -0.01254724 -0.00184145 0.43529412 0.89019608 0.96078431 +v 0.11334472 0.03494756 -0.00334776 0.43529412 0.89019608 0.96078431 +v 0.11305042 0.03494756 0.00504457 0.43529412 0.89019608 0.96078431 +v 0.11305042 -0.02052499 0.00141948 0.43529412 0.89019608 0.96078431 +v 0.11294199 0.03494756 0.00641847 0.43529412 0.89019608 0.96078431 +v 0.11318982 -0.01254724 0.00476317 0.43529412 0.89019608 0.96078431 +v 0.11302718 -0.02052499 -0.00181662 0.43529412 0.89019608 0.96078431 +v 0.11314336 -0.01254724 -0.00511065 0.43529412 0.89019608 0.96078431 +v 0.11312787 0.03494756 -0.00511065 0.43529412 0.89019608 0.96078431 +v 0.11231466 -0.02379456 0.00139465 0.43529412 0.89019608 0.96078431 +v 0.11277160 -0.02052499 0.00471351 0.43529412 0.89019608 0.96078431 +v 0.11174928 -0.01254724 0.01129330 0.43529412 0.89019608 0.96078431 +v 0.11262445 -0.01254724 0.00801582 0.43529412 0.89019608 0.96078431 +v 0.11109871 0.03494756 0.01318862 0.43529412 0.89019608 0.96078431 +v 0.11221398 -0.02052499 0.00792478 0.43529412 0.89019608 0.96078431 +v 0.11200486 -0.02379456 -0.00495340 0.43529412 0.89019608 0.96078431 +v 0.11272513 -0.02052499 -0.00505272 0.43529412 0.89019608 0.96078431 +v 0.11302718 -0.01254724 -0.00590519 0.43529412 0.89019608 0.96078431 +v 0.11302718 0.03494756 -0.00592175 0.43529412 0.89019608 0.96078431 +v 0.11102127 -0.02700907 0.00134499 0.43529412 0.89019608 0.96078431 +v 0.11150145 -0.02379456 0.00776753 0.43529412 0.89019608 0.96078431 +v 0.11023903 -0.02700907 0.00748613 0.43529412 0.89019608 0.96078431 +v 0.11135430 -0.02052499 0.01116088 0.43529412 0.89019608 0.96078431 +v 0.11061079 -0.01254724 0.01441353 0.43529412 0.89019608 0.96078431 +v 0.11097480 0.03494756 0.01347829 0.43529412 0.89019608 0.96078431 +v 0.11071922 -0.02700907 -0.00477959 0.43529412 0.89019608 0.96078431 +v 0.11061079 -0.02700907 -0.00551620 0.43529412 0.89019608 0.96078431 +v 0.11188869 -0.02379456 -0.00572311 0.43529412 0.89019608 0.96078431 +v 0.11260896 -0.02052499 -0.00583898 0.43529412 0.89019608 0.96078431 +v 0.11197388 -0.02052499 -0.00897576 0.43529412 0.89019608 0.96078431 +v 0.11237661 -0.01254724 -0.00907508 0.43529412 0.89019608 0.96078431 +v 0.11288778 0.03494756 -0.00674112 0.43529412 0.89019608 0.96078431 +v 0.10822537 -0.02997577 0.00704748 0.43529412 0.89019608 0.96078431 +v 0.10896113 -0.02997577 0.00126223 0.43529412 0.89019608 0.96078431 +v 0.10868232 -0.02997577 -0.00449819 0.43529412 0.89019608 0.96078431 +v 0.10954974 -0.02379456 0.01397488 0.43529412 0.89019608 0.96078431 +v 0.10834929 -0.02700907 0.01347002 0.43529412 0.89019608 0.96078431 +v 0.10645180 -0.02997577 0.01268375 0.43529412 0.89019608 0.96078431 +v 0.11022354 -0.02052499 0.01425628 0.43529412 0.89019608 0.96078431 +v 0.10954974 0.03494756 0.01674750 0.43529412 0.89019608 0.96078431 +v 0.10783813 -0.01254724 0.01980151 0.43529412 0.89019608 0.96078431 +v 0.10857389 -0.02997577 -0.00519342 0.43529412 0.89019608 0.96078431 +v 0.10720305 -0.02997577 -0.01070554 0.43529412 0.89019608 0.96078431 +v 0.10914701 -0.02700907 -0.01136766 0.43529412 0.89019608 0.96078431 +v 0.11037844 -0.02379456 -0.01178976 0.43529412 0.89019608 0.96078431 +v 0.11106773 -0.02052499 -0.01202978 0.43529412 0.89019608 0.96078431 +v 0.11146273 -0.01254724 -0.01216220 0.43529412 0.89019608 0.96078431 +v 0.11103675 0.03494756 -0.01334574 0.43529412 0.89019608 0.96078431 +v 0.11138528 0.03494756 -0.01212082 0.43529412 0.89019608 0.96078431 +v 0.10366365 -0.03241246 0.01152505 0.43529412 0.89019608 0.96078431 +v 0.10527458 -0.03241246 0.00640191 0.43529412 0.89019608 0.96078431 +v 0.10594838 -0.03241246 0.00114636 0.43529412 0.89019608 0.96078431 +v 0.10559987 -0.03241246 -0.00472166 0.43529412 0.89019608 0.96078431 +v 0.10569281 -0.03241246 -0.00408437 0.43529412 0.89019608 0.96078431 +v 0.10748187 -0.02052499 0.01957805 0.43529412 0.89019608 0.96078431 +v 0.10686228 -0.02379456 0.01918905 0.43529412 0.89019608 0.96078431 +v 0.10576251 -0.02700907 0.01851038 0.43529412 0.89019608 0.96078431 +v 0.10401217 -0.02997577 0.01741789 0.43529412 0.89019608 0.96078431 +v 0.10144863 -0.03241246 0.01582881 0.43529412 0.89019608 0.96078431 +v 0.10782264 0.03494756 0.01983462 0.43529412 0.89019608 0.96078431 +v 0.10587868 0.03494756 0.02264862 0.43529412 0.89019608 0.96078431 +v 0.10476342 -0.01254724 0.02403906 0.43529412 0.89019608 0.96078431 +v 0.10470146 -0.01692502 0.02398940 0.43529412 0.89019608 0.96078431 +v 0.10435295 -0.03241246 -0.00972064 0.43529412 0.89019608 0.96078431 +v 0.10229281 -0.03241246 -0.01438857 0.43529412 0.89019608 0.96078431 +v 0.10493381 -0.02997577 -0.01583695 0.43529412 0.89019608 0.96078431 +v 0.10673836 -0.02700907 -0.01682186 0.43529412 0.89019608 0.96078431 +v 0.10787686 -0.02379456 -0.01745087 0.43529412 0.89019608 0.96078431 +v 0.10990600 -0.02052499 -0.01498448 0.43529412 0.89019608 0.96078431 +v 0.11029325 -0.01254724 -0.01515828 0.43529412 0.89019608 0.96078431 +v 0.10888369 -0.01254724 -0.01799711 0.43529412 0.89019608 0.96078431 +v 0.10771421 0.03494756 -0.02000002 0.43529412 0.89019608 0.96078431 +v 0.09983769 -0.03404380 0.00992769 0.43529412 0.89019608 0.96078431 +v 0.10123176 -0.03404380 0.00551633 0.43529412 0.89019608 0.96078431 +v 0.09793246 -0.03404380 0.01363554 0.43529412 0.89019608 0.96078431 +v 0.10180489 -0.03404380 0.00098910 0.43529412 0.89019608 0.96078431 +v 0.10158803 -0.03404380 -0.00352157 0.43529412 0.89019608 0.96078431 +v 0.10150284 -0.03404380 -0.00406782 0.43529412 0.89019608 0.96078431 +v 0.10444588 -0.02052499 0.02377422 0.43529412 0.89019608 0.96078431 +v 0.10388825 -0.02379456 0.02330246 0.43529412 0.89019608 0.96078431 +v 0.10288917 -0.02700907 0.02247481 0.43529412 0.89019608 0.96078431 +v 0.10130921 -0.02997577 0.02115058 0.43529412 0.89019608 0.96078431 +v 0.09899350 -0.03241246 0.01922216 0.43529412 0.89019608 0.96078431 +v 0.10467823 0.03494756 0.02396458 0.43529412 0.89019608 0.96078431 +v 0.10121628 0.03494756 0.02774692 0.43529412 0.89019608 0.96078431 +v 0.10048051 -0.01254724 0.02839249 0.43529412 0.89019608 0.96078431 +v 0.10041856 -0.01692502 0.02832627 0.43529412 0.89019608 0.96078431 +v 0.10020170 -0.02052499 0.02807798 0.43529412 0.89019608 0.96078431 +v 0.10042630 -0.03404380 -0.00837986 0.43529412 0.89019608 0.96078431 +v 0.09865273 -0.03404380 -0.01240222 0.43529412 0.89019608 0.96078431 +v 0.09628281 -0.03404380 -0.01598593 0.43529412 0.89019608 0.96078431 +v 0.09953564 -0.03241246 -0.01855164 0.43529412 0.89019608 0.96078431 +v 0.10190557 -0.02997577 -0.02042212 0.43529412 0.89019608 0.96078431 +v 0.10351650 -0.02700907 -0.02169669 0.43529412 0.89019608 0.96078431 +v 0.10453882 -0.02379456 -0.02249951 0.43529412 0.89019608 0.96078431 +v 0.10511194 -0.02052499 -0.02295471 0.43529412 0.89019608 0.96078431 +v 0.10851968 -0.02052499 -0.01779847 0.43529412 0.89019608 0.96078431 +v 0.10880624 -0.01692502 -0.01795573 0.43529412 0.89019608 0.96078431 +v 0.10544497 -0.01254724 -0.02321128 0.43529412 0.89019608 0.96078431 +v 0.10769872 0.03494756 -0.02002485 0.43529412 0.89019608 0.96078431 +v 0.09516755 -0.03490421 0.00798272 0.43529412 0.89019608 0.96078431 +v 0.09628281 -0.03490421 0.00444039 0.43529412 0.89019608 0.96078431 +v 0.09674749 -0.03490421 0.00079874 0.43529412 0.89019608 0.96078431 +v 0.09581811 -0.03404380 0.01655714 0.43529412 0.89019608 0.96078431 +v 0.09193020 -0.03490421 0.01331276 0.43529412 0.89019608 0.96078431 +v 0.09362632 -0.03490421 0.01096225 0.43529412 0.89019608 0.96078431 +v 0.09656937 -0.03490421 -0.00282635 0.43529412 0.89019608 0.96078431 +v 0.09649966 -0.03490421 -0.00326500 0.43529412 0.89019608 0.96078431 +v 0.09563998 -0.03490421 -0.00673284 0.43529412 0.89019608 0.96078431 +v 0.09972927 -0.02379456 0.02752346 0.43529412 0.89019608 0.96078431 +v 0.09888508 -0.02700907 0.02654683 0.43529412 0.89019608 0.96078431 +v 0.09753747 -0.02997577 0.02498258 0.43529412 0.89019608 0.96078431 +v 0.09285958 -0.03404380 0.01956149 0.43529412 0.89019608 0.96078431 +v 0.09557028 -0.03241246 0.02269828 0.43529412 0.89019608 0.96078431 +v 0.10099168 0.03494756 0.02795383 0.43529412 0.89019608 0.96078431 +v 0.10094521 0.03494756 0.02799521 0.43529412 0.89019608 0.96078431 +v 0.10076708 0.03494756 0.02815247 0.43529412 0.89019608 0.96078431 +v 0.10050375 0.03494756 0.02838421 0.43529412 0.89019608 0.96078431 +v 0.09996935 0.03494756 0.02883114 0.43529412 0.89019608 0.96078431 +v 0.09959760 0.03494756 0.02913737 0.43529412 0.89019608 0.96078431 +v 0.09949692 0.03494756 0.02922013 0.43529412 0.89019608 0.96078431 +v 0.09921036 0.03494756 0.02945187 0.43529412 0.89019608 0.96078431 +v 0.09901674 0.03494756 0.02960085 0.43529412 0.89019608 0.96078431 +v 0.09822677 0.03494756 0.03019676 0.43529412 0.89019608 0.96078431 +v 0.09546185 -0.01254724 0.03204241 0.43529412 0.89019608 0.96078431 +v 0.09541538 -0.01692502 0.03196792 0.43529412 0.89019608 0.96078431 +v 0.09524499 -0.02052499 0.03168652 0.43529412 0.89019608 0.96078431 +v 0.09486550 -0.02379456 0.03106578 0.43529412 0.89019608 0.96078431 +v 0.09421493 -0.03490421 -0.00996894 0.43529412 0.89019608 0.96078431 +v 0.08998624 -0.03490421 -0.01534037 0.43529412 0.89019608 0.96078431 +v 0.09339397 -0.03404380 -0.01908960 0.43529412 0.89019608 0.96078431 +v 0.09618987 -0.03241246 -0.02215190 0.43529412 0.89019608 0.96078431 +v 0.09230195 -0.03490421 -0.01284915 0.43529412 0.89019608 0.96078431 +v 0.09821902 -0.02997577 -0.02437827 0.43529412 0.89019608 0.96078431 +v 0.09960535 -0.02700907 -0.02590114 0.43529412 0.89019608 0.96078431 +v 0.10048051 -0.02379456 -0.02686121 0.43529412 0.89019608 0.96078431 +v 0.10537527 -0.01692502 -0.02315335 0.43529412 0.89019608 0.96078431 +v 0.10097619 -0.02052499 -0.02739918 0.43529412 0.89019608 0.96078431 +v 0.10119304 -0.01692502 -0.02763920 0.43529412 0.89019608 0.96078431 +v 0.10125500 -0.01254724 -0.02770541 0.43529412 0.89019608 0.96078431 +v 0.10323769 0.03494756 -0.02576871 0.43529412 0.89019608 0.96078431 +v 0.08507600 -0.03534475 0.00378655 0.43529412 0.89019608 0.96078431 +v 0.08560265 -0.03534475 0.00210643 0.43529412 0.89019608 0.96078431 +v 0.08582725 -0.03534475 0.00037665 0.43529412 0.89019608 0.96078431 +v 0.08955253 -0.03490421 0.01572121 0.43529412 0.89019608 0.96078431 +v 0.08241951 -0.03534475 0.00744475 0.43529412 0.89019608 0.96078431 +v 0.08354252 -0.03534475 0.00630260 0.43529412 0.89019608 0.96078431 +v 0.08434798 -0.03534475 0.00519355 0.43529412 0.89019608 0.96078431 +v 0.08574206 -0.03534475 -0.00133658 0.43529412 0.89019608 0.96078431 +v 0.08571108 -0.03534475 -0.00154350 0.43529412 0.89019608 0.96078431 +v 0.08476621 -0.03528280 -0.01126007 0.43529412 0.89019608 0.96078431 +v 0.08530060 -0.03534475 -0.00319051 0.43529412 0.89019608 0.96078431 +v 0.09419170 -0.02700907 0.02995674 0.43529412 0.89019608 0.96078431 +v 0.09312290 -0.02997577 0.02819385 0.43529412 0.89019608 0.96078431 +v 0.09155844 -0.03241246 0.02561987 0.43529412 0.89019608 0.96078431 +v 0.08940537 -0.03404380 0.02206926 0.43529412 0.89019608 0.96078431 +v 0.08677212 -0.03490421 0.01774067 0.43529412 0.89019608 0.96078431 +v 0.09762267 0.03494756 0.03063541 0.43529412 0.89019608 0.96078431 +v 0.09742130 0.03494756 0.03077611 0.43529412 0.89019608 0.96078431 +v 0.09618987 0.03494756 0.03159548 0.43529412 0.89019608 0.96078431 +v 0.09546185 0.03494756 0.03204241 0.43529412 0.89019608 0.96078431 +v 0.09535342 0.03494756 0.03210862 0.43529412 0.89019608 0.96078431 +v 0.09492746 0.03494756 0.03236519 0.43529412 0.89019608 0.96078431 +v 0.09406777 0.03494756 0.03285350 0.43529412 0.89019608 0.96078431 +v 0.09272017 -0.01254724 0.03354873 0.43529412 0.89019608 0.96078431 +v 0.09253430 -0.02052499 0.03317628 0.43529412 0.89019608 0.96078431 +v 0.08939763 -0.02379456 0.03377219 0.43529412 0.89019608 0.96078431 +v 0.08891745 -0.02700907 0.03257210 0.43529412 0.89019608 0.96078431 +v 0.08880902 -0.03489733 -0.01645769 0.43529412 0.89019608 0.96078431 +v 0.08809649 -0.03404380 -0.02281402 0.43529412 0.89019608 0.96078431 +v 0.09219352 -0.03389925 -0.02080283 0.43529412 0.89019608 0.96078431 +v 0.09004045 -0.03241246 -0.02648049 0.43529412 0.89019608 0.96078431 +v 0.09477256 -0.03204764 -0.02412170 0.43529412 0.89019608 0.96078431 +v 0.09660034 -0.02933562 -0.02646394 0.43529412 0.89019608 0.96078431 +v 0.09747551 -0.02696089 -0.02758954 0.43529412 0.89019608 0.96078431 +v 0.09781629 -0.02603163 -0.02802819 0.43529412 0.89019608 0.96078431 +v 0.09866048 -0.02155061 -0.02912068 0.43529412 0.89019608 0.96078431 +v 0.09901674 -0.01465353 -0.02956761 0.43529412 0.89019608 0.96078431 +v 0.10200625 0.03494756 -0.02701019 0.43529412 0.89019608 0.96078431 +v 0.10223860 0.03494756 -0.02677844 0.43529412 0.89019608 0.96078431 +v 0.09901674 -0.01254724 -0.02957589 0.43529412 0.89019608 0.96078431 +v 0.09903223 -0.00438364 -0.02959244 0.43529412 0.89019608 0.96078431 +v 0.09989191 0.03494756 -0.02889722 0.43529412 0.89019608 0.96078431 +v 0.10074384 0.03494756 -0.02816889 0.43529412 0.89019608 0.96078431 +v 0.07599903 -0.03537228 0.00000420 0.43529412 0.89019608 0.96078431 +v 0.08110289 -0.03534475 0.00840482 0.43529412 0.89019608 0.96078431 +v 0.08041359 -0.03535852 -0.00567345 0.43529412 0.89019608 0.96078431 +v 0.08462680 -0.03534475 -0.00472166 0.43529412 0.89019608 0.96078431 +v 0.08372065 -0.03534475 -0.00608728 0.43529412 0.89019608 0.96078431 +v 0.08262088 -0.03534475 -0.00726253 0.43529412 0.89019608 0.96078431 +v 0.08060722 -0.03534475 -0.00868609 0.43529412 0.89019608 0.96078431 +v 0.07914344 -0.03534475 -0.00931510 0.43529412 0.89019608 0.96078431 +v 0.07743957 -0.03534475 -0.00972064 0.43529412 0.89019608 0.96078431 +v 0.07570472 -0.03534475 -0.00982824 0.43529412 0.89019608 0.96078431 +v 0.07538718 -0.03490421 -0.02075318 0.43529412 0.89019608 0.96078431 +v 0.07904276 -0.03490421 -0.02053799 0.43529412 0.89019608 0.96078431 +v 0.08263637 -0.03490421 -0.01966896 0.43529412 0.89019608 0.96078431 +v 0.08572657 -0.03490421 -0.01834472 0.43529412 0.89019608 0.96078431 +v 0.08815845 -0.02997577 0.03066024 0.43529412 0.89019608 0.96078431 +v 0.08551746 -0.03404380 0.02400596 0.43529412 0.89019608 0.96078431 +v 0.08704319 -0.03241246 0.02786279 0.43529412 0.89019608 0.96078431 +v 0.08365095 -0.03490421 0.01929665 0.43529412 0.89019608 0.96078431 +v 0.09363406 0.03494756 0.03308524 0.43529412 0.89019608 0.96078431 +v 0.09319261 0.03494756 0.03331698 0.43529412 0.89019608 0.96078431 +v 0.09251106 0.03494756 0.03365632 0.43529412 0.89019608 0.96078431 +v 0.09161266 0.03494756 0.03408669 0.43529412 0.89019608 0.96078431 +v 0.08981585 -0.01254724 0.03483985 0.43529412 0.89019608 0.96078431 +v 0.08966095 -0.02052499 0.03445086 0.43529412 0.89019608 0.96078431 +v 0.08667144 -0.02052499 0.03548542 0.43529412 0.89019608 0.96078431 +v 0.08342635 -0.02379456 0.03555163 0.43529412 0.89019608 0.96078431 +v 0.08273705 -0.02997577 0.03228243 0.43529412 0.89019608 0.96078431 +v 0.08315527 -0.02700907 0.03428533 0.43529412 0.89019608 0.96078431 +v 0.08425504 -0.03404380 -0.02446931 0.43529412 0.89019608 0.96078431 +v 0.08558716 -0.03241246 -0.02840063 0.43529412 0.89019608 0.96078431 +v 0.09145776 -0.02997577 -0.02914551 0.43529412 0.89019608 0.96078431 +v 0.09241812 -0.02700907 -0.03095806 0.43529412 0.89019608 0.96078431 +v 0.09302997 -0.02379456 -0.03210849 0.43529412 0.89019608 0.96078431 +v 0.09618987 -0.02052499 -0.03109048 0.43529412 0.89019608 0.96078431 +v 0.09641447 -0.01254724 -0.03144637 0.43529412 0.89019608 0.96078431 +v 0.09903223 0.03494756 -0.02958416 0.43529412 0.89019608 0.96078431 +v 0.07233571 -0.03536540 0.00472179 0.43529412 0.89019608 0.96078431 +v 0.06637217 -0.03534475 -0.00197387 0.43529412 0.89019608 0.96078431 +v 0.06687559 -0.03534475 -0.00365399 0.43529412 0.89019608 0.96078431 +v 0.06758037 -0.03534475 -0.00507755 0.43529412 0.89019608 0.96078431 +v 0.06858720 -0.03534475 -0.00645972 0.43529412 0.89019608 0.96078431 +v 0.06974118 -0.03534475 -0.00757704 0.43529412 0.89019608 0.96078431 +v 0.07108879 -0.03534475 -0.00851228 0.43529412 0.89019608 0.96078431 +v 0.07259129 -0.03534475 -0.00922406 0.43529412 0.89019608 0.96078431 +v 0.07421771 -0.03534475 -0.00967098 0.43529412 0.89019608 0.96078431 +v 0.07962362 -0.03534475 0.00914142 0.43529412 0.89019608 0.96078431 +v 0.07225052 -0.03490421 -0.02042212 0.43529412 0.89019608 0.96078431 +v 0.07524003 -0.03404380 -0.02581837 0.43529412 0.89019608 0.96078431 +v 0.07978626 -0.03404380 -0.02554525 0.43529412 0.89019608 0.96078431 +v 0.08212521 -0.03241246 0.02933600 0.43529412 0.89019608 0.96078431 +v 0.08127327 -0.03404380 0.02528053 0.43529412 0.89019608 0.96078431 +v 0.08024321 -0.03490421 0.02032293 0.43529412 0.89019608 0.96078431 +v 0.09069876 0.03494756 0.03448397 0.43529412 0.89019608 0.96078431 +v 0.08978487 0.03494756 0.03485640 0.43529412 0.89019608 0.96078431 +v 0.08886323 0.03494756 0.03520402 0.43529412 0.89019608 0.96078431 +v 0.08678761 -0.01254724 0.03588269 0.43529412 0.89019608 0.96078431 +v 0.08365869 -0.01254724 0.03666067 0.43529412 0.89019608 0.96078431 +v 0.08357350 -0.02052499 0.03625513 0.43529412 0.89019608 0.96078431 +v 0.08041359 -0.02052499 0.03675999 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.01208606 0.04578134 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.01284323 0.04560753 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.01705581 0.04441572 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.01793687 0.04414260 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.01889365 0.04376189 0.43529412 0.89019608 0.96078431 +v 0.07698262 -0.03241246 0.02994846 0.43529412 0.89019608 0.96078431 +v 0.07708331 -0.02997577 0.03294454 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02225270 0.04225557 0.43529412 0.89019608 0.96078431 +v 0.07714527 -0.02700907 0.03498055 0.43529412 0.89019608 0.96078431 +v 0.08039036 -0.03241246 -0.02965038 0.43529412 0.89019608 0.96078431 +v 0.08654752 -0.02997577 -0.03125601 0.43529412 0.89019608 0.96078431 +v 0.08720584 -0.02700907 -0.03320098 0.43529412 0.89019608 0.96078431 +v 0.08762405 -0.02379456 -0.03443417 0.43529412 0.89019608 0.96078431 +v 0.08785640 -0.02052499 -0.03512940 0.43529412 0.89019608 0.96078431 +v 0.09337074 -0.02052499 -0.03275405 0.43529412 0.89019608 0.96078431 +v 0.09536117 0.03494756 -0.03210849 0.43529412 0.89019608 0.96078431 +v 0.09356436 -0.01254724 -0.03311821 0.43529412 0.89019608 0.96078431 +v 0.07800495 -0.03534475 0.00962146 0.43529412 0.89019608 0.96078431 +v 0.07631657 -0.03534475 0.00982837 0.43529412 0.89019608 0.96078431 +v 0.07456623 -0.03534475 0.00972905 0.43529412 0.89019608 0.96078431 +v 0.07285461 -0.03534475 0.00931523 0.43529412 0.89019608 0.96078431 +v 0.07123594 -0.03534475 0.00859518 0.43529412 0.89019608 0.96078431 +v 0.06926875 -0.03534475 0.00716335 0.43529412 0.89019608 0.96078431 +v 0.06819221 -0.03534475 0.00597154 0.43529412 0.89019608 0.96078431 +v 0.06730930 -0.03534475 0.00459764 0.43529412 0.89019608 0.96078431 +v 0.06665099 -0.03534475 0.00304994 0.43529412 0.89019608 0.96078431 +v 0.06627149 -0.03534475 0.00140293 0.43529412 0.89019608 0.96078431 +v 0.06617080 -0.03534475 -0.00024409 0.43529412 0.89019608 0.96078431 +v 0.05566104 -0.03490421 -0.00416714 0.43529412 0.89019608 0.96078431 +v 0.05672983 -0.03490421 -0.00772602 0.43529412 0.89019608 0.96078431 +v 0.05822458 -0.03490421 -0.01073037 0.43529412 0.89019608 0.96078431 +v 0.06034667 -0.03490421 -0.01364369 0.43529412 0.89019608 0.96078431 +v 0.06277856 -0.03490421 -0.01601076 0.43529412 0.89019608 0.96078431 +v 0.06562092 -0.03490421 -0.01798056 0.43529412 0.89019608 0.96078431 +v 0.06880406 -0.03490421 -0.01947032 0.43529412 0.89019608 0.96078431 +v 0.07133662 -0.03404380 -0.02540455 0.43529412 0.89019608 0.96078431 +v 0.07058537 -0.03241246 -0.02947657 0.43529412 0.89019608 0.96078431 +v 0.07511611 -0.03241246 -0.02995661 0.43529412 0.89019608 0.96078431 +v 0.07684322 -0.03404380 0.02581023 0.43529412 0.89019608 0.96078431 +v 0.07668057 -0.03490421 0.02075331 0.43529412 0.89019608 0.96078431 +v 0.08700447 0.03494756 0.03582475 0.43529412 0.89019608 0.96078431 +v 0.08605959 0.03494756 0.03609787 0.43529412 0.89019608 0.96078431 +v 0.08510698 0.03494756 0.03634617 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.00000586 0.04707247 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.00263529 0.04696488 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.00283490 0.04695660 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.00560199 0.04675797 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.00594615 0.04672486 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.00854116 0.04641036 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.00904364 0.04634414 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02979680 0.03642893 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.03027863 0.03577509 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.03132490 0.03419429 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.03155893 0.03371425 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.03240558 0.03174446 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02329897 0.04172587 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02568747 0.04004575 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02790390 0.03843184 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02866106 0.03766213 0.43529412 0.89019608 0.96078431 +v 0.07503092 -0.02997577 -0.03296924 0.43529412 0.89019608 0.96078431 +v 0.08083182 -0.02997577 -0.03262990 0.43529412 0.89019608 0.96078431 +v 0.08113387 -0.02700907 -0.03466591 0.43529412 0.89019608 0.96078431 +v 0.08132749 -0.02379456 -0.03594877 0.43529412 0.89019608 0.96078431 +v 0.08470424 -0.02052499 -0.03603981 0.43529412 0.89019608 0.96078431 +v 0.08798807 -0.01254724 -0.03552667 0.43529412 0.89019608 0.96078431 +v 0.09351789 0.03494756 -0.03303545 0.43529412 0.89019608 0.96078431 +v 0.09014888 0.03494756 -0.03472385 0.43529412 0.89019608 0.96078431 +v 0.06620953 -0.03522773 0.01257616 0.43529412 0.89019608 0.96078431 +v 0.05625739 -0.03490421 0.00643502 0.43529412 0.89019608 0.96078431 +v 0.05545192 -0.03490421 0.00295063 0.43529412 0.89019608 0.96078431 +v 0.05524281 -0.03490421 -0.00051721 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.03304572 0.02638130 0.43529412 0.89019608 0.96078431 +v 0.05202870 -0.03404380 -0.00960478 0.43529412 0.89019608 0.96078431 +v 0.05388746 -0.03404380 -0.01334574 0.43529412 0.89019608 0.96078431 +v 0.05652846 -0.03404380 -0.01697083 0.43529412 0.89019608 0.96078431 +v 0.05955670 -0.03404380 -0.01990897 0.43529412 0.89019608 0.96078431 +v 0.06308835 -0.03404380 -0.02236709 0.43529412 0.89019608 0.96078431 +v 0.06705372 -0.03404380 -0.02422101 0.43529412 0.89019608 0.96078431 +v 0.06561318 -0.03241246 -0.02811095 0.43529412 0.89019608 0.96078431 +v 0.07004323 -0.02997577 -0.03244782 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.03298377 0.02912909 0.43529412 0.89019608 0.96078431 +v 0.07225052 -0.03404380 0.02555366 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.03246752 0.03152099 0.43529412 0.89019608 0.96078431 +v 0.07298628 -0.03490421 0.02053812 0.43529412 0.89019608 0.96078431 +v 0.08124229 0.03494756 0.03707450 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.00044155 0.04706420 0.43529412 0.89019608 0.96078431 +v 0.07496896 -0.02700907 -0.03503008 0.43529412 0.89019608 0.96078431 +v 0.07493024 -0.02379456 -0.03632949 0.43529412 0.89019608 0.96078431 +v 0.07819082 -0.02052499 -0.03700815 0.43529412 0.89019608 0.96078431 +v 0.08143592 -0.02052499 -0.03667710 0.43529412 0.89019608 0.96078431 +v 0.08149787 -0.01254724 -0.03709092 0.43529412 0.89019608 0.96078431 +v 0.08480493 -0.01254724 -0.03644535 0.43529412 0.89019608 0.96078431 +v 0.08688055 0.03494756 -0.03588255 0.43529412 0.89019608 0.96078431 +v 0.08798807 0.03494756 -0.03551839 0.43529412 0.89019608 0.96078431 +v 0.08853795 0.03494756 -0.03533631 0.43529412 0.89019608 0.96078431 +v 0.06935394 -0.03490421 0.01966909 0.43529412 0.89019608 0.96078431 +v 0.06593846 -0.03490421 0.01816277 0.43529412 0.89019608 0.96078431 +v 0.06179496 -0.03490421 0.01513358 0.43529412 0.89019608 0.96078431 +v 0.05950249 -0.03490421 0.01260926 0.43529412 0.89019608 0.96078431 +v 0.05763598 -0.03490421 0.00968767 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.03289429 0.02564470 0.43529412 0.89019608 0.96078431 +v 0.04817951 -0.03241246 -0.01115247 0.43529412 0.89019608 0.96078431 +v 0.05034032 -0.03241246 -0.01548934 0.43529412 0.89019608 0.96078431 +v 0.05340728 -0.03241246 -0.01969379 0.43529412 0.89019608 0.96078431 +v 0.05691570 -0.03241246 -0.02311197 0.43529412 0.89019608 0.96078431 +v 0.06101273 -0.03241246 -0.02595079 0.43529412 0.89019608 0.96078431 +v 0.05950249 -0.02997577 -0.02856616 0.43529412 0.89019608 0.96078431 +v 0.06456762 -0.02997577 -0.03094151 0.43529412 0.89019608 0.96078431 +v 0.06385509 -0.02700907 -0.03286992 0.43529412 0.89019608 0.96078431 +v 0.06967148 -0.02700907 -0.03446728 0.43529412 0.89019608 0.96078431 +v 0.08046006 0.03494756 0.03717382 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.00879788 0.04637725 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.00597573 0.04672486 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.00563156 0.04675797 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.00322241 0.04693177 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.00282317 0.04695660 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.00266486 0.04696488 0.43529412 0.89019608 0.96078431 +v 0.06943913 -0.02379456 -0.03575013 0.43529412 0.89019608 0.96078431 +v 0.07491475 -0.02052499 -0.03705781 0.43529412 0.89019608 0.96078431 +v 0.07822180 -0.01254724 -0.03743025 0.43529412 0.89019608 0.96078431 +v 0.07987146 0.03494756 -0.03729783 0.43529412 0.89019608 0.96078431 +v 0.08147464 0.03494756 -0.03697505 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.03258454 0.02417976 0.43529412 0.89019608 0.96078431 +v 0.04538361 -0.02997577 -0.01226980 0.43529412 0.89019608 0.96078431 +v 0.04776128 -0.02997577 -0.01704532 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.03211648 0.02243343 0.43529412 0.89019608 0.96078431 +v 0.05113030 -0.02997577 -0.02167186 0.43529412 0.89019608 0.96078431 +v 0.05499498 -0.02997577 -0.02543766 0.43529412 0.89019608 0.96078431 +v 0.05848016 -0.02700907 -0.03034560 0.43529412 0.89019608 0.96078431 +v 0.05368610 -0.02700907 -0.02701846 0.43529412 0.89019608 0.96078431 +v 0.06340589 -0.02379456 -0.03409484 0.43529412 0.89019608 0.96078431 +v 0.07845415 0.03494756 0.03733935 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.01208122 0.04578134 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.00914893 0.04632759 0.43529412 0.89019608 0.96078431 +v 0.06617855 -0.02052499 -0.03575013 0.43529412 0.89019608 0.96078431 +v 0.06929973 -0.02052499 -0.03646191 0.43529412 0.89019608 0.96078431 +v 0.07489926 -0.01254724 -0.03747991 0.43529412 0.89019608 0.96078431 +v 0.07888786 0.03494756 -0.03730611 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02843391 0.01073051 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02530201 0.00247059 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02469627 0.00088979 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02384963 -0.00086483 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02901211 0.01236097 0.43529412 0.89019608 0.96078431 +v 0.04599545 -0.02700907 -0.01810470 0.43529412 0.89019608 0.96078431 +v 0.04958132 -0.02700907 -0.02302920 0.43529412 0.89019608 0.96078431 +v 0.05782959 -0.02379456 -0.03147120 0.43529412 0.89019608 0.96078431 +v 0.05285740 -0.02379456 -0.02801991 0.43529412 0.89019608 0.96078431 +v 0.06023050 -0.02052499 -0.03354859 0.43529412 0.89019608 0.96078431 +v 0.06315031 -0.02052499 -0.03477351 0.43529412 0.89019608 0.96078431 +v 0.07723046 0.03494756 0.03738073 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.01793203 0.04414260 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.01705096 0.04441572 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.01283838 0.04560753 0.43529412 0.89019608 0.96078431 +v 0.06300316 -0.01254724 -0.03517078 0.43529412 0.89019608 0.96078431 +v 0.06607012 -0.01254724 -0.03615568 0.43529412 0.89019608 0.96078431 +v 0.06923002 -0.01254724 -0.03687573 0.43529412 0.89019608 0.96078431 +v 0.07263776 0.03494756 -0.03734749 0.43529412 0.89019608 0.96078431 +v 0.07264551 0.03494756 -0.03734749 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02298922 -0.00213113 0.43529412 0.89019608 0.96078431 +v 0.04488794 -0.02379456 -0.01878338 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02273454 -0.00237114 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02215634 -0.00290084 0.43529412 0.89019608 0.96078431 +v 0.04860547 -0.02379456 -0.02388168 0.43529412 0.89019608 0.96078431 +v 0.05746559 -0.02052499 -0.03210849 0.43529412 0.89019608 0.96078431 +v 0.04804784 -0.02052499 -0.02436171 0.43529412 0.89019608 0.96078431 +v 0.05239271 -0.02052499 -0.02858271 0.43529412 0.89019608 0.96078431 +v 0.06005237 -0.01254724 -0.03392931 0.43529412 0.89019608 0.96078431 +v 0.05729520 -0.01692502 -0.03238989 0.43529412 0.89019608 0.96078431 +v 0.07645597 0.03494756 0.03740556 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02329412 0.04172587 0.43529412 0.89019608 0.96078431 +v 0.07644823 0.03494756 0.03740556 0.43529412 0.89019608 0.96078431 +v 0.06365373 0.03494756 -0.03540252 0.43529412 0.89019608 0.96078431 +v 0.06758037 0.03494756 -0.03653640 0.43529412 0.89019608 0.96078431 +v 0.06923002 0.03494756 -0.03685918 0.43529412 0.89019608 0.96078431 +v 0.07009745 0.03494756 -0.03702471 0.43529412 0.89019608 0.96078431 +v 0.07019039 0.03494756 -0.03704126 0.43529412 0.89019608 0.96078431 +v 0.04426061 -0.02052499 -0.01915582 0.43529412 0.89019608 0.96078431 +v 0.04605741 -0.02052499 -0.02186222 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02186724 -0.00310775 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02113761 -0.00353812 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.02088981 -0.00367055 0.43529412 0.89019608 0.96078431 +v 0.05218359 -0.01692502 -0.02883928 0.43529412 0.89019608 0.96078431 +v 0.04780001 -0.01692502 -0.02457690 0.43529412 0.89019608 0.96078431 +v 0.05725648 -0.01254724 -0.03246438 0.43529412 0.89019608 0.96078431 +v 0.05688472 0.03494756 -0.03225746 0.43529412 0.89019608 0.96078431 +v 0.06186466 0.03494756 -0.03457487 0.43529412 0.89019608 0.96078431 +v 0.05212938 -0.01254724 -0.02890549 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02445740 0.04098099 0.43529412 0.89019608 0.96078431 +v 0.07246737 0.03494756 0.03721520 0.43529412 0.89019608 0.96078431 +v 0.04390434 -0.01254724 -0.01937100 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.01994680 -0.00400161 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.01969211 -0.00406782 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.01783362 -0.00437405 0.43529412 0.89019608 0.96078431 +v 0.04572439 -0.01254724 -0.02211052 0.43529412 0.89019608 0.96078431 +v 0.04773805 -0.01254724 -0.02463484 0.43529412 0.89019608 0.96078431 +v 0.05218359 0.03494756 -0.02883101 0.43529412 0.89019608 0.96078431 +v 0.05112255 0.03494756 -0.02805302 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02789905 0.03843184 0.43529412 0.89019608 0.96078431 +v 0.06812251 0.03494756 0.03652825 0.43529412 0.89019608 0.96078431 +v 0.03437043 -0.01722101 -0.00439060 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.01837944 -0.00435749 0.43529412 0.89019608 0.96078431 +v 0.04285105 0.03494756 -0.01751707 0.43529412 0.89019608 0.96078431 +v 0.04401277 0.03494756 -0.01929651 0.43529412 0.89019608 0.96078431 +v 0.04673122 0.03494756 -0.02343475 0.43529412 0.89019608 0.96078431 +v 0.04780775 0.03494756 -0.02456863 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02978508 0.03642893 0.43529412 0.89019608 0.96078431 +v 0.06614757 0.03494756 0.03604822 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.03131317 0.03419429 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.01882686 -0.00432439 0.43529412 0.89019608 0.96078431 +v 0.04282006 0.03494756 -0.01745914 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02091250 -0.00413403 0.43529412 0.89019608 0.96078431 +v 0.06424234 0.03494756 0.03547714 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.03149214 0.03385496 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.03142330 0.03399565 0.43529412 0.89019608 0.96078431 +v 0.04247929 0.03494756 -0.01680530 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02336295 -0.00348019 0.43529412 0.89019608 0.96078431 +v 0.06394029 0.03494756 0.03536127 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.03244203 0.03160375 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.03239385 0.03174446 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.03235943 0.03183549 0.43529412 0.89019608 0.96078431 +v 0.03998545 0.03494756 -0.01044070 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02533846 -0.00220561 0.43529412 0.89019608 0.96078431 +v 0.06051706 0.03494756 0.03404531 0.43529412 0.89019608 0.96078431 +v 0.05875123 0.03494756 0.03320111 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.03297893 0.02912909 0.43529412 0.89019608 0.96078431 +v 0.03942007 0.03494756 -0.00746117 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02553119 -0.00205664 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02650863 -0.00107174 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02706617 -0.00042617 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02759619 0.00046769 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02805737 0.00131189 0.43529412 0.89019608 0.96078431 +v 0.05699315 0.03494756 0.03224932 0.43529412 0.89019608 0.96078431 +v 0.05623416 0.03494756 0.03179411 0.43529412 0.89019608 0.96078431 +v 0.05542869 0.03494756 0.03126442 0.43529412 0.89019608 0.96078431 +v 0.05334532 0.03494756 0.02984087 0.43529412 0.89019608 0.96078431 +v 0.05297357 0.03494756 0.02955947 0.43529412 0.89019608 0.96078431 +v 0.05229202 0.03494756 0.02897184 0.43529412 0.89019608 0.96078431 +v 0.05012346 0.03494756 0.02705997 0.43529412 0.89019608 0.96078431 +v 0.04931025 0.03494756 0.02632337 0.43529412 0.89019608 0.96078431 +v 0.04822597 0.03494756 0.02513156 0.43529412 0.89019608 0.96078431 +v 0.04695582 0.03494756 0.02370801 0.43529412 0.89019608 0.96078431 +v 0.04648338 0.03494756 0.02310382 0.43529412 0.89019608 0.96078431 +v 0.04554625 0.03494756 0.02187891 0.43529412 0.89019608 0.96078431 +v 0.04352485 0.03494756 0.01874212 0.43529412 0.89019608 0.96078431 +v 0.04335446 0.03494756 0.01844417 0.43529412 0.89019608 0.96078431 +v 0.04303692 0.03494756 0.01783171 0.43529412 0.89019608 0.96078431 +v 0.04253351 0.03494756 0.01683854 0.43529412 0.89019608 0.96078431 +v 0.04172030 0.03494756 0.01517497 0.43529412 0.89019608 0.96078431 +v 0.04118590 0.03494756 0.01390039 0.43529412 0.89019608 0.96078431 +v 0.04071346 0.03494756 0.01263409 0.43529412 0.89019608 0.96078431 +v 0.04032622 0.03494756 0.01151677 0.43529412 0.89019608 0.96078431 +v 0.04014809 0.03494756 0.01094569 0.43529412 0.89019608 0.96078431 +v 0.03995447 0.03494756 0.01024219 0.43529412 0.89019608 0.96078431 +v 0.03947429 0.03494756 0.00799099 0.43529412 0.89019608 0.96078431 +v 0.03937360 0.03494756 0.00751096 0.43529412 0.89019608 0.96078431 +v 0.03904832 0.03494756 0.00590532 0.43529412 0.89019608 0.96078431 +v 0.03871529 0.03494756 0.00401001 0.43529412 0.89019608 0.96078431 +v 0.03864559 0.03494756 0.00312443 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.03302023 0.02717585 0.43529412 0.89019608 0.96078431 +v 0.03866108 0.03494756 -0.00340570 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02849102 0.00269406 0.43529412 0.89019608 0.96078431 +v 0.03863010 0.03494756 0.00022767 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.03303400 0.02638130 0.43529412 0.89019608 0.96078431 +v 0.03437043 0.02873193 0.00347204 0.43529412 0.89019608 0.96078431 +f 1001 1002 1003 +f 1001 1003 1004 +f 1001 1004 1011 +f 1001 1011 1021 +f 1001 1021 1034 +f 1001 1034 1051 +f 1001 1051 1050 +f 1001 1050 1074 +f 1001 1074 1102 +f 1001 1102 1143 +f 1001 1143 1182 +f 1001 1182 1181 +f 1001 1181 1186 +f 1001 1186 1185 +f 1001 1185 1222 +f 1001 1222 1261 +f 1001 1261 1311 +f 1001 1311 1312 +f 1001 1312 1340 +f 1001 1340 1339 +f 1001 1339 1338 +f 1001 1338 1367 +f 1001 1367 1366 +f 1001 1366 1383 +f 1001 1383 1403 +f 1001 1403 1402 +f 1001 1402 1421 +f 1001 1421 1420 +f 1001 1420 1419 +f 1001 1419 1418 +f 1001 1418 1417 +f 1001 1417 1431 +f 1001 1431 1430 +f 1001 1430 1441 +f 1001 1441 1442 +f 1001 1442 1450 +f 1001 1450 1449 +f 1001 1449 1448 +f 1001 1448 1447 +f 1001 1447 1455 +f 1001 1455 1460 +f 1001 1460 1466 +f 1001 1466 1471 +f 1001 1471 1505 +f 1001 1505 1507 +f 1001 1507 1503 +f 1001 1503 1502 +f 1001 1502 1501 +f 1001 1501 1500 +f 1001 1500 1499 +f 1001 1499 1498 +f 1001 1498 1497 +f 1001 1497 1496 +f 1001 1496 1495 +f 1001 1495 1494 +f 1001 1494 1493 +f 1001 1493 1492 +f 1001 1492 1491 +f 1001 1491 1490 +f 1001 1490 1489 +f 1001 1489 1488 +f 1001 1488 1487 +f 1001 1487 1486 +f 1001 1486 1485 +f 1001 1485 1484 +f 1001 1484 1483 +f 1001 1483 1482 +f 1001 1482 1481 +f 1001 1481 1480 +f 1001 1480 1479 +f 1001 1479 1478 +f 1001 1478 1477 +f 1001 1477 1469 +f 1001 1469 1468 +f 1001 1468 1462 +f 1001 1462 1457 +f 1001 1457 1452 +f 1001 1452 1444 +f 1001 1444 1434 +f 1001 1434 1416 +f 1001 1416 1414 +f 1001 1414 1395 +f 1001 1395 1377 +f 1001 1377 1356 +f 1001 1356 1330 +f 1001 1330 1288 +f 1001 1288 1287 +f 1001 1287 1286 +f 1001 1286 1241 +f 1001 1241 1240 +f 1001 1240 1239 +f 1001 1239 1208 +f 1001 1208 1207 +f 1001 1207 1206 +f 1001 1206 1205 +f 1001 1205 1166 +f 1001 1166 1165 +f 1001 1165 1164 +f 1001 1164 1163 +f 1001 1163 1162 +f 1001 1162 1161 +f 1001 1161 1160 +f 1001 1160 1126 +f 1001 1126 1125 +f 1001 1125 1124 +f 1001 1124 1123 +f 1001 1123 1122 +f 1001 1122 1121 +f 1001 1121 1120 +f 1001 1120 1119 +f 1001 1119 1118 +f 1001 1118 1117 +f 1001 1117 1087 +f 1001 1087 1086 +f 1001 1086 1063 +f 1001 1063 1062 +f 1001 1062 1042 +f 1001 1042 1027 +f 1001 1027 1016 +f 1001 1016 1007 +f 1001 1007 1005 +f 1001 1005 1002 +f 1002 1006 1003 +f 1002 1005 1007 +f 1002 1007 1008 +f 1002 1008 1006 +f 1003 1006 1009 +f 1003 1009 1010 +f 1003 1010 1004 +f 1004 1010 1011 +f 1006 1012 1009 +f 1006 1008 1013 +f 1006 1013 1012 +f 1007 1014 1015 +f 1007 1015 1008 +f 1007 1016 1014 +f 1008 1015 1017 +f 1008 1017 1013 +f 1009 1012 1018 +f 1009 1018 1019 +f 1009 1019 1010 +f 1010 1019 1020 +f 1010 1020 1021 +f 1010 1021 1011 +f 1012 1022 1018 +f 1012 1013 1023 +f 1012 1023 1024 +f 1012 1024 1022 +f 1013 1017 1023 +f 1014 1025 1015 +f 1014 1016 1026 +f 1014 1026 1025 +f 1015 1025 1017 +f 1016 1027 1026 +f 1017 1025 1023 +f 1018 1028 1029 +f 1018 1029 1030 +f 1018 1030 1031 +f 1018 1031 1019 +f 1018 1022 1028 +f 1019 1031 1020 +f 1020 1031 1032 +f 1020 1032 1033 +f 1020 1033 1034 +f 1020 1034 1021 +f 1022 1024 1035 +f 1022 1035 1036 +f 1022 1036 1037 +f 1022 1037 1028 +f 1023 1025 1038 +f 1023 1038 1024 +f 1024 1038 1039 +f 1024 1039 1040 +f 1024 1040 1035 +f 1025 1026 1041 +f 1025 1041 1038 +f 1026 1027 1042 +f 1026 1042 1043 +f 1026 1043 1041 +f 1028 1037 1029 +f 1029 1037 1044 +f 1029 1044 1045 +f 1029 1045 1046 +f 1029 1046 1047 +f 1029 1047 1030 +f 1030 1047 1032 +f 1030 1032 1031 +f 1032 1047 1048 +f 1032 1048 1049 +f 1032 1049 1033 +f 1033 1049 1050 +f 1033 1050 1051 +f 1033 1051 1034 +f 1035 1040 1052 +f 1035 1052 1053 +f 1035 1053 1054 +f 1035 1054 1036 +f 1036 1054 1037 +f 1037 1055 1044 +f 1037 1054 1056 +f 1037 1056 1055 +f 1038 1041 1057 +f 1038 1057 1058 +f 1038 1058 1059 +f 1038 1059 1039 +f 1039 1059 1040 +f 1040 1059 1060 +f 1040 1060 1061 +f 1040 1061 1052 +f 1041 1043 1057 +f 1042 1062 1043 +f 1043 1062 1063 +f 1043 1063 1064 +f 1043 1064 1065 +f 1043 1065 1057 +f 1044 1055 1045 +f 1045 1066 1067 +f 1045 1067 1068 +f 1045 1068 1069 +f 1045 1069 1046 +f 1045 1055 1066 +f 1046 1069 1047 +f 1047 1069 1070 +f 1047 1070 1071 +f 1047 1071 1048 +f 1048 1071 1072 +f 1048 1072 1049 +f 1049 1072 1050 +f 1050 1072 1073 +f 1050 1073 1074 +f 1052 1075 1076 +f 1052 1076 1053 +f 1052 1061 1077 +f 1052 1077 1075 +f 1053 1076 1054 +f 1054 1078 1079 +f 1054 1079 1056 +f 1054 1076 1078 +f 1055 1056 1079 +f 1055 1079 1080 +f 1055 1080 1066 +f 1057 1065 1081 +f 1057 1081 1082 +f 1057 1082 1058 +f 1058 1082 1059 +f 1059 1082 1083 +f 1059 1083 1084 +f 1059 1084 1060 +f 1060 1084 1085 +f 1060 1085 1061 +f 1061 1085 1077 +f 1063 1086 1064 +f 1064 1086 1087 +f 1064 1087 1088 +f 1064 1088 1065 +f 1065 1088 1089 +f 1065 1089 1090 +f 1065 1090 1081 +f 1066 1091 1092 +f 1066 1092 1067 +f 1066 1080 1091 +f 1067 1092 1093 +f 1067 1093 1094 +f 1067 1094 1095 +f 1067 1095 1068 +f 1068 1095 1069 +f 1069 1095 1096 +f 1069 1096 1070 +f 1070 1096 1097 +f 1070 1097 1098 +f 1070 1098 1099 +f 1070 1099 1071 +f 1071 1099 1100 +f 1071 1100 1072 +f 1072 1100 1073 +f 1073 1100 1101 +f 1073 1101 1102 +f 1073 1102 1074 +f 1075 1103 1076 +f 1075 1077 1103 +f 1076 1103 1104 +f 1076 1104 1105 +f 1076 1105 1078 +f 1077 1085 1106 +f 1077 1106 1107 +f 1077 1107 1108 +f 1077 1108 1103 +f 1078 1105 1079 +f 1079 1109 1080 +f 1079 1105 1109 +f 1080 1109 1110 +f 1080 1110 1111 +f 1080 1111 1091 +f 1081 1090 1112 +f 1081 1112 1082 +f 1082 1112 1113 +f 1082 1113 1083 +f 1083 1113 1084 +f 1084 1113 1114 +f 1084 1114 1085 +f 1085 1115 1106 +f 1085 1114 1116 +f 1085 1116 1115 +f 1087 1117 1088 +f 1088 1117 1118 +f 1088 1118 1119 +f 1088 1119 1120 +f 1088 1120 1121 +f 1088 1121 1122 +f 1088 1122 1123 +f 1088 1123 1124 +f 1088 1124 1125 +f 1088 1125 1126 +f 1088 1126 1127 +f 1088 1127 1128 +f 1088 1128 1089 +f 1089 1128 1129 +f 1089 1129 1090 +f 1090 1129 1130 +f 1090 1130 1112 +f 1091 1111 1131 +f 1091 1131 1092 +f 1092 1131 1093 +f 1093 1132 1133 +f 1093 1133 1134 +f 1093 1134 1094 +f 1093 1131 1135 +f 1093 1135 1132 +f 1094 1134 1095 +f 1095 1134 1136 +f 1095 1136 1137 +f 1095 1137 1096 +f 1096 1137 1097 +f 1097 1137 1138 +f 1097 1138 1098 +f 1098 1139 1099 +f 1098 1138 1140 +f 1098 1140 1139 +f 1099 1139 1100 +f 1100 1139 1101 +f 1101 1139 1141 +f 1101 1141 1142 +f 1101 1142 1143 +f 1101 1143 1102 +f 1103 1144 1104 +f 1103 1108 1144 +f 1104 1144 1145 +f 1104 1145 1146 +f 1104 1146 1105 +f 1105 1146 1109 +f 1106 1115 1107 +f 1107 1115 1147 +f 1107 1147 1148 +f 1107 1148 1149 +f 1107 1149 1150 +f 1107 1150 1108 +f 1108 1150 1144 +f 1109 1146 1151 +f 1109 1151 1152 +f 1109 1152 1110 +f 1110 1152 1111 +f 1111 1153 1131 +f 1111 1152 1154 +f 1111 1154 1153 +f 1112 1130 1113 +f 1113 1130 1155 +f 1113 1155 1156 +f 1113 1156 1114 +f 1114 1156 1157 +f 1114 1157 1116 +f 1115 1116 1157 +f 1115 1157 1158 +f 1115 1158 1159 +f 1115 1159 1147 +f 1126 1160 1127 +f 1127 1160 1161 +f 1127 1161 1162 +f 1127 1162 1163 +f 1127 1163 1164 +f 1127 1164 1165 +f 1127 1165 1166 +f 1127 1166 1167 +f 1127 1167 1128 +f 1128 1167 1168 +f 1128 1168 1129 +f 1129 1168 1130 +f 1130 1168 1169 +f 1130 1169 1170 +f 1130 1170 1155 +f 1131 1153 1135 +f 1132 1171 1133 +f 1132 1135 1153 +f 1132 1153 1171 +f 1133 1171 1172 +f 1133 1172 1173 +f 1133 1173 1134 +f 1134 1174 1175 +f 1134 1175 1136 +f 1134 1173 1174 +f 1136 1175 1176 +f 1136 1176 1137 +f 1137 1176 1177 +f 1137 1177 1178 +f 1137 1178 1138 +f 1138 1178 1179 +f 1138 1179 1140 +f 1139 1140 1141 +f 1140 1179 1141 +f 1141 1179 1180 +f 1141 1180 1142 +f 1142 1181 1182 +f 1142 1182 1143 +f 1142 1180 1183 +f 1142 1183 1184 +f 1142 1184 1185 +f 1142 1185 1186 +f 1142 1186 1181 +f 1144 1150 1187 +f 1144 1187 1145 +f 1145 1187 1146 +f 1146 1187 1151 +f 1147 1159 1188 +f 1147 1188 1148 +f 1148 1188 1187 +f 1148 1187 1149 +f 1149 1187 1150 +f 1151 1187 1189 +f 1151 1189 1152 +f 1152 1189 1154 +f 1153 1154 1190 +f 1153 1190 1191 +f 1153 1191 1192 +f 1153 1192 1193 +f 1153 1193 1194 +f 1153 1194 1195 +f 1153 1195 1196 +f 1153 1196 1197 +f 1153 1197 1198 +f 1153 1198 1199 +f 1153 1199 1200 +f 1153 1200 1171 +f 1154 1189 1190 +f 1155 1170 1201 +f 1155 1201 1156 +f 1156 1201 1157 +f 1157 1202 1158 +f 1157 1201 1203 +f 1157 1203 1202 +f 1158 1204 1159 +f 1158 1202 1204 +f 1159 1204 1188 +f 1166 1205 1167 +f 1167 1205 1206 +f 1167 1206 1207 +f 1167 1207 1208 +f 1167 1208 1209 +f 1167 1209 1168 +f 1168 1209 1210 +f 1168 1210 1169 +f 1169 1210 1211 +f 1169 1211 1212 +f 1169 1212 1170 +f 1170 1213 1201 +f 1170 1212 1214 +f 1170 1214 1213 +f 1171 1200 1172 +f 1172 1215 1216 +f 1172 1216 1174 +f 1172 1174 1173 +f 1172 1200 1215 +f 1174 1216 1217 +f 1174 1217 1175 +f 1175 1217 1176 +f 1176 1217 1218 +f 1176 1218 1177 +f 1177 1218 1178 +f 1178 1218 1219 +f 1178 1219 1179 +f 1179 1219 1220 +f 1179 1220 1180 +f 1180 1220 1221 +f 1180 1221 1183 +f 1183 1221 1184 +f 1184 1221 1222 +f 1184 1222 1185 +f 1187 1188 1223 +f 1187 1223 1224 +f 1187 1224 1225 +f 1187 1225 1226 +f 1187 1226 1227 +f 1187 1227 1228 +f 1187 1228 1229 +f 1187 1229 1230 +f 1187 1230 1231 +f 1187 1231 1189 +f 1188 1232 1223 +f 1188 1204 1232 +f 1189 1231 1196 +f 1189 1196 1195 +f 1189 1195 1194 +f 1189 1194 1193 +f 1189 1193 1192 +f 1189 1192 1191 +f 1189 1191 1190 +f 1196 1231 1233 +f 1196 1233 1197 +f 1197 1233 1234 +f 1197 1234 1198 +f 1198 1234 1235 +f 1198 1235 1215 +f 1198 1215 1199 +f 1199 1215 1200 +f 1201 1213 1236 +f 1201 1236 1203 +f 1202 1203 1237 +f 1202 1237 1238 +f 1202 1238 1204 +f 1203 1236 1237 +f 1204 1238 1232 +f 1208 1239 1209 +f 1209 1240 1241 +f 1209 1241 1242 +f 1209 1242 1211 +f 1209 1211 1210 +f 1209 1239 1240 +f 1211 1242 1243 +f 1211 1243 1244 +f 1211 1244 1212 +f 1212 1244 1245 +f 1212 1245 1246 +f 1212 1246 1247 +f 1212 1247 1248 +f 1212 1248 1249 +f 1212 1249 1250 +f 1212 1250 1214 +f 1213 1251 1236 +f 1213 1214 1252 +f 1213 1252 1251 +f 1214 1250 1253 +f 1214 1253 1254 +f 1214 1254 1252 +f 1215 1235 1216 +f 1216 1255 1256 +f 1216 1256 1217 +f 1216 1235 1255 +f 1217 1256 1257 +f 1217 1257 1218 +f 1218 1257 1219 +f 1219 1257 1258 +f 1219 1258 1259 +f 1219 1259 1260 +f 1219 1260 1220 +f 1220 1260 1221 +f 1221 1261 1222 +f 1221 1260 1262 +f 1221 1262 1261 +f 1223 1232 1263 +f 1223 1263 1264 +f 1223 1264 1265 +f 1223 1265 1266 +f 1223 1266 1267 +f 1223 1267 1268 +f 1223 1268 1269 +f 1223 1269 1270 +f 1223 1270 1271 +f 1223 1271 1272 +f 1223 1272 1273 +f 1223 1273 1224 +f 1224 1273 1274 +f 1224 1274 1225 +f 1225 1274 1275 +f 1225 1275 1226 +f 1226 1275 1276 +f 1226 1276 1277 +f 1226 1277 1227 +f 1227 1277 1278 +f 1227 1278 1228 +f 1228 1278 1229 +f 1229 1278 1279 +f 1229 1279 1230 +f 1230 1279 1280 +f 1230 1280 1233 +f 1230 1233 1231 +f 1232 1238 1263 +f 1233 1280 1281 +f 1233 1281 1234 +f 1234 1281 1282 +f 1234 1282 1283 +f 1234 1283 1255 +f 1234 1255 1235 +f 1236 1284 1237 +f 1236 1251 1284 +f 1237 1284 1285 +f 1237 1285 1238 +f 1238 1285 1264 +f 1238 1264 1263 +f 1241 1286 1242 +f 1242 1286 1287 +f 1242 1287 1288 +f 1242 1288 1243 +f 1243 1288 1289 +f 1243 1289 1290 +f 1243 1290 1291 +f 1243 1291 1244 +f 1244 1291 1292 +f 1244 1292 1293 +f 1244 1293 1294 +f 1244 1294 1295 +f 1244 1295 1246 +f 1244 1246 1245 +f 1246 1295 1294 +f 1246 1294 1293 +f 1246 1293 1292 +f 1246 1292 1291 +f 1246 1291 1290 +f 1246 1290 1289 +f 1246 1289 1331 +f 1246 1331 1362 +f 1246 1362 1361 +f 1246 1361 1360 +f 1246 1360 1359 +f 1246 1359 1358 +f 1246 1358 1357 +f 1246 1357 1379 +f 1246 1379 1378 +f 1246 1378 1398 +f 1246 1398 1397 +f 1246 1397 1396 +f 1246 1396 1415 +f 1246 1415 1433 +f 1246 1433 1443 +f 1246 1443 1451 +f 1246 1451 1453 +f 1246 1453 1459 +f 1246 1459 1458 +f 1246 1458 1465 +f 1246 1465 1464 +f 1246 1464 1463 +f 1246 1463 1470 +f 1246 1470 1504 +f 1246 1504 1508 +f 1246 1508 1509 +f 1246 1509 1506 +f 1246 1506 1476 +f 1246 1476 1475 +f 1246 1475 1474 +f 1246 1474 1473 +f 1246 1473 1472 +f 1246 1472 1467 +f 1246 1467 1461 +f 1246 1461 1456 +f 1246 1456 1454 +f 1246 1454 1446 +f 1246 1446 1445 +f 1246 1445 1438 +f 1246 1438 1437 +f 1246 1437 1436 +f 1246 1436 1426 +f 1246 1426 1425 +f 1246 1425 1424 +f 1246 1424 1407 +f 1246 1407 1406 +f 1246 1406 1404 +f 1246 1404 1387 +f 1246 1387 1386 +f 1246 1386 1385 +f 1246 1385 1384 +f 1246 1384 1388 +f 1246 1388 1371 +f 1246 1371 1368 +f 1246 1368 1346 +f 1246 1346 1317 +f 1246 1317 1326 +f 1246 1326 1328 +f 1246 1328 1300 +f 1246 1300 1299 +f 1246 1299 1298 +f 1246 1298 1297 +f 1246 1297 1296 +f 1246 1296 1304 +f 1246 1304 1303 +f 1246 1303 1302 +f 1246 1302 1301 +f 1246 1301 1253 +f 1246 1253 1250 +f 1246 1250 1249 +f 1246 1249 1248 +f 1246 1248 1247 +f 1251 1252 1296 +f 1251 1296 1297 +f 1251 1297 1298 +f 1251 1298 1299 +f 1251 1299 1300 +f 1251 1300 1284 +f 1252 1254 1301 +f 1252 1301 1302 +f 1252 1302 1303 +f 1252 1303 1304 +f 1252 1304 1296 +f 1253 1301 1254 +f 1255 1283 1305 +f 1255 1305 1306 +f 1255 1306 1256 +f 1256 1306 1307 +f 1256 1307 1257 +f 1257 1307 1258 +f 1258 1307 1308 +f 1258 1308 1309 +f 1258 1309 1259 +f 1259 1309 1310 +f 1259 1310 1260 +f 1260 1310 1262 +f 1261 1262 1311 +f 1262 1310 1312 +f 1262 1312 1311 +f 1264 1285 1313 +f 1264 1313 1265 +f 1265 1313 1266 +f 1266 1313 1267 +f 1267 1313 1268 +f 1268 1313 1269 +f 1269 1313 1270 +f 1270 1313 1271 +f 1271 1314 1315 +f 1271 1315 1272 +f 1271 1313 1314 +f 1272 1315 1273 +f 1273 1315 1316 +f 1273 1316 1274 +f 1274 1316 1317 +f 1274 1317 1275 +f 1275 1318 1319 +f 1275 1319 1276 +f 1275 1317 1318 +f 1276 1319 1277 +f 1277 1319 1320 +f 1277 1320 1278 +f 1278 1320 1321 +f 1278 1321 1322 +f 1278 1322 1279 +f 1279 1322 1280 +f 1280 1322 1323 +f 1280 1323 1281 +f 1281 1323 1324 +f 1281 1324 1282 +f 1282 1324 1325 +f 1282 1325 1283 +f 1283 1325 1305 +f 1284 1326 1327 +f 1284 1327 1285 +f 1284 1300 1328 +f 1284 1328 1326 +f 1285 1329 1313 +f 1285 1327 1329 +f 1288 1330 1331 +f 1288 1331 1289 +f 1305 1325 1332 +f 1305 1332 1306 +f 1306 1332 1307 +f 1307 1332 1333 +f 1307 1333 1308 +f 1308 1333 1334 +f 1308 1334 1335 +f 1308 1335 1309 +f 1309 1335 1336 +f 1309 1336 1337 +f 1309 1337 1310 +f 1310 1337 1338 +f 1310 1338 1339 +f 1310 1339 1340 +f 1310 1340 1312 +f 1313 1329 1341 +f 1313 1341 1342 +f 1313 1342 1343 +f 1313 1343 1326 +f 1313 1326 1344 +f 1313 1344 1345 +f 1313 1345 1314 +f 1314 1345 1326 +f 1314 1326 1317 +f 1314 1317 1315 +f 1315 1317 1316 +f 1317 1346 1347 +f 1317 1347 1318 +f 1318 1347 1319 +f 1319 1347 1348 +f 1319 1348 1320 +f 1320 1348 1349 +f 1320 1349 1350 +f 1320 1350 1321 +f 1321 1350 1322 +f 1322 1350 1351 +f 1322 1351 1324 +f 1322 1324 1323 +f 1324 1352 1353 +f 1324 1353 1325 +f 1324 1351 1352 +f 1325 1354 1355 +f 1325 1355 1332 +f 1325 1353 1354 +f 1326 1345 1344 +f 1326 1343 1342 +f 1326 1342 1341 +f 1326 1341 1329 +f 1326 1329 1327 +f 1330 1356 1357 +f 1330 1357 1358 +f 1330 1358 1359 +f 1330 1359 1360 +f 1330 1360 1361 +f 1330 1361 1362 +f 1330 1362 1331 +f 1332 1355 1363 +f 1332 1363 1333 +f 1333 1364 1334 +f 1333 1363 1364 +f 1334 1364 1365 +f 1334 1365 1335 +f 1335 1365 1336 +f 1336 1365 1366 +f 1336 1366 1337 +f 1337 1367 1338 +f 1337 1366 1367 +f 1346 1368 1347 +f 1347 1369 1370 +f 1347 1370 1348 +f 1347 1368 1371 +f 1347 1371 1369 +f 1348 1370 1372 +f 1348 1372 1349 +f 1349 1372 1373 +f 1349 1373 1350 +f 1350 1373 1352 +f 1350 1352 1351 +f 1352 1374 1354 +f 1352 1354 1353 +f 1352 1373 1375 +f 1352 1375 1374 +f 1354 1374 1376 +f 1354 1376 1355 +f 1355 1376 1363 +f 1356 1377 1378 +f 1356 1378 1379 +f 1356 1379 1357 +f 1363 1376 1380 +f 1363 1380 1381 +f 1363 1381 1364 +f 1364 1382 1365 +f 1364 1381 1382 +f 1365 1382 1366 +f 1366 1382 1383 +f 1369 1384 1385 +f 1369 1385 1386 +f 1369 1386 1387 +f 1369 1387 1370 +f 1369 1371 1388 +f 1369 1388 1384 +f 1370 1389 1390 +f 1370 1390 1372 +f 1370 1387 1389 +f 1372 1390 1373 +f 1373 1390 1375 +f 1374 1391 1376 +f 1374 1375 1391 +f 1375 1390 1392 +f 1375 1392 1391 +f 1376 1391 1393 +f 1376 1393 1394 +f 1376 1394 1380 +f 1377 1395 1396 +f 1377 1396 1397 +f 1377 1397 1398 +f 1377 1398 1378 +f 1380 1394 1399 +f 1380 1399 1400 +f 1380 1400 1381 +f 1381 1400 1401 +f 1381 1401 1382 +f 1382 1402 1403 +f 1382 1403 1383 +f 1382 1401 1402 +f 1387 1404 1389 +f 1389 1405 1390 +f 1389 1404 1406 +f 1389 1406 1407 +f 1389 1407 1405 +f 1390 1408 1392 +f 1390 1405 1408 +f 1391 1409 1393 +f 1391 1392 1409 +f 1392 1408 1410 +f 1392 1410 1411 +f 1392 1411 1409 +f 1393 1412 1399 +f 1393 1399 1394 +f 1393 1409 1413 +f 1393 1413 1412 +f 1395 1414 1396 +f 1396 1414 1416 +f 1396 1416 1415 +f 1399 1412 1417 +f 1399 1417 1400 +f 1400 1417 1418 +f 1400 1418 1401 +f 1401 1418 1419 +f 1401 1419 1420 +f 1401 1420 1421 +f 1401 1421 1402 +f 1405 1422 1423 +f 1405 1423 1408 +f 1405 1407 1424 +f 1405 1424 1425 +f 1405 1425 1426 +f 1405 1426 1422 +f 1408 1423 1410 +f 1409 1411 1427 +f 1409 1427 1413 +f 1410 1428 1427 +f 1410 1427 1411 +f 1410 1423 1428 +f 1412 1413 1429 +f 1412 1429 1430 +f 1412 1430 1431 +f 1412 1431 1417 +f 1413 1427 1432 +f 1413 1432 1429 +f 1415 1416 1434 +f 1415 1434 1433 +f 1422 1435 1423 +f 1422 1426 1436 +f 1422 1436 1437 +f 1422 1437 1438 +f 1422 1438 1435 +f 1423 1435 1439 +f 1423 1439 1428 +f 1427 1428 1432 +f 1428 1439 1440 +f 1428 1440 1432 +f 1429 1432 1430 +f 1430 1432 1441 +f 1432 1440 1442 +f 1432 1442 1441 +f 1433 1434 1443 +f 1434 1444 1443 +f 1435 1445 1446 +f 1435 1446 1447 +f 1435 1447 1448 +f 1435 1448 1449 +f 1435 1449 1439 +f 1435 1438 1445 +f 1439 1449 1440 +f 1440 1449 1450 +f 1440 1450 1442 +f 1443 1444 1451 +f 1444 1452 1453 +f 1444 1453 1451 +f 1446 1454 1447 +f 1447 1454 1456 +f 1447 1456 1455 +f 1452 1457 1458 +f 1452 1458 1459 +f 1452 1459 1453 +f 1455 1456 1460 +f 1456 1461 1460 +f 1457 1462 1463 +f 1457 1463 1464 +f 1457 1464 1465 +f 1457 1465 1458 +f 1460 1461 1466 +f 1461 1467 1466 +f 1462 1468 1463 +f 1463 1468 1469 +f 1463 1469 1470 +f 1466 1467 1472 +f 1466 1472 1473 +f 1466 1473 1474 +f 1466 1474 1475 +f 1466 1475 1476 +f 1466 1476 1471 +f 1469 1477 1470 +f 1470 1477 1478 +f 1470 1478 1479 +f 1470 1479 1480 +f 1470 1480 1481 +f 1470 1481 1482 +f 1470 1482 1483 +f 1470 1483 1484 +f 1470 1484 1485 +f 1470 1485 1486 +f 1470 1486 1487 +f 1470 1487 1488 +f 1470 1488 1489 +f 1470 1489 1490 +f 1470 1490 1491 +f 1470 1491 1492 +f 1470 1492 1493 +f 1470 1493 1494 +f 1470 1494 1495 +f 1470 1495 1496 +f 1470 1496 1497 +f 1470 1497 1498 +f 1470 1498 1499 +f 1470 1499 1500 +f 1470 1500 1501 +f 1470 1501 1502 +f 1470 1502 1503 +f 1470 1503 1504 +f 1471 1476 1505 +f 1476 1506 1505 +f 1503 1507 1508 +f 1503 1508 1504 +f 1505 1506 1509 +f 1505 1509 1508 +f 1505 1508 1507 \ No newline at end of file diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link6.obj.convex.stl b/src/experiments/assets/robots/xarm7/meshes/collision/link6.obj.convex.stl new file mode 100644 index 0000000000000000000000000000000000000000..a68be74faa0e0ad9d994eb0db9d6d4e80e35f2b4 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link6.obj.convex.stl @@ -0,0 +1,2210 @@ +solid AssimpScene + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0774672851 0.0685170591 0.0374705903 + vertex 0.0860697478 0.0685170591 0.0361217782 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0860697478 0.0685170591 0.0361217782 + vertex 0.0941290483 0.0685170591 0.0328230597 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0941290483 0.0685170591 0.0328230597 + vertex 0.101204798 0.0685170591 0.0277576894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.101204798 0.0685170591 0.0277576894 + vertex 0.106929988 0.0685170591 0.0211968999 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.106929988 0.0685170591 0.0211968999 + vertex 0.110981666 0.0685170591 0.0134925498 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.110981666 0.0685170591 0.0134925498 + vertex 0.113154292 0.0685170591 0.00505515002 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.113154292 0.0685170591 0.00505515002 + vertex 0.113315791 0.0685170591 -0.00363881001 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.113315791 0.0685170591 -0.00363881001 + vertex 0.111473441 0.0685170591 -0.0121495193 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.111473441 0.0685170591 -0.0121495193 + vertex 0.107715376 0.0685170591 -0.0200078096 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.107715376 0.0685170591 -0.0200078096 + vertex 0.102247082 0.0685170591 -0.0267811809 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.102247082 0.0685170591 -0.0267811809 + vertex 0.0953621715 0.0685170591 -0.0321104489 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0953621715 0.0685170591 -0.0321104489 + vertex 0.0874349847 0.0685170591 -0.0357097201 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0874349847 0.0685170591 -0.0357097201 + vertex 0.0788839012 0.0685170591 -0.0373884104 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0788839012 0.0685170591 -0.0373884104 + vertex 0.0701933503 0.0685170591 -0.0370438695 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0701933503 0.0685170591 -0.0370438695 + vertex 0.0618037432 0.0685170591 -0.0347054414 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0618037432 0.0685170591 -0.0347054414 + vertex 0.0541848429 0.0685170591 -0.0304977391 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0541848429 0.0685170591 -0.0304977391 + vertex 0.042815201 0.0685170591 -0.0174567997 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.042815201 0.0685170591 -0.0174567997 + vertex 0.0385066196 0.0685170591 -0.000706619991 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0385066196 0.0685170591 -0.000706619991 + vertex 0.0393580608 0.0685170591 0.00795068964 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0393580608 0.0685170591 0.00795068964 + vertex 0.0421766229 0.0685170591 0.0161901694 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0421766229 0.0685170591 0.0161901694 + vertex 0.0530398004 0.0685170591 0.029641619 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0530398004 0.0685170591 0.029641619 + vertex 0.0604972355 0.0685170591 0.0341425389 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0661785528 -0.020524988 -0.0357501283 + vertex -0.0368260182 -0.00703608012 -0.00433559017 + vertex 0.0618037432 0.0685170591 -0.0347054414 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0356301516 -0.00895220041 0.0395793691 + vertex -0.0374943018 -2.98999976e-06 0.0263493992 + vertex -0.0368260182 -0.00703608012 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.000245939998 -0.03749571 -0.00433559017 + vertex -0.0131829698 -0.0351024009 -0.00433559017 + vertex 0.0700432286 -0.0299757682 -0.0324478187 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0857265666 -0.0349042118 -0.0183447208 + vertex 0.0919302031 -0.0349042118 0.0133127598 + vertex 0.000245939998 -0.03749571 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.113445409 -0.0125472397 -0.00184144988 + vertex 0.111067727 -0.020524988 -0.0120297801 + vertex 0.111473441 0.0685170591 -0.0121495193 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.113445409 -0.0125472397 -0.00184144988 + vertex 0.113491945 0.0350231417 -0.000765260018 + vertex 0.113154292 0.0685170591 0.00505515002 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0334494486 -0.0167488102 0.0314523913 + vertex -0.0356301516 -0.00895220041 0.0395793691 + vertex -0.0368260182 -0.00703608012 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0194296408 -0.0320190005 0.0252824686 + vertex -0.0131829698 -0.0351024009 -0.00433559017 + vertex -0.0100526102 -0.0358805917 0.0271236897 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0604972355 0.0685170591 0.0341425389 + vertex 0.0530398004 0.0685170591 0.029641619 + vertex -0.0214766804 0.0256920382 0.0453651957 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0541848429 0.0685170591 -0.0304977391 + vertex -0.0248040091 0.0281073805 -0.00433559017 + vertex 0.042815201 0.0685170591 -0.0174567997 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0143014705 0.0250166301 0.0494012497 + vertex 0.0604972355 0.0685170591 0.0341425389 + vertex -0.0214766804 0.0256920382 0.0453651957 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0317048803 -0.0200084094 -0.00433559017 + vertex -0.0272942297 -0.025705358 -0.00433559017 + vertex -0.0272027925 -0.0249565281 0.0357140191 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0317048803 -0.0200084094 -0.00433559017 + vertex -0.0272027925 -0.0249565281 0.0357140191 + vertex -0.0334494486 -0.0167488102 0.0314523913 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0317048803 -0.0200084094 -0.00433559017 + vertex -0.0334494486 -0.0167488102 0.0314523913 + vertex -0.0368260182 -0.00703608012 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0317048803 -0.0200084094 -0.00433559017 + vertex -0.0368260182 -0.00703608012 -0.00433559017 + vertex 0.0661785528 -0.020524988 -0.0357501283 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0317048803 -0.0200084094 -0.00433559017 + vertex 0.0661785528 -0.020524988 -0.0357501283 + vertex -0.0272942297 -0.025705358 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0935643688 -0.0125472397 -0.0331182107 + vertex 0.0953621715 0.0685170591 -0.0321104489 + vertex 0.100976191 -0.020524988 -0.0273991786 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.108883686 -0.0125472397 -0.0179971103 + vertex 0.107715376 0.0685170591 -0.0200078096 + vertex 0.111473441 0.0685170591 -0.0121495193 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.108883686 -0.0125472397 -0.0179971103 + vertex 0.111473441 0.0685170591 -0.0121495193 + vertex 0.111067727 -0.020524988 -0.0120297801 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0835735053 -0.020524988 0.0362551287 + vertex 0.00147698005 -0.0165359005 0.0552419499 + vertex 0.0831552669 -0.0270090699 0.0342853293 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0835735053 -0.020524988 0.0362551287 + vertex 0.0831552669 -0.0270090699 0.0342853293 + vertex 0.0948655009 -0.0237945598 0.0310657807 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0835735053 -0.020524988 0.0362551287 + vertex 0.0948655009 -0.0237945598 0.0310657807 + vertex 0.0927201807 -0.0125472397 0.0335487314 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0287644528 0.0239374395 0.0294221696 + vertex -0.0208435822 0.0306254886 0.0326412618 + vertex -0.0248040091 0.0281073805 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0362421609 -2.98999976e-06 0.0422741398 + vertex -0.0333017223 0.00448263017 0.0483099259 + vertex -0.0356301516 0.0089462297 0.0395793691 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0362421609 -2.98999976e-06 0.0422741398 + vertex -0.0356301516 0.0089462297 0.0395793691 + vertex -0.0374943018 -2.98999976e-06 0.0263493992 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0362421609 -2.98999976e-06 0.0422741398 + vertex -0.0374943018 -2.98999976e-06 0.0263493992 + vertex -0.0356301516 -0.00895220041 0.0395793691 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0362421609 -2.98999976e-06 0.0422741398 + vertex -0.0356301516 -0.00895220041 0.0395793691 + vertex -0.0323872305 -0.00934863929 0.0478770547 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.112213984 -0.020524988 0.00792478025 + vertex 0.108349301 -0.0270090699 0.0134700192 + vertex 0.11102128 -0.0270090699 0.00134498987 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.112213984 -0.020524988 0.00792478025 + vertex 0.113445409 -0.0125472397 -0.00184144988 + vertex 0.113154292 0.0685170591 0.00505515002 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.112213984 -0.020524988 0.00792478025 + vertex 0.113154292 0.0685170591 0.00505515002 + vertex 0.111749277 -0.0125472397 0.0112933004 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0368752591 0.00675114011 -0.00433559017 + vertex -0.0350603536 0.0132776704 -0.00433559017 + vertex 0.0618037432 0.0685170591 -0.0347054414 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0368752591 0.00675114011 -0.00433559017 + vertex 0.0618037432 0.0685170591 -0.0347054414 + vertex -0.0368260182 -0.00703608012 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0368752591 0.00675114011 -0.00433559017 + vertex -0.0368260182 -0.00703608012 -0.00433559017 + vertex -0.0374943018 -2.98999976e-06 0.0263493992 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0146250501 0.00804322958 0.0568697751 + vertex -0.00749908015 0.0159279294 0.0558089465 + vertex -0.0244593211 0.0138429599 0.0523581803 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0146250501 0.00804322958 0.0568697751 + vertex -0.0244593211 0.0138429599 0.0523581803 + vertex -0.0284056924 -2.98999976e-06 0.0531141758 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0146250501 0.00804322958 0.0568697751 + vertex -0.0284056924 -2.98999976e-06 0.0531141758 + vertex -0.0129930405 -0.00122166995 0.0576806515 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0811338797 -0.0270090699 -0.0346659087 + vertex 0.0803903565 -0.0324124582 -0.0296503808 + vertex 0.0700432286 -0.0299757682 -0.0324478187 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0811338797 -0.0270090699 -0.0346659087 + vertex 0.0700432286 -0.0299757682 -0.0324478187 + vertex 0.0749302506 -0.0237945598 -0.0363294892 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0811338797 -0.0270090699 -0.0346659087 + vertex 0.0876240507 -0.0237945598 -0.0344341695 + vertex 0.0914577693 -0.0299757682 -0.0291455109 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0811338797 -0.0270090699 -0.0346659087 + vertex 0.0914577693 -0.0299757682 -0.0291455109 + vertex 0.0803903565 -0.0324124582 -0.0296503808 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248462223 0.0255599003 0.0411096588 + vertex -0.0208435822 0.0306254886 0.0326412618 + vertex -0.0287644528 0.0239374395 0.0294221696 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248462223 0.0255599003 0.0411096588 + vertex -0.0287644528 0.0239374395 0.0294221696 + vertex -0.0323168933 0.0176164601 0.0380917601 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248462223 0.0255599003 0.0411096588 + vertex -0.0323168933 0.0176164601 0.0380917601 + vertex -0.0287714899 0.0182918794 0.0461455807 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248462223 0.0255599003 0.0411096588 + vertex -0.0287714899 0.0182918794 0.0461455807 + vertex -0.0214766804 0.0256920382 0.0453651957 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.100426309 -0.0340438001 -0.00837985892 + vertex 0.0919302031 -0.0349042118 0.0133127598 + vertex 0.0857265666 -0.0349042118 -0.0183447208 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.100426309 -0.0340438001 -0.00837985892 + vertex 0.0857265666 -0.0349042118 -0.0183447208 + vertex 0.0995356366 -0.0324124582 -0.0185516402 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.100426309 -0.0340438001 -0.00837985892 + vertex 0.0995356366 -0.0324124582 -0.0185516402 + vertex 0.107203051 -0.0299757682 -0.01070554 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.100426309 -0.0340438001 -0.00837985892 + vertex 0.107203051 -0.0299757682 -0.01070554 + vertex 0.105948381 -0.0324124582 0.00114635995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.10288918 -0.0270090699 0.0224748086 + vertex 0.0975374728 -0.0299757682 0.0249825809 + vertex 0.101448633 -0.0324124582 0.0158288106 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.10288918 -0.0270090699 0.0224748086 + vertex 0.101448633 -0.0324124582 0.0158288106 + vertex 0.108349301 -0.0270090699 0.0134700192 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.10288918 -0.0270090699 0.0224748086 + vertex 0.104445882 -0.020524988 0.0237742197 + vertex 0.0948655009 -0.0237945598 0.0310657807 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.10288918 -0.0270090699 0.0224748086 + vertex 0.0948655009 -0.0237945598 0.0310657807 + vertex 0.0975374728 -0.0299757682 0.0249825809 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0317330211 0.0199583806 -0.00433559017 + vertex -0.0323168933 0.0176164601 0.0380917601 + vertex -0.0287644528 0.0239374395 0.0294221696 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0317330211 0.0199583806 -0.00433559017 + vertex -0.0287644528 0.0239374395 0.0294221696 + vertex -0.0248040091 0.0281073805 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0317330211 0.0199583806 -0.00433559017 + vertex -0.0248040091 0.0281073805 -0.00433559017 + vertex 0.0541848429 0.0685170591 -0.0304977391 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0317330211 0.0199583806 -0.00433559017 + vertex 0.0541848429 0.0685170591 -0.0304977391 + vertex 0.0618037432 0.0685170591 -0.0347054414 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0317330211 0.0199583806 -0.00433559017 + vertex 0.0618037432 0.0685170591 -0.0347054414 + vertex -0.0350603536 0.0132776704 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0385066196 0.0685170591 -0.000706619991 + vertex 0.042815201 0.0685170591 -0.0174567997 + vertex -0.0248040091 0.0281073805 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0385066196 0.0685170591 -0.000706619991 + vertex -0.0248040091 0.0281073805 -0.00433559017 + vertex -0.0208435822 0.0306254886 0.0326412618 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0385066196 0.0685170591 -0.000706619991 + vertex -0.0208435822 0.0306254886 0.0326412618 + vertex 0.0393580608 0.0685170591 0.00795068964 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0748992637 -0.0125472397 -0.037479911 + vertex 0.0788839012 0.0685170591 -0.0373884104 + vertex 0.0848049298 -0.0125472397 -0.0364453495 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0748992637 -0.0125472397 -0.037479911 + vertex 0.0749302506 -0.0237945598 -0.0363294892 + vertex 0.0661785528 -0.020524988 -0.0357501283 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.113027185 -0.020524988 -0.00181662 + vertex 0.111067727 -0.020524988 -0.0120297801 + vertex 0.113445409 -0.0125472397 -0.00184144988 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.113027185 -0.020524988 -0.00181662 + vertex 0.113445409 -0.0125472397 -0.00184144988 + vertex 0.112213984 -0.020524988 0.00792478025 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.113027185 -0.020524988 -0.00181662 + vertex 0.112213984 -0.020524988 0.00792478025 + vertex 0.11102128 -0.0270090699 0.00134498987 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.088158451 -0.0299757682 0.03066024 + vertex 0.0975374728 -0.0299757682 0.0249825809 + vertex 0.0948655009 -0.0237945598 0.0310657807 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.088158451 -0.0299757682 0.03066024 + vertex 0.0948655009 -0.0237945598 0.0310657807 + vertex 0.0831552669 -0.0270090699 0.0342853293 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0978162885 -0.0260316301 -0.0280281883 + vertex 0.100976191 -0.020524988 -0.0273991786 + vertex 0.103516497 -0.0270090699 -0.0216966905 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0978162885 -0.0260316301 -0.0280281883 + vertex 0.0914577693 -0.0299757682 -0.0291455109 + vertex 0.0876240507 -0.0237945598 -0.0344341695 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0421766229 0.0685170591 0.0161901694 + vertex 0.0393580608 0.0685170591 0.00795068964 + vertex -0.0208435822 0.0306254886 0.0326412618 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0860697478 0.0685170591 0.0361217782 + vertex 0.0774672851 0.0685170591 0.0374705903 + vertex 0.00785025954 0.00282346993 0.0561198816 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0860697478 0.0685170591 0.0361217782 + vertex 0.00785025954 0.00282346993 0.0561198816 + vertex 0.0835735053 -0.020524988 0.0362551287 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0860697478 0.0685170591 0.0361217782 + vertex 0.0835735053 -0.020524988 0.0362551287 + vertex 0.0927201807 -0.0125472397 0.0335487314 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0860697478 0.0685170591 0.0361217782 + vertex 0.0927201807 -0.0125472397 0.0335487314 + vertex 0.0941290483 0.0685170591 0.0328230597 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.102247082 0.0685170591 -0.0267811809 + vertex 0.107715376 0.0685170591 -0.0200078096 + vertex 0.108883686 -0.0125472397 -0.0179971103 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.102247082 0.0685170591 -0.0267811809 + vertex 0.108883686 -0.0125472397 -0.0179971103 + vertex 0.100976191 -0.020524988 -0.0273991786 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.102247082 0.0685170591 -0.0267811809 + vertex 0.100976191 -0.020524988 -0.0273991786 + vertex 0.0953621715 0.0685170591 -0.0321104489 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0874349847 0.0685170591 -0.0357097201 + vertex 0.0848049298 -0.0125472397 -0.0364453495 + vertex 0.0788839012 0.0685170591 -0.0373884104 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0874349847 0.0685170591 -0.0357097201 + vertex 0.0953621715 0.0685170591 -0.0321104489 + vertex 0.0935643688 -0.0125472397 -0.0331182107 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0874349847 0.0685170591 -0.0357097201 + vertex 0.0935643688 -0.0125472397 -0.0331182107 + vertex 0.0848049298 -0.0125472397 -0.0364453495 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110981666 0.0685170591 0.0134925498 + vertex 0.111749277 -0.0125472397 0.0112933004 + vertex 0.113154292 0.0685170591 0.00505515002 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0701933503 0.0685170591 -0.0370438695 + vertex 0.0788839012 0.0685170591 -0.0373884104 + vertex 0.0748992637 -0.0125472397 -0.037479911 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0701933503 0.0685170591 -0.0370438695 + vertex 0.0748992637 -0.0125472397 -0.037479911 + vertex 0.0661785528 -0.020524988 -0.0357501283 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0701933503 0.0685170591 -0.0370438695 + vertex 0.0661785528 -0.020524988 -0.0357501283 + vertex 0.0618037432 0.0685170591 -0.0347054414 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00436871033 -0.0191788208 0.0543762073 + vertex 0.00147698005 -0.0165359005 0.0552419499 + vertex -0.0105872396 -0.0138195688 0.0561991408 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00436871033 -0.0191788208 0.0543762073 + vertex -0.0105872396 -0.0138195688 0.0561991408 + vertex -0.0198657699 -0.0219538901 0.0499560609 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00436871033 -0.0191788208 0.0543762073 + vertex -0.0052550598 -0.0298826378 0.0462919101 + vertex 0.0831552669 -0.0270090699 0.0342853293 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00436871033 -0.0191788208 0.0543762073 + vertex 0.0831552669 -0.0270090699 0.0342853293 + vertex 0.00147698005 -0.0165359005 0.0552419499 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.113315791 0.0685170591 -0.00363881001 + vertex 0.113154292 0.0685170591 0.00505515002 + vertex 0.113491945 0.0350231417 -0.000765260018 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.113315791 0.0685170591 -0.00363881001 + vertex 0.113491945 0.0350231417 -0.000765260018 + vertex 0.113445409 -0.0125472397 -0.00184144988 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.113315791 0.0685170591 -0.00363881001 + vertex 0.113445409 -0.0125472397 -0.00184144988 + vertex 0.111473441 0.0685170591 -0.0121495193 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00183627999 -0.00369572989 0.0575038493 + vertex -0.0129930405 -0.00122166995 0.0576806515 + vertex -0.0105872396 -0.0138195688 0.0561991408 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00183627999 -0.00369572989 0.0575038493 + vertex -0.0105872396 -0.0138195688 0.0561991408 + vertex 0.00147698005 -0.0165359005 0.0552419499 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0915584415 -0.0324124582 0.0256198701 + vertex 0.101448633 -0.0324124582 0.0158288106 + vertex 0.0975374728 -0.0299757682 0.0249825809 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0915584415 -0.0324124582 0.0256198701 + vertex 0.0975374728 -0.0299757682 0.0249825809 + vertex 0.088158451 -0.0299757682 0.03066024 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0915584415 -0.0324124582 0.0256198701 + vertex 0.088158451 -0.0299757682 0.03066024 + vertex 0.0821252167 -0.0324124582 0.0293359999 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110223539 -0.020524988 0.0142562799 + vertex 0.104445882 -0.020524988 0.0237742197 + vertex 0.10288918 -0.0270090699 0.0224748086 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110223539 -0.020524988 0.0142562799 + vertex 0.10288918 -0.0270090699 0.0224748086 + vertex 0.108349301 -0.0270090699 0.0134700192 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110223539 -0.020524988 0.0142562799 + vertex 0.108349301 -0.0270090699 0.0134700192 + vertex 0.112213984 -0.020524988 0.00792478025 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110223539 -0.020524988 0.0142562799 + vertex 0.112213984 -0.020524988 0.00792478025 + vertex 0.111749277 -0.0125472397 0.0112933004 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00257490994 -0.0373048261 0.0230937302 + vertex -0.0100526102 -0.0358805917 0.0271236897 + vertex -0.0131829698 -0.0351024009 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00257490994 -0.0373048261 0.0230937302 + vertex -0.0131829698 -0.0351024009 -0.00433559017 + vertex 0.000245939998 -0.03749571 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00257490994 -0.0373048261 0.0230937302 + vertex 0.000245939998 -0.03749571 -0.00433559017 + vertex 0.0919302031 -0.0349042118 0.0133127598 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00257490994 -0.0373048261 0.0230937302 + vertex 0.0919302031 -0.0349042118 0.0133127598 + vertex 0.0031934001 -0.0360934995 0.0350677706 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0306215696 0.00937203038 0.0499804355 + vertex -0.0244593211 0.0138429599 0.0523581803 + vertex -0.0287714899 0.0182918794 0.0461455807 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0306215696 0.00937203038 0.0499804355 + vertex -0.0333017223 0.00448263017 0.0483099259 + vertex -0.0284056924 -2.98999976e-06 0.0531141758 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0306215696 0.00937203038 0.0499804355 + vertex -0.0284056924 -2.98999976e-06 0.0531141758 + vertex -0.0244593211 0.0138429599 0.0523581803 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0314164683 -0.0179381184 0.0410608798 + vertex -0.0356301516 -0.00895220041 0.0395793691 + vertex -0.0334494486 -0.0167488102 0.0314523913 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0314164683 -0.0179381184 0.0410608798 + vertex -0.0334494486 -0.0167488102 0.0314523913 + vertex -0.0272027925 -0.0249565281 0.0357140191 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0314164683 -0.0179381184 0.0410608798 + vertex -0.0272027925 -0.0249565281 0.0357140191 + vertex -0.0287714899 -0.0182978492 0.0461394899 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0314164683 -0.0179381184 0.0410608798 + vertex -0.0287714899 -0.0182978492 0.0461394899 + vertex -0.0323872305 -0.00934863929 0.0478770547 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0314164683 -0.0179381184 0.0410608798 + vertex -0.0323872305 -0.00934863929 0.0478770547 + vertex -0.0356301516 -0.00895220041 0.0395793691 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.108519688 -0.020524988 -0.0177984703 + vertex 0.103516497 -0.0270090699 -0.0216966905 + vertex 0.100976191 -0.020524988 -0.0273991786 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.108519688 -0.020524988 -0.0177984703 + vertex 0.100976191 -0.020524988 -0.0273991786 + vertex 0.108883686 -0.0125472397 -0.0179971103 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.108519688 -0.020524988 -0.0177984703 + vertex 0.108883686 -0.0125472397 -0.0179971103 + vertex 0.111067727 -0.020524988 -0.0120297801 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.100480512 -0.0125472397 0.0283924881 + vertex 0.104445882 -0.020524988 0.0237742197 + vertex 0.106929988 0.0685170591 0.0211968999 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.100480512 -0.0125472397 0.0283924881 + vertex 0.106929988 0.0685170591 0.0211968999 + vertex 0.101204798 0.0685170591 0.0277576894 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.100480512 -0.0125472397 0.0283924881 + vertex 0.101204798 0.0685170591 0.0277576894 + vertex 0.0941290483 0.0685170591 0.0328230597 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.100480512 -0.0125472397 0.0283924881 + vertex 0.0941290483 0.0685170591 0.0328230597 + vertex 0.0927201807 -0.0125472397 0.0335487314 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.100480512 -0.0125472397 0.0283924881 + vertex 0.0927201807 -0.0125472397 0.0335487314 + vertex 0.0948655009 -0.0237945598 0.0310657807 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.100480512 -0.0125472397 0.0283924881 + vertex 0.0948655009 -0.0237945598 0.0310657807 + vertex 0.104445882 -0.020524988 0.0237742197 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0198728126 -0.0317914188 -0.00433559017 + vertex -0.0131829698 -0.0351024009 -0.00433559017 + vertex -0.0194296408 -0.0320190005 0.0252824686 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0198728126 -0.0317914188 -0.00433559017 + vertex -0.0194296408 -0.0320190005 0.0252824686 + vertex -0.0272942297 -0.025705358 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.01384422 -0.0282822102 0.0465662591 + vertex -0.0198657699 -0.0219538901 0.0499560609 + vertex -0.0214766804 -0.0256980192 0.0453651957 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.01384422 -0.0282822102 0.0465662591 + vertex -0.0214766804 -0.0256980192 0.0453651957 + vertex -0.0166650601 -0.0312114395 0.0398354307 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.01384422 -0.0282822102 0.0465662591 + vertex -0.0166650601 -0.0312114395 0.0398354307 + vertex -0.00365119008 -0.0342654809 0.0400792994 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.01384422 -0.0282822102 0.0465662591 + vertex -0.00365119008 -0.0342654809 0.0400792994 + vertex -0.0052550598 -0.0298826378 0.0462919101 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.01384422 -0.0282822102 0.0465662591 + vertex -0.0052550598 -0.0298826378 0.0462919101 + vertex -0.00436871033 -0.0191788208 0.0543762073 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.01384422 -0.0282822102 0.0465662591 + vertex -0.00436871033 -0.0191788208 0.0543762073 + vertex -0.0198657699 -0.0219538901 0.0499560609 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110610798 -0.0270090699 -0.00551619986 + vertex 0.11102128 -0.0270090699 0.00134498987 + vertex 0.105948381 -0.0324124582 0.00114635995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110610798 -0.0270090699 -0.00551619986 + vertex 0.105948381 -0.0324124582 0.00114635995 + vertex 0.107203051 -0.0299757682 -0.01070554 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110610798 -0.0270090699 -0.00551619986 + vertex 0.111067727 -0.020524988 -0.0120297801 + vertex 0.113027185 -0.020524988 -0.00181662 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.110610798 -0.0270090699 -0.00551619986 + vertex 0.113027185 -0.020524988 -0.00181662 + vertex 0.11102128 -0.0270090699 0.00134498987 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.108225368 -0.0299757682 0.00704747997 + vertex 0.11102128 -0.0270090699 0.00134498987 + vertex 0.108349301 -0.0270090699 0.0134700192 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.108225368 -0.0299757682 0.00704747997 + vertex 0.108349301 -0.0270090699 0.0134700192 + vertex 0.101448633 -0.0324124582 0.0158288106 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.108225368 -0.0299757682 0.00704747997 + vertex 0.101448633 -0.0324124582 0.0158288106 + vertex 0.105948381 -0.0324124582 0.00114635995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.108225368 -0.0299757682 0.00704747997 + vertex 0.105948381 -0.0324124582 0.00114635995 + vertex 0.11102128 -0.0270090699 0.00134498987 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0900404602 -0.0324124582 -0.0264804885 + vertex 0.0803903565 -0.0324124582 -0.0296503808 + vertex 0.0914577693 -0.0299757682 -0.0291455109 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0900404602 -0.0324124582 -0.0264804885 + vertex 0.0995356366 -0.0324124582 -0.0185516402 + vertex 0.0857265666 -0.0349042118 -0.0183447208 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0322887488 0.0138649903 0.0447250418 + vertex -0.0356301516 0.0089462297 0.0395793691 + vertex -0.0333017223 0.00448263017 0.0483099259 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0322887488 0.0138649903 0.0447250418 + vertex -0.0333017223 0.00448263017 0.0483099259 + vertex -0.0306215696 0.00937203038 0.0499804355 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0322887488 0.0138649903 0.0447250418 + vertex -0.0306215696 0.00937203038 0.0499804355 + vertex -0.0287714899 0.0182918794 0.0461455807 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0322887488 0.0138649903 0.0447250418 + vertex -0.0287714899 0.0182918794 0.0461455807 + vertex -0.0323168933 0.0176164601 0.0380917601 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0322887488 0.0138649903 0.0447250418 + vertex -0.0323168933 0.0176164601 0.0380917601 + vertex -0.0356301516 0.0089462297 0.0395793691 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0166650601 0.0312054697 0.0398354307 + vertex -0.0214766804 0.0256920382 0.0453651957 + vertex 0.0530398004 0.0685170591 0.029641619 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0166650601 0.0312054697 0.0398354307 + vertex 0.0530398004 0.0685170591 0.029641619 + vertex 0.0421766229 0.0685170591 0.0161901694 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0166650601 0.0312054697 0.0398354307 + vertex 0.0421766229 0.0685170591 0.0161901694 + vertex -0.0208435822 0.0306254886 0.0326412618 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0166650601 0.0312054697 0.0398354307 + vertex -0.0208435822 0.0306254886 0.0326412618 + vertex -0.0248462223 0.0255599003 0.0411096588 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0166650601 0.0312054697 0.0398354307 + vertex -0.0248462223 0.0255599003 0.0411096588 + vertex -0.0214766804 0.0256920382 0.0453651957 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00916572008 -0.00948077999 0.055260241 + vertex 0.00147698005 -0.0165359005 0.0552419499 + vertex 0.0835735053 -0.020524988 0.0362551287 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00916572008 -0.00948077999 0.055260241 + vertex 0.0835735053 -0.020524988 0.0362551287 + vertex 0.00785025954 0.00282346993 0.0561198816 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00916572008 -0.00948077999 0.055260241 + vertex 0.00785025954 0.00282346993 0.0561198816 + vertex -0.00183627999 -0.00369572989 0.0575038493 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00916572008 -0.00948077999 0.055260241 + vertex -0.00183627999 -0.00369572989 0.0575038493 + vertex 0.00147698005 -0.0165359005 0.0552419499 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00408030022 0.01083297 0.0569978096 + vertex -0.00749908015 0.0159279294 0.0558089465 + vertex -0.0146250501 0.00804322958 0.0568697751 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00408030022 0.01083297 0.0569978096 + vertex -0.0146250501 0.00804322958 0.0568697751 + vertex -0.0129930405 -0.00122166995 0.0576806515 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00408030022 0.01083297 0.0569978096 + vertex -0.0129930405 -0.00122166995 0.0576806515 + vertex -0.00183627999 -0.00369572989 0.0575038493 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00408030022 0.01083297 0.0569978096 + vertex -0.00183627999 -0.00369572989 0.0575038493 + vertex 0.00785025954 0.00282346993 0.0561198816 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00408030022 0.01083297 0.0569978096 + vertex 0.00785025954 0.00282346993 0.0561198816 + vertex 0.0774672851 0.0685170591 0.0374705903 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00408030022 0.01083297 0.0569978096 + vertex 0.0774672851 0.0685170591 0.0374705903 + vertex -0.00749908015 0.0159279294 0.0558089465 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248462223 -0.0182611495 0.0499194711 + vertex -0.0287714899 -0.0182978492 0.0461394899 + vertex -0.0214766804 -0.0256980192 0.0453651957 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248462223 -0.0182611495 0.0499194711 + vertex -0.0214766804 -0.0256980192 0.0453651957 + vertex -0.0198657699 -0.0219538901 0.0499560609 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248462223 -0.0182611495 0.0499194711 + vertex -0.0198657699 -0.0219538901 0.0499560609 + vertex -0.0105872396 -0.0138195688 0.0561991408 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248462223 -0.0182611495 0.0499194711 + vertex -0.0105872396 -0.0138195688 0.0561991408 + vertex -0.0259928405 -0.00926787872 0.0531324707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248462223 -0.0182611495 0.0499194711 + vertex -0.0259928405 -0.00926787872 0.0531324707 + vertex -0.0323872305 -0.00934863929 0.0478770547 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0248462223 -0.0182611495 0.0499194711 + vertex -0.0323872305 -0.00934863929 0.0478770547 + vertex -0.0287714899 -0.0182978492 0.0461394899 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0933707431 -0.020524988 -0.0327540487 + vertex 0.0876240507 -0.0237945598 -0.0344341695 + vertex 0.0848049298 -0.0125472397 -0.0364453495 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0933707431 -0.020524988 -0.0327540487 + vertex 0.0848049298 -0.0125472397 -0.0364453495 + vertex 0.0935643688 -0.0125472397 -0.0331182107 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0933707431 -0.020524988 -0.0327540487 + vertex 0.0935643688 -0.0125472397 -0.0331182107 + vertex 0.100976191 -0.020524988 -0.0273991786 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0933707431 -0.020524988 -0.0327540487 + vertex 0.100976191 -0.020524988 -0.0273991786 + vertex 0.0978162885 -0.0260316301 -0.0280281883 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0933707431 -0.020524988 -0.0327540487 + vertex 0.0978162885 -0.0260316301 -0.0280281883 + vertex 0.0876240507 -0.0237945598 -0.0344341695 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0198587403 0.0219479091 0.0499560609 + vertex -0.0244593211 0.0138429599 0.0523581803 + vertex -0.00749908015 0.0159279294 0.0558089465 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0198587403 0.0219479091 0.0499560609 + vertex -0.00749908015 0.0159279294 0.0558089465 + vertex -0.0143014705 0.0250166301 0.0494012497 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0198587403 0.0219479091 0.0499560609 + vertex -0.0143014705 0.0250166301 0.0494012497 + vertex -0.0214766804 0.0256920382 0.0453651957 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0198587403 0.0219479091 0.0499560609 + vertex -0.0214766804 0.0256920382 0.0453651957 + vertex -0.0287714899 0.0182918794 0.0461455807 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0198587403 0.0219479091 0.0499560609 + vertex -0.0287714899 0.0182918794 0.0461455807 + vertex -0.0244593211 0.0138429599 0.0523581803 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0814359188 -0.020524988 -0.0366770998 + vertex 0.0876240507 -0.0237945598 -0.0344341695 + vertex 0.0811338797 -0.0270090699 -0.0346659087 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0814359188 -0.020524988 -0.0366770998 + vertex 0.0811338797 -0.0270090699 -0.0346659087 + vertex 0.0749302506 -0.0237945598 -0.0363294892 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0814359188 -0.020524988 -0.0366770998 + vertex 0.0749302506 -0.0237945598 -0.0363294892 + vertex 0.0748992637 -0.0125472397 -0.037479911 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0814359188 -0.020524988 -0.0366770998 + vertex 0.0748992637 -0.0125472397 -0.037479911 + vertex 0.0848049298 -0.0125472397 -0.0364453495 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0814359188 -0.020524988 -0.0366770998 + vertex 0.0848049298 -0.0125472397 -0.0364453495 + vertex 0.0876240507 -0.0237945598 -0.0344341695 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex 0.0604972355 0.0685170591 0.0341425389 + vertex -0.0143014705 0.0250166301 0.0494012497 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex -0.0143014705 0.0250166301 0.0494012497 + vertex -0.00749908015 0.0159279294 0.0558089465 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0687914118 0.0685170591 0.0367961787 + vertex -0.00749908015 0.0159279294 0.0558089465 + vertex 0.0774672851 0.0685170591 0.0374705903 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0982190222 -0.0299757682 -0.0243782718 + vertex 0.0914577693 -0.0299757682 -0.0291455109 + vertex 0.0978162885 -0.0260316301 -0.0280281883 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0982190222 -0.0299757682 -0.0243782718 + vertex 0.0978162885 -0.0260316301 -0.0280281883 + vertex 0.103516497 -0.0270090699 -0.0216966905 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0982190222 -0.0299757682 -0.0243782718 + vertex 0.103516497 -0.0270090699 -0.0216966905 + vertex 0.0995356366 -0.0324124582 -0.0185516402 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0982190222 -0.0299757682 -0.0243782718 + vertex 0.0995356366 -0.0324124582 -0.0185516402 + vertex 0.0900404602 -0.0324124582 -0.0264804885 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0982190222 -0.0299757682 -0.0243782718 + vertex 0.0900404602 -0.0324124582 -0.0264804885 + vertex 0.0914577693 -0.0299757682 -0.0291455109 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0752400309 -0.0340438001 -0.0258183703 + vertex 0.0803903565 -0.0324124582 -0.0296503808 + vertex 0.0900404602 -0.0324124582 -0.0264804885 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0752400309 -0.0340438001 -0.0258183703 + vertex 0.0900404602 -0.0324124582 -0.0264804885 + vertex 0.0857265666 -0.0349042118 -0.0183447208 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0752400309 -0.0340438001 -0.0258183703 + vertex 0.0857265666 -0.0349042118 -0.0183447208 + vertex 0.000245939998 -0.03749571 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0752400309 -0.0340438001 -0.0258183703 + vertex 0.000245939998 -0.03749571 -0.00433559017 + vertex 0.0700432286 -0.0299757682 -0.0324478187 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0752400309 -0.0340438001 -0.0258183703 + vertex 0.0700432286 -0.0299757682 -0.0324478187 + vertex 0.0803903565 -0.0324124582 -0.0296503808 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0855174586 -0.0340438001 0.0240059588 + vertex 0.0919302031 -0.0349042118 0.0133127598 + vertex 0.101448633 -0.0324124582 0.0158288106 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0855174586 -0.0340438001 0.0240059588 + vertex 0.101448633 -0.0324124582 0.0158288106 + vertex 0.0915584415 -0.0324124582 0.0256198701 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0855174586 -0.0340438001 0.0240059588 + vertex 0.0915584415 -0.0324124582 0.0256198701 + vertex 0.0821252167 -0.0324124582 0.0293359999 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0855174586 -0.0340438001 0.0240059588 + vertex 0.0821252167 -0.0324124582 0.0293359999 + vertex 0.0031934001 -0.0360934995 0.0350677706 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0855174586 -0.0340438001 0.0240059588 + vertex 0.0031934001 -0.0360934995 0.0350677706 + vertex 0.0919302031 -0.0349042118 0.0133127598 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.101231761 -0.0340438001 0.00551632978 + vertex 0.105948381 -0.0324124582 0.00114635995 + vertex 0.101448633 -0.0324124582 0.0158288106 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.101231761 -0.0340438001 0.00551632978 + vertex 0.101448633 -0.0324124582 0.0158288106 + vertex 0.0919302031 -0.0349042118 0.0133127598 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.101231761 -0.0340438001 0.00551632978 + vertex 0.0919302031 -0.0349042118 0.0133127598 + vertex 0.100426309 -0.0340438001 -0.00837985892 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.101231761 -0.0340438001 0.00551632978 + vertex 0.100426309 -0.0340438001 -0.00837985892 + vertex 0.105948381 -0.0324124582 0.00114635995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0315571614 -0.00450329017 0.0504255109 + vertex -0.0323872305 -0.00934863929 0.0478770547 + vertex -0.0259928405 -0.00926787872 0.0531324707 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0315571614 -0.00450329017 0.0504255109 + vertex -0.0259928405 -0.00926787872 0.0531324707 + vertex -0.0284056924 -2.98999976e-06 0.0531141758 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0315571614 -0.00450329017 0.0504255109 + vertex -0.0284056924 -2.98999976e-06 0.0531141758 + vertex -0.0333017223 0.00448263017 0.0483099259 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0315571614 -0.00450329017 0.0504255109 + vertex -0.0333017223 0.00448263017 0.0483099259 + vertex -0.0362421609 -2.98999976e-06 0.0422741398 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0315571614 -0.00450329017 0.0504255109 + vertex -0.0362421609 -2.98999976e-06 0.0422741398 + vertex -0.0323872305 -0.00934863929 0.0478770547 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00682321982 -0.0323640518 0.0423777811 + vertex -0.0052550598 -0.0298826378 0.0462919101 + vertex -0.00365119008 -0.0342654809 0.0400792994 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00682321982 -0.0323640518 0.0423777811 + vertex -0.00365119008 -0.0342654809 0.0400792994 + vertex 0.0031934001 -0.0360934995 0.0350677706 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00682321982 -0.0323640518 0.0423777811 + vertex 0.0031934001 -0.0360934995 0.0350677706 + vertex 0.0821252167 -0.0324124582 0.0293359999 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00682321982 -0.0323640518 0.0423777811 + vertex 0.0821252167 -0.0324124582 0.0293359999 + vertex 0.088158451 -0.0299757682 0.03066024 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00682321982 -0.0323640518 0.0423777811 + vertex 0.088158451 -0.0299757682 0.03066024 + vertex 0.0831552669 -0.0270090699 0.0342853293 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00682321982 -0.0323640518 0.0423777811 + vertex 0.0831552669 -0.0270090699 0.0342853293 + vertex -0.0052550598 -0.0298826378 0.0462919101 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106738366 -0.0270090699 -0.0168218594 + vertex 0.103516497 -0.0270090699 -0.0216966905 + vertex 0.108519688 -0.020524988 -0.0177984703 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106738366 -0.0270090699 -0.0168218594 + vertex 0.108519688 -0.020524988 -0.0177984703 + vertex 0.111067727 -0.020524988 -0.0120297801 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106738366 -0.0270090699 -0.0168218594 + vertex 0.111067727 -0.020524988 -0.0120297801 + vertex 0.110610798 -0.0270090699 -0.00551619986 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106738366 -0.0270090699 -0.0168218594 + vertex 0.110610798 -0.0270090699 -0.00551619986 + vertex 0.107203051 -0.0299757682 -0.01070554 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106738366 -0.0270090699 -0.0168218594 + vertex 0.107203051 -0.0299757682 -0.01070554 + vertex 0.0995356366 -0.0324124582 -0.0185516402 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.106738366 -0.0270090699 -0.0168218594 + vertex 0.0995356366 -0.0324124582 -0.0185516402 + vertex 0.103516497 -0.0270090699 -0.0216966905 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0638550892 -0.0270090699 -0.0328699201 + vertex 0.0700432286 -0.0299757682 -0.0324478187 + vertex -0.0131829698 -0.0351024009 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0638550892 -0.0270090699 -0.0328699201 + vertex -0.0131829698 -0.0351024009 -0.00433559017 + vertex -0.0198728126 -0.0317914188 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0638550892 -0.0270090699 -0.0328699201 + vertex -0.0198728126 -0.0317914188 -0.00433559017 + vertex -0.0272942297 -0.025705358 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0638550892 -0.0270090699 -0.0328699201 + vertex -0.0272942297 -0.025705358 -0.00433559017 + vertex 0.0661785528 -0.020524988 -0.0357501283 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0638550892 -0.0270090699 -0.0328699201 + vertex 0.0661785528 -0.020524988 -0.0357501283 + vertex 0.0749302506 -0.0237945598 -0.0363294892 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0638550892 -0.0270090699 -0.0328699201 + vertex 0.0749302506 -0.0237945598 -0.0363294892 + vertex 0.0700432286 -0.0299757682 -0.0324478187 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.107838139 -0.0125472397 0.0198015105 + vertex 0.104445882 -0.020524988 0.0237742197 + vertex 0.110223539 -0.020524988 0.0142562799 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.107838139 -0.0125472397 0.0198015105 + vertex 0.110223539 -0.020524988 0.0142562799 + vertex 0.111749277 -0.0125472397 0.0112933004 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.107838139 -0.0125472397 0.0198015105 + vertex 0.111749277 -0.0125472397 0.0112933004 + vertex 0.110981666 0.0685170591 0.0134925498 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.107838139 -0.0125472397 0.0198015105 + vertex 0.110981666 0.0685170591 0.0134925498 + vertex 0.106929988 0.0685170591 0.0211968999 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.107838139 -0.0125472397 0.0198015105 + vertex 0.106929988 0.0685170591 0.0211968999 + vertex 0.104445882 -0.020524988 0.0237742197 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.01106558 -0.0348527916 0.0336959995 + vertex -0.0100526102 -0.0358805917 0.0271236897 + vertex -0.00257490994 -0.0373048261 0.0230937302 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.01106558 -0.0348527916 0.0336959995 + vertex -0.00257490994 -0.0373048261 0.0230937302 + vertex 0.0031934001 -0.0360934995 0.0350677706 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.01106558 -0.0348527916 0.0336959995 + vertex 0.0031934001 -0.0360934995 0.0350677706 + vertex -0.00365119008 -0.0342654809 0.0400792994 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.01106558 -0.0348527916 0.0336959995 + vertex -0.00365119008 -0.0342654809 0.0400792994 + vertex -0.0166650601 -0.0312114395 0.0398354307 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.01106558 -0.0348527916 0.0336959995 + vertex -0.0194296408 -0.0320190005 0.0252824686 + vertex -0.0100526102 -0.0358805917 0.0271236897 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0351799391 0.0127050402 0.0321900994 + vertex -0.0350603536 0.0132776704 -0.00433559017 + vertex -0.0368752591 0.00675114011 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0351799391 0.0127050402 0.0321900994 + vertex -0.0368752591 0.00675114011 -0.00433559017 + vertex -0.0374943018 -2.98999976e-06 0.0263493992 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0351799391 0.0127050402 0.0321900994 + vertex -0.0374943018 -2.98999976e-06 0.0263493992 + vertex -0.0356301516 0.0089462297 0.0395793691 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0351799391 0.0127050402 0.0321900994 + vertex -0.0356301516 0.0089462297 0.0395793691 + vertex -0.0323168933 0.0176164601 0.0380917601 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0351799391 0.0127050402 0.0321900994 + vertex -0.0323168933 0.0176164601 0.0380917601 + vertex -0.0317330211 0.0199583806 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0351799391 0.0127050402 0.0321900994 + vertex -0.0317330211 0.0199583806 -0.00433559017 + vertex -0.0350603536 0.0132776704 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0208435822 -0.0306314696 0.0326412618 + vertex -0.0272027925 -0.0249565281 0.0357140191 + vertex -0.0272942297 -0.025705358 -0.00433559017 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0208435822 -0.0306314696 0.0326412618 + vertex -0.0272942297 -0.025705358 -0.00433559017 + vertex -0.0194296408 -0.0320190005 0.0252824686 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0208435822 -0.0306314696 0.0326412618 + vertex -0.0194296408 -0.0320190005 0.0252824686 + vertex -0.01106558 -0.0348527916 0.0336959995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0208435822 -0.0306314696 0.0326412618 + vertex -0.01106558 -0.0348527916 0.0336959995 + vertex -0.0166650601 -0.0312114395 0.0398354307 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0216666106 -0.0285831988 0.0394818187 + vertex -0.0166650601 -0.0312114395 0.0398354307 + vertex -0.0214766804 -0.0256980192 0.0453651957 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0216666106 -0.0285831988 0.0394818187 + vertex -0.0214766804 -0.0256980192 0.0453651957 + vertex -0.0287714899 -0.0182978492 0.0461394899 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0216666106 -0.0285831988 0.0394818187 + vertex -0.0287714899 -0.0182978492 0.0461394899 + vertex -0.0272027925 -0.0249565281 0.0357140191 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0216666106 -0.0285831988 0.0394818187 + vertex -0.0272027925 -0.0249565281 0.0357140191 + vertex -0.0208435822 -0.0306314696 0.0326412618 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0216666106 -0.0285831988 0.0394818187 + vertex -0.0208435822 -0.0306314696 0.0326412618 + vertex -0.0166650601 -0.0312114395 0.0398354307 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0152792605 -0.00765276933 0.0567905195 + vertex -0.0259928405 -0.00926787872 0.0531324707 + vertex -0.0105872396 -0.0138195688 0.0561991408 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0152792605 -0.00765276933 0.0567905195 + vertex -0.0105872396 -0.0138195688 0.0561991408 + vertex -0.0129930405 -0.00122166995 0.0576806515 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0152792605 -0.00765276933 0.0567905195 + vertex -0.0129930405 -0.00122166995 0.0576806515 + vertex -0.0284056924 -2.98999976e-06 0.0531141758 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0152792605 -0.00765276933 0.0567905195 + vertex -0.0284056924 -2.98999976e-06 0.0531141758 + vertex -0.0259928405 -0.00926787872 0.0531324707 + endloop + endfacet + +endsolid AssimpScene diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link7.obj b/src/experiments/assets/robots/xarm7/meshes/collision/link7.obj new file mode 100644 index 0000000000000000000000000000000000000000..75e049243a4d0208a10c4f202b484748fbd3c84d --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link7.obj @@ -0,0 +1,573 @@ +# https://github.com/mikedh/trimesh + +o geometry_0 +v 0.00933876 -0.03773103 -0.01387342 0.54509804 0.71372549 0.60000000 +v 0.00920712 -0.03773103 -0.01237800 0.54509804 0.71372549 0.60000000 +v 0.00920712 -0.05200000 -0.01237800 0.54509804 0.71372549 0.60000000 +v 0.00933876 -0.03773103 -0.01411869 0.54509804 0.71372549 0.60000000 +v 0.00881039 -0.03773103 -0.01090454 0.54509804 0.71372549 0.60000000 +v 0.00873543 -0.03773103 -0.01069770 0.54509804 0.71372549 0.60000000 +v 0.00809553 -0.05200000 -0.00932491 0.54509804 0.71372549 0.60000000 +v 0.00920712 -0.05200000 -0.01562144 0.54509804 0.71372549 0.60000000 +v 0.00920712 -0.03773103 -0.01562144 0.54509804 0.71372549 0.60000000 +v 0.00809553 -0.03773103 -0.00932491 0.54509804 0.71372549 0.60000000 +v 0.00795659 -0.03773103 -0.00909245 0.54509804 0.71372549 0.60000000 +v 0.00711010 -0.03773103 -0.00794114 0.54509804 0.71372549 0.60000000 +v 0.00600948 -0.05200000 -0.00683925 0.54509804 0.71372549 0.60000000 +v 0.00809553 -0.05200000 -0.01867452 0.54509804 0.71372549 0.60000000 +v 0.00873908 -0.03773103 -0.01729624 0.54509804 0.71372549 0.60000000 +v 0.00881404 -0.03773103 -0.01708941 0.54509804 0.71372549 0.60000000 +v 0.00701686 -0.03773103 -0.00783132 0.54509804 0.71372549 0.60000000 +v 0.00600948 -0.03773103 -0.00683925 0.54509804 0.71372549 0.60000000 +v 0.00469679 -0.03773103 -0.00592039 0.54509804 0.71372549 0.60000000 +v 0.00464011 -0.03773103 -0.00588745 0.54509804 0.71372549 0.60000000 +v 0.00319761 -0.05200000 -0.00521570 0.54509804 0.71372549 0.60000000 +v 0.00711376 -0.03773103 -0.02005280 0.54509804 0.71372549 0.60000000 +v 0.00809553 -0.03773103 -0.01867452 0.54509804 0.71372549 0.60000000 +v 0.00600948 -0.05200000 -0.02116019 0.54509804 0.71372549 0.60000000 +v 0.00702051 -0.03773103 -0.02016446 0.54509804 0.71372549 0.60000000 +v 0.00319761 -0.03773103 -0.00521570 0.54509804 0.71372549 0.60000000 +v 0.00160336 -0.03773103 -0.00479105 0.54509804 0.71372549 0.60000000 +v 0.00159605 -0.03773103 -0.00478922 0.54509804 0.71372549 0.60000000 +v -0.00000003 -0.05200000 -0.00465194 0.54509804 0.71372549 0.60000000 +v 0.00319761 -0.05200000 -0.02278374 0.54509804 0.71372549 0.60000000 +v 0.00470227 -0.03773103 -0.02207538 0.54509804 0.71372549 0.60000000 +v 0.00600948 -0.03773103 -0.02116019 0.54509804 0.71372549 0.60000000 +v -0.00000003 -0.03773103 -0.00465194 0.54509804 0.71372549 0.60000000 +v -0.00162719 -0.03773103 -0.00479471 0.54509804 0.71372549 0.60000000 +v -0.00319767 -0.05200000 -0.00521570 0.54509804 0.71372549 0.60000000 +v -0.00000003 -0.05200000 -0.02334750 0.54509804 0.71372549 0.60000000 +v 0.00160336 -0.03773103 -0.02320839 0.54509804 0.71372549 0.60000000 +v 0.00319761 -0.03773103 -0.02278374 0.54509804 0.71372549 0.60000000 +v -0.00319767 -0.03773103 -0.00521570 0.54509804 0.71372549 0.60000000 +v -0.00481751 -0.03773103 -0.00599178 0.54509804 0.71372549 0.60000000 +v -0.00600954 -0.05200000 -0.00683925 0.54509804 0.71372549 0.60000000 +v -0.00162353 -0.03773103 -0.02320656 0.54509804 0.71372549 0.60000000 +v -0.00000003 -0.03773103 -0.02334750 0.54509804 0.71372549 0.60000000 +v -0.00319767 -0.05200000 -0.02278374 0.54509804 0.71372549 0.60000000 +v -0.00600954 -0.03773103 -0.00683925 0.54509804 0.71372549 0.60000000 +v -0.00710467 -0.03773103 -0.00793382 0.54509804 0.71372549 0.60000000 +v -0.00720157 -0.03773103 -0.00804913 0.54509804 0.71372549 0.60000000 +v -0.00809559 -0.05200000 -0.00932491 0.54509804 0.71372549 0.60000000 +v -0.00163267 -0.03773103 -0.02320473 0.54509804 0.71372549 0.60000000 +v -0.00319767 -0.03773103 -0.02278374 0.54509804 0.71372549 0.60000000 +v -0.00600954 -0.05200000 -0.02116019 0.54509804 0.71372549 0.60000000 +v -0.00475901 -0.03773103 -0.02204243 0.54509804 0.71372549 0.60000000 +v -0.00809559 -0.03773103 -0.00932491 0.54509804 0.71372549 0.60000000 +v -0.00873549 -0.03773103 -0.01069587 0.54509804 0.71372549 0.60000000 +v -0.00920718 -0.05200000 -0.01237800 0.54509804 0.71372549 0.60000000 +v -0.00600954 -0.03773103 -0.02116019 0.54509804 0.71372549 0.60000000 +v -0.00481751 -0.03773103 -0.02200765 0.54509804 0.71372549 0.60000000 +v -0.00809559 -0.05200000 -0.01867452 0.54509804 0.71372549 0.60000000 +v -0.00720706 -0.03773103 -0.01994481 0.54509804 0.71372549 0.60000000 +v -0.00711016 -0.03773103 -0.02005829 0.54509804 0.71372549 0.60000000 +v -0.00881045 -0.03773103 -0.01090270 0.54509804 0.71372549 0.60000000 +v -0.00920718 -0.03773103 -0.01237800 0.54509804 0.71372549 0.60000000 +v -0.00933881 -0.03773103 -0.01387159 0.54509804 0.71372549 0.60000000 +v -0.00920718 -0.05200000 -0.01562144 0.54509804 0.71372549 0.60000000 +v -0.00873914 -0.03773103 -0.01729441 0.54509804 0.71372549 0.60000000 +v -0.00809559 -0.03773103 -0.01867452 0.54509804 0.71372549 0.60000000 +v -0.00933881 -0.03773103 -0.01411686 0.54509804 0.71372549 0.60000000 +v -0.00920718 -0.03773103 -0.01562144 0.54509804 0.71372549 0.60000000 +v -0.00881410 -0.03773103 -0.01708758 0.54509804 0.71372549 0.60000000 +f 1 2 3 +f 1 3 8 +f 1 8 4 +f 1 4 9 +f 1 9 16 +f 1 16 15 +f 1 15 23 +f 1 23 22 +f 1 22 25 +f 1 25 32 +f 1 32 31 +f 1 31 38 +f 1 38 37 +f 1 37 43 +f 1 43 42 +f 1 42 49 +f 1 49 50 +f 1 50 52 +f 1 52 57 +f 1 57 56 +f 1 56 60 +f 1 60 59 +f 1 59 66 +f 1 66 65 +f 1 65 69 +f 1 69 68 +f 1 68 67 +f 1 67 63 +f 1 63 62 +f 1 62 61 +f 1 61 54 +f 1 54 53 +f 1 53 47 +f 1 47 46 +f 1 46 45 +f 1 45 40 +f 1 40 39 +f 1 39 34 +f 1 34 33 +f 1 33 28 +f 1 28 27 +f 1 27 26 +f 1 26 20 +f 1 20 19 +f 1 19 18 +f 1 18 17 +f 1 17 12 +f 1 12 11 +f 1 11 10 +f 1 10 6 +f 1 6 5 +f 1 5 2 +f 2 5 3 +f 3 5 6 +f 3 6 7 +f 3 7 13 +f 3 13 21 +f 3 21 29 +f 3 29 35 +f 3 35 41 +f 3 41 48 +f 3 48 55 +f 3 55 64 +f 3 64 58 +f 3 58 51 +f 3 51 44 +f 3 44 36 +f 3 36 30 +f 3 30 24 +f 3 24 14 +f 3 14 8 +f 4 8 9 +f 6 10 7 +f 7 10 11 +f 7 11 12 +f 7 12 13 +f 8 14 15 +f 8 15 16 +f 8 16 9 +f 12 17 13 +f 13 17 18 +f 13 18 19 +f 13 19 20 +f 13 20 21 +f 14 22 23 +f 14 23 15 +f 14 24 25 +f 14 25 22 +f 20 26 21 +f 21 26 27 +f 21 27 28 +f 21 28 29 +f 24 30 31 +f 24 31 32 +f 24 32 25 +f 28 33 29 +f 29 33 34 +f 29 34 35 +f 30 36 37 +f 30 37 38 +f 30 38 31 +f 34 39 35 +f 35 39 40 +f 35 40 41 +f 36 42 43 +f 36 43 37 +f 36 44 42 +f 40 45 41 +f 41 45 46 +f 41 46 47 +f 41 47 48 +f 42 44 49 +f 44 50 49 +f 44 51 52 +f 44 52 50 +f 47 53 48 +f 48 53 54 +f 48 54 55 +f 51 56 57 +f 51 57 52 +f 51 58 59 +f 51 59 60 +f 51 60 56 +f 54 61 55 +f 55 61 62 +f 55 62 63 +f 55 63 67 +f 55 67 64 +f 58 64 65 +f 58 65 66 +f 58 66 59 +f 64 67 68 +f 64 68 69 +f 64 69 65 + +o geometry_1 +v -0.03759483 -0.00319934 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.03759483 -0.00319934 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.03759483 0.00319460 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.03651095 -0.00950468 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.03759483 0.00319460 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.03651095 -0.00950468 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.03651095 0.00950732 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.03438007 -0.01553683 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.03651095 0.00950732 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.03438007 -0.01553683 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.03438007 0.01553947 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.03125379 -0.02112599 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.03438007 0.01553947 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.03125379 -0.02112599 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.03125379 0.02112124 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.02723535 -0.02610233 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.03125379 0.02112124 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.02723535 -0.02610233 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.02723535 0.02610497 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.02243533 -0.03033296 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.02723535 0.02610497 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.02243533 -0.03033296 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.02243533 0.03032822 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.01698647 -0.03368498 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.02243533 0.03032822 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.01698647 -0.03368498 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.01698647 0.03368762 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.01104359 -0.03606979 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.00920027 -0.03773103 -0.01562226 0.54117647 0.42352941 0.64313725 +v -0.00933299 -0.03773103 -0.01411580 0.54117647 0.42352941 0.64313725 +v -0.01698647 0.03368762 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.00933299 -0.03773103 -0.01387001 0.54117647 0.42352941 0.64313725 +v -0.00920027 -0.03773103 -0.01237676 0.54117647 0.42352941 0.64313725 +v -0.01104359 -0.03606979 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.01104359 0.03607243 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.00479104 -0.03742093 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.00809427 -0.03773103 -0.01867218 0.54117647 0.42352941 0.64313725 +v -0.00873575 -0.03773103 -0.01729258 0.54117647 0.42352941 0.64313725 +v -0.00880948 -0.03773103 -0.01708643 0.54117647 0.42352941 0.64313725 +v -0.01104359 0.03607243 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.00880948 -0.03773103 -0.01090466 0.54117647 0.42352941 0.64313725 +v -0.00873575 -0.03773103 -0.01069587 0.54117647 0.42352941 0.64313725 +v -0.00809427 -0.03773103 -0.00932684 0.54117647 0.42352941 0.64313725 +v -0.00479104 -0.03742093 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.00479104 0.03742357 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.00159423 -0.03769411 -0.02700000 0.54117647 0.42352941 0.64313725 +v -0.00481316 -0.03773103 -0.02200754 0.54117647 0.42352941 0.64313725 +v -0.00600763 -0.03773103 -0.02116181 0.54117647 0.42352941 0.64313725 +v -0.00710625 -0.03773103 -0.02005707 0.54117647 0.42352941 0.64313725 +v -0.00720211 -0.03773103 -0.01994342 0.54117647 0.42352941 0.64313725 +v -0.00479104 0.03742357 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.00720211 -0.03773103 -0.00804767 0.54117647 0.42352941 0.64313725 +v -0.00710625 -0.03773103 -0.00793403 0.54117647 0.42352941 0.64313725 +v -0.00600763 -0.03773103 -0.00683986 0.54117647 0.42352941 0.64313725 +v 0.00159423 -0.03769411 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.00159423 0.03769675 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.00794264 -0.03688195 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.00702098 -0.03773103 -0.02016543 0.54117647 0.42352941 0.64313725 +v 0.00600346 -0.03773103 -0.02116181 0.54117647 0.42352941 0.64313725 +v 0.00469839 -0.03773103 -0.02207625 0.54117647 0.42352941 0.64313725 +v 0.00319424 -0.03773103 -0.02278455 0.54117647 0.42352941 0.64313725 +v 0.00160161 -0.03773103 -0.02321006 0.54117647 0.42352941 0.64313725 +v 0.00000160 -0.03773103 -0.02334750 0.54117647 0.42352941 0.64313725 +v -0.00162790 -0.03773103 -0.02320478 0.54117647 0.42352941 0.64313725 +v -0.00319103 -0.03773103 -0.02278455 0.54117647 0.42352941 0.64313725 +v -0.00475417 -0.03773103 -0.02204190 0.54117647 0.42352941 0.64313725 +v 0.00159423 0.03769675 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.00481316 -0.03773103 -0.00599148 0.54117647 0.42352941 0.64313725 +v 0.00710946 -0.03773103 -0.00794195 0.54117647 0.42352941 0.64313725 +v 0.00795001 -0.03773103 -0.00909162 0.54117647 0.42352941 0.64313725 +v 0.00794264 -0.03688195 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.00319103 -0.03773103 -0.00521447 0.54117647 0.42352941 0.64313725 +v -0.00162052 -0.03773103 -0.00479424 0.54117647 0.42352941 0.64313725 +v 0.00000160 -0.03773103 -0.00465153 0.54117647 0.42352941 0.64313725 +v 0.00159423 -0.03773103 -0.00478896 0.54117647 0.42352941 0.64313725 +v 0.00319424 -0.03773103 -0.00521447 0.54117647 0.42352941 0.64313725 +v 0.00463940 -0.03773103 -0.00588841 0.54117647 0.42352941 0.64313725 +v 0.00469102 -0.03773103 -0.00592013 0.54117647 0.42352941 0.64313725 +v 0.00600346 -0.03773103 -0.00683986 0.54117647 0.42352941 0.64313725 +v 0.00701361 -0.03773103 -0.00783095 0.54117647 0.42352941 0.64313725 +v 0.00794264 0.03687721 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.00873896 -0.03773103 -0.01729522 0.54117647 0.42352941 0.64313725 +v 0.00809011 -0.03773103 -0.01867218 0.54117647 0.42352941 0.64313725 +v 0.00710946 -0.03773103 -0.02005443 0.54117647 0.42352941 0.64313725 +v 0.01406248 -0.03500659 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.00794264 0.03687721 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.00809011 -0.03773103 -0.00932684 0.54117647 0.42352941 0.64313725 +v 0.00873158 -0.03773103 -0.01069851 0.54117647 0.42352941 0.64313725 +v 0.00880532 -0.03773103 -0.01090466 0.54117647 0.42352941 0.64313725 +v 0.01406248 -0.03500659 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.01406248 0.03500923 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.00881269 -0.03773103 -0.01708908 0.54117647 0.42352941 0.64313725 +v 0.01977678 -0.03212710 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.00933619 -0.03773103 -0.01411844 0.54117647 0.42352941 0.64313725 +v 0.00920347 -0.03773103 -0.01562226 0.54117647 0.42352941 0.64313725 +v 0.01406248 0.03500923 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.00920347 -0.03773103 -0.01237676 0.54117647 0.42352941 0.64313725 +v 0.01977678 -0.03212710 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.00933619 -0.03773103 -0.01387001 0.54117647 0.42352941 0.64313725 +v 0.01977678 0.03212236 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.02492334 -0.02831732 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.01977678 0.03212236 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.02492334 -0.02831732 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.02492334 0.02831996 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.02935469 -0.02370276 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.02492334 0.02831996 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.02935469 -0.02370276 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.02935469 0.02369802 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.03293811 -0.01839417 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.02935469 0.02369802 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.03293811 -0.01839417 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.03293811 0.01839681 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.03557038 -0.01256874 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.03293811 0.01839681 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.03557038 -0.01256874 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.03557038 0.01256400 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.03718513 -0.00637416 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.03557038 0.01256400 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.03718513 -0.00637416 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.03718513 0.00636942 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.03773075 -0.00000237 -0.02700000 0.54117647 0.42352941 0.64313725 +v 0.03718513 0.00636942 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.03773075 -0.00000237 -0.00000000 0.54117647 0.42352941 0.64313725 +f 70 71 74 +f 70 74 72 +f 70 72 76 +f 70 76 80 +f 70 80 84 +f 70 84 88 +f 70 88 92 +f 70 92 96 +f 70 96 104 +f 70 104 114 +f 70 114 125 +f 70 125 150 +f 70 150 160 +f 70 160 169 +f 70 169 173 +f 70 173 177 +f 70 177 181 +f 70 181 185 +f 70 185 189 +f 70 189 190 +f 70 190 186 +f 70 186 182 +f 70 182 178 +f 70 178 174 +f 70 174 170 +f 70 170 162 +f 70 162 154 +f 70 154 126 +f 70 126 115 +f 70 115 105 +f 70 105 97 +f 70 97 93 +f 70 93 89 +f 70 89 85 +f 70 85 81 +f 70 81 77 +f 70 77 73 +f 70 73 75 +f 70 75 71 +f 71 75 79 +f 71 79 83 +f 71 83 87 +f 71 87 91 +f 71 91 95 +f 71 95 103 +f 71 103 113 +f 71 113 124 +f 71 124 140 +f 71 140 159 +f 71 159 167 +f 71 167 172 +f 71 172 176 +f 71 176 180 +f 71 180 184 +f 71 184 188 +f 71 188 192 +f 71 192 191 +f 71 191 187 +f 71 187 183 +f 71 183 179 +f 71 179 175 +f 71 175 171 +f 71 171 165 +f 71 165 155 +f 71 155 136 +f 71 136 120 +f 71 120 109 +f 71 109 100 +f 71 100 94 +f 71 94 90 +f 71 90 86 +f 71 86 82 +f 71 82 78 +f 71 78 74 +f 72 74 78 +f 72 78 76 +f 73 77 79 +f 73 79 75 +f 76 78 82 +f 76 82 80 +f 77 81 83 +f 77 83 79 +f 80 82 86 +f 80 86 84 +f 81 85 87 +f 81 87 83 +f 84 86 90 +f 84 90 88 +f 85 89 91 +f 85 91 87 +f 88 90 94 +f 88 94 92 +f 89 93 95 +f 89 95 91 +f 92 94 100 +f 92 100 96 +f 93 97 98 +f 93 98 99 +f 93 99 101 +f 93 101 95 +f 95 101 102 +f 95 102 103 +f 96 100 109 +f 96 109 104 +f 97 105 106 +f 97 106 107 +f 97 107 108 +f 97 108 98 +f 98 108 107 +f 98 107 106 +f 98 106 119 +f 98 119 118 +f 98 118 117 +f 98 117 116 +f 98 116 135 +f 98 135 134 +f 98 134 133 +f 98 133 132 +f 98 132 131 +f 98 131 130 +f 98 130 129 +f 98 129 128 +f 98 128 127 +f 98 127 153 +f 98 153 152 +f 98 152 151 +f 98 151 161 +f 98 161 164 +f 98 164 163 +f 98 163 168 +f 98 168 166 +f 98 166 158 +f 98 158 157 +f 98 157 156 +f 98 156 139 +f 98 139 138 +f 98 138 149 +f 98 149 148 +f 98 148 147 +f 98 147 146 +f 98 146 145 +f 98 145 144 +f 98 144 143 +f 98 143 142 +f 98 142 141 +f 98 141 137 +f 98 137 123 +f 98 123 122 +f 98 122 121 +f 98 121 112 +f 98 112 111 +f 98 111 110 +f 98 110 102 +f 98 102 101 +f 98 101 99 +f 102 110 103 +f 103 110 111 +f 103 111 112 +f 103 112 113 +f 104 109 120 +f 104 120 114 +f 105 115 116 +f 105 116 117 +f 105 117 118 +f 105 118 119 +f 105 119 106 +f 112 121 113 +f 113 121 122 +f 113 122 123 +f 113 123 124 +f 114 120 136 +f 114 136 125 +f 115 126 127 +f 115 127 128 +f 115 128 129 +f 115 129 130 +f 115 130 131 +f 115 131 132 +f 115 132 133 +f 115 133 134 +f 115 134 135 +f 115 135 116 +f 123 137 124 +f 124 138 139 +f 124 139 140 +f 124 137 141 +f 124 141 142 +f 124 142 143 +f 124 143 144 +f 124 144 145 +f 124 145 146 +f 124 146 147 +f 124 147 148 +f 124 148 149 +f 124 149 138 +f 125 136 155 +f 125 155 150 +f 126 151 152 +f 126 152 153 +f 126 153 127 +f 126 154 151 +f 139 156 140 +f 140 156 157 +f 140 157 158 +f 140 158 159 +f 150 155 165 +f 150 165 160 +f 151 154 161 +f 154 162 163 +f 154 163 164 +f 154 164 161 +f 158 166 159 +f 159 166 168 +f 159 168 167 +f 160 165 171 +f 160 171 169 +f 162 170 172 +f 162 172 167 +f 162 167 168 +f 162 168 163 +f 169 171 175 +f 169 175 173 +f 170 174 176 +f 170 176 172 +f 173 175 179 +f 173 179 177 +f 174 178 180 +f 174 180 176 +f 177 179 183 +f 177 183 181 +f 178 182 184 +f 178 184 180 +f 181 183 187 +f 181 187 185 +f 182 186 188 +f 182 188 184 +f 185 187 191 +f 185 191 189 +f 186 190 192 +f 186 192 188 +f 189 191 192 +f 189 192 190 \ No newline at end of file diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link7.obj.convex.stl b/src/experiments/assets/robots/xarm7/meshes/collision/link7.obj.convex.stl new file mode 100644 index 0000000000000000000000000000000000000000..ecc576942bf12c987fbc468939d2a7c832ab52f4 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link7.obj.convex.stl @@ -0,0 +1,786 @@ +solid AssimpScene + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex -0.0343800709 -0.0155368298 -0.0270000007 + vertex -0.0375948288 -0.00319934008 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex -0.0375948288 -0.00319934008 -0.0270000007 + vertex -0.0375948288 0.00319459988 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex -0.0375948288 0.00319459988 -0.0270000007 + vertex -0.0343800709 0.0155394701 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex -0.0343800709 0.0155394701 -0.0270000007 + vertex -0.0312537886 0.0211212393 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex -0.0312537886 0.0211212393 -0.0270000007 + vertex -0.0272353478 0.0261049718 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex -0.0272353478 0.0261049718 -0.0270000007 + vertex -0.0169864707 0.0336876214 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex -0.0169864707 0.0336876214 -0.0270000007 + vertex -0.00479103997 0.0374235697 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex -0.00479103997 0.0374235697 -0.0270000007 + vertex 0.00159422983 0.037696749 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex 0.00159422983 0.037696749 -0.0270000007 + vertex 0.0140624801 0.0350092314 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex 0.0140624801 0.0350092314 -0.0270000007 + vertex 0.0249233376 0.0283199605 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex 0.0249233376 0.0283199605 -0.0270000007 + vertex 0.0293546896 0.0236980207 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex 0.0293546896 0.0236980207 -0.0270000007 + vertex 0.0329381116 0.0183968097 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex 0.0329381116 0.0183968097 -0.0270000007 + vertex 0.0371851251 0.00636941986 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex 0.0371851251 0.00636941986 -0.0270000007 + vertex 0.0371851251 -0.00637415983 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex 0.0371851251 -0.00637415983 -0.0270000007 + vertex 0.0329381116 -0.0183941703 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex 0.0329381116 -0.0183941703 -0.0270000007 + vertex 0.0293546896 -0.0237027593 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex 0.0293546896 -0.0237027593 -0.0270000007 + vertex 0.0140624801 -0.0350065902 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex 0.0140624801 -0.0350065902 -0.0270000007 + vertex -0.00479103997 -0.0374209285 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex -0.00479103997 -0.0374209285 -0.0270000007 + vertex -0.0224353299 -0.0303329602 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0343800709 0.0155394701 -0 + vertex -0.0272353478 0.0261049718 -0 + vertex -0.0312537886 0.0211212393 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0371851251 0.00636941986 -0.0270000007 + vertex 0.0355703756 0.0125639997 -0 + vertex 0.0377307497 -2.36999995e-06 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0371851251 0.00636941986 -0.0270000007 + vertex 0.0377307497 -2.36999995e-06 -0 + vertex 0.0371851251 -0.00637415983 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00794264022 0.0368772112 -0 + vertex 0.0197767802 0.0321223587 -0 + vertex 0.0140624801 0.0350092314 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00794264022 0.0368772112 -0 + vertex 0.0140624801 0.0350092314 -0.0270000007 + vertex 0.00159422983 0.037696749 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00794264022 0.0368772112 -0 + vertex 0.00159422983 0.037696749 -0.0270000007 + vertex -0.00479103997 0.0374235697 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0224353299 -0.0303329602 -0.0270000007 + vertex -2.99999989e-08 -0.0520000011 -0.0233475007 + vertex -0.00600954005 -0.0520000011 -0.0211601909 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0224353299 -0.0303329602 -0.0270000007 + vertex -0.00479103997 -0.0374209285 -0.0270000007 + vertex -2.99999989e-08 -0.0520000011 -0.0233475007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0197767802 -0.032127101 -0 + vertex 0.00794264022 -0.0368819498 -0 + vertex -2.99999989e-08 -0.0520000011 -0.00465193996 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0197767802 -0.032127101 -0 + vertex -2.99999989e-08 -0.0520000011 -0.00465193996 + vertex 0.00600947998 -0.0520000011 -0.00683925021 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00600954005 -0.0520000011 -0.00683925021 + vertex -2.99999989e-08 -0.0520000011 -0.00465193996 + vertex -0.0224353299 -0.0303329602 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0140624801 -0.0350065902 -0.0270000007 + vertex -2.99999989e-08 -0.0520000011 -0.0233475007 + vertex -0.00479103997 -0.0374209285 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0293546896 -0.0237027593 -0.0270000007 + vertex 0.00600947998 -0.0520000011 -0.0211601909 + vertex -2.99999989e-08 -0.0520000011 -0.0233475007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0293546896 -0.0237027593 -0.0270000007 + vertex -2.99999989e-08 -0.0520000011 -0.0233475007 + vertex 0.0140624801 -0.0350065902 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0343800709 0.0155394701 -0.0270000007 + vertex -0.0343800709 0.0155394701 -0 + vertex -0.0312537886 0.0211212393 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0272353478 0.0261049718 -0.0270000007 + vertex -0.0272353478 0.0261049718 -0 + vertex -0.0169864707 0.0336876214 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0272353478 0.0261049718 -0.0270000007 + vertex -0.0169864707 0.0336876214 -0 + vertex -0.0169864707 0.0336876214 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0272353478 0.0261049718 -0.0270000007 + vertex -0.0312537886 0.0211212393 -0.0270000007 + vertex -0.0272353478 0.0261049718 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0329381116 0.0183968097 -0.0270000007 + vertex 0.0355703756 0.0125639997 -0 + vertex 0.0371851251 0.00636941986 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0329381116 0.0183968097 -0.0270000007 + vertex 0.0293546896 0.0236980207 -0.0270000007 + vertex 0.0293546896 0.0236980207 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0329381116 0.0183968097 -0.0270000007 + vertex 0.0293546896 0.0236980207 -0 + vertex 0.0355703756 0.0125639997 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0375948288 -0.00319934008 -0.0270000007 + vertex -0.0343800709 -0.0155368298 -0.0270000007 + vertex -0.0343800709 -0.0155368298 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0375948288 -0.00319934008 -0.0270000007 + vertex -0.0343800709 -0.0155368298 -0 + vertex -0.0375948288 -0.00319934008 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0375948288 0.00319459988 -0 + vertex -0.0343800709 0.0155394701 -0 + vertex -0.0343800709 0.0155394701 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0375948288 0.00319459988 -0 + vertex -0.0343800709 0.0155394701 -0.0270000007 + vertex -0.0375948288 0.00319459988 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0375948288 0.00319459988 -0 + vertex -0.0375948288 0.00319459988 -0.0270000007 + vertex -0.0375948288 -0.00319934008 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0375948288 0.00319459988 -0 + vertex -0.0375948288 -0.00319934008 -0.0270000007 + vertex -0.0375948288 -0.00319934008 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0249233376 0.0283199605 -0.0270000007 + vertex 0.0140624801 0.0350092314 -0.0270000007 + vertex 0.0197767802 0.0321223587 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0249233376 0.0283199605 -0.0270000007 + vertex 0.0197767802 0.0321223587 -0 + vertex 0.0293546896 0.0236980207 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0249233376 0.0283199605 -0.0270000007 + vertex 0.0293546896 0.0236980207 -0 + vertex 0.0293546896 0.0236980207 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 0.0374235697 -0.0270000007 + vertex -0.0169864707 0.0336876214 -0.0270000007 + vertex -0.0169864707 0.0336876214 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 0.0374235697 -0.0270000007 + vertex -0.0169864707 0.0336876214 -0 + vertex -0.00479103997 0.0374235697 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 0.0374235697 -0.0270000007 + vertex -0.00479103997 0.0374235697 -0 + vertex 0.00159422983 0.037696749 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0371851251 -0.00637415983 -0 + vertex 0.0371851251 -0.00637415983 -0.0270000007 + vertex 0.0377307497 -2.36999995e-06 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0371851251 -0.00637415983 -0 + vertex 0.0329381116 -0.0183941703 -0 + vertex 0.0329381116 -0.0183941703 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0371851251 -0.00637415983 -0 + vertex 0.0329381116 -0.0183941703 -0.0270000007 + vertex 0.0371851251 -0.00637415983 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0 + vertex -0.0343800709 -0.0155368298 -0 + vertex -0.0343800709 -0.0155368298 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0 + vertex -0.0343800709 -0.0155368298 -0.0270000007 + vertex -0.0312537886 -0.0211259909 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0 + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex -0.00920717977 -0.0520000011 -0.0123780007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00920717977 -0.0520000011 -0.0123780007 + vertex -0.00600954005 -0.0520000011 -0.00683925021 + vertex -0.0224353299 -0.0303329602 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00920717977 -0.0520000011 -0.0123780007 + vertex -0.0224353299 -0.0303329602 -0 + vertex -0.0312537886 -0.0211259909 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0293546896 -0.0237027593 -0 + vertex 0.0197767802 -0.032127101 -0 + vertex 0.00600947998 -0.0520000011 -0.00683925021 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0293546896 -0.0237027593 -0 + vertex 0.00600947998 -0.0520000011 -0.00683925021 + vertex 0.00920711923 -0.0520000011 -0.0123780007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00920711923 -0.0520000011 -0.0123780007 + vertex 0.0293546896 -0.0237027593 -0.0270000007 + vertex 0.0329381116 -0.0183941703 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00920711923 -0.0520000011 -0.0123780007 + vertex 0.0329381116 -0.0183941703 -0.0270000007 + vertex 0.0329381116 -0.0183941703 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00920711923 -0.0520000011 -0.0123780007 + vertex 0.0329381116 -0.0183941703 -0 + vertex 0.0293546896 -0.0237027593 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex -0.0224353299 -0.0303329602 -0 + vertex -2.99999989e-08 -0.0520000011 -0.00465193996 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex -2.99999989e-08 -0.0520000011 -0.00465193996 + vertex 0.00794264022 -0.0368819498 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex 0.00794264022 -0.0368819498 -0 + vertex 0.0197767802 -0.032127101 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex 0.0197767802 -0.032127101 -0 + vertex 0.0293546896 -0.0237027593 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex 0.0293546896 -0.0237027593 -0 + vertex 0.0329381116 -0.0183941703 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex 0.0329381116 -0.0183941703 -0 + vertex 0.0371851251 -0.00637415983 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex 0.0371851251 -0.00637415983 -0 + vertex 0.0377307497 -2.36999995e-06 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex 0.0377307497 -2.36999995e-06 -0 + vertex 0.0355703756 0.0125639997 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex 0.0355703756 0.0125639997 -0 + vertex 0.0293546896 0.0236980207 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex 0.0293546896 0.0236980207 -0 + vertex 0.0197767802 0.0321223587 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex 0.0197767802 0.0321223587 -0 + vertex 0.00794264022 0.0368772112 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex 0.00794264022 0.0368772112 -0 + vertex -0.00479103997 0.0374235697 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex -0.00479103997 0.0374235697 -0 + vertex -0.0169864707 0.0336876214 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex -0.0169864707 0.0336876214 -0 + vertex -0.0272353478 0.0261049718 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex -0.0272353478 0.0261049718 -0 + vertex -0.0343800709 0.0155394701 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex -0.0343800709 0.0155394701 -0 + vertex -0.0375948288 0.00319459988 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex -0.0375948288 0.00319459988 -0 + vertex -0.0375948288 -0.00319934008 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex -0.0375948288 -0.00319934008 -0 + vertex -0.0343800709 -0.0155368298 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex -0.0343800709 -0.0155368298 -0 + vertex -0.0312537886 -0.0211259909 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00479103997 -0.0374209285 -0 + vertex -0.0312537886 -0.0211259909 -0 + vertex -0.0224353299 -0.0303329602 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0080955904 -0.0520000011 -0.0186745208 + vertex -0.00920717977 -0.0520000011 -0.0123780007 + vertex -0.0312537886 -0.0211259909 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex -0.0224353299 -0.0303329602 -0.0270000007 + vertex -0.00600954005 -0.0520000011 -0.0211601909 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0312537886 -0.0211259909 -0.0270000007 + vertex -0.00600954005 -0.0520000011 -0.0211601909 + vertex -0.0080955904 -0.0520000011 -0.0186745208 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00809552893 -0.0520000011 -0.0186745208 + vertex 0.00920711923 -0.0520000011 -0.0123780007 + vertex 0.00600947998 -0.0520000011 -0.00683925021 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00809552893 -0.0520000011 -0.0186745208 + vertex 0.00600947998 -0.0520000011 -0.00683925021 + vertex -2.99999989e-08 -0.0520000011 -0.00465193996 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00809552893 -0.0520000011 -0.0186745208 + vertex -2.99999989e-08 -0.0520000011 -0.00465193996 + vertex -0.00600954005 -0.0520000011 -0.00683925021 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00809552893 -0.0520000011 -0.0186745208 + vertex -0.00600954005 -0.0520000011 -0.00683925021 + vertex -0.00920717977 -0.0520000011 -0.0123780007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00809552893 -0.0520000011 -0.0186745208 + vertex -0.00920717977 -0.0520000011 -0.0123780007 + vertex -0.0080955904 -0.0520000011 -0.0186745208 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00809552893 -0.0520000011 -0.0186745208 + vertex -0.0080955904 -0.0520000011 -0.0186745208 + vertex -0.00600954005 -0.0520000011 -0.0211601909 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00809552893 -0.0520000011 -0.0186745208 + vertex -0.00600954005 -0.0520000011 -0.0211601909 + vertex -2.99999989e-08 -0.0520000011 -0.0233475007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00809552893 -0.0520000011 -0.0186745208 + vertex -2.99999989e-08 -0.0520000011 -0.0233475007 + vertex 0.00600947998 -0.0520000011 -0.0211601909 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00809552893 -0.0520000011 -0.0186745208 + vertex 0.00600947998 -0.0520000011 -0.0211601909 + vertex 0.0293546896 -0.0237027593 -0.0270000007 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00809552893 -0.0520000011 -0.0186745208 + vertex 0.0293546896 -0.0237027593 -0.0270000007 + vertex 0.00920711923 -0.0520000011 -0.0123780007 + endloop + endfacet + +endsolid AssimpScene diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link_base.obj b/src/experiments/assets/robots/xarm7/meshes/collision/link_base.obj new file mode 100644 index 0000000000000000000000000000000000000000..1b5819f498e1e2bf38d965ba68ee1a047ebd22a5 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link_base.obj @@ -0,0 +1,2472 @@ +# https://github.com/mikedh/trimesh + +o geometry_0 +v 0.04749778 0.00045564 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.04619597 0.01100967 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.04640054 -0.01011699 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.04694916 -0.00719719 0.14239997 0.54509804 0.71372549 0.60000000 +v 0.04749778 0.00045564 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.04258807 0.02101508 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.04619597 0.01100967 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.04344355 0.01864390 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.04679108 -0.00813636 0.14377295 0.54509804 0.71372549 0.60000000 +v 0.04687477 -0.00764353 0.14335132 0.54509804 0.71372549 0.60000000 +v 0.04298791 -0.02018748 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.04477326 -0.01585429 0.14477836 0.54509804 0.71372549 0.60000000 +v 0.04558225 -0.01333434 0.14514593 0.54509804 0.71372549 0.60000000 +v 0.04631685 -0.01049823 0.14477836 0.54509804 0.71372549 0.60000000 +v 0.04640054 -0.01011699 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.04650282 -0.00959626 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.04734901 -0.00155288 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.03684147 0.02996973 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.04258807 0.02101508 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.04042147 0.02439980 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.04679108 -0.00813636 0.14101618 0.54509804 0.71372549 0.60000000 +v 0.03741799 -0.02925372 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.04051446 -0.02421382 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.04298791 -0.02018748 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.04389918 -0.01813247 0.14239997 0.54509804 0.71372549 0.60000000 +v 0.04414095 -0.01753735 0.14377295 0.54509804 0.71372549 0.60000000 +v 0.04477326 -0.01585429 0.14001077 0.54509804 0.71372549 0.60000000 +v 0.04558225 -0.01333434 0.13964321 0.54509804 0.71372549 0.60000000 +v 0.04631685 -0.01049823 0.14001077 0.54509804 0.71372549 0.60000000 +v 0.04346214 -0.01904374 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.02925373 0.03741799 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.03684147 0.02996973 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.02996972 -0.03684146 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.03741799 -0.02925372 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.04322038 -0.01965746 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.04414095 -0.01753735 0.14101618 0.54509804 0.71372549 0.60000000 +v 0.04328547 -0.01949938 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.02018749 0.04298791 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.02925373 0.03741799 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.02101507 -0.04258806 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.02784032 -0.03820837 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.02996972 -0.03684146 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.01011699 0.04640053 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.02018749 0.04298791 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.01250676 0.04559155 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.01100967 -0.04619596 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.01864390 -0.04344354 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.02101507 -0.04258806 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.00045564 0.04749778 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.01011699 0.04640053 0.04435641 0.54509804 0.71372549 0.60000000 +v 0.00045564 -0.04749778 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.01100967 -0.04619596 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.01100967 0.04619597 0.15480001 0.54509804 0.71372549 0.60000000 +v -0.00045564 0.04749778 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.01011699 -0.04640053 0.15480001 0.54509804 0.71372549 0.60000000 +v 0.00045564 -0.04749778 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.02101507 0.04258807 0.15480001 0.54509804 0.71372549 0.60000000 +v -0.01100967 0.04619597 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.01864390 0.04344355 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.02018749 -0.04298791 0.15480001 0.54509804 0.71372549 0.60000000 +v -0.01250676 -0.04559154 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.01011699 -0.04640053 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.02996973 0.03684147 0.15480001 0.54509804 0.71372549 0.60000000 +v -0.02101507 0.04258807 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.02784032 0.03820838 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.02925373 -0.03741798 0.15480001 0.54509804 0.71372549 0.60000000 +v -0.02018749 -0.04298791 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.03741799 0.02925373 0.15480001 0.54509804 0.71372549 0.60000000 +v -0.02996973 0.03684147 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.03684147 -0.02996972 0.15480001 0.54509804 0.71372549 0.60000000 +v -0.03279653 -0.03434941 0.14477836 0.54509804 0.71372549 0.60000000 +v -0.03146682 -0.03556754 0.14377295 0.54509804 0.71372549 0.60000000 +v -0.03113207 -0.03587440 0.14314592 0.54509804 0.71372549 0.60000000 +v -0.02925373 -0.03741798 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.04298792 0.02018749 0.15480001 0.54509804 0.71372549 0.60000000 +v -0.03741799 0.02925373 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.03871981 0.02750557 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.03659970 -0.03026728 0.14477836 0.54509804 0.71372549 0.60000000 +v -0.03465627 -0.03247107 0.14514593 0.54509804 0.71372549 0.60000000 +v -0.04258807 -0.02101507 0.15480001 0.54509804 0.71372549 0.60000000 +v -0.03859893 -0.02768224 0.14282159 0.54509804 0.71372549 0.60000000 +v -0.03807820 -0.02837964 0.14377295 0.54509804 0.71372549 0.60000000 +v -0.03684147 -0.02996972 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.03279653 -0.03434941 0.14001077 0.54509804 0.71372549 0.60000000 +v -0.03113207 -0.03587440 0.14164321 0.54509804 0.71372549 0.60000000 +v -0.02970006 -0.03704603 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.04640054 0.01011699 0.15480001 0.54509804 0.71372549 0.60000000 +v -0.04298792 0.02018749 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.04639124 0.01014489 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.03659970 -0.03026728 0.14001077 0.54509804 0.71372549 0.60000000 +v -0.03465627 -0.03247107 0.13964321 0.54509804 0.71372549 0.60000000 +v -0.03864542 -0.02760785 0.14239997 0.54509804 0.71372549 0.60000000 +v -0.04619597 -0.01100966 0.15480001 0.54509804 0.71372549 0.60000000 +v -0.04257877 -0.02104296 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.03871981 -0.02750556 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.03807820 -0.02837964 0.14101618 0.54509804 0.71372549 0.60000000 +v -0.03626495 -0.03062993 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.03577212 -0.03112276 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.03018360 -0.03660899 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.02983024 -0.03693445 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.03146682 -0.03556754 0.14101618 0.54509804 0.71372549 0.60000000 +v -0.04749779 -0.00045563 0.15480001 0.54509804 0.71372549 0.60000000 +v -0.04640054 0.01011699 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.04620527 -0.01098177 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.04619597 -0.01100966 0.04435641 0.54509804 0.71372549 0.60000000 +v -0.04749779 -0.00045563 0.04435641 0.54509804 0.71372549 0.60000000 +f 1 2 6 +f 1 6 18 +f 1 18 31 +f 1 31 38 +f 1 38 43 +f 1 43 49 +f 1 49 53 +f 1 53 57 +f 1 57 63 +f 1 63 68 +f 1 68 75 +f 1 75 87 +f 1 87 102 +f 1 102 93 +f 1 93 80 +f 1 80 70 +f 1 70 66 +f 1 66 60 +f 1 60 55 +f 1 55 51 +f 1 51 46 +f 1 46 40 +f 1 40 33 +f 1 33 22 +f 1 22 11 +f 1 11 3 +f 1 3 4 +f 1 4 5 +f 1 5 7 +f 1 7 2 +f 2 7 8 +f 2 8 6 +f 3 9 10 +f 3 10 4 +f 3 11 12 +f 3 12 13 +f 3 13 14 +f 3 14 29 +f 3 29 15 +f 3 15 21 +f 3 21 9 +f 4 10 16 +f 4 16 17 +f 4 17 5 +f 5 17 16 +f 5 16 15 +f 5 15 30 +f 5 30 37 +f 5 37 35 +f 5 35 24 +f 5 24 23 +f 5 23 34 +f 5 34 42 +f 5 42 41 +f 5 41 48 +f 5 48 47 +f 5 47 52 +f 5 52 56 +f 5 56 62 +f 5 62 61 +f 5 61 67 +f 5 67 74 +f 5 74 86 +f 5 86 100 +f 5 100 99 +f 5 99 98 +f 5 98 97 +f 5 97 83 +f 5 83 95 +f 5 95 94 +f 5 94 105 +f 5 105 104 +f 5 104 106 +f 5 106 103 +f 5 103 89 +f 5 89 88 +f 5 88 77 +f 5 77 76 +f 5 76 69 +f 5 69 65 +f 5 65 64 +f 5 64 59 +f 5 59 58 +f 5 58 54 +f 5 54 50 +f 5 50 45 +f 5 45 44 +f 5 44 39 +f 5 39 32 +f 5 32 20 +f 5 20 19 +f 5 19 8 +f 5 8 7 +f 6 8 19 +f 6 19 20 +f 6 20 18 +f 9 21 10 +f 10 21 16 +f 11 22 23 +f 11 23 24 +f 11 24 25 +f 11 25 26 +f 11 26 12 +f 12 26 36 +f 12 36 27 +f 12 27 28 +f 12 28 13 +f 13 28 29 +f 13 29 14 +f 15 29 28 +f 15 28 27 +f 15 27 30 +f 15 16 21 +f 18 20 32 +f 18 32 39 +f 18 39 31 +f 22 33 42 +f 22 42 34 +f 22 34 23 +f 24 35 25 +f 25 36 26 +f 25 35 37 +f 25 37 36 +f 27 36 30 +f 30 36 37 +f 31 39 44 +f 31 44 38 +f 33 40 41 +f 33 41 42 +f 38 44 45 +f 38 45 43 +f 40 46 47 +f 40 47 48 +f 40 48 41 +f 43 45 50 +f 43 50 54 +f 43 54 49 +f 46 51 56 +f 46 56 52 +f 46 52 47 +f 49 54 58 +f 49 58 53 +f 51 55 62 +f 51 62 56 +f 53 58 59 +f 53 59 57 +f 55 60 61 +f 55 61 62 +f 57 59 64 +f 57 64 65 +f 57 65 63 +f 60 66 74 +f 60 74 67 +f 60 67 61 +f 63 65 69 +f 63 69 76 +f 63 76 68 +f 66 70 71 +f 66 71 72 +f 66 72 73 +f 66 73 85 +f 66 85 74 +f 68 76 77 +f 68 77 75 +f 70 78 79 +f 70 79 71 +f 70 80 81 +f 70 81 82 +f 70 82 96 +f 70 96 83 +f 70 83 90 +f 70 90 78 +f 71 73 72 +f 71 79 91 +f 71 91 84 +f 71 84 85 +f 71 85 73 +f 74 85 86 +f 75 77 88 +f 75 88 89 +f 75 89 87 +f 78 90 91 +f 78 91 79 +f 80 92 81 +f 80 93 94 +f 80 94 95 +f 80 95 92 +f 81 92 95 +f 81 95 96 +f 81 96 82 +f 83 96 95 +f 83 97 90 +f 84 91 97 +f 84 97 98 +f 84 98 99 +f 84 99 100 +f 84 100 101 +f 84 101 85 +f 85 101 100 +f 85 100 86 +f 87 89 103 +f 87 103 106 +f 87 106 102 +f 90 97 91 +f 93 102 104 +f 93 104 105 +f 93 105 94 +f 102 106 104 + +o geometry_1 +v -0.06292865 -0.00299706 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.06234963 -0.00895419 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.06164741 -0.01188958 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.06024298 -0.01461531 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.06191845 -0.00294773 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.06136406 0.00881852 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.06234963 0.00895419 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.06291633 0.00299707 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.06278082 0.00000000 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.06136406 -0.00881852 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.06121623 -0.00944753 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.06164741 -0.01186491 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.06121623 -0.01484964 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.05828415 -0.02333516 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.05706451 -0.02380384 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.05057207 -0.02625822 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.05071990 -0.02549354 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.05071990 0.02550588 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.05857983 0.02027643 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.05952844 0.02059711 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.06164741 0.01186492 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.06121623 0.01484965 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.06164741 0.01188959 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.06191845 0.00294773 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.05857983 -0.02027643 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.05952844 -0.02059710 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.05729859 -0.02615955 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.05638693 -0.02575254 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.05049815 -0.03595243 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.05014088 -0.02691190 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.05046119 0.02649257 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.05368893 0.03099433 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.05455131 0.03150001 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.05729859 0.02615956 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.05828415 0.02333517 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.06024298 0.01461531 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.05689204 -0.02398884 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.05828415 -0.02332282 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.05455131 -0.03148766 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.05131124 -0.03653210 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.04277374 -0.04486962 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.04948794 -0.02734358 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.03649073 -0.04981539 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.03350938 -0.05214644 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.05044887 0.02650490 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.04685154 0.04058986 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.04760304 0.04125588 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.05131124 0.03653211 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.05344254 0.03085866 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.05638693 0.02575255 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.05368893 -0.03099432 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.04760304 -0.04125587 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.04542246 -0.04332791 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.04346364 -0.04558496 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.03640450 -0.05114742 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.02019187 -0.04298258 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.03405145 -0.05299745 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.02303770 -0.05754855 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.04970970 0.02723258 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.04574277 0.04165055 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.04544710 0.04331559 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.04346364 0.04558497 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.04542246 0.04332792 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.05049815 0.03595243 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.04277374 0.04486962 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.04685154 -0.04058986 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.04319261 -0.04409260 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.04544710 -0.04331558 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.03894234 -0.04951938 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.02005635 -0.04303191 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.02886488 -0.05599452 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.02340729 -0.05848590 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.01172828 -0.06087862 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.01011441 -0.04639898 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.01015137 -0.04638665 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.02101728 0.04258791 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.02840906 0.05510650 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.03663857 0.04981539 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.03831404 0.04873004 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.03894234 0.04951939 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.03640450 0.05114742 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.03405145 0.05299746 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.03350938 0.05214644 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.03831404 -0.04873003 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.02840906 -0.05510650 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.01774026 -0.06044695 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.01478355 -0.06101429 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.01191308 -0.06185298 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.00000000 -0.06300000 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.00000000 -0.06198864 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.00045583 -0.04749667 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.01101374 0.04620165 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.01745691 0.05948493 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.01774026 0.06044696 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.02886488 0.05599453 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.02340729 0.05848591 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.02314858 0.05749923 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.01745691 -0.05948493 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.00588878 -0.06171731 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.00598734 -0.06270399 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.00598734 -0.06270399 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.01191308 -0.06185298 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.01172829 -0.06087862 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.01101375 -0.04620164 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.00045582 0.04749668 0.01059664 0.54117647 0.42352941 0.64313725 +v -0.00588878 0.06171731 0.00999912 0.54117647 0.42352941 0.64313725 +v -0.00598734 0.06270400 0.00899911 0.54117647 0.42352941 0.64313725 +v -0.01191308 0.06185299 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.01478355 0.06101430 0.00100002 0.54117647 0.42352941 0.64313725 +v -0.01172828 0.06087863 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.02242172 0.05773356 -0.00000000 0.54117647 0.42352941 0.64313725 +v -0.02303770 0.05754856 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.00588879 -0.06171731 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.01774027 -0.06044695 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.02340730 -0.05848590 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.02303771 -0.05754855 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.02101729 -0.04258790 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.00588879 0.06171731 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.01011442 0.04639899 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.00598734 0.06270400 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.00000000 0.06300001 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.00000000 0.06198865 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.01745692 -0.05948493 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.02840906 -0.05510650 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.02886489 -0.05599452 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.03405146 -0.05299745 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.03350939 -0.05214644 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.02114048 -0.04251390 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.01745692 0.05948493 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.01774027 0.06044696 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.01015138 0.04638666 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.01191308 0.06185299 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.01172829 0.06087863 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.03831404 -0.04873003 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.03894235 -0.04951938 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.03649074 -0.04981539 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.04112292 -0.04743500 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.02996134 -0.03684044 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.02992438 -0.03686511 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.02840906 0.05510650 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.02005636 0.04303192 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.02019187 0.04298258 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.02340730 0.05848591 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.02886489 0.05599453 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.02303771 0.05754856 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.04685155 -0.04058986 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.04760305 -0.04125587 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.04346365 -0.04558496 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.04277375 -0.04486962 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.03005989 -0.03674178 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.03663858 0.04981539 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.03148897 0.05455149 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.02924680 0.03742013 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.03405146 0.05299746 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.03350939 0.05214644 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.05368894 -0.03099432 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.04935243 -0.03880149 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.05455131 -0.03150000 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.05131125 -0.03653210 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.04899516 -0.03769146 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.03741471 -0.02925528 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.03831404 0.04873004 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.03894235 0.04951939 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.04685155 0.04058986 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.03974312 0.04737334 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.03684801 0.02997064 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.04112292 0.04743501 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.04277375 0.04486962 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.05857983 -0.02027643 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.05952844 -0.02059710 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.05049816 -0.03595243 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.05729859 -0.02615955 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.05580792 -0.02874961 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.04299551 -0.02017776 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.04346365 0.04558497 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.04760305 0.04125588 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.05368894 0.03099433 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.04080261 0.02380384 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.04935243 0.03880149 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.04915532 0.03750647 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.06136407 -0.00881852 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.06234964 -0.00895419 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.06121624 -0.01484964 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.06024298 -0.01767404 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.05638694 -0.02575254 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.05706452 -0.02380384 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.06024298 -0.01461531 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.04640804 -0.01011354 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.05131125 0.03653211 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.05455131 0.03148767 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.04258895 0.02101645 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.05857983 0.02027643 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.05952844 0.02059711 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.05579560 0.02877428 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.05049816 0.03595243 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.06249747 -0.00596946 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.06191845 0.00294773 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.06292866 0.00299707 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.06291634 -0.00299706 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.06249747 -0.00595712 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.06191845 -0.00294773 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.04747985 0.00028368 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.05580792 0.02874961 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.05729859 0.02615956 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.04619861 0.01101390 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.06136407 0.00881852 0.00999912 0.54117647 0.42352941 0.64313725 +v 0.06121624 0.01484965 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.06024298 0.01767405 0.00100002 0.54117647 0.42352941 0.64313725 +v 0.06234964 0.00895419 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.05638694 0.02575255 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.06103144 0.00913920 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.06024298 0.01461531 -0.00000000 0.54117647 0.42352941 0.64313725 +v 0.06249747 0.00596946 0.00899911 0.54117647 0.42352941 0.64313725 +v 0.04749217 0.00045635 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.04749217 0.00041935 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.04747985 0.00059202 0.01059664 0.54117647 0.42352941 0.64313725 +v 0.05702756 0.02390251 -0.00000000 0.54117647 0.42352941 0.64313725 +f 107 108 109 +f 107 109 110 +f 107 110 111 +f 107 111 112 +f 107 112 113 +f 107 113 114 +f 107 114 115 +f 107 115 108 +f 108 116 117 +f 108 117 118 +f 108 118 119 +f 108 119 109 +f 108 115 116 +f 109 119 110 +f 110 119 120 +f 110 120 121 +f 110 121 122 +f 110 122 123 +f 110 123 111 +f 111 123 124 +f 111 124 112 +f 112 124 125 +f 112 125 126 +f 112 126 127 +f 112 127 113 +f 113 127 128 +f 113 128 129 +f 113 129 114 +f 114 129 130 +f 114 130 115 +f 115 130 116 +f 116 130 142 +f 116 142 156 +f 116 156 155 +f 116 155 170 +f 116 170 171 +f 116 171 189 +f 116 189 203 +f 116 203 218 +f 116 218 217 +f 116 217 216 +f 116 216 228 +f 116 228 239 +f 116 239 251 +f 116 251 261 +f 116 261 274 +f 116 274 286 +f 116 286 301 +f 116 301 316 +f 116 316 323 +f 116 323 318 +f 116 318 317 +f 116 317 303 +f 116 303 287 +f 116 287 275 +f 116 275 262 +f 116 262 252 +f 116 252 240 +f 116 240 230 +f 116 230 229 +f 116 229 219 +f 116 219 205 +f 116 205 204 +f 116 204 191 +f 116 191 190 +f 116 190 173 +f 116 173 172 +f 116 172 157 +f 116 157 143 +f 116 143 131 +f 116 131 117 +f 117 131 132 +f 117 132 118 +f 118 132 119 +f 119 132 120 +f 120 132 133 +f 120 133 134 +f 120 134 121 +f 121 134 122 +f 122 135 136 +f 122 136 148 +f 122 148 162 +f 122 162 176 +f 122 176 181 +f 122 181 180 +f 122 180 197 +f 122 197 210 +f 122 210 223 +f 122 223 234 +f 122 234 245 +f 122 245 244 +f 122 244 256 +f 122 256 267 +f 122 267 280 +f 122 280 294 +f 122 294 308 +f 122 308 321 +f 122 321 320 +f 122 320 322 +f 122 322 311 +f 122 311 297 +f 122 297 284 +f 122 284 272 +f 122 272 259 +f 122 259 248 +f 122 248 247 +f 122 247 237 +f 122 237 225 +f 122 225 211 +f 122 211 198 +f 122 198 182 +f 122 182 165 +f 122 165 151 +f 122 151 137 +f 122 137 124 +f 122 124 123 +f 122 134 135 +f 124 137 125 +f 125 137 138 +f 125 138 126 +f 126 138 139 +f 126 139 140 +f 126 140 141 +f 126 141 128 +f 126 128 127 +f 128 142 129 +f 128 141 142 +f 129 142 130 +f 131 143 132 +f 132 143 144 +f 132 144 133 +f 133 145 146 +f 133 146 134 +f 133 144 145 +f 134 146 135 +f 135 146 147 +f 135 147 136 +f 136 147 149 +f 136 149 150 +f 136 150 148 +f 137 151 152 +f 137 152 138 +f 138 152 153 +f 138 153 139 +f 139 154 140 +f 139 153 154 +f 140 154 155 +f 140 155 156 +f 140 156 141 +f 141 156 142 +f 143 157 145 +f 143 145 144 +f 145 157 158 +f 145 158 146 +f 146 158 159 +f 146 159 147 +f 147 159 160 +f 147 160 161 +f 147 161 149 +f 148 150 162 +f 149 161 163 +f 149 163 150 +f 150 163 164 +f 150 164 162 +f 151 165 152 +f 152 166 153 +f 152 165 166 +f 153 166 167 +f 153 167 168 +f 153 168 169 +f 153 169 154 +f 154 170 155 +f 154 169 171 +f 154 171 170 +f 157 172 158 +f 158 172 173 +f 158 173 174 +f 158 174 160 +f 158 160 159 +f 160 174 175 +f 160 175 161 +f 161 175 163 +f 162 164 176 +f 163 177 178 +f 163 178 164 +f 163 175 177 +f 164 178 179 +f 164 179 180 +f 164 180 181 +f 164 181 176 +f 165 182 183 +f 165 183 184 +f 165 184 185 +f 165 185 166 +f 166 185 186 +f 166 186 167 +f 167 186 168 +f 168 171 169 +f 168 186 187 +f 168 187 171 +f 171 187 188 +f 171 188 189 +f 173 190 175 +f 173 175 174 +f 175 190 191 +f 175 191 177 +f 177 191 192 +f 177 192 178 +f 178 192 193 +f 178 193 179 +f 179 193 194 +f 179 194 195 +f 179 195 196 +f 179 196 197 +f 179 197 180 +f 182 198 199 +f 182 199 183 +f 183 199 200 +f 183 200 201 +f 183 201 186 +f 183 186 184 +f 184 186 185 +f 186 201 188 +f 186 188 187 +f 188 201 202 +f 188 202 203 +f 188 203 189 +f 191 204 192 +f 192 204 205 +f 192 205 206 +f 192 206 194 +f 192 194 193 +f 194 206 195 +f 195 206 207 +f 195 207 208 +f 195 208 209 +f 195 209 196 +f 196 209 197 +f 197 209 210 +f 198 211 212 +f 198 212 199 +f 199 212 200 +f 200 202 201 +f 200 212 213 +f 200 213 214 +f 200 214 215 +f 200 215 202 +f 202 215 216 +f 202 216 217 +f 202 217 218 +f 202 218 203 +f 205 219 207 +f 205 207 206 +f 207 219 220 +f 207 220 208 +f 208 220 221 +f 208 221 209 +f 209 221 222 +f 209 222 210 +f 210 222 223 +f 211 224 212 +f 211 225 224 +f 212 224 226 +f 212 226 213 +f 213 226 227 +f 213 227 214 +f 214 227 216 +f 214 216 215 +f 216 227 228 +f 219 229 220 +f 220 229 230 +f 220 230 231 +f 220 231 221 +f 221 231 232 +f 221 232 222 +f 222 232 233 +f 222 233 223 +f 223 233 234 +f 224 225 235 +f 224 235 236 +f 224 236 226 +f 225 237 235 +f 226 238 227 +f 226 236 238 +f 227 238 239 +f 227 239 228 +f 230 240 241 +f 230 241 231 +f 231 241 232 +f 232 242 233 +f 232 241 243 +f 232 243 242 +f 233 242 244 +f 233 244 245 +f 233 245 234 +f 235 246 236 +f 235 237 247 +f 235 247 248 +f 235 248 246 +f 236 249 238 +f 236 246 250 +f 236 250 249 +f 238 249 239 +f 239 249 251 +f 240 252 241 +f 241 252 253 +f 241 253 254 +f 241 254 243 +f 242 243 255 +f 242 255 244 +f 243 254 255 +f 244 255 256 +f 246 257 258 +f 246 258 250 +f 246 248 259 +f 246 259 257 +f 249 250 260 +f 249 260 251 +f 250 258 260 +f 251 260 261 +f 252 262 253 +f 253 263 254 +f 253 262 264 +f 253 264 265 +f 253 265 263 +f 254 263 255 +f 255 263 266 +f 255 266 267 +f 255 267 256 +f 257 268 258 +f 257 259 268 +f 258 268 269 +f 258 269 260 +f 259 270 271 +f 259 271 268 +f 259 272 270 +f 260 269 273 +f 260 273 274 +f 260 274 261 +f 262 275 276 +f 262 276 264 +f 263 265 277 +f 263 277 266 +f 264 278 279 +f 264 279 265 +f 264 276 278 +f 265 279 277 +f 266 277 267 +f 267 277 280 +f 268 271 269 +f 269 281 273 +f 269 271 282 +f 269 282 281 +f 270 282 271 +f 270 272 283 +f 270 283 282 +f 272 284 283 +f 273 281 274 +f 274 281 285 +f 274 285 286 +f 275 287 276 +f 276 287 288 +f 276 288 289 +f 276 289 290 +f 276 290 278 +f 277 279 291 +f 277 291 280 +f 278 290 292 +f 278 292 291 +f 278 291 279 +f 280 293 294 +f 280 291 292 +f 280 292 293 +f 281 282 285 +f 282 295 285 +f 282 283 296 +f 282 296 295 +f 283 284 297 +f 283 297 298 +f 283 298 299 +f 283 299 300 +f 283 300 296 +f 285 295 301 +f 285 301 286 +f 287 302 288 +f 287 303 304 +f 287 304 302 +f 288 302 305 +f 288 305 306 +f 288 306 289 +f 289 306 293 +f 289 293 290 +f 290 293 292 +f 293 306 307 +f 293 307 294 +f 294 307 308 +f 295 296 309 +f 295 309 301 +f 296 310 309 +f 296 300 310 +f 297 311 298 +f 298 311 312 +f 298 312 299 +f 299 313 314 +f 299 314 310 +f 299 310 300 +f 299 312 315 +f 299 315 313 +f 301 309 316 +f 302 304 305 +f 303 317 304 +f 304 317 318 +f 304 318 313 +f 304 313 315 +f 304 315 319 +f 304 319 305 +f 305 307 306 +f 305 319 307 +f 307 319 312 +f 307 312 320 +f 307 320 321 +f 307 321 308 +f 309 310 316 +f 310 314 316 +f 311 322 312 +f 312 319 315 +f 312 322 320 +f 313 318 314 +f 314 323 316 +f 314 318 323 + +o geometry_2 +v -0.00046002 0.04749778 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.01011707 0.04640053 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.00998233 0.04641913 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.00046002 0.04749778 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.01096974 0.04620527 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.01100823 0.04619597 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.01015557 0.04639124 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.01011707 0.04640053 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.02019369 0.04298791 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.01100823 0.04619597 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.01114297 0.04614947 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.02097899 0.04260666 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.02101749 0.04258807 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.02005895 0.04303440 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.02925015 0.03741799 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.02023219 0.04296932 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.02019369 0.04298791 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.02101749 0.04258807 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.02784111 0.03820838 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.04972673 0.02722661 0.04399952 0.43529412 0.89019608 0.96078431 +v 0.02927902 0.03739009 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.02925015 0.03741799 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.02913465 0.03749238 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.03684371 0.02996973 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.03674746 0.03007201 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.04972673 0.02722661 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.02996807 0.03684147 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.05044855 0.02651061 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.05045817 0.02649201 0.04399952 0.43529412 0.89019608 0.96078431 +v 0.04042394 0.02439980 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.03684371 0.02996973 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.03741727 0.02925373 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.05045817 0.02649201 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.05072765 0.02549705 0.04399952 0.43529412 0.89019608 0.96078431 +v -0.04640635 0.01011699 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.04298973 0.02018749 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.03871655 0.02750557 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.03975986 0.02543196 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.04258940 0.02101508 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04257015 0.02105227 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.05072765 0.02549705 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.04749389 -0.00041844 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.02478105 0.02722259 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.02459507 0.02859065 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.02439980 0.02996202 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.02358152 0.03219916 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.02211232 0.03455197 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.02046645 0.03626370 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.01816967 0.03781350 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.01595658 0.03870572 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.01323206 0.03918817 0.43529412 0.89019608 0.96078431 +v -0.05072765 -0.02549704 0.04399952 0.43529412 0.89019608 0.96078431 +v 0.04344596 0.01864390 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04260865 0.02097788 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.05072765 -0.02549704 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.01151180 0.01460603 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.01427351 0.01470186 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.01658889 0.01528015 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.01783492 0.01588487 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.01908094 0.01649290 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.02094998 0.01796009 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.02273533 0.02008158 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.02385118 0.02218324 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.02461367 0.02484666 0.43529412 0.89019608 0.96078431 +v -0.04749389 -0.00045563 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.05082390 0.01085159 0.03910556 0.43529412 0.89019608 0.96078431 +v -0.05057367 -0.02625954 0.04399952 0.43529412 0.89019608 0.96078431 +v -0.04620424 -0.01100966 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.01559392 0.03528226 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.01563112 0.03527235 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.01566831 0.03525582 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.01909024 0.03289311 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.01911813 0.03286667 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.01913673 0.03283363 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.02107086 0.02915242 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.02108946 0.02911607 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.02134052 0.02704085 0.43529412 0.89019608 0.96078431 +v 0.04619851 0.01100967 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04615039 0.01114915 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.05057367 -0.02625954 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.02134052 0.02700119 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.02108946 0.02488301 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.02107086 0.02484666 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.01913673 0.02116545 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.01911813 0.02113241 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.01909024 0.02110597 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.01566831 0.01874326 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.01563112 0.01872673 0.43529412 0.89019608 0.96078431 +v -0.05082390 -0.01559392 0.01871682 0.43529412 0.89019608 0.96078431 +v -0.05015020 -0.02690115 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.05014057 -0.02691045 0.04399952 0.43529412 0.89019608 0.96078431 +v -0.03871655 -0.02750556 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.04257588 -0.02104296 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.04260476 -0.02098717 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04650649 0.00850832 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04620813 0.01097247 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.04619851 0.01100967 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.05014057 -0.02691045 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.04950537 -0.02733819 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.04948612 -0.02734748 0.04399952 0.43529412 0.89019608 0.96078431 +v -0.02924625 -0.03741798 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.02969859 -0.03704603 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.02983333 -0.03693445 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.03018943 -0.03660899 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.03577152 -0.03112276 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.03626235 -0.03062993 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.03678207 -0.03004411 0.04435640 0.43529412 0.89019608 0.96078431 +v -0.03683981 -0.02996972 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04749779 0.00045564 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04749779 0.00045564 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.02022830 -0.04296931 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.02018980 -0.04298791 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04734380 -0.00155288 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04641024 -0.01010769 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.02018980 -0.04298791 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.02005506 -0.04303440 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.01016130 -0.04639123 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.01250962 -0.04559154 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04650649 -0.00959626 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04640062 -0.01011699 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04367695 -0.01837424 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04345559 -0.01904374 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04300325 -0.02015959 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.01011318 -0.04640053 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.01011318 -0.04640053 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04329197 -0.01949938 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04322460 -0.01965746 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04298400 -0.02018748 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04299362 -0.02017818 0.01059768 0.43529412 0.89019608 0.96078431 +v -0.00997843 -0.04641913 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.00045429 -0.04749778 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.04129013 -0.02294920 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.03742116 -0.02925372 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.03742116 -0.02925372 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.00045429 -0.04749778 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.01096401 -0.04620526 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.01101213 -0.04619596 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.02997197 -0.03684146 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.02997197 -0.03684146 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.01101213 -0.04619596 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.01114687 -0.04614946 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.02102138 -0.04258806 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.02784500 -0.03820837 0.04435640 0.43529412 0.89019608 0.96078431 +v 0.02993347 -0.03686936 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.02097326 -0.04260666 0.01059768 0.43529412 0.89019608 0.96078431 +v 0.02102138 -0.04258806 0.01059768 0.43529412 0.89019608 0.96078431 +f 324 325 326 +f 324 326 327 +f 324 327 328 +f 324 328 329 +f 324 329 336 +f 324 336 342 +f 324 342 350 +f 324 350 355 +f 324 355 360 +f 324 360 359 +f 324 359 358 +f 324 358 365 +f 324 365 388 +f 324 388 391 +f 324 391 417 +f 324 417 416 +f 324 416 415 +f 324 415 431 +f 324 431 430 +f 324 430 429 +f 324 429 428 +f 324 428 427 +f 324 427 426 +f 324 426 425 +f 324 425 424 +f 324 424 435 +f 324 435 441 +f 324 441 448 +f 324 448 454 +f 324 454 460 +f 324 460 465 +f 324 465 466 +f 324 466 461 +f 324 461 456 +f 324 456 455 +f 324 455 451 +f 324 451 450 +f 324 450 449 +f 324 449 445 +f 324 445 444 +f 324 444 443 +f 324 443 442 +f 324 442 436 +f 324 436 432 +f 324 432 418 +f 324 418 401 +f 324 401 376 +f 324 376 362 +f 324 362 353 +f 324 353 347 +f 324 347 338 +f 324 338 332 +f 324 332 325 +f 325 330 331 +f 325 331 326 +f 325 332 330 +f 326 331 330 +f 326 330 337 +f 326 337 340 +f 326 340 339 +f 326 339 346 +f 326 346 345 +f 326 345 344 +f 326 344 348 +f 326 348 354 +f 326 354 361 +f 326 361 363 +f 326 363 377 +f 326 377 402 +f 326 402 420 +f 326 420 419 +f 326 419 433 +f 326 433 437 +f 326 437 446 +f 326 446 452 +f 326 452 457 +f 326 457 462 +f 326 462 467 +f 326 467 469 +f 326 469 468 +f 326 468 464 +f 326 464 463 +f 326 463 459 +f 326 459 458 +f 326 458 453 +f 326 453 447 +f 326 447 440 +f 326 440 439 +f 326 439 438 +f 326 438 434 +f 326 434 422 +f 326 422 421 +f 326 421 413 +f 326 413 403 +f 326 403 378 +f 326 378 364 +f 326 364 356 +f 326 356 351 +f 326 351 349 +f 326 349 341 +f 326 341 335 +f 326 335 334 +f 326 334 333 +f 326 333 328 +f 326 328 327 +f 328 333 329 +f 329 333 334 +f 329 334 335 +f 329 335 336 +f 330 332 337 +f 332 338 339 +f 332 339 340 +f 332 340 337 +f 335 341 336 +f 336 341 349 +f 336 349 343 +f 336 343 342 +f 338 344 345 +f 338 345 346 +f 338 346 339 +f 338 347 348 +f 338 348 344 +f 342 343 350 +f 343 349 351 +f 343 351 352 +f 343 352 350 +f 347 353 354 +f 347 354 348 +f 350 352 355 +f 351 356 352 +f 352 356 364 +f 352 364 357 +f 352 357 358 +f 352 358 359 +f 352 359 360 +f 352 360 355 +f 353 361 354 +f 353 362 363 +f 353 363 361 +f 357 365 358 +f 357 364 366 +f 357 366 367 +f 357 367 368 +f 357 368 369 +f 357 369 370 +f 357 370 371 +f 357 371 372 +f 357 372 373 +f 357 373 374 +f 357 374 375 +f 357 375 388 +f 357 388 365 +f 362 376 377 +f 362 377 363 +f 364 378 379 +f 364 379 380 +f 364 380 381 +f 364 381 382 +f 364 382 383 +f 364 383 384 +f 364 384 385 +f 364 385 386 +f 364 386 387 +f 364 387 366 +f 366 387 386 +f 366 386 385 +f 366 385 384 +f 366 384 383 +f 366 383 382 +f 366 382 381 +f 366 381 380 +f 366 380 379 +f 366 379 412 +f 366 412 411 +f 366 411 410 +f 366 410 409 +f 366 409 408 +f 366 408 407 +f 366 407 406 +f 366 406 405 +f 366 405 404 +f 366 404 400 +f 366 400 399 +f 366 399 398 +f 366 398 397 +f 366 397 396 +f 366 396 395 +f 366 395 394 +f 366 394 393 +f 366 393 392 +f 366 392 389 +f 366 389 374 +f 366 374 373 +f 366 373 372 +f 366 372 371 +f 366 371 370 +f 366 370 369 +f 366 369 368 +f 366 368 367 +f 374 389 375 +f 375 378 403 +f 375 403 390 +f 375 390 391 +f 375 391 388 +f 375 389 392 +f 375 392 393 +f 375 393 394 +f 375 394 395 +f 375 395 396 +f 375 396 397 +f 375 397 398 +f 375 398 399 +f 375 399 400 +f 375 400 404 +f 375 404 378 +f 376 401 377 +f 377 401 402 +f 378 404 405 +f 378 405 406 +f 378 406 407 +f 378 407 408 +f 378 408 409 +f 378 409 410 +f 378 410 411 +f 378 411 412 +f 378 412 379 +f 390 403 413 +f 390 413 414 +f 390 414 415 +f 390 415 416 +f 390 416 417 +f 390 417 391 +f 401 418 419 +f 401 419 420 +f 401 420 402 +f 413 421 414 +f 414 421 422 +f 414 422 423 +f 414 423 424 +f 414 424 425 +f 414 425 426 +f 414 426 427 +f 414 427 428 +f 414 428 429 +f 414 429 430 +f 414 430 431 +f 414 431 415 +f 418 432 419 +f 419 432 433 +f 422 434 423 +f 423 434 435 +f 423 435 424 +f 432 436 433 +f 433 436 437 +f 434 438 435 +f 435 438 439 +f 435 439 440 +f 435 440 441 +f 436 442 437 +f 437 442 443 +f 437 443 444 +f 437 444 445 +f 437 445 446 +f 440 447 448 +f 440 448 441 +f 445 449 446 +f 446 449 450 +f 446 450 451 +f 446 451 452 +f 447 453 448 +f 448 453 454 +f 451 455 452 +f 452 455 456 +f 452 456 457 +f 453 458 454 +f 454 458 459 +f 454 459 460 +f 456 461 462 +f 456 462 457 +f 459 463 460 +f 460 463 464 +f 460 464 465 +f 461 466 467 +f 461 467 462 +f 464 468 465 +f 465 467 466 +f 465 468 469 +f 465 469 467 + +o geometry_3 +v -0.05593017 -0.00364972 0.02700000 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.00390788 0.02911725 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00365492 0.02703784 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00365146 0.02700000 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00365492 0.02696216 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.00390788 0.02488275 0.38039216 0.78823529 0.52549020 +v -0.07767971 -0.00570110 0.02700000 0.38039216 0.78823529 0.52549020 +v -0.07767971 -0.00570110 0.02709976 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.00466502 0.03111239 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00465115 0.03107627 0.38039216 0.78823529 0.52549020 +v -0.07767971 -0.00600083 0.02899857 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00465115 0.02292373 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.00466502 0.02288761 0.38039216 0.78823529 0.52549020 +v -0.07767971 -0.00621741 0.02439944 0.38039216 0.78823529 0.52549020 +v -0.07803906 -0.00574095 0.02709976 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.00587609 0.03286845 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00468581 0.03114335 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00466502 0.03111239 0.38039216 0.78823529 0.52549020 +v -0.07820425 -0.00609093 0.02899857 0.38039216 0.78823529 0.52549020 +v -0.07908814 -0.00872272 0.03166965 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00466502 0.02288761 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00468581 0.02285665 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.00587609 0.02113155 0.38039216 0.78823529 0.52549020 +v -0.07777534 -0.00650501 0.02379746 0.38039216 0.78823529 0.52549020 +v -0.07810282 -0.00659857 0.02373555 0.38039216 0.78823529 0.52549020 +v -0.07830858 -0.00633349 0.02444588 0.38039216 0.78823529 0.52549020 +v -0.07830858 -0.00582584 0.02700000 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.00747353 0.03428224 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00744407 0.03425645 0.38039216 0.78823529 0.52549020 +v -0.07855201 -0.00595232 0.02709976 0.38039216 0.78823529 0.52549020 +v -0.07867372 -0.00635081 0.02899857 0.38039216 0.78823529 0.52549020 +v -0.08042702 -0.00808339 0.02954896 0.38039216 0.78823529 0.52549020 +v -0.08042702 -0.00995111 0.03141510 0.38039216 0.78823529 0.52549020 +v -0.07910842 -0.00944000 0.03213060 0.38039216 0.78823529 0.52549020 +v -0.07900700 -0.01032535 0.03273086 0.38039216 0.78823529 0.52549020 +v -0.07905046 -0.00943654 0.03214263 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00744407 0.01974355 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.00747353 0.01971776 0.38039216 0.78823529 0.52549020 +v -0.07836943 -0.00677703 0.02361687 0.38039216 0.78823529 0.52549020 +v -0.07884470 -0.00666441 0.02458348 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.00936204 0.03527465 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00750818 0.03430116 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00747353 0.03428224 0.38039216 0.78823529 0.52549020 +v -0.07884761 -0.01089190 0.03310580 0.38039216 0.78823529 0.52549020 +v -0.07849984 -0.01146192 0.03348247 0.38039216 0.78823529 0.52549020 +v -0.07844478 -0.01155375 0.03354267 0.38039216 0.78823529 0.52549020 +v -0.07884470 -0.00618449 0.02700000 0.38039216 0.78823529 0.52549020 +v -0.08042702 -0.00740076 0.02700000 0.38039216 0.78823529 0.52549020 +v -0.08042702 -0.00740076 0.02709976 0.38039216 0.78823529 0.52549020 +v -0.08042991 -0.01691608 0.02954896 0.38039216 0.78823529 0.52549020 +v -0.08042702 -0.01249974 0.03209963 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00747353 0.01971776 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.00750818 0.01969884 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.00936204 0.01872535 0.38039216 0.78823529 0.52549020 +v -0.07850564 -0.01148791 0.02050033 0.38039216 0.78823529 0.52549020 +v -0.07883021 -0.01093349 0.02086668 0.38039216 0.78823529 0.52549020 +v -0.07909393 -0.00961153 0.02174213 0.38039216 0.78823529 0.52549020 +v -0.07910263 -0.00932219 0.02193304 0.38039216 0.78823529 0.52549020 +v -0.07899540 -0.00817869 0.02268982 0.38039216 0.78823529 0.52549020 +v -0.07896932 -0.00790321 0.02287213 0.38039216 0.78823529 0.52549020 +v -0.07887659 -0.00758614 0.02308197 0.38039216 0.78823529 0.52549020 +v -0.07884470 -0.00751511 0.02312841 0.38039216 0.78823529 0.52549020 +v -0.07867952 -0.00715820 0.02336576 0.38039216 0.78823529 0.52549020 +v -0.08042702 -0.00808339 0.02445104 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.01143420 0.03578548 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01143420 0.03578548 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01139608 0.03577515 0.38039216 0.78823529 0.52549020 +v -0.07819266 -0.01175300 0.03367510 0.38039216 0.78823529 0.52549020 +v -0.07787677 -0.01187947 0.03375938 0.38039216 0.78823529 0.52549020 +v -0.07850274 -0.01191932 0.03355299 0.38039216 0.78823529 0.52549020 +v -0.08042991 -0.01691608 0.02445104 0.38039216 0.78823529 0.52549020 +v -0.08042702 -0.01504836 0.03141510 0.38039216 0.78823529 0.52549020 +v -0.08042991 -0.01759699 0.02709976 0.38039216 0.78823529 0.52549020 +v -0.07892006 -0.01840437 0.02899857 0.38039216 0.78823529 0.52549020 +v -0.07849984 -0.01876128 0.02899857 0.38039216 0.78823529 0.52549020 +v -0.07847086 -0.01878553 0.02899857 0.38039216 0.78823529 0.52549020 +v -0.07908814 -0.01627676 0.03166965 0.38039216 0.78823529 0.52549020 +v -0.07883021 -0.01406599 0.03313332 0.38039216 0.78823529 0.52549020 +v -0.07850564 -0.01351156 0.03349967 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01139608 0.01822485 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01143420 0.01821452 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.01143420 0.01821452 0.38039216 0.78823529 0.52549020 +v -0.07795212 -0.01186042 0.02025438 0.38039216 0.78823529 0.52549020 +v -0.07819555 -0.01175126 0.02032662 0.38039216 0.78823529 0.52549020 +v -0.07830568 -0.01165597 0.02038853 0.38039216 0.78823529 0.52549020 +v -0.07884470 -0.01249974 0.02068436 0.38039216 0.78823529 0.52549020 +v -0.08042702 -0.01249974 0.02190037 0.38039216 0.78823529 0.52549020 +v -0.07830858 -0.01249974 0.02032662 0.38039216 0.78823529 0.52549020 +v -0.08042702 -0.00995111 0.02258490 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.01356527 0.03578548 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01147232 0.03578548 0.38039216 0.78823529 0.52549020 +v -0.07819555 -0.01324821 0.03367338 0.38039216 0.78823529 0.52549020 +v -0.07795212 -0.01313906 0.03374562 0.38039216 0.78823529 0.52549020 +v -0.07767971 -0.01309921 0.03377314 0.38039216 0.78823529 0.52549020 +v -0.08042991 -0.01759872 0.02700000 0.38039216 0.78823529 0.52549020 +v -0.08042702 -0.01504836 0.02258490 0.38039216 0.78823529 0.52549020 +v -0.07883021 -0.01753288 0.02316108 0.38039216 0.78823529 0.52549020 +v -0.07850564 -0.01808557 0.02352743 0.38039216 0.78823529 0.52549020 +v -0.07884470 -0.01833506 0.02458348 0.38039216 0.78823529 0.52549020 +v -0.07910263 -0.01567555 0.03206696 0.38039216 0.78823529 0.52549020 +v -0.07909973 -0.01556467 0.03214091 0.38039216 0.78823529 0.52549020 +v -0.07909393 -0.01538795 0.03225787 0.38039216 0.78823529 0.52549020 +v -0.07870850 -0.01893627 0.02709976 0.38039216 0.78823529 0.52549020 +v -0.07830858 -0.01917363 0.02700000 0.38039216 0.78823529 0.52549020 +v -0.07822453 -0.01920482 0.02709976 0.38039216 0.78823529 0.52549020 +v -0.07794632 -0.01897438 0.02899857 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.01912339 0.03286845 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.01752595 0.03428224 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.01563744 0.03527465 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01147232 0.01821452 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.01356527 0.01821452 0.38039216 0.78823529 0.52549020 +v -0.07767971 -0.01249974 0.02020106 0.38039216 0.78823529 0.52549020 +v -0.07767971 -0.01190027 0.02022686 0.38039216 0.78823529 0.52549020 +v -0.07836943 -0.01337642 0.02041089 0.38039216 0.78823529 0.52549020 +v -0.07867952 -0.01375759 0.02066200 0.38039216 0.78823529 0.52549020 +v -0.07884470 -0.01411450 0.02089936 0.38039216 0.78823529 0.52549020 +v -0.07887659 -0.01418380 0.02094580 0.38039216 0.78823529 0.52549020 +v -0.07810282 -0.01319623 0.02029222 0.38039216 0.78823529 0.52549020 +v -0.07830858 -0.01333484 0.02038338 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01563744 0.03527465 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01559932 0.03528325 0.38039216 0.78823529 0.52549020 +v -0.07884470 -0.01881499 0.02700000 0.38039216 0.78823529 0.52549020 +v -0.07910263 -0.01592158 0.02209472 0.38039216 0.78823529 0.52549020 +v -0.07909393 -0.01621092 0.02228564 0.38039216 0.78823529 0.52549020 +v -0.07884470 -0.01746877 0.02311981 0.38039216 0.78823529 0.52549020 +v -0.07896932 -0.01450260 0.02115563 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.01752595 0.01971776 0.38039216 0.78823529 0.52549020 +v -0.07830858 -0.01866425 0.02444588 0.38039216 0.78823529 0.52549020 +v -0.07830568 -0.01825536 0.02363923 0.38039216 0.78823529 0.52549020 +v -0.07767971 -0.01878034 0.02439944 0.38039216 0.78823529 0.52549020 +v -0.07767971 -0.01929838 0.02700000 0.38039216 0.78823529 0.52549020 +v -0.07767971 -0.01929838 0.02709976 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.02109160 0.02911725 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.02033446 0.03111239 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01912339 0.03286845 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01909393 0.03289253 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01567209 0.03525573 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01559932 0.01871675 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01563744 0.01872535 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.01563744 0.01872535 0.38039216 0.78823529 0.52549020 +v -0.07777534 -0.01310441 0.02023030 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01567209 0.01874427 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01909393 0.02110747 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01912339 0.02113155 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.01912339 0.02113155 0.38039216 0.78823529 0.52549020 +v -0.07819555 -0.01834892 0.02370287 0.38039216 0.78823529 0.52549020 +v -0.07795212 -0.01845808 0.02377339 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.02033446 0.02288761 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.02109160 0.02488275 0.38039216 0.78823529 0.52549020 +v -0.05593017 -0.02134802 0.02700000 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.02134975 0.02700000 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.02109160 0.02911725 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.02107774 0.02915337 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01914591 0.03283577 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.01914591 0.02116423 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.02107774 0.02484663 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.02109160 0.02488275 0.38039216 0.78823529 0.52549020 +v -0.05082679 -0.02109679 0.02492059 0.38039216 0.78823529 0.52549020 +f 470 471 472 +f 470 472 473 +f 470 473 474 +f 470 474 475 +f 470 475 476 +f 470 476 477 +f 470 477 471 +f 471 478 479 +f 471 479 472 +f 471 477 480 +f 471 480 478 +f 472 479 487 +f 472 487 486 +f 472 486 498 +f 472 498 512 +f 472 512 511 +f 472 511 536 +f 472 536 535 +f 472 535 560 +f 472 560 590 +f 472 590 589 +f 472 589 606 +f 472 606 605 +f 472 605 604 +f 472 604 623 +f 472 623 622 +f 472 622 621 +f 472 621 620 +f 472 620 627 +f 472 627 626 +f 472 626 625 +f 472 625 624 +f 472 624 613 +f 472 613 612 +f 472 612 611 +f 472 611 608 +f 472 608 607 +f 472 607 579 +f 472 579 550 +f 472 550 549 +f 472 549 522 +f 472 522 521 +f 472 521 506 +f 472 506 491 +f 472 491 490 +f 472 490 481 +f 472 481 474 +f 472 474 473 +f 474 481 475 +f 475 481 482 +f 475 482 483 +f 475 483 476 +f 476 483 484 +f 476 484 477 +f 477 484 480 +f 478 485 486 +f 478 486 487 +f 478 487 479 +f 478 480 485 +f 480 484 488 +f 480 488 489 +f 480 489 485 +f 481 490 482 +f 482 490 491 +f 482 491 492 +f 482 492 493 +f 482 493 483 +f 483 493 494 +f 483 494 495 +f 483 495 484 +f 484 495 496 +f 484 496 488 +f 485 497 498 +f 485 498 486 +f 485 489 497 +f 488 496 499 +f 488 499 500 +f 488 500 489 +f 489 500 501 +f 489 501 502 +f 489 502 503 +f 489 503 504 +f 489 504 505 +f 489 505 497 +f 491 506 492 +f 492 506 507 +f 492 507 494 +f 492 494 493 +f 494 507 508 +f 494 508 495 +f 495 508 509 +f 495 509 499 +f 495 499 496 +f 497 510 511 +f 497 511 512 +f 497 512 498 +f 497 505 504 +f 497 504 513 +f 497 513 514 +f 497 514 515 +f 497 515 510 +f 499 509 516 +f 499 516 517 +f 499 517 518 +f 499 518 500 +f 500 518 501 +f 501 518 519 +f 501 519 502 +f 502 519 520 +f 502 520 513 +f 502 513 504 +f 502 504 503 +f 506 521 507 +f 507 521 522 +f 507 522 523 +f 507 523 524 +f 507 524 525 +f 507 525 526 +f 507 526 527 +f 507 527 528 +f 507 528 529 +f 507 529 530 +f 507 530 531 +f 507 531 532 +f 507 532 508 +f 508 532 509 +f 509 532 533 +f 509 533 517 +f 509 517 516 +f 510 534 535 +f 510 535 536 +f 510 536 511 +f 510 515 537 +f 510 537 538 +f 510 538 534 +f 513 520 515 +f 513 515 514 +f 515 520 539 +f 515 539 537 +f 517 533 540 +f 517 540 519 +f 517 519 518 +f 519 541 520 +f 519 540 564 +f 519 564 542 +f 519 542 543 +f 519 543 544 +f 519 544 545 +f 519 545 546 +f 519 546 541 +f 520 541 547 +f 520 547 548 +f 520 548 539 +f 522 549 523 +f 523 549 550 +f 523 550 551 +f 523 551 552 +f 523 552 553 +f 523 553 554 +f 523 554 524 +f 524 555 556 +f 524 556 525 +f 524 554 553 +f 524 553 557 +f 524 557 555 +f 525 556 558 +f 525 558 526 +f 526 558 527 +f 527 558 528 +f 528 558 529 +f 529 558 533 +f 529 533 530 +f 530 533 531 +f 531 533 532 +f 533 558 540 +f 534 559 560 +f 534 560 535 +f 534 538 559 +f 537 539 561 +f 537 561 562 +f 537 562 538 +f 538 562 563 +f 538 563 559 +f 539 548 561 +f 540 558 556 +f 540 556 565 +f 540 565 566 +f 540 566 567 +f 540 567 568 +f 540 568 564 +f 541 546 569 +f 541 569 570 +f 541 570 571 +f 541 571 547 +f 542 564 572 +f 542 572 545 +f 542 545 544 +f 542 544 543 +f 545 572 573 +f 545 573 574 +f 545 574 575 +f 545 575 546 +f 546 575 576 +f 546 576 577 +f 546 577 569 +f 547 571 577 +f 547 577 548 +f 548 577 578 +f 548 578 561 +f 550 579 580 +f 550 580 551 +f 551 580 581 +f 551 581 582 +f 551 582 552 +f 552 582 581 +f 552 581 557 +f 552 557 553 +f 555 557 583 +f 555 583 584 +f 555 584 556 +f 556 584 585 +f 556 585 586 +f 556 586 565 +f 557 581 587 +f 557 587 588 +f 557 588 583 +f 559 578 589 +f 559 589 590 +f 559 590 560 +f 559 563 562 +f 559 562 578 +f 561 578 562 +f 564 568 591 +f 564 591 572 +f 565 592 593 +f 565 593 594 +f 565 594 566 +f 565 586 595 +f 565 595 592 +f 566 594 593 +f 566 593 596 +f 566 596 567 +f 567 597 568 +f 567 596 598 +f 567 598 597 +f 568 597 572 +f 568 572 591 +f 569 577 570 +f 570 577 571 +f 572 597 573 +f 573 597 599 +f 573 599 600 +f 573 600 574 +f 574 600 601 +f 574 601 575 +f 575 601 602 +f 575 602 603 +f 575 603 576 +f 576 603 604 +f 576 604 577 +f 577 604 605 +f 577 605 606 +f 577 606 589 +f 577 589 578 +f 579 607 580 +f 580 607 608 +f 580 608 609 +f 580 609 610 +f 580 610 581 +f 581 610 587 +f 583 588 609 +f 583 609 596 +f 583 596 584 +f 584 596 585 +f 585 596 586 +f 586 596 595 +f 587 610 609 +f 587 609 588 +f 592 595 596 +f 592 596 593 +f 596 609 608 +f 596 608 611 +f 596 611 612 +f 596 612 613 +f 596 613 614 +f 596 614 615 +f 596 615 598 +f 597 598 615 +f 597 615 616 +f 597 616 599 +f 599 616 617 +f 599 617 618 +f 599 618 600 +f 600 618 619 +f 600 619 601 +f 601 619 602 +f 602 619 620 +f 602 620 621 +f 602 621 603 +f 603 621 622 +f 603 622 623 +f 603 623 604 +f 613 624 617 +f 613 617 614 +f 614 617 616 +f 614 616 615 +f 617 624 625 +f 617 625 626 +f 617 626 618 +f 618 626 627 +f 618 627 620 +f 618 620 619 + +o geometry_4 +v -0.05335788 0.01290634 0.01429775 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.01289896 0.01450976 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.01551466 0.01466507 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.01028325 0.01448265 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.01789907 0.01575470 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.00782995 0.01540464 0.56470588 0.92549020 0.07058824 +v -0.08884182 0.01075817 0.01767512 0.56470588 0.92549020 0.07058824 +v -0.08918293 0.01093287 0.01772935 0.56470588 0.92549020 0.07058824 +v -0.08961339 0.01135611 0.01786247 0.56470588 0.92549020 0.07058824 +v -0.09007227 0.01224196 0.01814105 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.02022441 0.01696020 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.01908019 0.01649181 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.01658998 0.01527892 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.01546545 0.01486969 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.01427940 0.01470205 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.01799011 0.01556488 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.01151359 0.01460591 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.01031770 0.01468973 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00916610 0.01502007 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.00785456 0.01546381 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.00775121 0.01520989 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.02195919 0.01892499 0.56470588 0.92549020 0.07058824 +v -0.09041744 0.01402349 0.01870312 0.56470588 0.92549020 0.07058824 +v -0.09045399 0.01481829 0.01895457 0.56470588 0.92549020 0.07058824 +v -0.09032810 0.01674254 0.01956102 0.56470588 0.92549020 0.07058824 +v -0.09013318 0.01760132 0.01983219 0.56470588 0.92549020 0.07058824 +v -0.09008851 0.01771205 0.01986671 0.56470588 0.92549020 0.07058824 +v -0.08986110 0.01828539 0.02004667 0.56470588 0.92549020 0.07058824 +v -0.08942659 0.01889318 0.02023896 0.56470588 0.92549020 0.07058824 +v -0.08934131 0.01895962 0.02025868 0.56470588 0.92549020 0.07058824 +v -0.08904893 0.01918108 0.02032771 0.56470588 0.92549020 0.07058824 +v -0.08859005 0.01933118 0.02037701 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.00542341 0.01644743 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.00355821 0.01828649 0.56470588 0.92549020 0.07058824 +v -0.08904893 0.00897171 0.01824212 0.56470588 0.92549020 0.07058824 +v -0.08859005 0.00907260 0.01812379 0.56470588 0.92549020 0.07058824 +v -0.08942659 0.00877732 0.01847139 0.56470588 0.92549020 0.07058824 +v -0.08971085 0.01154066 0.01792164 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.00903323 0.02064819 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.01210170 0.01977549 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.02190998 0.01896690 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.02184846 0.01901866 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.02095769 0.01795862 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.02009646 0.01712784 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.02212159 0.01879187 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00659961 0.01605793 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.02437804 0.02347334 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.02359308 0.02097359 0.56470588 0.92549020 0.07058824 +v -0.08845604 0.02019980 0.02140501 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.01524399 0.02032524 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.01783263 0.02218895 0.56470588 0.92549020 0.07058824 +v -0.08934131 0.02005708 0.02150855 0.56470588 0.92549020 0.07058824 +v -0.09009257 0.01965353 0.02180191 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.00554152 0.01662000 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00462369 0.01739162 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00366156 0.01838757 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.00360496 0.01833087 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.00340811 0.01814105 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.00178652 0.02021677 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.00082931 0.02265488 0.56470588 0.92549020 0.07058824 +v -0.08918293 0.00335397 0.02482182 0.56470588 0.92549020 0.07058824 +v -0.08961339 0.00364187 0.02448408 0.56470588 0.92549020 0.07058824 +v -0.09007227 0.00424474 0.02377656 0.56470588 0.92549020 0.07058824 +v -0.09041744 0.00546032 0.02235412 0.56470588 0.92549020 0.07058824 +v -0.09045399 0.00600167 0.02172056 0.56470588 0.92549020 0.07058824 +v -0.09040932 0.00646920 0.02117328 0.56470588 0.92549020 0.07058824 +v -0.09032810 0.00731321 0.02018719 0.56470588 0.92549020 0.07058824 +v -0.09013318 0.00789639 0.01950185 0.56470588 0.92549020 0.07058824 +v -0.08986110 0.00836146 0.01895704 0.56470588 0.92549020 0.07058824 +v -0.08971491 0.00849926 0.01879433 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.00665129 0.02277321 0.56470588 0.92549020 0.07058824 +v -0.09230981 0.00543325 0.02572409 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.02273923 0.02008118 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.02473976 0.02861088 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.02503997 0.02601006 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.02457982 0.02341664 0.56470588 0.92549020 0.07058824 +v -0.08845604 0.02164914 0.02437561 0.56470588 0.92549020 0.07058824 +v -0.08845604 0.02168852 0.02451120 0.56470588 0.92549020 0.07058824 +v -0.08845604 0.02201825 0.02718104 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.02424024 0.02351524 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.02385638 0.02218156 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.02340853 0.02107221 0.56470588 0.92549020 0.07058824 +v -0.08896365 0.02163438 0.02452599 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.01935087 0.02499685 0.56470588 0.92549020 0.07058824 +v -0.08968242 0.02134894 0.02460734 0.56470588 0.92549020 0.07058824 +v -0.08934131 0.02148182 0.02442491 0.56470588 0.92549020 0.07058824 +v -0.09009257 0.02099952 0.02456297 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00270189 0.01938352 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.00196369 0.02032771 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00143956 0.02140501 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00096465 0.02270419 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.00089083 0.02267707 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.00063246 0.02258339 0.56470588 0.92549020 0.07058824 +v -0.05111628 -0.00000486 0.02513983 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.00011326 0.02775544 0.56470588 0.92549020 0.07058824 +v -0.08845604 0.00300456 0.02633793 0.56470588 0.92549020 0.07058824 +v -0.08884182 0.00323586 0.02495987 0.56470588 0.92549020 0.07058824 +v -0.08934131 0.00317926 0.02635026 0.56470588 0.92549020 0.07058824 +v -0.09009257 0.00367878 0.02638477 0.56470588 0.92549020 0.07058824 +v -0.09230981 0.00562272 0.02890670 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.01940008 0.02516695 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.02297791 0.03345258 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.02430914 0.03119690 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.02494646 0.02864046 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.02467578 0.02860348 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.02440265 0.02996428 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.02478651 0.02721802 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.02482835 0.02602485 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.02462165 0.02484647 0.56470588 0.92549020 0.07058824 +v -0.08919512 0.02189521 0.02721556 0.56470588 0.92549020 0.07058824 +v -0.08961339 0.02170820 0.02717611 0.56470588 0.92549020 0.07058824 +v -0.08984892 0.02154826 0.02731663 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00049220 0.02400583 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.00020184 0.02516941 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00014770 0.02596568 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00025844 0.02774558 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00035440 0.02912611 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.00017723 0.02775051 0.56470588 0.92549020 0.07058824 +v -0.05335788 -0.00009836 0.02777023 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.00036178 0.03036365 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.00153307 0.03270808 0.56470588 0.92549020 0.07058824 +v -0.08845604 0.00335151 0.02962409 0.56470588 0.92549020 0.07058824 +v -0.08934131 0.00351884 0.02957478 0.56470588 0.92549020 0.07058824 +v -0.08990171 0.00387810 0.02961915 0.56470588 0.92549020 0.07058824 +v -0.09009257 0.00400113 0.02943673 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.00563749 0.02896834 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.00567932 0.02910146 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.00761095 0.03220025 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.01081968 0.03393823 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.01446887 0.03386181 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.01760378 0.03199070 0.56470588 0.92549020 0.07058824 +v -0.09230575 0.01940500 0.02881549 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.01940008 0.03716029 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.02153349 0.03563924 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.02315508 0.03356352 0.56470588 0.92549020 0.07058824 +v -0.09042962 0.01938532 0.03182554 0.56470588 0.92549020 0.07058824 +v -0.09036465 0.01785969 0.03361283 0.56470588 0.92549020 0.07058824 +v -0.09031592 0.01763823 0.03387167 0.56470588 0.92549020 0.07058824 +v -0.09021034 0.01735033 0.03420941 0.56470588 0.92549020 0.07058824 +v -0.09009257 0.01702060 0.03459399 0.56470588 0.92549020 0.07058824 +v -0.08952811 0.01629962 0.03543956 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.02285488 0.03337616 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.02358816 0.03220025 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.02411229 0.03112541 0.56470588 0.92549020 0.07058824 +v -0.08960121 0.02168113 0.02727719 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00101140 0.03141631 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.00056356 0.03030695 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00231064 0.03386181 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.00282001 0.03498842 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.00134852 0.03280670 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.00484515 0.03665245 0.56470588 0.92549020 0.07058824 +v -0.08883370 0.00455971 0.03219039 0.56470588 0.92549020 0.07058824 +v -0.08775757 0.00408480 0.03144589 0.56470588 0.92549020 0.07058824 +v -0.08845604 0.00339088 0.02975967 0.56470588 0.92549020 0.07058824 +v -0.08922354 0.00351638 0.02972269 0.56470588 0.92549020 0.07058824 +v -0.08961339 0.00478609 0.03203015 0.56470588 0.92549020 0.07058824 +v -0.09019815 0.00532744 0.03197098 0.56470588 0.92549020 0.07058824 +v -0.08956872 0.00481316 0.03211643 0.56470588 0.92549020 0.07058824 +v -0.09042962 0.00922024 0.03474190 0.56470588 0.92549020 0.07058824 +v -0.09045399 0.01018237 0.03504513 0.56470588 0.92549020 0.07058824 +v -0.09044587 0.01035954 0.03510182 0.56470588 0.92549020 0.07058824 +v -0.09041744 0.01097717 0.03529658 0.56470588 0.92549020 0.07058824 +v -0.09007227 0.01275870 0.03585865 0.56470588 0.92549020 0.07058824 +v -0.08961339 0.01364455 0.03613722 0.56470588 0.92549020 0.07058824 +v -0.08961339 0.01424741 0.03604107 0.56470588 0.92549020 0.07058824 +v -0.08961339 0.01580995 0.03559240 0.56470588 0.92549020 0.07058824 +v -0.09045805 0.01860036 0.03272288 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.01462390 0.03909056 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.01719039 0.03857040 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.01951819 0.03733286 0.56470588 0.92549020 0.07058824 +v -0.08917888 0.01608308 0.03569348 0.56470588 0.92549020 0.07058824 +v -0.08873624 0.01594528 0.03585618 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.01936317 0.03710606 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.01931888 0.03703949 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.02046556 0.03626295 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.02138339 0.03549380 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.02211914 0.03455208 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00384365 0.03568609 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.00298241 0.03485530 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.00488452 0.03660315 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.00471719 0.03682009 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.00695149 0.03821541 0.56470588 0.92549020 0.07058824 +v -0.06063497 0.00947615 0.03891060 0.56470588 0.92549020 0.07058824 +v -0.08918293 0.01406778 0.03627034 0.56470588 0.92549020 0.07058824 +v -0.08884182 0.01424249 0.03632458 0.56470588 0.92549020 0.07058824 +v -0.05111628 0.01203526 0.03948254 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.01465835 0.03929764 0.56470588 0.92549020 0.07058824 +v -0.08845604 0.01430647 0.03634676 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.01596251 0.03870599 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.01711165 0.03837565 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.01816974 0.03781358 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00602627 0.03739202 0.56470588 0.92549020 0.07058824 +v -0.05335788 0.00942694 0.03911522 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.00704254 0.03802559 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00816707 0.03843481 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.00951060 0.03877009 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.01085659 0.03910536 0.56470588 0.92549020 0.07058824 +v -0.05090511 0.01204264 0.03927053 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.01323361 0.03918671 0.56470588 0.92549020 0.07058824 +v -0.05082389 0.01459683 0.03894758 0.56470588 0.92549020 0.07058824 +f 628 629 630 +f 628 630 631 +f 628 631 629 +f 629 632 630 +f 629 631 633 +f 629 633 634 +f 629 634 635 +f 629 635 636 +f 629 636 637 +f 629 637 632 +f 630 638 639 +f 630 639 640 +f 630 640 641 +f 630 641 642 +f 630 642 631 +f 630 632 643 +f 630 643 638 +f 631 642 644 +f 631 644 645 +f 631 645 646 +f 631 646 647 +f 631 647 648 +f 631 648 633 +f 632 649 638 +f 632 638 643 +f 632 637 650 +f 632 650 651 +f 632 651 652 +f 632 652 653 +f 632 653 654 +f 632 654 655 +f 632 655 656 +f 632 656 657 +f 632 657 658 +f 632 658 659 +f 632 659 649 +f 633 648 660 +f 633 660 661 +f 633 661 662 +f 633 662 663 +f 633 663 634 +f 634 663 662 +f 634 662 635 +f 635 662 664 +f 635 664 636 +f 636 665 637 +f 636 664 666 +f 636 666 667 +f 636 667 665 +f 637 665 667 +f 637 667 650 +f 638 668 669 +f 638 669 670 +f 638 670 671 +f 638 671 639 +f 638 649 672 +f 638 672 668 +f 639 670 669 +f 639 669 700 +f 639 700 708 +f 639 708 707 +f 639 707 736 +f 639 736 734 +f 639 734 733 +f 639 733 770 +f 639 770 769 +f 639 769 804 +f 639 804 802 +f 639 802 801 +f 639 801 818 +f 639 818 816 +f 639 816 827 +f 639 827 826 +f 639 826 824 +f 639 824 823 +f 639 823 822 +f 639 822 819 +f 639 819 805 +f 639 805 775 +f 639 775 773 +f 639 773 744 +f 639 744 743 +f 639 743 742 +f 639 742 740 +f 639 740 718 +f 639 718 717 +f 639 717 715 +f 639 715 683 +f 639 683 682 +f 639 682 673 +f 639 673 646 +f 639 646 644 +f 639 644 642 +f 639 642 640 +f 639 671 670 +f 640 642 641 +f 644 646 645 +f 646 673 647 +f 647 673 660 +f 647 660 648 +f 649 674 675 +f 649 675 672 +f 649 659 676 +f 649 676 674 +f 650 667 677 +f 650 677 651 +f 651 677 652 +f 652 677 653 +f 653 655 654 +f 653 677 655 +f 655 677 678 +f 655 678 656 +f 656 679 657 +f 656 678 680 +f 656 680 679 +f 657 679 658 +f 658 679 676 +f 658 676 659 +f 660 673 681 +f 660 681 682 +f 660 682 683 +f 660 683 684 +f 660 684 685 +f 660 685 661 +f 661 685 686 +f 661 686 687 +f 661 687 688 +f 661 688 689 +f 661 689 690 +f 661 690 691 +f 661 691 692 +f 661 692 693 +f 661 693 694 +f 661 694 695 +f 661 695 696 +f 661 696 697 +f 661 697 664 +f 661 664 662 +f 664 697 666 +f 666 698 699 +f 666 699 667 +f 666 697 696 +f 666 696 695 +f 666 695 694 +f 666 694 698 +f 667 699 677 +f 668 675 669 +f 668 672 675 +f 669 675 700 +f 673 682 681 +f 674 701 702 +f 674 702 703 +f 674 703 675 +f 674 676 704 +f 674 704 705 +f 674 705 706 +f 674 706 701 +f 675 702 707 +f 675 707 708 +f 675 708 709 +f 675 709 700 +f 675 703 702 +f 676 679 710 +f 676 710 704 +f 677 699 678 +f 678 699 711 +f 678 711 680 +f 679 680 712 +f 679 712 713 +f 679 713 710 +f 680 714 712 +f 680 711 714 +f 683 715 686 +f 683 686 684 +f 684 686 685 +f 686 715 716 +f 686 716 717 +f 686 717 718 +f 686 718 719 +f 686 719 720 +f 686 720 687 +f 687 720 721 +f 687 721 722 +f 687 722 723 +f 687 723 724 +f 687 724 688 +f 688 725 689 +f 688 724 725 +f 689 725 726 +f 689 726 699 +f 689 699 690 +f 690 699 698 +f 690 698 691 +f 691 698 692 +f 692 698 693 +f 693 698 694 +f 699 727 728 +f 699 728 711 +f 699 726 727 +f 700 709 708 +f 701 729 730 +f 701 730 731 +f 701 731 702 +f 701 706 729 +f 702 732 733 +f 702 733 734 +f 702 734 735 +f 702 735 736 +f 702 736 707 +f 702 731 732 +f 704 710 705 +f 705 710 706 +f 706 710 737 +f 706 737 729 +f 710 713 737 +f 711 728 712 +f 711 712 714 +f 712 738 713 +f 712 728 739 +f 712 739 738 +f 713 738 737 +f 715 717 716 +f 718 740 721 +f 718 721 719 +f 719 721 720 +f 721 740 741 +f 721 741 742 +f 721 742 743 +f 721 743 744 +f 721 744 745 +f 721 745 746 +f 721 746 722 +f 722 746 747 +f 722 747 748 +f 722 748 749 +f 722 749 723 +f 723 749 750 +f 723 750 725 +f 723 725 724 +f 725 750 751 +f 725 751 726 +f 726 751 752 +f 726 752 727 +f 727 753 754 +f 727 754 755 +f 727 755 756 +f 727 756 757 +f 727 757 758 +f 727 758 759 +f 727 759 728 +f 727 752 751 +f 727 751 753 +f 728 759 739 +f 729 760 761 +f 729 761 762 +f 729 762 730 +f 729 737 763 +f 729 763 764 +f 729 764 765 +f 729 765 766 +f 729 766 767 +f 729 767 768 +f 729 768 760 +f 730 732 731 +f 730 762 761 +f 730 761 769 +f 730 769 770 +f 730 770 771 +f 730 771 733 +f 730 733 732 +f 733 771 770 +f 734 736 735 +f 737 738 772 +f 737 772 763 +f 738 739 772 +f 739 763 772 +f 739 759 763 +f 740 742 741 +f 744 773 774 +f 744 774 747 +f 744 747 745 +f 745 747 746 +f 747 774 773 +f 747 773 775 +f 747 775 776 +f 747 776 777 +f 747 777 748 +f 748 777 776 +f 748 776 778 +f 748 778 779 +f 748 779 780 +f 748 780 781 +f 748 781 749 +f 749 781 782 +f 749 782 750 +f 750 782 783 +f 750 783 751 +f 751 783 754 +f 751 754 753 +f 754 783 784 +f 754 784 755 +f 755 784 783 +f 755 783 785 +f 755 785 786 +f 755 786 756 +f 756 786 787 +f 756 787 788 +f 756 788 789 +f 756 789 790 +f 756 790 757 +f 757 790 791 +f 757 791 792 +f 757 792 793 +f 757 793 768 +f 757 768 767 +f 757 767 758 +f 758 794 763 +f 758 763 759 +f 758 767 765 +f 758 765 764 +f 758 764 794 +f 760 795 796 +f 760 796 797 +f 760 797 761 +f 760 768 798 +f 760 798 799 +f 760 799 795 +f 761 797 800 +f 761 800 801 +f 761 801 802 +f 761 802 803 +f 761 803 804 +f 761 804 769 +f 763 794 764 +f 765 767 766 +f 768 793 798 +f 775 805 806 +f 775 806 776 +f 776 807 808 +f 776 808 778 +f 776 806 805 +f 776 805 807 +f 778 808 809 +f 778 809 810 +f 778 810 786 +f 778 786 779 +f 779 786 785 +f 779 785 783 +f 779 783 782 +f 779 782 781 +f 779 781 780 +f 786 810 787 +f 787 810 788 +f 788 810 789 +f 789 810 790 +f 790 810 791 +f 791 811 792 +f 791 810 811 +f 792 811 798 +f 792 798 793 +f 795 812 810 +f 795 810 813 +f 795 813 814 +f 795 814 796 +f 795 799 815 +f 795 815 812 +f 796 800 797 +f 796 814 813 +f 796 813 816 +f 796 816 817 +f 796 817 818 +f 796 818 801 +f 796 801 800 +f 798 811 812 +f 798 812 799 +f 799 812 815 +f 802 804 803 +f 805 819 807 +f 807 809 808 +f 807 819 809 +f 809 813 820 +f 809 820 810 +f 809 819 821 +f 809 821 822 +f 809 822 823 +f 809 823 813 +f 810 820 813 +f 810 812 811 +f 813 823 824 +f 813 824 825 +f 813 825 826 +f 813 826 827 +f 813 827 816 +f 816 818 817 +f 819 822 821 +f 824 826 825 \ No newline at end of file diff --git a/src/experiments/assets/robots/xarm7/meshes/collision/link_base.obj.convex.stl b/src/experiments/assets/robots/xarm7/meshes/collision/link_base.obj.convex.stl new file mode 100644 index 0000000000000000000000000000000000000000..cea5f2f9c11ef9a2712a0d88135177aea1d181da --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/collision/link_base.obj.convex.stl @@ -0,0 +1,1618 @@ +solid AssimpScene + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.0464005359 0.0101169897 0.154799998 + vertex -0.0474977903 -0.000455630012 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.0474977903 -0.000455630012 0.154799998 + vertex -0.046195969 -0.0110096596 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.046195969 -0.0110096596 0.154799998 + vertex -0.04258807 -0.0210150704 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.04258807 -0.0210150704 0.154799998 + vertex -0.0368414707 -0.0299697202 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.0368414707 -0.0299697202 0.154799998 + vertex -0.0292537306 -0.0374179818 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.0292537306 -0.0374179818 0.154799998 + vertex -0.0201874897 -0.0429879092 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.0201874897 -0.0429879092 0.154799998 + vertex -0.0101169897 -0.0464005284 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.0101169897 -0.0464005284 0.154799998 + vertex 0.000455639994 -0.0474977791 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.000455639994 -0.0474977791 0.154799998 + vertex 0.0110096699 -0.0461959578 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.0110096699 -0.0461959578 0.154799998 + vertex 0.0210150704 -0.0425880589 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.0210150704 -0.0425880589 0.154799998 + vertex 0.0299697202 -0.0368414596 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.0299697202 -0.0368414596 0.154799998 + vertex 0.0374179892 -0.0292537194 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.0374179892 -0.0292537194 0.154799998 + vertex 0.0429879054 -0.0201874804 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.0429879054 -0.0201874804 0.154799998 + vertex 0.0464005359 -0.0101169897 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.0464005359 -0.0101169897 0.154799998 + vertex 0.0474977791 0.000455639965 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.0474977791 0.000455639965 0.154799998 + vertex 0.046195969 0.0110096689 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.046195969 0.0110096689 0.154799998 + vertex 0.04258807 0.0210150797 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.04258807 0.0210150797 0.154799998 + vertex 0.0368414707 0.0299697295 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.0368414707 0.0299697295 0.154799998 + vertex 0.0292537306 0.0374179892 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.0292537306 0.0374179892 0.154799998 + vertex 0.0201874897 0.0429879092 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.0201874897 0.0429879092 0.154799998 + vertex 0.0101169897 0.0464005284 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex 0.0101169897 0.0464005284 0.154799998 + vertex -0.000455639994 0.0474977791 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.000455639994 0.0474977791 0.154799998 + vertex -0.0110096699 0.0461959653 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.0110096699 0.0461959653 0.154799998 + vertex -0.0210150704 0.04258807 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.0210150704 0.04258807 0.154799998 + vertex -0.0299697295 0.0368414707 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.0299697295 0.0368414707 0.154799998 + vertex -0.0374179892 0.0292537306 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0210150704 0.04258807 0.154799998 + vertex -0.0288648773 0.0559945293 0.0089991102 + vertex -0.0898489207 0.02154826 0.027316628 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.056386929 0.0257525481 -0 + vertex -0.0619184487 0.00294773001 -0 + vertex -0.0923057497 0.0152439903 0.0203252397 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0923057497 0.00903323013 0.0206481889 + vertex -0.0923057497 0.0152439903 0.0203252397 + vertex -0.0619184487 0.00294773001 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0923057497 0.00903323013 0.0206481889 + vertex -0.0619184487 0.00294773001 -0 + vertex -0.0585798286 -0.0202764291 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0177402608 0.060446959 0.0089991102 + vertex -0.0234072898 0.0584859103 0.00100001995 + vertex -0.0288648773 0.0559945293 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0288648773 0.0559945293 0.0089991102 + vertex -0.0210150704 0.04258807 0.154799998 + vertex -0.0110096699 0.0461959653 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0288648773 0.0559945293 0.0089991102 + vertex -0.0110096699 0.0461959653 0.154799998 + vertex -0.0177402608 0.060446959 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0923057497 0.0194049999 0.0288154893 + vertex -0.0923057497 0.0193508696 0.0249968488 + vertex -0.0923057497 0.0152439903 0.0203252397 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0923057497 0.0194049999 0.0288154893 + vertex -0.0923057497 0.0152439903 0.0203252397 + vertex -0.0923057497 0.00903323013 0.0206481889 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0923057497 0.0194049999 0.0288154893 + vertex -0.0923057497 0.00903323013 0.0206481889 + vertex -0.0923098102 0.00543325022 0.0257240888 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0923057497 0.0194049999 0.0288154893 + vertex -0.0923098102 0.00543325022 0.0257240888 + vertex -0.0923057497 0.00761095015 0.032200247 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0923057497 0.0194049999 0.0288154893 + vertex -0.0923057497 0.00761095015 0.032200247 + vertex -0.0923057497 0.0144688692 0.0338618085 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0595284402 0.0205971096 0.0089991102 + vertex 0.0572985895 0.0261595603 0.00100001995 + vertex 0.0545513146 0.0314876698 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0595284402 0.0205971096 0.0089991102 + vertex 0.0545513146 0.0314876698 0.0089991102 + vertex 0.04258807 0.0210150797 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0595284402 0.0205971096 0.0089991102 + vertex 0.04258807 0.0210150797 0.154799998 + vertex 0.046195969 0.0110096689 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0288648903 -0.0559945218 0.00100001995 + vertex 0.0234072991 -0.0584858991 0.0089991102 + vertex 0.0177402701 -0.0604469515 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0513112508 0.0365321115 0.00100001995 + vertex 0.0545513146 0.0314876698 0.0089991102 + vertex 0.0572985895 0.0261595603 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0923057497 0.00761095015 0.032200247 + vertex -0.0923098102 0.00543325022 0.0257240888 + vertex -0.0804299116 -0.0175969899 0.0270997584 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0340514518 -0.0529974513 0.0089991102 + vertex -0.0288648773 -0.0559945218 0.00100001995 + vertex -0.0234072898 -0.0584858991 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0340514518 -0.0529974513 0.0089991102 + vertex -0.0234072898 -0.0584858991 0.0089991102 + vertex -0.0201874897 -0.0429879092 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0292537306 -0.0374179818 0.154799998 + vertex -0.0368414707 -0.0299697202 0.154799998 + vertex -0.0804299116 -0.0175969899 0.0270997584 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0292537306 -0.0374179818 0.154799998 + vertex -0.0804299116 -0.0175969899 0.0270997584 + vertex -0.0340514518 -0.0529974513 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0292537306 -0.0374179818 0.154799998 + vertex -0.0340514518 -0.0529974513 0.0089991102 + vertex -0.0201874897 -0.0429879092 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0299697202 -0.0368414596 0.154799998 + vertex 0.0434636511 -0.0455849618 0.0089991102 + vertex 0.0374179892 -0.0292537194 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0110096699 -0.0461959578 0.154799998 + vertex 0.0234072991 -0.0584858991 0.0089991102 + vertex 0.0210150704 -0.0425880589 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0101169897 0.0464005284 0.154799998 + vertex 0.0201874897 0.0429879092 0.154799998 + vertex 0.0177402701 0.060446959 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0299697295 0.0368414707 0.154799998 + vertex -0.0210150704 0.04258807 0.154799998 + vertex -0.0898489207 0.02154826 0.027316628 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0299697295 0.0368414707 0.154799998 + vertex -0.0898489207 0.02154826 0.027316628 + vertex -0.0923057497 0.0194049999 0.0288154893 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0299697295 0.0368414707 0.154799998 + vertex -0.0923057497 0.0194049999 0.0288154893 + vertex -0.0374179892 0.0292537306 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0804270208 -0.0150483605 0.0225848984 + vertex -0.0804299116 -0.0175969899 0.0270997584 + vertex -0.0923098102 0.00543325022 0.0257240888 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0804270208 -0.0150483605 0.0225848984 + vertex -0.0923098102 0.00543325022 0.0257240888 + vertex -0.0923057497 0.00903323013 0.0206481889 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0804270208 -0.0150483605 0.0225848984 + vertex -0.0476030409 -0.041255869 0.00100001995 + vertex -0.0804299116 -0.0175969899 0.0270997584 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.04258807 -0.0210150704 0.154799998 + vertex -0.046195969 -0.0110096596 0.154799998 + vertex -0.0923057497 0.00761095015 0.032200247 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.04258807 -0.0210150704 0.154799998 + vertex -0.0923057497 0.00761095015 0.032200247 + vertex -0.0804299116 -0.0175969899 0.0270997584 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.04258807 -0.0210150704 0.154799998 + vertex -0.0804299116 -0.0175969899 0.0270997584 + vertex -0.0368414707 -0.0299697202 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0177402608 -0.0604469515 0.00100001995 + vertex -0.0234072898 -0.0584858991 0.0089991102 + vertex -0.0288648773 -0.0559945218 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0389423408 -0.0495193787 0.00100001995 + vertex -0.0288648773 -0.0559945218 0.00100001995 + vertex -0.0340514518 -0.0529974513 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0389423408 -0.0495193787 0.00100001995 + vertex -0.0340514518 -0.0529974513 0.0089991102 + vertex -0.0804299116 -0.0175969899 0.0270997584 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0389423408 -0.0495193787 0.00100001995 + vertex -0.0804299116 -0.0175969899 0.0270997584 + vertex -0.0476030409 -0.041255869 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0612162389 0.0148496488 0.00100001995 + vertex 0.0572985895 0.0261595603 0.00100001995 + vertex 0.0595284402 0.0205971096 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00598734012 -0.0627039894 0.00100001995 + vertex 0 -0.063000001 0.0089991102 + vertex -0.00598734012 -0.0627039894 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0623496398 -0.00895418972 0.00100001995 + vertex 0.0612162389 -0.0148496404 0.0089991102 + vertex 0.0595284402 -0.0205971003 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0923057497 0.0193508696 0.0249968488 + vertex -0.0923057497 0.0194049999 0.0288154893 + vertex -0.0898489207 0.02154826 0.027316628 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0923057497 0.0193508696 0.0249968488 + vertex -0.0434636436 0.0455849692 0.00100001995 + vertex -0.0923057497 0.0152439903 0.0203252397 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119130798 0.0618529879 0.00100001995 + vertex 0.0177402701 0.060446959 0.0089991102 + vertex 0.0234072991 0.0584859103 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0119130798 0.0618529879 0.00100001995 + vertex -0.0234072898 0.0584859103 0.00100001995 + vertex -0.0177402608 0.060446959 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0898489207 0.02154826 0.027316628 + vertex -0.0288648773 0.0559945293 0.0089991102 + vertex -0.0234072898 0.0584859103 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0898489207 0.02154826 0.027316628 + vertex -0.0234072898 0.0584859103 0.00100001995 + vertex -0.0340514518 0.0529974587 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0340514518 0.0529974587 0.00100001995 + vertex -0.0434636436 0.0455849692 0.00100001995 + vertex -0.0923057497 0.0193508696 0.0249968488 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0340514518 0.0529974587 0.00100001995 + vertex -0.0923057497 0.0193508696 0.0249968488 + vertex -0.0898489207 0.02154826 0.027316628 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0474977903 -0.000455630012 0.154799998 + vertex -0.0464005359 0.0101169897 0.154799998 + vertex -0.0923057497 0.0144688692 0.0338618085 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0474977903 -0.000455630012 0.154799998 + vertex -0.0923057497 0.0144688692 0.0338618085 + vertex -0.0923057497 0.00761095015 0.032200247 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0474977903 -0.000455630012 0.154799998 + vertex -0.0923057497 0.00761095015 0.032200247 + vertex -0.046195969 -0.0110096596 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.0374179892 0.0292537306 0.154799998 + vertex -0.0923057497 0.0194049999 0.0288154893 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.0923057497 0.0194049999 0.0288154893 + vertex -0.0923057497 0.0144688692 0.0338618085 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0429879203 0.0201874897 0.154799998 + vertex -0.0923057497 0.0144688692 0.0338618085 + vertex -0.0464005359 0.0101169897 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0340514593 -0.0529974513 0.0089991102 + vertex 0.0434636511 -0.0455849618 0.0089991102 + vertex 0.0299697202 -0.0368414596 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0340514593 -0.0529974513 0.0089991102 + vertex 0.0299697202 -0.0368414596 0.154799998 + vertex 0.0210150704 -0.0425880589 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0340514593 -0.0529974513 0.0089991102 + vertex 0.0210150704 -0.0425880589 0.154799998 + vertex 0.0234072991 -0.0584858991 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0340514593 -0.0529974513 0.0089991102 + vertex 0.0234072991 -0.0584858991 0.0089991102 + vertex 0.0288648903 -0.0559945218 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389423482 0.0495193899 0.0089991102 + vertex 0.0292537306 0.0374179892 0.154799998 + vertex 0.0368414707 0.0299697295 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389423482 0.0495193899 0.0089991102 + vertex 0.0368414707 0.0299697295 0.154799998 + vertex 0.0476030484 0.0412558801 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0476030484 0.0412558801 0.0089991102 + vertex 0.0368414707 0.0299697295 0.154799998 + vertex 0.04258807 0.0210150797 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0476030484 0.0412558801 0.0089991102 + vertex 0.04258807 0.0210150797 0.154799998 + vertex 0.0545513146 0.0314876698 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0476030484 0.0412558801 0.0089991102 + vertex 0.0545513146 0.0314876698 0.0089991102 + vertex 0.0513112508 0.0365321115 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00598734012 0.0627039969 0.0089991102 + vertex -0.000455639994 0.0474977791 0.154799998 + vertex 0.0101169897 0.0464005284 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00598734012 0.0627039969 0.0089991102 + vertex 0.0101169897 0.0464005284 0.154799998 + vertex 0.0177402701 0.060446959 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00598734012 0.0627039969 0.0089991102 + vertex 0.0177402701 0.060446959 0.0089991102 + vertex 0.0119130798 0.0618529879 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00598734012 0.0627039969 0.0089991102 + vertex 0.0119130798 0.0618529879 0.00100001995 + vertex 0 0.0630000085 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0623496398 0.00895418972 0.0089991102 + vertex 0.0629286617 0.00299707009 0.00100001995 + vertex 0.0612162389 0.0148496488 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0623496398 0.00895418972 0.0089991102 + vertex 0.0612162389 0.0148496488 0.00100001995 + vertex 0.0595284402 0.0205971096 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0623496398 0.00895418972 0.0089991102 + vertex 0.0595284402 0.0205971096 0.0089991102 + vertex 0.046195969 0.0110096689 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0623496398 0.00895418972 0.0089991102 + vertex 0.046195969 0.0110096689 0.154799998 + vertex 0.0474977791 0.000455639965 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0288648903 0.0559945293 0.0089991102 + vertex 0.0201874897 0.0429879092 0.154799998 + vertex 0.0292537306 0.0374179892 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0288648903 0.0559945293 0.0089991102 + vertex 0.0292537306 0.0374179892 0.154799998 + vertex 0.0389423482 0.0495193899 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0288648903 0.0559945293 0.0089991102 + vertex 0.0389423482 0.0495193899 0.0089991102 + vertex 0.0340514593 0.0529974587 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0288648903 0.0559945293 0.0089991102 + vertex 0.0340514593 0.0529974587 0.00100001995 + vertex 0.0234072991 0.0584859103 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0288648903 0.0559945293 0.0089991102 + vertex 0.0234072991 0.0584859103 0.00100001995 + vertex 0.0177402701 0.060446959 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0288648903 0.0559945293 0.0089991102 + vertex 0.0177402701 0.060446959 0.0089991102 + vertex 0.0201874897 0.0429879092 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00598734012 0.0627039969 0.0089991102 + vertex 0 0.0630000085 0.00100001995 + vertex -0.0119130798 0.0618529879 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00598734012 0.0627039969 0.0089991102 + vertex -0.0119130798 0.0618529879 0.00100001995 + vertex -0.0177402608 0.060446959 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00598734012 0.0627039969 0.0089991102 + vertex -0.0177402608 0.060446959 0.0089991102 + vertex -0.0110096699 0.0461959653 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00598734012 0.0627039969 0.0089991102 + vertex -0.0110096699 0.0461959653 0.154799998 + vertex -0.000455639994 0.0474977791 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00598734012 0.0627039969 0.0089991102 + vertex -0.000455639994 0.0474977791 0.154799998 + vertex 0.00598734012 0.0627039969 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.00598734012 0.0627039969 0.0089991102 + vertex 0.00598734012 0.0627039969 0.0089991102 + vertex 0 0.0630000085 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119130798 -0.0618529767 0.0089991102 + vertex 0.0110096699 -0.0461959578 0.154799998 + vertex 0.000455639994 -0.0474977791 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119130798 -0.0618529767 0.0089991102 + vertex 0.000455639994 -0.0474977791 0.154799998 + vertex 0 -0.063000001 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119130798 -0.0618529767 0.0089991102 + vertex 0 -0.063000001 0.0089991102 + vertex 0.00598734012 -0.0627039894 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119130798 -0.0618529767 0.0089991102 + vertex 0.00598734012 -0.0627039894 0.00100001995 + vertex 0.0177402701 -0.0604469515 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119130798 -0.0618529767 0.0089991102 + vertex 0.0177402701 -0.0604469515 0.00100001995 + vertex 0.0234072991 -0.0584858991 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0119130798 -0.0618529767 0.0089991102 + vertex 0.0234072991 -0.0584858991 0.0089991102 + vertex 0.0110096699 -0.0461959578 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0119130798 -0.0618529767 0.0089991102 + vertex -0.0101169897 -0.0464005284 0.154799998 + vertex -0.0201874897 -0.0429879092 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0119130798 -0.0618529767 0.0089991102 + vertex -0.0201874897 -0.0429879092 0.154799998 + vertex -0.0234072898 -0.0584858991 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0119130798 -0.0618529767 0.0089991102 + vertex -0.0234072898 -0.0584858991 0.0089991102 + vertex -0.0177402608 -0.0604469515 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0119130798 -0.0618529767 0.0089991102 + vertex -0.0177402608 -0.0604469515 0.00100001995 + vertex -0.00598734012 -0.0627039894 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0119130798 -0.0618529767 0.0089991102 + vertex -0.00598734012 -0.0627039894 0.00100001995 + vertex 0 -0.063000001 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0 -0.063000001 0.0089991102 + vertex 0.000455639994 -0.0474977791 0.154799998 + vertex -0.0101169897 -0.0464005284 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0 -0.063000001 0.0089991102 + vertex -0.0101169897 -0.0464005284 0.154799998 + vertex -0.0119130798 -0.0618529767 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0513112508 -0.0365321003 0.0089991102 + vertex 0.0374179892 -0.0292537194 0.154799998 + vertex 0.0434636511 -0.0455849618 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0513112508 -0.0365321003 0.0089991102 + vertex 0.0434636511 -0.0455849618 0.0089991102 + vertex 0.0476030484 -0.041255869 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0513112508 -0.0365321003 0.0089991102 + vertex 0.0476030484 -0.041255869 0.00100001995 + vertex 0.0545513146 -0.0315000005 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0629163384 -0.00299706007 0.0089991102 + vertex 0.0474977791 0.000455639965 0.154799998 + vertex 0.0464005359 -0.0101169897 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0629163384 -0.00299706007 0.0089991102 + vertex 0.0464005359 -0.0101169897 0.154799998 + vertex 0.0612162389 -0.0148496404 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0629163384 -0.00299706007 0.0089991102 + vertex 0.0612162389 -0.0148496404 0.0089991102 + vertex 0.0623496398 -0.00895418972 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0629163384 -0.00299706007 0.0089991102 + vertex 0.0623496398 -0.00895418972 0.00100001995 + vertex 0.0629286617 0.00299707009 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0629163384 -0.00299706007 0.0089991102 + vertex 0.0629286617 0.00299707009 0.00100001995 + vertex 0.0623496398 0.00895418972 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0629163384 -0.00299706007 0.0089991102 + vertex 0.0623496398 0.00895418972 0.0089991102 + vertex 0.0474977791 0.000455639965 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0572985895 -0.0261595491 0.0089991102 + vertex 0.0545513146 -0.0315000005 0.00100001995 + vertex 0.0595284402 -0.0205971003 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0572985895 -0.0261595491 0.0089991102 + vertex 0.0595284402 -0.0205971003 0.00100001995 + vertex 0.0612162389 -0.0148496404 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0572985895 -0.0261595491 0.0089991102 + vertex 0.0612162389 -0.0148496404 0.0089991102 + vertex 0.0464005359 -0.0101169897 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0572985895 -0.0261595491 0.0089991102 + vertex 0.0464005359 -0.0101169897 0.154799998 + vertex 0.0429879054 -0.0201874804 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0572985895 -0.0261595491 0.0089991102 + vertex 0.0429879054 -0.0201874804 0.154799998 + vertex 0.0374179892 -0.0292537194 0.154799998 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0572985895 -0.0261595491 0.0089991102 + vertex 0.0374179892 -0.0292537194 0.154799998 + vertex 0.0513112508 -0.0365321003 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0572985895 -0.0261595491 0.0089991102 + vertex 0.0513112508 -0.0365321003 0.0089991102 + vertex 0.0545513146 -0.0315000005 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0545513146 -0.0314876586 0.00100001995 + vertex -0.0476030409 -0.041255869 0.00100001995 + vertex -0.0804270208 -0.0150483605 0.0225848984 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0545513146 -0.0314876586 0.00100001995 + vertex -0.0804270208 -0.0150483605 0.0225848984 + vertex -0.0923057497 0.00903323013 0.0206481889 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0545513146 -0.0314876586 0.00100001995 + vertex -0.0923057497 0.00903323013 0.0206481889 + vertex -0.0585798286 -0.0202764291 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0117282802 0.060878627 -0 + vertex -0.0234072898 0.0584859103 0.00100001995 + vertex -0.0119130798 0.0618529879 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0117282802 0.060878627 -0 + vertex -0.0119130798 0.0618529879 0.00100001995 + vertex 0 0.0630000085 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0174569096 -0.0594849288 -0 + vertex -0.00598734012 -0.0627039894 0.00100001995 + vertex -0.0177402608 -0.0604469515 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0174569096 -0.0594849288 -0 + vertex -0.0177402608 -0.0604469515 0.00100001995 + vertex -0.0288648773 -0.0559945218 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0613640696 -0.00881852023 -0 + vertex 0.0629286617 0.00299707009 0.00100001995 + vertex 0.0623496398 -0.00895418972 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0613640696 -0.00881852023 -0 + vertex 0.0623496398 -0.00895418972 0.00100001995 + vertex 0.0595284402 -0.0205971003 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389423482 -0.0495193787 0.00100001995 + vertex 0.0434636511 -0.0455849618 0.0089991102 + vertex 0.0340514593 -0.0529974513 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389423482 -0.0495193787 0.00100001995 + vertex 0.0340514593 -0.0529974513 0.0089991102 + vertex 0.0288648903 -0.0559945218 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389423482 -0.0495193787 0.00100001995 + vertex 0.0288648903 -0.0559945218 0.00100001995 + vertex 0.0383140408 -0.0487300307 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389423482 -0.0495193787 0.00100001995 + vertex 0.0383140408 -0.0487300307 -0 + vertex 0.0476030484 -0.041255869 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0389423482 -0.0495193787 0.00100001995 + vertex 0.0476030484 -0.041255869 0.00100001995 + vertex 0.0434636511 -0.0455849618 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0434636511 0.0455849692 0.00100001995 + vertex 0.0389423482 0.0495193899 0.0089991102 + vertex 0.0476030484 0.0412558801 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0434636511 0.0455849692 0.00100001995 + vertex 0.0476030484 0.0412558801 0.0089991102 + vertex 0.0513112508 0.0365321115 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0434636511 0.0455849692 0.00100001995 + vertex 0.0513112508 0.0365321115 0.00100001995 + vertex 0.0427737497 0.0448696204 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0434636511 0.0455849692 0.00100001995 + vertex 0.0427737497 0.0448696204 -0 + vertex 0.0340514593 0.0529974587 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0434636511 0.0455849692 0.00100001995 + vertex 0.0340514593 0.0529974587 0.00100001995 + vertex 0.0389423482 0.0495193899 0.0089991102 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0117282895 0.060878627 -0 + vertex 0.0234072991 0.0584859103 0.00100001995 + vertex 0.0340514593 0.0529974587 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0117282895 0.060878627 -0 + vertex 0.0340514593 0.0529974587 0.00100001995 + vertex 0.0427737497 0.0448696204 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0117282895 0.060878627 -0 + vertex -0.0117282802 0.060878627 -0 + vertex 0 0.0630000085 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0117282895 0.060878627 -0 + vertex 0 0.0630000085 0.00100001995 + vertex 0.0119130798 0.0618529879 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0117282895 0.060878627 -0 + vertex 0.0119130798 0.0618529879 0.00100001995 + vertex 0.0234072991 0.0584859103 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00588878989 -0.0617173091 -0 + vertex 0.00598734012 -0.0627039894 0.00100001995 + vertex -0.00598734012 -0.0627039894 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00588878989 -0.0617173091 -0 + vertex -0.00598734012 -0.0627039894 0.00100001995 + vertex -0.0174569096 -0.0594849288 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0383140408 -0.0487300307 -0 + vertex 0.0288648903 -0.0559945218 0.00100001995 + vertex 0.0177402701 -0.0604469515 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0383140408 -0.0487300307 -0 + vertex 0.0177402701 -0.0604469515 0.00100001995 + vertex 0.00588878989 -0.0617173091 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.00588878989 -0.0617173091 -0 + vertex 0.0177402701 -0.0604469515 0.00100001995 + vertex 0.00598734012 -0.0627039894 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0431926101 -0.0440925993 -0 + vertex -0.0174569096 -0.0594849288 -0 + vertex -0.0288648773 -0.0559945218 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0431926101 -0.0440925993 -0 + vertex -0.0288648773 -0.0559945218 0.00100001995 + vertex -0.0389423408 -0.0495193787 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0431926101 -0.0440925993 -0 + vertex -0.0389423408 -0.0495193787 0.00100001995 + vertex -0.0476030409 -0.041255869 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0431926101 -0.0440925993 -0 + vertex -0.0476030409 -0.041255869 0.00100001995 + vertex -0.0545513146 -0.0314876586 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0431926101 -0.0440925993 -0 + vertex -0.0545513146 -0.0314876586 0.00100001995 + vertex -0.0585798286 -0.0202764291 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0427737385 0.0448696204 -0 + vertex -0.0340514518 0.0529974587 0.00100001995 + vertex -0.0234072898 0.0584859103 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0427737385 0.0448696204 -0 + vertex -0.0234072898 0.0584859103 0.00100001995 + vertex -0.0117282802 0.060878627 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0427737385 0.0448696204 -0 + vertex -0.0434636436 0.0455849692 0.00100001995 + vertex -0.0340514518 0.0529974587 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0570275597 0.0239025075 -0 + vertex 0.0612162389 0.0148496488 0.00100001995 + vertex 0.0629286617 0.00299707009 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0570275597 0.0239025075 -0 + vertex 0.0629286617 0.00299707009 0.00100001995 + vertex 0.0613640696 -0.00881852023 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0570275597 0.0239025075 -0 + vertex 0.0427737497 0.0448696204 -0 + vertex 0.0513112508 0.0365321115 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0570275597 0.0239025075 -0 + vertex 0.0513112508 0.0365321115 0.00100001995 + vertex 0.0572985895 0.0261595603 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0570275597 0.0239025075 -0 + vertex 0.0572985895 0.0261595603 0.00100001995 + vertex 0.0612162389 0.0148496488 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0536889397 -0.0309943184 -0 + vertex 0.0613640696 -0.00881852023 -0 + vertex 0.0595284402 -0.0205971003 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0536889397 -0.0309943184 -0 + vertex 0.0595284402 -0.0205971003 0.00100001995 + vertex 0.0545513146 -0.0315000005 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0536889397 -0.0309943184 -0 + vertex 0.0545513146 -0.0315000005 0.00100001995 + vertex 0.0476030484 -0.041255869 0.00100001995 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex 0.0536889397 -0.0309943184 -0 + vertex 0.0476030484 -0.041255869 0.00100001995 + vertex 0.0383140408 -0.0487300307 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0923057497 0.0152439903 0.0203252397 + vertex -0.0434636436 0.0455849692 0.00100001995 + vertex -0.0427737385 0.0448696204 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0923057497 0.0152439903 0.0203252397 + vertex -0.0427737385 0.0448696204 -0 + vertex -0.0504981503 0.0359524302 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex -0.0427737385 0.0448696204 -0 + vertex -0.0117282802 0.060878627 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex -0.0117282802 0.060878627 -0 + vertex 0.0117282895 0.060878627 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex 0.0117282895 0.060878627 -0 + vertex 0.0427737497 0.0448696204 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex 0.0427737497 0.0448696204 -0 + vertex 0.0570275597 0.0239025075 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex 0.0570275597 0.0239025075 -0 + vertex 0.0613640696 -0.00881852023 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex 0.0613640696 -0.00881852023 -0 + vertex 0.0536889397 -0.0309943184 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex 0.0536889397 -0.0309943184 -0 + vertex 0.0383140408 -0.0487300307 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex 0.0383140408 -0.0487300307 -0 + vertex 0.00588878989 -0.0617173091 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex 0.00588878989 -0.0617173091 -0 + vertex -0.0174569096 -0.0594849288 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex -0.0174569096 -0.0594849288 -0 + vertex -0.0431926101 -0.0440925993 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex -0.0431926101 -0.0440925993 -0 + vertex -0.0585798286 -0.0202764291 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex -0.0585798286 -0.0202764291 -0 + vertex -0.0619184487 0.00294773001 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex -0.0619184487 0.00294773001 -0 + vertex -0.056386929 0.0257525481 -0 + endloop + endfacet + + facet normal 0 0 0 + outer loop + vertex -0.0504981503 0.0359524302 -0 + vertex -0.056386929 0.0257525481 -0 + vertex -0.0923057497 0.0152439903 0.0203252397 + endloop + endfacet + +endsolid AssimpScene diff --git a/src/experiments/assets/robots/xarm7/meshes/visual/link1.glb b/src/experiments/assets/robots/xarm7/meshes/visual/link1.glb new file mode 100644 index 0000000000000000000000000000000000000000..cdbe3816d0adb043ff3d6f586638805a8cf65ab3 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/visual/link1.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cacc86a7715434ea829df2b769c74897fae02621dfb3cfc1dd091e7fb09ec867 +size 285308 diff --git a/src/experiments/assets/robots/xarm7/meshes/visual/link2.glb b/src/experiments/assets/robots/xarm7/meshes/visual/link2.glb new file mode 100644 index 0000000000000000000000000000000000000000..d470dd8ff6e2f5991e186201fa26a3f63c8b1985 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/visual/link2.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05008cb4969ec3bfe74b1590b01996787674ff1061397e95db21a7e67a017641 +size 353388 diff --git a/src/experiments/assets/robots/xarm7/meshes/visual/link3.glb b/src/experiments/assets/robots/xarm7/meshes/visual/link3.glb new file mode 100644 index 0000000000000000000000000000000000000000..039326e3d8a6dde0caf5ff7dab25397d8986c1a7 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/visual/link3.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07bb8fc6ac49a49afed17489764e5ecb37dd262b1237945ee4b9094b74b68a07 +size 371424 diff --git a/src/experiments/assets/robots/xarm7/meshes/visual/link4.glb b/src/experiments/assets/robots/xarm7/meshes/visual/link4.glb new file mode 100644 index 0000000000000000000000000000000000000000..1c96377e86968c27e2eac3ee5350f96b7122c81f --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/visual/link4.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad096114f1f305f39a8ff8a2aed73050e2da708904ae5d957f7ca76fe5798106 +size 381572 diff --git a/src/experiments/assets/robots/xarm7/meshes/visual/link5.glb b/src/experiments/assets/robots/xarm7/meshes/visual/link5.glb new file mode 100644 index 0000000000000000000000000000000000000000..863e1932adfb560cf0720f904cbb8e692ec49f88 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/visual/link5.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2da0e51debf30a99634dccc960f77d4253194ce2f748c2ab48ae5244ab02facf +size 358824 diff --git a/src/experiments/assets/robots/xarm7/meshes/visual/link6.glb b/src/experiments/assets/robots/xarm7/meshes/visual/link6.glb new file mode 100644 index 0000000000000000000000000000000000000000..60aa2e58f5a70692065f285ee2461a241f738bb9 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/visual/link6.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16612a56f22d286a7e7ff7df3731bb557652c7a83f8b56055d59d1ab83d9f188 +size 621744 diff --git a/src/experiments/assets/robots/xarm7/meshes/visual/link7.glb b/src/experiments/assets/robots/xarm7/meshes/visual/link7.glb new file mode 100644 index 0000000000000000000000000000000000000000..5c195d9d6c4da0adf6a4fc95b9cee007e80b7443 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/visual/link7.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6996ad0023afdb45496e2dad384c814743d2fcf4ea49fbd2ccef1e969452636b +size 336888 diff --git a/src/experiments/assets/robots/xarm7/meshes/visual/link_base.glb b/src/experiments/assets/robots/xarm7/meshes/visual/link_base.glb new file mode 100644 index 0000000000000000000000000000000000000000..8c85e679a56bc7621662fe017c8948bcaf8358b0 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/meshes/visual/link_base.glb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bdccb694dd55ef68c8b120d14f464a56c911ff4a55397b43bc19313b6184356b +size 467668 diff --git a/src/experiments/assets/robots/xarm7/xarm7.urdf b/src/experiments/assets/robots/xarm7/xarm7.urdf new file mode 100644 index 0000000000000000000000000000000000000000..659aa8d217591effde4b0dd17a7c6d6ff66ac4c4 --- /dev/null +++ b/src/experiments/assets/robots/xarm7/xarm7.urdf @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/experiments/cfg/default.yaml b/src/experiments/cfg/default.yaml new file mode 100644 index 0000000000000000000000000000000000000000..016330101898daba2695f1cd4a77806648492713 --- /dev/null +++ b/src/experiments/cfg/default.yaml @@ -0,0 +1,22 @@ +defaults: + - model: pgnd + - render: default + - sim: default + - train: default + - _self_ + - override hydra/job_logging: disabled + - override hydra/hydra_logging: disabled + +hydra: + output_subdir: null + run: + dir: . + +seed: 0 +cpu: 0 +num_cpus: 128 +gpus: + - 0 +overwrite: False +resume: False +debug: False diff --git a/src/experiments/cfg/model/friction/default.yaml b/src/experiments/cfg/model/friction/default.yaml new file mode 100644 index 0000000000000000000000000000000000000000..49d91e76adb91d6d51cf7aa937c7952fceffb112 --- /dev/null +++ b/src/experiments/cfg/model/friction/default.yaml @@ -0,0 +1,2 @@ +value: 0.0 +requires_grad: False \ No newline at end of file diff --git a/src/experiments/cfg/model/material/pointnet_nerf_material.yaml b/src/experiments/cfg/model/material/pointnet_nerf_material.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d42466b0f4875e640f765f5f9bcf681ab50441e9 --- /dev/null +++ b/src/experiments/cfg/model/material/pointnet_nerf_material.yaml @@ -0,0 +1,6 @@ +requires_grad: True +output_scale: 1.0 +input_scale: 2.0 +radius: 0.2 +absolute_y: False +pe_num_func_res: 0 \ No newline at end of file diff --git a/src/experiments/cfg/model/pgnd.yaml b/src/experiments/cfg/model/pgnd.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cd72da056c4f152716ccc6f796133b7adc9b4f3e --- /dev/null +++ b/src/experiments/cfg/model/pgnd.yaml @@ -0,0 +1,9 @@ +defaults: + - material: pointnet_nerf_material + - friction: default + - _self_ + +ckpt: null +clip_bound: 1.5 +eef_t: [0.0, 0.0, 0.01] +gripper_radius: 0.04 diff --git a/src/experiments/cfg/render/default.yaml b/src/experiments/cfg/render/default.yaml new file mode 100644 index 0000000000000000000000000000000000000000..6299b0a04e7d62ad18382242f7f97e62b35ec1ed --- /dev/null +++ b/src/experiments/cfg/render/default.yaml @@ -0,0 +1,11 @@ +width: 512 +height: 512 +skip_frame: 1 +bound: 1.5 +fps: 5 +radius_scale: 500 +center: [0.5, 0.3, 0.5] +distance: 1.4 +azimuth: -125 +elevation: 30 +reflectance: [0.92941176, 0.32941176, 0.23137255] diff --git a/src/experiments/cfg/sim/default.yaml b/src/experiments/cfg/sim/default.yaml new file mode 100644 index 0000000000000000000000000000000000000000..08510cf068e5f7fd9ebddee7d8eeac9cd7e7c56c --- /dev/null +++ b/src/experiments/cfg/sim/default.yaml @@ -0,0 +1,16 @@ +num_steps_train: 5 +num_steps: 1000 +interval: 1 +num_grids: [50, 50, 50, 0.02] +dt: 0.1 +bound: 3 +eps: 1e-7 +skip_frame: 1 +num_grippers: 1 +preprocess_scale: 1.0 +preprocess_with_table: True +n_particles: 1000 +gripper_forcing: True +gripper_points: False +n_history: 2 +uniform: False diff --git a/src/experiments/cfg/train/default.yaml b/src/experiments/cfg/train/default.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9e171e82792540c0f949a1b52d877d10d5926fe7 --- /dev/null +++ b/src/experiments/cfg/train/default.yaml @@ -0,0 +1,30 @@ +name: null +dataset_name: null +source_dataset_name: null + +num_iterations: 100000 +resume_iteration: 0 +batch_size: 32 +num_workers: 8 +material_lr: 1e-4 +material_wd: 0.0 +material_grad_max_norm: 0.1 +training_start_episode: 0 +training_end_episode: 1000 +eval_start_episode: 0 +eval_end_episode: 10 +iteration_log_interval: 10 +iteration_save_interval: 1000 +iteration_eval_interval: 10000 +loss_factor: 1.0 +loss_factor_v: 0.0 +loss_factor_x: 100.0 +friction_lr: 1e-1 +friction_wd: 0.0 +friction_grad_max_norm: 0.1 +dataset_load_skip_frame: 1 +dataset_skip_frame: 1 +downsample: False +use_pv: False +use_gs: False +dataset_non_overwrite: True diff --git a/src/experiments/log/gs/ckpts/gripper.splat b/src/experiments/log/gs/ckpts/gripper.splat new file mode 100644 index 0000000000000000000000000000000000000000..930a4616d408971f40cee1aaa3a0d4f4b8d31700 --- /dev/null +++ b/src/experiments/log/gs/ckpts/gripper.splat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7d10db6997fce298425e9b521b31f7d2ab41d661565859ed65d2e7ab88c09846 +size 185152 diff --git a/src/experiments/log/gs/ckpts/gripper_new.splat b/src/experiments/log/gs/ckpts/gripper_new.splat new file mode 100644 index 0000000000000000000000000000000000000000..f1fa8347325460b312d014f05b59114b00ccc345 --- /dev/null +++ b/src/experiments/log/gs/ckpts/gripper_new.splat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8590348b25a78a84996b4edb828e30c92e2022bc0c1da9ed66d387df766cd2c8 +size 1490624 diff --git a/src/experiments/log/gs/ckpts/rope_scene_1/eef_xyz.txt b/src/experiments/log/gs/ckpts/rope_scene_1/eef_xyz.txt new file mode 100644 index 0000000000000000000000000000000000000000..4da5e2fc9745916aad85958f3e4da0f5725217a2 --- /dev/null +++ b/src/experiments/log/gs/ckpts/rope_scene_1/eef_xyz.txt @@ -0,0 +1,3 @@ +2.209631912410259247e-02 +-7.354003190994262695e-02 +-1.669125705957412720e-01 diff --git a/src/experiments/log/gs/ckpts/rope_scene_1/gripper.splat b/src/experiments/log/gs/ckpts/rope_scene_1/gripper.splat new file mode 100644 index 0000000000000000000000000000000000000000..06e763b8b548e0942cab7924816495df4d3dddb5 --- /dev/null +++ b/src/experiments/log/gs/ckpts/rope_scene_1/gripper.splat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7fcc3fdb6643a5843ba2305d8a82a5ef94c456774b5b3832f349f2aaf713675f +size 1440256 diff --git a/src/experiments/log/gs/ckpts/rope_scene_1/object.splat b/src/experiments/log/gs/ckpts/rope_scene_1/object.splat new file mode 100644 index 0000000000000000000000000000000000000000..3649b7194649932b311f00a33e444dba6d90ca9f --- /dev/null +++ b/src/experiments/log/gs/ckpts/rope_scene_1/object.splat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:997050e4620130b3c17c42f57375c93dc356ae07479ea6dfbf3d07982ecc3bee +size 693952 diff --git a/src/experiments/log/gs/ckpts/rope_scene_1/table.splat b/src/experiments/log/gs/ckpts/rope_scene_1/table.splat new file mode 100644 index 0000000000000000000000000000000000000000..0960264b8c2d98bdfe99669327ff3d22d2fa86ff --- /dev/null +++ b/src/experiments/log/gs/ckpts/rope_scene_1/table.splat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e63f646874289b7946f7439b50ec5601237aa6a19b83d057f6a293bdfa9eddc8 +size 5541184 diff --git a/src/experiments/log/gs/ckpts/sphere.splat b/src/experiments/log/gs/ckpts/sphere.splat new file mode 100644 index 0000000000000000000000000000000000000000..2010c5f34fedc7002bc8fa9517673ccaaf296675 --- /dev/null +++ b/src/experiments/log/gs/ckpts/sphere.splat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:348e716fcd8c39d80d72b5b9e69e2e63abd8e419ef2844b41df6bb8f211bab69 +size 32000 diff --git a/src/experiments/log/gs/ckpts/table.splat b/src/experiments/log/gs/ckpts/table.splat new file mode 100644 index 0000000000000000000000000000000000000000..9763496908ee821f261c1ef0f0c2eaaf4eb4eb15 --- /dev/null +++ b/src/experiments/log/gs/ckpts/table.splat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36e2e200d2f104308be97898f44a670eeb5da19621da66767c59737f0bdb82ef +size 1280000 diff --git a/src/experiments/log/gs/temp/form_video.mp4 b/src/experiments/log/gs/temp/form_video.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..ea8587d9d2003de381e78bc0a3218e9d42a309b8 Binary files /dev/null and b/src/experiments/log/gs/temp/form_video.mp4 differ diff --git a/src/experiments/log/gs/temp/form_video_init.mp4 b/src/experiments/log/gs/temp/form_video_init.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..16d6812e2dac497b47498406758fdb1e61a13842 Binary files /dev/null and b/src/experiments/log/gs/temp/form_video_init.mp4 differ diff --git a/src/experiments/log/gs/temp/gs_pred.splat b/src/experiments/log/gs/temp/gs_pred.splat new file mode 100644 index 0000000000000000000000000000000000000000..6332138ca85effc58139c481bf28087d1d72edae --- /dev/null +++ b/src/experiments/log/gs/temp/gs_pred.splat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:68163f3a942c74e9b71c679a84d8a1cd5be2bc9e054e19f5d350071a3746f500 +size 7675392 diff --git a/src/experiments/log/rope/train/ckpt/100000.pt b/src/experiments/log/rope/train/ckpt/100000.pt new file mode 100644 index 0000000000000000000000000000000000000000..8758a21c2337ce26d61f8ad653c6e39e64d250ca --- /dev/null +++ b/src/experiments/log/rope/train/ckpt/100000.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaa05e84337cd94869d6359b6589e4bf7a0c0d386c85f8bd4fa8aa53d0f76262 +size 3374922 diff --git a/src/experiments/log/rope/train/hydra.yaml b/src/experiments/log/rope/train/hydra.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3e833a1d92860e321d1b9e54bf8317a010d145d2 --- /dev/null +++ b/src/experiments/log/rope/train/hydra.yaml @@ -0,0 +1,95 @@ +model: + material: + requires_grad: true + output_scale: 1.0 + input_scale: 2.0 + radius: 0.2 + absolute_y: false + pe_num_func_res: 0 + friction: + value: 0.0 + requires_grad: false + ckpt: null + clip_bound: 1.5 + eef_t: + - 0.0 + - 0.0 + - 0.01 + gripper_radius: 0.04 +render: + width: 512 + height: 512 + skip_frame: 1 + bound: 1.5 + fps: 5 + radius_scale: 500 + center: + - 0.5 + - 0.3 + - 0.5 + distance: 1.4 + azimuth: -125 + elevation: 30 + reflectance: + - 0.92941176 + - 0.32941176 + - 0.23137255 +sim: + num_steps_train: 5 + num_steps: 1000 + interval: 1 + num_grids: + - 50 + - 50 + - 50 + - 0.02 + dt: 0.1 + bound: 3 + eps: 1.0e-07 + skip_frame: 1 + num_grippers: 1 + preprocess_scale: 1.0 + preprocess_with_table: true + n_particles: 1000 + gripper_forcing: true + gripper_points: false + n_history: 2 + uniform: false +train: + name: rope/train + dataset_name: rope/dataset + source_dataset_name: data/rope_merged/sub_episodes_v + num_iterations: 100000 + resume_iteration: 0 + batch_size: 32 + num_workers: 8 + material_lr: 0.0001 + material_wd: 0.0 + material_grad_max_norm: 0.1 + training_start_episode: 0 + training_end_episode: 651 + eval_start_episode: 651 + eval_end_episode: 691 + iteration_log_interval: 10 + iteration_save_interval: 1000 + iteration_eval_interval: 10000 + loss_factor: 1.0 + loss_factor_v: 0.0 + loss_factor_x: 100.0 + friction_lr: 0.1 + friction_wd: 0.0 + friction_grad_max_norm: 0.1 + dataset_load_skip_frame: 3 + dataset_skip_frame: 1 + downsample: false + use_pv: false + use_gs: false + dataset_non_overwrite: true +seed: 0 +cpu: 0 +num_cpus: 128 +gpus: +- 0 +overwrite: false +resume: true +debug: false diff --git a/src/experiments/log/temp/0000.png b/src/experiments/log/temp/0000.png new file mode 100644 index 0000000000000000000000000000000000000000..e3c839f62a528be47ae71a6d2ee939488fefbff1 --- /dev/null +++ b/src/experiments/log/temp/0000.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:77b3cfbc740682e220917dbc11f617077f5f1b7f3897565aa233ae20961b4e63 +size 289976 diff --git a/src/experiments/log/temp/0001.png b/src/experiments/log/temp/0001.png new file mode 100644 index 0000000000000000000000000000000000000000..9cefdba9df6a93170330d946a1bd7412c5b5afdd --- /dev/null +++ b/src/experiments/log/temp/0001.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:177ddd8482e35d67f935befd11c9e632ebe89b8614a95a6e0f90383edf25df88 +size 289867 diff --git a/src/experiments/log/temp/0002.png b/src/experiments/log/temp/0002.png new file mode 100644 index 0000000000000000000000000000000000000000..20d532f41c6d63f96f371d5dffebf2012366df94 --- /dev/null +++ b/src/experiments/log/temp/0002.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:438377a5ea9631132b34949130f6eda07eeae362efbc2a6cebe991421542475f +size 289738 diff --git a/src/experiments/log/temp/0003.png b/src/experiments/log/temp/0003.png new file mode 100644 index 0000000000000000000000000000000000000000..285e977387f84215e449304e7ef978531eccc92b --- /dev/null +++ b/src/experiments/log/temp/0003.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d07b97ba2dd70dcc38f683cf940b6bb78f6674ec0f9db55d33b3c855a07139e3 +size 289684 diff --git a/src/experiments/log/temp/0004.png b/src/experiments/log/temp/0004.png new file mode 100644 index 0000000000000000000000000000000000000000..c50bce16c0ef37f3d10ea4a0c25316649af8819f --- /dev/null +++ b/src/experiments/log/temp/0004.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e09885a213ed44f4d4afab4c4f71214bc1015fbbe0ce42e5f8601e58b9c01816 +size 289549 diff --git a/src/experiments/log/temp/0005.png b/src/experiments/log/temp/0005.png new file mode 100644 index 0000000000000000000000000000000000000000..0e167207543e8de12041b0ad37b879c027802a19 --- /dev/null +++ b/src/experiments/log/temp/0005.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cab880fb66b38398819de57be0409432628335b986e1f450b6afb063f0dec718 +size 289452 diff --git a/src/experiments/log/temp/0006.png b/src/experiments/log/temp/0006.png new file mode 100644 index 0000000000000000000000000000000000000000..2bced9ec2f4dec81677f50f20d6a606e4d206d15 --- /dev/null +++ b/src/experiments/log/temp/0006.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cc0c2eb666204a3072ce6434233f6c4ec1232ca8bce13c80fcfb0df545d4b9b +size 289405 diff --git a/src/experiments/log/temp/0007.png b/src/experiments/log/temp/0007.png new file mode 100644 index 0000000000000000000000000000000000000000..392c1de08868b52ec56ea2d7f3e078d133c497c3 --- /dev/null +++ b/src/experiments/log/temp/0007.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82e2958874e55341dc9b1535d0b789d4130f7201ab5c9569acab6932f6c38859 +size 289328 diff --git a/src/experiments/log/temp/0008.png b/src/experiments/log/temp/0008.png new file mode 100644 index 0000000000000000000000000000000000000000..268e989e5a82eda827276fd080fa0fce725c2779 --- /dev/null +++ b/src/experiments/log/temp/0008.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3dbca38d9c956adba6b9183ce7b2b5c022055feb56ed357f5b1e772c07039cfe +size 289177 diff --git a/src/experiments/log/temp/0009.png b/src/experiments/log/temp/0009.png new file mode 100644 index 0000000000000000000000000000000000000000..0884127bb4c1f27af0cfdeb7cfd37b960b4ebd68 --- /dev/null +++ b/src/experiments/log/temp/0009.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99de2192f8f2e0c27a2a5691d25080340598950b393aff11c20f88bffef3d32e +size 289105 diff --git a/src/experiments/log/temp/0010.png b/src/experiments/log/temp/0010.png new file mode 100644 index 0000000000000000000000000000000000000000..d141fceb5f3c8b8b7894b5ba9baa9f38859590b4 --- /dev/null +++ b/src/experiments/log/temp/0010.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75b571db9f70905b0806a6b7a694a69f236444f03083e613e807570cfd71b3d2 +size 289079 diff --git a/src/experiments/log/temp/0011.png b/src/experiments/log/temp/0011.png new file mode 100644 index 0000000000000000000000000000000000000000..a02f0f268af88e3254ea7c4c7d92759cef53c174 --- /dev/null +++ b/src/experiments/log/temp/0011.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5926984c51f3d950177ae888d9a36bca2a4308d73f033f41a424bbbd1f7370d4 +size 289007 diff --git a/src/experiments/log/temp/0012.png b/src/experiments/log/temp/0012.png new file mode 100644 index 0000000000000000000000000000000000000000..81c82d0e366061ae75572afe4db8a1b52038a3ae --- /dev/null +++ b/src/experiments/log/temp/0012.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddae2075d25de53e94d1d9c4c1a89ed9d53c543ab5ff6c5acfa21b395cc90782 +size 288850 diff --git a/src/experiments/log/temp/0013.png b/src/experiments/log/temp/0013.png new file mode 100644 index 0000000000000000000000000000000000000000..f3189c7e423693601509b93ccf39e46e9238c400 --- /dev/null +++ b/src/experiments/log/temp/0013.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a6b2acbbfa4429ebce15dd5a99a273eb88d6be88d14dc4fc2abe370938cfc46 +size 288765 diff --git a/src/experiments/log/temp/0014.png b/src/experiments/log/temp/0014.png new file mode 100644 index 0000000000000000000000000000000000000000..59423b7c2df3467334bd7b202c6254804d889ef7 --- /dev/null +++ b/src/experiments/log/temp/0014.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc611644e81368b25cbabb6281bc26510963fe5c87d79e29199abf41e53a5fc0 +size 288670 diff --git a/src/experiments/log/temp_init/0000.png b/src/experiments/log/temp_init/0000.png new file mode 100644 index 0000000000000000000000000000000000000000..484878ad463f2fbb5acac34a1cf7c283021a0a4d --- /dev/null +++ b/src/experiments/log/temp_init/0000.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0297a677a60b72059fe8f4f9c706bbf51f9f988b149dccdb4eb7a131f16dd8b4 +size 290036 diff --git a/src/experiments/real_world/calibrate.py b/src/experiments/real_world/calibrate.py new file mode 100644 index 0000000000000000000000000000000000000000..a8fc0b55d5c8c6f26f78ba8b5bfb93925a5f231e --- /dev/null +++ b/src/experiments/real_world/calibrate.py @@ -0,0 +1,127 @@ +import cv2 +import argparse +import time +import numpy as np +import torch +import open3d as o3d +from PIL import Image + +from modules import RobotEnv, BimanualRobotEnv +from utils.pcd_utils import get_tabletop_points, visualize_o3d + +def construct_goal_from_perception(): + use_robot = True + + exposure_time = 10 + env = RobotEnv( + WH=[848, 480], + obs_fps=5, + n_obs_steps=2, + use_robot=use_robot, + speed=100, + ) + + try: + env.start(exposure_time=exposure_time) + if use_robot: + env.reset_robot() + print('env started') + time.sleep(exposure_time) + print('start recording') + + env.calibrate(re_calibrate=False) + + obs = env.get_obs(get_color=True, get_depth=True) + intr_list = env.get_intrinsics() + R_list, t_list = env.get_extrinsics() + bbox = env.get_bbox() + + rgb_list = [] + depth_list = [] + for i in range(4): + rgb = obs[f'color_{i}'][-1] + depth = obs[f'depth_{i}'][-1] + rgb_list.append(rgb) + depth_list.append(depth) + + pcd = get_tabletop_points(rgb_list, depth_list, R_list, t_list, intr_list, bbox) + + visualize_o3d([pcd]) + o3d.io.write_point_cloud("vis_real_world/target.pcd", pcd) + + finally: + env.stop() + print('env stopped') + + +def calibrate(use_robot=True, reset_robot=True, wrist=None): + exposure_time = 5 + env = RobotEnv( + use_camera=True, + WH=[1280, 720], + obs_fps=5, + n_obs_steps=2, + use_robot=use_robot, + speed=100, + wrist=wrist, + ) + + try: + env.start(exposure_time=exposure_time) + if use_robot and reset_robot: + env.reset_robot() + print('env started') + time.sleep(exposure_time) + print('start recording') + + env.calibrate(re_calibrate=True) + + finally: + env.stop() + print('env stopped') + + +def calibrate_bimanual(reset_robot=True): + + exposure_time = 5 + env = BimanualRobotEnv( + WH=[1280, 720], + obs_fps=5, + n_obs_steps=2, + speed=100, + gripper_enable=True, + ) + + try: + env.start(exposure_time=exposure_time) + if reset_robot: + env.reset_robot() + print('env started') + time.sleep(exposure_time) + print('start recording') + + env.calibrate(re_calibrate=True) + + finally: + env.stop() + print('env stopped') + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--calibrate", action="store_true") + parser.add_argument("--calibrate_bimanual", action="store_true") + parser.add_argument("--calibrate_fixed", action="store_true") + parser.add_argument("--construct_goal", action="store_true") + parser.add_argument("--examine_points", action="store_true") + args = parser.parse_args() + if args.calibrate: + calibrate(reset_robot=False) + elif args.calibrate_bimanual: + calibrate_bimanual(reset_robot=False) + elif args.calibrate_fixed: # only calibrate fixed cameras + calibrate(use_robot=False) + elif args.construct_goal: + construct_goal_from_perception() + else: + print("No arguments provided") diff --git a/src/experiments/real_world/camera/__init__.py b/src/experiments/real_world/camera/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/experiments/real_world/camera/multi_realsense.py b/src/experiments/real_world/camera/multi_realsense.py new file mode 100644 index 0000000000000000000000000000000000000000..f006b753a00d02207060c0fa7d2f9ba099002e78 --- /dev/null +++ b/src/experiments/real_world/camera/multi_realsense.py @@ -0,0 +1,183 @@ +from typing import List, Optional, Union, Dict, Callable +import numbers +import time +from multiprocess.managers import SharedMemoryManager +import numpy as np +import pyrealsense2 as rs +from .single_realsense import SingleRealsense + +class MultiRealsense: + def __init__(self, + serial_numbers: Optional[List[str]]=None, + shm_manager: Optional[SharedMemoryManager]=None, + resolution=(1280,720), + capture_fps=30, + put_fps=None, + put_downsample=True, + enable_color=True, + enable_depth=False, + process_depth=False, + enable_infrared=False, + get_max_k=30, + advanced_mode_config: Optional[Union[dict, List[dict]]]=None, + transform: Optional[Union[Callable[[Dict], Dict], List[Callable]]]=None, + vis_transform: Optional[Union[Callable[[Dict], Dict], List[Callable]]]=None, + verbose=False + ): + if shm_manager is None: + shm_manager = SharedMemoryManager() + shm_manager.start() + if serial_numbers is None: + serial_numbers = SingleRealsense.get_connected_devices_serial() + n_cameras = len(serial_numbers) + + advanced_mode_config = repeat_to_list( + advanced_mode_config, n_cameras, dict) + transform = repeat_to_list( + transform, n_cameras, Callable) + vis_transform = repeat_to_list( + vis_transform, n_cameras, Callable) + + cameras = dict() + for i, serial in enumerate(serial_numbers): + cameras[serial] = SingleRealsense( + shm_manager=shm_manager, + serial_number=serial, + resolution=resolution, + capture_fps=capture_fps, + put_fps=put_fps, + put_downsample=put_downsample, + enable_color=enable_color, + enable_depth=enable_depth, + process_depth=process_depth, + enable_infrared=enable_infrared, + get_max_k=get_max_k, + advanced_mode_config=advanced_mode_config[i], + transform=transform[i], + vis_transform=vis_transform[i], + is_master=(i == 0), + verbose=verbose + ) + + self.cameras = cameras + self.serial_numbers = serial_numbers + self.shm_manager = shm_manager + self.resolution = resolution + self.capture_fps = capture_fps + + def __enter__(self): + self.start() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.stop() + + @property + def n_cameras(self): + return len(self.cameras) + + @property + def is_ready(self): + is_ready = True + for camera in self.cameras.values(): + if not camera.is_ready: + is_ready = False + return is_ready + + def start(self, wait=True, put_start_time=None): + if put_start_time is None: + put_start_time = time.time() + for camera in self.cameras.values(): + camera.start(wait=False, put_start_time=put_start_time) + + if wait: + self.start_wait() + + def stop(self, wait=True): + for camera in self.cameras.values(): + camera.stop(wait=False) + + if wait: + self.stop_wait() + + def start_wait(self): + for camera in self.cameras.values(): + print('processing camera {}'.format(camera.serial_number)) + camera.start_wait() + + def stop_wait(self): + for camera in self.cameras.values(): + camera.join() + + def get(self, k=None, index=None, out=None) -> Dict[int, Dict[str, np.ndarray]]: + """ + Return order T,H,W,C + { + 0: { + 'rgb': (T,H,W,C), + 'timestamp': (T,) + }, + 1: ... + } + """ + if index is not None: + this_out = None + this_out = self.cameras[self.serial_numbers[index]].get(k=k, out=this_out) + return this_out + if out is None: + out = dict() + for i, camera in enumerate(self.cameras.values()): + this_out = None + if i in out: + this_out = out[i] + this_out = camera.get(k=k, out=this_out) + out[i] = this_out + return out + + def set_color_option(self, option, value): + n_camera = len(self.cameras) + value = repeat_to_list(value, n_camera, numbers.Number) + for i, camera in enumerate(self.cameras.values()): + camera.set_color_option(option, value[i]) + + def set_exposure(self, exposure=None, gain=None): + """150nit. (0.1 ms, 1/10000s) + gain: (0, 128) + """ + + if exposure is None and gain is None: + # auto exposure + self.set_color_option(rs.option.enable_auto_exposure, 1.0) + else: + # manual exposure + self.set_color_option(rs.option.enable_auto_exposure, 0.0) + if exposure is not None: + self.set_color_option(rs.option.exposure, exposure) + if gain is not None: + self.set_color_option(rs.option.gain, gain) + + def set_white_balance(self, white_balance=None): + if white_balance is None: + self.set_color_option(rs.option.enable_auto_white_balance, 1.0) + else: + self.set_color_option(rs.option.enable_auto_white_balance, 0.0) + self.set_color_option(rs.option.white_balance, white_balance) + + def get_intrinsics(self): + return np.array([c.get_intrinsics() for c in self.cameras.values()]) + + def get_depth_scale(self): + return np.array([c.get_depth_scale() for c in self.cameras.values()]) + + def restart_put(self, start_time): + for camera in self.cameras.values(): + camera.restart_put(start_time) + + +def repeat_to_list(x, n: int, cls): + if x is None: + x = [None] * n + if isinstance(x, cls): + x = [x] * n + assert len(x) == n + return x diff --git a/src/experiments/real_world/camera/shared_memory/__init__.py b/src/experiments/real_world/camera/shared_memory/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/experiments/real_world/camera/shared_memory/shared_memory_queue.py b/src/experiments/real_world/camera/shared_memory/shared_memory_queue.py new file mode 100644 index 0000000000000000000000000000000000000000..883a713b1d0157339f50d6330cebfe256a206478 --- /dev/null +++ b/src/experiments/real_world/camera/shared_memory/shared_memory_queue.py @@ -0,0 +1,187 @@ +from typing import Dict, List, Union +import numbers +from queue import Empty, Full +from multiprocess.managers import SharedMemoryManager +import numpy as np +from .shared_memory_util import ArraySpec, SharedAtomicCounter +from .shared_ndarray import SharedNDArray + + +class SharedMemoryQueue: + """ + A Lock-Free FIFO Shared Memory Data Structure. + Stores a sequence of dict of numpy arrays. + """ + + def __init__(self, + shm_manager: SharedMemoryManager, + array_specs: List[ArraySpec], + buffer_size: int + ): + + # create atomic counter + write_counter = SharedAtomicCounter(shm_manager) + read_counter = SharedAtomicCounter(shm_manager) + + # allocate shared memory + shared_arrays = dict() + for spec in array_specs: + key = spec.name + assert key not in shared_arrays + array = SharedNDArray.create_from_shape( + mem_mgr=shm_manager, + shape=(buffer_size,) + tuple(spec.shape), + dtype=spec.dtype) + shared_arrays[key] = array + + self.buffer_size = buffer_size + self.array_specs = array_specs + self.write_counter = write_counter + self.read_counter = read_counter + self.shared_arrays = shared_arrays + + @classmethod + def create_from_examples(cls, + shm_manager: SharedMemoryManager, + examples: Dict[str, Union[np.ndarray, numbers.Number]], + buffer_size: int + ): + specs = list() + for key, value in examples.items(): + shape = None + dtype = None + if isinstance(value, np.ndarray): + shape = value.shape + dtype = value.dtype + assert dtype != np.dtype('O') + elif isinstance(value, numbers.Number): + shape = tuple() + dtype = np.dtype(type(value)) + else: + raise TypeError(f'Unsupported type {type(value)}') + + spec = ArraySpec( + name=key, + shape=shape, + dtype=dtype + ) + specs.append(spec) + + obj = cls( + shm_manager=shm_manager, + array_specs=specs, + buffer_size=buffer_size + ) + return obj + + def qsize(self): + read_count = self.read_counter.load() + write_count = self.write_counter.load() + n_data = write_count - read_count + return n_data + + def empty(self): + n_data = self.qsize() + return n_data <= 0 + + def clear(self): + self.read_counter.store(self.write_counter.load()) + + def put(self, data: Dict[str, Union[np.ndarray, numbers.Number]]): + read_count = self.read_counter.load() + write_count = self.write_counter.load() + n_data = write_count - read_count + if n_data >= self.buffer_size: + raise Full() + + next_idx = write_count % self.buffer_size + + # write to shared memory + for key, value in data.items(): + arr: np.ndarray + arr = self.shared_arrays[key].get() + if isinstance(value, np.ndarray): + arr[next_idx] = value + else: + arr[next_idx] = np.array(value, dtype=arr.dtype) + + # update idx + self.write_counter.add(1) + + def get(self, out=None) -> Dict[str, np.ndarray]: + write_count = self.write_counter.load() + read_count = self.read_counter.load() + n_data = write_count - read_count + if n_data <= 0: + raise Empty() + + if out is None: + out = self._allocate_empty() + + next_idx = read_count % self.buffer_size + for key, value in self.shared_arrays.items(): + arr = value.get() + np.copyto(out[key], arr[next_idx]) + + # update idx + self.read_counter.add(1) + return out + + def get_k(self, k, out=None) -> Dict[str, np.ndarray]: + write_count = self.write_counter.load() + read_count = self.read_counter.load() + n_data = write_count - read_count + if n_data <= 0: + raise Empty() + assert k <= n_data + + out = self._get_k_impl(k, read_count, out=out) + self.read_counter.add(k) + return out + + def get_all(self, out=None) -> Dict[str, np.ndarray]: + write_count = self.write_counter.load() + read_count = self.read_counter.load() + n_data = write_count - read_count + if n_data <= 0: + raise Empty() + + out = self._get_k_impl(n_data, read_count, out=out) + self.read_counter.add(n_data) + return out + + def _get_k_impl(self, k, read_count, out=None) -> Dict[str, np.ndarray]: + if out is None: + out = self._allocate_empty(k) + + curr_idx = read_count % self.buffer_size + for key, value in self.shared_arrays.items(): + arr = value.get() + target = out[key] + + start = curr_idx + end = min(start + k, self.buffer_size) + target_start = 0 + target_end = (end - start) + target[target_start: target_end] = arr[start:end] + + remainder = k - (end - start) + if remainder > 0: + # wrap around + start = 0 + end = start + remainder + target_start = target_end + target_end = k + target[target_start: target_end] = arr[start:end] + + return out + + def _allocate_empty(self, k=None): + result = dict() + for spec in self.array_specs: + shape = spec.shape + if k is not None: + shape = (k,) + shape + result[spec.name] = np.empty( + shape=shape, dtype=spec.dtype) + return result diff --git a/src/experiments/real_world/camera/shared_memory/shared_memory_ring_buffer.py b/src/experiments/real_world/camera/shared_memory/shared_memory_ring_buffer.py new file mode 100644 index 0000000000000000000000000000000000000000..d23303078692b29858ee6eba19d5c0e6073ce292 --- /dev/null +++ b/src/experiments/real_world/camera/shared_memory/shared_memory_ring_buffer.py @@ -0,0 +1,221 @@ +from typing import Dict, List, Union + +from queue import Empty +import numbers +import time +from multiprocess.managers import SharedMemoryManager +import numpy as np + +from .shared_ndarray import SharedNDArray +from .shared_memory_util import ArraySpec, SharedAtomicCounter + +class SharedMemoryRingBuffer: + """ + A Lock-Free FILO Shared Memory Data Structure. + Stores a sequence of dict of numpy arrays. + """ + + def __init__(self, + shm_manager: SharedMemoryManager, + array_specs: List[ArraySpec], + get_max_k: int, + get_time_budget: float, + put_desired_frequency: float, + safety_margin: float=1.5 + ): + """ + shm_manager: Manages the life cycle of share memories + across processes. Remember to run .start() before passing. + array_specs: Name, shape and type of arrays for a single time step. + get_max_k: The maxmum number of items can be queried at once. + get_time_budget: The maxmum amount of time spent copying data from + shared memory to local memory. Increase this number for larger arrays. + put_desired_frequency: The maximum frequency that .put() can be called. + This influces the buffer size. + """ + + # create atomic counter + counter = SharedAtomicCounter(shm_manager) + + # compute buffer size + # At any given moment, the past get_max_k items should never + # be touched (to be read freely). Assuming the reading is reading + # these k items, which takes maximum of get_time_budget seconds, + # we need enough empty slots to make sure put_desired_frequency Hz + # of put can be sustaied. + buffer_size = int(np.ceil( + put_desired_frequency * get_time_budget + * safety_margin)) + get_max_k + + # allocate shared memory + shared_arrays = dict() + for spec in array_specs: + key = spec.name + assert key not in shared_arrays + array = SharedNDArray.create_from_shape( + mem_mgr=shm_manager, + shape=(buffer_size,) + tuple(spec.shape), + dtype=spec.dtype) + shared_arrays[key] = array + + # allocate timestamp array + timestamp_array = SharedNDArray.create_from_shape( + mem_mgr=shm_manager, + shape=(buffer_size,), + dtype=np.float64) + timestamp_array.get()[:] = -np.inf + + self.buffer_size = buffer_size + self.array_specs = array_specs + self.counter = counter + self.shared_arrays = shared_arrays + self.timestamp_array = timestamp_array + self.get_time_budget = get_time_budget + self.get_max_k = get_max_k + self.put_desired_frequency = put_desired_frequency + self.ready_for_get = False + + + @property + def count(self): + return self.counter.load() + + @classmethod + def create_from_examples(cls, + shm_manager: SharedMemoryManager, + examples: Dict[str, Union[np.ndarray, numbers.Number]], + get_max_k: int=32, + get_time_budget: float=0.01, + put_desired_frequency: float=60 + ): + specs = list() + for key, value in examples.items(): + shape = None + dtype = None + if isinstance(value, np.ndarray): + shape = value.shape + dtype = value.dtype + assert dtype != np.dtype('O') + elif isinstance(value, numbers.Number): + shape = tuple() + dtype = np.dtype(type(value)) + else: + raise TypeError(f'Unsupported type {type(value)}') + + spec = ArraySpec( + name=key, + shape=shape, + dtype=dtype + ) + specs.append(spec) + + obj = cls( + shm_manager=shm_manager, + array_specs=specs, + get_max_k=get_max_k, + get_time_budget=get_time_budget, + put_desired_frequency=put_desired_frequency + ) + return obj + + def clear(self): + self.counter.store(0) + + def put(self, data: Dict[str, Union[np.ndarray, numbers.Number]], wait: bool=True, serial_number: str='unknown'): + count = self.counter.load() + next_idx = count % self.buffer_size + # Make sure the next self.get_max_k elements in the ring buffer have at least + # self.get_time_budget seconds untouched after written, so that + # get_last_k can safely read k elements from any count location. + # Sanity check: when get_max_k == 1, the element pointed by next_idx + # should be rewritten at minimum self.get_time_budget seconds later. + timestamp_lookahead_idx = (next_idx + self.get_max_k - 1) % self.buffer_size + old_timestamp = self.timestamp_array.get()[timestamp_lookahead_idx] + t = time.monotonic() + if (t - old_timestamp) < self.get_time_budget: + deltat = t - old_timestamp + if wait: + # sleep the remaining time to be safe + time.sleep(self.get_time_budget - deltat) + else: + if self.ready_for_get: + # throw an error + past_iters = self.buffer_size - self.get_max_k + hz = past_iters / deltat + raise TimeoutError( + '[Camera {}] Put executed too fast {}items/{:.4f}s ~= {}Hz'.format( + serial_number, past_iters, deltat,hz)) + + # write to shared memory + for key, value in data.items(): + arr: np.ndarray + arr = self.shared_arrays[key].get() + if isinstance(value, np.ndarray): + arr[next_idx] = value + else: + arr[next_idx] = np.array(value, dtype=arr.dtype) + + # update timestamp + self.timestamp_array.get()[next_idx] = time.monotonic() + self.counter.add(1) + + def _allocate_empty(self, k=None): + result = dict() + for spec in self.array_specs: + shape = spec.shape + if k is not None: + shape = (k,) + shape + result[spec.name] = np.empty( + shape=shape, dtype=spec.dtype) + return result + + def get(self, out=None) -> Dict[str, np.ndarray]: + if out is None: + out = self._allocate_empty() + start_time = time.monotonic() + count = self.counter.load() + curr_idx = (count - 1) % self.buffer_size + for key, value in self.shared_arrays.items(): + arr = value.get() + np.copyto(out[key], arr[curr_idx]) + end_time = time.monotonic() + dt = end_time - start_time + if dt > self.get_time_budget: + raise TimeoutError(f'Get time out {dt} vs {self.get_time_budget}') + return out + + def get_last_k(self, k:int, out=None) -> Dict[str, np.ndarray]: + assert k <= self.get_max_k + if out is None: + out = self._allocate_empty(k) + start_time = time.monotonic() + count = self.counter.load() + assert k <= count + curr_idx = (count - 1) % self.buffer_size + for key, value in self.shared_arrays.items(): + arr = value.get() + target = out[key] + + end = curr_idx + 1 + start = max(0, end - k) + target_end = k + target_start = target_end - (end - start) + target[target_start: target_end] = arr[start:end] + + remainder = k - (end - start) + if remainder > 0: + # wrap around + end = self.buffer_size + start = end - remainder + target_start = 0 + target_end = end - start + target[target_start: target_end] = arr[start:end] + end_time = time.monotonic() + dt = end_time - start_time + if dt > self.get_time_budget: + raise TimeoutError(f'Get time out {dt} vs {self.get_time_budget}') + return out + + def get_all(self) -> Dict[str, np.ndarray]: + k = min(self.count, self.get_max_k) + return self.get_last_k(k=k) diff --git a/src/experiments/real_world/camera/shared_memory/shared_memory_util.py b/src/experiments/real_world/camera/shared_memory/shared_memory_util.py new file mode 100644 index 0000000000000000000000000000000000000000..6230118bc633734df15457074e7bd05cdf937809 --- /dev/null +++ b/src/experiments/real_world/camera/shared_memory/shared_memory_util.py @@ -0,0 +1,39 @@ +from typing import Tuple +from dataclasses import dataclass +import numpy as np +from multiprocess.managers import SharedMemoryManager +from atomics import atomicview, MemoryOrder, UINT + +@dataclass +class ArraySpec: + name: str + shape: Tuple[int] + dtype: np.dtype + + +class SharedAtomicCounter: + def __init__(self, + shm_manager: SharedMemoryManager, + size :int=8 # 64bit int + ): + shm = shm_manager.SharedMemory(size=size) + self.shm = shm + self.size = size + self.store(0) # initialize + + @property + def buf(self): + return self.shm.buf[:self.size] + + def load(self) -> int: + with atomicview(buffer=self.buf, atype=UINT) as a: + value = a.load(order=MemoryOrder.ACQUIRE) + return value + + def store(self, value: int): + with atomicview(buffer=self.buf, atype=UINT) as a: + a.store(value, order=MemoryOrder.RELEASE) + + def add(self, value: int): + with atomicview(buffer=self.buf, atype=UINT) as a: + a.add(value, order=MemoryOrder.ACQ_REL) diff --git a/src/experiments/real_world/camera/shared_memory/shared_ndarray.py b/src/experiments/real_world/camera/shared_memory/shared_ndarray.py new file mode 100644 index 0000000000000000000000000000000000000000..72a1ba3d3b15cd11defdea9c427c69e7b00de16d --- /dev/null +++ b/src/experiments/real_world/camera/shared_memory/shared_ndarray.py @@ -0,0 +1,166 @@ +from __future__ import annotations + +import multiprocess +import multiprocess.synchronize +from multiprocess.managers import SharedMemoryManager +from multiprocess.shared_memory import SharedMemory +from typing import Any, TYPE_CHECKING, Generic, Optional, Tuple, TypeVar, Union + +import numpy as np +import numpy.typing as npt + + +SharedMemoryLike = Union[str, SharedMemory] # shared memory or name of shared memory +SharedT = TypeVar("SharedT", bound=np.generic) + + +class SharedNDArray(Generic[SharedT]): + """Class to keep track of and retrieve the data in a shared array + Attributes + ---------- + shm + SharedMemory object containing the data of the array + shape + Shape of the NumPy array + dtype + Type of the NumPy array. Anything that may be passed to the `dtype=` argument in `np.ndarray`. + lock + (Optional) multiprocess.Lock to manage access to the SharedNDArray. This is only created if + lock=True is passed to the constructor, otherwise it is set to `None`. + A SharedNDArray object may be created either directly with a preallocated shared memory object plus the + dtype and shape of the numpy array it represents: + >>> from multiprocess.shared_memory import SharedMemory + >>> import numpy as np + >>> from shared_ndarray2 import SharedNDArray + >>> x = np.array([1, 2, 3]) + >>> shm = SharedMemory(name="x", create=True, size=x.nbytes) + >>> arr = SharedNDArray(shm, x.shape, x.dtype) + >>> arr[:] = x[:] # copy x into the array + >>> print(arr[:]) + [1 2 3] + >>> shm.close() + >>> shm.unlink() + Or using a SharedMemoryManager either from an existing array or from arbitrary shape and nbytes: + >>> from multiprocess.managers import SharedMemoryManager + >>> mem_mgr = SharedMemoryManager() + >>> mem_mgr.start() # Better yet, use SharedMemoryManager context manager + >>> arr = SharedNDArray.from_shape(mem_mgr, x.shape, x.dtype) + >>> arr[:] = x[:] # copy x into the array + >>> print(arr[:]) + [1 2 3] + >>> # -or in one step- + >>> arr = SharedNDArray.from_array(mem_mgr, x) + >>> print(arr[:]) + [1 2 3] + `SharedNDArray` does not subclass numpy.ndarray but rather generates an ndarray on-the-fly in get(), + which is used in __getitem__ and __setitem__. Thus to access the data and/or use any ndarray methods + get() or __getitem__ or __setitem__ must be used + >>> arr.max() # ERROR: SharedNDArray has no `max` method. + Traceback (most recent call last): + .... + AttributeError: SharedNDArray object has no attribute 'max'. To access NumPy ndarray object use .get() method. + >>> arr.get().max() # (or arr[:].max()) OK: This gets an ndarray on which we can operate + 3 + >>> y = np.zeros(3) + >>> y[:] = arr # ERROR: Cannot broadcast-assign a SharedNDArray to ndarray `y` + Traceback (most recent call last): + ... + ValueError: setting an array element with a sequence. + >>> y[:] = arr[:] # OK: This gets an ndarray that can be copied element-wise to `y` + >>> mem_mgr.shutdown() + """ + + shm: SharedMemory + # shape: Tuple[int, ...] # is a property + dtype: np.dtype + lock: Optional[multiprocess.synchronize.Lock] + + def __init__( + self, shm: SharedMemoryLike, shape: Tuple[int, ...], dtype: npt.DTypeLike): + """Initialize a SharedNDArray object from existing shared memory, object shape, and dtype. + To initialize a SharedNDArray object from a memory manager and data or shape, use the `from_array() + or `from_shape()` classmethods. + Parameters + ---------- + shm + `multiprocess.shared_memory.SharedMemory` object or name for connecting to an existing block + of shared memory (using SharedMemory constructor) + shape + Shape of the NumPy array to be represented in the shared memory + dtype + Data type for the NumPy array to be represented in shared memory. Any valid argument for + `np.dtype` may be used as it will be converted to an actual `dtype` object. + lock : bool, optional + If True, create a multiprocess.Lock object accessible with the `.lock` attribute, by default + False. If passing the `SharedNDArray` as an argument to a `multiprocess.Pool` function this + should not be used -- see this comment to a Stack Overflow question about `multiprocess.Lock`: + https://stackoverflow.com/questions/25557686/python-sharing-a-lock-between-processes#comment72803059_25558333 + Raises + ------ + ValueError + The SharedMemory size (number of bytes) does not match the product of the shape and dtype + itemsize. + """ + if isinstance(shm, str): + shm = SharedMemory(name=shm, create=False) + dtype = np.dtype(dtype) # Try to convert to dtype + assert shm.size >= (dtype.itemsize * np.prod(shape)) + self.shm = shm + self.dtype = dtype + self._shape: Tuple[int, ...] = shape + + def __repr__(self): + # Like numpy's ndarray repr + cls_name = self.__class__.__name__ + nspaces = len(cls_name) + 1 + array_repr = str(self.get()) + array_repr = array_repr.replace("\n", "\n" + " " * nspaces) + return f"{cls_name}({array_repr}, dtype={self.dtype})" + + @classmethod + def create_from_array( + cls, mem_mgr: SharedMemoryManager, arr: npt.NDArray[SharedT] + ) -> SharedNDArray[SharedT]: + """Create a SharedNDArray from a SharedMemoryManager and an existing numpy array. + Parameters + ---------- + mem_mgr + Running `multiprocess.managers.SharedMemoryManager` instance from which to create the + SharedMemory for the SharedNDArray + arr + NumPy `ndarray` object to copy into the created SharedNDArray upon initialization. + """ + # Simply use from_shape() to create the SharedNDArray and copy the data into it. + shared_arr = cls.create_from_shape(mem_mgr, arr.shape, arr.dtype) + shared_arr.get()[:] = arr[:] + return shared_arr + + @classmethod + def create_from_shape( + cls, mem_mgr: SharedMemoryManager, shape: Tuple, dtype: npt.DTypeLike) -> SharedNDArray: + """Create a SharedNDArray directly from a SharedMemoryManager + Parameters + ---------- + mem_mgr + SharedMemoryManager instance that has been started + shape + Shape of the array + dtype + Data type for the NumPy array to be represented in shared memory. Any valid argument for + `np.dtype` may be used as it will be converted to an actual `dtype` object. + """ + dtype = np.dtype(dtype) # Convert to dtype if possible + shm = mem_mgr.SharedMemory(np.prod(shape) * dtype.itemsize) + return cls(shm=shm, shape=shape, dtype=dtype) + + @property + def shape(self) -> Tuple[int, ...]: + return self._shape + + + def get(self) -> npt.NDArray[SharedT]: + """Get a numpy array with access to the shared memory""" + return np.ndarray(self.shape, dtype=self.dtype, buffer=self.shm.buf) + + def __del__(self): + self.shm.close() diff --git a/src/experiments/real_world/camera/single_realsense.py b/src/experiments/real_world/camera/single_realsense.py new file mode 100644 index 0000000000000000000000000000000000000000..7ba3d2411ce9ddcc34bc0f2132ab794d482d3578 --- /dev/null +++ b/src/experiments/real_world/camera/single_realsense.py @@ -0,0 +1,450 @@ +from typing import Optional, Callable, Dict +import os +import enum +import time +import json +import numpy as np +import pyrealsense2 as rs +import multiprocess as mp +import cv2 +from threadpoolctl import threadpool_limits +from multiprocess.managers import SharedMemoryManager + +from .utils import get_accumulate_timestamp_idxs +from .shared_memory.shared_ndarray import SharedNDArray +from .shared_memory.shared_memory_ring_buffer import SharedMemoryRingBuffer +from .shared_memory.shared_memory_queue import SharedMemoryQueue, Full, Empty + +class Command(enum.Enum): + SET_COLOR_OPTION = 0 + SET_DEPTH_OPTION = 1 + START_RECORDING = 2 + STOP_RECORDING = 3 + RESTART_PUT = 4 + +class SingleRealsense(mp.Process): + MAX_PATH_LENGTH = 4096 # linux path has a limit of 4096 bytes + + def __init__( + self, + shm_manager: SharedMemoryManager, + serial_number, + resolution=(1280,720), + capture_fps=30, + put_fps=None, + put_downsample=True, + enable_color=True, + enable_depth=False, + process_depth=False, + enable_infrared=False, + get_max_k=30, + advanced_mode_config=None, + transform: Optional[Callable[[Dict], Dict]] = None, + vis_transform: Optional[Callable[[Dict], Dict]] = None, + is_master=False, + verbose=False + ): + super().__init__() + + if put_fps is None: + put_fps = capture_fps + + # create ring buffer + resolution = tuple(resolution) + shape = resolution[::-1] + examples = dict() + if enable_color: + examples['color'] = np.empty( + shape=shape+(3,), dtype=np.uint8) + if enable_depth: + examples['depth'] = np.empty( + shape=shape, dtype=np.uint16) + if enable_infrared: + examples['infrared'] = np.empty( + shape=shape, dtype=np.uint8) + examples['camera_capture_timestamp'] = 0.0 + examples['camera_receive_timestamp'] = 0.0 + examples['timestamp'] = 0.0 + examples['step_idx'] = 0 + + ring_buffer = SharedMemoryRingBuffer.create_from_examples( + shm_manager=shm_manager, + examples=examples if transform is None + else transform(dict(examples)), + get_max_k=get_max_k, + get_time_budget=0.2, + put_desired_frequency=put_fps + ) + + # create command queue + examples = { + 'cmd': Command.SET_COLOR_OPTION.value, + 'option_enum': rs.option.exposure.value, + 'option_value': 0.0, + 'put_start_time': 0.0 + } + + command_queue = SharedMemoryQueue.create_from_examples( + shm_manager=shm_manager, + examples=examples, + buffer_size=128 + ) + + # create shared array for intrinsics + intrinsics_array = SharedNDArray.create_from_shape( + mem_mgr=shm_manager, + shape=(7,), + dtype=np.float64) + intrinsics_array.get()[:] = 0 + + # copied variables + self.serial_number = serial_number + self.resolution = resolution + self.capture_fps = capture_fps + self.put_fps = put_fps + self.put_downsample = put_downsample + self.enable_color = enable_color + self.enable_depth = enable_depth + self.enable_infrared = enable_infrared + self.advanced_mode_config = advanced_mode_config + self.transform = transform + self.vis_transform = vis_transform + self.process_depth = process_depth + self.is_master = is_master + self.verbose = verbose + self.put_start_time = None + + # shared variables + self.stop_event = mp.Event() + self.ready_event = mp.Event() + self.ring_buffer = ring_buffer + self.command_queue = command_queue + self.intrinsics_array = intrinsics_array + + @staticmethod + def get_connected_devices_serial(): + serials = list() + for d in rs.context().devices: + if d.get_info(rs.camera_info.name).lower() != 'platform camera': + serial = d.get_info(rs.camera_info.serial_number) + product_line = d.get_info(rs.camera_info.product_line) + if product_line == 'D400': + # only works with D400 series + serials.append(serial) + serials = sorted(serials) + return serials + + # ========= context manager =========== + def __enter__(self): + self.start() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.stop() + + # ========= user API =========== + def start(self, wait=True, put_start_time=None): + self.put_start_time = put_start_time + super().start() + if wait: + self.start_wait() + + def stop(self, wait=True): + self.stop_event.set() + if wait: + self.end_wait() + + def start_wait(self): + self.ready_event.wait() + + def end_wait(self): + self.join() + + @property + def is_ready(self): + return self.ready_event.is_set() + + def get(self, k=None, out=None): + if k is None: + return self.ring_buffer.get(out=out) + else: + return self.ring_buffer.get_last_k(k, out=out) + + # ========= user API =========== + def set_color_option(self, option: rs.option, value: float): + self.command_queue.put({ + 'cmd': Command.SET_COLOR_OPTION.value, + 'option_enum': option.value, + 'option_value': value + }) + + def set_exposure(self, exposure=None, gain=None): + """ + exposure: (1, 10000) 100us unit. (0.1 ms, 1/10000s) + gain: (0, 128) + """ + + if exposure is None and gain is None: + # auto exposure + self.set_color_option(rs.option.enable_auto_exposure, 1.0) + else: + # manual exposure + self.set_color_option(rs.option.enable_auto_exposure, 0.0) + if exposure is not None: + self.set_color_option(rs.option.exposure, exposure) + if gain is not None: + self.set_color_option(rs.option.gain, gain) + + def set_white_balance(self, white_balance=None): + if white_balance is None: + self.set_color_option(rs.option.enable_auto_white_balance, 1.0) + else: + self.set_color_option(rs.option.enable_auto_white_balance, 0.0) + self.set_color_option(rs.option.white_balance, white_balance) + + def get_intrinsics(self): + assert self.ready_event.is_set() + fx, fy, ppx, ppy = self.intrinsics_array.get()[:4] + mat = np.eye(3) + mat[0,0] = fx + mat[1,1] = fy + mat[0,2] = ppx + mat[1,2] = ppy + return mat + + def get_depth_scale(self): + assert self.ready_event.is_set() + scale = self.intrinsics_array.get()[-1] + return scale + + def depth_process(self, depth_frame): + depth_to_disparity = rs.disparity_transform(True) + disparity_to_depth = rs.disparity_transform(False) + + spatial = rs.spatial_filter() + spatial.set_option(rs.option.filter_magnitude, 5) + spatial.set_option(rs.option.filter_smooth_alpha, 0.75) + spatial.set_option(rs.option.filter_smooth_delta, 1) + spatial.set_option(rs.option.holes_fill, 1) + + temporal = rs.temporal_filter() + temporal.set_option(rs.option.filter_smooth_alpha, 0.75) + temporal.set_option(rs.option.filter_smooth_delta, 1) + + filtered_depth = depth_to_disparity.process(depth_frame) + filtered_depth = spatial.process(filtered_depth) + filtered_depth = temporal.process(filtered_depth) + filtered_depth = disparity_to_depth.process(filtered_depth) + return filtered_depth + + def restart_put(self, start_time): + self.command_queue.put({ + 'cmd': Command.RESTART_PUT.value, + 'put_start_time': start_time + }) + + # ========= interval API =========== + def run(self): + # limit threads + threadpool_limits(1) + cv2.setNumThreads(1) + w, h = self.resolution + fps = self.capture_fps + align = rs.align(rs.stream.color) + # Enable the streams from all the intel realsense devices + rs_config = rs.config() + if self.enable_color: + rs_config.enable_stream(rs.stream.color, + w, h, rs.format.bgr8, fps) + if self.enable_depth: + rs_config.enable_stream(rs.stream.depth, + w, h, rs.format.z16, fps) + if self.enable_infrared: + rs_config.enable_stream(rs.stream.infrared, + w, h, rs.format.y8, fps) + + def init_device(): + rs_config.enable_device(self.serial_number) + + # start pipeline + pipeline = rs.pipeline() + pipeline_profile = pipeline.start(rs_config) + self.pipeline = pipeline + self.pipeline_profile = pipeline_profile + + # report global time + # https://github.com/IntelRealSense/librealsense/pull/3909 + d = self.pipeline_profile.get_device().first_color_sensor() + d.set_option(rs.option.global_time_enabled, 1) + + # setup advanced mode + if self.advanced_mode_config is not None: + json_text = json.dumps(self.advanced_mode_config) + device = self.pipeline_profile.get_device() + advanced_mode = rs.rs400_advanced_mode(device) + advanced_mode.load_json(json_text) + + # get + color_stream = self.pipeline_profile.get_stream(rs.stream.color) + intr = color_stream.as_video_stream_profile().get_intrinsics() + order = ['fx', 'fy', 'ppx', 'ppy', 'height', 'width'] + for i, name in enumerate(order): + self.intrinsics_array.get()[i] = getattr(intr, name) + + if self.enable_depth: + depth_sensor = self.pipeline_profile.get_device().first_depth_sensor() + depth_scale = depth_sensor.get_depth_scale() + self.intrinsics_array.get()[-1] = depth_scale + + # one-time setup (intrinsics etc, ignore for now) + if self.verbose: + print(f'[SingleRealsense {self.serial_number}] Main loop started.') + + try: + init_device() + # put frequency regulation + put_idx = None + put_start_time = self.put_start_time + if put_start_time is None: + put_start_time = time.time() + + iter_idx = 0 + t_start = time.time() + while not self.stop_event.is_set(): + # wait for frames to come in + frameset = None + while frameset is None: + try: + frameset = self.pipeline.wait_for_frames() + except RuntimeError as e: + print(f'[SingleRealsense {self.serial_number}] Error: {e}. Ready state: {self.ready_event.is_set()}, Restarting device.') + device = self.pipeline.get_active_profile().get_device() + device.hardware_reset() + self.pipeline.stop() + init_device() + continue + receive_time = time.time() + # align frames to color + frameset = align.process(frameset) + + self.ring_buffer.ready_for_get = (receive_time - put_start_time >= 0) + + # grab data + if self.verbose: + grad_start_time = time.time() + data = dict() + data['camera_receive_timestamp'] = receive_time + # realsense report in ms + data['camera_capture_timestamp'] = frameset.get_timestamp() / 1000 + if self.enable_color: + # print(time.time()) + color_frame = frameset.get_color_frame() + data['color'] = np.asarray(color_frame.get_data()) + t = color_frame.get_timestamp() / 1000 + data['camera_capture_timestamp'] = t + # print('device', time.time() - t) + # print(color_frame.get_frame_timestamp_domain()) + if self.enable_depth: + depth_frame = frameset.get_depth_frame() + if self.process_depth: + data['depth'] = self.depth_process(depth_frame) + data['depth'] = np.asarray(depth_frame.get_data()) + # data['depth'] = np.asarray( + # frameset.get_depth_frame().get_data()) + if self.enable_infrared: + data['infrared'] = np.asarray( + frameset.get_infrared_frame().get_data()) + if self.verbose: + print(f'[SingleRealsense {self.serial_number}] Grab data time {time.time() - grad_start_time}') + + # apply transform + if self.verbose: + transform_start_time = time.time() + put_data = data + if self.transform is not None: + put_data = self.transform(dict(data)) + if self.verbose: + print(f'[SingleRealsense {self.serial_number}] Transform time {time.time() - transform_start_time}') + + if self.verbose: + put_data_start_time = time.time() + if self.put_downsample: + # put frequency regulation + # print(self.serial_number, put_start_time, put_idx, len(global_idxs)) + local_idxs, global_idxs, put_idx \ + = get_accumulate_timestamp_idxs( + timestamps=[receive_time], + start_time=put_start_time, + dt=1/self.put_fps, + # this is non in first iteration + # and then replaced with a concrete number + next_global_idx=put_idx, + # continue to pump frames even if not started. + # start_time is simply used to align timestamps. + allow_negative=True + ) + for step_idx in global_idxs: + put_data['step_idx'] = step_idx + # put_data['timestamp'] = put_start_time + step_idx / self.put_fps + put_data['timestamp'] = receive_time + # print(step_idx, data['timestamp']) + self.ring_buffer.put(put_data, wait=False, serial_number=self.serial_number) + else: + step_idx = int((receive_time - put_start_time) * self.put_fps) + print(step_idx, receive_time) + put_data['step_idx'] = step_idx + put_data['timestamp'] = receive_time + self.ring_buffer.put(put_data, wait=False, serial_number=self.serial_number) + if self.verbose: + print(f'[SingleRealsense {self.serial_number}] Put data time {time.time() - put_data_start_time}', end=' ') + print(f'with downsample for {len(global_idxs)}x' if self.put_downsample and len(global_idxs) > 1 else '') + + # signal ready + if iter_idx == 0: + self.ready_event.set() + + # perf + t_end = time.time() + duration = t_end - t_start + frequency = np.round(1 / duration, 1) + t_start = t_end + if self.verbose: + print(f'[SingleRealsense {self.serial_number}] FPS {frequency}') + + # fetch command from queue + try: + commands = self.command_queue.get_all() + n_cmd = len(commands['cmd']) + except Empty: + n_cmd = 0 + + # execute commands + for i in range(n_cmd): + command = dict() + for key, value in commands.items(): + command[key] = value[i] + cmd = command['cmd'] + if cmd == Command.SET_COLOR_OPTION.value: + sensor = self.pipeline_profile.get_device().first_color_sensor() + option = rs.option(command['option_enum']) + value = float(command['option_value']) + sensor.set_option(option, value) + # print('auto', sensor.get_option(rs.option.enable_auto_exposure)) + # print('exposure', sensor.get_option(rs.option.exposure)) + # print('gain', sensor.get_option(rs.option.gain)) + elif cmd == Command.SET_DEPTH_OPTION.value: + sensor = self.pipeline_profile.get_device().first_depth_sensor().set_option(rs.option.inter_cam_sync_mode, 1 if self.is_master else 2) + option = rs.option(command['option_enum']) + value = float(command['option_value']) + sensor.set_option(option, value) + elif cmd == Command.RESTART_PUT.value: + put_idx = None + put_start_time = command['put_start_time'] + + iter_idx += 1 + finally: + rs_config.disable_all_streams() + self.ready_event.set() + + if self.verbose: + print(f'[SingleRealsense {self.serial_number}] Exiting worker process.') diff --git a/src/experiments/real_world/camera/utils.py b/src/experiments/real_world/camera/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2e726728861305b98522863e4bddbe4051eacaf3 --- /dev/null +++ b/src/experiments/real_world/camera/utils.py @@ -0,0 +1,222 @@ +from typing import List, Tuple, Optional, Dict +import math +import numpy as np + + +def get_accumulate_timestamp_idxs( + timestamps: List[float], + start_time: float, + dt: float, + eps:float=1e-5, + next_global_idx: Optional[int]=0, + allow_negative=False + ) -> Tuple[List[int], List[int], int]: + """ + For each dt window, choose the first timestamp in the window. + Assumes timestamps sorted. One timestamp might be chosen multiple times due to dropped frames. + next_global_idx should start at 0 normally, and then use the returned next_global_idx. + However, when overwiting previous values are desired, set last_global_idx to None. + + Returns: + local_idxs: which index in the given timestamps array to chose from + global_idxs: the global index of each chosen timestamp + next_global_idx: used for next call. + """ + local_idxs = list() + global_idxs = list() + for local_idx, ts in enumerate(timestamps): + # add eps * dt to timestamps so that when ts == start_time + k * dt + # is always recorded as kth element (avoiding floating point errors) + global_idx = math.floor((ts - start_time) / dt + eps) + if (not allow_negative) and (global_idx < 0): + continue + if next_global_idx is None: + next_global_idx = global_idx + + n_repeats = max(0, global_idx - next_global_idx + 1) + for i in range(n_repeats): + local_idxs.append(local_idx) + global_idxs.append(next_global_idx + i) + next_global_idx += n_repeats + return local_idxs, global_idxs, next_global_idx + + +def align_timestamps( + timestamps: List[float], + target_global_idxs: List[int], + start_time: float, + dt: float, + eps:float=1e-5): + if isinstance(target_global_idxs, np.ndarray): + target_global_idxs = target_global_idxs.tolist() + assert len(target_global_idxs) > 0 + + local_idxs, global_idxs, _ = get_accumulate_timestamp_idxs( + timestamps=timestamps, + start_time=start_time, + dt=dt, + eps=eps, + next_global_idx=target_global_idxs[0], + allow_negative=True + ) + if len(global_idxs) > len(target_global_idxs): + # if more steps available, truncate + global_idxs = global_idxs[:len(target_global_idxs)] + local_idxs = local_idxs[:len(target_global_idxs)] + + if len(global_idxs) == 0: + import pdb; pdb.set_trace() + + for i in range(len(target_global_idxs) - len(global_idxs)): + # if missing, repeat + local_idxs.append(len(timestamps)-1) + global_idxs.append(global_idxs[-1] + 1) + assert global_idxs == target_global_idxs + assert len(local_idxs) == len(global_idxs) + return local_idxs + + +class TimestampObsAccumulator: + def __init__(self, + start_time: float, + dt: float, + eps: float=1e-5): + self.start_time = start_time + self.dt = dt + self.eps = eps + self.obs_buffer = dict() + self.timestamp_buffer = None + self.next_global_idx = 0 + + def __len__(self): + return self.next_global_idx + + @property + def data(self): + if self.timestamp_buffer is None: + return dict() + result = dict() + for key, value in self.obs_buffer.items(): + result[key] = value[:len(self)] + return result + + @property + def actual_timestamps(self): + if self.timestamp_buffer is None: + return np.array([]) + return self.timestamp_buffer[:len(self)] + + @property + def timestamps(self): + if self.timestamp_buffer is None: + return np.array([]) + return self.start_time + np.arange(len(self)) * self.dt + + def put(self, data: Dict[str, np.ndarray], timestamps: np.ndarray): + """ + data: + key: T,* + """ + + local_idxs, global_idxs, self.next_global_idx = get_accumulate_timestamp_idxs( + timestamps=timestamps, + start_time=self.start_time, + dt=self.dt, + eps=self.eps, + next_global_idx=self.next_global_idx + ) + + if len(global_idxs) > 0: + if self.timestamp_buffer is None: + # first allocation + self.obs_buffer = dict() + for key, value in data.items(): + self.obs_buffer[key] = np.zeros_like(value) + self.timestamp_buffer = np.zeros( + (len(timestamps),), dtype=np.float64) + + this_max_size = global_idxs[-1] + 1 + if this_max_size > len(self.timestamp_buffer): + # reallocate + new_size = max(this_max_size, len(self.timestamp_buffer) * 2) + for key in list(self.obs_buffer.keys()): + new_shape = (new_size,) + self.obs_buffer[key].shape[1:] + self.obs_buffer[key] = np.resize(self.obs_buffer[key], new_shape) + self.timestamp_buffer = np.resize(self.timestamp_buffer, (new_size)) + + # write data + for key, value in self.obs_buffer.items(): + value[global_idxs] = data[key][local_idxs] + self.timestamp_buffer[global_idxs] = timestamps[local_idxs] + + +class TimestampActionAccumulator: + def __init__(self, + start_time: float, + dt: float, + eps: float=1e-5): + """ + Different from Obs accumulator, the action accumulator + allows overwriting previous values. + """ + self.start_time = start_time + self.dt = dt + self.eps = eps + self.action_buffer = None + self.timestamp_buffer = None + self.size = 0 + + def __len__(self): + return self.size + + @property + def actions(self): + if self.action_buffer is None: + return np.array([]) + return self.action_buffer[:len(self)] + + @property + def actual_timestamps(self): + if self.timestamp_buffer is None: + return np.array([]) + return self.timestamp_buffer[:len(self)] + + @property + def timestamps(self): + if self.timestamp_buffer is None: + return np.array([]) + return self.start_time + np.arange(len(self)) * self.dt + + def put(self, actions: np.ndarray, timestamps: np.ndarray): + """ + Note: timestamps is the time when the action will be issued, + not when the action will be completed (target_timestamp) + """ + + local_idxs, global_idxs, _ = get_accumulate_timestamp_idxs( + timestamps=timestamps, + start_time=self.start_time, + dt=self.dt, + eps=self.eps, + # allows overwriting previous actions + next_global_idx=None + ) + + if len(global_idxs) > 0: + if self.timestamp_buffer is None: + # first allocation + self.action_buffer = np.zeros_like(actions) + self.timestamp_buffer = np.zeros((len(actions),), dtype=np.float64) + + this_max_size = global_idxs[-1] + 1 + if this_max_size > len(self.timestamp_buffer): + # reallocate + new_size = max(this_max_size, len(self.timestamp_buffer) * 2) + new_shape = (new_size,) + self.action_buffer.shape[1:] + self.action_buffer = np.resize(self.action_buffer, new_shape) + self.timestamp_buffer = np.resize(self.timestamp_buffer, (new_size,)) + + # potentially rewrite old data (as expected) + self.action_buffer[global_idxs] = actions[local_idxs] + self.timestamp_buffer[global_idxs] = timestamps[local_idxs] + self.size = max(self.size, this_max_size) diff --git a/src/experiments/real_world/gs/config/default.yaml b/src/experiments/real_world/gs/config/default.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0d202389e38350c8eeab9a6ffeec649eafce9689 --- /dev/null +++ b/src/experiments/real_world/gs/config/default.yaml @@ -0,0 +1,12 @@ +# training +weight_im: 1.0 +weight_seg: 3.0 +grad_thresh: 0.0002 +remove_threshold: 0.005 +remove_thresh_5k: 0.25 +scale_scene_radius: 0.05 +num_iters: 10000 + +# rendering +near: 0.01 +far: 100 \ No newline at end of file diff --git a/src/experiments/real_world/gs/convert.py b/src/experiments/real_world/gs/convert.py new file mode 100644 index 0000000000000000000000000000000000000000..6c1d2a9bef92120fa7365bbb07d5e4b9a0d457f6 --- /dev/null +++ b/src/experiments/real_world/gs/convert.py @@ -0,0 +1,76 @@ +import numpy as np +from io import BytesIO + + +def quat_mult(q1, q2): + w1, x1, y1, z1 = q1 + w2, x2, y2, z2 = q2 + w = w1 * w2 - x1 * x2 - y1 * y2 - z1 * z2 + x = w1 * x2 + x1 * w2 + y1 * z2 - z1 * y2 + y = w1 * y2 - x1 * z2 + y1 * w2 + z1 * x2 + z = w1 * z2 + x1 * y2 - y1 * x2 + z1 * w2 + return np.array([w, x, y, z], dtype=np.float32) + + +def rot_mat_to_quat(rot_mat): + w = np.sqrt(1 + rot_mat[0, 0] + rot_mat[1, 1] + rot_mat[2, 2]) / 2 + x = (rot_mat[2, 1] - rot_mat[1, 2]) / (4 * w) + y = (rot_mat[0, 2] - rot_mat[2, 0]) / (4 * w) + z = (rot_mat[1, 0] - rot_mat[0, 1]) / (4 * w) + return np.array([w, x, y, z], dtype=np.float32) + + +def save_to_splat(pts, colors, scales, quats, opacities, output_file, center=True, rotate=True, rot_rev=False): + if center: + pts_mean = np.mean(pts, axis=0) + pts = pts - pts_mean + buffer = BytesIO() + for (v, c, s, q, o) in zip(pts, colors, scales, quats, opacities): + position = np.array([v[0], v[1], v[2]], dtype=np.float32) + scales = np.array([s[0], s[1], s[2]], dtype=np.float32) + rot = np.array([q[0], q[1], q[2], q[3]], dtype=np.float32) + # SH_C0 = 0.28209479177387814 + # color = np.array([0.5 + SH_C0 * c[0], 0.5 + SH_C0 * c[1], 0.5 + SH_C0 * c[2], o[0]]) + color = np.array([c[0], c[1], c[2], o[0]]) + + # rotate around x axis + if rotate: + rot_x_90 = np.array([[1, 0, 0], [0, 0, -1], [0, 1, 0]], dtype=np.float32) + if not rot_rev: + rot_x_90 = np.linalg.inv(rot_x_90) + position = np.dot(rot_x_90, position) + rot = quat_mult(rot_mat_to_quat(rot_x_90), rot) + + buffer.write(position.tobytes()) + buffer.write(scales.tobytes()) + buffer.write((color * 255).clip(0, 255).astype(np.uint8).tobytes()) + buffer.write( + ((rot / np.linalg.norm(rot)) * 128 + 128) + .clip(0, 255) + .astype(np.uint8) + .tobytes() + ) + with open(output_file, "wb") as f: + f.write(buffer.getvalue()) + + +def read_splat(splat_file): + with open(splat_file, "rb") as f: + data = f.read() + pts = [] + colors = [] + scales = [] + quats = [] + opacities = [] + for i in range(0, len(data), 32): + v = np.frombuffer(data[i : i + 12], dtype=np.float32) + s = np.frombuffer(data[i + 12 : i + 24], dtype=np.float32) + c = np.frombuffer(data[i + 24 : i + 28], dtype=np.uint8) / 255 + q = np.frombuffer(data[i + 28 : i + 32], dtype=np.uint8) + q = (q * 1.0 - 128) / 128 + pts.append(v) + scales.append(s) + colors.append(c[:3]) + quats.append(q) + opacities.append(c[3:]) + return np.array(pts), np.array(colors), np.array(scales), np.array(quats), np.array(opacities) diff --git a/src/experiments/real_world/gs/external.py b/src/experiments/real_world/gs/external.py new file mode 100644 index 0000000000000000000000000000000000000000..c7894e402dd24f4910249503272d168851cd1487 --- /dev/null +++ b/src/experiments/real_world/gs/external.py @@ -0,0 +1,296 @@ + +""" +# Copyright (C) 2023, Inria +# GRAPHDECO research group, https://team.inria.fr/graphdeco +# All rights reserved. +# +# This software is free for non-commercial, research and evaluation use +# under the terms of the LICENSE.md file found here: +# https://github.com/graphdeco-inria/gaussian-splatting/blob/main/LICENSE.md +# +# For inquiries contact george.drettakis@inria.fr + +####################################################################################################################### +##### NOTE: CODE IN THIS FILE IS NOT INCLUDED IN THE OVERALL PROJECT'S MIT LICENSE ##### +##### USE OF THIS CODE FOLLOWS THE COPYRIGHT NOTICE ABOVE ##### +####################################################################################################################### +""" + +import torch +import torch.nn.functional as func +from torch.autograd import Variable +from math import exp + + +def build_rotation(q): + norm = torch.sqrt(q[:, 0] * q[:, 0] + q[:, 1] * q[:, 1] + q[:, 2] * q[:, 2] + q[:, 3] * q[:, 3]) + q = q / norm[:, None] + rot = torch.zeros((q.size(0), 3, 3), device='cuda') + r = q[:, 0] + x = q[:, 1] + y = q[:, 2] + z = q[:, 3] + rot[:, 0, 0] = 1 - 2 * (y * y + z * z) + rot[:, 0, 1] = 2 * (x * y - r * z) + rot[:, 0, 2] = 2 * (x * z + r * y) + rot[:, 1, 0] = 2 * (x * y + r * z) + rot[:, 1, 1] = 1 - 2 * (x * x + z * z) + rot[:, 1, 2] = 2 * (y * z - r * x) + rot[:, 2, 0] = 2 * (x * z - r * y) + rot[:, 2, 1] = 2 * (y * z + r * x) + rot[:, 2, 2] = 1 - 2 * (x * x + y * y) + return rot + + +def calc_mse(img1, img2): + return ((img1 - img2) ** 2).view(img1.shape[0], -1).mean(1, keepdim=True) + + +def calc_psnr(img1, img2): + mse = ((img1 - img2) ** 2).view(img1.shape[0], -1).mean(1, keepdim=True) + return 20 * torch.log10(1.0 / torch.sqrt(mse)) + + +def gaussian(window_size, sigma): + """ + Generate a 1D Gaussian kernel. + + Parameters: + - window_size: The size (length) of the output Gaussian kernel. + - sigma: The standard deviation of the Gaussian distribution. + + Returns: + - A 1D tensor representing the Gaussian kernel normalized to have a sum of 1. + """ + + # For each position in the desired window size, calculate the Gaussian value. + # The middle of the window corresponds to the peak of the Gaussian. + gauss = torch.Tensor([exp(-(x - window_size // 2) ** 2 / float(2 * sigma ** 2)) for x in range(window_size)]) + + # Normalize the Gaussian kernel to have a sum of 1 and return it. + return gauss / gauss.sum() + + +def create_window(window_size, channel): + """ + Generate a 2D Gaussian kernel window. + + Parameters: + - window_size: The size (width and height) of the output 2D Gaussian kernel. + - channel: Number of channels for which the window will be replicated. + + Returns: + - A 4D tensor representing the Gaussian window for the specified number of channels. + """ + + # Create a 1D Gaussian kernel of size 'window_size' with standard deviation 1.5. + # The unsqueeze operation adds an extra dimension, making it a 2D tensor. + _1D_window = gaussian(window_size, 1.5).unsqueeze(1) + + # Compute the outer product of the 1D Gaussian kernel with itself to get a 2D Gaussian kernel. + # This results in a symmetric 2D Gaussian kernel. + _2D_window = _1D_window.mm(_1D_window.t()).float().unsqueeze(0).unsqueeze(0) + + # Expand the 2D window to have the desired number of channels. + # The expand operation replicates the 2D window for each channel. + window = Variable(_2D_window.expand(channel, 1, window_size, window_size).contiguous()) + + return window + + +def calc_ssim(img1, img2, window_size=11, size_average=True): + channel = img1.size(-3) + window = create_window(window_size, channel) + # print('img1', img1.device) + # window = window.to(device=img1.device) + # assert torch.isfinite(img1).all(), "img1 contains NaN or Inf" + # assert torch.isfinite(window).all(), "window contains NaN or Inf" + if img1.is_cuda: + window = window.cuda(img1.get_device()) + window = window.type_as(img1) + + return _ssim(img1, img2, window, window_size, channel, size_average) + + +def _ssim(img1, img2, window, window_size, channel, size_average=True): + mu1 = func.conv2d(img1, window, padding=window_size // 2, groups=channel) + mu2 = func.conv2d(img2, window, padding=window_size // 2, groups=channel) + + mu1_sq = mu1.pow(2) + mu2_sq = mu2.pow(2) + mu1_mu2 = mu1 * mu2 + + sigma1_sq = func.conv2d(img1 * img1, window, padding=window_size // 2, groups=channel) - mu1_sq + sigma2_sq = func.conv2d(img2 * img2, window, padding=window_size // 2, groups=channel) - mu2_sq + sigma12 = func.conv2d(img1 * img2, window, padding=window_size // 2, groups=channel) - mu1_mu2 + + c1 = 0.01 ** 2 + c2 = 0.03 ** 2 + + ssim_map = ((2 * mu1_mu2 + c1) * (2 * sigma12 + c2)) / ((mu1_sq + mu2_sq + c1) * (sigma1_sq + sigma2_sq + c2)) + + if size_average: + return ssim_map.mean() + else: + return ssim_map.mean(1).mean(1).mean(1) + + +def accumulate_mean2d_gradient(variables): + variables['means2D_gradient_accum'][variables['seen']] += torch.norm( + variables['means2D'].grad[variables['seen'], :2], dim=-1) + variables['denom'][variables['seen']] += 1 + return variables + + +def update_params_and_optimizer(new_params, params, optimizer): + for k, v in new_params.items(): + group = [x for x in optimizer.param_groups if x["name"] == k][0] + stored_state = optimizer.state.get(group['params'][0], None) + + stored_state["exp_avg"] = torch.zeros_like(v) + stored_state["exp_avg_sq"] = torch.zeros_like(v) + del optimizer.state[group['params'][0]] + + group["params"][0] = torch.nn.Parameter(v.requires_grad_(True)) + optimizer.state[group['params'][0]] = stored_state + params[k] = group["params"][0] + return params + + +def cat_params_to_optimizer(new_params, params, optimizer): + for k, v in new_params.items(): + group = [g for g in optimizer.param_groups if g['name'] == k][0] + stored_state = optimizer.state.get(group['params'][0], None) + if stored_state is not None: + stored_state["exp_avg"] = torch.cat((stored_state["exp_avg"], torch.zeros_like(v)), dim=0) + stored_state["exp_avg_sq"] = torch.cat((stored_state["exp_avg_sq"], torch.zeros_like(v)), dim=0) + del optimizer.state[group['params'][0]] + group["params"][0] = torch.nn.Parameter(torch.cat((group["params"][0], v), dim=0).requires_grad_(True)) + optimizer.state[group['params'][0]] = stored_state + params[k] = group["params"][0] + else: + group["params"][0] = torch.nn.Parameter(torch.cat((group["params"][0], v), dim=0).requires_grad_(True)) + params[k] = group["params"][0] + return params + + +def remove_points(to_remove, params, variables, optimizer): + """ + + Parameters: + - to_remove: A boolean tensor where 'True' indicates the points to remove. + - params: A dictionary containing parameters. + - variables: A dictionary containing various variables. + - optimizer: An optimizer object containing optimization information. + + Returns: + - Updated params and variables dictionaries after removal. + """ + + # Find the points that we want to keep (the opposite of `to_remove`). + to_keep = ~to_remove + + # Extract the keys from `params` except for 'cam_m' and 'cam_c'. + keys = [k for k in params.keys() if k not in ['cam_m', 'cam_c']] + + for k in keys: + # Find the parameter group associated with the current key in the optimizer. + group = [g for g in optimizer.param_groups if g['name'] == k][0] + + # Try to get the state of this group from the optimizer (this contains momentum information, etc. for optimizers like Adam). + stored_state = optimizer.state.get(group['params'][0], None) + + if stored_state is not None: + # Update the stored state by keeping only the desired entries. + stored_state["exp_avg"] = stored_state["exp_avg"][to_keep] + stored_state["exp_avg_sq"] = stored_state["exp_avg_sq"][to_keep] + + # Delete the old state and set a new parameter tensor, keeping only the desired entries and ensuring gradients can be computed. + del optimizer.state[group['params'][0]] + group["params"][0] = torch.nn.Parameter((group["params"][0][to_keep].requires_grad_(True))) + optimizer.state[group['params'][0]] = stored_state + params[k] = group["params"][0] + else: + # If there's no stored state, just update the parameter tensor. + group["params"][0] = torch.nn.Parameter(group["params"][0][to_keep].requires_grad_(True)) + params[k] = group["params"][0] + + variables['means2D_gradient_accum'] = variables['means2D_gradient_accum'][to_keep] + variables['denom'] = variables['denom'][to_keep] + variables['max_2D_radius'] = variables['max_2D_radius'][to_keep] + + return params, variables + + +def inverse_sigmoid(x): + return torch.log(x / (1 - x)) + + +def densify(params, variables, optimizer, i, grad_thresh, remove_thresh, remove_thresh_5k, scale_scene_radius): + """ + Adjusts the density of points based on various conditions and thresholds. + + Parameters: + - params: A dictionary containing parameters. + - variables: A dictionary containing various variables. + - optimizer: An optimizer object containing optimization information. + - i: An iteration or step count. + - remove_thresh: A threshold for removing points. + + Returns: + - Updated params and variables dictionaries after adjustment. + """ + if i <= 5000: + variables = accumulate_mean2d_gradient(variables) + if (i >= 500) and (i % 100 == 0): + # Calculate the gradient of the means2D values and handle NaNs. + grads = variables['means2D_gradient_accum'] / variables['denom'] + grads[grads.isnan()] = 0.0 + # Define points that should be cloned based on gradient thresholds and scales of the points. + to_clone = torch.logical_and(grads >= grad_thresh, ( + torch.max(torch.exp(params['log_scales']), dim=1).values <= scale_scene_radius * variables['scene_radius'])) + # Extract parameters for points that need cloning. + new_params = {k: v[to_clone] for k, v in params.items() if k not in ['cam_m', 'cam_c']} + params = cat_params_to_optimizer(new_params, params, optimizer) + num_pts = params['means3D'].shape[0] + + padded_grad = torch.zeros(num_pts, device="cuda") + padded_grad[:grads.shape[0]] = grads + to_split = torch.logical_and(padded_grad >= grad_thresh, + torch.max(torch.exp(params['log_scales']), dim=1).values > scale_scene_radius * variables[ + 'scene_radius']) + n = 2 # number to split into + new_params = {k: v[to_split].repeat(n, 1) for k, v in params.items() if k not in ['cam_m', 'cam_c']} + stds = torch.exp(params['log_scales'])[to_split].repeat(n, 1) + means = torch.zeros((stds.size(0), 3), device="cuda") + samples = torch.normal(mean=means, std=stds) + rots = build_rotation(params['unnorm_rotations'][to_split]).repeat(n, 1, 1) + new_params['means3D'] += torch.bmm(rots, samples.unsqueeze(-1)).squeeze(-1) + new_params['log_scales'] = torch.log(torch.exp(new_params['log_scales']) / (0.8 * n)) + params = cat_params_to_optimizer(new_params, params, optimizer) + num_pts = params['means3D'].shape[0] + + variables['means2D_gradient_accum'] = torch.zeros(num_pts, device="cuda") + variables['denom'] = torch.zeros(num_pts, device="cuda") + variables['max_2D_radius'] = torch.zeros(num_pts, device="cuda") + to_remove = torch.cat((to_split, torch.zeros(n * to_split.sum(), dtype=torch.bool, device="cuda"))) + params, variables = remove_points(to_remove, params, variables, optimizer) + + remove_threshold = remove_thresh_5k if i == 5000 else remove_thresh + to_remove = (torch.sigmoid(params['logit_opacities']) < remove_threshold).squeeze() + # print("num of to remove: ", to_remove.sum()) + if i >= 3000: + big_points_ws = torch.exp(params['log_scales']).max(dim=1).values > 0.1 * variables['scene_radius'] + # print("num of big points: ", big_points_ws.sum()) + to_remove = torch.logical_or(to_remove, big_points_ws) + params, variables = remove_points(to_remove, params, variables, optimizer) + + torch.cuda.empty_cache() + + if i > 0 and i % 3000 == 0: + new_params = {'logit_opacities': inverse_sigmoid(torch.ones_like(params['logit_opacities']) * 0.01)} + params = update_params_and_optimizer(new_params, params, optimizer) + + num_pts = params['means3D'].shape[0] + + return params, variables, num_pts diff --git a/src/experiments/real_world/gs/helpers.py b/src/experiments/real_world/gs/helpers.py new file mode 100644 index 0000000000000000000000000000000000000000..d3e71fafa9ff87b98becf92e5fb361fafc9b27ca --- /dev/null +++ b/src/experiments/real_world/gs/helpers.py @@ -0,0 +1,212 @@ +import torch +import os +import open3d as o3d +import numpy as np +from diff_gaussian_rasterization import GaussianRasterizationSettings as Camera + + +def setup_camera(w, h, k, w2c, near=0.01, far=100.0, bg=[0, 0, 0], z_threshold=0.2, device='cuda'): + fx, fy, cx, cy = k[0][0], k[1][1], k[0][2], k[1][2] + w2c = torch.tensor(w2c).cuda().float() + cam_center = torch.inverse(w2c)[:3, 3] + w2c = w2c.unsqueeze(0).transpose(1, 2) + opengl_proj = torch.tensor([[2 * fx / w, 0.0, -(w - 2 * cx) / w, 0.0], + [0.0, 2 * fy / h, -(h - 2 * cy) / h, 0.0], + [0.0, 0.0, far / (far - near), -(far * near) / (far - near)], + [0.0, 0.0, 1.0, 0.0]]).cuda().float().unsqueeze(0).transpose(1, 2) + full_proj = w2c.bmm(opengl_proj) + cam = Camera( + image_height=h, + image_width=w, + tanfovx=w / (2 * fx), + tanfovy=h / (2 * fy), + bg=torch.tensor(bg, dtype=torch.float32, device=device), + scale_modifier=1.0, + viewmatrix=w2c.to(device), + projmatrix=full_proj.to(device), + sh_degree=0, + campos=cam_center.to(device), + prefiltered=False, + z_threshold=z_threshold, + ) + return cam + + +def params2rendervar(params): + rendervar = { + 'means3D': params['means3D'], + 'colors_precomp': params['rgb_colors'], + 'rotations': torch.nn.functional.normalize(params['unnorm_rotations']), + 'opacities': torch.sigmoid(params['logit_opacities']), + 'scales': torch.exp(params['log_scales']), + 'means2D': torch.zeros_like(params['means3D'], requires_grad=True, device="cuda") + 0 + } + return rendervar + +def params2rendervar_wt(params, t): + print(params['unnorm_rotations'][t]) + rendervar = { + 'means3D': params['means3D'][t], + 'colors_precomp': params['rgb_colors'][t], + 'rotations': torch.nn.functional.normalize(params['unnorm_rotations'][t]), + 'opacities': torch.sigmoid(params['logit_opacities'][t]), + 'scales': torch.exp(params['log_scales'][t]), + 'means2D': torch.zeros_like(params['means3D'][t], requires_grad=True, device="cuda") + 0 + } + return rendervar + +def params2rendervar_consistent_rgb(params, variables): + rendervar = { + 'means3D': params['means3D'], + 'colors_precomp': variables['rgb_colors'], + 'rotations': torch.nn.functional.normalize(params['unnorm_rotations']), + 'opacities': torch.sigmoid(params['logit_opacities']), + 'scales': torch.exp(params['log_scales']), + 'means2D': torch.zeros_like(params['means3D'], requires_grad=True, device="cuda") + 0 + } + return rendervar + + +def l1_loss_v1(x, y): + return torch.abs((x - y)).mean() + + +def l1_loss_v2(x, y): + return (torch.abs(x - y).sum(-1)).mean() + + +def weighted_l2_loss_v1(x, y, w): + return torch.sqrt(((x - y) ** 2) * w + 1e-20).mean() + + +def weighted_l2_loss_v2(x, y, w): + return torch.sqrt(((x - y) ** 2).sum(-1) * w + 1e-20).mean() + + +def quat_mult(q1, q2): + w1, x1, y1, z1 = q1.T + w2, x2, y2, z2 = q2.T + w = w1 * w2 - x1 * x2 - y1 * y2 - z1 * z2 + x = w1 * x2 + x1 * w2 + y1 * z2 - z1 * y2 + y = w1 * y2 - x1 * z2 + y1 * w2 + z1 * x2 + z = w1 * z2 + x1 * y2 - y1 * x2 + z1 * w2 + return torch.stack([w, x, y, z]).T + + +def o3d_knn(pts, num_knn): + indices = [] + sq_dists = [] + pcd = o3d.geometry.PointCloud() + # breakpoint() + # print(pts.shape) + pts_cont = np.ascontiguousarray(pts, np.float64) + # print(pts_cont.shape) + pcd.points = o3d.utility.Vector3dVector(np.ascontiguousarray(pts, np.float64)) + if len(pcd.points) == 0: + print("Point cloud is empty!") + else: + pcd_tree = o3d.geometry.KDTreeFlann(pcd) + + for p in pcd.points: + [_, i, d] = pcd_tree.search_knn_vector_3d(p, num_knn + 1) + indices.append(i[1:]) + sq_dists.append(d[1:]) + return np.array(sq_dists), np.array(indices) + +def o3d_knn_tensor(pts_tensor, num_knn): + if pts_tensor.numel() == 0: + print("Point cloud is empty!") + return None, None + + pts_np = pts_tensor.detach().cpu().numpy() if pts_tensor.is_cuda else pts_tensor.numpy() + pts_np_cont = np.ascontiguousarray(pts_np, dtype=np.float64) + + pcd = o3d.geometry.PointCloud() + pcd.points = o3d.utility.Vector3dVector(pts_np_cont) + + pcd_tree = o3d.geometry.KDTreeFlann(pcd) + + indices = [] + sq_dists = [] + + for p in pts_np_cont: + [_, idx, dist] = pcd_tree.search_knn_vector_3d(p, num_knn + 1) + indices.append(idx[1:]) # Skip the first index since it's the point itself + sq_dists.append(dist[1:]) + + return torch.tensor(sq_dists, dtype=pts_tensor.dtype, device=pts_tensor.device), torch.tensor(indices, dtype=torch.long, device=pts_tensor.device) + + +def params2cpu(params, is_initial_timestep): + if is_initial_timestep: + res = {k: v.detach().cpu().contiguous().numpy() for k, v in params.items()} + else: + res = {k: v.detach().cpu().contiguous().numpy() for k, v in params.items() if + k in ['means3D', 'rgb_colors', 'unnorm_rotations']} + return res + + +def save_params(output_params, seq, exp): + to_save = {} + for k in output_params[0].keys(): + if k in output_params[1].keys(): + to_save[k] = np.stack([params[k] for params in output_params]) + else: + to_save[k] = output_params[0][k] + os.makedirs(f"./output/{exp}/{seq}", exist_ok=True) + np.savez(f"./output/{exp}/{seq}/params", **to_save) + + +def farthest_point_sample(xyz, npoint): + """ + Input: + xyz: pointcloud data, [B, N, C] + npoint: number of samples + Return: + centroids: sampled pointcloud index, [B, npoint] + """ + device = xyz.device + B, N, C = xyz.shape + centroids = torch.zeros(B, npoint, dtype=torch.long).to(device) + distance = torch.ones(B, N).to(device) * 1e10 + farthest = torch.randint(0, N, (B,), dtype=torch.long).to(device) + batch_indices = torch.arange(B, dtype=torch.long).to(device) + for i in range(npoint): + centroids[:, i] = farthest + centroid = xyz[batch_indices, farthest, :].view(B, 1, C) + dist = torch.sum((xyz - centroid) ** 2, -1) + mask = dist < distance + distance[mask] = dist[mask] + farthest = torch.max(distance, -1)[1] + return centroids + +def quat2mat(q): + norm = torch.sqrt(q[:, 0] * q[:, 0] + q[:, 1] * q[:, 1] + q[:, 2] * q[:, 2] + q[:, 3] * q[:, 3]) + q = q / norm[:, None] + rot = torch.zeros((q.shape[0], 3, 3)).to(q.device) + r = q[:, 0] + x = q[:, 1] + y = q[:, 2] + z = q[:, 3] + rot[:, 0, 0] = 1 - 2 * (y * y + z * z) + rot[:, 0, 1] = 2 * (x * y - r * z) + rot[:, 0, 2] = 2 * (x * z + r * y) + rot[:, 1, 0] = 2 * (x * y + r * z) + rot[:, 1, 1] = 1 - 2 * (x * x + z * z) + rot[:, 1, 2] = 2 * (y * z - r * x) + rot[:, 2, 0] = 2 * (x * z - r * y) + rot[:, 2, 1] = 2 * (y * z + r * x) + rot[:, 2, 2] = 1 - 2 * (x * x + y * y) + return rot + +def rot2quat(rot): + # Preallocate quaternion tensor + q = torch.zeros((rot.shape[0], 4)).to(rot.device) + + # Compute quaternion components + q[:, 0] = 0.5 * torch.sqrt(1 + rot[:, 0, 0] + rot[:, 1, 1] + rot[:, 2, 2]) + q[:, 1] = (rot[:, 2, 1] - rot[:, 1, 2]) / (4 * q[:, 0]) + q[:, 2] = (rot[:, 0, 2] - rot[:, 2, 0]) / (4 * q[:, 0]) + q[:, 3] = (rot[:, 1, 0] - rot[:, 0, 1]) / (4 * q[:, 0]) + + return q \ No newline at end of file diff --git a/src/experiments/real_world/gs/sh_utils.py b/src/experiments/real_world/gs/sh_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..7de314dfb158b5bd46512856285e2d403107dc6f --- /dev/null +++ b/src/experiments/real_world/gs/sh_utils.py @@ -0,0 +1,120 @@ +# Copyright 2021 The PlenOctree Authors. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +import torch + +C0 = 0.28209479177387814 +C1 = 0.4886025119029199 +C2 = [ + 1.0925484305920792, + -1.0925484305920792, + 0.31539156525252005, + -1.0925484305920792, + 0.5462742152960396 +] +C3 = [ + -0.5900435899266435, + 2.890611442640554, + -0.4570457994644658, + 0.3731763325901154, + -0.4570457994644658, + 1.445305721320277, + -0.5900435899266435 +] +C4 = [ + 2.5033429417967046, + -1.7701307697799304, + 0.9461746957575601, + -0.6690465435572892, + 0.10578554691520431, + -0.6690465435572892, + 0.47308734787878004, + -1.7701307697799304, + 0.6258357354491761, +] + + +def eval_sh(deg, sh, dirs): + """ + Evaluate spherical harmonics at unit directions + using hardcoded SH polynomials. + Works with torch/np/jnp. + ... Can be 0 or more batch dimensions. + Args: + deg: int SH deg. Currently, 0-3 supported + sh: jnp.ndarray SH coeffs [..., C, (deg + 1) ** 2] + dirs: jnp.ndarray unit directions [..., 3] + Returns: + [..., C] + """ + assert deg <= 4 and deg >= 0 + coeff = (deg + 1) ** 2 + assert sh.shape[-1] >= coeff + + result = C0 * sh[..., 0] + if deg > 0: + x, y, z = dirs[..., 0:1], dirs[..., 1:2], dirs[..., 2:3] + result = (result - + C1 * y * sh[..., 1] + + C1 * z * sh[..., 2] - + C1 * x * sh[..., 3]) + + if deg > 1: + xx, yy, zz = x * x, y * y, z * z + xy, yz, xz = x * y, y * z, x * z + result = (result + + C2[0] * xy * sh[..., 4] + + C2[1] * yz * sh[..., 5] + + C2[2] * (2.0 * zz - xx - yy) * sh[..., 6] + + C2[3] * xz * sh[..., 7] + + C2[4] * (xx - yy) * sh[..., 8]) + + if deg > 2: + result = (result + + C3[0] * y * (3 * xx - yy) * sh[..., 9] + + C3[1] * xy * z * sh[..., 10] + + C3[2] * y * (4 * zz - xx - yy) * sh[..., 11] + + C3[3] * z * (2 * zz - 3 * xx - 3 * yy) * sh[..., 12] + + C3[4] * x * (4 * zz - xx - yy) * sh[..., 13] + + C3[5] * z * (xx - yy) * sh[..., 14] + + C3[6] * x * (xx - 3 * yy) * sh[..., 15]) + + if deg > 3: + result = (result + C4[0] * xy * (xx - yy) * sh[..., 16] + + C4[1] * yz * (3 * xx - yy) * sh[..., 17] + + C4[2] * xy * (7 * zz - 1) * sh[..., 18] + + C4[3] * yz * (7 * zz - 3) * sh[..., 19] + + C4[4] * (zz * (35 * zz - 30) + 3) * sh[..., 20] + + C4[5] * xz * (7 * zz - 3) * sh[..., 21] + + C4[6] * (xx - yy) * (7 * zz - 1) * sh[..., 22] + + C4[7] * xz * (xx - 3 * yy) * sh[..., 23] + + C4[8] * (xx * (xx - 3 * yy) - yy * (3 * xx - yy)) * sh[..., 24]) + return result + + +def RGB2SH(rgb): + return (rgb - 0.5) / C0 + + +def SH2RGB(sh): + return sh * C0 + 0.5 diff --git a/src/experiments/real_world/gs/train_utils.py b/src/experiments/real_world/gs/train_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..ffc390ba9663cd1cb816f7f4458e5e1197747808 --- /dev/null +++ b/src/experiments/real_world/gs/train_utils.py @@ -0,0 +1,174 @@ +from pathlib import Path +import torch +import numpy as np +import random +from PIL import Image + +from pgnd.utils import get_root +import sys +root: Path = get_root(__file__) + +from diff_gaussian_rasterization import GaussianRasterizer as Renderer +from gs.helpers import setup_camera, l1_loss_v1, o3d_knn, params2rendervar +from gs.external import calc_ssim, calc_psnr + + +def get_custom_dataset(img_list, seg_list, metadata): + """ + Generates a dataset from given metadata and sequence. + """ + dataset = [] + + # Loop over filenames corresponding to 't' in the metadata + for c in range(len(img_list)): + + # Extract parameters from the metadata + w, h = metadata['w'], metadata['h'] + k = metadata['k'][c] + w2c = metadata['w2c'][c] + + # Set up a camera using extracted parameters and some default values + cam = setup_camera(w, h, k, w2c, near=0.01, far=100) + + # Get the filename of the current image and open it + if isinstance(img_list[c], str): + im = np.array(Image.open(img_list[c])) + im = torch.tensor(im).float().cuda().permute(2, 0, 1) / 255 + else: + im = torch.tensor(img_list[c]).permute(2, 0, 1).float().cuda() + if im.max() > 2.0: + im = im / 255 + + # Open the corresponding segmentation image and convert it to a tensor + if isinstance(seg_list[c], str): + seg = np.array(Image.open(seg_list[c])).astype(np.float32) + else: + seg = seg_list[c].astype(np.float32) + seg = torch.tensor(seg).float().cuda() + + # Create a color segmentation tensor. It seems to treat the segmentation as binary (object/background) + seg_col = torch.stack((seg, torch.zeros_like(seg), 1 - seg)) + + # Add the data to the dataset + dataset.append({'cam': cam, 'im': im, 'seg': seg_col, 'id': c}) + + return dataset + + +def initialize_params(init_pt_cld, metadata): + """ + Initializes parameters and variables required for a 3D point cloud based on provided data. + """ + + # Extract the segmentation data. + seg = init_pt_cld[:, 6] + + # Define a constant for the maximum number of cameras. + max_cams = 4 + + # Compute the squared distance for the K-Nearest Neighbors of each point in the 3D point cloud. + sq_dist, indices = o3d_knn(init_pt_cld[:, :3], 3) + + # Calculate the mean squared distance for the 3 closest points and clip its minimum value. + mean3_sq_dist = sq_dist.mean(-1).clip(min=0.0000001) + + # Initialize various parameters related to the 3D point cloud. + params = { + 'means3D': init_pt_cld[:, :3], # 3D coordinates of the points. + 'rgb_colors': init_pt_cld[:, 3:6], # RGB color values for the points. + 'seg_colors': np.stack((seg, np.zeros_like(seg), 1 - seg), -1), # Segmentation colors. + 'unnorm_rotations': np.tile([1, 0, 0, 0], (seg.shape[0], 1)), # Default rotations for each point. + 'logit_opacities': np.zeros((seg.shape[0], 1)), # Initial opacity values for the points. + 'log_scales': np.tile(np.log(np.sqrt(mean3_sq_dist))[..., None], (1, 3)), # Scale factors for the points. + 'cam_m': np.zeros((max_cams, 3)), # Placeholder for camera motion. + 'cam_c': np.zeros((max_cams, 3)), # Placeholder for camera center. + } + + # Convert the params to PyTorch tensors and move them to the GPU. + params = {k: torch.nn.Parameter(torch.tensor(v).cuda().float().contiguous().requires_grad_(True)) for k, v in params.items()} + # params['rgb_colors'].requires_grad = False + + # Calculate the scene radius based on the camera centers. + cam_centers = np.linalg.inv(metadata['w2c'])[:, :3, 3] + scene_radius = 1.1 * np.max(np.linalg.norm(cam_centers - np.mean(cam_centers, 0)[None], axis=-1)) + + # Initialize other associated variables. + variables = { + 'max_2D_radius': torch.zeros(params['means3D'].shape[0]).cuda().float(), # Maximum 2D radius. + 'scene_radius': scene_radius, # Scene radius. + 'means2D_gradient_accum': torch.zeros(params['means3D'].shape[0]).cuda().float(), # Means2D gradient accumulator. + 'denom': torch.zeros(params['means3D'].shape[0]).cuda().float() # Denominator. + } + + return params, variables + + +def initialize_optimizer(params, variables): + lrs = { + 'means3D': 0.00016 * variables['scene_radius'], + 'rgb_colors': 0.0, + 'seg_colors': 0.0, + 'unnorm_rotations': 0.001, + 'logit_opacities': 0.05, + 'log_scales': 0.001, + 'cam_m': 1e-4, + 'cam_c': 1e-4, + } + param_groups = [{'params': [v], 'name': k, 'lr': lrs[k]} for k, v in params.items()] + return torch.optim.Adam(param_groups, lr=0.0, eps=1e-15) + + +def get_loss(params, curr_data, variables, loss_weights): + + # Initialize dictionary to store various loss components + losses = {} + + # Convert parameters to rendering variables and retain gradient for 'means2D' + rendervar = params2rendervar(params) + rendervar['means2D'].retain_grad() + + # Perform rendering to obtain image, radius, and other outputs + im, radius, _ = Renderer(raster_settings=curr_data['cam'])(**rendervar) + + # Apply camera parameters to modify the rendered image + curr_id = curr_data['id'] + im = torch.exp(params['cam_m'][curr_id])[:, None, None] * im + params['cam_c'][curr_id][:, None, None] + + # Calculate image loss using L1 loss and ssim + losses['im'] = 0.8 * l1_loss_v1(im, curr_data['im']) + 0.2 * (1.0 - calc_ssim(im, curr_data['im'])) + variables['means2D'] = rendervar['means2D'] # Gradient only accum from colour render for densification + + segrendervar = params2rendervar(params) + segrendervar['colors_precomp'] = params['seg_colors'] + seg, _, _, = Renderer(raster_settings=curr_data['cam'])(**segrendervar) + + # Calculate segmentation loss + losses['seg'] = 0.8 * l1_loss_v1(seg, curr_data['seg']) + 0.2 * (1.0 - calc_ssim(seg, curr_data['seg'])) + + # Calculate total loss as weighted sum of individual losses + loss = sum([loss_weights[k] * v for k, v in losses.items()]) + + # Update variables related to rendering radius and seen areas + seen = radius > 0 + variables['max_2D_radius'][seen] = torch.max(radius[seen], variables['max_2D_radius'][seen]) + variables['seen'] = seen + return loss, variables + + +def report_progress(params, data, i, progress_bar, num_pts, every_i=100, vis_dir=None): + if i % every_i == 0: + im, _, _, = Renderer(raster_settings=data['cam'])(**params2rendervar(params)) + curr_id = data['id'] + im = torch.exp(params['cam_m'][curr_id])[:, None, None] * im + params['cam_c'][curr_id][:, None, None] + if vis_dir: + Image.fromarray((im.cpu().numpy().clip(0, 1) * 255).astype(np.uint8).transpose(1, 2, 0)).save(f"{vis_dir}/{i:06d}.png") + psnr = calc_psnr(im, data['im']).mean() + progress_bar.set_postfix({"img 0 PSNR": f"{psnr:.{7}f}, number of points: {num_pts}"}) + progress_bar.update(every_i) + + +def get_batch(todo_dataset, dataset): + if not todo_dataset: + todo_dataset = dataset.copy() + curr_data = todo_dataset.pop(random.randint(0, len(todo_dataset) - 1)) + return curr_data diff --git a/src/experiments/real_world/gs/trainer.py b/src/experiments/real_world/gs/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..de24d5308d1cf93cae3054b2d46e85314bcf8de8 --- /dev/null +++ b/src/experiments/real_world/gs/trainer.py @@ -0,0 +1,215 @@ +from pathlib import Path +import torch +import numpy as np +import cv2 +import os +import subprocess +import open3d as o3d +from tqdm import tqdm + +from pgnd.utils import get_root +from pgnd.ffmpeg import make_video +import sys +root: Path = get_root(__file__) + +from diff_gaussian_rasterization import GaussianRasterizer +from diff_gaussian_rasterization import GaussianRasterizationSettings as Camera +from gs.helpers import setup_camera +from gs.external import densify +from gs.train_utils import get_custom_dataset, initialize_params, initialize_optimizer, get_loss, report_progress, get_batch + + +def Rt_to_w2c(R, t): + w2c = np.concatenate([np.concatenate([R, t.reshape(3, 1)], axis=1), np.array([[0, 0, 0, 1]])], axis=0) + w2c = np.linalg.inv(w2c) + return w2c + + +class GSTrainer: + + def __init__(self, config, device): + self.config = config + self.device = device + self.clear() + + def clear(self, clear_params=True): + # training data + self.init_pt_cld = None + self.metadata = None + self.img_list = None + self.seg_list = None + # training results + if clear_params: + self.params = None + + @torch.no_grad + def render(self, render_data, cam_id, bg=[0.7, 0.7, 0.7]): + render_data = {k: v.to(self.device) for k, v in render_data.items()} + w, h = self.metadata['w'], self.metadata['h'] + k = self.metadata['k'][cam_id] + w2c = self.metadata['w2c'][cam_id] + cam = setup_camera(w, h, k, w2c, self.config['near'], self.config['far'], bg) + im, _, depth, = GaussianRasterizer(raster_settings=cam)(**render_data) + return im, depth + + def update_state_env(self, pcd, env, imgs, masks): # RGB + R_list, t_list = env.get_extrinsics() + intr_list = env.get_intrinsics() + rgb_list = [] + seg_list = [] + for c in range(env.n_fixed_cameras): + rgb_list.append(imgs[c] * masks[c][:, :, None]) + seg_list.append(masks[c] * 1.0) + self.update_state(pcd, rgb_list, seg_list, R_list, t_list, intr_list) + + def update_state_no_env(self, pcd, imgs, masks, R_list, t_list, intr_list, n_cameras=4): # RGB + rgb_list = [] + seg_list = [] + for c in range(n_cameras): + rgb_list.append(imgs[c] * masks[c][:, :, None]) + seg_list.append(masks[c] * 1.0) + self.update_state(pcd, rgb_list, seg_list, R_list, t_list, intr_list) + + def update_state(self, pcd, img_list, seg_list, R_list, t_list, intr_list): + pts = np.array(pcd.points).astype(np.float32) + colors = np.array(pcd.colors).astype(np.float32) + seg = np.ones_like(pts[:, 0:1]) + self.init_pt_cld = np.concatenate([pts, colors, seg], axis=1) + w, h = img_list[0].shape[1], img_list[0].shape[0] + assert np.all([img.shape[1] == w and img.shape[0] == h for img in img_list]) + self.metadata = { + 'w': w, + 'h': h, + 'k': [intr for intr in intr_list], + 'w2c': [Rt_to_w2c(R, t) for R, t in zip(R_list, t_list)] + } + self.img_list = img_list + self.seg_list = seg_list + + def train(self, vis_dir): + params, variables = initialize_params(self.init_pt_cld, self.metadata) + optimizer = initialize_optimizer(params, variables) + dataset = get_custom_dataset(self.img_list, self.seg_list, self.metadata) + todo_dataset = [] + num_iters = self.config['num_iters'] + loss_weights = {'im': self.config['weight_im'], 'seg': self.config['weight_seg']} + densify_params = { + 'grad_thresh': self.config['grad_thresh'], + 'remove_thresh': self.config['remove_threshold'], + 'remove_thresh_5k': self.config['remove_thresh_5k'], + 'scale_scene_radius': self.config['scale_scene_radius'] + } + progress_bar = tqdm(range(num_iters), dynamic_ncols=True) + for i in range(num_iters): + curr_data = get_batch(todo_dataset, dataset) + loss, variables = get_loss(params, curr_data, variables, loss_weights) + loss.backward() + with torch.no_grad(): + params, variables, num_pts = densify(params, variables, optimizer, i, **densify_params) + report_progress(params, dataset[0], i, progress_bar, num_pts, vis_dir=vis_dir) + optimizer.step() + optimizer.zero_grad(set_to_none=True) + progress_bar.close() + params = {k: v.detach() for k, v in params.items()} + self.params = params + + def rollout_and_render(self, dm, action, vis_dir=None, save_images=True, overwrite_params=True, remove_black=False): + assert vis_dir is not None + assert self.params is not None + + xyz_0 = self.params['means3D'] + rgb_0 = self.params['rgb_colors'] + quat_0 = torch.nn.functional.normalize(self.params['unnorm_rotations']) + opa_0 = torch.sigmoid(self.params['logit_opacities']) + scales_0 = torch.exp(self.params['log_scales']) + + low_opa_idx = opa_0[:, 0] < 0.1 + xyz_0 = xyz_0[~low_opa_idx] + rgb_0 = rgb_0[~low_opa_idx] + quat_0 = quat_0[~low_opa_idx] + opa_0 = opa_0[~low_opa_idx] + scales_0 = scales_0[~low_opa_idx] + + if remove_black: + low_color_idx = rgb_0.sum(dim=-1) < 0.5 + xyz_0 = xyz_0[~low_color_idx] + rgb_0 = rgb_0[~low_color_idx] + quat_0 = quat_0[~low_color_idx] + opa_0 = opa_0[~low_color_idx] + scales_0 = scales_0[~low_color_idx] + + eef_xyz_start = action[0] + eef_xyz_end = action[1] + + dist_thresh = 0.005 # 5mm + n_steps = int((eef_xyz_end - eef_xyz_start).norm().item() / dist_thresh) + eef_xyz = torch.lerp(eef_xyz_start, eef_xyz_end, torch.linspace(0, 1, n_steps).to(self.device)[:, None]) + eef_xyz_pad = torch.cat([eef_xyz, eef_xyz_end[None].repeat(dm.n_his, 1)], dim=0) + eef_xyz_pad = eef_xyz_pad[:, None] # (n_steps, 1, 3) + n_steps = eef_xyz_pad.shape[0] + + inlier_idx_all = np.arange(len(xyz_0)) # no outlier removal + + xyz, rgb, quat, opa, xyz_bones, eef = dm.rollout( + xyz_0, rgb_0, quat_0, opa_0, eef_xyz_pad, n_steps, inlier_idx_all) + + # interpolate smoothly + change_points = (xyz - torch.concatenate([xyz[0:1], xyz[:-1]], dim=0)).norm(dim=-1).sum(dim=-1).nonzero().squeeze(1) + change_points = torch.cat([torch.tensor([0]), change_points]) + for i in range(1, len(change_points)): + start = change_points[i - 1] + end = change_points[i] + if end - start < 2: # 0 or 1 + continue + xyz[start:end] = torch.lerp(xyz[start][None], xyz[end][None], torch.linspace(0, 1, end - start + 1).to(xyz.device)[:, None, None])[:-1] + rgb[start:end] = torch.lerp(rgb[start][None], rgb[end][None], torch.linspace(0, 1, end - start + 1).to(rgb.device)[:, None, None])[:-1] + quat[start:end] = torch.lerp(quat[start][None], quat[end][None], torch.linspace(0, 1, end - start + 1).to(quat.device)[:, None, None])[:-1] + opa[start:end] = torch.lerp(opa[start][None], opa[end][None], torch.linspace(0, 1, end - start + 1).to(opa.device)[:, None, None])[:-1] + xyz_bones[start:end] = torch.lerp(xyz_bones[start][None], xyz_bones[end][None], torch.linspace(0, 1, end - start + 1).to(xyz_bones.device)[:, None, None])[:-1] + eef[start:end] = torch.lerp(eef[start][None], eef[end][None], torch.linspace(0, 1, end - start + 1).to(eef.device)[:, None, None])[:-1] + + for _ in range(3): + xyz[1:-1] = (xyz[:-2] + 2 * xyz[1:-1] + xyz[2:]) / 4 + # quat[1:-1] = (quat[:-2] + 2 * quat[1:-1] + quat[2:]) / 4 + + quat = torch.nn.functional.normalize(quat, dim=-1) + + rendervar_list = [] + visvar_list = [] + # im_list = [] + for t in range(n_steps): + rendervar = { + 'means3D': xyz[t], + 'colors_precomp': rgb[t], + 'rotations': quat[t], + 'opacities': opa[t], + 'scales': scales_0, + 'means2D': torch.zeros_like(xyz[t]), + } + rendervar_list.append(rendervar) + + visvar = { + 'xyz_bones': xyz_bones[t].numpy(), # params['means3D'][t][fps_idx].detach().cpu().numpy(), + 'eef': eef[t].numpy(), # eef_xyz[t].detach().cpu().numpy(), + } + visvar_list.append(visvar) + + if save_images: + im, _ = self.render(rendervar, 0, bg=[0, 0, 0]) + im = im.cpu().numpy().transpose(1, 2, 0) + im = (im * 255).astype(np.uint8) + # im_list.append(im) + cv2.imwrite(os.path.join(vis_dir, f'{t:04d}.png'), im[:, :, ::-1].copy()) + + if save_images: + make_video(vis_dir, os.path.join(os.path.dirname(vis_dir), f"{vis_dir.split('/')[-1]}.mp4"), '%04d.png', 5) + + if overwrite_params: + self.params['means3D'] = xyz[-1].to(self.device) + self.params['rgb_colors'] = rgb[-1].to(self.device) + self.params['unnorm_rotations'] = quat[-1].to(self.device) + self.params['logit_opacities'] = torch.logit(opa[-1]).to(self.device) + self.params['log_scales'] = torch.log(scales_0).to(self.device) + self.params['means2D'] = torch.zeros_like(xyz[-1]).to(self.device) + + return rendervar_list, visvar_list diff --git a/src/experiments/real_world/modules_planning/__init__.py b/src/experiments/real_world/modules_planning/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/experiments/real_world/modules_planning/common/communication.py b/src/experiments/real_world/modules_planning/common/communication.py new file mode 100644 index 0000000000000000000000000000000000000000..b5bf90fc2c8b415caeff9754f1351d94081ed140 --- /dev/null +++ b/src/experiments/real_world/modules_planning/common/communication.py @@ -0,0 +1,6 @@ +XARM_STATE_PORT = 10101 +XARM_CONTROL_PORT = 10102 +OBJECT_POSE_PORT = 10109 + +XARM_CONTROL_PORT_L = 10102 +XARM_CONTROL_PORT_R = 10110 diff --git a/src/experiments/real_world/modules_planning/common/xarm.py b/src/experiments/real_world/modules_planning/common/xarm.py new file mode 100644 index 0000000000000000000000000000000000000000..f2321caf3e006afaf49628abe8ce1fbe507eb03f --- /dev/null +++ b/src/experiments/real_world/modules_planning/common/xarm.py @@ -0,0 +1,15 @@ +XY_MIN, XY_MAX = 50, 800 +X_MIN,X_MAX = 0, 800 +Y_MIN,Y_MAX = -350, 350 +Z_MIN, Z_MAX = 110, 650 + +MOVE_RATE = 1000 # hz; macro velocity = move_rate * xyz_velocity +MOVE_SLEEP = 1 / MOVE_RATE +XYZ_VELOCITY = 1.0 # mm (in every MOVE_SLEEP interval) +ANGLE_VELOCITY_MAX = 0.05 # degree + +GRIPPER_OPEN_MAX = 800 +GRIPPER_OPEN_MIN = 0 + +POSITION_UPDATE_INTERVAL = 0.02 # 100hz the reader must read faster than this +COMMAND_CHECK_INTERVAL = 0.02 # 100hz command must be sent faster than this \ No newline at end of file diff --git a/src/experiments/real_world/modules_planning/dynamics_module.py b/src/experiments/real_world/modules_planning/dynamics_module.py new file mode 100644 index 0000000000000000000000000000000000000000..2330dda49a17530fb763afe0f464bb017f3000a3 --- /dev/null +++ b/src/experiments/real_world/modules_planning/dynamics_module.py @@ -0,0 +1,373 @@ +import numpy as np +from pathlib import Path +from copy import deepcopy +from functools import partial +import torch +import torch.nn as nn +import warp as wp +from dgl.geometry import farthest_point_sampler +import random +import kornia +import open3d as o3d +from tqdm import tqdm, trange + +from pgnd.sim import Friction, CacheDiffSimWithFrictionBatch, MPMStaticsBatch, MPMCollidersBatch +from pgnd.utils import get_root, mkdir +from pgnd.ffmpeg import make_video + +from train_eval import transform_gripper_points +from gs.convert import read_splat + +root: Path = get_root(__file__) + + +def fps(x, n, device, random_start=False): + start_idx = random.randint(0, x.shape[0] - 1) if random_start else 0 + fps_idx = farthest_point_sampler(x[None], n, start_idx=start_idx)[0] + fps_idx = fps_idx.to(x.device) + return fps_idx + + +class DynamicsModule: + + def __init__(self, cfg, exp_root, ckpt_path, batch_size, num_steps_total): + + wp.init() + wp.ScopedTimer.enabled = False + wp.set_module_options({'fast_math': False}) + wp.config.verify_autograd_array_access = True + + self.exp_root = exp_root + self.batch_size = batch_size + self.num_steps_total = num_steps_total + + gpus = [int(gpu) for gpu in cfg.gpus] + self.gpus = gpus + + wp_devices = [wp.get_device(f'cuda:{gpu}') for gpu in gpus] + torch_devices = [torch.device(f'cuda:{gpu}') for gpu in gpus] + device_count = len(torch_devices) + assert device_count == 1 + wp_device = wp_devices[0] + torch_device = torch_devices[0] + self.device = torch_device + + self.cfg = cfg + n_history = cfg.sim.n_history + material: nn.Module = getattr(pgnd.material, cfg.env.blob.material.material.cls)(cfg.env.blob.material.material, n_history) + material.set_params(num_grids=cfg.sim.num_grids) + material.to(torch_device) + material.requires_grad_(False) + material.train(False) + + friction: nn.Module = Friction(np.array([cfg.sim.friction])[None].repeat(batch_size, axis=0)) # type: ignore + friction.to(torch_device) + assert len(list(friction.parameters())) > 0 + friction.requires_grad_(False) + friction.train(False) + + ckpt = torch.load(ckpt_path, map_location=torch_device) + material.load_state_dict(ckpt['material']) + self.material = material + self.friction = friction + + self.material.eval() + self.friction.eval() + + self.preprocess_metadata = {} + self.downsample_indices = None + self.target_state = None + + if cfg.sim.gripper_points: # do some manual transformation here + pts, colors, scales, quats, opacities = read_splat('experiments/log/gs/ckpts/gripper_new.splat') + n_gripper_particles = 500 + R = np.array( + [[1, 0, 0], + [0, 0, -1], + [0, 1, 0]] + ) + eef_global_T = np.array([cfg.env.blob.eef_t[0], cfg.env.blob.eef_t[1], cfg.env.blob.eef_t[2] - 0.01]) # 1018_sloth: 0.185, 1018_rope_short: 0.013) + pts = pts + eef_global_T + pts = pts @ R.T + scale = cfg.sim.preprocess_scale + pts = pts * scale + + axis = np.array([0, 1, 0]) + angle = -27 # degree + R = o3d.geometry.get_rotation_matrix_from_axis_angle(axis * np.pi / 180 * angle) + translation = np.array([-0.015, 0.06, 0]) + + pts = pts @ R.T + pts = pts + translation + + R = np.array( + [[0, 0, 1], + [-1, 0, 0], + [0, -1, 0]] + ) + pts = pts @ R.T + + gripper_pts = torch.from_numpy(pts).to(torch.float32).to(self.device) + downsample_indices = fps(gripper_pts, n_gripper_particles, self.device, random_start=True) + gripper_pts = gripper_pts[downsample_indices] + self.gripper_pts = gripper_pts + + def set_target_state(self, target_state): + self.target_state = target_state + + def reset_model(self, x=None): + return + + def reset_preprocess_meta(self, pts): + cfg = self.cfg + dx = cfg.sim.num_grids[-1] + + p_x = torch.tensor(pts).to(torch.float32).to(self.device) + R = torch.tensor( + [[1, 0, 0], + [0, 0, -1], + [0, 1, 0]] + ).to(p_x.device).to(p_x.dtype) + p_x_rotated = p_x @ R.T + + scale = cfg.sim.preprocess_scale + p_x_rotated_scaled = p_x_rotated * scale + + cfg = self.cfg + if cfg.sim.preprocess_with_table: + global_translation = torch.tensor([ + 0.5 - (p_x_rotated_scaled[:, 0].max() + p_x_rotated_scaled[:, 0].min()) / 2, + dx * (cfg.env.blob.clip_bound + 0.5) + 1e-5 - p_x_rotated_scaled[:, 1].min(), + 0.5 - (p_x_rotated_scaled[:, 2].max() + p_x_rotated_scaled[:, 2].min()) / 2, + ], dtype=p_x_rotated_scaled.dtype, device=p_x_rotated_scaled.device) + else: + global_translation = torch.tensor([ + 0.5 - (p_x_rotated_scaled[:, 0].max() + p_x_rotated_scaled[:, 0].min()) / 2, + 0.5 - (p_x_rotated_scaled[:, 1].max() + p_x_rotated_scaled[:, 1].min()) / 2, + 0.5 - (p_x_rotated_scaled[:, 2].max() + p_x_rotated_scaled[:, 2].min()) / 2, + ], dtype=p_x_rotated_scaled.dtype, device=p_x_rotated_scaled.device) + + self.preprocess_metadata = { + 'R': R, + 'scale': scale, + 'global_translation': global_translation, + } + + def reset_downsample_indices(self, pts, uniform=True): + cfg = self.cfg + if uniform: + downsample_indices = fps(pts, cfg.sim.n_particles, self.device, random_start=True) + else: + downsample_indices = torch.randperm(pts.shape[0])[:cfg.sim.n_particles] + self.downsample_indices = downsample_indices + + def rollout(self, pts, eef_xyz, eef_rot, eef_gripper, pts_his=None): + cfg = self.cfg + + # preprocess eef + # eef_xyz: (batch_size, n_look_forward + 1, n_grippers, 3) + # eef_rot: (batch_size, n_look_forward + 1, n_grippers, 3, 3) + # eef_gripper: (batch_size, n_look_forward + 1, n_grippers, 1) 0: close, 1: open + batch_size = eef_xyz.shape[0] + assert eef_xyz.shape[1] == eef_rot.shape[1] == eef_gripper.shape[1] + + R = self.preprocess_metadata['R'] + scale = self.preprocess_metadata['scale'] + global_translation = self.preprocess_metadata['global_translation'] + + eef_xyz = eef_xyz @ R.T + eef_xyz = eef_xyz * scale + eef_xyz += global_translation + + eef_rot = eef_rot @ R.T + eef_quat = kornia.geometry.conversions.rotation_matrix_to_quaternion(eef_rot) + + n_frames = eef_xyz.shape[1] - 1 + eef_vel = torch.zeros_like(eef_xyz[:, 1:]) # (batch_size, n_frames, n_grippers, 3) + eef_vel = (eef_xyz[:, 1:] - eef_xyz[:, :-1]) / cfg.sim.dt + + eef_rot_this = kornia.geometry.conversions.quaternion_to_rotation_matrix(eef_quat[:, :-1].reshape(-1, 4)) # (batch_size * n_frames * n_grippers, 3, 3) + eef_rot_next = kornia.geometry.conversions.quaternion_to_rotation_matrix(eef_quat[:, 1:].reshape(-1, 4)) # (batch_size * n_frames * n_grippers, 3, 3) + eef_rot_delta = eef_rot_this.bmm(eef_rot_next.inverse()) + eef_aa = kornia.geometry.conversions.rotation_matrix_to_axis_angle(eef_rot_delta) # (batch_size * n_frames * n_grippers, 3) + + eef_quat_vel = torch.zeros((batch_size, n_frames, cfg.sim.num_grippers, 3)).to(self.device).to(torch.float32) + eef_quat_vel = eef_aa.reshape(batch_size, n_frames, -1, 3) / cfg.sim.dt # (batch_size, n_frames, n_grippers, 3), radian per second + + grippers = torch.zeros((batch_size, n_frames, cfg.sim.num_grippers, 15)).to(self.device).to(torch.float32) + grippers[:, :, :, :3] = eef_xyz[:, :-1] # not using the last position although we gonna arrive there + grippers[:, :, :, 3:6] = eef_vel + grippers[:, :, :, 6:10] = eef_quat[:, :-1] + grippers[:, :, :, 10:13] = eef_quat_vel + grippers[:, :, :, 13] = cfg.env.blob.gripper_radius + grippers[:, :, :, 14] = eef_gripper[:, :-1].squeeze(-1) + + # preprocess pts + x = pts[self.downsample_indices] + + R = self.preprocess_metadata['R'] + scale = self.preprocess_metadata['scale'] + global_translation = self.preprocess_metadata['global_translation'] + + # data frame to model frame + x = x @ R.T + x = x * scale + x = x + global_translation + + x = x[None].repeat(batch_size, 1, 1) + x_pred, v_pred = self.rollout_preprocessed(x, grippers=grippers) # assumes static + + # inverse preprocess + x_pred = x_pred - global_translation + x_pred = x_pred / scale + x_pred = x_pred @ R + + v_pred = v_pred / scale + v_pred = v_pred @ R + return x_pred, v_pred + + @torch.no_grad() + def rollout_preprocessed(self, x, v=None, x_his=None, v_his=None, grippers=None): + cfg = self.cfg + + # reset model + wp_devices = [wp.get_device(f'cuda:{gpu}') for gpu in self.gpus] + torch_devices = [torch.device(f'cuda:{gpu}') for gpu in self.gpus] + device_count = len(torch_devices) + assert device_count == 1 + wp_device = wp_devices[0] + torch_device = torch_devices[0] + + batch_size = x.shape[0] + num_particles = x.shape[1] + assert num_particles == cfg.sim.n_particles + assert batch_size == self.batch_size + + clip_bound = torch.tensor(cfg.env.blob.clip_bound) + + if cfg.sim.gripper_points: + gripper_points = self.gripper_pts.clone()[None].repeat(batch_size, 1, 1) # (bsz, num_grippers, 3) + gripper_x, gripper_v, gripper_mask = transform_gripper_points(cfg, gripper_points, grippers) # (bsz, num_steps, num_grippers, 3) + num_gripper_particles = gripper_x.shape[2] + num_particles_orig = num_particles + num_particles = num_particles + num_gripper_particles + num_grippers = 0 + else: + gripper_x = None + gripper_v = None + gripper_mask = None + num_particles_orig = num_particles + num_gripper_particles = 0 + num_grippers = cfg.sim.num_grippers + + sim = CacheDiffSimWithFrictionBatch(cfg, num_steps_total, batch_size, self.wp_device, requires_grad=True) + + statics = StaticsBatch() + statics.init(shape=(batch_size, num_particles), device=self.wp_device) + statics.update_clip_bound(clip_bound) + colliders = CollidersBatch() + colliders.init(shape=(batch_size, num_grippers), device=wp_device) + + if v is None: + v = torch.zeros_like(x) + + if cfg.sim.n_history > 0: + if x_his is None: + x_his = x.clone().repeat(1, 1, cfg.sim.n_history) + if v_his is None: + v_his = v.clone().repeat(1, 1, cfg.sim.n_history) + + colliders.initialize_grippers(grippers[:, 0]) + + assert cfg.sim.skip_frame == cfg.sim.interval # required for the following line + + xs = [] + vs = [] + for step in trange(self.num_steps_total): + colliders.update_grippers(grippers[:, step]) # ignore gripper radius + if cfg.sim.gripper_forcing: + x_in = x.clone() + else: + x_in = None + + if cfg.sim.gripper_points: + assert gripper_x is not None and gripper_v is not None and gripper_mask is not None + x = torch.cat([x, gripper_x[:, step]], dim=1) # gripper_x: (bsz, num_steps, num_particles, 3) + v = torch.cat([v, gripper_v[:, step]], dim=1) + x_his = torch.cat([x_his, torch.zeros((gripper_x.shape[0], gripper_x.shape[2], cfg.sim.n_history * 3), device=x_his.device, dtype=x_his.dtype)], dim=1) # type: ignore + v_his = torch.cat([v_his, torch.zeros((gripper_x.shape[0], gripper_x.shape[2], cfg.sim.n_history * 3), device=v_his.device, dtype=v_his.dtype)], dim=1) # type: ignore + + if C.shape[1] < num_particles: + C = torch.cat([C, torch.zeros((gripper_x.shape[0], gripper_x.shape[2], 3, 3), device=C.device, dtype=C.dtype)], dim=1) + if F.shape[1] < num_particles: + F = torch.cat([F, torch.eye(3, device=F.device).unsqueeze(0).unsqueeze(0).repeat(gripper_x.shape[0], gripper_x.shape[2], 1, 1)], dim=1) + if enabled.shape[1] < num_particles: + enabled = torch.cat([enabled, gripper_mask[:, step]], dim=1) + statics.update_enabled(enabled.cpu()) + + pred = self.material(x, v, x_his, v_his, C, F) + + if pred.isnan().any(): + print('pred isnan', pred.min().item(), pred.max().item()) + break + if pred.isinf().any(): + print('pred isinf', pred.min().item(), pred.max().item()) + break + + x, v = sim(statics, colliders, step, x, v, self.friction.mu, pred) + + if cfg.sim.gripper_forcing: + assert not cfg.sim.gripper_points + assert grippers is not None and x_in is not None + gripper_xyz = grippers[:, step, :, :3] # (bsz, num_grippers, 3) + gripper_v = grippers[:, step, :, 3:6] # (bsz, num_grippers, 3) + x_from_gripper = x_in[:, None] - gripper_xyz[:, :, None] # (bsz, num_grippers, num_particles, 3) + x_gripper_distance = torch.norm(x_from_gripper, dim=-1) # (bsz, num_grippers, num_particles) + x_gripper_distance_mask = x_gripper_distance < cfg.env.blob.gripper_radius + x_gripper_distance_mask = x_gripper_distance_mask.unsqueeze(-1).repeat(1, 1, 1, 3) # (bsz, num_particles, num_grippers, 3) + gripper_v_expand = gripper_v[:, :, None].repeat(1, 1, num_particles, 1) # (bsz, num_grippers, num_particles, 3) + + gripper_closed = grippers[:, step, :, -1] < 0.5 # (bsz, num_grippers) # 1: open, 0: close + x_gripper_distance_mask = torch.logical_and(x_gripper_distance_mask, gripper_closed[:, :, None, None].repeat(1, 1, num_particles, 3)) + + gripper_quat_vel = grippers[:, step, :, 10:13] # (bsz, num_grippers, 3) + gripper_angular_vel = torch.norm(gripper_quat_vel, dim=-1, keepdim=True) # (bsz, num_grippers, 1) + gripper_quat_axis = gripper_quat_vel / (gripper_angular_vel + 1e-10) # (bsz, num_grippers, 3) + + grid_from_gripper_axis = x_from_gripper - \ + (gripper_quat_axis[:, :, None] * x_from_gripper).sum(dim=-1, keepdim=True) * gripper_quat_axis[:, :, None] # (bsz, num_grippers, num_particles, 3) + gripper_v_expand = torch.cross(gripper_quat_vel[:, :, None], grid_from_gripper_axis, dim=-1) + gripper_v_expand + + for i in range(gripper_xyz.shape[1]): + x_gripper_distance_mask_single = x_gripper_distance_mask[:, i] + x[x_gripper_distance_mask_single] = x_in[x_gripper_distance_mask_single] + cfg.sim.dt * gripper_v_expand[:, i][x_gripper_distance_mask_single] + v[x_gripper_distance_mask_single] = gripper_v_expand[:, i][x_gripper_distance_mask_single] + + if cfg.sim.n_history > 0: + assert x_his is not None and v_his is not None + if cfg.sim.gripper_points: + x_his_particles = torch.cat([x_his[:, :num_particles_orig].reshape(batch_size, num_particles_orig, -1, 3)[:, :, 1:], x[:, :num_particles_orig, None].detach()], dim=2) + v_his_particles = torch.cat([v_his[:, :num_particles_orig].reshape(batch_size, num_particles_orig, -1, 3)[:, :, 1:], v[:, :num_particles_orig, None].detach()], dim=2) + x_his = x_his_particles.reshape(batch_size, num_particles_orig, -1) + v_his = v_his_particles.reshape(batch_size, num_particles_orig, -1) + else: + x_his = torch.cat([x_his.reshape(batch_size, num_particles, -1, 3)[:, :, 1:], x[:, :, None].detach()], dim=2) + v_his = torch.cat([v_his.reshape(batch_size, num_particles, -1, 3)[:, :, 1:], v[:, :, None].detach()], dim=2) + x_his = x_his.reshape(batch_size, num_particles, -1) + v_his = v_his.reshape(batch_size, num_particles, -1) + + if cfg.sim.gripper_points: + x = x[:, :num_particles_orig] + v = v[:, :num_particles_orig] + enabled = enabled[:, :num_particles_orig] + + colliders_save = colliders.export() + colliders_save = {key: torch.from_numpy(colliders_save[key])[0].to(x.device).to(x.dtype) for key in colliders_save} + + xs.append(x.detach().clone()) + vs.append(v.detach().clone()) + + xs = torch.stack(xs, dim=1) # (batch_size, num_steps_total, num_particles, 3) + vs = torch.stack(vs, dim=1) # (batch_size, num_steps_total, num_particles, 3) + + return xs, vs diff --git a/src/experiments/real_world/modules_planning/kinematics_utils.py b/src/experiments/real_world/modules_planning/kinematics_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..a23e03865ccfb70af3892a80551b47c1341677e0 --- /dev/null +++ b/src/experiments/real_world/modules_planning/kinematics_utils.py @@ -0,0 +1,137 @@ +import os +import copy +import time +import numpy as np +import transforms3d +from pathlib import Path +import open3d as o3d + +import warnings +warnings.filterwarnings("always", category=RuntimeWarning) + +import sapien.core as sapien + +from nclaw.utils import get_root +root: Path = get_root(__file__) + +def np2o3d(pcd, color=None): + # pcd: (n, 3) + # color: (n, 3) + pcd_o3d = o3d.geometry.PointCloud() + pcd_o3d.points = o3d.utility.Vector3dVector(pcd) + if color is not None: + assert pcd.shape[0] == color.shape[0] + assert color.max() <= 1 + assert color.min() >= 0 + pcd_o3d.colors = o3d.utility.Vector3dVector(color) + return pcd_o3d + + +class KinHelper(): + def __init__(self, robot_name, headless=True): + # load robot + if "xarm7" in robot_name: + urdf_path = str(root / "assets/robots/xarm7/xarm7.urdf") + self.eef_name = 'link7' + else: + raise RuntimeError('robot name not supported') + self.robot_name = robot_name + + # load sapien robot + self.engine = sapien.Engine() + self.scene = self.engine.create_scene() + loader = self.scene.create_urdf_loader() + self.sapien_robot = loader.load(urdf_path) + self.robot_model = self.sapien_robot.create_pinocchio_model() + self.sapien_eef_idx = -1 + for link_idx, link in enumerate(self.sapien_robot.get_links()): + if link.name == self.eef_name: + self.sapien_eef_idx = link_idx + break + + # load meshes and offsets from urdf_robot + self.meshes = {} + self.scales = {} + self.offsets = {} + self.pcd_dict = {} + self.tool_meshes = {} + + def compute_fk_sapien_links(self, qpos, link_idx): + fk = self.robot_model.compute_forward_kinematics(qpos) + link_pose_ls = [] + for i in link_idx: + link_pose_ls.append(self.robot_model.get_link_pose(i).to_transformation_matrix()) + return link_pose_ls + + def compute_ik_sapien(self, initial_qpos, cartesian, verbose=False): + """ + Compute IK using sapien + initial_qpos: (N, ) numpy array + cartesian: (6, ) numpy array, x,y,z in meters, r,p,y in radians + """ + tf_mat = np.eye(4) + tf_mat[:3, :3] = transforms3d.euler.euler2mat(ai=cartesian[3], aj=cartesian[4], ak=cartesian[5], axes='sxyz') + tf_mat[:3, 3] = cartesian[0:3] + pose = sapien.Pose.from_transformation_matrix(tf_mat) + + if 'xarm7' in self.robot_name: + active_qmask = np.array([True, True, True, True, True, True, True]) + qpos = self.robot_model.compute_inverse_kinematics( + link_index=self.sapien_eef_idx, + pose=pose, + initial_qpos=initial_qpos, + active_qmask=active_qmask, + ) + if verbose: + print('ik qpos:', qpos) + + # verify ik + fk_pose = self.compute_fk_sapien_links(qpos[0], [self.sapien_eef_idx])[0] + + if verbose: + print('target pose for IK:', tf_mat) + print('fk pose for IK:', fk_pose) + + pose_diff = np.linalg.norm(fk_pose[:3, 3] - tf_mat[:3, 3]) + rot_diff = np.linalg.norm(fk_pose[:3, :3] - tf_mat[:3, :3]) + + if pose_diff > 0.01 or rot_diff > 0.01: + print('ik pose diff:', pose_diff) + print('ik rot diff:', rot_diff) + warnings.warn('ik pose diff or rot diff too large. Return initial qpos.', RuntimeWarning, stacklevel=2, ) + return initial_qpos + return qpos[0] + + +def test_fk(): + robot_name = 'xarm7' + init_qpos = np.array([0, 0, 0, 0, 0, 0, 0]) + end_qpos = np.array([0, 0, 0, 0, 0, 0, 0]) + + kin_helper = KinHelper(robot_name=robot_name, headless=False) + START_ARM_POSE = [0, 0, 0, 0, 0, 0, 0] + + for i in range(100): + curr_qpos = init_qpos + (end_qpos - init_qpos) * i / 100 + fk = kin_helper.compute_fk_sapien_links(curr_qpos, [kin_helper.sapien_eef_idx])[0] + fk_euler = transforms3d.euler.mat2euler(fk[:3, :3], axes='sxyz') + + if i == 0: + init_ik_qpos = np.array(START_ARM_POSE) + ik_qpos = kin_helper.compute_ik_sapien(init_ik_qpos, np.array(list(fk[:3, 3]) + list(fk_euler)).astype(np.float32)) + re_fk_pos_mat = kin_helper.compute_fk_sapien_links(ik_qpos, [kin_helper.sapien_eef_idx])[0] + re_fk_euler = transforms3d.euler.mat2euler(re_fk_pos_mat[:3, :3], axes='sxyz') + re_fk_pos = re_fk_pos_mat[:3, 3] + print('re_fk_pos diff:', np.linalg.norm(re_fk_pos - fk[:3, 3])) + print('re_fk_euler diff:', np.linalg.norm(np.array(re_fk_euler) - np.array(fk_euler))) + + + init_ik_qpos = ik_qpos.copy() + qpos_diff = np.linalg.norm(ik_qpos[:6] - curr_qpos[:6]) + if qpos_diff > 0.01: + warnings.warn('qpos diff too large', RuntimeWarning, stacklevel=2, ) + + time.sleep(0.1) + +if __name__ == "__main__": + test_fk() diff --git a/src/experiments/real_world/modules_planning/planning_env.py b/src/experiments/real_world/modules_planning/planning_env.py new file mode 100644 index 0000000000000000000000000000000000000000..0eace49a85e40f94410e61bee1847150b7afe4ef --- /dev/null +++ b/src/experiments/real_world/modules_planning/planning_env.py @@ -0,0 +1,709 @@ +from typing import Callable, List +from omegaconf import DictConfig, OmegaConf +from enum import Enum +import torch +import numpy as np +import multiprocess as mp +import time +import threading +import cv2 +import pygame +import os +import pickle +import subprocess +from pathlib import Path +from copy import deepcopy +import open3d as o3d + +from pgnd.utils import get_root, mkdir +root: Path = get_root(__file__) + +from camera.multi_realsense import MultiRealsense +from camera.single_realsense import SingleRealsense + +from modules_planning.segment_perception import SegmentPerception +from modules_planning.planning_module import PlanningModule +from modules_planning.xarm_controller import XarmController +from modules_planning.udp_util import udpReceiver, udpSender +from modules_planning.common.communication import XARM_STATE_PORT, XARM_CONTROL_PORT, XARM_CONTROL_PORT_L, XARM_CONTROL_PORT_R +from modules_planning.common.xarm import GRIPPER_OPEN_MIN, GRIPPER_OPEN_MAX, POSITION_UPDATE_INTERVAL, COMMAND_CHECK_INTERVAL + + +class EnvEnum(Enum): + NONE = 0 + INFO = 1 + DEBUG = 2 + VERBOSE = 3 + + +class RobotPlanningEnv(mp.Process): + + def __init__( + self, + cfg: DictConfig, + exp_root: str, + ckpt_path: Path | str, + + realsense: MultiRealsense | SingleRealsense | None = None, + shm_manager: mp.managers.SharedMemoryManager | None = None, + serial_numbers: list[str] | None= None, + resolution: tuple[int, int] = (1280, 720), + capture_fps: int = 30, + enable_depth: bool = True, + enable_color: bool = True, + + record_fps: int | None = 0, + record_time: float | None = 60 * 10, # 10 minutes + text_prompts: str = "white cotton rope.", + show_annotation: bool = True, + + use_robot: bool = False, + robot_ip: str = '192.168.1.196', + gripper_enable: bool = False, + calibrate_result_dir: Path = root / "log" / "latest_calibration", + debug: bool | int | None = False, + + bimanual: bool = False, + bimanual_robot_ip: List[str] = ['192.168.1.196', '192.168.1.224'], + + construct_target: bool = False, + + ) -> None: + + # Debug level + self.debug = 0 if debug is None else (2 if debug is True else debug) + + self.cfg = cfg + self.exp_root = Path(exp_root) + + if os.path.exists(self.exp_root.parent / "target" / "target.pcd"): + mkdir(self.exp_root / "target", overwrite=False, resume=True) + os.system(f"cp {self.exp_root.parent / 'target' / 'target.pcd'} {self.exp_root / 'target'}") + else: + assert construct_target, "target.pcd not found" + self.construct_target = construct_target + if construct_target: + mkdir(self.exp_root.parent / "target", overwrite=False, resume=False) + + self.torch_device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + + self.bimanual = bimanual + if self.bimanual: + self.bbox = np.array([[0.0, 0.7], [-0.35, 0.45 + 0.75], [-0.8, 0.0]]) + else: + self.bbox = np.array([[0.0, 0.7], [-0.35, 0.45], [-0.8, 0.0]]) + + self.text_prompts = text_prompts + self.show_annotation = show_annotation + + self.capture_fps = capture_fps + self.record_fps = record_fps + + self.state = mp.Manager().dict() # should be main explict exposed variable to the child class / process + + # Realsense camera setup + # camera is always required for real env + if realsense is not None: + assert isinstance(realsense, MultiRealsense) or isinstance(realsense, SingleRealsense) + self.realsense = realsense + self.serial_numbers = list(self.realsense.cameras.keys()) + else: + self.realsense = MultiRealsense( + shm_manager=shm_manager, + serial_numbers=serial_numbers, + resolution=resolution, + capture_fps=capture_fps, + enable_depth=enable_depth, + enable_color=enable_color, + verbose=self.debug > EnvEnum.VERBOSE.value + ) + self.serial_numbers = list(self.realsense.cameras.keys()) + + # manual + self.realsense.set_exposure(exposure=60, gain=60) # 100: bright, 60: dark + self.realsense.set_white_balance(3800) + + # base calibration + self.calibrate_result_dir = calibrate_result_dir + with open(f'{self.calibrate_result_dir}/base.pkl', 'rb') as f: + base = pickle.load(f) + if self.bimanual: + R_leftbase2board = base['R_leftbase2world'] + t_leftbase2board = base['t_leftbase2world'] + R_rightbase2board = base['R_rightbase2world'] + t_rightbase2board = base['t_rightbase2world'] + leftbase2world_mat = np.eye(4) + leftbase2world_mat[:3, :3] = R_leftbase2board + leftbase2world_mat[:3, 3] = t_leftbase2board + self.state["b2w_l"] = leftbase2world_mat + rightbase2world_mat = np.eye(4) + rightbase2world_mat[:3, :3] = R_rightbase2board + rightbase2world_mat[:3, 3] = t_rightbase2board + self.state["b2w_r"] = rightbase2world_mat + else: + R_base2board = base['R_base2world'] + t_base2board = base['t_base2world'] + base2world_mat = np.eye(4) + base2world_mat[:3, :3] = R_base2board + base2world_mat[:3, 3] = t_base2board + self.state["b2w"] = base2world_mat + + # camera calibration + extr_list = [] + with open(f'{self.calibrate_result_dir}/rvecs.pkl', 'rb') as f: + rvecs = pickle.load(f) + with open(f'{self.calibrate_result_dir}/tvecs.pkl', 'rb') as f: + tvecs = pickle.load(f) + for i in range(len(self.serial_numbers)): + device = self.serial_numbers[i] + R_world2cam = cv2.Rodrigues(rvecs[device])[0] + t_world2cam = tvecs[device][:, 0] + extr_mat = np.eye(4) + extr_mat[:3, :3] = R_world2cam + extr_mat[:3, 3] = t_world2cam + extr_list.append(extr_mat) + self.state["extr"] = np.stack(extr_list) + + # save calibration + mkdir(self.exp_root / "calibration", overwrite=False, resume=False) + subprocess.run(f'cp -r {self.calibrate_result_dir}/* {str(self.exp_root)}/calibration', shell=True) + + # Perception setup + self.perception = SegmentPerception( + realsense=self.realsense, + capture_fps=self.realsense.capture_fps, # mush be the same as realsense capture fps + record_fps=record_fps, + record_time=record_time, + text_prompts=self.text_prompts, + show_annotation=self.show_annotation, + bbox=self.bbox, + device=self.torch_device, + verbose=self.debug > EnvEnum.VERBOSE.value) + + # Robot setup + self.use_robot = use_robot + if use_robot: + if bimanual: + self.left_xarm_controller = XarmController( + start_time=time.time(), + ip=bimanual_robot_ip[0], + gripper_enable=gripper_enable, + mode='3D', + command_mode='cartesian', + robot_id=0, + verbose=True, + ) + self.right_xarm_controller = XarmController( + start_time=time.time(), + ip=bimanual_robot_ip[1], + gripper_enable=gripper_enable, + mode='3D', + command_mode='cartesian', + robot_id=1, + verbose=True, + ) + self.xarm_controller = None + else: + self.xarm_controller = XarmController( + start_time=time.time(), + ip=robot_ip, + gripper_enable=gripper_enable, + mode='3D', + command_mode='cartesian', + verbose=True, + ) + self.left_xarm_controller = None + self.right_xarm_controller = None + else: + self.left_xarm_controller = None + self.right_xarm_controller = None + self.xarm_controller = None + + # subprocess can only start a process object created by current process + self._real_alive = mp.Value('b', False) + + self.start_time = 0 + mp.Process.__init__(self) + self._alive = mp.Value('b', False) + + # pygame + # Initialize a separate Pygame window for image display + img_w, img_h = 848, 480 + col_num = 2 + self.screen_width, self.screen_height = img_w * col_num, img_h * len(self.realsense.serial_numbers) + self.image_window = None + + # Shared memory for image data + self.image_data = mp.Array('B', np.zeros((self.screen_height, self.screen_width, 3), dtype=np.uint8).flatten()) + + # robot eef + self.eef_point = np.array([[0.0, 0.0, 0.175]]) # the eef point in the gripper frame + + # planning_module setup + self.planning_module = PlanningModule( + cfg=cfg, + exp_root=self.exp_root, + ckpt_path=ckpt_path, + device=self.torch_device, + bimanual=bimanual, + bbox=self.bbox, + eef_point=self.eef_point, + debug=self.debug + ) + self.planning_module.set_target(str(self.exp_root / "target" / "target.pcd")) + self.command = [] + self.command_sender = None + self.command_sender_left = None + self.command_sender_right = None + + def real_start(self, start_time) -> None: + self._real_alive.value = True + print("starting real env") + + # Realsense camera setup + self.realsense.start() + self.realsense.restart_put(start_time + 1) + time.sleep(2) + + # Perception setup + if self.perception is not None: + self.perception.start() + self.perception.update_extrinsics(self.state["extr"]) + + # Robot setup + if self.use_robot: + if self.bimanual: + assert self.left_xarm_controller is not None + assert self.right_xarm_controller is not None + self.left_xarm_controller.start() + self.right_xarm_controller.start() + else: + assert self.xarm_controller is not None + self.xarm_controller.start() + + while not self.real_alive: + self._real_alive.value = True + print(".", end="") + time.sleep(0.5) + + # get intrinsics + intrs = self.get_intrinsics() + intrs = np.array(intrs) + np.save(self.exp_root / "calibration" / "intrinsics.npy", intrs) + + print("real env started") + + self.update_real_state_t = threading.Thread(name="update_real_state", target=self.update_real_state) + self.update_real_state_t.start() + + def real_stop(self, wait=False) -> None: + self._real_alive.value = False + if self.use_robot: + if self.bimanual and self.left_xarm_controller and self.left_xarm_controller.is_controller_alive: + self.left_xarm_controller.stop() + if self.bimanual and self.right_xarm_controller and self.right_xarm_controller.is_controller_alive: + self.right_xarm_controller.stop() + if not self.bimanual and self.xarm_controller and self.xarm_controller.is_controller_alive: + self.xarm_controller.stop() + if self.perception is not None and self.perception.alive.value: + self.perception.stop() + self.realsense.stop(wait=False) + + self.image_display_thread.join() + self.update_real_state_t.join() + print("real env stopped") + + @property + def real_alive(self) -> bool: + alive = self._real_alive.value + if self.perception is not None: + alive = alive and self.perception.alive.value + if self.use_robot: + controller_alive = \ + (self.bimanual and self.left_xarm_controller and self.left_xarm_controller.is_controller_alive \ + and self.right_xarm_controller and self.right_xarm_controller.is_controller_alive) \ + or (not self.bimanual and self.xarm_controller and self.xarm_controller.is_controller_alive) + alive = alive and controller_alive + self._real_alive.value = alive + return self._real_alive.value + + def _update_perception(self) -> None: + if self.perception.alive.value and self.perception.do_process.value: + if not self.perception.perception_q.empty(): + self.state["perception_out"] = { + "time": time.time(), + "value": self.perception.perception_q.get() + } + return + + def _update_robot(self) -> None: + if self.bimanual: + assert self.left_xarm_controller is not None + assert self.right_xarm_controller is not None + if self.left_xarm_controller.is_controller_alive and self.right_xarm_controller.is_controller_alive: + if not self.left_xarm_controller.cur_trans_q.empty() and not self.right_xarm_controller.cur_trans_q.empty(): + self.state["robot_out"] = { + "time": time.time(), + "left_value": self.left_xarm_controller.cur_trans_q.get(), + "right_value": self.right_xarm_controller.cur_trans_q.get() + } + if not self.left_xarm_controller.cur_gripper_q.empty() and not self.right_xarm_controller.cur_trans_q.empty(): + self.state["gripper_out"] = { + "time": time.time(), + "left_value": self.left_xarm_controller.cur_gripper_q.get(), + "right_value": self.right_xarm_controller.cur_gripper_q.get() + } + else: + assert self.xarm_controller is not None + if self.xarm_controller.is_controller_alive: + if not self.xarm_controller.cur_trans_q.empty(): + self.state["robot_out"] = { + "time": time.time(), + "value": self.xarm_controller.cur_trans_q.get() + } + if not self.xarm_controller.cur_gripper_q.empty(): + self.state["gripper_out"] = { + "time": time.time(), + "value": self.xarm_controller.cur_gripper_q.get() + } + return + + def update_real_state(self) -> None: + while self.real_alive: + try: + if self.use_robot: + self._update_robot() + if self.perception is not None: + self._update_perception() + except BaseException as e: + print(f"Error in update_real_state: {e.with_traceback()}") + break + print("update_real_state stopped") + + def display_image(self): + pygame.init() + self.image_window = pygame.display.set_mode((self.screen_width, self.screen_height)) + pygame.display.set_caption('Image Display Window') + while self._alive.value: + # Extract image data from the shared array + image = np.frombuffer(self.image_data.get_obj(), dtype=np.uint8).reshape((self.screen_height, self.screen_width, 3)) + pygame_image = pygame.surfarray.make_surface(image.swapaxes(0, 1)) + + # Blit the image to the window + self.image_window.blit(pygame_image, (0, 0)) + pygame.display.update() + + # Handle events (e.g., close window) + for event in pygame.event.get(): + if event.type == pygame.QUIT: + self.stop() + pygame.quit() + return + + time.sleep(1 / self.realsense.capture_fps) # 30 FPS + print("Image display stopped") + + def start_image_display(self): + # Start a thread for the image display loop + self.image_display_thread = threading.Thread(name="display_image", target=self.display_image) + self.image_display_thread.start() + + def run(self) -> None: + + robot_record_dir = None + if self.bimanual: + self.command_sender_left = udpSender(port=XARM_CONTROL_PORT_L) + self.command_sender_right = udpSender(port=XARM_CONTROL_PORT_R) + else: + self.command_sender = udpSender(port=XARM_CONTROL_PORT) + + # initialize images + rgbs = [] # bgr + depths = [] + resolution = self.realsense.resolution + for i in range(len(self.realsense.serial_numbers)): + rgbs.append(np.zeros((resolution[1], resolution[0], 3), np.uint8)) + depths.append(np.zeros((resolution[1], resolution[0]), np.uint16)) + + fps = self.record_fps if self.record_fps and self.record_fps > 0 else self.realsense.capture_fps # visualization fps + idx = 0 + + while self.alive: + try: + tic = time.time() + state = deepcopy(self.state) + if self.bimanual: + b2w_l = state["b2w_l"] + b2w_r = state["b2w_r"] + b2w = None + else: + b2w = state["b2w"] + b2w_l = None + b2w_r = None + + # update images from realsense to shared memory + perception_out = state.get("perception_out", None) + robot_out = state.get("robot_out", None) + gripper_out = state.get("gripper_out", None) + + # clear previous images + if perception_out is not None: + self.state["perception_out"] = None + + intrinsics = self.get_intrinsics() + state["intr"] = intrinsics + self.state["intr"] = intrinsics + self.perception.update_intrinsics(intrinsics) + + update_perception = True + if update_perception and perception_out is not None: + print("update image display") + for k in range(len(perception_out['value']['color'])): + rgbs[k] = perception_out['value']['color'][k].copy() + depths[k] = perception_out['value']['depth'][k].copy() + intr = intrinsics[k] + + l = 0.1 + origin = state["extr"][k] @ np.array([0, 0, 0, 1]) + x_axis = state["extr"][k] @ np.array([l, 0, 0, 1]) + y_axis = state["extr"][k] @ np.array([0, l, 0, 1]) + z_axis = state["extr"][k] @ np.array([0, 0, l, 1]) + origin = origin[:3] / origin[2] + x_axis = x_axis[:3] / x_axis[2] + y_axis = y_axis[:3] / y_axis[2] + z_axis = z_axis[:3] / z_axis[2] + origin = intr @ origin + x_axis = intr @ x_axis + y_axis = intr @ y_axis + z_axis = intr @ z_axis + cv2.line(rgbs[k], (int(origin[0]), int(origin[1])), (int(x_axis[0]), int(x_axis[1])), (255, 0, 0), 2) + cv2.line(rgbs[k], (int(origin[0]), int(origin[1])), (int(y_axis[0]), int(y_axis[1])), (0, 255, 0), 2) + cv2.line(rgbs[k], (int(origin[0]), int(origin[1])), (int(z_axis[0]), int(z_axis[1])), (0, 0, 255), 2) + if self.use_robot: + eef_points = np.concatenate([self.eef_point, np.ones((self.eef_point.shape[0], 1))], axis=1) # (n, 4) + eef_colors = [(0, 255, 255)] + + eef_axis = np.array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]) # (3, 4) + eef_axis_colors = [(0, 0, 255), (0, 255, 0), (255, 0, 0)] + + if robot_out is not None: + assert gripper_out is not None + eef_points_world_vis = [] + eef_points_vis = [] + if self.bimanual: + left_eef_world_list = [] + right_eef_world_list = [] + assert b2w_l is not None + assert b2w_r is not None + for val, b2w, eef_world_list in zip(["left_value", "right_value"], [b2w_l, b2w_r], [left_eef_world_list, right_eef_world_list]): + e2b = robot_out[val] # (4, 4) + eef_points_world = (b2w @ e2b @ eef_points.T).T[:, :3] # (n, 3) + eef_points_vis.append(eef_points) + eef_points_world_vis.append(eef_points_world) + eef_orientation_world = (b2w[:3, :3] @ e2b[:3, :3] @ eef_axis[:, :3].T).T # (3, 3) + eef_world = np.concatenate([eef_points_world, eef_orientation_world], axis=0) # (n+3, 3) + eef_world_list.append(eef_world) + left_eef_world = np.concatenate(left_eef_world_list, axis=0) # (n+3, 3) + right_eef_world = np.concatenate(right_eef_world_list, axis=0) # (n+3, 3) + eef_world = np.concatenate([left_eef_world, right_eef_world], axis=0) # (2n+6, 3) + else: + assert b2w is not None + e2b = robot_out["value"] # (4, 4) + eef_points_world = (b2w @ e2b @ eef_points.T).T[:, :3] # (n, 3) + eef_points_vis.append(eef_points) + eef_points_world_vis.append(eef_points_world) + eef_orientation_world = (b2w[:3, :3] @ e2b[:3, :3] @ eef_axis[:, :3].T).T # (3, 3) + eef_world = np.concatenate([eef_points_world, eef_orientation_world], axis=0) # (n+3, 3) + + # add gripper + if self.bimanual: + left_gripper = gripper_out["left_value"] + right_gripper = gripper_out["right_value"] + gripper_world = np.array([left_gripper, right_gripper, 0.0])[None, :] # (1, 3) + else: + gripper = gripper_out["value"] + gripper_world = np.array([gripper, 0.0, 0.0])[None, :] # (1, 3) + + eef_world = np.concatenate([eef_world, gripper_world], axis=0) # (n+4, 3) or (2n+7, 3) + if robot_record_dir is not None: + np.savetxt(robot_record_dir / f"{robot_out['time']:.3f}.txt", eef_world, fmt="%.6f") + + eef_points_vis = np.concatenate(eef_points_vis, axis=0) + eef_points_world_vis = np.concatenate(eef_points_world_vis, axis=0) + eef_points_world_vis = np.concatenate([eef_points_world_vis, np.ones((eef_points_world_vis.shape[0], 1))], axis=1) # (n, 4) + eef_colors = eef_colors * eef_points_world_vis.shape[0] + + if self.bimanual: + for point_orig, point, color, val, b2w in zip(eef_points_vis, eef_points_world_vis, eef_colors, ["left_value", "right_value"], [b2w_l, b2w_r]): + e2b = robot_out[val] # (4, 4) + point = state["extr"][k] @ point + point = point[:3] / point[2] + point = intr @ point + cv2.circle(rgbs[k], (int(point[0]), int(point[1])), 2, color, -1) + + # draw eef axis + for axis, color in zip(eef_axis, eef_axis_colors): + eef_point_axis = point_orig + 0.1 * axis + eef_point_axis_world = (b2w @ e2b @ eef_point_axis).T + eef_point_axis_world = state["extr"][k] @ eef_point_axis_world + eef_point_axis_world = eef_point_axis_world[:3] / eef_point_axis_world[2] + eef_point_axis_world = intr @ eef_point_axis_world + cv2.line(rgbs[k], + (int(point[0]), int(point[1])), + (int(eef_point_axis_world[0]), int(eef_point_axis_world[1])), + color, 2) + else: + point_orig, point, color, val, b2w = eef_points_vis[0], eef_points_world_vis[0], eef_colors[0], "value", b2w + e2b = robot_out[val] # (4, 4) + point = state["extr"][k] @ point + point = point[:3] / point[2] + point = intr @ point + cv2.circle(rgbs[k], (int(point[0]), int(point[1])), 2, color, -1) + + # draw eef axis + for axis, color in zip(eef_axis, eef_axis_colors): + eef_point_axis = point_orig + 0.1 * axis + eef_point_axis_world = (b2w @ e2b @ eef_point_axis).T + eef_point_axis_world = state["extr"][k] @ eef_point_axis_world + eef_point_axis_world = eef_point_axis_world[:3] / eef_point_axis_world[2] + eef_point_axis_world = intr @ eef_point_axis_world + cv2.line(rgbs[k], + (int(point[0]), int(point[1])), + (int(eef_point_axis_world[0]), int(eef_point_axis_world[1])), + color, 2) + + row_imgs = [] + for row in range(len(self.realsense.serial_numbers)): + row_imgs.append( + np.hstack( + (cv2.cvtColor(rgbs[row], cv2.COLOR_BGR2RGB), + cv2.applyColorMap(cv2.convertScaleAbs(depths[row], alpha=0.03), cv2.COLORMAP_JET)) + ) + ) + combined_img = np.vstack(row_imgs) + combined_img = cv2.resize(combined_img, (self.screen_width,self.screen_height)) + np.copyto( + np.frombuffer(self.image_data.get_obj(), dtype=np.uint8).reshape((self.screen_height, self.screen_width, 3)), + combined_img + ) + + # save target + if self.construct_target and perception_out is not None and robot_out is not None: + assert os.path.exists(self.exp_root.parent / "target") + save_dir = str(self.exp_root.parent / "target" / "target.pcd") + pts = perception_out['value']['pts'] + print(f"target pts: {pts}") + pts = np.concatenate(pts, axis=0) + pcd = o3d.geometry.PointCloud() + pcd.points = o3d.utility.Vector3dVector(pts) + o3d.io.write_point_cloud(save_dir, pcd) + + mkdir(self.exp_root.parent / "target" / "vis", overwrite=False, resume=True) + eef_points_world_vis = [] + eef_points = np.concatenate([self.eef_point, np.ones((self.eef_point.shape[0], 1))], axis=1) # (n, 4) + eef_axis = np.array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]]) # (3, 4) + if self.bimanual: + left_eef_world_list = [] + right_eef_world_list = [] + assert b2w_l is not None + assert b2w_r is not None + for val, b2w, eef_world_list in zip(["left_value", "right_value"], [b2w_l, b2w_r], [left_eef_world_list, right_eef_world_list]): + e2b = robot_out[val] # (4, 4) + eef_points_world = (b2w @ e2b @ eef_points.T).T[:, :3] # (n, 3) + eef_points_world_vis.append(eef_points_world) + eef_orientation_world = (b2w[:3, :3] @ e2b[:3, :3] @ eef_axis[:, :3].T).T # (3, 3) + eef_world = np.concatenate([eef_points_world, eef_orientation_world], axis=0) # (n+3, 3) + eef_world_list.append(eef_world) + left_eef_world = np.concatenate(left_eef_world_list, axis=0) # (n+3, 3) + right_eef_world = np.concatenate(right_eef_world_list, axis=0) # (n+3, 3) + eef_world = np.concatenate([left_eef_world, right_eef_world], axis=0) # (2n+6, 3) + else: + assert b2w is not None + e2b = robot_out["value"] # (4, 4) + eef_points_world = (b2w @ e2b @ eef_points.T).T[:, :3] # (n, 3) + eef_points_world_vis.append(eef_points_world) + eef_orientation_world = (b2w[:3, :3] @ e2b[:3, :3] @ eef_axis[:, :3].T).T # (3, 3) + eef_world = np.concatenate([eef_points_world, eef_orientation_world], axis=0) # (n+3, 3) + np.savetxt(str(self.exp_root.parent / "target" / "vis" / f"robot.txt"), eef_world, fmt="%.6f") + + for k in range(len(perception_out['value']['color'])): + rgbs[k] = perception_out['value']['color'][k] + depths[k] = perception_out['value']['depth'][k] + rgb_save_dir = str(self.exp_root.parent / "target" / "vis" / f"rgb_{k}.png") + depth_save_dir = str(self.exp_root.parent / "target" / "vis" / f"depth_{k}.png") + cv2.imwrite(rgb_save_dir, rgbs[k]) + cv2.imwrite(depth_save_dir, depths[k]) + + intr_list = [] + extr_list = [] + for k in range(len(perception_out['value']['color'])): + intr = intrinsics[k] + extr = state["extr"][k] + intr_list.append(intr) + extr_list.append(extr) + np.save(str(self.exp_root.parent / "target" / "vis" / "intrinsics.npy"), np.stack(intr_list)) + np.save(str(self.exp_root.parent / "target" / "vis" / "extrinsics.npy"), np.stack(extr_list)) + + print(f"target saved to {save_dir}") + time.sleep(5) + continue + + # do planning + if perception_out is not None and robot_out is not None and gripper_out is not None: + if len(perception_out['value']['pts']) > 0: + self.perception.do_process.value = False # pause perception + command = self.planning_module.get_command(state, save_dir=f'{self.exp_root}/interaction_{idx:02d}', is_first_iter=(idx == 0)) + if self.bimanual: + self.command_sender_left.send(command[0]) + self.command_sender_right.send(command[1]) + else: + self.command_sender.send(command[0]) + idx += 1 + time.sleep(10) # TODO execution time + self.perception.do_process.value = True # resume perception + else: + print(f'no points detected in perception_out: {perception_out["value"]["pts"]}') + else: + print(f'perception_out is None: {perception_out is None}', end=' ') + print(f'robot_out is None: {robot_out is None}', end=' ') + print(f'gripper_out is None: {gripper_out is None}') + + time.sleep(max(0, 1 / fps - (time.time() - tic))) + + except BaseException as e: + print(f"Error in robot planning env: {e.with_traceback()}") + break + + if self.bimanual: + assert self.command_sender_left is not None + assert self.command_sender_right is not None + self.command_sender_left.close() + self.command_sender_right.close() + else: + assert self.command_sender is not None + self.command_sender.close() + self.stop() + print("RealEnv process stopped") + + def get_intrinsics(self): + return self.realsense.get_intrinsics() + + def get_extrinsics(self): + return self.state["extr"] + + @property + def alive(self) -> bool: + alive = self._alive.value and self.real_alive + self._alive.value = alive + return alive + + def start(self) -> None: + self.start_time = time.time() + self._alive.value = True + self.real_start(time.time()) + self.start_image_display() + super().start() + + def stop(self) -> None: + self._alive.value = False + self.real_stop() diff --git a/src/experiments/real_world/modules_planning/planning_module.py b/src/experiments/real_world/modules_planning/planning_module.py new file mode 100644 index 0000000000000000000000000000000000000000..5871955ffe830d4cb62cb4fe876f5bb5162a0535 --- /dev/null +++ b/src/experiments/real_world/modules_planning/planning_module.py @@ -0,0 +1,570 @@ +from pathlib import Path +import open3d as o3d +from threadpoolctl import threadpool_limits +import multiprocess as mp +import threading +from threading import Lock + +import os +import numpy as np +from copy import deepcopy +from functools import partial +import torch +from torch import Tensor +import torch.nn as nn +import torch.nn.functional as F +import transforms3d +import kornia + +from pgnd.utils import get_root +root: Path = get_root(__file__) + +from modules_planning.dynamics_module import DynamicsModule, fps +from utils.planning_utils import batch_chamfer_dist + + +class PlanningModule: + + def __init__(self, + cfg, + device, + exp_root, + ckpt_path, + use_robot=False, + bimanual=True, + bbox=None, + eef_point=None, + debug=False, + ): + super().__init__() + self.cfg = cfg + self.exp_root = exp_root + self.ckpt_path = ckpt_path + self.bimanual = bimanual + self.use_robot = use_robot + self.debug = debug + self.eef_point = eef_point + self.torch_device = device + + assert bbox is not None + self.bbox = torch.tensor(bbox, dtype=torch.float32, device=self.torch_device) + + self.repeated_action = False # allow non-repetitive action + + self.n_look_ahead = 10 # num_steps_total + self.n_sample = 32 + self.n_sample_chunk = 32 + self.n_chunk = np.ceil(self.n_sample / self.n_sample_chunk).astype(int) + self.n_update_iter = 20 + + self.reward_weight = 10.0 + + self.target_state = torch.empty(0) + + self.state = None + self.pts = torch.empty(0) + self.eef_xyz = torch.empty(0) # (n_grippers, 3) + self.eef_rot = torch.empty(0) # (n_grippers, 3, 3) + self.eef_gripper = torch.empty(0) # (n_grippers,) + + self.dynamics_module = DynamicsModule(cfg, exp_root=exp_root, ckpt_path=ckpt_path, batch_size=self.n_sample_chunk, num_steps_total=self.n_look_ahead) + self.dynamics_module.reset_model(self.n_look_ahead) + self.xyz_noise_level = 0.002 + self.quat_noise_level = 0.001 + self.gripper_noise_level = 0.0 + + def set_target(self, pcd_path): + pcd = o3d.io.read_point_cloud(pcd_path) + target_state = np.array(pcd.points) + if len(target_state) == 0: + print('target state is empty') + return + target_state = torch.tensor(target_state, dtype=torch.float32, device=self.torch_device) + fps_idx = fps(target_state, 1000, device=self.torch_device, random_start=False) + target_state = target_state[fps_idx] + self.target_state = target_state.clone() + self.dynamics_module.set_target_state(target_state) + + def model_rollout(self, act_seqs, visualize_pv=False): + + pts = self.pts.clone() + n_grippers = self.cfg.sim.num_grippers + + n_sample = act_seqs.shape[0] + eef_xyz = act_seqs[:, :, :n_grippers * 3].reshape(n_sample, self.n_look_ahead, n_grippers, 3) + eef_rot = act_seqs[:, :, n_grippers * 3:n_grippers * (3 + 3 * 3)].reshape(n_sample, self.n_look_ahead, n_grippers, 3, 3) + eef_gripper = act_seqs[:, :, n_grippers * (3 + 3 * 3):].reshape(n_sample, self.n_look_ahead, n_grippers, 1) + + eef_xyz_now = self.eef_xyz.clone() + eef_rot_now = self.eef_rot.clone() + eef_gripper_now = self.eef_gripper.clone() + eef_xyz = torch.cat([eef_xyz_now.repeat(n_sample, 1, 1, 1), eef_xyz], dim=1) # (n_sample, n_look_forward + 1, n_grippers, 3) + eef_rot = torch.cat([eef_rot_now.repeat(n_sample, 1, 1, 1, 1), eef_rot], dim=1) # (n_sample, n_look_forward + 1, n_grippers, 3, 3) + eef_gripper = torch.cat([eef_gripper_now[:, None].repeat(n_sample, 1, 1, 1), eef_gripper], dim=1) # (n_sample, n_look_forward + 1, n_grippers, 1) + assert eef_xyz.shape[1] == eef_rot.shape[1] == eef_gripper.shape[1] == self.n_look_ahead + 1 + + x, v = self.dynamics_module.rollout(pts, eef_xyz, eef_rot, eef_gripper, pts_his=None, visualize_pv=visualize_pv) # (n_sample, n_look_forward, n_pts, 3) + model_out = { + 'x': x, + } + return model_out + + + def sample_action_seq(self, act_seq, iter_index=0): + # get action + n_grippers = self.cfg.sim.num_grippers + eef_xyz = act_seq[:, :n_grippers * 3].reshape(self.n_look_ahead, n_grippers, 3) + eef_rot = act_seq[:, n_grippers * 3:n_grippers * (3 + 3 * 3)].reshape(self.n_look_ahead, n_grippers, 3, 3) + eef_quat = kornia.geometry.conversions.rotation_matrix_to_quaternion(eef_rot) + eef_gripper = act_seq[:, n_grippers * (3 + 3 * 3):].reshape(self.n_look_ahead, n_grippers, 1) + + # add noise + n_sample = self.n_sample_chunk + + if self.repeated_action: # default: linear repeating action + eef_xyz_delta = torch.randn((n_sample, eef_xyz.shape[1], eef_xyz.shape[2]), device=self.torch_device, dtype=torch.float32) * self.xyz_noise_level + eef_quat_delta = torch.randn((n_sample, eef_quat.shape[1], eef_quat.shape[2]), device=self.torch_device, dtype=torch.float32) * self.quat_noise_level + eef_gripper_delta = torch.randn((n_sample, eef_gripper.shape[1], eef_gripper.shape[2]), device=self.torch_device, dtype=torch.float32) * self.gripper_noise_level + eef_xyz_delta = eef_xyz_delta[:, None].repeat(1, self.n_look_ahead, 1, 1) + eef_quat_delta = eef_quat_delta[:, None].repeat(1, self.n_look_ahead, 1, 1) + eef_gripper_delta = eef_gripper_delta[:, None].repeat(1, self.n_look_ahead, 1, 1) + + else: # segmented repeated action + n_parts = 4 + eef_xyz_delta_list = [] + eef_quat_delta_list = [] + eef_gripper_delta_list = [] + for p in range(n_parts): + p_len = self.n_look_ahead // n_parts if p < n_parts - 1 else self.n_look_ahead - (n_parts - 1) * (self.n_look_ahead // n_parts) + eef_xyz_delta = torch.randn((n_sample, eef_xyz.shape[1], eef_xyz.shape[2]), device=self.torch_device, dtype=torch.float32) * self.xyz_noise_level * (1. / (iter_index + 1) ** 1) # TODO + eef_quat_delta = torch.randn((n_sample, eef_quat.shape[1], eef_quat.shape[2]), device=self.torch_device, dtype=torch.float32) * self.quat_noise_level * (1. / (iter_index + 1) ** 1) + eef_gripper_delta = torch.randn((n_sample, eef_gripper.shape[1], eef_gripper.shape[2]), device=self.torch_device, dtype=torch.float32) * self.gripper_noise_level * (1. / (iter_index + 1) ** 1) + eef_xyz_delta = eef_xyz_delta[:, None].repeat(1, p_len, 1, 1) + eef_quat_delta = eef_quat_delta[:, None].repeat(1, p_len, 1, 1) + eef_gripper_delta = eef_gripper_delta[:, None].repeat(1, p_len, 1, 1) + eef_xyz_delta_list.append(eef_xyz_delta) + eef_quat_delta_list.append(eef_quat_delta) + eef_gripper_delta_list.append(eef_gripper_delta) + eef_xyz_delta = torch.cat(eef_xyz_delta_list, dim=1) + eef_quat_delta = torch.cat(eef_quat_delta_list, dim=1) + eef_gripper_delta = torch.cat(eef_gripper_delta_list, dim=1) + + eef_xyz_delta_cum = torch.cumsum(eef_xyz_delta, dim=1) # (n_sample, n_look_ahead, n_grippers, 3) + eef_quat_delta_cum = torch.cumsum(eef_quat_delta, dim=1) # (n_sample, n_look_ahead, n_grippers, 4) + eef_gripper_delta_cum = torch.cumsum(eef_gripper_delta, dim=1) # (n_sample, n_look_ahead, n_grippers, 1) + + eef_xyz = eef_xyz[None] + eef_xyz_delta_cum + eef_quat = eef_quat[None] + eef_quat_delta_cum + eef_gripper = eef_gripper[None] + eef_gripper_delta_cum + + eef_quat = eef_quat / (torch.norm(eef_quat, dim=-1, keepdim=True) + 1e-6) # normalize + eef_rot = kornia.geometry.conversions.quaternion_to_rotation_matrix(eef_quat) + + act_seqs = torch.zeros((n_sample, self.n_look_ahead, n_grippers * (3 + 9 + 1)), device=self.torch_device, dtype=torch.float32) + act_seqs[:, :, :n_grippers * 3] = eef_xyz.reshape(n_sample, self.n_look_ahead, -1) + act_seqs[:, :, n_grippers * 3:n_grippers * (3 + 3 * 3)] = eef_rot.reshape(n_sample, self.n_look_ahead, -1) + act_seqs[:, :, n_grippers * (3 + 3 * 3):] = eef_gripper.reshape(n_sample, self.n_look_ahead, -1) + + self.clip_actions(act_seqs) + return act_seqs + + def evaluate_traj(self, model_out, act_seqs): + target_state = self.target_state.clone() + x = model_out['x'] # (n_sample, n_look_forward, n_pts, 3) + chamfer_distance = batch_chamfer_dist(x[:, -1], target_state) # (n_sample,) + curr_chamfer_distance = batch_chamfer_dist(x[:, 0], target_state) # (n_sample,) + print('curr chamfer_distance:', curr_chamfer_distance.min().item(), end=' ') + print('best chamfer_distance:', chamfer_distance.min().item()) + + n_sample = self.n_sample_chunk + n_grippers = self.cfg.sim.num_grippers + assert act_seqs.shape[0] == n_sample + eef_xyz = act_seqs[:, :, :n_grippers * 3].reshape(n_sample, self.n_look_ahead, n_grippers, 3) + + if eef_xyz.shape[2] == 2: + eef_xyz_left = eef_xyz[:, :, 0] # (n_sample, self.n_look_ahead, 3) + eef_xyz_right = eef_xyz[:, :, 1] # (n_sample, self.n_look_ahead, 3) + eef_xyz_dist = torch.norm(eef_xyz_left - eef_xyz_right, dim=-1) # (n_sample, self.n_look_ahead) + eef_xyz_dist_penalty = (eef_xyz_dist.max(dim=1).values > 0.3).float() * 100.0 # (n_sample,) # the smaller the better # TODO distance threshold + + eef_height_penalty = torch.logical_or(eef_xyz_left[:, :, 2].max(dim=1).values > -0.02, eef_xyz_right[:, :, 2].max(dim=1).values > -0.02).to(torch.float32) * 100.0 # (n_sample,) # the smaller the better + eef_height_penalty += torch.logical_or( + (eef_xyz_left.max(dim=1).values > (self.bbox[:, 1] - 0.02)).any(dim=-1), + (eef_xyz_left.min(dim=1).values < (self.bbox[:, 0] + 0.02)).any(dim=-1) + ).to(torch.float32) * 100.0 # (n_sample,) # the smaller the better + eef_height_penalty += torch.logical_or( + (eef_xyz_right.max(dim=1).values > (self.bbox[:, 1] - 0.02)).any(dim=-1), + (eef_xyz_right.min(dim=1).values < (self.bbox[:, 0] + 0.02)).any(dim=-1) + ).to(torch.float32) * 100.0 # (n_sample,) # the smaller the better + + reward = -chamfer_distance - eef_xyz_dist_penalty - eef_height_penalty # to maximize + else: + assert eef_xyz.shape[2] == 1 + eef_xyz_dist_penalty = 0 + eef_height_penalty = (eef_xyz[:, :, 0, 2].max(dim=1).values > -0.02).to(torch.float32) * 100.0 # (n_sample,) # the smaller the better + eef_height_penalty += torch.logical_or( + (eef_xyz[:, :, 0].max(dim=1).values > (self.bbox[:, 1] - 0.02)).any(dim=-1), + (eef_xyz[:, :, 0].min(dim=1).values < (self.bbox[:, 0] + 0.02)).any(dim=-1) + ).to(torch.float32) * 100.0 # (n_sample,) # the smaller the better + reward = -chamfer_distance - eef_xyz_dist_penalty - eef_height_penalty # to maximize + + print('best reward:', reward.max().item()) + eval_out = { + 'reward_seqs': reward, + } + return eval_out + + def optimize_action_mppi(self, act_seqs, reward_seqs): + + weight_seqs = F.softmax(reward_seqs * self.reward_weight, dim=0) # (n_sample,) + assert len(weight_seqs.shape) == 1 and weight_seqs.shape[0] == self.n_sample_chunk + + n_sample = self.n_sample_chunk + n_grippers = self.cfg.sim.num_grippers + assert act_seqs.shape[0] == n_sample + eef_xyz = act_seqs[:, :, :n_grippers * 3].reshape(n_sample, self.n_look_ahead, n_grippers, 3) + eef_rot = act_seqs[:, :, n_grippers * 3:n_grippers * (3 + 3 * 3)].reshape(n_sample, self.n_look_ahead, n_grippers, 3, 3) + eef_quat = kornia.geometry.conversions.rotation_matrix_to_quaternion(eef_rot) + eef_gripper = act_seqs[:, :, n_grippers * (3 + 3 * 3):].reshape(n_sample, self.n_look_ahead, n_grippers, 1) + + eef_xyz = torch.sum(weight_seqs[:, None, None, None] * eef_xyz, dim=0) # (n_look_ahead, n_grippers, 3) + eef_gripper = torch.sum(weight_seqs[:, None, None, None] * eef_gripper, dim=0) # (n_look_ahead, n_grippers, 1) + eef_quat = torch.sum(weight_seqs[:, None, None, None] * eef_quat, dim=0) # (n_look_ahead, n_grippers, 4) + + eef_quat = eef_quat / (torch.norm(eef_quat, dim=-1, keepdim=True) + 1e-6) # normalize + + eef_rot = kornia.geometry.conversions.quaternion_to_rotation_matrix(eef_quat) + act_seq = torch.zeros((self.n_look_ahead, n_grippers * (3 + 9 + 1)), device=self.torch_device, dtype=torch.float32) + act_seq[:, :n_grippers * 3] = eef_xyz.reshape(self.n_look_ahead, -1) + act_seq[:, n_grippers * 3:n_grippers * (3 + 3 * 3)] = eef_rot.reshape(self.n_look_ahead, -1) + act_seq[:, n_grippers * (3 + 3 * 3):] = eef_gripper.reshape(self.n_look_ahead, -1) + + act_seq = self.clip_actions(act_seq[None])[0] + return act_seq + + def clip_actions(self, act_seqs): + no_sample_dim = False + if len(act_seqs.shape) == 2: + no_sample_dim = True + act_seqs = act_seqs[None] + n_sample = act_seqs.shape[0] + n_grippers = self.cfg.sim.num_grippers + eef_xyz = act_seqs[:, :, :n_grippers * 3].reshape(n_sample, self.n_look_ahead, n_grippers, 3) + eef_rot = act_seqs[:, :, n_grippers * 3:n_grippers * (3 + 3 * 3)].reshape(n_sample, self.n_look_ahead, n_grippers, 3, 3) + eef_quat = kornia.geometry.conversions.rotation_matrix_to_quaternion(eef_rot) # (n_sample, n_look_ahead, n_grippers, 4) + eef_gripper = act_seqs[:, :, n_grippers * (3 + 3 * 3):].reshape(n_sample, self.n_look_ahead, n_grippers, 1) + + eef_xyz = torch.clamp(eef_xyz, self.bbox[:, 0], self.bbox[:, 1]) + eef_aa = kornia.geometry.conversions.quaternion_to_axis_angle(eef_quat) # (n_sample, n_look_ahead, n_grippers, 3) + max_rad = 1.0 + eef_aa_mask = torch.norm(eef_aa, dim=-1) > max_rad # (n_sample, n_look_ahead, n_grippers) + eef_aa[eef_aa_mask] = eef_aa[eef_aa_mask] / torch.norm(eef_aa[eef_aa_mask], dim=-1, keepdim=True) * max_rad # cannot exceed 0.5 rad + eef_quat = kornia.geometry.conversions.axis_angle_to_quaternion(eef_aa) + eef_quat = eef_quat / (torch.norm(eef_quat, dim=-1, keepdim=True) + 1e-6) # normalize + eef_gripper = torch.clamp(eef_gripper, 0.0, 1.0) + + eef_rot = kornia.geometry.conversions.quaternion_to_rotation_matrix(eef_quat) + act_seqs[:, :, :n_grippers * 3] = eef_xyz.reshape(n_sample, self.n_look_ahead, -1) + act_seqs[:, :, n_grippers * 3:n_grippers * (3 + 3 * 3)] = eef_rot.reshape(n_sample, self.n_look_ahead, -1) + act_seqs[:, :, n_grippers * (3 + 3 * 3):] = eef_gripper.reshape(n_sample, self.n_look_ahead, -1) + if no_sample_dim: + assert act_seqs.shape[0] == 1 + act_seqs = act_seqs[0] + return act_seqs + + + def get_command(self, state, save_dir=None, is_first_iter=False): + + self.state = state + + best_act_seq = None + best_reward_seq = None + + pts = state["perception_out"]["value"]["pts"].copy() + pts = np.concatenate(pts, axis=0) + + # remove outliers + rm_outliers = False + if rm_outliers: + pcd_rm = o3d.geometry.PointCloud() + pcd_rm.points = o3d.utility.Vector3dVector(pts) + outliers = None + new_outlier = None + rm_iter = 0 + while new_outlier is None or len(new_outlier.points) > 0: + _, inlier_idx = pcd_rm.remove_statistical_outlier( + nb_neighbors = 30, std_ratio = 2.5 + rm_iter * 0.5 + ) + new_pcd = pcd_rm.select_by_index(inlier_idx) + new_outlier = pcd_rm.select_by_index(inlier_idx, invert=True) + if outliers is None: + outliers = new_outlier + else: + outliers += new_outlier + pcd_rm = new_pcd + rm_iter += 1 + pts = np.array(pcd_rm.points) + + pts = torch.tensor(pts, dtype=torch.float32, device=self.torch_device) + + if is_first_iter: + self.dynamics_module.reset_preprocess_meta(pts) + self.dynamics_module.reset_downsample_indices(pts) + + self.pts = pts + + if save_dir is not None: + os.makedirs(save_dir, exist_ok=True) + + chamfer_now = batch_chamfer_dist(pts[None], self.target_state.clone()) + print('chamfer_now:', chamfer_now.item()) + with open(Path(save_dir) / 'chamfer.txt', 'w') as f: + f.write(str(chamfer_now.item())) + + pts_save = pts.cpu().numpy() + o3d_pts = o3d.geometry.PointCloud() + o3d_pts.points = o3d.utility.Vector3dVector(pts_save) + o3d.io.write_point_cloud(str(Path(save_dir) / 'pts.ply'), o3d_pts) + + target_state_save = self.target_state.cpu().numpy() + o3d_target_state = o3d.geometry.PointCloud() + o3d_target_state.points = o3d.utility.Vector3dVector(target_state_save) + o3d.io.write_point_cloud(str(Path(save_dir) / 'target_state.ply'), o3d_target_state) + + if self.bimanual: + left_robot_out = state["robot_out"]["left_value"] + left_gripper_out = state["gripper_out"]["left_value"] + right_robot_out = state["robot_out"]["right_value"] + right_gripper_out = state["gripper_out"]["right_value"] + left_robot_out = torch.tensor(left_robot_out, dtype=torch.float32, device=self.torch_device) + left_gripper_out = torch.tensor(left_gripper_out, dtype=torch.float32, device=self.torch_device) + right_robot_out = torch.tensor(right_robot_out, dtype=torch.float32, device=self.torch_device) + right_gripper_out = torch.tensor(right_gripper_out, dtype=torch.float32, device=self.torch_device) + robot_out = None + gripper_out = None + else: + robot_out = state["robot_out"]["value"] + gripper_out = state["gripper_out"]["value"] + robot_out = torch.tensor(robot_out, dtype=torch.float32, device=self.torch_device) + gripper_out = torch.tensor(gripper_out, dtype=torch.float32, device=self.torch_device) + left_robot_out = None + left_gripper_out = None + right_robot_out = None + right_gripper_out = None + + if self.bimanual: + b2w_l = state["b2w_l"] + b2w_r = state["b2w_r"] + b2w_l = torch.tensor(b2w_l, dtype=torch.float32, device=self.torch_device) + b2w_r = torch.tensor(b2w_r, dtype=torch.float32, device=self.torch_device) + b2w = None + else: + b2w = state["b2w"] + b2w = torch.tensor(b2w, dtype=torch.float32, device=self.torch_device) + b2w_l = None + b2w_r = None + + # construct act_seq using current robot state + # assert not self.cfg.sim.gripper_points + eef_xyz = torch.zeros((self.n_look_ahead + 1, self.cfg.sim.num_grippers, 3), device=self.torch_device) + eef_quat = torch.zeros((self.n_look_ahead + 1, self.cfg.sim.num_grippers, 4), device=self.torch_device) + eef_quat[:, :, 0] = 1.0 + eef_gripper = torch.zeros((self.n_look_ahead + 1, 1), device=self.torch_device) + + # construct eef_world + eef_points = torch.tensor([[0.0, 0.0, 0.175, 1]], device=self.torch_device) # the eef point in the gripper frame + eef_axis = torch.tensor([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]], dtype=torch.float32, device=self.torch_device) # (3, 4) + if self.bimanual: + left_eef_world_list = [] + right_eef_world_list = [] + assert left_robot_out is not None and right_robot_out is not None + assert b2w_l is not None and b2w_r is not None + for e2b, b2w, eef_world_list in zip([left_robot_out, right_robot_out], [b2w_l, b2w_r], [left_eef_world_list, right_eef_world_list]): + eef_points_world = (b2w @ e2b @ eef_points.T).T[:, :3] # (n, 3) + # eef_points_vis.append(eef_points) + # eef_points_world_vis.append(eef_points_world) + eef_orientation_world = (b2w[:3, :3] @ e2b[:3, :3] @ eef_axis[:, :3].T).T # (3, 3) + eef_world = torch.cat([eef_points_world, eef_orientation_world], dim=0) # (n+3, 3) + eef_world_list.append(eef_world) + left_eef_world = torch.cat(left_eef_world_list, dim=0) # (n+3, 3) + right_eef_world = torch.cat(right_eef_world_list, dim=0) # (n+3, 3) + eef_world = torch.cat([left_eef_world, right_eef_world], dim=0) # (2n+6, 3) + else: + assert robot_out is not None + assert b2w is not None + e2b = robot_out # (4, 4) + eef_points_world = (b2w @ e2b @ eef_points.T).T[:, :3] # (n, 3) + # eef_points_vis.append(eef_points) + # eef_points_world_vis.append(eef_points_world) + eef_orientation_world = (b2w[:3, :3] @ e2b[:3, :3] @ eef_axis[:, :3].T).T # (3, 3) + eef_world = torch.cat([eef_points_world, eef_orientation_world], dim=0) # (n+3, 3) + + if self.bimanual: + assert left_gripper_out is not None and right_gripper_out is not None + gripper_world = torch.tensor([left_gripper_out, right_gripper_out, 0.0], device=self.torch_device)[None, :] # (1, 3) + else: + assert gripper_out is not None + gripper_world = torch.tensor([gripper_out, 0.0, 0.0], device=self.torch_device)[None, :] # (1, 3) + + eef_world = torch.cat([eef_world, gripper_world], dim=0) # (n+4, 3) or (2n+7, 3) + robot = eef_world + + # decode eef_world + if len(robot.shape) > 1: # 5 or 9 + assert robot.shape[0] in [5, 9] # bi-manual (2 * (1 pos + 3 rot) + 1 gripper) or single arm (1 pos + 3 rot + 1 gripper or 1 pos) + gripper = robot[-1] + robot = robot[:-1] + robot = robot.reshape(-1, 4, 3) + robot_trans = robot[:, 0] # (n, 3) + robot_rot = robot[:, 1:] # (n, 3, 3) + if robot_trans.shape[0] == 1: # single arm + gripper = gripper[:1] # (1,) + else: # bi-manual + gripper = gripper[:2] # (2,) + else: + assert len(robot.shape) == 1 and robot.shape[0] == 3 + robot_trans = robot + robot_rot = torch.eye(3).to(self.torch_device).to(torch.float32) + gripper = torch.tensor([0.0], device=self.torch_device).to(torch.float32) + robot_trans = robot_trans # + torch.tensor([0, 0, -0.01], device=self.torch_device) # offset + gripper = torch.clamp(gripper / 800.0, 0, 1) # 1: open, 0: close + + # init eef variables in world frame + eef_xyz = robot_trans.reshape(-1, 3) + eef_rot = robot_rot.reshape(-1, 3, 3) # (n_grippers, 3, 3) + eef_gripper = gripper.reshape(-1) # (n_grippers,) + assert eef_xyz.shape[0] == eef_rot.shape[0] == eef_gripper.shape[0] + n_grippers = eef_xyz.shape[0] + + self.eef_xyz = eef_xyz + self.eef_rot = eef_rot + self.eef_gripper = eef_gripper + + # init act_seq in world frame + act_seq = torch.zeros((self.n_look_ahead, n_grippers * (3 + 9 + 1)), device=self.torch_device) + act_seq[:, :n_grippers * 3] = eef_xyz.reshape(-1) + act_seq[:, n_grippers * 3:n_grippers * (3 + 3 * 3)] = eef_rot.reshape(-1) + act_seq[:, n_grippers * (3 + 3 * 3):] = eef_gripper.reshape(-1) + + res_all = [] + for ci in range(self.n_chunk): + + best_act_seq = act_seq + for ti in range(self.n_update_iter): + + print(f'chunk: {ci}/{self.n_chunk}, iter: {ti}/{self.n_update_iter}') + + with torch.no_grad(): + act_seqs = self.sample_action_seq(act_seq, iter_index=ti) # support iteration-dependent noise + model_out = self.model_rollout(act_seqs, visualize_pv=False) # TODO + eval_out = self.evaluate_traj(model_out, act_seqs) + reward_seqs = eval_out["reward_seqs"] # (n_sample,) + act_seq = self.optimize_action_mppi(act_seqs, reward_seqs) + + best_reward_idx = torch.argmax(reward_seqs) + + if ti == 0: + best_act_seq = act_seqs[best_reward_idx] + best_reward_seq = reward_seqs[best_reward_idx] + elif reward_seqs[best_reward_idx] > best_reward_seq: + best_act_seq = act_seqs[best_reward_idx] + best_reward_seq = reward_seqs[best_reward_idx] + + # model_out = self.model_rollout(best_act_seq[None].repeat(self.n_sample_chunk, 1, 1), visualize_pv=True) # TODO + + torch.cuda.empty_cache() + # model_out = self.model_rollout(best_act_seq[None].repeat(self.n_sample_chunk, 1, 1), visualize_pv=True) # TODO + + res = { + "best_act_seq": best_act_seq, # (n_look_ahead, n_grippers * (3 + 9 + 1)) + "best_reward_seq": best_reward_seq, + } + res_all.append(res) + + reward_list = [res["best_reward_seq"].item() for res in res_all] + best_idx = np.argmax(reward_list) + best_act_seq = res_all[best_idx]['best_act_seq'] # (n_look_ahead, n_grippers * (3 + 9 + 1)) + + torch.cuda.empty_cache() + + eef_xyz = best_act_seq[:, :n_grippers * 3].reshape(self.n_look_ahead, n_grippers, 3) + eef_rot = best_act_seq[:, n_grippers * 3:n_grippers * (3 + 3 * 3)].reshape(self.n_look_ahead, n_grippers, 3, 3) + eef_gripper = best_act_seq[:, n_grippers * (3 + 3 * 3):].reshape(self.n_look_ahead, n_grippers, 1) + + # transform back into robot coordinates + eef_points = torch.tensor([[0.0, 0.0, 0.175, 1]], device=self.torch_device) # the eef point in the gripper frame + eef_axis = torch.tensor([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]], dtype=torch.float32, device=self.torch_device) # (3, 4) + + # initialize command + command = [[] for _ in range(eef_xyz.shape[-2])] # (n_grippers,) + e2b_command = [[] for _ in range(eef_xyz.shape[-2])] # (n_grippers,) + + look_ahead_range = range(self.n_look_ahead) + + for li in look_ahead_range: + + if self.bimanual: + assert b2w_l is not None and b2w_r is not None + + left_eef_xyz = eef_xyz[li:li+1, 0] # (1, 3) + right_eef_xyz = eef_xyz[li:li+1, 1] # (1, 3) + + left_eef_rot = eef_rot[li, 0] # (3, 3) + right_eef_rot = eef_rot[li, 1] # (3, 3) + + e2b_l = torch.eye(4, device=self.torch_device) + e2b_r = torch.eye(4, device=self.torch_device) + + for b2w, e2b, eef_points_world, eef_orientation_world in \ + zip([b2w_l, b2w_r], [e2b_l, e2b_r], [left_eef_xyz, right_eef_xyz], [left_eef_rot, right_eef_rot]): + + eef_orientation_world = eef_orientation_world.T # (3, 3) = b2w[:3, :3] @ e2b[:3, :3] @ eef_axis[:, :3].T + eef_orientation_world = b2w[:3, :3].T @ eef_orientation_world # (3, 3) = e2b[:3, :3] @ eef_axis[:, :3].T + e2b[:3, :3] = eef_orientation_world @ eef_axis[:, :3] # (3, 3) = e2b[:3, :3] + + eef_points_world = eef_points_world.T # (3, n) = b2w_R @ (e2b_R @ eef_points[:, :3].T + e2b_t) + b2w_t + eef_points_world = eef_points_world - b2w[:3, 3].reshape(-1, 1) # (3, n) = b2w_R @ (e2b_R @ eef_points[:, :3].T + e2b_t) + eef_points_world = b2w[:3, :3].T @ eef_points_world # (3, n) = e2b_R @ eef_points[:, :3].T + e2b_t + e2b[:3, 3:4] = eef_points_world - e2b[:3, :3] @ eef_points[:, :3].T # (3, n) = e2b_t + + e2b_list = [e2b_l, e2b_r] + + else: + assert b2w is not None + + eef_points_world = eef_xyz[li:li+1, 0] # (n, 3) + eef_orientation_world = eef_rot[li, 0] + + e2b = torch.eye(4, device=self.torch_device) + + eef_orientation_world = eef_orientation_world.T # (3, 3) = b2w[:3, :3] @ e2b[:3, :3] @ eef_axis[:, :3].T + eef_orientation_world = b2w[:3, :3].T @ eef_orientation_world # (3, 3) = e2b[:3, :3] @ eef_axis[:, :3].T + e2b[:3, :3] = eef_orientation_world @ eef_axis[:, :3] # (3, 3) = e2b[:3, :3] + + eef_points_world = eef_points_world.T # (3, n) = b2w_R @ (e2b_R @ eef_points[:, :3].T + e2b_t) + b2w_t + eef_points_world = eef_points_world - b2w[:3, 3].reshape(-1, 1) # (3, n) = b2w_R @ (e2b_R @ eef_points[:, :3].T + e2b_t) + eef_points_world = b2w[:3, :3].T @ eef_points_world # (3, n) = e2b_R @ eef_points[:, :3].T + e2b_t + e2b[:3, 3:4] = eef_points_world - e2b[:3, :3] @ eef_points[:, :3].T # (3, n) = e2b_t + + e2b_list = [e2b] + + + for gripper_id in range(eef_xyz.shape[-2]): + + fk_trans_mat = e2b_list[gripper_id].cpu().numpy() + + cur_xyzrpy = np.zeros(6) + cur_xyzrpy[:3] = fk_trans_mat[:3, 3] * 1000 + cur_xyzrpy[3:] = transforms3d.euler.mat2euler(fk_trans_mat[:3, :3]) + cur_xyzrpy[3:] = cur_xyzrpy[3:] / np.pi * 180 + + gripper = eef_gripper[li, gripper_id].item() + gripper = gripper * 800.0 + + single_command = list(cur_xyzrpy) + [gripper] + command[gripper_id].append(single_command) + + # debug + e2b_command[gripper_id].append(e2b_list[gripper_id].cpu().numpy()) + + return command diff --git a/src/experiments/real_world/modules_planning/segment_perception.py b/src/experiments/real_world/modules_planning/segment_perception.py new file mode 100644 index 0000000000000000000000000000000000000000..b275738b31f2b914ccac5b62ad68a4d18737a983 --- /dev/null +++ b/src/experiments/real_world/modules_planning/segment_perception.py @@ -0,0 +1,310 @@ +from pathlib import Path +import os +import time +import numpy as np +import torch +import cv2 +import open3d as o3d +from threadpoolctl import threadpool_limits +import multiprocess as mp +from functools import partial +from PIL import Image +import supervision as sv + +from pgnd.utils import get_root +root: Path = get_root(__file__) + +from camera.multi_realsense import MultiRealsense +from camera.single_realsense import SingleRealsense + +from transformers import AutoProcessor, AutoModelForZeroShotObjectDetection +from sam2.build_sam import build_sam2, build_sam2_video_predictor +from sam2.sam2_image_predictor import SAM2ImagePredictor + +from utils.pcd_utils import depth2fgpcd + + +def get_mask_raw(depth, intr, extr, bbox, depth_threshold=[0, 2]): + points = depth2fgpcd(depth, intr).reshape(-1, 3) + mask = np.logical_and((depth > depth_threshold[0]), (depth < depth_threshold[1])) # (H, W) + + points = (np.linalg.inv(extr) @ np.concatenate([points, np.ones((points.shape[0], 1)).astype(np.float32)], axis=1).T).T[:, :3] # (N, 3) + mask_bbox = np.logical_and( + np.logical_and(points[:, 0] > bbox[0][0], points[:, 0] < bbox[0][1]), + np.logical_and(points[:, 1] > bbox[1][0], points[:, 1] < bbox[1][1]) + ) # does not include z axis + mask_bbox = mask_bbox.reshape(depth.shape[0], depth.shape[1]) + mask = np.logical_and(mask, mask_bbox) + return mask + + +def segment_process_func(cameras_output, intrs, extrs, text_prompts, processor, grounding_model, image_predictor, bbox, device, show_annotation=True): + colors_list = [] + depths_list = [] + pts_list = [] + for ck, cv in cameras_output.items(): + + image = cv["color"].copy() + depth = cv["depth"].copy() / 1000.0 + image = Image.fromarray(image) + + # ground + inputs = processor(images=image, text=text_prompts, return_tensors="pt").to(device) + with torch.no_grad(): + outputs = grounding_model(**inputs) + results = processor.post_process_grounded_object_detection( + outputs, + inputs.input_ids, + box_threshold=0.325, + text_threshold=0.3, + target_sizes=[image.size[::-1]] + ) + input_boxes = results[0]["boxes"].cpu().numpy() + objects = results[0]["labels"] + + depth_mask = get_mask_raw(depth, intrs[ck], extrs[ck], bbox) + + multi_objs = False + if len(objects) > 1: + objects_masked = [] + input_boxes_masked = [] + if intrs is None or extrs is None: + print("No camera intrinsics and extrinsics provided") + return { + "color": [], + "depth": [], + "pts": [], + } + for i, obj in enumerate(objects): + if obj == '': + continue + box = input_boxes[i].astype(int) + if (box[3] - box[1]) * (box[2] - box[0]) > 500 * 400: + continue + depth_mask_box = depth_mask[box[1]:box[3], box[0]:box[2]] + if depth_mask_box.sum() > 0: + objects_masked.append(obj) + input_boxes_masked.append(box) + objects = objects_masked + input_boxes = input_boxes_masked + if len(objects) == 0: + print("No objects detected") + return { + "color": [], + "depth": [], + "pts": [], + } + elif len(objects) > 1: + multi_objs = True + + image_predictor.set_image(np.array(image.convert("RGB"))) + masks, scores, logits = image_predictor.predict( + point_coords=None, + point_labels=None, + box=input_boxes, + multimask_output=False, + ) + if masks.ndim == 3: + pass + elif masks.ndim == 4: + assert multi_objs + masks = masks.squeeze(1) + masks = masks.astype(bool) + + ID_TO_OBJECTS = {i: obj for i, obj in enumerate(objects, start=1)} + object_ids = np.arange(1, len(objects) + 1) + + detections = sv.Detections( + xyxy=sv.mask_to_xyxy(masks), # (n, 4) + mask=masks, # (n, h, w) + class_id=np.array(object_ids, dtype=np.int32), + ) + box_annotator = sv.BoxAnnotator() + if show_annotation: + annotated_frame = box_annotator.annotate(scene=np.array(image).astype(np.uint8), detections=detections) + label_annotator = sv.LabelAnnotator() + annotated_frame = label_annotator.annotate(annotated_frame, detections=detections, labels=[ID_TO_OBJECTS[i] for i in object_ids]) + mask_annotator = sv.MaskAnnotator() + annotated_frame = mask_annotator.annotate(scene=annotated_frame, detections=detections) + colors_list.append(annotated_frame) + else: + colors_list.append(np.array(image)) + + depths_list.append(cv["depth"].copy()) + + masks = np.logical_or.reduce(masks, axis=0, keepdims=True) + masks = np.logical_and(masks, depth_mask) + masks = masks.reshape(-1) + assert masks.shape[0] == depth.shape[0] * depth.shape[1] + points = depth2fgpcd(depth, intrs[ck]).reshape(-1, 3) + points = (np.linalg.inv(extrs[ck]) @ np.concatenate([points, np.ones((points.shape[0], 1)).astype(np.float32)], axis=1).T).T[:, :3] # (N, 3) + points = points[masks] + pts_list.append(points) + + return { + "color": colors_list, + "depth": depths_list, + "pts": pts_list, + } + + +class SegmentPerception(mp.Process): + + def __init__( + self, + realsense: MultiRealsense | SingleRealsense, + capture_fps, + record_fps, + record_time, + exp_name=None, + bbox=None, + data_dir="data", + text_prompts="white cotton rope.", + show_annotation=True, + device=None, + verbose=False, + ): + super().__init__() + self.verbose = verbose + + self.capture_fps = capture_fps + self.record_fps = record_fps + self.record_time = record_time + self.exp_name = exp_name + self.data_dir = data_dir + self.bbox = bbox + + self.text_prompts = text_prompts + self.show_annotation = show_annotation + + if self.exp_name is None: + assert self.record_fps == 0 + + self.realsense = realsense + self.perception_q = mp.Queue(maxsize=1) + + self.num_cam = len(realsense.cameras.keys()) + self.alive = mp.Value('b', False) + self.record_restart = mp.Value('b', False) + self.record_stop = mp.Value('b', False) + self.do_process = mp.Value('b', True) + + self.intrs = mp.Array('d', [0.0] * 9 * self.num_cam) + self.extrs = mp.Array('d', [0.0] * 16 * self.num_cam) + + def log(self, msg): + if self.verbose: + print(f"\033[92m{self.name}: {msg}\033[0m") + + @property + def can_record(self): + return self.record_fps != 0 + + def update_intrinsics(self, intrs): + self.intrs[:] = intrs.flatten() + + def update_extrinsics(self, extrs): + self.extrs[:] = extrs.flatten() + + def run(self): + # limit threads + threadpool_limits(1) + cv2.setNumThreads(1) + + realsense = self.realsense + + # i = self.index + capture_fps = self.capture_fps + record_fps = self.record_fps + record_time = self.record_time + + cameras_output = None + recording_frame = float("inf") # local record step index (since current record start), record fps + record_start_frame = 0 # global step index (since process start), capture fps + is_recording = False # recording state flag + timestamps_f = None + + checkpoint = str(root.parent / "weights/sam2/sam2.1_hiera_large.pt") + model_cfg = "configs/sam2.1/sam2.1_hiera_l.yaml" + model_id = "IDEA-Research/grounding-dino-tiny" + device = "cuda" if torch.cuda.is_available() else "cpu" + processor = AutoProcessor.from_pretrained(model_id) + grounding_model = AutoModelForZeroShotObjectDetection.from_pretrained(model_id).to(device) + image_predictor = SAM2ImagePredictor(build_sam2(model_cfg, checkpoint)) + + process_func = partial( + segment_process_func, + text_prompts=self.text_prompts, + processor=processor, + grounding_model=grounding_model, + image_predictor=image_predictor, + bbox=self.bbox, + device=device, + show_annotation=self.show_annotation, + ) + + while self.alive.value: + try: + if not self.do_process.value: + if not self.perception_q.empty(): + self.perception_q.get() + time.sleep(1) + continue + cameras_output = realsense.get(out=cameras_output) + get_time = time.time() + timestamps = [cameras_output[i]['timestamp'].item() for i in range(self.num_cam)] # type: ignore + if is_recording and not all([abs(timestamps[i] - timestamps[i+1]) < 0.05 for i in range(self.num_cam - 1)]): + print(f"Captured at different timestamps: {[f'{x:.2f}' for x in timestamps]}") + + # treat captured time and record time as the same + process_start_time = get_time + + intrs = np.frombuffer(self.intrs.get_obj()).reshape((self.num_cam, 3, 3)) + extrs = np.frombuffer(self.extrs.get_obj()).reshape((self.num_cam, 4, 4)) + + if intrs.sum() == 0 or extrs.sum() == 0: + print("No camera intrinsics and extrinsics provided") + time.sleep(1) + continue + + process_out = process_func(cameras_output, intrs, extrs) + self.log(f"process time: {time.time() - process_start_time}") + + if not self.perception_q.full(): + self.perception_q.put(process_out) + + except BaseException as e: + print("Perception error: ", e.with_traceback()) + break + + if self.can_record: + if timestamps_f is not None and not timestamps_f.closed: + timestamps_f.close() + finish_time = time.time() + self.stop() + print("Perception process stopped") + + + def start(self): + self.alive.value = True + super().start() + + def stop(self): + self.alive.value = False + self.perception_q.close() + + def set_record_start(self): + if self.record_fps == 0: + print("record disabled because record_fps is 0") + assert self.record_restart.value == False + else: + self.record_restart.value = True + print("record restart cmd received") + + def set_record_stop(self): + if self.record_fps == 0: + print("record disabled because record_fps is 0") + assert self.record_stop.value == False + else: + self.record_stop.value = True + print("record stop cmd received") diff --git a/src/experiments/real_world/modules_planning/udp_util.py b/src/experiments/real_world/modules_planning/udp_util.py new file mode 100644 index 0000000000000000000000000000000000000000..f601a5af5c029a994dedcefb7454e4b655fbc086 --- /dev/null +++ b/src/experiments/real_world/modules_planning/udp_util.py @@ -0,0 +1,104 @@ +import socket +import numpy as np +import pickle +import threading +import time + +from modules_planning.common.communication import * + +np.set_printoptions(precision=3, suppress=True) + +class udpSender: + def __init__(self, port: dict): + self.port = port + self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) + + def send(self, data: dict): + self.sock.sendto(pickle.dumps(data), ('127.0.0.1', self.port)) + + def close(self): + self.sock.close() + +class udpReceiver: + def __init__(self, ports: dict, re_use_address = False): + self.ports = ports + self.re_use_address = re_use_address + self.results = {} + self.lock = threading.Lock() + self.thread = None + + def receive(self, name, port): + sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) + if self.re_use_address: + sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + sock.bind(('127.0.0.1', port)) + # sock.settimeout(0.1) # Set timeout to 1 second + while self.alive: + try: + t0 = time.time() + try: + data, addr = sock.recvfrom(32768) + except socket.timeout: + continue + data = pickle.loads(data) + with self.lock: + self.results[name] = data + t1 = time.time() + # print(f"Receive {name} data from {addr} in {t1-t0:.6f} seconds") + except BaseException as e: + print(f"Error in receiving {name} data: {e}") + break + sock.close() + print(f"Receive {name} thread stopped") + + def start(self): + self.alive = True + self.thread = [] + for name, port in self.ports.items(): + t = threading.Thread(target=self.receive, args=(name, port)) + t.start() + self.thread.append(t) + + def stop(self): + print("Stopping udpReceiver") + self.alive = False + for t in self.thread: + if t is not None and t.is_alive(): + t.join() + print("udpReceiver stopped") + + def get(self, name=None, pop=False): + with self.lock: + if name is None: + ret = self.results + if pop: + self.results = {} + return ret + else: + if name in self.results: + if pop: + ret = self.results[name] + del self.results[name] + return ret + else: + return None + +if __name__ == '__main__': + udpReceiver = udpReceiver(ports= + { + 'object_pose': OBJECT_POSE_PORT, + 'xarm_state': XARM_STATE_PORT + }) + udpReceiver.start() + try: + while True: + print(udpReceiver.get()) + print() + time.sleep(0.01) + except KeyboardInterrupt: + try: + udpReceiver.lock.release() + except: + pass + udpReceiver.stop() diff --git a/src/experiments/real_world/modules_planning/xarm_controller.py b/src/experiments/real_world/modules_planning/xarm_controller.py new file mode 100644 index 0000000000000000000000000000000000000000..4a8d14bcfba66be4a9f656785ccc7dd3fae5c67f --- /dev/null +++ b/src/experiments/real_world/modules_planning/xarm_controller.py @@ -0,0 +1,571 @@ +import threading +import multiprocess as mp +import time +from enum import Enum +import traceback + +import numpy as np +import transforms3d +import copy + +from xarm.wrapper import XArmAPI + +from .kinematics_utils import KinHelper +from .udp_util import udpReceiver, udpSender +from modules_planning.common.communication import XARM_STATE_PORT, XARM_CONTROL_PORT, XARM_CONTROL_PORT_L, XARM_CONTROL_PORT_R +from modules_planning.common.xarm import * + +np.set_printoptions(precision=2, suppress=True) + + +class Rate: + def __init__(self, *, duration): + self.duration = duration + self.last = time.time() + + def sleep(self, duration=None) -> None: + duration = self.duration if duration is None else duration + assert duration >= 0 + now = time.time() + passed = now - self.last + remaining = duration - passed + assert passed >= 0 + if remaining > 0.0001: + time.sleep(remaining) + self.last = time.time() + + +class ControllerState(Enum): + INIT = 0 + RUNNING = 1 + STOP = 2 + +class XarmController(mp.Process): + + name = "xarm_controller" + kin_helper = KinHelper(robot_name='xarm7') + + XY_MIN, XY_MAX = XY_MIN, XY_MAX + X_MIN, X_MAX = X_MIN, X_MAX + Y_MIN, Y_MAX = Y_MIN, Y_MAX + Z_MIN, Z_MAX = Z_MIN, Z_MAX + + MOVE_RATE = MOVE_RATE + MOVE_SLEEP = MOVE_SLEEP + XYZ_VELOCITY = XYZ_VELOCITY + ANGLE_VELOCITY_MAX = ANGLE_VELOCITY_MAX + + GRIPPER_OPEN_MAX = GRIPPER_OPEN_MAX + GRIPPER_OPEN_MIN = GRIPPER_OPEN_MIN + + POSITION_UPDATE_INTERVAL = POSITION_UPDATE_INTERVAL + COMMAND_CHECK_INTERVAL = COMMAND_CHECK_INTERVAL + + + def log(self, msg): + if self.verbose: + self.pprint(msg) + + @staticmethod + def pprint(*args, **kwargs): + try: + stack_tuple = traceback.extract_stack(limit=2)[0] + print( + "[{}][{}] {}".format( + time.strftime("\033[92m%Y-%m-%d %H:%M:%S\033[0m", time.localtime(time.time())), + stack_tuple[1], + " ".join(map(str, args)), + ) + ) + except: + print(*args, **kwargs) + + def __init__( + self, + start_time, + init_pose=[256.7, 5.1, 400.1, 178.9, 0.0, 1.4], + init_servo_angle=[0.0, -45.0, 0.0, 30.0, 0.0, 75.0, 0.0], + ip="192.168.1.196", + mode="2D", + robot_id=0, + command_mode="cartesian", + gripper_enable=False, + speed=50, # mm/s + verbose=False, + ): + + self.robot_id = robot_id + self.init_pose = init_pose + self.init_servo_angle = init_servo_angle + self.speed = speed + self.command_mode = command_mode + assert mode in ["2D","3D"], "mode must be 2D or 3D" + super().__init__() + + self.start_time = start_time + self._ip = ip + self.gripper_enable = gripper_enable + self.verbose = verbose + self.exe_lock = mp.Lock() + + self.state = mp.Value('i', ControllerState.INIT.value) + + self.cur_trans_q = mp.Queue(maxsize=1) + self.cur_qpos_q = mp.Queue(maxsize=1) + self.cur_gripper_q = mp.Queue(maxsize=1) + + self.command_receiver = None + + self.cur_gripper_pos = None + self.cur_qpos = None + + self.teleop_activated = False + + # ======= xarm controller queue START ======= + def update_cur_position(self): + """ update the current position of the arm in a separate thread, + due to the unprecise of get_position API, use sapien fk to do the position closed loop""" + + if self.robot_id == -1: + self.state_sender = udpSender(port=XARM_STATE_PORT) + try: + while self.state.value in [ControllerState.INIT.value, ControllerState.RUNNING.value]: + + if self.gripper_enable: + cur_gripper_pos = self.get_gripper_state() + if not self.cur_gripper_q.full(): + self.cur_gripper_q.put(cur_gripper_pos) + self.cur_gripper_pos = cur_gripper_pos + + cur_qpos = np.array(self._arm.get_servo_angle()[1][0:7]) / 180. * np.pi + + fk_trans_mat = self.kin_helper.compute_fk_sapien_links(cur_qpos, [self.kin_helper.sapien_eef_idx])[0] + cur_xyzrpy = np.zeros(6) + cur_xyzrpy[:3] = fk_trans_mat[:3, 3] * 1000 + cur_xyzrpy[3:] = transforms3d.euler.mat2euler(fk_trans_mat[:3, :3]) + cur_xyzrpy[3:] = cur_xyzrpy[3:] / np.pi * 180 + + # always update the latest position + if not self.cur_trans_q.full(): + self.cur_trans_q.put(fk_trans_mat) + if not self.cur_qpos_q.full(): + self.cur_qpos_q.put(cur_qpos) + + self.cur_qpos = cur_qpos + + if self.robot_id == -1: + state = { + "e2b": fk_trans_mat, + "pos": cur_xyzrpy, + "qpos": cur_qpos, + } + if self.gripper_enable: + state["gripper"] = cur_gripper_pos + self.state_sender.send(state) + + except: + self.pprint(f"update_cur_position error") + self.state.value = ControllerState.STOP.value + finally: + # self.state_sender.close() + # self.command_q.close() + self.cur_trans_q.close() + self.cur_qpos_q.close() + self.cur_gripper_q.close() + print("update_cur_position exit!") + + def get_current_joint(self): + return copy.deepcopy(self.cur_qpos) + + def get_current_gripper(self): + return copy.deepcopy(self.cur_gripper_pos) + + def get_current_joint_deg(self): + return copy.deepcopy(self.cur_qpos) / np.pi * 180 + + def get_current_pose(self): + raise NotImplementedError + return self.cur_xyzrpy + + # ======= xarm controller queue END ======= + + + # ======= xarm SDK API wrapper START ======= + def open_gripper(self, wait=True): + return self.set_gripper_openness(self.GRIPPER_OPEN_MAX, wait=wait) + + def close_gripper(self, wait=True): + return self.set_gripper_openness(self.GRIPPER_OPEN_MIN, wait=wait) + + # @DeprecationWarning + def set_gripper_openness(self, openness, wait=True): + if not self.is_alive: + raise ValueError("Robot is not alive!") + code = self._arm.set_gripper_position(openness, wait=wait) + if not self._check_code(code, "set_gripper_position"): + raise ValueError("close_gripper Error") + return True + + def get_gripper_state(self): + if not self.is_alive: + raise ValueError("Robot is not alive!") + code, state = self._arm.get_gripper_position() + if not self._check_code(code, "get_gripper_position"): + raise ValueError("get_gripper_position Error") + return state + + # Register error/warn changed callback + def _error_warn_changed_callback(self, data): + if data and data["error_code"] != 0: + self.alive = False + self.pprint("err={}, quit".format(data["error_code"])) + self._arm.release_error_warn_changed_callback( + self._error_warn_changed_callback + ) + + # Register state changed callback + def _state_changed_callback(self, data): + if data and data["state"] == 4: + self.alive = False + self.pprint("state=4, quit") + self._arm.release_state_changed_callback(self._state_changed_callback) + + # Register count changed callback + def _count_changed_callback(self, data): + if self.is_alive: + self.pprint("counter val: {}".format(data["count"])) + + def _check_code(self, code, label): + if not self.is_alive or code != 0: + # import ipdb; ipdb.set_trace() + self.alive = False + ret1 = self._arm.get_state() + ret2 = self._arm.get_err_warn_code() + self.pprint( + "{}, code={}, connected={}, state={}, error={}, ret1={}. ret2={}".format( + label, + code, + self._arm.connected, + self._arm.state, + self._arm.error_code, + ret1, + ret2, + ) + ) + return self.is_alive + # ======= xarm SDK API wrapper END ======= + + # ======= xarm control START ======= + def _init_robot(self): + self._arm.clean_warn() + self._arm.clean_error() + self._arm.motion_enable(True) + if self.command_mode == "cartesian": + mode = 1 + elif self.command_mode == "joints": + mode = 4 + else: + raise ValueError("Invalid command mode") + self._arm.set_mode(mode) # NOTE: 0: position control mode, 1: servo control mode, 4: velocity control mode + self._arm.set_state(0) + if self.gripper_enable: + self._arm.set_gripper_enable(True) + self._arm.set_gripper_mode(0) + self._arm.clean_gripper_error() + # self._arm.set_collision_sensitivity(1) + time.sleep(1) + self._arm.register_error_warn_changed_callback( + self._error_warn_changed_callback + ) + self._arm.register_state_changed_callback(self._state_changed_callback) + if hasattr(self._arm, "register_count_changed_callback"): + self._arm.register_count_changed_callback(self._count_changed_callback) + + self.state.value = ControllerState.RUNNING.value + + def reset(self): + # return self._reset() # position control + # return self._reset_pose() # NOTE: servo control, use sapien ik to move + return + + def _reset(self, wait=True): + self.move_to_pose(self.init_pose, wait=wait) + self._arm.set_servo_angle(angle=self.init_servo_angle, isradian=False, wait=wait) + if self.gripper_enable: + self.open_gripper(wait=wait) + + def _reset_pose(self): + # init pose + if not self.exe_lock.acquire(block=True, timeout=1): + self.log("xarm reset failed! exe_lock not acquired!") + return + + self.move(self.init_pose, steps=500, clean=True) + self.exe_lock.release() + + def check_valid_move(self, next_position, steps): + # absolute position + if len(next_position) == 6: + x, y, z, roll, pitch, yaw = next_position + elif self.gripper_enable and len(next_position) == 7: + x, y, z, roll, pitch, yaw, gripper_pos = next_position + if gripper_pos < self.GRIPPER_OPEN_MIN or gripper_pos > self.GRIPPER_OPEN_MAX: + self.log(f"invalid move command {next_position}! gripper out of range!") + return False + + if x ** 2 + y ** 2 > self.XY_MAX ** 2 or x ** 2 + y ** 2 < self.XY_MIN ** 2\ + or x < self.X_MIN or x > self.X_MAX or y < self.Y_MIN or y > self.Y_MAX: + self.log(f"invalid move command {next_position}! x,y out of range!") + return False + elif z > self.Z_MAX or z < self.Z_MIN: + self.log(f"invalid move command {next_position}! z out of range!") + return False + + return True + + def move_joints(self, next_joints, wait=False, ignore_error=False): + assert wait == False, "wait is not supported in move_joints" + if not self.is_alive: + raise ValueError("Robot is not alive!") + if self.gripper_enable and len(next_joints) == 8: + if not np.isclose(self.cur_gripper_pos, next_joints[-1]): + self.set_gripper_openness(next_joints[-1], wait=wait) + next_joints = next_joints[:-1] + + # velocity control (next_joints needs to be delta) + v = next_joints / self.COMMAND_CHECK_INTERVAL * 0.15 + v = v.tolist() + code = self._arm.vc_set_joint_velocity(v, is_radian=True, is_sync=False, duration=0) + + # position control + # next_joints = next_joints.tolist() + # code = self._arm.set_servo_angle_j(angles=next_joints, is_radian=True, speed=1.0, acc=None, wait=wait) + + if not self._check_code(code, "vc_set_joint_velocity"): + raise ValueError("move_joints Error") + if ignore_error: + self._arm.clean_error() + self._arm.clean_warn() + + def move_to_pose(self, pose, wait=False, ignore_error=False): + return self.move(pose) + + def move(self, next_position, steps=10, clean=True): + self._move_ik(next_position, steps, clean) # NOTE: use sapien ik to move + # self._move(next_position, steps, clean) + + def _move(self, pose, steps, clean): + if not self.is_alive: + raise ValueError("Robot is not alive!") + code = self._arm.set_position( + pose[0], pose[1], pose[2], pose[3], pose[4], pose[5], speed=self.speed, wait=True + ) + if not self._check_code(code, "set_position"): + raise ValueError("move_to_pose Error") + if clean: + self._arm.clean_error() + self._arm.clean_warn() + + def _move_ik(self, next_position, steps, clean): + """next_position : x,y,z in mm and r,p,y in degree [and gripper]""" + assert next_position is not None, "next_position is not set!" + next_position = np.array(next_position) + if not self.check_valid_move(next_position, steps): + print(f"invalid move command {next_position}!") + return + + self.log(f'move start: {next_position}') + + if self.gripper_enable and len(next_position) == 8: + if not np.isclose(self.cur_gripper_pos, next_position[-1]): + self.set_gripper_openness(next_position[-1]) + next_position = next_position[:-1] + + initial_qpos = np.array(self._arm.get_servo_angle()[1][0:7]) / 180. * np.pi + next_position_m_rad = np.zeros_like(np.array(next_position)) + next_position_m_rad[0:3] = np.array(next_position)[0:3] / 1000. + next_position_m_rad[3:] = np.array(next_position)[3:] / 180. * np.pi + next_servo_angle = self.kin_helper.compute_ik_sapien(initial_qpos, next_position_m_rad) + + # fix the eef joint to [-pi,pi] + next_servo_angle[-1] = (next_servo_angle[-1] + np.pi) % (2 * np.pi) - np.pi + + # NOTE: In the servo mode: state(1), the actual speed is contorlled by the + # rate of command sending and the the distance between the current and target position + # The steps of each move is decided by the distance of moving to keep speed constant + init_position = self.kin_helper.compute_fk_sapien_links(initial_qpos, [self.kin_helper.sapien_eef_idx])[0][:3,3] * 1000 + dis_diff = np.array(next_position[:3]) - np.array(init_position) + distance = np.linalg.norm(dis_diff) # in millimeter + min_steps = int(distance / self.XYZ_VELOCITY) + self.log(f"distance: {distance}, min_steps: {min_steps}") + steps = max(min_steps, steps) + + # TODO: add max angular velocity control + angle_diff = np.array(next_servo_angle) - np.array(initial_qpos) + angle_distance = np.max(abs(angle_diff)) *180 / np.pi + self.log(f"angle_distance: {angle_distance}") + self.log(f"last steps: {steps}, angle ref steps: {int(angle_distance / self.ANGLE_VELOCITY_MAX)}") + steps = max(steps, int(angle_distance / self.ANGLE_VELOCITY_MAX)) + + tic = time.time() + for i in range(steps): + angle = initial_qpos + (next_servo_angle - initial_qpos) * (i + 1) / steps + if not self.is_alive: + raise ValueError("Robot is not alive!") + code = self._arm.set_servo_angle_j(angles=angle, is_radian=True, speed=1) + if not self._check_code(code, "set_position"): + raise ValueError("move Error") + time.sleep(self.MOVE_SLEEP) + + self.log(f"move end: volecity: {distance/(time.time()-tic):.2f} mm/s") + + if clean: + self._arm.clean_error() + self._arm.clean_warn() + + # ======= xarm control END ======= + + # ======= main thread loop ======= + def run(self): + # the arm initialization must be invoked in the same process + print("Connecting to xarm at", self._ip) + self._arm = XArmAPI(self._ip) + print("Connected to xarm at", self._ip) + if self.verbose: + self.log(f"Connected to xarm at {self._ip}") + self._init_robot() + + # NOTE: the arm can only be interacted with the process created the API class, + self.update_pos_t = threading.Thread(target=self.update_cur_position, name="update_cur_position") + self.update_pos_t.start() + + port = XARM_CONTROL_PORT_L if self.robot_id <= 0 else XARM_CONTROL_PORT_R # -1: keyboard, 0: gello left, 1: gello right + self.command_receiver = udpReceiver(ports={'xarm_control': port}) + self.command_receiver.start() + + print(f"{'='*20} xarm start! state: {ControllerState(self.state.value)}") + self.reset() + print(f"{'='*20} xarm reset! state: {ControllerState(self.state.value)}") + + command = None + self.teleop_activated = False if self.command_mode == 'joints' else True + rate = Rate( + duration=COMMAND_CHECK_INTERVAL, + ) + + while self.state.value == ControllerState.RUNNING.value: + try: + start_time = time.time() + commands = self.command_receiver.get("xarm_control", pop=True) + if commands is None or len(commands) == 0: + if self.command_mode == 'joints': # velocity control + self._arm.vc_set_joint_velocity([0, 0, 0, 0, 0, 0, 0], is_radian=True, is_sync=False, duration=0) + rate.sleep() + continue + + print_commands = False + if len(commands[0]) > 0 and print_commands: + if self.robot_id == 1: + print('\t' * 12, end='') + print(f'activated: {self.teleop_activated}, commands: {[np.round(c, 4) for c in commands[0]]}') + + with self.exe_lock: + self.log("xarm controller get lock") + self.log(f"new commands at {time.time() - self.start_time:.2f}") + + for command in commands: + self.log(f"get command: {command}") + + if isinstance(command, str): + if command == "quit": + break + + if self.command_mode == 'cartesian': + self.move(command) + + if self.command_mode == 'joints': + command_state = np.array(command) + + assert len(command_state) == 8, "command state must be 8-dim" + + current_joints = self.get_current_joint() + current_gripper = self.get_current_gripper() + current_gripper = (current_gripper - GRIPPER_OPEN_MAX) / (GRIPPER_OPEN_MIN - GRIPPER_OPEN_MAX) + current_state = np.concatenate([current_joints, np.array([current_gripper])]) + + delta = command_state - current_state + joint_delta_norm = np.linalg.norm(delta[0:7]) + max_joint_delta = np.abs(delta[0:7]).max() + + max_activate_delta = 0.5 + max_delta_norm = 0.10 + if not self.teleop_activated: + if max_joint_delta < max_activate_delta: + self.teleop_activated = True + next_state = current_state + else: + if joint_delta_norm > max_delta_norm: + delta[0:7] = delta[0:7] / joint_delta_norm * max_delta_norm + next_state = current_state + delta + + next_state[0:7] = next_state[0:7] - current_state[0:7] + + # denormalize gripper position + gripper_pos = next_state[-1] + denormalized_gripper_pos = gripper_pos * (GRIPPER_OPEN_MIN - GRIPPER_OPEN_MAX) + GRIPPER_OPEN_MAX + next_state[-1] = denormalized_gripper_pos + + self.move_joints(next_state) + + if command == "quit": + break + + rate.sleep() + + except: + self.log(f"Error in xarm controller") + break + + self.stop() + self.command_receiver.stop() + print("xarm controller stopped") + + # ======= process control ======= + # Only the process created the API class can start and control the robot, init in the `run` function + + def start(self) -> None: + return super().start() + + def stop(self): + self.state.value = ControllerState.STOP.value + print(f"{'='*20} xarm exit! state: {ControllerState(self.state.value)}") + + @property + def is_alive(self): + """check whether the robot and the controller is alive + To check only the controller condition, use self.state.value == ControllerState.RUNNING.value""" + if self.is_controller_alive and self._arm.connected and self._arm.error_code == 0: + if self._arm.state == 5: + cnt = 0 + while self._arm.state == 5 and cnt < 5: + cnt += 1 + time.sleep(0.1) + return self._arm.state < 4 + else: + return False + + @property + def is_controller_alive(self): + return self.state.value == ControllerState.RUNNING.value + + +if __name__ == "__main__": + + start_time = time.time() + controller = XarmController( + start_time=start_time, + gripper_enable=False, + z_plane_height=434, + verbose=True,) + controller.start() + controller.join() diff --git a/src/experiments/real_world/plan.py b/src/experiments/real_world/plan.py new file mode 100644 index 0000000000000000000000000000000000000000..0f6a85b9b9065e6b36cc7adf19f6f890966e160a --- /dev/null +++ b/src/experiments/real_world/plan.py @@ -0,0 +1,89 @@ +from pathlib import Path +import argparse +import random +import time +import os +import matplotlib.pyplot as plt +from collections import defaultdict +from tqdm import tqdm, trange +import hydra +from omegaconf import DictConfig, OmegaConf +import yaml +from datetime import datetime +import numpy as np +from PIL import Image +import warp as wp +import matplotlib.pyplot as plt +import multiprocess as mp +import torch +import torch.backends.cudnn +import torch.nn as nn +from torch.nn.utils import clip_grad_norm_ +from torch.utils.data import DataLoader +import logging + +from pgnd.utils import get_root, mkdir +from modules_planning.planning_env import RobotPlanningEnv + +root: Path = get_root(__file__) +logging.basicConfig(level=logging.WARNING) + + +def main(args): + mp.set_start_method('spawn') + + with open(root / args.config, 'r') as f: + config = yaml.load(f, Loader=yaml.CLoader) + cfg = OmegaConf.create(config) + + cfg.sim.num_steps = 1000 + cfg.sim.gripper_forcing = False + cfg.sim.uniform = True + + iteration = args.iteration + device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + + ckpt_path = (root / args.config).parent / 'ckpt' / f'{iteration:06d}.pt' + seed = cfg.seed + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + + # path + datetime_now = datetime.now().strftime('%y%m%d-%H%M%S') + exp_root: Path = root / 'log' / cfg.train.name / 'plan' / datetime_now + mkdir(exp_root, overwrite=cfg.overwrite, resume=cfg.resume) + + env = RobotPlanningEnv( + cfg, + exp_root=exp_root, + ckpt_path=ckpt_path, + resolution=(848, 480), + capture_fps=30, + record_fps=0, + text_prompts=args.text_prompts, + show_annotation=(not args.no_annotation), + use_robot=True, + bimanual=args.bimanual, + gripper_enable=True, + debug=True, + construct_target=args.construct_target, + ) + + env.start() + env.join() + + +if __name__ == '__main__': + arg_parser = argparse.ArgumentParser() + arg_parser.add_argument('--config', type=str, default='log/cloth/train/hydra.yaml') + arg_parser.add_argument('--iteration', type=str, default=100000) + arg_parser.add_argument('--text_prompts', type=str, default='green towel.') + arg_parser.add_argument('--seed', type=int, default=42) + arg_parser.add_argument('--no_annotation', action='store_true') + arg_parser.add_argument('--bimanual', action='store_true') + arg_parser.add_argument('--construct_target', action='store_true') + args = arg_parser.parse_args() + + with torch.no_grad(): + main(args) diff --git a/src/experiments/real_world/reconstruct_gs.py b/src/experiments/real_world/reconstruct_gs.py new file mode 100644 index 0000000000000000000000000000000000000000..79e2259331489602289ea5ec62abc34b44d61b2e --- /dev/null +++ b/src/experiments/real_world/reconstruct_gs.py @@ -0,0 +1,283 @@ +from typing import Union +from pathlib import Path +import argparse +import os +import subprocess +import numpy as np +import glob +import cv2 +import torch +import shutil +from PIL import Image +from sklearn.neighbors import NearestNeighbors +import supervision as sv +import open3d as o3d +import time +import yaml +import json +from dgl.geometry import farthest_point_sampler +import sys +sys.path.append(str(Path(__file__).parent.parent)) +sys.path.append(str(Path(__file__).parent.parent.parent)) + +from pgnd.utils import get_root +from pgnd.ffmpeg import make_video +root: Path = get_root(__file__) + +from utils.pcd_utils import visualize_o3d, depth2fgpcd +from utils.env_utils import get_bounding_box +from gs.trainer import GSTrainer +from gs.convert import save_to_splat + + +def load_camera(episode_data_dir): + intr = np.load(episode_data_dir / 'calibration' / 'intrinsics.npy').astype(np.float32) + rvec = np.load(episode_data_dir / 'calibration' / 'rvecs.npy') + tvec = np.load(episode_data_dir / 'calibration' / 'tvecs.npy') + R = [cv2.Rodrigues(rvec[i])[0] for i in range(rvec.shape[0])] + T = [tvec[i, :, 0] for i in range(tvec.shape[0])] + extrs = np.zeros((len(R), 4, 4)).astype(np.float32) + for i in range(len(R)): + extrs[i, :3, :3] = R[i] + extrs[i, :3, 3] = T[i] + extrs[i, 3, 3] = 1 + return intr, extrs + + +def project(points, intr, extr): + # extr: (4, 4) + # intr: (3, 3) + # points: (n_points, 3) + points = np.concatenate([points, np.ones((points.shape[0], 1))], axis=1) + points = points @ extr.T # (n_points, 4) + points = points[:, :3] / points[:, 2:3] # (n_points, 3) + points = points @ intr.T + points = points[:, :2] / points[:, 2:3] # (n_points, 2) + return points + + +def reproject(depth, intr, extr): + xx, yy = np.meshgrid(np.arange(depth.shape[1]), np.arange(depth.shape[0])) + xx = xx.flatten() + yy = yy.flatten() + points = np.stack([xx, yy, depth.flatten()], axis=1) + + mask = depth.flatten() > 0 + mask = np.logical_and(mask, depth.flatten() < 2) + points = points[mask] + + fx = intr[0, 0] + fy = intr[1, 1] + cx = intr[0, 2] + cy = intr[1, 2] + points[:, 0] = (points[:, 0] - cx) / fx * points[:, 2] + points[:, 1] = (points[:, 1] - cy) / fy * points[:, 2] + points = np.concatenate([points, np.ones((points.shape[0], 1))], axis=1) + inv_extr = np.linalg.inv(extr) + points = points @ inv_extr.T + return points[:, :3] + + +class GSProcessor: + + def __init__(self, name, n_his_frames, device='cuda', episode_range=None): + self.name = name + self.n_his_frames = n_his_frames + self.data_dir = root / "log" / "data" / name + + self.device = device + + if 'merged' in name: + self.is_merged = True + assert os.path.exists(self.data_dir) + info = json.load(open(self.data_dir / 'sub_episodes_v' / 'info.json')) + + source_eval_list_all = [] + for source_dir, episode_list in info.items(): + if source_dir in ['n_train', 'n_eval']: + continue + + source_name = Path(source_dir).parent.name + + eval_episode_start, eval_episode_end = episode_list[2], episode_list[3] + + source_eval_list = [] # (episode_id, start_frame, end_frame) + + source_data_dir = root.parent / Path(source_dir).parent + if not os.path.exists(root.parent / source_dir): + source_data_dir = Path('/data/meta-material/data') / source_name + + for eval_episode in range(eval_episode_start, eval_episode_end): + assert os.path.exists(source_data_dir / 'sub_episodes_v' / f'episode_{eval_episode:04d}' / 'meta.txt') + meta = np.loadtxt(source_data_dir / 'sub_episodes_v' / f'episode_{eval_episode:04d}' / 'meta.txt') + + source_eval_list.append((source_data_dir, int(meta[0]), int(meta[1]), int(meta[2]))) + + source_eval_list_all.append(source_eval_list) + + episode_range = source_eval_list_all + + else: + self.is_merged = False + if episode_range is None: + n_episodes = len(glob.glob(str(self.data_dir / "episode*"))) + episode_range = np.arange(n_episodes) + + self.episodes = episode_range + + n_cameras = 4 + self.cameras = np.arange(n_cameras) + + self.max_frames = 10000 + self.H, self.W = 480, 848 + self.bbox = get_bounding_box() # 3D bounding box of the scene + + with open(root / "real_world" / "gs" / "config" / "default.yaml", 'r') as f: + gs_config = yaml.load(f, Loader=yaml.CLoader) + + self.gs_trainer = GSTrainer(gs_config, device=self.device) + + def get_gaussian(self): + if self.is_merged: + for source_eval_list in self.episodes: + self.get_gaussian_single_source(source_eval_list) + else: + self.get_gaussian_single_source(self.episodes) + + def get_gaussian_single_source(self, episodes): + for episode in episodes: + + if isinstance(episode, tuple): + data_dir = episode[0] + + episode_id = episode[1] + start_frame = episode[2] + end_frame = episode[3] + + start_frame = start_frame + self.n_his_frames + + episode_data_dir = data_dir / f"episode_{episode_id:04d}" + os.makedirs(episode_data_dir / "gs", exist_ok=True) + intrs, extrs = load_camera(episode_data_dir) + + pcd_paths = sorted(glob.glob(str(episode_data_dir / "pcd_clean_new" / "*.npz"))) + n_frames = min(len(pcd_paths), self.max_frames) + + assert start_frame < n_frames, f"episode {episode}" + assert end_frame <= n_frames + + else: + episode = int(episode) + data_dir = self.data_dir + episode_id = episode + start_frame = 0 + + episode_data_dir = data_dir / f"episode_{episode_id:04d}" + os.makedirs(episode_data_dir / "gs", exist_ok=True) + intrs, extrs = load_camera(episode_data_dir) + + pcd_paths = sorted(glob.glob(str(episode_data_dir / "pcd_clean_new" / "*.npz"))) + n_frames = min(len(pcd_paths), self.max_frames) + + end_frame = n_frames + + pivot_skip = 120 + + for frame_id in range(start_frame, end_frame, pivot_skip): + print(f'[get_gaussian] processing episode {episode_id}, frame {frame_id}') + + if os.path.exists(os.path.join(episode_data_dir / 'gs' / f'{frame_id:06d}.splat')): + print(f'[get_gaussian] already processed, skipping') + continue + + pcd_npz = np.load(episode_data_dir / "pcd_clean_new" / f"{frame_id:06d}.npz") + + pts = pcd_npz['pts'] + colors = pcd_npz['colors'] + + # downsample + n_points = 3000 + particle_tensor = torch.from_numpy(pts).float().cuda()[None] + fps_idx_tensor = farthest_point_sampler(particle_tensor, n_points, start_idx=0)[0] + pts = pts[fps_idx_tensor.cpu().numpy()] + colors = colors[fps_idx_tensor.cpu().numpy()] + if colors.max() > 1: + colors = colors.astype(np.float32) / 255 + + pcd = o3d.geometry.PointCloud() + pcd.points = o3d.utility.Vector3dVector(pts) + pcd.colors = o3d.utility.Vector3dVector(colors) + + imgs = [] + masks = [] + R_list = [] + t_list = [] + intr_list = [] + for camera in self.cameras: + rgb_path = str(episode_data_dir / f'camera_{camera}' / 'rgb' / f'{frame_id:06d}.jpg') + mask_path = str(episode_data_dir / f'camera_{camera}' / 'mask' / f'{frame_id:06d}.png') + img = cv2.imread(rgb_path) # bgr + img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + mask = cv2.imread(mask_path, cv2.IMREAD_UNCHANGED) + mask = mask > 0 # binary mask + imgs.append(img) + masks.append(mask) + w2c = extrs[camera] + c2w = np.linalg.inv(w2c) + R = c2w[:3, :3] + t = c2w[:3, 3] + R_list.append(R) + t_list.append(t) + intr_list.append(intrs[camera]) + + # save + debug_vis = False + if debug_vis: + for i in range(len(imgs)): + # project points + points = project(pts, intrs[i], extrs[i]) + points = points.astype(np.int32) + img = imgs[i].copy() + img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) + for j in range(points.shape[0]): + if points[j, 0] < 0 or points[j, 0] >= self.W or points[j, 1] < 0 or points[j, 1] >= self.H: + continue + if not masks[i][points[j, 1], points[j, 0]]: + continue + cv2.circle(img, (points[j, 0], points[j, 1]), 2, (255, 0, 0), -1) + + cv2.imwrite(f"{frame_id:06d}_{i}_proj.png", img) + cv2.imwrite(f"{frame_id:06d}_{i}_rgb.png", cv2.cvtColor(imgs[i], cv2.COLOR_RGB2BGR)) + cv2.imwrite(f"{frame_id:06d}_{i}_mask.png", (masks[i] * 1).astype(np.uint8)) + + self.gs_trainer.clear(clear_params=True) + self.gs_trainer.update_state_no_env(pcd, imgs, masks, R_list, t_list, intr_list, n_cameras=4) + + os.makedirs(root / "log/gs/train", exist_ok=True) + self.gs_trainer.train(vis_dir=str(root / "log/gs/train")) + + self.gs_dir = os.path.join(episode_data_dir / "gs" / f'{frame_id:06d}.splat') + save_to_splat( + pts=self.gs_trainer.params['means3D'].detach().cpu().numpy(), + colors=self.gs_trainer.params['rgb_colors'].detach().cpu().numpy(), + scales=torch.exp(self.gs_trainer.params['log_scales']).detach().cpu().numpy(), + quats=torch.nn.functional.normalize(self.gs_trainer.params['unnorm_rotations'], dim=-1).detach().cpu().numpy(), + opacities=torch.sigmoid(self.gs_trainer.params['logit_opacities']).detach().cpu().numpy(), + output_file=self.gs_dir, + center=False, # do not center the points + rotate=False, # do not rotate the points to swap z and y + ) + + +if __name__ == '__main__': + + parser = argparse.ArgumentParser() + parser.add_argument('--name', type=str, default='rope_merged') + parser.add_argument('--n_his_frames', type=int, default=6) + parser.add_argument('--device', type=int, default=0) + args = parser.parse_args() + + device = f"cuda:{args.device}" + + pp = GSProcessor(args.name, args.n_his_frames, device) + pp.get_gaussian() diff --git a/src/experiments/real_world/utils/__init__.py b/src/experiments/real_world/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/experiments/real_world/utils/env_utils.py b/src/experiments/real_world/utils/env_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..5cdcde83a2630cd932641a4f7a398e036da68ba4 --- /dev/null +++ b/src/experiments/real_world/utils/env_utils.py @@ -0,0 +1,9 @@ +import numpy as np + + +def get_bounding_box_bimanual(): + return np.array([[0.0, 0.6], [-0.35, 0.45 + 0.75], [-0.65, 0.05]]) # the world frame robot workspace + + +def get_bounding_box(): + return np.array([[0.0, 0.6], [-0.35, 0.45], [-0.65, 0.05]]) # the world frame robot workspace diff --git a/src/experiments/real_world/utils/gradio_utils.py b/src/experiments/real_world/utils/gradio_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..b9411350b468ebeff4bf8de962de324b640d90d3 --- /dev/null +++ b/src/experiments/real_world/utils/gradio_utils.py @@ -0,0 +1,218 @@ +import gradio as gr +import numpy as np +from PIL import Image, ImageDraw + + + +def get_valid_mask(mask: np.ndarray): + """Convert mask from gr.Image(0 to 255, RGBA) to binary mask. + """ + if mask.ndim == 3: + mask_pil = Image.fromarray(mask).convert('L') + mask = np.array(mask_pil) + if mask.max() == 255: + mask = mask / 255 + return mask + + +def draw_points_on_image(image, points, intr=None, extr=None, z=None, radius_scale=0.006, intr_orig=None, extr_orig=None): + use_2d = (intr is None and extr is None) + same_cam = (intr_orig is None and extr_orig is None) + if use_2d: + assert same_cam + else: + assert intr is not None + assert extr is not None + assert z is not None + if intr_orig is None: + assert extr_orig is None + intr_orig = intr + extr_orig = extr + overlay_rgba = Image.new("RGBA", image.size, 0) + overlay_draw = ImageDraw.Draw(overlay_rgba) + for point_key, point in points.items(): + + t_color = (255, 100, 100) + o_color = (255, 50, 50) + + rad_draw = int(image.size[0] * radius_scale) + 2 + + p_start = point["start"] + p_target = point["target"] + + if p_start is not None and p_target is not None: + if same_cam: + p_draw = int(p_start[0]), int(p_start[1]) + t_draw = int(p_target[0]), int(p_target[1]) + + # 2d + if use_2d: + pt = (p_target[0] - p_start[0], p_target[1] - p_start[1]) + pt_norm = np.linalg.norm(pt) + pt_unit = (pt[0] / pt_norm, pt[1] / pt_norm) + pt_tang = (pt_unit[1], -pt_unit[0]) + tt1 = (t_draw[0] + pt_tang[0] * 0.1 * pt_norm - pt_unit[0] * 0.1 * pt_norm, + t_draw[1] + pt_tang[1] * 0.1 * pt_norm - pt_unit[1] * 0.1 * pt_norm) + tt2 = (t_draw[0] - pt_tang[0] * 0.1 * pt_norm - pt_unit[0] * 0.1 * pt_norm, + t_draw[1] - pt_tang[1] * 0.1 * pt_norm - pt_unit[1] * 0.1 * pt_norm) + + # 3d + else: + p_start_3d = np.array([p_start[0], p_start[1], 1]) + p_target_3d = np.array([p_target[0], p_target[1], 1]) + p_start_3d = np.dot(np.linalg.inv(intr_orig), p_start_3d) + p_target_3d = np.dot(np.linalg.inv(intr_orig), p_target_3d) + p_start_3d = np.dot(np.linalg.inv(extr_orig), np.concatenate([p_start_3d, [1]])) + p_target_3d = np.dot(np.linalg.inv(extr_orig), np.concatenate([p_target_3d, [1]])) + camera_t = np.linalg.inv(extr_orig)[:3, 3] + p_start_3d = (p_start_3d[:3] - camera_t) * (z - camera_t[2]) / (p_start_3d[2] - camera_t[2]) + camera_t + p_target_3d = (p_target_3d[:3] - camera_t) * (z - camera_t[2]) / (p_target_3d[2] - camera_t[2]) + camera_t + pt_3d = p_target_3d - p_start_3d + pt_3d_norm = np.linalg.norm(pt_3d) + pt_3d_unit = pt_3d / pt_3d_norm + pt_3d_tang = np.array([pt_3d_unit[1], -pt_3d_unit[0], 0]) + tt1_3d = p_target_3d + pt_3d_tang * 0.02 - pt_3d_unit * 0.02 + tt2_3d = p_target_3d - pt_3d_tang * 0.02 - pt_3d_unit * 0.02 + tt1_3d = np.dot(extr, np.concatenate([tt1_3d, [1]]))[:3] + tt2_3d = np.dot(extr, np.concatenate([tt2_3d, [1]]))[:3] + tt1_3d = np.dot(intr, tt1_3d) + tt2_3d = np.dot(intr, tt2_3d) + tt1_3d = (tt1_3d[:2] / tt1_3d[2]).astype(int) + tt2_3d = (tt2_3d[:2] / tt2_3d[2]).astype(int) + tt1 = (tt1_3d[0], tt1_3d[1]) + tt2 = (tt2_3d[0], tt2_3d[1]) + + tt1_draw = int(tt1[0]), int(tt1[1]) + tt2_draw = int(tt2[0]), int(tt2[1]) + + if not same_cam: + assert not use_2d + p_proj = np.dot(intr, np.dot(extr, np.concatenate([p_start_3d, [1]]))[:3]) + p_draw = (p_proj[:2] / p_proj[2]).astype(int) + t_proj = np.dot(intr, np.dot(extr, np.concatenate([p_target_3d, [1]]))[:3]) + t_draw = (t_proj[:2] / t_proj[2]).astype(int) + + overlay_draw.line( + (p_draw[0], p_draw[1], t_draw[0], t_draw[1]), + fill=o_color, + width=4, + ) + + overlay_draw.line( + (t_draw[0], t_draw[1], tt1_draw[0], tt1_draw[1]), + fill=o_color, + width=4, + ) + + overlay_draw.line( + (t_draw[0], t_draw[1], tt2_draw[0], tt2_draw[1]), + fill=o_color, + width=4, + ) + + if p_start is not None: + if same_cam: + p_draw = int(p_start[0]), int(p_start[1]) + else: + assert not use_2d + # 3d + p_start_3d = np.array([p_start[0], p_start[1], 1]) + p_start_3d = np.dot(np.linalg.inv(intr_orig), p_start_3d) + p_start_3d = np.dot(np.linalg.inv(extr_orig), np.concatenate([p_start_3d, [1]])) + camera_t = np.linalg.inv(extr_orig)[:3, 3] + p_start_3d = (p_start_3d[:3] - camera_t) * (z - camera_t[2]) / (p_start_3d[2] - camera_t[2]) + camera_t + + p_proj = np.dot(intr, np.dot(extr, np.concatenate([p_start_3d, [1]]))[:3]) + p_draw = (p_proj[:2] / p_proj[2]).astype(int) + + overlay_draw.ellipse( + ( + p_draw[0] - rad_draw, + p_draw[1] - rad_draw, + p_draw[0] + rad_draw, + p_draw[1] + rad_draw, + ), + fill=t_color, + outline=o_color, + width=2, + ) + + if p_target is not None: + assert p_start is not None + + return Image.alpha_composite(image.convert("RGBA"), + overlay_rgba).convert("RGB") + + +def draw_raw_points_on_image(image, + points, + radius_scale=0.002): + overlay_rgba = Image.new("RGBA", image.size, 0) + overlay_draw = ImageDraw.Draw(overlay_rgba) + for p in range(points.shape[0]): + point = points[p] + + t_color = (150, 150, 255) + o_color = (50, 50, 255) + + rad_draw = int(image.size[0] * radius_scale) + + t_draw = int(point[0]), int(point[1]) + overlay_draw.ellipse( + ( + t_draw[0] - rad_draw, + t_draw[1] - rad_draw, + t_draw[0] + rad_draw, + t_draw[1] + rad_draw, + ), + fill=t_color, + outline=o_color, + ) + + return Image.alpha_composite(image.convert("RGBA"), + overlay_rgba).convert("RGB") + + +def draw_mask_on_image(image, mask): + im_mask = np.uint8(mask * 255) + im_mask_rgba = np.concatenate( + ( + np.tile(im_mask[..., None], [1, 1, 3]), + 45 * np.ones( + (im_mask.shape[0], im_mask.shape[1], 1), dtype=np.uint8), + ), + axis=-1, + ) + im_mask_rgba = Image.fromarray(im_mask_rgba).convert("RGBA") + + return Image.alpha_composite(image.convert("RGBA"), + im_mask_rgba).convert("RGB") + + +def on_change_single_global_state(keys, + value, + global_state, + map_transform=None): + if map_transform is not None: + value = map_transform(value) + + curr_state = global_state + if isinstance(keys, str): + last_key = keys + + else: + for k in keys[:-1]: + curr_state = curr_state[k] + + last_key = keys[-1] + + curr_state[last_key] = value + return global_state + + +def get_latest_points_pair(points_dict): + if not points_dict: + return None + point_idx = list(points_dict.keys()) + latest_point_idx = max(point_idx) + return latest_point_idx \ No newline at end of file diff --git a/src/experiments/real_world/utils/pcd_utils.py b/src/experiments/real_world/utils/pcd_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..fd15da3a4b35651bea1728df506c8cadce9cd8c0 --- /dev/null +++ b/src/experiments/real_world/utils/pcd_utils.py @@ -0,0 +1,166 @@ +import numpy as np +import open3d as o3d + + +def filter_tabletop_points(pcd): + # RANSAC to find table plane + plane_model, inliers = pcd.segment_plane(distance_threshold=0.01, ransac_n=3, num_iterations=1000) + [a, b, c, d] = plane_model + table_plane = np.array([a, b, c, d]) + + # remove points on the table + pcd = pcd.select_by_index(inliers, invert=True) + + outliers = None + new_outlier = None + rm_iter = 0 + while new_outlier is None or len(new_outlier.points) > 0: + _, inlier_idx = pcd.remove_statistical_outlier( + nb_neighbors = 20, std_ratio = 1.5 + rm_iter * 0.5 + ) + new_pcd = pcd.select_by_index(inlier_idx) + new_outlier = pcd.select_by_index(inlier_idx, invert=True) + if outliers is None: + outliers = new_outlier + else: + outliers += new_outlier + pcd = new_pcd + rm_iter += 1 + + return pcd + + +def get_tabletop_points(rgb_list, depth_list, R_list, t_list, intr_list, bbox, depth_threshold=[0, 2]): + # increase if out of memory + stride = 1 + + pcd_all = o3d.geometry.PointCloud() + + for i in range(len(rgb_list)): + intr = intr_list[i] + R_cam2board = R_list[i] + t_cam2board = t_list[i] + + depth = depth_list[i].copy().astype(np.float32) + + points = depth2fgpcd(depth, intr) + points = points.reshape(depth.shape[0], depth.shape[1], 3) + points = points[::stride, ::stride, :].reshape(-1, 3) + + mask = np.logical_and( + (depth > depth_threshold[0]), (depth < depth_threshold[1]) + ) # (H, W) + mask = mask[::stride, ::stride].reshape(-1) + + img = rgb_list[i].copy() + + points = points[mask].reshape(-1, 3) + + points = R_cam2board @ points.T + t_cam2board[:, None] + points = points.T # (N, 3) + + pcd = o3d.geometry.PointCloud() + pcd.points = o3d.utility.Vector3dVector(points) + + colors = img[::stride, ::stride, :].reshape(-1, 3).astype(np.float64) + colors = colors[mask].reshape(-1, 3) + colors = colors[:, ::-1].copy() + pcd.colors = o3d.utility.Vector3dVector(colors / 255) + pcd_all += pcd + + pcd = pcd_all + pcd = pcd.crop(o3d.geometry.AxisAlignedBoundingBox(min_bound=bbox[:, 0], max_bound=bbox[:, 1])) + pcd = pcd.voxel_down_sample(voxel_size=0.001) + + # NOTE: simple filtering instead of instance-specific segmentation processing + pcd = filter_tabletop_points(pcd) + return pcd + + +def rpy_to_rotation_matrix(roll, pitch, yaw): + # Assume the input in in degree + roll = roll / 180 * np.pi + pitch = pitch / 180 * np.pi + yaw = yaw / 180 * np.pi + # Define the rotation matrices + Rx = np.array([[1, 0, 0], [0, np.cos(roll), -np.sin(roll)], [0, np.sin(roll), np.cos(roll)]]) + Ry = np.array([[np.cos(pitch), 0, np.sin(pitch)], [0, 1, 0], [-np.sin(pitch), 0, np.cos(pitch)]]) + Rz = np.array([[np.cos(yaw), -np.sin(yaw), 0], [np.sin(yaw), np.cos(yaw), 0], [0, 0, 1]]) + # Combine the rotations + R = Rz @ Ry @ Rx + return R + + +def rotation_matrix_to_rpy(rotation_matrix): + # Get the roll, pitch, yaw in radian + roll = np.arctan2(rotation_matrix[2, 1], rotation_matrix[2, 2]) + pitch = np.arctan2(-rotation_matrix[2, 0], np.sqrt(rotation_matrix[2, 1] ** 2 + rotation_matrix[2, 2] ** 2)) + yaw = np.arctan2(rotation_matrix[1, 0], rotation_matrix[0, 0]) + # Get the roll, pitch, yaw in degree + roll = roll / np.pi * 180 + pitch = pitch / np.pi * 180 + yaw = yaw / np.pi * 180 + return roll, pitch, yaw + + +def depth2fgpcd(depth, intrinsic_matrix): + H, W = depth.shape + x, y = np.meshgrid(np.arange(W), np.arange(H)) + x = x.reshape(-1) + y = y.reshape(-1) + depth = depth.reshape(-1) + points = np.stack([x, y, np.ones_like(x)], axis=1) + points = points * depth[:, None] + points = points @ np.linalg.inv(intrinsic_matrix).T + return points + + +def similarity_transform(from_points, to_points): + + assert len(from_points.shape) == 2, \ + "from_points must be a m x n array" + assert from_points.shape == to_points.shape, \ + "from_points and to_points must have the same shape" + + N, m = from_points.shape + + mean_from = from_points.mean(axis = 0) + mean_to = to_points.mean(axis = 0) + + delta_from = from_points - mean_from # N x m + delta_to = to_points - mean_to # N x m + + sigma_from = (delta_from * delta_from).sum(axis = 1).mean() + sigma_to = (delta_to * delta_to).sum(axis = 1).mean() + + cov_matrix = delta_to.T.dot(delta_from) / N + + U, d, V_t = np.linalg.svd(cov_matrix, full_matrices = True) + cov_rank = np.linalg.matrix_rank(cov_matrix) + S = np.eye(m) + + if cov_rank >= m - 1: # and np.linalg.det(cov_matrix) < 0: # TODO touch calibration + S[m-1, m-1] = -1 + elif cov_rank < m-1: + raise ValueError("colinearility detected in covariance matrix:\n{}".format(cov_matrix)) + + R = U.dot(S).dot(V_t) + c = (d * S.diagonal()).sum() / sigma_from + t = mean_to - c*R.dot(mean_from) + + return c, R, t + + +def visualize_o3d(geometries): + frame = o3d.geometry.TriangleMesh.create_coordinate_frame(size=0.2, origin=[0, 0, 0]) + geometries.append(frame) + + pcd = o3d.geometry.PointCloud() + pcd.points = o3d.utility.Vector3dVector() + viewer = o3d.visualization.Visualizer() + viewer.create_window() + for geometry in geometries: + viewer.add_geometry(geometry) + opt = viewer.get_render_option() + opt.background_color = np.asarray([1., 1., 1.]) + viewer.run() diff --git a/src/experiments/real_world/utils/planning_utils.py b/src/experiments/real_world/utils/planning_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..5f9cd826b076d4ee12716720adcb232166c026e2 --- /dev/null +++ b/src/experiments/real_world/utils/planning_utils.py @@ -0,0 +1,40 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +import numpy as np +import math + + +def chamfer(x, y): # x: (B, N, D), y: (B, M, D) + x = x[:, None].repeat(1, y.shape[1], 1, 1) # (B, M, N, D) + y = y[:, :, None].repeat(1, 1, x.shape[2], 1) # (B, M, N, D) + dis = torch.norm(x - y, 2, dim=-1) # (B, M, N) + dis_xy = torch.mean(dis.min(dim=2).values, dim=1) # dis_xy: mean over N + dis_yx = torch.mean(dis.min(dim=1).values, dim=1) # dis_yx: mean over M + return dis_xy + dis_yx + + +def batch_chamfer_dist(xyz, xyz_gt): + # xyz: (B, N, 3) + # xyz_gt: (M, 3) + + # mean aligning + # chamfer = (xyz.mean(dim=1) - xyz_gt.mean(dim=0)).norm(dim=1) # (B,) + + # chamfer distance + xyz_gt = xyz_gt[None] # (1, M, 3) + dist1 = torch.sqrt(torch.sum((xyz[:, :, None] - xyz_gt[:, None]) ** 2, dim=3)) # (B, N, M) + dist2 = torch.sqrt(torch.sum((xyz_gt[:, None] - xyz[:, :, None]) ** 2, dim=3)) # (B, M, N) + chamfer = torch.mean(torch.min(dist1, dim=1).values, dim=1) + torch.mean(torch.min(dist2, dim=1).values, dim=1) # (B,) + return chamfer + + +def angle_normalize(x): + return (((x + math.pi) % (2 * math.pi)) - math.pi) + + +def clip_actions(action, action_lower_lim, action_upper_lim): + action_new = action.clone() + # action_new[..., 2] = angle_normalize(action[..., 2]) + action_new.data.clamp_(action_lower_lim, action_upper_lim) + return action_new diff --git a/src/experiments/real_world/utils/render_utils.py b/src/experiments/real_world/utils/render_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..9f04834b7df2eb6bfa20fba0bca9e2bbdbc313cb --- /dev/null +++ b/src/experiments/real_world/utils/render_utils.py @@ -0,0 +1,149 @@ +import torch +import numpy as np +import time +import kornia + + +def interpolate_motions(bones, motions, relations, xyz, rot=None, quat=None, weights=None, device='cuda', step='n/a'): + # bones: (n_bones, 3) + # motions: (n_bones, 3) + # relations: (n_bones, k) + # indices: (n_bones,) + # xyz: (n_particles, 3) + # rot: (n_particles, 3, 3) + # quat: (n_particles, 4) + # weights: (n_particles, n_bones) + + t0 = time.time() + n_bones, _ = bones.shape + n_particles, _ = xyz.shape + + # Compute the bone transformations + bone_transforms = torch.zeros((n_bones, 4, 4), device=device) + + n_adj = relations.shape[1] + + adj_bones = bones[relations] - bones[:, None] # (n_bones, n_adj, 3) + adj_bones_new = (bones[relations] + motions[relations]) - (bones[:, None] + motions[:, None]) # (n_bones, n_adj, 3) + + W = torch.eye(n_adj, device=device)[None].repeat(n_bones, 1, 1) # (n_bones, n_adj, n_adj) + + # fit a transformation + F = adj_bones_new.permute(0, 2, 1) @ W @ adj_bones # (n_bones, 3, 3) + + cov_rank = torch.linalg.matrix_rank(F) # (n_bones,) + + cov_rank_3_mask = cov_rank == 3 # (n_bones,) + cov_rank_2_mask = cov_rank == 2 # (n_bones,) + cov_rank_1_mask = cov_rank == 1 # (n_bones,) + + F_2_3 = F[cov_rank_2_mask | cov_rank_3_mask] # (n_bones, 3, 3) + F_1 = F[cov_rank_1_mask] # (n_bones, 3, 3) + + # 2 or 3 + try: + U, S, V = torch.svd(F_2_3) # S: (n_bones, 3) + S = torch.eye(3, device=device, dtype=torch.float32)[None].repeat(F_2_3.shape[0], 1, 1) + neg_det_mask = torch.linalg.det(F_2_3) < 0 + if neg_det_mask.sum() > 0: + print(f'[step {step}] F det < 0 for {neg_det_mask.sum()} bones') + S[neg_det_mask, -1, -1] = -1 + R = U @ S @ V.permute(0, 2, 1) + except: + print(f'[step {step}] SVD failed') + import ipdb; ipdb.set_trace() + + neg_1_det_mask = torch.abs(torch.linalg.det(R) + 1) < 1e-3 + pos_1_det_mask = torch.abs(torch.linalg.det(R) - 1) < 1e-3 + bad_det_mask = ~(neg_1_det_mask | pos_1_det_mask) + + if neg_1_det_mask.sum() > 0: + print(f'[step {step}] det -1') + S[neg_1_det_mask, -1, -1] *= -1 + R = U @ S @ V.permute(0, 2, 1) + + try: + assert bad_det_mask.sum() == 0 + except: + print(f'[step {step}] Bad det') + import ipdb; ipdb.set_trace() + + try: + if cov_rank_1_mask.sum() > 0: + print(f'[step {step}] F rank 1 for {cov_rank_1_mask.sum()} bones') + U, S, V = torch.svd(F_1) # S: (n_bones', 3) + assert torch.allclose(S[:, 1:], torch.zeros_like(S[:, 1:])) + x = torch.tensor([1., 0., 0.], device=device, dtype=torch.float32)[None].repeat(F_1.shape[0], 1) # (n_bones', 3) + axis = U[:, :, 0] # (n_bones', 3) + perp_axis = torch.linalg.cross(axis, x) # (n_bones', 3) + + perp_axis_norm_mask = torch.norm(perp_axis, dim=1) < 1e-6 + + R = torch.zeros((F_1.shape[0], 3, 3), device=device, dtype=torch.float32) + if perp_axis_norm_mask.sum() > 0: + print(f'[step {step}] Perp axis norm 0 for {perp_axis_norm_mask.sum()} bones') + R[perp_axis_norm_mask] = torch.eye(3, device=device, dtype=torch.float32)[None].repeat(perp_axis_norm_mask.sum(), 1, 1) + + perp_axis = perp_axis[~perp_axis_norm_mask] # (n_bones', 3) + x = x[~perp_axis_norm_mask] # (n_bones', 3) + + perp_axis = perp_axis / torch.norm(perp_axis, dim=1, keepdim=True) # (n_bones', 3) + third_axis = torch.linalg.cross(x, perp_axis) # (n_bones', 3) + assert ((torch.norm(third_axis, dim=1) - 1).abs() < 1e-6).all() + third_axis_after = torch.linalg.cross(axis, perp_axis) # (n_bones', 3) + + X = torch.stack([x, perp_axis, third_axis], dim=-1) + Y = torch.stack([axis, perp_axis, third_axis_after], dim=-1) + R[~perp_axis_norm_mask] = Y @ X.permute(0, 2, 1) + except: + R = torch.zeros((F_1.shape[0], 3, 3), device=device, dtype=torch.float32) + R[:, 0, 0] = 1 + R[:, 1, 1] = 1 + R[:, 2, 2] = 1 + + try: + bone_transforms[:, :3, :3] = R + except: + print(f'[step {step}] Bad R') + bone_transforms[:, 0, 0] = 1 + bone_transforms[:, 1, 1] = 1 + bone_transforms[:, 2, 2] = 1 + bone_transforms[:, :3, 3] = motions + + # Compute the weights + if weights is None: + weights = torch.ones((n_particles, n_bones), device=device) + dist = torch.cdist(xyz[None], bones[None])[0] # (n_particles, n_bones) + dist = torch.clamp(dist, min=1e-4) + weights = 1 / dist + weights = weights / weights.sum(dim=1, keepdim=True) # (n_particles, n_bones) + + # Compute the transformed particles + xyz_transformed = torch.zeros((n_particles, n_bones, 3), device=device) + + xyz_transformed = xyz[:, None] - bones[None] # (n_particles, n_bones, 3) + xyz_transformed = torch.einsum('ijk,jkl->ijl', xyz_transformed, bone_transforms[:, :3, :3].permute(0, 2, 1)) # (n_particles, n_bones, 3) + xyz_transformed = xyz_transformed + bone_transforms[:, :3, 3][None] + bones[None] # (n_particles, n_bones, 3) + xyz_transformed = (xyz_transformed * weights[:, :, None]).sum(dim=1) # (n_particles, 3) + + def quaternion_multiply(q1, q2): + # q1: bsz x 4 + # q2: bsz x 4 + q = torch.zeros_like(q1) + q[:, 0] = q1[:, 0] * q2[:, 0] - q1[:, 1] * q2[:, 1] - q1[:, 2] * q2[:, 2] - q1[:, 3] * q2[:, 3] + q[:, 1] = q1[:, 0] * q2[:, 1] + q1[:, 1] * q2[:, 0] + q1[:, 2] * q2[:, 3] - q1[:, 3] * q2[:, 2] + q[:, 2] = q1[:, 0] * q2[:, 2] - q1[:, 1] * q2[:, 3] + q1[:, 2] * q2[:, 0] + q1[:, 3] * q2[:, 1] + q[:, 3] = q1[:, 0] * q2[:, 3] + q1[:, 1] * q2[:, 2] - q1[:, 2] * q2[:, 1] + q1[:, 3] * q2[:, 0] + return q + + if quat is not None: + base_quats = kornia.geometry.conversions.rotation_matrix_to_quaternion(bone_transforms[:, :3, :3]) # (n_bones, 4) + base_quats = torch.nn.functional.normalize(base_quats, dim=-1) # (n_particles, 4) + quats = (base_quats[None] * weights[:, :, None]).sum(dim=1) # (n_particles, 4) + quats = torch.nn.functional.normalize(quats, dim=-1) + rot = quaternion_multiply(quats, quat) + + # xyz_transformed: (n_particles, 3) + # rot: (n_particles, 3, 3) / (n_particles, 4) + # weights: (n_particles, n_bones) + return xyz_transformed, rot, weights \ No newline at end of file diff --git a/src/experiments/real_world/utils/track_utils.py b/src/experiments/real_world/utils/track_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..fa90cd09a1ccd31d2d320b08bb4681a71ca4cde6 --- /dev/null +++ b/src/experiments/real_world/utils/track_utils.py @@ -0,0 +1,42 @@ +import numpy as np + + +def sample_points_from_masks(masks, num_points): + """ + sample points from masks and return its absolute coordinates + + Args: + masks: np.array with shape (n, h, w) + num_points: int + + Returns: + points: np.array with shape (n, points, 2) + """ + n, h, w = masks.shape + points = [] + + for i in range(n): + # find the valid mask points + indices = np.argwhere(masks[i] == 1) + # the output format of np.argwhere is (y, x) and the shape is (num_points, 2) + # we should convert it to (x, y) + indices = indices[:, ::-1] # (num_points, [y x]) to (num_points, [x y]) + + # import pdb; pdb.set_trace() + if len(indices) == 0: + # if there are no valid points, append an empty array + points.append(np.array([])) + continue + + # resampling if there's not enough points + if len(indices) < num_points: + sampled_indices = np.random.choice(len(indices), num_points, replace=True) + else: + sampled_indices = np.random.choice(len(indices), num_points, replace=False) + + sampled_points = indices[sampled_indices] + points.append(sampled_points) + + # convert to np.array + points = np.array(points, dtype=np.float32) + return points \ No newline at end of file diff --git a/src/experiments/scripts/train_box.sh b/src/experiments/scripts/train_box.sh new file mode 100644 index 0000000000000000000000000000000000000000..88c5c97b060b3ca4fdb2e07c18ea7ff9f9bae9f5 --- /dev/null +++ b/src/experiments/scripts/train_box.sh @@ -0,0 +1,24 @@ +CUDA_VISIBLE_DEVICES=0 python experiments/train/train_eval.py \ +'gpus=[0]' \ +overwrite=False \ +resume=True \ +debug=True \ +train.name=box/train \ +train.source_dataset_name=data/box_merged/sub_episodes_v \ +train.dataset_name=box/dataset \ +sim.num_grippers=2 \ +sim.gripper_points=True \ +sim.gripper_forcing=False \ +model.material.radius=0.0 \ +train.dataset_load_skip_frame=3 \ +train.dataset_skip_frame=1 \ +train.num_workers=8 \ +train.batch_size=32 \ +train.training_start_episode=0 \ +train.training_end_episode=303 \ +train.eval_start_episode=303 \ +train.eval_end_episode=323 \ +train.num_iterations=100000 \ +train.iteration_eval_interval=1000 \ +train.iteration_log_interval=10 \ +train.iteration_save_interval=1000 diff --git a/src/experiments/scripts/train_bread.sh b/src/experiments/scripts/train_bread.sh new file mode 100644 index 0000000000000000000000000000000000000000..1272540bd208d571728b27c9be072fddb4a520c0 --- /dev/null +++ b/src/experiments/scripts/train_bread.sh @@ -0,0 +1,27 @@ +CUDA_VISIBLE_DEVICES=0 python experiments/train/train_eval.py \ +'gpus=[0]' \ +overwrite=False \ +resume=True \ +debug=True \ +train.name=bread/train \ +train.source_dataset_name=data/bread_merged/sub_episodes_v \ +train.dataset_name=bread/dataset \ +sim.preprocess_scale=3.0 \ +sim.num_grippers=2 \ +sim.n_particles=500 \ +'sim.num_grids=[100, 100, 100, 0.01]' \ +model.gripper_radius=0.12 \ +model.material.radius=0.0 \ +model.material.pe_num_func_res=4 \ +train.dataset_load_skip_frame=3 \ +train.dataset_skip_frame=1 \ +train.num_workers=8 \ +train.batch_size=16 \ +train.training_start_episode=0 \ +train.training_end_episode=143 \ +train.eval_start_episode=143 \ +train.eval_end_episode=163 \ +train.num_iterations=100000 \ +train.iteration_eval_interval=1000 \ +train.iteration_log_interval=10 \ +train.iteration_save_interval=1000 diff --git a/src/experiments/scripts/train_cloth.sh b/src/experiments/scripts/train_cloth.sh new file mode 100644 index 0000000000000000000000000000000000000000..3305f9de7b724b8ef71bbf76811e92ff3ac92a8f --- /dev/null +++ b/src/experiments/scripts/train_cloth.sh @@ -0,0 +1,22 @@ +CUDA_VISIBLE_DEVICES=0 python experiments/train/train_eval.py \ +'gpus=[0]' \ +overwrite=False \ +resume=True \ +debug=True \ +train.name=cloth/train \ +train.source_dataset_name=data/cloth_merged/sub_episodes_v \ +train.dataset_name=cloth/dataset \ +sim.preprocess_scale=0.8 \ +sim.num_grippers=2 \ +train.dataset_load_skip_frame=3 \ +train.dataset_skip_frame=1 \ +train.num_workers=8 \ +train.batch_size=32 \ +train.training_start_episode=0 \ +train.training_end_episode=610 \ +train.eval_start_episode=610 \ +train.eval_end_episode=650 \ +train.num_iterations=100000 \ +train.iteration_eval_interval=1000 \ +train.iteration_log_interval=10 \ +train.iteration_save_interval=1000 diff --git a/src/experiments/scripts/train_paperbag.sh b/src/experiments/scripts/train_paperbag.sh new file mode 100644 index 0000000000000000000000000000000000000000..c7d6ccb9be0fe83a3ff5cca6bb1bd61f0f4b57c4 --- /dev/null +++ b/src/experiments/scripts/train_paperbag.sh @@ -0,0 +1,20 @@ +CUDA_VISIBLE_DEVICES=0 python experiments/train/train_eval.py \ +'gpus=[0]' \ +overwrite=False \ +resume=True \ +debug=True \ +train.name=paperbag/train \ +train.source_dataset_name=data/paperbag_merged/sub_episodes_v \ +train.dataset_name=paperbag/dataset \ +train.dataset_load_skip_frame=3 \ +train.dataset_skip_frame=1 \ +train.num_workers=8 \ +train.batch_size=32 \ +train.training_start_episode=0 \ +train.training_end_episode=200 \ +train.eval_start_episode=200 \ +train.eval_end_episode=220 \ +train.num_iterations=100000 \ +train.iteration_eval_interval=1000 \ +train.iteration_log_interval=10 \ +train.iteration_save_interval=1000 diff --git a/src/experiments/scripts/train_rope.sh b/src/experiments/scripts/train_rope.sh new file mode 100644 index 0000000000000000000000000000000000000000..7e32c2200bcac0564a1f62e7c1c1f28b7c1d5728 --- /dev/null +++ b/src/experiments/scripts/train_rope.sh @@ -0,0 +1,20 @@ +CUDA_VISIBLE_DEVICES=0 python experiments/train/train_eval.py \ +'gpus=[0]' \ +overwrite=False \ +resume=True \ +debug=True \ +train.name=rope/train \ +train.source_dataset_name=data/rope_merged/sub_episodes_v \ +train.dataset_name=rope/dataset \ +train.dataset_load_skip_frame=3 \ +train.dataset_skip_frame=1 \ +train.num_workers=8 \ +train.batch_size=32 \ +train.training_start_episode=0 \ +train.training_end_episode=651 \ +train.eval_start_episode=651 \ +train.eval_end_episode=691 \ +train.num_iterations=100000 \ +train.iteration_eval_interval=1000 \ +train.iteration_log_interval=10 \ +train.iteration_save_interval=1000 diff --git a/src/experiments/scripts/train_sloth.sh b/src/experiments/scripts/train_sloth.sh new file mode 100644 index 0000000000000000000000000000000000000000..22eabd5a769a24d5131ab82b1e2b29266ac9a725 --- /dev/null +++ b/src/experiments/scripts/train_sloth.sh @@ -0,0 +1,20 @@ +CUDA_VISIBLE_DEVICES=0 python experiments/train/train_eval.py \ +'gpus=[0]' \ +overwrite=False \ +resume=True \ +debug=True \ +train.name=sloth/train \ +train.source_dataset_name=data/sloth_merged/sub_episodes_v \ +train.dataset_name=sloth/dataset \ +train.dataset_load_skip_frame=3 \ +train.dataset_skip_frame=1 \ +train.num_workers=8 \ +train.batch_size=32 \ +train.training_start_episode=0 \ +train.training_end_episode=113 \ +train.eval_start_episode=113 \ +train.eval_end_episode=133 \ +train.num_iterations=100000 \ +train.iteration_eval_interval=1000 \ +train.iteration_log_interval=10 \ +train.iteration_save_interval=1000 diff --git a/src/experiments/train/__init__.py b/src/experiments/train/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/experiments/train/eval.py b/src/experiments/train/eval.py new file mode 100644 index 0000000000000000000000000000000000000000..779571bf807b5436ddfce8a72224aacb82718b8a --- /dev/null +++ b/src/experiments/train/eval.py @@ -0,0 +1,458 @@ +from pathlib import Path +import random +from tqdm import tqdm, trange + +import argparse +import yaml +import hydra +from omegaconf import DictConfig, OmegaConf +import numpy as np +import torch +import torch.nn as nn +import torch.backends.cudnn +import warp as wp +import glob +from torch.utils.data import DataLoader +import os +import matplotlib.pyplot as plt +import json +import sys +sys.path.append(str(Path(__file__).parent.parent.parent)) +sys.path.append(str(Path(__file__).parent.parent)) + +from pgnd.sim import Friction, CacheDiffSimWithFrictionBatch, StaticsBatch, CollidersBatch +from pgnd.material import PGNDModel +from pgnd.data import RealTeleopBatchDataset, RealGripperDataset +from pgnd.utils import Logger, get_root, mkdir + +from gs import do_gs +from pv_train import do_train_pv +from pv_dataset import do_dataset_pv +from metric_eval import do_metric +from train_eval import transform_gripper_points, dataloader_wrapper + +root: Path = get_root(__file__) + + +def eval( + cfg: DictConfig, + ckpt_path: str, + episode: int, + dataset_pv: bool = True, + eval_base_name: str = 'eval-val', + use_pv: bool = True, + use_gs: bool = True, +): + + # init + wp.init() + wp.ScopedTimer.enabled = False + wp.set_module_options({'fast_math': False}) + + gpus = [int(gpu) for gpu in cfg.gpus] + wp_devices = [wp.get_device(f'cuda:{gpu}') for gpu in gpus] + torch_devices = [torch.device(f'cuda:{gpu}') for gpu in gpus] + device_count = len(torch_devices) + + assert device_count == 1 + wp_device = wp_devices[0] + torch_device = torch_devices[0] + + seed = cfg.seed + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + + torch.autograd.set_detect_anomaly(True) + + torch.backends.cudnn.benchmark = True + + log_root: Path = root / 'log' + eval_name = f'{cfg.train.name}/{eval_base_name}/{cfg.train.dataset_name.split("/")[-1]}/{cfg.iteration:06d}' + exp_root: Path = log_root / eval_name + state_root: Path = exp_root / 'state' + mkdir(state_root, overwrite=cfg.overwrite, resume=cfg.resume) + episode_state_root = state_root / f'episode_{episode:04d}' + mkdir(episode_state_root, overwrite=cfg.overwrite, resume=cfg.resume) + OmegaConf.save(cfg, exp_root / 'hydra.yaml', resolve=True) + + use_pv = cfg.train.use_pv + if not use_pv: + print('not using pv rendering...') + + # decide whether to use gs rendering based on the existence of gs files + assert os.path.exists(log_root / str(cfg.train.source_dataset_name) / f'episode_{episode:04d}' / 'meta.txt') + meta = np.loadtxt(log_root / str(cfg.train.source_dataset_name) / f'episode_{episode:04d}' / 'meta.txt') + with open(log_root / str(cfg.train.source_dataset_name) / 'metadata.json') as f: + datadir_list = json.load(f) + datadir = datadir_list[episode] + source_data_dir = datadir['path'] + source_episode_id = int(meta[0]) + source_frame_start = int(meta[1]) + int(cfg.sim.n_history) * int(cfg.train.dataset_load_skip_frame) * int(cfg.train.dataset_skip_frame) + source_frame_end = int(meta[2]) + if use_gs: + use_gs = os.path.exists((log_root.parent.parent / source_data_dir).parent / f'episode_{source_episode_id:04d}' / 'gs' / f'{source_frame_start:06d}.splat') + + if cfg.train.dataset_name is None: + cfg.train.dataset_name = Path(cfg.train.name).parent / 'dataset' + assert cfg.train.source_dataset_name is not None + + source_dataset_root = log_root / str(cfg.train.source_dataset_name) + assert os.path.exists(source_dataset_root) + + dataset = RealTeleopBatchDataset( + cfg, + dataset_root=log_root / cfg.train.dataset_name / 'state', + source_data_root=source_dataset_root, + device=torch_device, + num_steps=cfg.sim.num_steps, + eval_episode_name=f'episode_{episode:04d}', + ) + dataloader = dataloader_wrapper( + DataLoader(dataset, batch_size=1, shuffle=False, num_workers=cfg.train.num_workers, pin_memory=True), + 'dataset' + ) + if cfg.sim.gripper_points: + eval_gripper_dataset = RealGripperDataset( + cfg, + device=torch_device, + ) + eval_gripper_dataloader = dataloader_wrapper( + DataLoader(eval_gripper_dataset, batch_size=1, shuffle=False, num_workers=cfg.train.num_workers, pin_memory=True), + 'gripper_dataset' + ) + + # load ckpt + if ckpt_path is None: + if cfg.model.ckpt is not None: + ckpt_path = cfg.model.ckpt + else: + ckpt_path = log_root / cfg.train.name / 'ckpt' / f'{cfg.iteration:06d}.pt' + ckpt = torch.load(log_root / ckpt_path, map_location=torch_device) + + material: nn.Module = PGNDModel(cfg) + material.to(torch_device) + material.load_state_dict(ckpt['material']) + material.requires_grad_(False) + material.eval() + + if 'friction' in ckpt: + friction = ckpt['friction']['mu'].reshape(-1, 1) + else: + friction = torch.tensor(cfg.model.friction.value, device=torch_device).reshape(-1, 1) + + init_state, actions, gt_states, downsample_indices = next(dataloader) + + x, v, x_his, v_his, clip_bound, enabled, episode_vec = init_state + x = x.to(torch_device) + v = v.to(torch_device) + x_his = x_his.to(torch_device) + v_his = v_his.to(torch_device) + + actions = actions.to(torch_device) + + if cfg.sim.gripper_points: + gripper_points, _ = next(eval_gripper_dataloader) + gripper_points = gripper_points.to(torch_device) + gripper_x, gripper_v, gripper_mask = transform_gripper_points(cfg, gripper_points, actions) # (bsz, num_steps, num_grippers, 3) + + gt_x, gt_v = gt_states + gt_x = gt_x.to(torch_device) + gt_v = gt_v.to(torch_device) + + # gt_states: (bsz, num_steps_total) + batch_size = gt_x.shape[0] + num_steps_total = gt_x.shape[1] + num_particles = gt_x.shape[2] + assert batch_size == 1 + + if cfg.sim.gripper_points: + num_gripper_particles = gripper_x.shape[2] + num_particles_orig = num_particles + num_particles = num_particles + num_gripper_particles + + cfg.sim.num_steps = num_steps_total + sim = CacheDiffSimWithFrictionBatch(cfg, num_steps_total, batch_size, wp_device, requires_grad=True) + + statics = StaticsBatch() + statics.init(shape=(batch_size, num_particles), device=wp_device) + statics.update_clip_bound(clip_bound) + statics.update_enabled(enabled) + colliders = CollidersBatch() + + if cfg.sim.gripper_points: + assert not cfg.sim.gripper_forcing + num_grippers = 0 + else: + num_grippers = cfg.sim.num_grippers + + colliders.init(shape=(batch_size, num_grippers), device=wp_device) + if num_grippers > 0: + assert len(actions.shape) > 2 + colliders.initialize_grippers(actions[:, 0]) + + colliders_save = colliders.export() + colliders_save = {key: torch.from_numpy(colliders_save[key])[0].to(x.device).to(x.dtype) for key in colliders_save} + ckpt = dict(x=x[0], v=v[0], **colliders_save) + + torch.save(ckpt, episode_state_root / f'{0:04d}.pt') + + enabled = enabled.to(torch_device) # (bsz, num_particles) + enabled_mask = enabled.unsqueeze(-1).repeat(1, 1, 3) # (bsz, num_particles, 3) + + losses = {} + with torch.no_grad(): + for step in trange(num_steps_total): + if num_grippers > 0: + colliders.update_grippers(actions[:, step]) + if cfg.sim.gripper_forcing: + x_in = x.clone() + else: + x_in = None + + if cfg.sim.gripper_points: + x = torch.cat([x, gripper_x[:, step]], dim=1) # gripper_points: (bsz, num_steps, num_particles, 3) + v = torch.cat([v, gripper_v[:, step]], dim=1) + x_his = torch.cat([x_his, torch.zeros((gripper_x.shape[0], gripper_x.shape[2], cfg.sim.n_history * 3), device=x_his.device, dtype=x_his.dtype)], dim=1) + v_his = torch.cat([v_his, torch.zeros((gripper_x.shape[0], gripper_x.shape[2], cfg.sim.n_history * 3), device=v_his.device, dtype=v_his.dtype)], dim=1) + if enabled.shape[1] < num_particles: + enabled = torch.cat([enabled, gripper_mask[:, step]], dim=1) + statics.update_enabled(enabled.cpu()) + + pred = material(x, v, x_his, v_his, enabled) + + if pred.isnan().any(): + print('pred isnan', pred.min().item(), pred.max().item()) + break + if pred.isinf().any(): + print('pred isinf', pred.min().item(), pred.max().item()) + break + + x, v = sim(statics, colliders, step, x, v, friction, pred) + + if cfg.sim.gripper_forcing: + assert not cfg.sim.gripper_points + gripper_xyz = actions[:, step, :, :3] + gripper_v = actions[:, step, :, 3:6] + x_from_gripper = x_in[:, None] - gripper_xyz[:, :, None] # (bsz, num_grippers, num_particles, 3) + x_gripper_distance = torch.norm(x_from_gripper, dim=-1) # (bsz, num_grippers, num_particles) + x_gripper_distance_mask = x_gripper_distance < cfg.model.gripper_radius + x_gripper_distance_mask = x_gripper_distance_mask.unsqueeze(-1).repeat(1, 1, 1, 3) # (bsz, num_grippers, num_particles, 3) + gripper_v_expand = gripper_v[:, :, None].repeat(1, 1, num_particles, 1) # (bsz, num_grippers, num_particles, 3) + + gripper_closed = actions[:, step, :, -1] < 0.5 # (bsz, num_grippers) # 1: open, 0: close + x_gripper_distance_mask = torch.logical_and(x_gripper_distance_mask, gripper_closed[:, :, None, None].repeat(1, 1, num_particles, 3)) + + gripper_quat_vel = actions[:, step, :, 10:13] # (bsz, num_grippers, 3) + gripper_angular_vel = torch.linalg.norm(gripper_quat_vel, dim=-1, keepdims=True) # (bsz, num_grippers, 1) + gripper_quat_axis = gripper_quat_vel / (gripper_angular_vel + 1e-10) # (bsz, num_grippers, 3) + + grid_from_gripper_axis = x_from_gripper - \ + (gripper_quat_axis[:, :, None] * x_from_gripper).sum(dim=-1, keepdims=True) * gripper_quat_axis[:, :, None] # (bsz, num_grippers, num_particles, 3) + gripper_v_expand = torch.cross(gripper_quat_vel[:, :, None], grid_from_gripper_axis, dim=-1) + gripper_v_expand + + for i in range(gripper_xyz.shape[1]): + x_gripper_distance_mask_single = x_gripper_distance_mask[:, i] + x[x_gripper_distance_mask_single] = x_in[x_gripper_distance_mask_single] + cfg.sim.dt * gripper_v_expand[:, i][x_gripper_distance_mask_single] + v[x_gripper_distance_mask_single] = gripper_v_expand[:, i][x_gripper_distance_mask_single] + + if cfg.sim.n_history > 0: + if cfg.sim.gripper_points: + x_his_particles = torch.cat([x_his[:, :num_particles_orig].reshape(batch_size, num_particles_orig, -1, 3)[:, :, 1:], x[:, :num_particles_orig, None].detach()], dim=2) + v_his_particles = torch.cat([v_his[:, :num_particles_orig].reshape(batch_size, num_particles_orig, -1, 3)[:, :, 1:], v[:, :num_particles_orig, None].detach()], dim=2) + x_his = x_his_particles.reshape(batch_size, num_particles_orig, -1) + v_his = v_his_particles.reshape(batch_size, num_particles_orig, -1) + else: + x_his = torch.cat([x_his.reshape(batch_size, num_particles, -1, 3)[:, :, 1:], x[:, :, None].detach()], dim=2) + v_his = torch.cat([v_his.reshape(batch_size, num_particles, -1, 3)[:, :, 1:], v[:, :, None].detach()], dim=2) + x_his = x_his.reshape(batch_size, num_particles, -1) + v_his = v_his.reshape(batch_size, num_particles, -1) + + if cfg.sim.gripper_points: + extra_save = { + 'gripper_x': gripper_x[0, step], + 'gripper_v': gripper_v[0, step], + 'gripper_actions': actions[0, step], + } + x = x[:, :num_particles_orig] + v = v[:, :num_particles_orig] + enabled = enabled[:, :num_particles_orig] + else: + extra_save = {} + + colliders_save = colliders.export() + colliders_save = {key: torch.from_numpy(colliders_save[key])[0].to(x.device).to(x.dtype) for key in colliders_save} + + loss_x = nn.functional.mse_loss(x[enabled_mask > 0], gt_x[:, step][enabled_mask > 0]) + loss_v = nn.functional.mse_loss(v[enabled_mask > 0], gt_v[:, step][enabled_mask > 0]) + losses[step] = dict(loss_x=loss_x.item(), loss_v=loss_v.item()) + + ckpt = dict(x=x[0], v=v[0], **colliders_save, **extra_save) + + if step % cfg.sim.skip_frame == 0: + torch.save(ckpt, episode_state_root / f'{int(step / cfg.sim.skip_frame):04d}.pt') + + for loss_k in losses[0].keys(): + plt.figure(figsize=(10, 5)) + loss_list = [losses[step][loss_k] for step in losses] + plt.plot(loss_list) + plt.title(loss_k) + plt.grid() + plt.savefig(state_root / f'episode_{episode:04d}_{loss_k}.png', dpi=300) + + ## pv + if use_pv: + do_train_pv( + cfg, + log_root, + cfg.iteration, + [f'episode_{episode:04d}'], + eval_dirname=eval_base_name, + dataset_name=cfg.train.dataset_name.split("/")[-1], + eval_postfix='', + ) + + if use_gs: + do_gs( + cfg, + log_root, + cfg.iteration, + [f'episode_{episode:04d}'], + eval_dirname=eval_base_name, + dataset_name=cfg.train.dataset_name.split("/")[-1], + eval_postfix='', + camera_id=1, + with_mask=True, + with_bg=True, + ) + + if use_pv: + save_dir = log_root / f'{cfg.train.name}/{eval_base_name}/{cfg.train.dataset_name.split("/")[-1]}/{cfg.iteration:06d}/pv' + _ = do_dataset_pv( + cfg, + log_root / str(cfg.train.dataset_name), + [f'episode_{episode:04d}'], + save_dir=save_dir, + downsample_indices=downsample_indices, + ) + + metrics = do_metric( + cfg, + log_root, + cfg.iteration, + [f'episode_{episode:04d}'], + downsample_indices, + eval_dirname=eval_base_name, + dataset_name=cfg.train.dataset_name.split("/")[-1], + eval_postfix='', + camera_id=1, + use_gs=use_gs, + ) + return metrics + + +@torch.no_grad() +def main( + cfg: DictConfig, +): + + print(OmegaConf.to_yaml(cfg, resolve=True)) + + metrics_list = [] + for episode in range(cfg.start_episode, cfg.end_episode): + if "eval_state_only" in cfg and cfg.eval_state_only: + use_pv = False + use_gs = False + eval_base_name = 'eval_state' + else: + use_pv = True + use_gs = True + eval_base_name = 'eval' + metrics = eval(cfg, + None, + episode, + dataset_pv=True, + eval_base_name=eval_base_name, + use_pv=use_pv, + use_gs=use_gs, + ) + metrics_list.append(metrics) + + metrics_list = np.array(metrics_list)[:, 0] + + if metrics_list.shape[-1] == 10: + metric_names = ['mse', 'chamfer', 'emd', 'jscore', 'fscore', 'jfscore', 'perception', 'psnr', 'ssim', 'iou'] + else: + assert metrics_list.shape[-1] == 3 + metric_names = ['mse', 'chamfer', 'emd'] + + median_metric = np.median(metrics_list, axis=0) + step_75_metric = np.percentile(metrics_list, 75, axis=0) + step_25_metric = np.percentile(metrics_list, 25, axis=0) + + for i, metric_name in enumerate(metric_names): + # plot error + x = np.arange(1, len(median_metric) + 1) + plt.figure(figsize=(10, 5)) + plt.plot(x, median_metric[:, i]) + plt.xlabel(f"prediction steps, dt={cfg.sim.dt}") + plt.ylabel(metric_name) + plt.grid() + + ax = plt.gca() + x = np.arange(1, len(median_metric) + 1) + ax.fill_between(x, step_25_metric[:, i], step_75_metric[:, i], alpha=0.2) + + save_dir = root / 'log' / cfg.train.name / eval_base_name / cfg.train.dataset_name.split("/")[-1] / f'{cfg.iteration:06d}' / 'metric' + plt.savefig(os.path.join(save_dir, f'{i:02d}-{metric_name}.png')) + plt.close() + + mean_metric = np.mean(metrics_list, axis=0) + std_metric = np.std(metrics_list, axis=0) + + n_steps = 30 + mean_metric_step = mean_metric[n_steps] + std_metric_step = std_metric[n_steps] + + if mean_metric.shape[-1] == 10: + mse, chamfer, emd, jscore, fscore, jfscore, perception, psnr, ssim, iou = mean_metric_step + mse_std, chamfer_std, emd_std, jscore_std, fscore_std, jfscore_std, perception_std, psnr_std, ssim_std, iou_std = std_metric_step + print(f'3D MSE: {mse:.4f} {mse_std:.4f}, 3D CD: {chamfer:.4f} {chamfer_std:.4f}, 3D EMD: {emd:.4f} {emd_std:.4f}', end=' ') + print(f'J-Score: {jscore:.4f} {jscore_std:.4f}, F-Score: {fscore:.4f} {fscore_std:.4f}, JF-Score: {jfscore:.4f} {jfscore_std:.4f}', end=' ') + print(f'perception: {perception:.4f} {perception_std:.4f}, PSNR: {psnr:.4f} {psnr_std:.4f}, SSIM: {ssim:.4f} {ssim_std:.4f}, IoU: {iou:.4f} {iou_std:.4f}') + else: + mse, chamfer, emd = mean_metric_step + mse_std, chamfer_std, emd_std = std_metric_step + print(f'3D MSE: {mse:.4f} {mse_std:.4f}, 3D CD: {chamfer:.4f} {chamfer_std:.4f}, 3D EMD: {emd:.4f} {emd_std:.4f}') + + +if __name__ == '__main__': + + best_models = { + 'cloth': ['cloth', 'train', 100000, [610, 650]], + 'rope': ['rope', 'train', 100000, [651, 691]], + 'paperbag': ['paperbag', 'train', 100000, [200, 220]], + 'sloth': ['sloth', 'train', 100000, [113, 133]], + 'box': ['box', 'train', 100000, [306, 323]], + 'bread': ['bread', 'train', 100000, [143, 163]], + } + + arg_parser = argparse.ArgumentParser() + arg_parser.add_argument('--task', type=str, required=True) + arg_parser.add_argument('--state_only', action='store_true') + args = arg_parser.parse_args() + + with open(root / f'log/{best_models[args.task][0]}/{best_models[args.task][1]}/hydra.yaml', 'r') as f: + config = yaml.load(f, Loader=yaml.CLoader) + cfg = OmegaConf.create(config) + + cfg.iteration = best_models[args.task][2] + cfg.start_episode = best_models[args.task][3][0] + cfg.end_episode = best_models[args.task][3][1] + cfg.sim.num_steps = 1000 + cfg.sim.gripper_forcing = False + cfg.sim.uniform = True + cfg.sim.use_pv = True + cfg.eval_state_only = args.state_only + + main(cfg) diff --git a/src/experiments/train/gs.py b/src/experiments/train/gs.py new file mode 100644 index 0000000000000000000000000000000000000000..6d99b4298316d093ebd31d6536b3fbd6fafa91a3 --- /dev/null +++ b/src/experiments/train/gs.py @@ -0,0 +1,526 @@ +from pathlib import Path +import random +from tqdm import tqdm, trange +import hydra +from omegaconf import DictConfig, OmegaConf +import numpy as np +import torch +import torch.nn as nn +import torch.backends.cudnn +import math +import os +import cv2 +from sklearn.neighbors import NearestNeighbors +import json +import kornia + +from pgnd.utils import get_root, mkdir +from pgnd.ffmpeg import make_video + +from real_world.utils.render_utils import interpolate_motions +from real_world.gs.helpers import setup_camera +from real_world.gs.convert import save_to_splat, read_splat + +from diff_gaussian_rasterization import GaussianRasterizer +from diff_gaussian_rasterization import GaussianRasterizationSettings as Camera + +root: Path = get_root(__file__) + + +def Rt_to_w2c(R, t): + c2w = np.concatenate([np.concatenate([R, t.reshape(3, 1)], axis=1), np.array([[0, 0, 0, 1]])], axis=0) + w2c = np.linalg.inv(c2w) + return w2c + + +class GSRenderer: + def __init__(self, cfg, device='cuda'): + self.cfg = cfg + self.device = device + self.k_rel = 16 # knn for relations + self.k_wgt = 16 # knn for weights + self.clear() + + def clear(self, clear_params=True): + self.metadata = None + self.config = None + if clear_params: + self.params = None + + def load_params(self, params_path, remove_low_opa=True, remove_black=False): + pts, colors, scales, quats, opacities = read_splat(params_path) + + if remove_low_opa: + low_opa_idx = opacities[:, 0] < 0.1 + pts = pts[~low_opa_idx] + colors = colors[~low_opa_idx] + quats = quats[~low_opa_idx] + opacities = opacities[~low_opa_idx] + scales = scales[~low_opa_idx] + + if remove_black: + low_color_idx = colors.sum(axis=-1) < 0.5 + pts = pts[~low_color_idx] + colors = colors[~low_color_idx] + quats = quats[~low_color_idx] + opacities = opacities[~low_color_idx] + scales = scales[~low_color_idx] + + self.params = { + 'means3D': torch.from_numpy(pts).to(self.device), + 'rgb_colors': torch.from_numpy(colors).to(self.device), + 'log_scales': torch.log(torch.from_numpy(scales).to(self.device)), + 'unnorm_rotations': torch.from_numpy(quats).to(self.device), + 'logit_opacities': torch.logit(torch.from_numpy(opacities).to(self.device)) + } + + gripper_splat = root / 'log/gs/ckpts/gripper.splat' # gripper_new.splat + table_splat = root / 'log/gs/ckpts/table.splat' + + self.gripper_params = read_splat(gripper_splat) + self.table_params = read_splat(table_splat) + + def set_camera(self, w, h, intr, w2c=None, R=None, t=None, near=0.01, far=100.0): + if w2c is None: + assert R is not None and t is not None + w2c = Rt_to_w2c(R, t) + self.metadata = { + 'w': w, + 'h': h, + 'k': intr, + 'w2c': w2c, + } + self.config = {'near': near, 'far': far} + + @torch.no_grad + def render(self, render_data, cam_id, bg=[0, 0, 0]): + render_data = {k: v.to(self.device) for k, v in render_data.items()} + w, h = self.metadata['w'], self.metadata['h'] + k, w2c = self.metadata['k'], self.metadata['w2c'] + cam = setup_camera(w, h, k, w2c, self.config['near'], self.config['far'], bg) + im, _, depth, = GaussianRasterizer(raster_settings=cam)(**render_data) + return im, depth + + def knn_relations(self, bones): + k = self.k_rel + knn = NearestNeighbors(n_neighbors=k+1, algorithm='kd_tree').fit(bones.detach().cpu().numpy()) + _, indices = knn.kneighbors(bones.detach().cpu().numpy()) # (N, k) + indices = indices[:, 1:] # exclude self + return indices + + def knn_weights(self, bones, pts): + k = self.k_wgt + knn = NearestNeighbors(n_neighbors=k, algorithm='kd_tree').fit(bones.detach().cpu().numpy()) + _, indices = knn.kneighbors(pts.detach().cpu().numpy()) + bones_selected = bones[indices] # (N, k, 3) + dist = torch.norm(bones_selected - pts[:, None], dim=-1) # (N, k) + weights = 1 / (dist + 1e-6) + weights = weights / weights.sum(dim=-1, keepdim=True) # (N, k) + weights_all = torch.zeros((pts.shape[0], bones.shape[0]), device=pts.device) + weights_all[torch.arange(pts.shape[0])[:, None], indices] = weights + return weights_all + + def rollout_and_render(self, pts_list, grippers=[], with_bg=False): + assert self.params is not None + + pts_list = pts_list.to(self.device) + + if grippers != []: + n_grippers = grippers.shape[1] + grippers = grippers.to(self.device) + gripper_center = grippers[:, :, :3] + gripper_quat = grippers[:, :, 6:10] + gripper_radius = grippers[:, :, 13] + + xyz_0 = self.params['means3D'] + rgb_0 = self.params['rgb_colors'] + quat_0 = torch.nn.functional.normalize(self.params['unnorm_rotations']) + opa_0 = torch.sigmoid(self.params['logit_opacities']) + scales_0 = torch.exp(self.params['log_scales']) + + pts_prev = pts_list[0] + + xyz_list = [xyz_0] + rgb_list = [rgb_0] + quat_list = [quat_0] + opa_list = [opa_0] + scales_list = [scales_0] + for i in range(1, len(pts_list)): + pts = pts_list[i] + + xyz, quat, _ = interpolate_motions( + bones=pts_prev, + motions=pts - pts_prev, + relations=self.knn_relations(pts_prev), + weights=self.knn_weights(pts_prev, xyz_list[-1]), + xyz=xyz_list[-1], + quat=quat_list[-1], + step=f'{i-1}->{i}' + ) + + pts_prev = pts + xyz_list.append(xyz) + quat_list.append(quat) + rgb_list.append(rgb_list[-1]) + opa_list.append(opa_list[-1]) + scales_list.append(scales_list[-1]) + + n_steps = len(xyz_list) + xyz = torch.stack(xyz_list, dim=0).to(torch.float32) + rgb = torch.stack(rgb_list, dim=0).to(torch.float32) + quat = torch.stack(quat_list, dim=0).to(torch.float32) + opa = torch.stack(opa_list, dim=0).to(torch.float32) + scales = torch.stack(scales_list, dim=0).to(torch.float32) + + # interpolate smoothly + change_points = (xyz - torch.concatenate([xyz[0:1], xyz[:-1]], dim=0)).norm(dim=-1).sum(dim=-1).nonzero().squeeze(1) + change_points = torch.cat([torch.tensor([0]).to(change_points.device), change_points]) + for i in range(1, len(change_points)): + start = change_points[i - 1] + end = change_points[i] + if end - start < 2: # gap is 0 or 1 + continue + xyz[start:end] = torch.lerp(xyz[start][None], xyz[end][None], torch.linspace(0, 1, end - start + 1).to(xyz.device)[:, None, None])[:-1] + rgb[start:end] = torch.lerp(rgb[start][None], rgb[end][None], torch.linspace(0, 1, end - start + 1).to(rgb.device)[:, None, None])[:-1] + quat[start:end] = torch.lerp(quat[start][None], quat[end][None], torch.linspace(0, 1, end - start + 1).to(quat.device)[:, None, None])[:-1] + opa[start:end] = torch.lerp(opa[start][None], opa[end][None], torch.linspace(0, 1, end - start + 1).to(opa.device)[:, None, None])[:-1] + + quat = torch.nn.functional.normalize(quat, dim=-1) + mean_xyz = xyz.mean((0, 1)) + + if with_bg: + ## add table and gripper + # add table + t_pts, t_colors, t_scales, t_quats, t_opacities = self.table_params + t_pts = torch.tensor(t_pts).to(xyz.device).to(xyz.dtype) + t_colors = torch.tensor(t_colors).to(rgb.device).to(rgb.dtype) + t_scales = torch.tensor(t_scales).to(scales.device).to(scales.dtype) + t_quats = torch.tensor(t_quats).to(quat.device).to(quat.dtype) + t_opacities = torch.tensor(t_opacities).to(opa.device).to(opa.dtype) + + # add table pos + t_pts = t_pts + torch.tensor([mean_xyz[0].item() - 0.36, mean_xyz[1].item() - 0.10, 0.02]).to(t_pts.device).to(t_pts.dtype) + + # add gripper + g_pts, g_colors, g_scales, g_quats, g_opacities = self.gripper_params + g_pts = torch.tensor(g_pts).to(xyz.device).to(xyz.dtype) + g_colors = torch.tensor(g_colors).to(rgb.device).to(rgb.dtype) + g_scales = torch.tensor(g_scales).to(scales.device).to(scales.dtype) + g_quats = torch.tensor(g_quats).to(quat.device).to(quat.dtype) + g_opacities = torch.tensor(g_opacities).to(opa.device).to(opa.dtype) + + g_pts_tip = g_pts[(g_pts[:, 2] > -0.10) & (g_pts[:, 2] < -0.02)] + g_pts_tip_mean_xy = g_pts_tip[:, :2].mean(dim=0) + g_pts_translation = torch.tensor([-g_pts_tip_mean_xy[0] - 0.02, -g_pts_tip_mean_xy[1] + 0.0, 0.07]).to(g_pts.device).to(g_pts.dtype) + g_pts = g_pts + g_pts_translation + + # rotate gripper + gripper_mat = kornia.geometry.conversions.quaternion_to_rotation_matrix(gripper_quat) # (num_steps, num_grippers, 3, 3) + g_pts = g_pts @ gripper_mat # (num_steps, num_grippers, num_points, 3) + + g_quats_mat = kornia.geometry.conversions.quaternion_to_rotation_matrix(g_quats) # (num_grippers, 3, 3) + g_quats_mat = g_quats_mat[None, None].repeat(n_steps, n_grippers, 1, 1, 1) # (num_steps, num_grippers, num_points, 3, 3) + g_quats_mat = gripper_mat.permute(0, 1, 3, 2)[:, :, None] @ g_quats_mat # (num_steps, num_grippers, num_points, 3, 3) + g_quats = kornia.geometry.conversions.rotation_matrix_to_quaternion(g_quats_mat) # (num_steps, num_grippers, num_points, 4) + + # add gripper pos + g_pts = g_pts + gripper_center[:, :, None] + + # reshape + g_pts = g_pts.reshape(n_steps, -1, 3) + g_colors = g_colors.repeat(n_grippers, 1) + g_quats = g_quats.reshape(n_steps, -1, 4) + g_opacities = g_opacities.repeat(n_grippers, 1) + g_scales = g_scales.repeat(n_grippers, 1) + + # merge + bg_xyz = torch.cat([xyz, t_pts[None].repeat(n_steps, 1, 1), g_pts], dim=1) + bg_rgb = torch.cat([rgb, t_colors[None].repeat(n_steps, 1, 1), g_colors[None].repeat(n_steps, 1, 1)], dim=1) + bg_quat = torch.cat([quat, t_quats[None].repeat(n_steps, 1, 1), g_quats], dim=1) + bg_opa = torch.cat([opa, t_opacities[None].repeat(n_steps, 1, 1), g_opacities[None].repeat(n_steps, 1, 1)], dim=1) + bg_scales = torch.cat([scales, t_scales[None].repeat(n_steps, 1, 1), g_scales[None].repeat(n_steps, 1, 1)], dim=1) + + bg_quat = torch.nn.functional.normalize(bg_quat, dim=-1) + + rendervar_list = [] + rendervar_list_bg = [] + for t in range(n_steps): + rendervar = { + 'means3D': xyz[t], + 'colors_precomp': rgb[t], + 'rotations': quat[t], + 'opacities': opa[t], + 'scales': scales[t], + 'means2D': torch.zeros_like(xyz[t]), + } + rendervar_list.append(rendervar) + + if with_bg: + rendervar_bg = { + 'means3D': bg_xyz[t], + 'colors_precomp': bg_rgb[t], + 'rotations': bg_quat[t], + 'opacities': bg_opa[t], + 'scales': bg_scales[t], + 'means2D': torch.zeros_like(bg_xyz[t]), + } + rendervar_list_bg.append(rendervar_bg) + + return rendervar_list, rendervar_list_bg + + +def inverse_preprocess(cfg, p_x, grippers, source_data_root_episode): + dx = cfg.sim.num_grids_flexible[-1] + + xyz_orig = np.load(source_data_root_episode / 'traj.npz')['xyz'] + xyz = torch.tensor(xyz_orig, dtype=torch.float32) + + R = torch.tensor( + [[1, 0, 0], + [0, 0, -1], + [0, 1, 0]] + ).to(xyz.device).to(xyz.dtype) + xyz = torch.einsum('nij,jk->nik', xyz, R.T) + + scale = cfg.sim.preprocess_scale + xyz = xyz * scale + + if cfg.sim.preprocess_with_table: + global_translation = torch.tensor([ + 0.5 - (xyz[:, :, 0].max() + xyz[:, :, 0].min()) / 2, + dx * (cfg.model.clip_bound + 0.5) + 1e-5 - xyz[:, :, 1].min(), + 0.5 - (xyz[:, :, 2].max() + xyz[:, :, 2].min()) / 2, + ], dtype=xyz.dtype) + else: + global_translation = torch.tensor([ + 0.5 - (xyz[:, :, 0].max() + xyz[:, :, 0].min()) / 2, + 0.5 - (xyz[:, :, 1].max() + xyz[:, :, 1].min()) / 2, + 0.5 - (xyz[:, :, 2].max() + xyz[:, :, 2].min()) / 2, + ], dtype=xyz.dtype) + + p_x -= global_translation + grippers[:, :, :3] -= global_translation + + p_x = p_x / scale + grippers[:, :, :3] = grippers[:, :, :3] / scale + + p_x = torch.einsum('nij,jk->nik', p_x, torch.linalg.inv(R).T) + grippers[:, :, :3] = torch.einsum('nmi,ik->nmk', grippers[:, :, :3], torch.linalg.inv(R).T) + + gripper_quat = grippers[:, :, 6:10] # (n_steps, n_grippers, 4) + gripper_rot = kornia.geometry.conversions.quaternion_to_rotation_matrix(gripper_quat) # (n_steps, n_gripper, 3, 3) + gripper_rot = R.T @ gripper_rot @ R + gripper_quat = kornia.geometry.conversions.rotation_matrix_to_quaternion(gripper_rot) + grippers[:, :, 6:10] = gripper_quat + + return p_x, grippers + + +def get_camera(cfg, log_root, source_data_dir, source_episode_id, frame_id=0, camera_id=1): + h, w = 480, 848 + calibration_dir = (log_root.parent.parent / source_data_dir).parent / f'episode_{source_episode_id:04d}' / 'calibration' + intr = np.load(calibration_dir / 'intrinsics.npy') + rvec = np.load(calibration_dir / 'rvecs.npy') + tvec = np.load(calibration_dir / 'tvecs.npy') + R = [cv2.Rodrigues(rvec[i])[0] for i in range(rvec.shape[0])] + T = [tvec[i, :, 0] for i in range(tvec.shape[0])] + extrs = np.zeros((len(R), 4, 4)).astype(np.float32) + for i in range(len(R)): + extrs[i, :3, :3] = R[i] + extrs[i, :3, 3] = T[i] + extrs[i, 3, 3] = 1 + return { + 'w': w, + 'h': h, + 'intr': intr[camera_id], + 'w2c': extrs[camera_id], + } + + +@torch.no_grad() +def render( + cfg, + log_root, + iteration, + episode_names, + eval_dirname='eval', + eval_postfix='', + dataset_name='', + camera_id=1, + with_bg=False, + with_mask=False, + transparent=True, + start_step=None, + end_step=None, +): + + if dataset_name == '': + eval_name = f'{cfg.train.name}/{eval_dirname}/{iteration:06d}' + else: + eval_name = f'{cfg.train.name}/{eval_dirname}/{dataset_name}/{iteration:06d}' + render_type = 'pv_gs' + render_type_gs = 'gs' + + exp_root: Path = log_root / eval_name + state_root: Path = exp_root / 'state' + image_root: Path = exp_root / render_type + gs_root: Path = exp_root / render_type_gs + mkdir(image_root, overwrite=cfg.overwrite, resume=cfg.resume) + mkdir(gs_root, overwrite=cfg.overwrite, resume=cfg.resume) + + if with_mask: + render_type_mask = 'mask' + episode_mask_root = exp_root / render_type_mask + mkdir(episode_mask_root, overwrite=cfg.overwrite, resume=cfg.resume) + + if with_bg: + render_type_bg = 'pv_gs_bg' + render_type_gs_bg = 'gs_bg' + image_root_bg: Path = exp_root / render_type_bg + gs_root_bg: Path = exp_root / render_type_gs_bg + mkdir(image_root_bg, overwrite=cfg.overwrite, resume=cfg.resume) + mkdir(gs_root_bg, overwrite=cfg.overwrite, resume=cfg.resume) + + video_path_list = [] + for episode_idx, episode in enumerate(episode_names): + + renderer = GSRenderer(cfg.render) + + meta = np.loadtxt(log_root / str(cfg.train.source_dataset_name) / episode / 'meta.txt') + with open(log_root / str(cfg.train.source_dataset_name) / 'metadata.json') as f: + datadir_list = json.load(f) + episode_real_name = int(episode.split('_')[1]) + datadir = datadir_list[episode_real_name] + source_data_dir = datadir['path'] + source_episode_id = int(meta[0]) + source_frame_start = int(meta[1]) + int(cfg.sim.n_history) * int(cfg.train.dataset_load_skip_frame) * int(cfg.train.dataset_skip_frame) + source_frame_end = int(meta[2]) + episode_gs_init_path = (log_root.parent.parent / source_data_dir).parent / f'episode_{source_episode_id:04d}' / 'gs' / f'{source_frame_start:06d}.splat' + + renderer.load_params(episode_gs_init_path) + + episode_state_root = state_root / episode + episode_image_root = image_root / episode + episode_gs_root = gs_root / episode + mkdir(episode_image_root, overwrite=cfg.overwrite, resume=cfg.resume) + mkdir(episode_gs_root, overwrite=cfg.overwrite, resume=cfg.resume) + + if with_mask: + episode_mask_root = episode_mask_root / episode + mkdir(episode_mask_root, overwrite=cfg.overwrite, resume=cfg.resume) + + if with_bg: + episode_image_root_bg = image_root_bg / episode + episode_gs_root_bg = gs_root_bg / episode + mkdir(episode_image_root_bg, overwrite=cfg.overwrite, resume=cfg.resume) + mkdir(episode_gs_root_bg, overwrite=cfg.overwrite, resume=cfg.resume) + + ckpt_paths = list(sorted(episode_state_root.glob('*.pt'), key=lambda x: int(x.stem))) + + p_x_list = [] + grippers_list = [] + for i, path in enumerate(ckpt_paths): + if i % cfg.render.skip_frame != 0: + continue + + ckpt = torch.load(path, map_location='cpu') + p_x = ckpt['x'] + p_x_list.append(p_x) + + use_grippers = 'grippers' in ckpt + grippers = None + if use_grippers: + grippers = ckpt['grippers'] + if grippers is not None: + grippers_list.append(grippers) + + p_x_list = torch.stack(p_x_list, dim=0) + grippers_list = torch.stack(grippers_list, dim=0) if grippers_list else [] + p_x_list, grippers_list = inverse_preprocess(cfg, p_x_list, grippers_list, + source_data_root_episode=log_root / cfg.train.source_dataset_name / episode) + + rendervar_list, rendervar_list_bg = renderer.rollout_and_render(p_x_list, grippers_list, with_bg=with_bg) + + for i, path in enumerate(tqdm(ckpt_paths, desc=render_type)): + rendervar = rendervar_list[i // cfg.render.skip_frame] + renderer.set_camera(**get_camera(cfg, log_root, source_data_dir, source_episode_id, frame_id=i, camera_id=camera_id)) + im, _ = renderer.render(rendervar, 0) + im = im.cpu().numpy().transpose(1, 2, 0) + im = (im * 255).astype(np.uint8) + im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB) + + if transparent or with_mask: + rendervar['colors_precomp'] = torch.ones_like(rendervar['colors_precomp']) + mask, _ = renderer.render(rendervar, 0) + mask = mask.cpu().numpy().transpose(1, 2, 0) + + if transparent: + im = cv2.cvtColor(im, cv2.COLOR_RGB2RGBA) + im[:, :, 3] = (mask * 255).mean(-1).astype(np.uint8) + + if with_mask: + thresh = 0.1 + mask = (mask > thresh).astype(np.float32) + mask = (mask * 255).astype(np.uint8) + mask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY) + save_path = str(episode_mask_root / f'{i // cfg.render.skip_frame:04d}.png') + cv2.imwrite(save_path, mask) + + save_path = str(episode_image_root / f'{i // cfg.render.skip_frame:04d}.png') + cv2.imwrite(save_path, im) + + gs_save_path = str(episode_gs_root / f'{i // cfg.render.skip_frame:04d}.splat') + save_to_splat( + pts=rendervar['means3D'].cpu().numpy(), + colors=rendervar['colors_precomp'].cpu().numpy(), + scales=rendervar['scales'].cpu().numpy(), + quats=rendervar['rotations'].cpu().numpy(), + opacities=rendervar['opacities'].cpu().numpy(), + output_file=gs_save_path, + center=False, + rotate=False, + ) + + if with_bg: + rendervar_bg = rendervar_list_bg[i // cfg.render.skip_frame] + renderer.set_camera(**get_camera(cfg, log_root, source_data_dir, source_episode_id, frame_id=i, camera_id=camera_id)) + im, _ = renderer.render(rendervar_bg, 0) + im = im.cpu().numpy().transpose(1, 2, 0) + im = (im * 255).astype(np.uint8) + im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB) + + if transparent: + rendervar_bg['colors_precomp'] = torch.ones_like(rendervar_bg['colors_precomp']) + mask, _ = renderer.render(rendervar_bg, 0) + mask = mask.cpu().numpy().transpose(1, 2, 0) + im = cv2.cvtColor(im, cv2.COLOR_RGB2RGBA) + im[:, :, 3] = (mask * 255).mean(-1).astype(np.uint8) + + save_path = str(episode_image_root_bg / f'{i // cfg.render.skip_frame:04d}.png') + cv2.imwrite(save_path, im) + + gs_save_path = str(episode_gs_root_bg / f'{i // cfg.render.skip_frame:04d}.splat') + save_to_splat( + pts=rendervar_bg['means3D'].cpu().numpy(), + colors=rendervar_bg['colors_precomp'].cpu().numpy(), + scales=rendervar_bg['scales'].cpu().numpy(), + quats=rendervar_bg['rotations'].cpu().numpy(), + opacities=rendervar_bg['opacities'].cpu().numpy(), + output_file=gs_save_path, + center=False, + rotate=False, + ) + + make_video(episode_image_root, image_root / f'{episode}{eval_postfix}.mp4', '%04d.png', cfg.render.fps) + video_path_list.append(image_root / f'{episode}{eval_postfix}.mp4') + + if with_bg: + make_video(episode_image_root_bg, image_root_bg / f'{episode}{eval_postfix}.mp4', '%04d.png', cfg.render.fps) + + return video_path_list + + +@torch.no_grad() +def do_gs(*args, **kwargs): + ret = render(*args, **kwargs) + return ret diff --git a/src/experiments/train/metric.py b/src/experiments/train/metric.py new file mode 100644 index 0000000000000000000000000000000000000000..7b14ffe647f4f594be9d9df84b88718d46f20313 --- /dev/null +++ b/src/experiments/train/metric.py @@ -0,0 +1,256 @@ +from pathlib import Path +import random +import time +from omegaconf import DictConfig, OmegaConf +import numpy as np +import torch +import os +import glob +from PIL import Image +import argparse +import yaml +import scipy +import math +import lpips +import cv2 +import matplotlib.pyplot as plt +from skimage.metrics import structural_similarity as ssim_sk + +from pgnd.utils import get_root + +root: Path = get_root(__file__) + +def calc_psnr(img1, img2, mask): + # img1: (H, W, 3) + # img2: (H, W, 3) + # mask: (H, W) + mse = np.sum((img1 - img2) ** 2 * mask[..., None]) / np.sum(mask) + if mse == 0: + return 100 + PIXEL_MAX = 255.0 + return 20 * np.log10(PIXEL_MAX / np.sqrt(mse)) + + +def calc_ssim(img1, img2, mask): + # img1: (H, W, 3) + # img2: (H, W, 3) + # mask: (H, W) + return ssim_sk(img1, img2, data_range=255, mask=mask, multichannel=True, channel_axis=2) + + +def mse_dist(xyz, xyz_gt): + # xyz: (N, 3) + # xyz_gt: (N, 3) + return torch.mean(torch.norm(xyz - xyz_gt, 2, dim=1)).item() + + +def chamfer_dist(xyz, xyz_gt): + # xyz: (N, 3) + # xyz_gt: (N, 3) + dist1 = torch.sqrt(torch.sum((xyz[:, None] - xyz_gt[None]) ** 2, dim=2)) + dist2 = torch.sqrt(torch.sum((xyz_gt[:, None] - xyz[None]) ** 2, dim=2)) + chamfer = torch.mean(torch.min(dist1, dim=1).values) + torch.mean(torch.min(dist2, dim=1).values) + return chamfer.item() + +def em_distance(x, y): + # x: [N, D] + # y: [M, D] + cost_matrix = scipy.spatial.distance.cdist(x.cpu(), y.cpu()) + try: + ind1, ind2 = scipy.optimize.linear_sum_assignment( + cost_matrix, maximize=False + ) + except: + print("Error in linear sum assignment!") + ind1 = torch.tensor(ind1).to(x.device) + ind2 = torch.tensor(ind2).to(y.device) + x_new = x[ind1] + y_new = y[ind2] + + emd = torch.mean(torch.norm(x_new - y_new, 2, dim=1)) + return emd.item() + + +def seg2bmap(seg, width=None, height=None): + """ + From a segmentation, compute a binary boundary map with 1 pixel wide + boundaries. The boundary pixels are offset by 1/2 pixel towards the + origin from the actual segment boundary. + Arguments: + seg : Segments labeled from 1..k. + width : Width of desired bmap <= seg.shape[1] + height : Height of desired bmap <= seg.shape[0] + Returns: + bmap (ndarray): Binary boundary map. + David Martin + January 2003 + """ + + seg = seg.astype(bool) + seg[seg > 0] = 1 + + assert np.atleast_3d(seg).shape[2] == 1 + + width = seg.shape[1] if width is None else width + height = seg.shape[0] if height is None else height + + h, w = seg.shape[:2] + + ar1 = float(width) / float(height) + ar2 = float(w) / float(h) + + assert not ( + width > w | height > h | abs(ar1 - ar2) > 0.01 + ), "Can" "t convert %dx%d seg to %dx%d bmap." % (w, h, width, height) + + e = np.zeros_like(seg) + s = np.zeros_like(seg) + se = np.zeros_like(seg) + + e[:, :-1] = seg[:, 1:] + s[:-1, :] = seg[1:, :] + se[:-1, :-1] = seg[1:, 1:] + + b = seg ^ e | seg ^ s | seg ^ se + b[-1, :] = seg[-1, :] ^ e[-1, :] + b[:, -1] = seg[:, -1] ^ s[:, -1] + b[-1, -1] = 0 + + if w == width and h == height: + bmap = b + else: + bmap = np.zeros((height, width)) + for x in range(w): + for y in range(h): + if b[y, x]: + j = 1 + math.floor((y - 1) + height / h) + i = 1 + math.floor((x - 1) + width / h) + bmap[j, i] = 1 + + return bmap + +def compute_f(mask, mask_gt): + # Only loaded when run to reduce minimum requirements + # from pycocotools import mask as mask_utils + from skimage.morphology import disk + import cv2 + + bound_th = 0.008 + + bound_pix = bound_th if bound_th >= 1 - np.finfo('float').eps else \ + np.ceil(bound_th * np.linalg.norm(mask.shape)) + + # Get the pixel boundaries of both masks + fg_boundary = seg2bmap(mask) + gt_boundary = seg2bmap(mask_gt) + + # fg_dil = binary_dilation(fg_boundary, disk(bound_pix)) + fg_dil = cv2.dilate(fg_boundary.astype(np.uint8), disk(bound_pix).astype(np.uint8)) + # gt_dil = binary_dilation(gt_boundary, disk(bound_pix)) + gt_dil = cv2.dilate(gt_boundary.astype(np.uint8), disk(bound_pix).astype(np.uint8)) + + # Get the intersection + gt_match = gt_boundary * fg_dil + fg_match = fg_boundary * gt_dil + + # Area of the intersection + n_fg = np.sum(fg_boundary) + n_gt = np.sum(gt_boundary) + + # % Compute precision and recall + if n_fg == 0 and n_gt > 0: + precision = 1 + recall = 0 + elif n_fg > 0 and n_gt == 0: + precision = 0 + recall = 1 + elif n_fg == 0 and n_gt == 0: + precision = 1 + recall = 1 + else: + precision = np.sum(fg_match) / float(n_fg) + recall = np.sum(gt_match) / float(n_gt) + + # Compute F measure + if precision + recall == 0: + f_val = 0 + else: + f_val = 2 * precision * recall / (precision + recall) + + return f_val + +def compute_j(mask, mask_gt): + iou = np.sum(mask & mask_gt) / np.sum(mask | mask_gt) + return iou + + +def compute_lpips(fn, im, im_gt): + im = torch.tensor(im).permute(2, 0, 1).unsqueeze(0).float() + im_gt = torch.tensor(im_gt).permute(2, 0, 1).unsqueeze(0).float() + im = im / 255.0 + im_gt = im_gt / 255.0 + perception = fn.forward(im, im_gt) + return perception.item() + + +def inverse_preprocess(cfg, p_x, xyz): + dx = cfg.sim.num_grids[-1] + + R = torch.tensor( + [[1, 0, 0], + [0, 0, -1], + [0, 1, 0]] + ).to(xyz.device).to(xyz.dtype) + xyz = torch.einsum('nij,jk->nik', xyz, R.T) + + scale = cfg.sim.preprocess_scale + xyz = xyz * scale + + if cfg.sim.preprocess_with_table: + global_translation = torch.tensor([ + 0.5 - (xyz[:, :, 0].max() + xyz[:, :, 0].min()) / 2, + dx * (cfg.model.clip_bound + 0.5) + 1e-5 - xyz[:, :, 1].min(), + 0.5 - (xyz[:, :, 2].max() + xyz[:, :, 2].min()) / 2, + ], dtype=xyz.dtype) + else: + global_translation = torch.tensor([ + 0.5 - (xyz[:, :, 0].max() + xyz[:, :, 0].min()) / 2, + 0.5 - (xyz[:, :, 1].max() + xyz[:, :, 1].min()) / 2, + 0.5 - (xyz[:, :, 2].max() + xyz[:, :, 2].min()) / 2, + ], dtype=xyz.dtype) + + xyz += global_translation + if not (xyz[:, :, 0].min() >= dx * (cfg.model.clip_bound + 0.5) - 1e-6 \ + and xyz[:, :, 0].max() <= 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6 \ + and xyz[:, :, 1].min() >= dx * (cfg.model.clip_bound + 0.5) - 1e-6 \ + and xyz[:, :, 1].max() <= 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6 \ + and xyz[:, :, 2].min() >= dx * (cfg.model.clip_bound + 0.5) - 1e-6 \ + and xyz[:, :, 2].max() <= 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6): + print('inverse_preprocess out of bound') + xyz_max = xyz.max(dim=0).values + xyz_max_mask = (xyz_max[:, 0] > 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6) | \ + (xyz_max[:, 1] > 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6) | \ + (xyz_max[:, 2] > 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6) + xyz_min = xyz.min(dim=0).values + xyz_min_mask = (xyz_min[:, 0] < dx * (cfg.model.clip_bound + 0.5) - 1e-6) | \ + (xyz_min[:, 1] < dx * (cfg.model.clip_bound + 0.5) - 1e-6) | \ + (xyz_min[:, 2] < dx * (cfg.model.clip_bound + 0.5) - 1e-6) + xyz_mask = xyz_max_mask | xyz_min_mask + xyz = xyz[:, ~xyz_mask] + + assert (xyz[:, :, 0].min() >= dx * (cfg.model.clip_bound + 0.5) - 1e-6 \ + and xyz[:, :, 0].max() <= 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6 \ + and xyz[:, :, 1].min() >= dx * (cfg.model.clip_bound + 0.5) - 1e-6 \ + and xyz[:, :, 1].max() <= 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6 \ + and xyz[:, :, 2].min() >= dx * (cfg.model.clip_bound + 0.5) - 1e-6 \ + and xyz[:, :, 2].max() <= 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6) + xyz -= global_translation + + p_x -= global_translation + p_x = p_x / scale + p_x = torch.einsum('nij,jk->nik', p_x, torch.linalg.inv(R).T) + + # optional: recover xyz + xyz = xyz / scale + xyz = torch.einsum('nij,jk->nik', xyz, torch.linalg.inv(R).T) + return p_x, xyz diff --git a/src/experiments/train/metric_eval.py b/src/experiments/train/metric_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..cfad87075d1ceac94e73ad33045857b22536646c --- /dev/null +++ b/src/experiments/train/metric_eval.py @@ -0,0 +1,198 @@ +from pathlib import Path +import random +import time +from omegaconf import DictConfig, OmegaConf + +import numpy as np +import torch +import os +import glob +from PIL import Image +import argparse +import yaml +import scipy +import math +import lpips +import cv2 +from skimage.metrics import structural_similarity as ssim_sk +import json + +from pgnd.utils import get_root +from pgnd.ffmpeg import make_video +from train.metric import mse_dist, chamfer_dist, em_distance, compute_j, compute_f, compute_lpips, calc_psnr, calc_ssim, inverse_preprocess + +root: Path = get_root(__file__) + +@torch.no_grad() +def do_metric( + cfg, + log_root, + iteration, + episode_names, + downsample_indices, + eval_dirname, + camera_id=1, + eval_postfix='', + dataset_name='', + use_gs=True, + eval_camera_num=0, +): + + state_dir = log_root / cfg.train.name / eval_dirname / dataset_name / f'{iteration:06d}' / 'state' + + if use_gs: + pv_gs_dir = log_root / cfg.train.name / eval_dirname / dataset_name / f'{iteration:06d}' / 'pv_gs' + mask_dir = log_root / cfg.train.name / eval_dirname / dataset_name / f'{iteration:06d}' / 'mask' + + pv_gs_gt_dir = log_root / cfg.train.name / eval_dirname / dataset_name / f'{iteration:06d}' / 'pv_gs_gt' + mask_gt_dir = log_root / cfg.train.name / eval_dirname / dataset_name / f'{iteration:06d}' / 'mask_gt' + + save_dir = log_root / cfg.train.name / eval_dirname / dataset_name / f'{iteration:06d}' / 'metric' + save_dir.mkdir(parents=True, exist_ok=True) + + loss_fn_vgg = lpips.LPIPS(net='alex') + + metric_list_list = [] + + for episode_idx, episode in enumerate(episode_names): + state_dir_episode = state_dir / episode + save_dir_episode = save_dir / episode + save_dir_episode.mkdir(parents=True, exist_ok=True) + + if use_gs: + pv_gs_dir_episode = pv_gs_dir / episode + mask_dir_episode = mask_dir / episode + pv_gs_gt_dir_episode = pv_gs_gt_dir / episode + mask_gt_dir_episode = mask_gt_dir / episode + pv_gs_gt_dir_episode.mkdir(parents=True, exist_ok=True) + mask_gt_dir_episode.mkdir(parents=True, exist_ok=True) + + # save downsample_indices + downsample_indices = downsample_indices[0].cuda() + np.save(save_dir_episode / 'downsample_indices.npy', downsample_indices.cpu().numpy()) + + source_dataset_root = log_root / str(cfg.train.source_dataset_name) + + meta = np.loadtxt(log_root / str(cfg.train.source_dataset_name) / episode / 'meta.txt') + with open(log_root / str(cfg.train.source_dataset_name) / 'metadata.json') as f: + datadir_list = json.load(f) + episode_real_name = int(episode.split('_')[1]) + datadir = datadir_list[episode_real_name] + source_data_dir = datadir['path'] + source_episode_id = int(meta[0]) + source_frame_start = int(meta[1]) + source_frame_end = int(meta[2]) + + skip_frame = cfg.train.dataset_load_skip_frame * cfg.train.dataset_skip_frame + frame_ids = np.arange(source_frame_start + (cfg.sim.n_history + 1) * skip_frame, source_frame_end, skip_frame) + n_frames = len(frame_ids) + + # load xyz_orig for inverse preprocess + xyz_orig = np.load(source_dataset_root / episode / 'traj.npz')['xyz'] + xyz_orig = torch.tensor(xyz_orig, dtype=torch.float32) + + traj = [] + if use_gs: + imgs = [] + masks = [] + gt_imgs = [] + gt_masks = [] + + data_init = torch.load(log_root / cfg.train.dataset_name / 'state' / episode / f'{0:04d}.pt') + + for frame_id in range(n_frames): + frame_id_gt = frame_ids[frame_id] + + state = torch.load(state_dir_episode / f'{frame_id:04d}.pt') + x = state['x'].cpu() + traj.append(x) # (n, 3) + + if use_gs: + pv_gs = cv2.imread(pv_gs_dir_episode / f'{frame_id:04d}.png') + pv_gs = cv2.cvtColor(pv_gs, cv2.COLOR_BGR2RGB) + mask = cv2.imread(mask_dir_episode / f'{frame_id:04d}.png') + mask = cv2.cvtColor(mask, cv2.COLOR_BGR2GRAY) + + imgs.append(pv_gs) # (H, W, 3) + masks.append(mask) # (H, W, 3) + + gt_mask = cv2.imread((log_root.parent.parent / source_data_dir).parent / f'episode_{source_episode_id:04d}' \ + / f'camera_{camera_id}' / 'mask' / f'{int(frame_id_gt):06d}.png') + gt_mask = cv2.cvtColor(gt_mask, cv2.COLOR_BGR2GRAY) + gt_masks.append(gt_mask) + + gt_img = cv2.imread((log_root.parent.parent / source_data_dir).parent / f'episode_{source_episode_id:04d}' \ + / f'camera_{camera_id}' / 'rgb' / f'{int(frame_id_gt):06d}.jpg') + gt_img = cv2.cvtColor(gt_img, cv2.COLOR_BGR2RGB) + gt_img = gt_img * (gt_mask > 0)[..., None] + gt_imgs.append(gt_img) + + # save + pv_gs_gt = Image.fromarray(gt_img) + pv_gs_gt.save(pv_gs_gt_dir_episode / f'{frame_id:04d}.png') + mask_gt = Image.fromarray(gt_mask) + mask_gt.save(mask_gt_dir_episode / f'{frame_id:04d}.png') + + if use_gs: + frame_rate = 10 + video_name = pv_gs_gt_dir / f'{episode}.mp4' + make_video(pv_gs_gt_dir_episode, video_name, '%04d.png', frame_rate) + + traj = torch.stack(traj, dim=0) + traj, xyz_orig = inverse_preprocess(cfg, traj, xyz_orig) + gt_traj = xyz_orig[(cfg.sim.n_history + 1) * skip_frame::skip_frame] + + if use_gs: + assert len(imgs) == len(gt_imgs) == len(gt_masks) == len(traj) == len(gt_traj) + else: + assert len(traj) == len(gt_traj) + + metric_list = [] + for i in range(len(traj)): + xyz = traj[i].cuda() + xyz_gt = gt_traj[i].cuda() + + if use_gs: + im = imgs[i] + mask = masks[i] + im_gt = gt_imgs[i] + mask_gt = gt_masks[i] + + mask = mask > 0 + mask_gt = mask_gt > 0 + + xyz_gt_downsampled = xyz_gt[downsample_indices] + + mse = mse_dist(xyz, xyz_gt_downsampled) + chamfer = chamfer_dist(xyz, xyz_gt) + emd = em_distance(xyz, xyz_gt) + + if use_gs: + jscore = compute_j(mask, mask_gt) + fscore = compute_f(mask, mask_gt) + jfscore = (jscore + fscore) / 2 + + perception = compute_lpips(loss_fn_vgg, im, im_gt) + psnr = calc_psnr(im, im_gt, mask_gt) + ssim = calc_ssim(im, im_gt, mask_gt) + iou = np.sum(mask & mask_gt) / np.sum(mask | mask_gt) + + metric_list.append([mse, chamfer, emd, jscore, fscore, jfscore, perception, psnr, ssim, iou]) + print(f'{episode}, image: {i}, camera: {camera_id}', end=' ') + print(f'3D MSE: {mse:.4f}, 3D CD: {chamfer:.4f}, 3D EMD: {emd:.4f}', end=' ') + print(f'J-Score: {jscore:.4f}, F-Score: {fscore:.4f}, JF-Score: {jfscore:.4f}', end=' ') + print(f'perception: {perception:.4f}, PSNR: {psnr:.4f}, SSIM: {ssim:.4f}, IoU: {iou:.4f}') + + else: + metric_list.append([mse, chamfer, emd]) + print(f'{episode}, image: {i}', end=' ') + print(f'3D MSE: {mse:.4f}, 3D CD: {chamfer:.4f}, 3D EMD: {emd:.4f}') + + # save metrics + metric_list = np.array(metric_list) + np.savetxt(save_dir_episode / f'metric.txt', metric_list, fmt='%.6f') + + metric_list_list.append(metric_list) + + metric_list_list = np.array(metric_list_list) + return metric_list_list diff --git a/src/experiments/train/pv_dataset.py b/src/experiments/train/pv_dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..77a734f1248f765b6bd62765457bb67ad4d1da4c --- /dev/null +++ b/src/experiments/train/pv_dataset.py @@ -0,0 +1,120 @@ +from pathlib import Path +import random +from tqdm import tqdm, trange + +import hydra +from omegaconf import DictConfig, OmegaConf +import numpy as np +import torch +import torch.nn as nn +import torch.backends.cudnn +import math +import pyvista as pv +from dgl.geometry import farthest_point_sampler + +from pgnd.utils import get_root, mkdir +from pgnd.ffmpeg import make_video + +from train.pv_utils import Xvfb, get_camera_custom + + +def fps(x, n, random_start=False): + start_idx = random.randint(0, x.shape[0] - 1) if random_start else 0 + fps_idx = farthest_point_sampler(x[None], n, start_idx=start_idx)[0] + fps_idx = fps_idx.to(x.device) + return fps_idx + + +@torch.no_grad() +def render( + cfg, + dataset_root, + episode_names, + iteration=None, + start_step=None, + end_step=None, + save_dir=None, + downsample_indices=None, + clean_bg=False, +): + render_type = 'pv' + + exp_root: Path = dataset_root + state_root: Path = exp_root / 'state' + + video_path_list = [] + for episode_idx, episode in enumerate(episode_names): + + plotter = pv.Plotter(lighting='three lights', off_screen=True, window_size=(cfg.render.width, cfg.render.height)) + plotter.set_background('white') + plotter.camera_position = get_camera_custom(cfg.render.center, cfg.render.distance, cfg.render.azimuth, cfg.render.elevation) + plotter.enable_shadows() + + # add bounding box + scale_x = cfg.sim.num_grids[0] / (cfg.sim.num_grids[0] - 2 * cfg.render.bound) + scale_y = cfg.sim.num_grids[1] / (cfg.sim.num_grids[1] - 2 * cfg.render.bound) + scale_z = cfg.sim.num_grids[2] / (cfg.sim.num_grids[2] - 2 * cfg.render.bound) + scale = np.array([scale_x, scale_y, scale_z]) + scale_mean = np.power(np.prod(scale), 1 / 3) + bbox = pv.Box(bounds=[0, 1, 0, 1, 0, 1]) + if not clean_bg: + plotter.add_mesh(bbox, style='wireframe', color='black') + + # add axis + if not clean_bg: + for axis, color in enumerate(['r', 'g', 'b']): + mesh = pv.Arrow(start=[0, 0, 0], direction=np.eye(3)[axis], scale=0.2) + plotter.add_mesh(mesh, color=color, show_scalar_bar=False) + + episode_state_root = state_root / episode + + episode_image_root = save_dir / f'{episode}_gt' + mkdir(episode_image_root, overwrite=True, resume=True) + + ckpt_paths = list(sorted(episode_state_root.glob('*.pt'), key=lambda x: int(x.stem))) + if start_step is not None and end_step is not None: + ckpt_paths = ckpt_paths[start_step:end_step] + skip_frame = cfg.train.dataset_skip_frame * cfg.train.dataset_load_skip_frame + ckpt_paths = ckpt_paths[skip_frame::skip_frame] + for i, path in enumerate(tqdm(ckpt_paths, desc=render_type)): + + if i % cfg.render.skip_frame != 0: + continue + + ckpt = torch.load(path, map_location='cpu') + p_x = ckpt['x'].cpu().detach().numpy() + if downsample_indices is not None: + p_x = p_x[downsample_indices[0]] + else: + downsample_indices = fps(torch.from_numpy(p_x), cfg.sim.n_particles, random_start=True)[None] + p_x = p_x[downsample_indices[0]] + + x = (p_x - 0.5) * scale + 0.5 + + grippers = ckpt['grippers'].cpu().detach().numpy() + n_eef = grippers.shape[0] + + radius = 0.5 * np.power((0.5 ** 3) / x.shape[0], 1 / 3) * scale_mean + x = np.clip(x, radius, 1 - radius) + + polydata = pv.PolyData(x) + plotter.add_mesh(polydata, style='points', name='object', render_points_as_spheres=True, point_size=radius * cfg.render.radius_scale, color=list(cfg.render.reflectance)) + for j in range(n_eef): + gripper = pv.Sphere(center=grippers[j, :3], radius=grippers[j, -2]) + plotter.add_mesh(gripper, color='blue', name=f'gripper_{j}') + + plotter.show(auto_close=False, screenshot=str(episode_image_root / f'{i // cfg.render.skip_frame:04d}.png')) + + plotter.close() + if save_dir is not None: + make_video(episode_image_root, save_dir / f'{episode}_gt.mp4', '%04d.png', cfg.render.fps) + video_path_list.append(save_dir / f'{episode}_gt.mp4') + + return video_path_list + + +@torch.no_grad() +def do_dataset_pv(*args, **kwargs): + with Xvfb(): + ret = render(*args, **kwargs) + return ret \ No newline at end of file diff --git a/src/experiments/train/pv_train.py b/src/experiments/train/pv_train.py new file mode 100644 index 0000000000000000000000000000000000000000..b962255ac4be4bb5d9b990dfe509f2fd2b935ce2 --- /dev/null +++ b/src/experiments/train/pv_train.py @@ -0,0 +1,117 @@ +from pathlib import Path +import random +from tqdm import tqdm, trange + +import hydra +from omegaconf import DictConfig, OmegaConf +import numpy as np +import torch +import torch.nn as nn +import torch.backends.cudnn +import math +import pyvista as pv + +from pgnd.utils import get_root, mkdir +from pgnd.ffmpeg import make_video + +from train.pv_utils import Xvfb, get_camera_custom + + +@torch.no_grad() +def render( + cfg, + log_root, + iteration, + episode_names, + eval_dirname='eval', + eval_postfix='', + dataset_name='', + start_step=None, + end_step=None, + clean_bg=False, +): + clean_bg = False + + if dataset_name == '': + eval_name = f'{cfg.train.name}/{eval_dirname}/{iteration:06d}' + else: + eval_name = f'{cfg.train.name}/{eval_dirname}/{dataset_name}/{iteration:06d}' + render_type = 'pv' + + exp_root: Path = log_root / eval_name + state_root: Path = exp_root / 'state' + image_root: Path = exp_root / render_type + mkdir(image_root, overwrite=cfg.overwrite, resume=cfg.resume) + + + video_path_list = [] + for episode_idx, episode in enumerate(episode_names): + + plotter = pv.Plotter(lighting='three lights', off_screen=True, window_size=(cfg.render.width, cfg.render.height)) + plotter.set_background('white') + plotter.camera_position = get_camera_custom(cfg.render.center, cfg.render.distance, cfg.render.azimuth, cfg.render.elevation) + plotter.enable_shadows() + + # add bounding box + scale_x = cfg.sim.num_grids[0] / (cfg.sim.num_grids[0] - 2 * cfg.render.bound) + scale_y = cfg.sim.num_grids[1] / (cfg.sim.num_grids[1] - 2 * cfg.render.bound) + scale_z = cfg.sim.num_grids[2] / (cfg.sim.num_grids[2] - 2 * cfg.render.bound) + scale = np.array([scale_x, scale_y, scale_z]) + scale_mean = np.power(np.prod(scale), 1 / 3) + bbox = pv.Box(bounds=[0, 1, 0, 1, 0, 1]) + if not clean_bg: + plotter.add_mesh(bbox, style='wireframe', color='black') + + # add axis + if not clean_bg: + for axis, color in enumerate(['r', 'g', 'b']): + mesh = pv.Arrow(start=[0, 0, 0], direction=np.eye(3)[axis], scale=0.2) + plotter.add_mesh(mesh, color=color, show_scalar_bar=False) + + episode_state_root = state_root / episode + episode_image_root = image_root / episode + mkdir(episode_image_root, overwrite=cfg.overwrite, resume=cfg.resume) + + ckpt_paths = list(sorted(episode_state_root.glob('*.pt'), key=lambda x: int(x.stem))) + for i, path in enumerate(tqdm(ckpt_paths, desc=render_type)): + + if i % cfg.render.skip_frame != 0: + continue + + ckpt = torch.load(path, map_location='cpu') + p_x = ckpt['x'].cpu().detach().numpy() + + x = (p_x - 0.5) * scale + 0.5 + + grippers = ckpt['grippers'].cpu().detach().numpy() + n_eef = grippers.shape[0] + + radius = 0.5 * np.power((0.5 ** 3) / x.shape[0], 1 / 3) * scale_mean + x = np.clip(x, radius, 1 - radius) + + polydata = pv.PolyData(x) + plotter.add_mesh(polydata, style='points', name='object', render_points_as_spheres=True, point_size=radius * cfg.render.radius_scale, color=list(cfg.render.reflectance)) + for j in range(n_eef): + gripper = pv.Sphere(center=grippers[j, :3], radius=0.04) + plotter.add_mesh(gripper, color='blue', name=f'gripper_{j}') + if 'gripper_x' in ckpt: + gripper_points = ckpt['gripper_x'].cpu().detach().numpy() + gripper_points = (gripper_points - 0.5) * scale + 0.5 + gripper_points = np.clip(gripper_points, radius, 1 - radius) + gripper_polydata = pv.PolyData(gripper_points) + plotter.add_mesh(gripper_polydata, style='points', name=f'gripper_points', render_points_as_spheres=True, point_size=radius * cfg.render.radius_scale, color='blue') + + plotter.show(auto_close=False, screenshot=str(episode_image_root / f'{i // cfg.render.skip_frame:04d}.png')) + + plotter.close() + make_video(episode_image_root, image_root / f'{episode}{eval_postfix}.mp4', '%04d.png', cfg.render.fps) + video_path_list.append(image_root / f'{episode}{eval_postfix}.mp4') + + return video_path_list + + +@torch.no_grad() +def do_train_pv(*args, **kwargs): + with Xvfb(): + ret = render(*args, **kwargs) + return ret diff --git a/src/experiments/train/pv_utils.py b/src/experiments/train/pv_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..a3a62bfd507b16844f834d1047acb9fc0012b6aa --- /dev/null +++ b/src/experiments/train/pv_utils.py @@ -0,0 +1,176 @@ +from pathlib import Path +from tqdm import tqdm +import time +import math +import psutil +import random +import fcntl +import os +import subprocess +import tempfile +from random import randint +from errno import EACCES + +import hydra +from omegaconf import DictConfig +import numpy as np +import torch +import pyvista as pv + +from pgnd.utils import get_root, mkdir +from pgnd.ffmpeg import make_video + +root: Path = get_root(__file__) + + +class Xvfb(object): + + # Maximum value to use for a display. 32-bit maxint is the + # highest Xvfb currently supports + MAX_DISPLAY = 2147483647 + SLEEP_TIME_BEFORE_START = 0.1 + + def __init__( + self, width=800, height=680, colordepth=24, + tempdir=None, display=None, **kwargs): + self.width = width + self.height = height + self.colordepth = colordepth + self._tempdir = tempdir or tempfile.gettempdir() + self.new_display = display + + if not self.xvfb_exists(): + msg = ( + 'Can not find Xvfb. Please install it with:\n' + ' sudo apt install libgl1-mesa-glx xvfb') + raise EnvironmentError(msg) + + self.extra_xvfb_args = ['-screen', '0', '{}x{}x{}'.format( + self.width, self.height, self.colordepth)] + + for key, value in kwargs.items(): + self.extra_xvfb_args += ['-{}'.format(key), value] + + if 'DISPLAY' in os.environ: + self.orig_display = os.environ['DISPLAY'].split(':')[1] + else: + self.orig_display = None + + self.proc = None + + def __enter__(self): + self.start() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.stop() + + def start(self): + if self.new_display is not None: + if not self._get_lock_for_display(self.new_display): + raise ValueError(f'Could not lock display :{self.new_display}') + else: + self.new_display = self._get_next_unused_display() + display_var = ':{}'.format(self.new_display) + self.xvfb_cmd = ['Xvfb', display_var] + self.extra_xvfb_args + with open(os.devnull, 'w') as fnull: + self.proc = subprocess.Popen( + self.xvfb_cmd, stdout=fnull, stderr=fnull, close_fds=True) + # give Xvfb time to start + time.sleep(self.__class__.SLEEP_TIME_BEFORE_START) + ret_code = self.proc.poll() + if ret_code is None: + self._set_display_var(self.new_display) + else: + self._cleanup_lock_file() + raise RuntimeError( + f'Xvfb did not start ({ret_code}): {self.xvfb_cmd}') + + def stop(self): + try: + if self.orig_display is None: + del os.environ['DISPLAY'] + else: + self._set_display_var(self.orig_display) + if self.proc is not None: + try: + self.proc.terminate() + self.proc.wait() + except OSError: + pass + self.proc = None + finally: + self._cleanup_lock_file() + + def xvfb_exists(self): + """Check that Xvfb is available on PATH and is executable.""" + paths = os.environ['PATH'].split(os.pathsep) + return any(os.access(os.path.join(path, 'Xvfb'), os.X_OK) + for path in paths) + + def _cleanup_lock_file(self): + ''' + This should always get called if the process exits safely + with Xvfb.stop() (whether called explicitly, or by __exit__). + If you are ending up with /tmp/X123-lock files when Xvfb is not + running, then Xvfb is not exiting cleanly. Always either call + Xvfb.stop() in a finally block, or use Xvfb as a context manager + to ensure lock files are purged. + ''' + self._lock_display_file.close() + try: + os.remove(self._lock_display_file.name) + except OSError: + pass + + def _get_lock_for_display(self, display): + ''' + In order to ensure multi-process safety, this method attempts + to acquire an exclusive lock on a temporary file whose name + contains the display number for Xvfb. + ''' + tempfile_path = os.path.join(self._tempdir, '.X{0}-lock'.format(display)) + try: + self._lock_display_file = open(tempfile_path, 'w') + except PermissionError as e: + return False + else: + try: + fcntl.flock(self._lock_display_file, + fcntl.LOCK_EX | fcntl.LOCK_NB) + except BlockingIOError: + return False + else: + return True + + def _get_next_unused_display(self): + ''' + Randomly chooses a display number and tries to acquire a lock for this number. + If the lock could be acquired, returns this number, otherwise choses a new one. + :return: free display number + ''' + while True: + rand = randint(1, self.__class__.MAX_DISPLAY) + if self._get_lock_for_display(rand): + return rand + else: + continue + + def _set_display_var(self, display): + os.environ['DISPLAY'] = ':{}'.format(display) + + + +def get_camera_custom(center=(0.5, 0.3, 0.5), distance=3.4, azimuth=-125, elevation=30): + target = np.array(center) + theta = 90 + azimuth + y = distance * math.sin(math.radians(elevation)) + x = math.cos(math.radians(theta)) * distance * math.cos(math.radians(elevation)) + z = math.sin(math.radians(theta)) * distance * math.cos(math.radians(elevation)) + origin = target + np.array([x, y, z]) + + return [ + origin.tolist(), + target.tolist(), + (0.0, 1.0, 0.0), + ] diff --git a/src/experiments/train/train_eval.py b/src/experiments/train/train_eval.py new file mode 100644 index 0000000000000000000000000000000000000000..36b501d86ebc7e5857442542a50cab05bf279590 --- /dev/null +++ b/src/experiments/train/train_eval.py @@ -0,0 +1,782 @@ +from pathlib import Path +import random +import time +import os +import matplotlib.pyplot as plt +from collections import defaultdict +from tqdm import tqdm, trange +import hydra +from omegaconf import DictConfig, OmegaConf +import numpy as np +from PIL import Image +import warp as wp +import matplotlib.pyplot as plt +import torch +import torch.backends.cudnn +import torch.nn as nn +from torch.nn.utils import clip_grad_norm_ +from torch.utils.data import DataLoader +import kornia +import sys +sys.path.append(str(Path(__file__).parent.parent.parent)) +sys.path.append(str(Path(__file__).parent.parent)) + +from pgnd.sim import Friction, CacheDiffSimWithFrictionBatch, StaticsBatch, CollidersBatch +from pgnd.material import PGNDModel +from pgnd.data import RealTeleopBatchDataset, RealGripperDataset +from pgnd.utils import Logger, get_root, mkdir + +from train.pv_train import do_train_pv +from train.pv_dataset import do_dataset_pv +from train.metric_eval import do_metric + +root: Path = get_root(__file__) + +def dataloader_wrapper(dataloader, name): + cnt = 0 + while True: + cnt += 1 + for data in dataloader: + yield data + +def transform_gripper_points(cfg, gripper_points, gripper): + dx = cfg.sim.num_grids[-1] + + gripper_xyz = gripper[:, :, :, :3] # (bsz, num_steps, num_grippers, 3) + gripper_v = gripper[:, :, :, 3:6] # (bsz, num_steps, num_grippers, 3) + gripper_quat = gripper[:, :, :, 6:10] # (bsz, num_steps, num_grippers, 4) + num_steps = gripper_xyz.shape[1] + num_grippers = gripper_xyz.shape[2] + gripper_mat = kornia.geometry.conversions.quaternion_to_rotation_matrix(gripper_quat) # (bsz, num_steps, num_grippers, 3, 3) + gripper_points = gripper_points[:, None, None].repeat(1, num_steps, num_grippers, 1, 1) # (bsz, num_steps, num_grippers, num_points, 3) + gripper_x = gripper_points @ gripper_mat + gripper_xyz[:, :, :, None] # (bsz, num_steps, num_grippers, num_points, 3) + bsz = gripper_x.shape[0] + num_points = gripper_x.shape[3] + + gripper_quat_vel = gripper[:, :, :, 10:13] # (bsz, num_steps, num_grippers, 3) + gripper_angular_vel = torch.linalg.norm(gripper_quat_vel, dim=-1, keepdims=True) # (bsz, num_steps, num_grippers, 1) + gripper_quat_axis = gripper_quat_vel / (gripper_angular_vel + 1e-10) # (bsz, num_steps, num_grippers, 3) + + gripper_v_expand = gripper_v[:, :, :, None].repeat(1, 1, 1, num_points, 1) # (bsz, num_grippers, num_points, 3) + gripper_points_from_axis = gripper_x - gripper_xyz[:, :, :, None] # (bsz, num_steps, num_grippers, num_points, 3) + grid_from_gripper_axis = gripper_points_from_axis - \ + (gripper_quat_axis[:, :, :, None] * gripper_points_from_axis).sum(dim=-1, keepdims=True) * gripper_quat_axis[:, :, :, None] # (bsz, num_steps, num_grippers, num_particles, 3) + gripper_v_expand = torch.cross(gripper_quat_vel[:, :, :, None], grid_from_gripper_axis, dim=-1) + gripper_v_expand + gripper_v = gripper_v_expand.reshape(bsz, num_steps, num_grippers * num_points, 3) + gripper_x = gripper_x.reshape(bsz, num_steps, num_grippers * num_points, 3) + + gripper_x_mask = (gripper_x[:, :, :, 0] > dx * (cfg.model.clip_bound + 0.5)) \ + & (gripper_x[:, :, :, 0] < 1 - (dx * (cfg.model.clip_bound + 0.5))) \ + & (gripper_x[:, :, :, 1] > dx * (cfg.model.clip_bound + 0.5)) \ + & (gripper_x[:, :, :, 1] < 1 - (dx * (cfg.model.clip_bound + 0.5))) \ + & (gripper_x[:, :, :, 2] > dx * (cfg.model.clip_bound + 0.5)) \ + & (gripper_x[:, :, :, 2] < 1 - (dx * (cfg.model.clip_bound + 0.5))) + + return gripper_x, gripper_v, gripper_x_mask + + +class Trainer: + + def __init__(self, cfg: DictConfig): + self.cfg = cfg + print(OmegaConf.to_yaml(cfg, resolve=True)) + + wp.init() + wp.ScopedTimer.enabled = False + wp.set_module_options({'fast_math': False}) + wp.config.verify_autograd_array_access = True + + gpus = [int(gpu) for gpu in cfg.gpus] + wp_devices = [wp.get_device(f'cuda:{gpu}') for gpu in gpus] + torch_devices = [torch.device(f'cuda:{gpu}') for gpu in gpus] + device_count = len(torch_devices) + + assert device_count == 1 + self.wp_device = wp_devices[0] + self.torch_device = torch_devices[0] + + seed = cfg.seed + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + + torch.autograd.set_detect_anomaly(True) + + torch.backends.cudnn.benchmark = True + + # path + log_root: Path = root / 'log' + exp_root: Path = log_root / cfg.train.name + mkdir(exp_root, overwrite=cfg.overwrite, resume=cfg.resume) + OmegaConf.save(cfg, exp_root / 'hydra.yaml', resolve=True) + + ckpt_root: Path = exp_root / 'ckpt' + ckpt_root.mkdir(parents=True, exist_ok=True) + + self.log_root = log_root + self.ckpt_root = ckpt_root + + self.use_pv = cfg.train.use_pv + self.dataset_non_overwrite = cfg.train.dataset_non_overwrite + if not self.use_pv: + print('not using pv rendering...') + + assert self.cfg.train.source_dataset_name is not None + self.use_gs = cfg.train.use_gs + + # logging + self.verbose = False + if not cfg.debug: + logger = Logger(cfg, project='pgnd-train') + self.logger = logger + + def load_train_dataset(self): + cfg = self.cfg + if cfg.train.dataset_name is None: + cfg.train.dataset_name = Path(cfg.train.name).parent / 'dataset' + + source_dataset_root = self.log_root / str(cfg.train.source_dataset_name) + assert os.path.exists(source_dataset_root) + + dataset = RealTeleopBatchDataset( + cfg, + dataset_root=self.log_root / cfg.train.dataset_name / 'state', + source_data_root=source_dataset_root, + device=self.torch_device, + num_steps=cfg.sim.num_steps_train, + train=True, + dataset_non_overwrite=self.dataset_non_overwrite, + ) + self.dataset = dataset + + if cfg.sim.gripper_points: + gripper_dataset = RealGripperDataset( + cfg, + device=self.torch_device, + train=True, + ) + self.gripper_dataset = gripper_dataset + + def init_train(self): + cfg = self.cfg + + dataloader = dataloader_wrapper( + DataLoader(self.dataset, batch_size=cfg.train.batch_size, shuffle=True, num_workers=cfg.train.num_workers, pin_memory=True, drop_last=True), + 'dataset' + ) + self.dataloader = dataloader + if cfg.sim.gripper_points: + gripper_dataloader = dataloader_wrapper( + DataLoader(self.gripper_dataset, batch_size=cfg.train.batch_size, shuffle=True, num_workers=cfg.train.num_workers, pin_memory=True, drop_last=True), + 'gripper_dataset' + ) + self.gripper_dataloader = gripper_dataloader + + # material model + material_requires_grad = cfg.model.material.requires_grad + material: nn.Module = PGNDModel(cfg) + material.to(self.torch_device) + material.requires_grad_(material_requires_grad) + material.train(True) + + # friction + friction: nn.Module = Friction(np.array([cfg.model.friction.value])) + friction.to(self.torch_device) + friction.requires_grad_(False) + friction.train(False) + + if cfg.resume and cfg.train.resume_iteration > 0: + assert (self.ckpt_root / f'{cfg.train.resume_iteration:06d}.pt').exists() + ckpt = torch.load(self.ckpt_root / f'{cfg.train.resume_iteration:06d}.pt', map_location=self.torch_device) + material.load_state_dict(ckpt['material']) + + elif cfg.model.ckpt: + ckpt = torch.load(self.log_root / cfg.model.ckpt, map_location=self.torch_device) + material.load_state_dict(ckpt['material']) + + if not (cfg.resume and cfg.train.resume_iteration > 0): + torch.save({ + 'material': material.state_dict(), + }, self.ckpt_root / f'{cfg.train.resume_iteration:06d}.pt') + + if material_requires_grad: + material_optimizer = torch.optim.Adam(material.parameters(), lr=cfg.train.material_lr, weight_decay=cfg.train.material_wd) + material_lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer=material_optimizer, T_max=cfg.train.num_iterations) + if cfg.train.resume_iteration > 0: + material_lr_scheduler.last_epoch = cfg.train.resume_iteration - 1 + material_lr_scheduler.step() + + criterion = nn.MSELoss(reduction='mean') + criterion.to(self.torch_device) + + total_step_count = 0 + if cfg.resume and cfg.train.resume_iteration > 0: + total_step_count = cfg.train.resume_iteration * cfg.sim.num_steps_train + losses_log = defaultdict(int) + loss_factor_v = cfg.train.loss_factor_v + loss_factor_x = cfg.train.loss_factor_x + + self.loss_factor_v = loss_factor_v + self.loss_factor_x = loss_factor_x + self.material_requires_grad = material_requires_grad + self.material = material + self.material_optimizer = material_optimizer + self.material_lr_scheduler = material_lr_scheduler + self.criterion = criterion + self.total_step_count = total_step_count + self.losses_log = losses_log + self.friction = friction + + def train(self, start_iteration, end_iteration, save=True): + cfg = self.cfg + self.material.train(True) + for iteration in trange(start_iteration, end_iteration, dynamic_ncols=True): + if self.material_requires_grad: + self.material_optimizer.zero_grad() + + losses = defaultdict(int) + + init_state, actions, gt_states = next(self.dataloader) + x, v, x_his, v_his, clip_bound, enabled, episode_vec = init_state + x = x.to(self.torch_device) + v = v.to(self.torch_device) + x_his = x_his.to(self.torch_device) + v_his = v_his.to(self.torch_device) + + actions = actions.to(self.torch_device) + + if cfg.sim.gripper_points: + gripper_points, _ = next(self.gripper_dataloader) + gripper_points = gripper_points.to(self.torch_device) + gripper_x, gripper_v, gripper_mask = transform_gripper_points(cfg, gripper_points, actions) # (bsz, num_steps, num_grippers, 3) + + gt_x, gt_v = gt_states + gt_x = gt_x.to(self.torch_device) + gt_v = gt_v.to(self.torch_device) + + # gt_x: (bsz, num_steps_total) + batch_size = gt_x.shape[0] + num_steps_total = gt_x.shape[1] + num_particles = gt_x.shape[2] + + if cfg.sim.gripper_points: + num_gripper_particles = gripper_x.shape[2] + num_particles_orig = num_particles + num_particles = num_particles + num_gripper_particles + + sim = CacheDiffSimWithFrictionBatch(cfg, num_steps_total, batch_size, self.wp_device, requires_grad=True) + + statics = StaticsBatch() + statics.init(shape=(batch_size, num_particles), device=self.wp_device) + statics.update_clip_bound(clip_bound) + statics.update_enabled(enabled) + colliders = CollidersBatch() + + if cfg.sim.gripper_points: + assert not cfg.sim.gripper_forcing + num_grippers = 0 + else: + num_grippers = cfg.sim.num_grippers + + colliders.init(shape=(batch_size, num_grippers), device=self.wp_device) + if num_grippers > 0: + assert len(actions.shape) > 2 + colliders.initialize_grippers(actions[:, 0]) + + enabled = enabled.to(self.torch_device) # (bsz, num_particles) + enabled_mask = enabled.unsqueeze(-1).repeat(1, 1, 3) # (bsz, num_particles, 3) + + for step in range(num_steps_total): + if num_grippers > 0: + colliders.update_grippers(actions[:, step]) + + x_in = x.clone() + if step == 0: + x_in_gt = x.clone() + v_in_gt = v.clone() + else: + x_in_gt = x_in_gt + v_in_gt * cfg.sim.dt * cfg.sim.interval + + if cfg.sim.gripper_points: + x = torch.cat([x, gripper_x[:, step]], dim=1) # gripper_x: (bsz, num_steps, num_particles, 3) + v = torch.cat([v, gripper_v[:, step]], dim=1) + x_his = torch.cat([x_his, torch.zeros((gripper_x.shape[0], gripper_x.shape[2], cfg.sim.n_history * 3), device=x_his.device, dtype=x_his.dtype)], dim=1) + v_his = torch.cat([v_his, torch.zeros((gripper_x.shape[0], gripper_x.shape[2], cfg.sim.n_history * 3), device=v_his.device, dtype=v_his.dtype)], dim=1) + if enabled.shape[1] < num_particles: + enabled = torch.cat([enabled, gripper_mask[:, step]], dim=1) + statics.update_enabled(enabled.cpu()) + + pred = self.material(x, v, x_his, v_his, enabled) + x, v = sim(statics, colliders, step, x, v, self.friction.mu.clone()[None].repeat(batch_size, 1), pred) + + if cfg.sim.gripper_forcing: + assert not cfg.sim.gripper_points + gripper_xyz = actions[:, step, :, :3] # (bsz, num_grippers, 3) + gripper_v = actions[:, step, :, 3:6] # (bsz, num_grippers, 3) + x_from_gripper = x_in[:, None] - gripper_xyz[:, :, None] # (bsz, num_grippers, num_particles, 3) + x_gripper_distance = torch.norm(x_from_gripper, dim=-1) # (bsz, num_grippers, num_particles) + x_gripper_distance_mask = x_gripper_distance < cfg.model.gripper_radius + x_gripper_distance_mask = x_gripper_distance_mask.unsqueeze(-1).repeat(1, 1, 1, 3) # (bsz, num_grippers, num_particles, 3) + gripper_v_expand = gripper_v[:, :, None].repeat(1, 1, num_particles, 1) # (bsz, num_grippers, num_particles, 3) + + gripper_closed = actions[:, step, :, -1] < 0.5 # (bsz, num_grippers) # 1: open, 0: close + x_gripper_distance_mask = torch.logical_and(x_gripper_distance_mask, gripper_closed[:, :, None, None].repeat(1, 1, num_particles, 3)) + + gripper_quat_vel = actions[:, step, :, 10:13] # (bsz, num_grippers, 3) + gripper_angular_vel = torch.linalg.norm(gripper_quat_vel, dim=-1, keepdims=True) # (bsz, num_grippers, 1) + gripper_quat_axis = gripper_quat_vel / (gripper_angular_vel + 1e-10) # (bsz, num_grippers, 3) + + grid_from_gripper_axis = x_from_gripper - \ + (gripper_quat_axis[:, :, None] * x_from_gripper).sum(dim=-1, keepdims=True) * gripper_quat_axis[:, :, None] # (bsz, num_grippers, num_particles, 3) + gripper_v_expand = torch.cross(gripper_quat_vel[:, :, None], grid_from_gripper_axis, dim=-1) + gripper_v_expand + + for i in range(gripper_xyz.shape[1]): + x_gripper_distance_mask_single = x_gripper_distance_mask[:, i] + x[x_gripper_distance_mask_single] = x_in[x_gripper_distance_mask_single] + cfg.sim.dt * gripper_v_expand[:, i][x_gripper_distance_mask_single] + v[x_gripper_distance_mask_single] = gripper_v_expand[:, i][x_gripper_distance_mask_single] + + if cfg.sim.n_history > 0: + if cfg.sim.gripper_points: + x_his_particles = torch.cat([x_his[:, :num_particles_orig].reshape(batch_size, num_particles_orig, -1, 3)[:, :, 1:], x[:, :num_particles_orig, None].detach()], dim=2) + v_his_particles = torch.cat([v_his[:, :num_particles_orig].reshape(batch_size, num_particles_orig, -1, 3)[:, :, 1:], v[:, :num_particles_orig, None].detach()], dim=2) + x_his = x_his_particles.reshape(batch_size, num_particles_orig, -1) + v_his = v_his_particles.reshape(batch_size, num_particles_orig, -1) + else: + x_his = torch.cat([x_his.reshape(batch_size, num_particles, -1, 3)[:, :, 1:], x[:, :, None].detach()], dim=2) + v_his = torch.cat([v_his.reshape(batch_size, num_particles, -1, 3)[:, :, 1:], v[:, :, None].detach()], dim=2) + x_his = x_his.reshape(batch_size, num_particles, -1) + v_his = v_his.reshape(batch_size, num_particles, -1) + + if cfg.sim.gripper_points: + x = x[:, :num_particles_orig] + v = v[:, :num_particles_orig] + enabled = enabled[:, :num_particles_orig] + + if self.verbose: + print('x', x.min().item(), x.max().item()) + print('v', v.min().item(), v.max().item()) + + if self.loss_factor_x > 0: + loss_x = self.criterion(x[enabled_mask > 0], gt_x[:, step][enabled_mask > 0]) * self.loss_factor_x + losses['loss_x'] += loss_x + self.losses_log['loss_x'] += loss_x.item() + + if self.loss_factor_v > 0: + loss_v = self.criterion(v[enabled_mask > 0], gt_v[:, step][enabled_mask > 0]) * self.loss_factor_v + losses['loss_v'] += loss_v + self.losses_log['loss_v'] += loss_v.item() + + with torch.no_grad(): + if self.loss_factor_x > 0: + loss_x_trivial = self.criterion((x_in_gt + v_in_gt * cfg.sim.dt * cfg.sim.interval)[enabled_mask > 0], gt_x[:, step][enabled_mask > 0]) * self.loss_factor_x + self.losses_log['loss_x_trivial'] += loss_x_trivial.item() + + if self.loss_factor_v > 0: + loss_v_trivial = self.criterion(v_in_gt[enabled_mask > 0], gt_v[:, step][enabled_mask > 0]) * self.loss_factor_v + self.losses_log['loss_v_trivial'] += loss_v_trivial.item() + + loss_x_sanity = self.criterion(x_in[enabled_mask > 0], (x - v * cfg.sim.dt * cfg.sim.interval)[enabled_mask > 0]) * self.loss_factor_x + self.losses_log['loss_x_sanity'] += loss_x_sanity.item() # if > 0 then clipping issue + + if step > 0: + loss_x_gt_sanity = self.criterion((gt_x[:, step - 1] + gt_v[:, step] * cfg.sim.dt * cfg.sim.interval)[enabled_mask > 0], gt_x[:, step][enabled_mask > 0]) * self.loss_factor_x + self.losses_log['loss_x_gt_sanity'] += loss_x_gt_sanity.item() + else: + loss_x_gt_sanity = self.criterion((x_in + gt_v[:, step] * cfg.sim.dt * cfg.sim.interval)[enabled_mask > 0], gt_x[:, step][enabled_mask > 0]) * self.loss_factor_x + self.losses_log['loss_x_gt_sanity'] += loss_x_gt_sanity.item() + + if save and not cfg.debug: + self.logger.add_scalar('main/iteration', iteration, step=self.total_step_count) + for loss_k, loss_v in losses.items(): + self.logger.add_scalar(f'main/{loss_k}', loss_v.item(), step=self.total_step_count) + self.total_step_count += 1 + + loss = sum(losses.values()) + try: + loss.backward() + except Exception as e: + print(f'loss.backward() failed: {e.with_traceback()}') + continue + + if self.material_requires_grad: + material_grad_norm = clip_grad_norm_( + self.material.parameters(), + max_norm=cfg.train.material_grad_max_norm, + error_if_nonfinite=True) + self.material_optimizer.step() + + if (iteration + 1) % cfg.train.iteration_log_interval == 0: + msgs = [ + cfg.train.name, + time.strftime('%H:%M:%S'), + 'iteration {:{width}d}/{}'.format(iteration + 1, cfg.train.num_iterations, width=len(str(cfg.train.num_iterations))), + ] + + msgs.extend([ + 'pred.norm {:.4f}'.format(pred.norm().item()), + ]) + + if self.material_requires_grad: + material_lr = self.material_optimizer.param_groups[0]['lr'] + msgs.extend([ + 'e-lr {:.2e}'.format(material_lr), + 'e-|grad| {:.4f}'.format(material_grad_norm), + ]) + + for loss_k, loss_v in self.losses_log.items(): + msgs.append('{} {:.8f}'.format(loss_k, loss_v / cfg.train.iteration_log_interval)) + if save and not cfg.debug: + self.logger.add_scalar('stat/mean_{}'.format(loss_k), loss_v / cfg.train.iteration_log_interval, step=self.total_step_count) + + msg = ','.join(msgs) + print('[{}]'.format(msg)) + self.losses_log = defaultdict(int) + + if save and not cfg.debug: + self.logger.add_scalar('stat/pred_norm', pred.norm().item(), step=self.total_step_count) + + if self.material_requires_grad: + material_lr = self.material_optimizer.param_groups[0]['lr'] + if save and not cfg.debug: + self.logger.add_scalar('stat/material_lr', material_lr, step=self.total_step_count) + self.logger.add_scalar('stat/material_grad_norm', material_grad_norm, step=self.total_step_count) + + if save and (iteration + 1) % cfg.train.iteration_save_interval == 0: + torch.save({ + 'material': self.material.state_dict(), + }, self.ckpt_root / '{:06d}.pt'.format(iteration + 1)) + + if self.material_requires_grad: + self.material_lr_scheduler.step() + + + def eval_episode(self, iteration: int, episode: int, save: bool = True): + cfg = self.cfg + + log_root: Path = root / 'log' + eval_name = f'{cfg.train.name}/eval/{cfg.train.dataset_name.split("/")[-1]}/{iteration:06d}' + exp_root: Path = log_root / eval_name + if save: + state_root: Path = exp_root / 'state' + mkdir(state_root, overwrite=cfg.overwrite, resume=cfg.resume) + episode_state_root = state_root / f'episode_{episode:04d}' + mkdir(episode_state_root, overwrite=cfg.overwrite, resume=cfg.resume) + OmegaConf.save(cfg, exp_root / 'hydra.yaml', resolve=True) + + if cfg.train.dataset_name is None: + cfg.train.dataset_name = Path(cfg.train.name).parent / 'dataset' + assert cfg.train.source_dataset_name is not None + + source_dataset_root = self.log_root / str(cfg.train.source_dataset_name) + assert os.path.exists(source_dataset_root) + + eval_dataset = RealTeleopBatchDataset( + cfg, + dataset_root=self.log_root / cfg.train.dataset_name / 'state', + source_data_root=source_dataset_root, + device=self.torch_device, + num_steps=self.cfg.sim.num_steps, + eval_episode_name=f'episode_{episode:04d}', + ) + eval_dataloader = dataloader_wrapper( + DataLoader(eval_dataset, batch_size=1, shuffle=False, num_workers=cfg.train.num_workers, pin_memory=True), + 'dataset' + ) + if cfg.sim.gripper_points: + eval_gripper_dataset = RealGripperDataset( + cfg, + device=self.torch_device, + ) + eval_gripper_dataloader = dataloader_wrapper( + DataLoader(eval_gripper_dataset, batch_size=1, shuffle=False, num_workers=cfg.train.num_workers, pin_memory=True), + 'gripper_dataset' + ) + init_state, actions, gt_states, downsample_indices = next(eval_dataloader) + + x, v, x_his, v_his, clip_bound, enabled, episode_vec = init_state + x = x.to(self.torch_device) + v = v.to(self.torch_device) + x_his = x_his.to(self.torch_device) + v_his = v_his.to(self.torch_device) + + actions = actions.to(self.torch_device) + + if cfg.sim.gripper_points: + gripper_points, _ = next(eval_gripper_dataloader) + gripper_points = gripper_points.to(self.torch_device) + gripper_x, gripper_v, gripper_mask = transform_gripper_points(cfg, gripper_points, actions) # (bsz, num_steps, num_grippers, 3) + + gt_x, gt_v = gt_states + gt_x = gt_x.to(self.torch_device) + gt_v = gt_v.to(self.torch_device) + + # gt_states: (bsz, num_steps_total) + batch_size = gt_x.shape[0] + num_steps_total = gt_x.shape[1] + num_particles = gt_x.shape[2] + assert batch_size == 1 + + if cfg.sim.gripper_points: + num_gripper_particles = gripper_x.shape[2] + num_particles_orig = num_particles + num_particles = num_particles + num_gripper_particles + + sim = CacheDiffSimWithFrictionBatch(cfg, num_steps_total, batch_size, self.wp_device, requires_grad=True) + + statics = StaticsBatch() + statics.init(shape=(batch_size, num_particles), device=self.wp_device) + statics.update_clip_bound(clip_bound) + statics.update_enabled(enabled) + colliders = CollidersBatch() + + self.material.eval() + self.friction.eval() + + if cfg.sim.gripper_points: + assert not cfg.sim.gripper_forcing + num_grippers = 0 + else: + num_grippers = cfg.sim.num_grippers + + colliders.init(shape=(batch_size, num_grippers), device=self.wp_device) + if num_grippers > 0: + assert len(actions.shape) > 2 + colliders.initialize_grippers(actions[:, 0]) + + enabled = enabled.to(self.torch_device) + enabled_mask = enabled.unsqueeze(-1).repeat(1, 1, 3) # (bsz, num_particles, 3) + + colliders_save = colliders.export() + colliders_save = {key: torch.from_numpy(colliders_save[key])[0].to(x.device).to(x.dtype) for key in colliders_save} + ckpt = dict(x=x[0], v=v[0], **colliders_save) + + if save: + torch.save(ckpt, episode_state_root / f'{0:04d}.pt') + + losses = {} + with torch.no_grad(): + for step in trange(num_steps_total): + if num_grippers > 0: + colliders.update_grippers(actions[:, step]) + if cfg.sim.gripper_forcing: + x_in = x.clone() + else: + x_in = None + + if cfg.sim.gripper_points: + x = torch.cat([x, gripper_x[:, step]], dim=1) # gripper_points: (bsz, num_steps, num_particles, 3) + v = torch.cat([v, gripper_v[:, step]], dim=1) + x_his = torch.cat([x_his, torch.zeros((gripper_x.shape[0], gripper_x.shape[2], cfg.sim.n_history * 3), device=x_his.device, dtype=x_his.dtype)], dim=1) + v_his = torch.cat([v_his, torch.zeros((gripper_x.shape[0], gripper_x.shape[2], cfg.sim.n_history * 3), device=v_his.device, dtype=v_his.dtype)], dim=1) + if enabled.shape[1] < num_particles: + enabled = torch.cat([enabled, gripper_mask[:, step]], dim=1) + statics.update_enabled(enabled.cpu()) + + pred = self.material(x, v, x_his, v_his, enabled) + + if pred.isnan().any(): + print('pred isnan', pred.min().item(), pred.max().item()) + break + if pred.isinf().any(): + print('pred isinf', pred.min().item(), pred.max().item()) + break + + x, v = sim(statics, colliders, step, x, v, self.friction.mu[None].repeat(batch_size, 1), pred) + + if cfg.sim.gripper_forcing: + assert not cfg.sim.gripper_points + gripper_xyz = actions[:, step, :, :3] # (bsz, num_grippers, 3) + gripper_v = actions[:, step, :, 3:6] # (bsz, num_grippers, 3) + x_from_gripper = x_in[:, None] - gripper_xyz[:, :, None] # (bsz, num_grippers, num_particles, 3) + x_gripper_distance = torch.norm(x_from_gripper, dim=-1) # (bsz, num_grippers, num_particles) + x_gripper_distance_mask = x_gripper_distance < cfg.model.gripper_radius + x_gripper_distance_mask = x_gripper_distance_mask.unsqueeze(-1).repeat(1, 1, 1, 3) # (bsz, num_grippers, num_particles, 3) + gripper_v_expand = gripper_v[:, :, None].repeat(1, 1, num_particles, 1) # (bsz, num_grippers, num_particles, 3) + + gripper_closed = actions[:, step, :, -1] < 0.5 # (bsz, num_grippers) # 1: open, 0: close + x_gripper_distance_mask = torch.logical_and(x_gripper_distance_mask, gripper_closed[:, :, None, None].repeat(1, 1, num_particles, 3)) + + gripper_quat_vel = actions[:, step, :, 10:13] # (bsz, num_grippers, 3) + gripper_angular_vel = torch.linalg.norm(gripper_quat_vel, dim=-1, keepdims=True) # (bsz, num_grippers, 1) + gripper_quat_axis = gripper_quat_vel / (gripper_angular_vel + 1e-10) # (bsz, num_grippers, 3) + + grid_from_gripper_axis = x_from_gripper - \ + (gripper_quat_axis[:, :, None] * x_from_gripper).sum(dim=-1, keepdims=True) * gripper_quat_axis[:, :, None] # (bsz, num_grippers, num_particles, 3) + gripper_v_expand = torch.cross(gripper_quat_vel[:, :, None], grid_from_gripper_axis, dim=-1) + gripper_v_expand + + for i in range(gripper_xyz.shape[1]): + x_gripper_distance_mask_single = x_gripper_distance_mask[:, i] + x[x_gripper_distance_mask_single] = x_in[x_gripper_distance_mask_single] + cfg.sim.dt * gripper_v_expand[:, i][x_gripper_distance_mask_single] + v[x_gripper_distance_mask_single] = gripper_v_expand[:, i][x_gripper_distance_mask_single] + + if cfg.sim.n_history > 0: + if cfg.sim.gripper_points: + x_his_particles = torch.cat([x_his[:, :num_particles_orig].reshape(batch_size, num_particles_orig, -1, 3)[:, :, 1:], x[:, :num_particles_orig, None].detach()], dim=2) + v_his_particles = torch.cat([v_his[:, :num_particles_orig].reshape(batch_size, num_particles_orig, -1, 3)[:, :, 1:], v[:, :num_particles_orig, None].detach()], dim=2) + x_his = x_his_particles.reshape(batch_size, num_particles_orig, -1) + v_his = v_his_particles.reshape(batch_size, num_particles_orig, -1) + else: + x_his = torch.cat([x_his.reshape(batch_size, num_particles, -1, 3)[:, :, 1:], x[:, :, None].detach()], dim=2) + v_his = torch.cat([v_his.reshape(batch_size, num_particles, -1, 3)[:, :, 1:], v[:, :, None].detach()], dim=2) + x_his = x_his.reshape(batch_size, num_particles, -1) + v_his = v_his.reshape(batch_size, num_particles, -1) + + if cfg.sim.gripper_points: + extra_save = { + 'gripper_x': gripper_x[0, step], + 'gripper_v': gripper_v[0, step], + 'gripper_actions': actions[0, step], + } + x = x[:, :num_particles_orig] + v = v[:, :num_particles_orig] + enabled = enabled[:, :num_particles_orig] + else: + extra_save = {} + + colliders_save = colliders.export() + colliders_save = {key: torch.from_numpy(colliders_save[key])[0].to(x.device).to(x.dtype) for key in colliders_save} + + loss_x = nn.functional.mse_loss(x[enabled_mask > 0], gt_x[:, step][enabled_mask > 0]) + loss_v = nn.functional.mse_loss(v[enabled_mask > 0], gt_v[:, step][enabled_mask > 0]) + losses[step] = dict(loss_x=loss_x.item(), loss_v=loss_v.item()) + + ckpt = dict(x=x[0], v=v[0], **colliders_save, **extra_save) + + if save and step % cfg.sim.skip_frame == 0: + torch.save(ckpt, episode_state_root / f'{int(step / cfg.sim.skip_frame):04d}.pt') + + metrics = None + if save: + for loss_k in losses[0].keys(): + plt.figure(figsize=(10, 5)) + loss_list = [losses[step][loss_k] for step in losses] + plt.plot(loss_list) + plt.title(loss_k) + plt.grid() + plt.savefig(state_root / f'episode_{episode:04d}_{loss_k}.png', dpi=300) + + # particle visualization + if self.use_pv: + do_train_pv( + cfg, + log_root, + iteration, + [f'episode_{episode:04d}'], + eval_dirname=f'eval', + dataset_name=cfg.train.dataset_name.split("/")[-1], + eval_postfix='', + ) + + # gaussian splatting visualization + if self.use_gs: + from .gs import do_gs + do_gs( + cfg, + log_root, + iteration, + [f'episode_{episode:04d}'], + eval_dirname=f'eval', + dataset_name=cfg.train.dataset_name.split("/")[-1], + eval_postfix='', + camera_id=1, + with_mask=True, + with_bg=True, + ) + + # particle visualization of ground truth + if self.use_pv: + _ = do_dataset_pv( + cfg, + log_root / str(cfg.train.dataset_name), + [f'episode_{episode:04d}'], + save_dir=log_root / f'{cfg.train.name}/eval/{cfg.train.dataset_name.split("/")[-1]}/{iteration:06d}/pv', + downsample_indices=downsample_indices, + ) + + metrics = do_metric( + cfg, + log_root, + iteration, + [f'episode_{episode:04d}'], + downsample_indices, + eval_dirname=f'eval', + dataset_name=cfg.train.dataset_name.split("/")[-1], + eval_postfix='', + camera_id=1, + use_gs=self.use_gs, + ) + + return metrics + + + def eval(self, eval_iteration: int, save: bool = True): + cfg = self.cfg + + metrics_list = [] + start_episode = cfg.train.eval_start_episode + end_episode = cfg.train.eval_end_episode if save else cfg.train.eval_start_episode + 2 + for episode in range(start_episode, end_episode): + metrics = self.eval_episode(eval_iteration, episode, save=save) + metrics_list.append(metrics) + + if not save: + return + + metrics_list = np.array(metrics_list)[:, 0] # (n_episodes, n_frames, 10 or 3) + if self.use_gs: + metric_names = ['mse', 'chamfer', 'emd', 'jscore', 'fscore', 'jfscore', 'perception', 'psnr', 'ssim'] + else: + metric_names = ['mse', 'chamfer', 'emd'] + + median_metric = np.median(metrics_list, axis=0) + step_75_metric = np.percentile(metrics_list, 75, axis=0) + step_25_metric = np.percentile(metrics_list, 25, axis=0) + mean_metric = np.mean(metrics_list, axis=0) + std_metric = np.std(metrics_list, axis=0) + + for i, metric_name in enumerate(metric_names): + # plot error + x = np.arange(1, len(median_metric) + 1) + plt.figure(figsize=(8, 5)) + plt.plot(x, median_metric[:, i]) + plt.xlabel(f"prediction steps, dt={cfg.sim.dt}") + plt.ylabel(metric_name) + plt.grid() + + ax = plt.gca() + x = np.arange(1, len(median_metric) + 1) + ax.fill_between(x, step_25_metric[:, i], step_75_metric[:, i], alpha=0.2) + + save_dir = root / 'log' / cfg.train.name / 'eval' / cfg.train.dataset_name.split("/")[-1] / f'{eval_iteration:06d}' / 'metric' + plt.tight_layout() + plt.savefig(os.path.join(save_dir, f'{i:02d}-{metric_name}.png'), dpi=300) + plt.close() + + # send to wandb + if not cfg.debug: + for i, metric_name in enumerate(metric_names): + self.logger.add_scalar(f'metric/{metric_name}-mean', mean_metric[:, i].mean(), step=self.total_step_count) + self.logger.add_scalar(f'metric/{metric_name}-std', std_metric[:, i].mean(), step=self.total_step_count) + img = np.array(Image.open(os.path.join(save_dir, f'{i:02d}-{metric_name}.png')).convert('RGB')) + self.logger.add_image(f'metric_curve/{metric_name}', img, step=self.total_step_count) + + def test_cuda_mem(self): + self.init_train() + self.train(0, 10, save=False) + self.eval(10, save=False) + +@hydra.main(version_base='1.2', config_path=str(root / 'cfg'), config_name='default') +def main(cfg: DictConfig): + trainer = Trainer(cfg) + trainer.load_train_dataset() + trainer.test_cuda_mem() + trainer.init_train() + for iteration in range(cfg.train.resume_iteration, cfg.train.num_iterations, cfg.train.iteration_eval_interval): + start_iteration = iteration + end_iteration = min(iteration + cfg.train.iteration_eval_interval, cfg.train.num_iterations) + trainer.train(start_iteration, end_iteration) + trainer.eval(end_iteration) + + +if __name__ == '__main__': + main() diff --git a/src/pgnd/__init__.py b/src/pgnd/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3bcd6674d667ec1683bb72fd60cf56996e16cbf9 --- /dev/null +++ b/src/pgnd/__init__.py @@ -0,0 +1,9 @@ +import numpy +numpy.bool = bool # to avoid deprecation error + +from . import utils +from . import ffmpeg + +from . import data +from . import material +from . import sim diff --git a/src/pgnd/data/__init__.py b/src/pgnd/data/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..ec7075c7b7a5a775274270d522c1d374451e07d1 --- /dev/null +++ b/src/pgnd/data/__init__.py @@ -0,0 +1,2 @@ +from .dataset import * +from .dataset_gripper import * diff --git a/src/pgnd/data/dataset.py b/src/pgnd/data/dataset.py new file mode 100644 index 0000000000000000000000000000000000000000..15f3ea2b7dca6c1f77602fc31f3c0b6c958e5739 --- /dev/null +++ b/src/pgnd/data/dataset.py @@ -0,0 +1,369 @@ +from pathlib import Path +from typing import Union, Optional +from omegaconf import DictConfig + +import os +import torch +import time +import shutil +import json +import yaml +import random +import glob +import kornia +import numpy as np +import pickle as pkl +import open3d as o3d +from torch.utils.data import Dataset +from dgl.geometry import farthest_point_sampler +from sklearn.neighbors import NearestNeighbors + + + +def preprocess(cfg, dataset_root_episode, source_data_root_episode, dt_frame, dx): + print('Preprocessing episode:', dataset_root_episode.name) + assert dt_frame - 1. / 30. < 1e-3 + + # transform xyz: x -> x, z -> -y, y -> z + R = np.array( + [[1, 0, 0], + [0, 0, -1], + [0, 1, 0]] + ) + + eef_global_T = np.array([cfg.model.eef_t[0], cfg.model.eef_t[1], cfg.model.eef_t[2]]) # 1018_sloth: 0.185, 1018_rope_short: 0.01 + + xyz = np.load(source_data_root_episode / 'traj.npz')['xyz'] + eef_xyz = np.loadtxt(source_data_root_episode / 'eef_traj.txt') + n_frames = eef_xyz.shape[0] + eef_xyz = eef_xyz.reshape(eef_xyz.shape[0], -1, 3) # (n_frames, n_grippers, 3) + eef_xyz = eef_xyz + eef_global_T + + xyz = np.einsum('nij,jk->nik', xyz, R.T) + eef_xyz = np.einsum('nij,jk->nik', eef_xyz, R.T) # (n_frames, n_grippers, 3) + + if os.path.exists(source_data_root_episode / 'eef_rot.txt'): + eef_rot = np.loadtxt(source_data_root_episode / 'eef_rot.txt') # (n_frames, -1) + eef_rot = eef_rot.reshape(eef_rot.shape[0], -1, 3, 3) # (n_frames, n_grippers, 3, 3) + eef_rot = R @ eef_rot @ R.T + eef_rot = torch.from_numpy(eef_rot).reshape(-1, 3, 3) # (n_frames, n_grippers, 3, 3) + eef_quat = kornia.geometry.conversions.rotation_matrix_to_quaternion(eef_rot).numpy().reshape(n_frames, -1, 4) # (n_frames, n_grippers, 4) + else: + eef_quat = np.zeros((xyz.shape[0], cfg.sim.num_grippers, 4), dtype=np.float32) # (n_frames, n_grippers, 4) + eef_quat[:, :, 0] = 1.0 # (n_frames, n_grippers, 4) + + if os.path.exists(source_data_root_episode / 'eef_gripper.txt'): + eef_gripper = np.loadtxt(source_data_root_episode / 'eef_gripper.txt') # (n_frames, n_grippers) + eef_gripper = eef_gripper.reshape(eef_gripper.shape[0], -1) + assert cfg.sim.num_grippers == eef_gripper.shape[1] + else: + eef_gripper = np.zeros((n_frames, cfg.sim.num_grippers), dtype=np.float32) # (n_frames, n_grippers) + assert cfg.sim.num_grippers == eef_quat.shape[1] + + scale = cfg.sim.preprocess_scale + xyz = xyz * scale + eef_xyz = eef_xyz * scale + + n_frames = xyz.shape[0] + + # construct colliders: position, velocity, height, radius, axis + eef_vel = np.zeros_like(eef_xyz) # (n_frames, n_grippers, 3) + eef_vel[:-1] = (eef_xyz[1:] - eef_xyz[:-1]) / dt_frame + eef_vel[-1] = eef_vel[-2] + + # construct rotational velocity + eef_rot_this = kornia.geometry.conversions.quaternion_to_rotation_matrix(torch.from_numpy(eef_quat[:-1]).reshape(-1, 4)) # (n_frames-1 * n_grippers, 3, 3) + eef_rot_next = kornia.geometry.conversions.quaternion_to_rotation_matrix(torch.from_numpy(eef_quat[1:]).reshape(-1, 4)) # (n_frames-1 * n_grippers, 3, 3) + eef_rot_delta = eef_rot_this.bmm(eef_rot_next.inverse()) + eef_aa = kornia.geometry.conversions.rotation_matrix_to_axis_angle(eef_rot_delta) # (n_frames-1 * n_grippers, 3) + + eef_quat_vel = np.zeros((n_frames, cfg.sim.num_grippers, 3), dtype=eef_quat.dtype) + eef_quat_vel[:-1] = eef_aa.reshape(n_frames - 1, -1, 3) / dt_frame # (n_frames-1, n_grippers, 3), radian per second + eef_quat_vel[-1] = eef_quat_vel[-2] + + grippers = np.zeros((n_frames, cfg.sim.num_grippers, 15)) + grippers[:, :, :3] = eef_xyz + grippers[:, :, 3:6] = eef_vel + grippers[:, :, 6:10] = eef_quat + grippers[:, :, 10:13] = eef_quat_vel + grippers[:, :, 13] = cfg.model.gripper_radius + grippers[:, :, 14] = eef_gripper + + if cfg.sim.preprocess_with_table: # drop everything to the table plane (y=0) + global_translation = np.array([ + 0.5 - (xyz[:, :, 0].max() + xyz[:, :, 0].min()) / 2, + dx * (cfg.model.clip_bound + 0.5) + 1e-5 - xyz[:, :, 1].min(), + 0.5 - (xyz[:, :, 2].max() + xyz[:, :, 2].min()) / 2, + ], dtype=xyz.dtype) + else: + global_translation = np.array([ + 0.5 - (xyz[:, :, 0].max() + xyz[:, :, 0].min()) / 2, + 0.5 - (xyz[:, :, 1].max() + xyz[:, :, 1].min()) / 2, + 0.5 - (xyz[:, :, 2].max() + xyz[:, :, 2].min()) / 2, + ], dtype=xyz.dtype) + xyz += global_translation + grippers[:, :, :3] += global_translation + + if not (xyz[:, :, 0].min() >= dx * (cfg.model.clip_bound + 0.5) - 1e-6 \ + and xyz[:, :, 0].max() <= 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6 \ + and xyz[:, :, 1].min() >= dx * (cfg.model.clip_bound + 0.5) - 1e-6 \ + and xyz[:, :, 1].max() <= 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6 \ + and xyz[:, :, 2].min() >= dx * (cfg.model.clip_bound + 0.5) - 1e-6 \ + and xyz[:, :, 2].max() <= 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6): + print(dataset_root_episode.name, 'out of bound') + xyz_max = xyz.max(axis=0) + xyz_max_mask = (xyz_max[:, 0] > 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6) | \ + (xyz_max[:, 1] > 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6) | \ + (xyz_max[:, 2] > 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6) + xyz_min = xyz.min(axis=0) + xyz_min_mask = (xyz_min[:, 0] < dx * (cfg.model.clip_bound + 0.5) - 1e-6) | \ + (xyz_min[:, 1] < dx * (cfg.model.clip_bound + 0.5) - 1e-6) | \ + (xyz_min[:, 2] < dx * (cfg.model.clip_bound + 0.5) - 1e-6) + xyz_mask = xyz_max_mask | xyz_min_mask + xyz = xyz[:, ~xyz_mask] + + assert (xyz[:, :, 0].min() >= dx * (cfg.model.clip_bound + 0.5) - 1e-6 \ + and xyz[:, :, 0].max() <= 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6 \ + and xyz[:, :, 1].min() >= dx * (cfg.model.clip_bound + 0.5) - 1e-6 \ + and xyz[:, :, 1].max() <= 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6 \ + and xyz[:, :, 2].min() >= dx * (cfg.model.clip_bound + 0.5) - 1e-6 \ + and xyz[:, :, 2].max() <= 1 - dx * (cfg.model.clip_bound + 0.5) + 1e-6) + + data = { + 'num_particles': xyz.shape[1], + 'clip_bound': cfg.model.clip_bound, + } + with open(dataset_root_episode / 'info.yaml', 'w') as f: + yaml.dump(data, f) + + # save data + for frame_id in range(n_frames): + data = { + 'x': torch.tensor(xyz[frame_id]).float(), + 'grippers': torch.tensor(grippers[frame_id]).float() + } + torch.save(data, dataset_root_episode / f'{frame_id:04d}.pt') + return True # necessary for success check + + +def fps(x, enabled, n, device, random_start=False): + assert torch.diff(enabled * 1.0).sum() in [0.0, -1.0] + start_idx = random.randint(0, enabled.sum() - 1) if random_start else 0 + fps_idx = farthest_point_sampler(x[enabled][None], n, start_idx=start_idx)[0] + fps_idx = fps_idx.to(x.device) + return fps_idx + + +class RealTeleopBatchDataset(Dataset): + + def __init__(self, + cfg: DictConfig, + dataset_root: Union[str, Path], + source_data_root: Union[str, Path], + device: torch.device, + num_steps: int, + train=False, + eval_episode_name=None, + dataset_non_overwrite=None + ) -> None: + super().__init__() + self.device = device + dataset_root = Path(dataset_root).resolve() + dataset_root.mkdir(parents=True, exist_ok=True) + self.root = dataset_root + self.is_train = train + + self.interval = cfg.sim.interval + self.dt = eval(cfg.sim.dt) if isinstance(cfg.sim.dt, str) else cfg.sim.dt + self.num_steps = num_steps + self.skip_frame = cfg.train.dataset_skip_frame + self.n_particles = cfg.sim.n_particles + self.n_history = cfg.sim.n_history + self.uniform = cfg.sim.uniform or not train # always use uniform sampling during test + print('Using uniform sampling:', self.uniform) + self.load_skip_frame = cfg.train.dataset_load_skip_frame + self.dx = cfg.sim.num_grids[-1] + + self.return_downsample_indices = (eval_episode_name is not None) + + with torch.no_grad(): + source_data_root = Path(source_data_root).resolve() + episodes = list(sorted(Path(str(source_data_root)).glob('episode_*'))) + if len(episodes) == 0: + import ipdb; ipdb.set_trace() + if eval_episode_name is not None: + assert not train + episodes = [e for e in episodes if e.name == eval_episode_name] + if train: + episodes = episodes[cfg.train.training_start_episode:cfg.train.training_end_episode] + + episodes_clean = [] + episodes_xs = [] + episodes_vs = [] + episodes_enabled = [] + episodes_grippers = [] + episodes_clip_bound = [] + len_sim_list = [] + traj_list = [] + meta_list = [] + use_grippers = False + max_num_particles = 0 + max_num_frames = 0 + overwrite = None if eval_episode_name is None else True + + for episode_id in range(len(episodes)): + source_data_root_episode = episodes[episode_id] + episode_name = source_data_root_episode.name + dataset_root_episode = dataset_root / episode_name + if os.path.exists(dataset_root_episode): + traj = list(sorted(dataset_root_episode.glob('*.pt')))[::self.load_skip_frame] + if len(traj) > 0: + if dataset_non_overwrite: + overwrite = False + while overwrite is None: + feedback = input(f'{dataset_root_episode} already exists, overwrite? [y/n] ') + ret = feedback.casefold() + if ret == 'y': + overwrite = True + break + elif ret == 'n': + overwrite = False + break + if overwrite == True: + shutil.rmtree(dataset_root_episode, ignore_errors=True) + else: + assert overwrite == False + episodes_clean.append(episode_id) + elif overwrite is None: overwrite = True + elif overwrite == False: continue + elif overwrite is None: overwrite = True + elif overwrite == False: continue + if overwrite: + dataset_root_episode.mkdir(parents=True, exist_ok=True) + success = preprocess(cfg, dataset_root_episode, source_data_root_episode, + self.dt * self.interval / self.skip_frame / self.load_skip_frame, self.dx) + if not success: + shutil.rmtree(dataset_root_episode, ignore_errors=True) + continue + else: + episodes_clean.append(episode_id) + traj = list(sorted(dataset_root_episode.glob('*.pt')))[::self.load_skip_frame] + + states = [torch.load(p, map_location='cpu') for p in traj] + + xs = torch.stack([state['x'] for state in states], dim=0) + vs = torch.zeros_like(xs) + vs[1:] = (xs[1:] - xs[:-1]) / (self.dt * self.interval / self.skip_frame) # / self.load_skip_frame) + vs[0] = vs[1] + traj_list.append(traj) + + num_particles = xs.size(1) + max_num_particles = max(max_num_particles, num_particles) + max_num_frames = max(len(traj), max_num_frames) + + len_sim = max(1, len(traj) - (self.num_steps + self.n_history) * self.skip_frame) + len_sim_list.append(len_sim) + + episodes_xs.append(xs) + episodes_vs.append(vs) + + grippers = torch.stack([state['grippers'] for state in states], dim=0) + episodes_grippers.append(grippers) + + # load yaml + yaml_path = dataset_root_episode / 'info.yaml' + with open(yaml_path, 'r') as f: + info = yaml.safe_load(f) + clip_bound = info['clip_bound'] + episodes_clip_bound.append(clip_bound) + + for episode_id in range(len(episodes_clean)): + xs = episodes_xs[episode_id] + vs = episodes_vs[episode_id] + enabled = torch.ones(xs.size(1), dtype=torch.bool) + num_particles_pad = max_num_particles - xs.size(1) + num_frames_pad = max_num_frames - xs.size(0) + xs = torch.nn.functional.pad(xs, (0, 0, 0, num_particles_pad, 0, num_frames_pad), value=0) + vs = torch.nn.functional.pad(vs, (0, 0, 0, num_particles_pad, 0, num_frames_pad), value=0) + enabled = torch.nn.functional.pad(enabled, (0, num_particles_pad), value=0) + episodes_xs[episode_id] = xs + episodes_vs[episode_id] = vs + episodes_enabled.append(enabled) + + grippers = episodes_grippers[episode_id] + grippers = torch.nn.functional.pad(grippers, (0, 0, 0, 0, 0, num_frames_pad), value=0) + episodes_grippers[episode_id] = grippers + + self.episode_xs = torch.stack(episodes_xs, dim=0) # (n_episodes, n_frames, n_particles, 3) + self.episode_vs = torch.stack(episodes_vs, dim=0) + self.episode_enabled = torch.stack(episodes_enabled, dim=0) # (n_episodes, n_particles) + self.episode_grippers = torch.stack(episodes_grippers, dim=0) + self.episode_clip_bound = torch.tensor(episodes_clip_bound, dtype=torch.float32) + self.len_sim_list = np.array(len_sim_list) + self.total_len_sim = sum(len_sim_list) + self.max_num_particles = max_num_particles + self.traj_list = traj_list + self.meta_list = meta_list + + print('Finished loading dataset') + print('Total number of episodes:', len(episodes_clean)) + print('Total number of frames:', self.total_len_sim) + assert len(self.episode_xs) == len(episodes_clean) + + def __len__(self) -> int: + return self.total_len_sim + + + def __getitem__(self, index): + cum_len_sim = np.cumsum(self.len_sim_list) + episode = np.where(cum_len_sim - index > 0)[0][0] + frame = index - cum_len_sim[episode - 1] if episode > 0 else index + + # history frames + frame = frame + self.n_history * self.skip_frame + + x = self.episode_xs[episode][frame] + v = self.episode_vs[episode][frame] # velocity from step to step+1 + enabled = self.episode_enabled[episode] + + # downsample + if self.uniform: + downsample_indices = fps(x, enabled, self.n_particles, self.device, random_start=True) + else: + downsample_indices = torch.randperm(enabled.sum())[:self.n_particles] + x = x[downsample_indices] + v = v[downsample_indices] + + x_his = torch.zeros((self.n_particles, 0), dtype=x.dtype, device=x.device) + v_his = torch.zeros((self.n_particles, 0), dtype=v.dtype, device=v.device) + for his_id in range(1, self.n_history + 1): + his_frame = frame - his_id * self.skip_frame + assert his_frame >= 0 + x_his_frame = self.episode_xs[episode][his_frame] + v_his_frame = self.episode_vs[episode][his_frame] + x_his_frame = x_his_frame[downsample_indices] + v_his_frame = v_his_frame[downsample_indices] + x_his = torch.cat([x_his, x_his_frame], dim=-1) + v_his = torch.cat([v_his, v_his_frame], dim=-1) + + enabled = torch.ones(x.size(0), dtype=torch.bool) + clip_bound = self.episode_clip_bound[episode] + episode_vec = torch.tensor([episode, frame]) + init_state = (x, v, x_his, v_his, clip_bound, enabled, episode_vec) + + end_frame = frame + self.num_steps * self.skip_frame + 1 + + actions = self.episode_grippers[episode][frame+self.skip_frame:end_frame:self.skip_frame] + + gt_xs = self.episode_xs[episode][frame+self.skip_frame:end_frame:self.skip_frame] + gt_vs = self.episode_vs[episode][frame+self.skip_frame:end_frame:self.skip_frame] + + gt_xs = gt_xs[:, downsample_indices] + gt_vs = gt_vs[:, downsample_indices] + + gt_states = (gt_xs, gt_vs) + + if self.return_downsample_indices: + return init_state, actions, gt_states, downsample_indices + else: + return init_state, actions, gt_states diff --git a/src/pgnd/data/dataset_gripper.py b/src/pgnd/data/dataset_gripper.py new file mode 100644 index 0000000000000000000000000000000000000000..5eae193777ce3ca40ac13e369a3e83fded5202a0 --- /dev/null +++ b/src/pgnd/data/dataset_gripper.py @@ -0,0 +1,99 @@ +from pathlib import Path +from typing import Union, Optional +from omegaconf import DictConfig + +import os +import torch +import time +import shutil +import json +import yaml +import random +import glob +import kornia +import numpy as np +import pickle as pkl +import open3d as o3d +from torch.utils.data import Dataset +from dgl.geometry import farthest_point_sampler +from sklearn.neighbors import NearestNeighbors + + +def fps(x, n, device, random_start=False): + start_idx = random.randint(0, x.shape[0] - 1) if random_start else 0 + fps_idx = farthest_point_sampler(x[None], n, start_idx=start_idx)[0] + fps_idx = fps_idx.to(x.device) + return fps_idx + + +def read_splat(splat_file): + with open(splat_file, "rb") as f: + data = f.read() + pts = [] + colors = [] + scales = [] + quats = [] + opacities = [] + for i in range(0, len(data), 32): + v = np.frombuffer(data[i : i + 12], dtype=np.float32) + s = np.frombuffer(data[i + 12 : i + 24], dtype=np.float32) + c = np.frombuffer(data[i + 24 : i + 28], dtype=np.uint8) / 255 + q = np.frombuffer(data[i + 28 : i + 32], dtype=np.uint8) + q = (q * 1.0 - 128) / 128 + pts.append(v) + scales.append(s) + colors.append(c[:3]) + quats.append(q) + opacities.append(c[3:]) + return np.array(pts), np.array(colors), np.array(scales), np.array(quats), np.array(opacities) + + +class RealGripperDataset(Dataset): + + def __init__(self, cfg: DictConfig, device: torch.device, train=False) -> None: + super().__init__() + + pts, colors, scales, quats, opacities = read_splat('experiments/log/gs/ckpts/gripper_new.splat') + self.device = device + self.uniform = cfg.sim.uniform or not train + self.n_particles = 500 + + R = np.array( + [[1, 0, 0], + [0, 0, -1], + [0, 1, 0]] + ) + eef_global_T = np.array([cfg.model.eef_t[0], cfg.model.eef_t[1], cfg.model.eef_t[2]]) # 1018_sloth: 0.185, 1018_rope_short: 0.013) + pts = pts + eef_global_T + pts = pts @ R.T + scale = cfg.sim.preprocess_scale + pts = pts * scale + + axis = np.array([0, 1, 0]) + angle = -27 # degree + R = o3d.geometry.get_rotation_matrix_from_axis_angle(axis * np.pi / 180 * angle) + translation = np.array([-0.015, 0.06, 0]) + + pts = pts @ R.T + pts = pts + translation + + R = np.array( + [[0, 0, 1], + [0, 1, 0], + [-1, 0, 0]] + ) + pts = pts @ R.T + + self.gripper_pts = torch.from_numpy(pts).to(torch.float32) + + def __len__(self) -> int: + return 10000000 + + def __getitem__(self, index): + x = self.gripper_pts + if self.uniform: + downsample_indices = fps(x, self.n_particles, self.device, random_start=True) + else: + downsample_indices = torch.randperm(x.shape[0])[:self.n_particles] + x = x[downsample_indices] + return x, downsample_indices diff --git a/src/pgnd/ffmpeg.py b/src/pgnd/ffmpeg.py new file mode 100644 index 0000000000000000000000000000000000000000..731e3dd60a09ae3aaf298629771998367f4dcb48 --- /dev/null +++ b/src/pgnd/ffmpeg.py @@ -0,0 +1,47 @@ +from pathlib import Path +import subprocess + + +def make_video( + image_root: Path, + video_path: Path, + image_pattern: str = '%04d.png', + frame_rate: int = 10): + + subprocess.run([ + 'ffmpeg', + '-y', + '-hide_banner', + '-loglevel', 'error', + '-framerate', str(frame_rate), + '-i', str(image_root / image_pattern), + '-c:v', 'libx264', + '-pix_fmt', 'yuv420p', + str(video_path) + ]) + + +def cat_videos(input_videos: list[Path], output_video: Path): + + output_video.parent.mkdir(parents=True, exist_ok=True) + + num_videos = len(input_videos) + + if num_videos <= 1: + raise ValueError('concatenating <=1 videos') + + video_args = [] + for input_video in input_videos: + video_args.extend(['-i', str(input_video)]) + + subprocess.run([ + 'ffmpeg', + '-y', + '-hide_banner', + '-loglevel', 'error', + ] + video_args + [ + '-filter_complex', + '{}hstack=inputs={}[v]'.format(''.join([f'[{i}:v]' for i in range(num_videos)]), num_videos), + '-map', '[v]', + str(output_video) + ]) diff --git a/src/pgnd/material/__init__.py b/src/pgnd/material/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..177e88e5dfe0d7607a493206fd3b7d07882b834c --- /dev/null +++ b/src/pgnd/material/__init__.py @@ -0,0 +1 @@ +from .pgnd import * diff --git a/src/pgnd/material/network/__init__.py b/src/pgnd/material/network/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/pgnd/material/network/nerf.py b/src/pgnd/material/network/nerf.py new file mode 100644 index 0000000000000000000000000000000000000000..09e6a824857576af55cd7d7935a7c2f8f58d9cdd --- /dev/null +++ b/src/pgnd/material/network/nerf.py @@ -0,0 +1,54 @@ +import torch +import torch.nn as nn + + +class CondNeRFModel(torch.nn.Module): + def __init__( + self, + xyz_dim=3, + condition_dim=64, + out_channel=3, + num_layers=8, + hidden_size=256, + skip_connect_every=4, + ): + super(CondNeRFModel, self).__init__() + + self.dim_xyz = xyz_dim + self.dim_cond = condition_dim + self.skip_connect_every = skip_connect_every + + self.layer1 = torch.nn.Linear(self.dim_xyz + self.dim_cond, hidden_size) + + self.layers = torch.nn.ModuleList() + for i in range(num_layers - 1): + if self.skip_connect_every is not None and i % self.skip_connect_every == 0 and i > 0 and i != num_layers - 1: + self.layers.append(torch.nn.Linear(self.dim_xyz + self.dim_cond + hidden_size, hidden_size)) + else: + self.layers.append(torch.nn.Linear(hidden_size, hidden_size)) + + self.layers_out = torch.nn.ModuleList([ + torch.nn.Linear(hidden_size, hidden_size // 2), + torch.nn.Linear(hidden_size // 2, out_channel), + ]) + self.relu = nn.ReLU() + + def forward(self, xyz, cond): + assert xyz.shape[1] == self.dim_xyz + xyz = xyz[..., :self.dim_xyz] + xyz = torch.cat([xyz, cond], 1) + x = self.layer1(xyz) + for i in range(len(self.layers)): + if ( + self.skip_connect_every is not None + and i % self.skip_connect_every == 0 + and i > 0 + and i != len(self.layers) - 1 + ): + x = torch.cat((x, xyz), dim=-1) + x = self.relu(self.layers[i](x)) + for i in range(len(self.layers_out) - 1): + x = self.relu(self.layers_out[i](x)) + x = self.layers_out[-1](x) + return x + diff --git a/src/pgnd/material/network/pointnet.py b/src/pgnd/material/network/pointnet.py new file mode 100644 index 0000000000000000000000000000000000000000..833501d330f02750410616ff6f03a46bfd53f5cc --- /dev/null +++ b/src/pgnd/material/network/pointnet.py @@ -0,0 +1,150 @@ +import torch +import torch.nn as nn +import torch.nn.parallel +import torch.utils.data +from torch.autograd import Variable +import numpy as np +import torch.nn.functional as F + + +class STN3d(nn.Module): + def __init__(self, channel): + super(STN3d, self).__init__() + self.conv1 = torch.nn.Conv1d(channel, 64, 1) + self.conv2 = torch.nn.Conv1d(64, 128, 1) + self.conv3 = torch.nn.Conv1d(128, 1024, 1) + self.fc1 = nn.Linear(1024, 512) + self.fc2 = nn.Linear(512, 256) + self.fc3 = nn.Linear(256, 9) + self.relu = nn.ReLU() + + self.bn1 = nn.BatchNorm1d(64) + self.bn2 = nn.BatchNorm1d(128) + self.bn3 = nn.BatchNorm1d(1024) + self.bn4 = nn.BatchNorm1d(512) + self.bn5 = nn.BatchNorm1d(256) + + def forward(self, x, x_mask): + batchsize = x.size()[0] + x_mask = x_mask.unsqueeze(1) # B, N -> B, 1, N + x = F.relu(self.bn1(self.conv1(x))) + x = F.relu(self.bn2(self.conv2(x))) + x = F.relu(self.bn3(self.conv3(x))) + x = x * x_mask - (~x_mask) * 1e10 + x = torch.max(x, 2, keepdim=True)[0] + assert x.min() > -1e10 + x = x.view(-1, 1024) + + x = F.relu(self.bn4(self.fc1(x))) + x = F.relu(self.bn5(self.fc2(x))) + x = self.fc3(x) + + iden = Variable(torch.from_numpy(np.array([1, 0, 0, 0, 1, 0, 0, 0, 1]).astype(np.float32))).view(1, 9).repeat( + batchsize, 1) + if x.is_cuda: + iden = iden.cuda() + x = x + iden + x = x.view(-1, 3, 3) + return x + + +class STNkd(nn.Module): + def __init__(self, k=64): + super(STNkd, self).__init__() + self.conv1 = torch.nn.Conv1d(k, 64, 1) + self.conv2 = torch.nn.Conv1d(64, 128, 1) + self.conv3 = torch.nn.Conv1d(128, 1024, 1) + self.fc1 = nn.Linear(1024, 512) + self.fc2 = nn.Linear(512, 256) + self.fc3 = nn.Linear(256, k * k) + self.relu = nn.ReLU() + + self.bn1 = nn.BatchNorm1d(64) + self.bn2 = nn.BatchNorm1d(128) + self.bn3 = nn.BatchNorm1d(1024) + self.bn4 = nn.BatchNorm1d(512) + self.bn5 = nn.BatchNorm1d(256) + + self.k = k + + def forward(self, x, x_mask): + batchsize = x.size()[0] + x_mask = x_mask.unsqueeze(1) + x = F.relu(self.bn1(self.conv1(x))) + x = F.relu(self.bn2(self.conv2(x))) + x = F.relu(self.bn3(self.conv3(x))) + x = x * x_mask - (~x_mask) * 1e10 + x = torch.max(x, 2, keepdim=True)[0] + assert x.min() > -1e10 + x = x.view(-1, 1024) + + x = F.relu(self.bn4(self.fc1(x))) + x = F.relu(self.bn5(self.fc2(x))) + x = self.fc3(x) + + iden = Variable(torch.from_numpy(np.eye(self.k).flatten().astype(np.float32))).view(1, self.k * self.k).repeat( + batchsize, 1) + if x.is_cuda: + iden = iden.cuda() + x = x + iden + x = x.view(-1, self.k, self.k) + return x + + +class PointNetEncoder(nn.Module): + def __init__(self, global_feat=True, feature_transform=False, feature_dim=1024, channel=3): + super(PointNetEncoder, self).__init__() + self.stn = STN3d(channel) + self.conv1 = torch.nn.Conv1d(channel, 64, 1) + self.conv2 = torch.nn.Conv1d(64, 128, 1) + self.conv3 = torch.nn.Conv1d(128, feature_dim, 1) + self.bn1 = nn.BatchNorm1d(64) + self.bn2 = nn.BatchNorm1d(128) + self.bn3 = nn.BatchNorm1d(feature_dim) + self.feature_dim = feature_dim + self.global_feat = global_feat + self.feature_transform = feature_transform + if self.feature_transform: + self.fstn = STNkd(k=64) + + def forward(self, x, x_mask=None): + B, D, N = x.size() + if x_mask is None: + x_mask = torch.ones(B, N, dtype=torch.bool, device=x.device) + if x_mask.dtype != torch.bool: + x_mask = x_mask > 0 + trans = self.stn(x, x_mask) + x = x.transpose(2, 1) + if D > 3: + feature = x[:, :, 3:] + x = x[:, :, :3] + x = torch.bmm(x, trans) + if D > 3: + x = torch.cat([x, feature], dim=2) + x = x.transpose(2, 1) + x = F.relu(self.bn1(self.conv1(x))) + + if self.feature_transform: + trans_feat = self.fstn(x, x_mask) + x = x.transpose(2, 1) + x = torch.bmm(x, trans_feat) + x = x.transpose(2, 1) + else: + trans_feat = None + + pointfeat = x + x = F.relu(self.bn2(self.conv2(x))) + x = self.bn3(self.conv3(x)) + + if not self.global_feat: + x = x.view(-1, self.feature_dim, N) + return x, trans, trans_feat + + x = torch.max(x, 2, keepdim=True)[0] + x = x.view(-1, self.feature_dim) + if self.global_feat: + return x, trans, trans_feat + else: + x = x.view(-1, self.feature_dim, 1).repeat(1, 1, N) + return torch.cat([x, pointfeat], 1), trans, trans_feat + diff --git a/src/pgnd/material/network/utils.py b/src/pgnd/material/network/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..72e438e81d35e18aeb48753d7a9660517b8524c8 --- /dev/null +++ b/src/pgnd/material/network/utils.py @@ -0,0 +1,41 @@ +import torch + + +def get_grid_locations(x, num_grids_list, dx): + bsz = x.shape[0] + x_grid = torch.stack(torch.meshgrid( + torch.linspace(0, (num_grids_list[0] - 1) * dx, num_grids_list[0], device=x.device), + torch.linspace(0, (num_grids_list[1] - 1) * dx, num_grids_list[1], device=x.device), + torch.linspace(0, (num_grids_list[2] - 1) * dx, num_grids_list[2], device=x.device), + ), dim=-1).reshape(-1, 3) + grid_idxs = torch.stack(torch.meshgrid( + torch.linspace(0, (num_grids_list[0] - 1), num_grids_list[0], device=x.device), + torch.linspace(0, (num_grids_list[1] - 1), num_grids_list[1], device=x.device), + torch.linspace(0, (num_grids_list[2] - 1), num_grids_list[2], device=x.device), + ), dim=-1).reshape(-1, 3) + + grid_hits = torch.zeros(bsz, num_grids_list[0], num_grids_list[1], num_grids_list[2], device=x.device) + for i in range(3): + for j in range(3): + for k in range(3): + grid_hits[:, \ + ((x[:, :, 0] / dx - 0.5).int() + i).clamp(0, num_grids_list[0] - 1), \ + ((x[:, :, 1] / dx - 0.5).int() + j).clamp(0, num_grids_list[1] - 1), \ + ((x[:, :, 2] / dx - 0.5).int() + k).clamp(0, num_grids_list[2] - 1)] = 1 + grid_hits = grid_hits.sum(0) > 0 + + x_grid = x_grid[grid_hits.reshape(-1)].reshape(1, -1, 3).repeat(bsz, 1, 1) + grid_idxs = grid_idxs[grid_hits.reshape(-1)] + return x_grid, grid_idxs + + +def fill_grid_locations(feat, grid_idxs, num_grids_list): + # feat: (bsz, num_active_grids, feature_dim) + # grid_idxs: (num_active_grids, 3) + bsz = feat.shape[0] + feat_filled = torch.zeros(bsz, num_grids_list[0], num_grids_list[1], num_grids_list[2], 3, device=feat.device) + grid_idxs_1d = grid_idxs[:, 0] * num_grids_list[1] * num_grids_list[2] + grid_idxs[:, 1] * num_grids_list[2] + grid_idxs[:, 2] + feat_filled = feat_filled.reshape(bsz, -1, 3) + feat_filled[:, grid_idxs_1d.long()] = feat.clone() + feat_filled = feat_filled.reshape(bsz, num_grids_list[0], num_grids_list[1], num_grids_list[2], 3) + return feat_filled diff --git a/src/pgnd/material/pgnd.py b/src/pgnd/material/pgnd.py new file mode 100644 index 0000000000000000000000000000000000000000..601be36e45e8b9fd1fb1b17c6e16cd9212661f76 --- /dev/null +++ b/src/pgnd/material/pgnd.py @@ -0,0 +1,145 @@ +from typing import Optional + +from omegaconf import DictConfig +import numpy as np +import torch +import torch.nn as nn +from torch import Tensor + +from .network.pointnet import PointNetEncoder +from .network.nerf import CondNeRFModel +from .network.utils import get_grid_locations, fill_grid_locations + + +class PGNDModel(nn.Module): + + def __init__(self, cfg: DictConfig) -> None: + super().__init__() + + self.feature_dim = 64 + self.radius = cfg.model.material.radius + self.n_history = cfg.sim.n_history + self.num_grids_list = cfg.sim.num_grids[:3] + self.dx = cfg.sim.num_grids[3] + self.inv_dx = 1 / self.dx + self.requires_grad = cfg.model.material.requires_grad + self.pe_num_func = int(np.log2(self.inv_dx)) + cfg.model.material.pe_num_func_res + self.pe_dim = 3 + self.pe_num_func * 6 + self.output_scale = cfg.model.material.output_scale + self.input_scale = cfg.model.material.input_scale + self.absolute_y = cfg.model.material.absolute_y + + self.encoder = PointNetEncoder( + global_feat=(cfg.model.material.radius <= 0), + feature_transform=False, + feature_dim=self.feature_dim, + channel=6 * (1 + self.n_history), + ) + self.decoder = CondNeRFModel( + xyz_dim=self.pe_dim, + condition_dim=self.feature_dim, + out_channel=3, + num_layers=2, + hidden_size=64, + skip_connect_every=4, + ) + + def positional_encoding(self, tensor): + num_encoding_functions = self.pe_num_func + if num_encoding_functions == 0: + assert include_input + return tensor + + encoding = [tensor] # include the input itself + frequency_bands = 2.0 ** torch.linspace( + 0.0, + num_encoding_functions - 1, + num_encoding_functions, + dtype=tensor.dtype, + device=tensor.device, + ) + + for freq in frequency_bands: + for func in [torch.sin, torch.cos]: + encoding.append(func(tensor * freq)) + + # Special case, for no positional encoding + if len(encoding) == 1: + return encoding[0] + else: + return torch.cat(encoding, dim=-1) + + def forward(self, x: Tensor, v: Tensor, x_his: Tensor, v_his: Tensor, enabled: Tensor) -> Tensor: + # x: (bsz, num_particles, 3) + # v: (bsz, num_particles, 3) + bsz = x.shape[0] + num_particles = x.shape[1] + v = v * self.input_scale + v_his = v_his * self.input_scale + + x_his = x_his.reshape(bsz, num_particles, self.n_history, 3) + v_his = v_his.reshape(bsz, num_particles, self.n_history, 3) + x_his = x_his.detach() + v_his = v_his.detach() + + x_grid, grid_idxs = get_grid_locations(x, self.num_grids_list, self.dx) + x_grid = x_grid.detach() + grid_idxs = grid_idxs.detach() + + # centering + x_center = x.mean(1, keepdim=True) + if self.absolute_y: + x_center[:, :, 1] = 0 # only centering x and z + x = x - x_center + x_his = x_his - x_center[:, :, None] + if self.training: + # random azimuth + theta = torch.rand(bsz, 1, device=x.device) * 2 * np.pi + rot = torch.stack([ + torch.cos(theta), torch.zeros_like(theta), torch.sin(theta), + torch.zeros_like(theta), torch.ones_like(theta), torch.zeros_like(theta), + -torch.sin(theta), torch.zeros_like(theta), torch.cos(theta), + ], dim=-1).reshape(bsz, 3, 3) + inv_rot = rot.transpose(1, 2) + else: + rot = torch.eye(3, dtype=x.dtype, device=x.device).unsqueeze(0).repeat(bsz, 1, 1) + inv_rot = rot.transpose(1, 2) + x = torch.einsum('bij,bjk->bik', x, rot) + x_his = torch.einsum('bcij,bjk->bcik', x_his, rot) # (bsz, num_particles, n_history, 3) + v = torch.einsum('bij,bjk->bik', v, rot) + v_his = torch.einsum('bcij,bjk->bcik', v_his, rot) # (bsz, num_particles, n_history, 3) + + x_grid = x_grid - x_center + x_grid = x_grid @ rot + x_his = x_his.reshape(bsz, num_particles, self.n_history * 3) + v_his = v_his.reshape(bsz, num_particles, self.n_history * 3) + + feat = torch.cat([x, v, x_his, v_his], dim=-1) # (bsz, num_particles, 6 * (1 + n_history)) + feat = feat.permute(0, 2, 1) # (bsz, 6 * (1 + n_history), num_particles) + feat, trans, trans_feat = self.encoder(feat, enabled) # feat: (bsz, feature_dim, num_particles) + + if self.radius > 0: + # aggregate neighborhood + # x.shape: (bsz, num_particles, 3) + # x_grid.shape: (bsz, num_grids_total, 3) + dist_pt_grid = torch.cdist(x_grid, x, p=2) + mask = dist_pt_grid < self.radius # (bsz, num_grids_total, num_particles) + mask_normed = mask / (mask.sum(dim=-1, keepdim=True) + 1e-5) # for each grid, normalize the weights + mask_normed = mask_normed.detach() + feat = mask_normed @ feat.permute(0, 2, 1) # (bsz, num_grids_total, feature_dim) + else: + # global max pooling + feat = feat[:, None, :].repeat(1, x_grid.shape[1], 1) # (bsz, num_grids_total, feature_dim) + + # positional encoding and decoder + feat = feat.reshape(-1, self.feature_dim) + x_grid = x_grid.reshape(-1, 3) + x_grid = self.positional_encoding(x_grid) + feat = self.decoder(x_grid, feat) + feat = feat * self.output_scale + feat = feat.reshape(bsz, -1, feat.shape[-1]) + feat = torch.bmm(feat, inv_rot) + + # expand to full grid + feat = fill_grid_locations(feat, grid_idxs, self.num_grids_list) + return feat diff --git a/src/pgnd/sim/__init__.py b/src/pgnd/sim/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..0ff8eccaae10b652ea2c4f96fa8b6f3d1cd43e2a --- /dev/null +++ b/src/pgnd/sim/__init__.py @@ -0,0 +1,4 @@ +from .friction import * +from .model import * +from .sim import * +from .utils import * diff --git a/src/pgnd/sim/friction.py b/src/pgnd/sim/friction.py new file mode 100644 index 0000000000000000000000000000000000000000..4e9f7faf43d810cbe4bacb104b4f93fd625571a0 --- /dev/null +++ b/src/pgnd/sim/friction.py @@ -0,0 +1,11 @@ +import torch +import torch.nn as nn + + +class Friction(nn.Module): + def __init__(self, mu_init=0.5): + super(Friction, self).__init__() + self.mu = torch.nn.Parameter(torch.tensor(mu_init)) + + def clip(self): + self.mu.data = torch.clamp(self.mu.data, 0, 1) diff --git a/src/pgnd/sim/model.py b/src/pgnd/sim/model.py new file mode 100644 index 0000000000000000000000000000000000000000..99a95b8a2579fd18ec795a992fb92c574cfbf2d7 --- /dev/null +++ b/src/pgnd/sim/model.py @@ -0,0 +1,185 @@ +from typing import Optional, Union, Sequence, Any +from omegaconf import DictConfig +import numpy as np +import torch +from torch import Tensor +import warp as wp + +from .utils import ConstantBatch, StaticsBatch, CollidersBatch, GridDataBatch, ParticleDataBatch + + +class SimModelBatch: + + def __init__(self, constant: ConstantBatch, device: wp.context.Devicelike = None, batch_size: int = 1, requires_grad: bool = False) -> None: + self.constant = constant + self.device = wp.get_device(device) + self.requires_grad = requires_grad + self.batch_size = batch_size + + def update_friction(self, friction) -> None: + self.constant.update_friction(friction, self.requires_grad) + + @staticmethod + @wp.kernel + def grid_op_batch( + constant: ConstantBatch, + colliders: CollidersBatch, + grid_curr: GridDataBatch, + grid_next: GridDataBatch, + ) -> None: + + b, px, py, pz = wp.tid() + + v = grid_curr.v[b, px, py, pz] + + friction = constant.friction[b, 0] + + if px < constant.bound and v[0] < 0.0: + impulse = wp.vec3(v[0], 0.0, 0.0) + v = wp.vec3(0.0, v[1], v[2]) + friction_impulse = wp.float32(-1.) * friction * wp.length(impulse) * wp.normalize(v) + friction_impulse *= wp.min(1.0, wp.length(v) / (wp.length(friction_impulse) + 1e-10)) + v = v + friction_impulse + if py < constant.bound and v[1] < 0.0: + impulse = wp.vec3(0.0, v[1], 0.0) + v = wp.vec3(v[0], 0.0, v[2]) + friction_impulse = wp.float32(-1.) * friction * wp.length(impulse) * wp.normalize(v) + friction_impulse *= wp.min(1.0, wp.length(v) / (wp.length(friction_impulse) + 1e-10)) + v = v + friction_impulse + if pz < constant.bound and v[2] < 0.0: + impulse = wp.vec3(0.0, 0.0, v[2]) + v = wp.vec3(v[0], v[1], 0.0) + friction_impulse = wp.float32(-1.) * friction * wp.length(impulse) * wp.normalize(v) + friction_impulse *= wp.min(1.0, wp.length(v) / (wp.length(friction_impulse) + 1e-10)) + v = v + friction_impulse + if px > int(constant.num_grids_list[0]) - constant.bound and v[0] > 0.0: + impulse = wp.vec3(v[0], 0.0, 0.0) + v = wp.vec3(0.0, v[1], v[2]) + friction_impulse = wp.float32(-1.) * friction * wp.length(impulse) * wp.normalize(v) + friction_impulse *= wp.min(1.0, wp.length(v) / (wp.length(friction_impulse) + 1e-10)) + v = v + friction_impulse + if py > int(constant.num_grids_list[1]) - constant.bound and v[1] > 0.0: + impulse = wp.vec3(0.0, v[1], 0.0) + v = wp.vec3(v[0], 0.0, v[2]) + friction_impulse = wp.float32(-1.) * friction * wp.length(impulse) * wp.normalize(v) + friction_impulse *= wp.min(1.0, wp.length(v) / (wp.length(friction_impulse) + 1e-10)) + v = v + friction_impulse + if pz > int(constant.num_grids_list[2]) - constant.bound and v[2] > 0.0: + impulse = wp.vec3(0.0, 0.0, v[2]) + v = wp.vec3(v[0], v[1], 0.0) + friction_impulse = wp.float32(-1.) * friction * wp.length(impulse) * wp.normalize(v) + friction_impulse *= wp.min(1.0, wp.length(v) / (wp.length(friction_impulse) + 1e-10)) + v = v + friction_impulse + + for gripper_id in range(colliders.gripper_centers.shape[1]): + + dx = wp.float32(px) * constant.dx - colliders.gripper_centers[b, gripper_id][0] + dy = wp.float32(py) * constant.dx - colliders.gripper_centers[b, gripper_id][1] + dz = wp.float32(pz) * constant.dx - colliders.gripper_centers[b, gripper_id][2] + + grid_from_gripper = wp.vec3(dx, dy, dz) + grid_from_gripper_norm = wp.length(grid_from_gripper) + + gripper_add_radii = 0.0 + if grid_from_gripper_norm < colliders.gripper_radii[b, gripper_id] + gripper_add_radii and colliders.gripper_open[b, gripper_id] < 0.5: + if wp.length(colliders.gripper_quat[b, gripper_id]) > 0: # filter out + gripper_vel = colliders.gripper_vels[b, gripper_id] + gripper_quat_vel = colliders.gripper_quat_vel[b, gripper_id] + + gripper_angular_vel = wp.length(gripper_quat_vel) + gripper_quat_axis = gripper_quat_vel / (gripper_angular_vel + 1e-10) + + grid_from_gripper_axis = grid_from_gripper - \ + wp.dot(gripper_quat_axis, grid_from_gripper) * gripper_quat_axis + v = wp.cross(gripper_quat_vel, grid_from_gripper_axis) + gripper_vel + + else: + v = colliders.gripper_vels[b, gripper_id] + + grid_next.v[b, px, py, pz] = v + + @staticmethod + @wp.kernel + def g2p_batch( + constant: ConstantBatch, + statics: StaticsBatch, + particle_curr: ParticleDataBatch, + grid_next: GridDataBatch, + particle_next: ParticleDataBatch, + ) -> None: + + b, p = wp.tid() + + if statics.enabled[b, p] == 0: + return + + p_x = particle_curr.x[b, p] * constant.inv_dx + base_x = int(p_x[0] - 0.5) + base_y = int(p_x[1] - 0.5) + base_z = int(p_x[2] - 0.5) + f_x = p_x - wp.vec3( + float(base_x), + float(base_y), + float(base_z)) + + # quadratic kernels [http://mpm.graphics Eqn. 123, with x=fx,fx-1,fx-2] + wa = wp.vec3(1.5) - f_x + wb = f_x - wp.vec3(1.0) + wc = f_x - wp.vec3(0.5) + + w = wp.mat33( + wp.cw_mul(wa, wa) * 0.5, + wp.vec3(0.75) - wp.cw_mul(wb, wb), + wp.cw_mul(wc, wc) * 0.5, + ) + + new_v = wp.vec3(0.0) + + for i in range(3): + for j in range(3): + for k in range(3): + weight = w[0, i] * w[1, j] * w[2, k] + + v = grid_next.v[b, base_x + i, base_y + j, base_z + k] + new_v = new_v + weight * v + + particle_next.v[b, p] = new_v + + bound = statics.clip_bound[b, p] * constant.dx + constant.eps + new_x = particle_curr.x[b, p] + constant.dt * new_v + new_x = wp.vec3( + wp.clamp(new_x[0], 0.0 + bound, float(constant.num_grids_list[0]) * constant.dx - bound), + wp.clamp(new_x[1], 0.0 + bound, float(constant.num_grids_list[1]) * constant.dx - bound), + wp.clamp(new_x[2], 0.0 + bound, float(constant.num_grids_list[2]) * constant.dx - bound), + ) + particle_next.x[b, p] = new_x + + +def build_model( + cfg: DictConfig, + batch_size: int, + device: wp.context.Devicelike = None, + requires_grad: bool = False + ) -> SimModelBatch: + + dt: float = eval(cfg.sim.dt) if isinstance(cfg.sim.dt, str) else cfg.sim.dt + bound: int = cfg.sim.bound + eps: float = cfg.sim.eps + assert len(cfg.sim.num_grids) == 4 + num_grids_list: list = cfg.sim.num_grids[:3] + dx: float = cfg.sim.num_grids[3] + inv_dx: float = 1 / dx + + constant = ConstantBatch() + constant.init() + constant.dt = dt + constant.bound = bound + constant.dx = dx + constant.inv_dx = inv_dx + constant.eps = eps + friction = np.array([cfg.model.friction.value], dtype=np.float32)[None].repeat(batch_size, axis=0) + constant.friction = wp.from_numpy(friction, dtype=float) # [bsz, 1] + constant.num_grids_list = wp.vec3(*num_grids_list) + + model = SimModelBatch(constant, device, batch_size, requires_grad) + return model diff --git a/src/pgnd/sim/sim.py b/src/pgnd/sim/sim.py new file mode 100644 index 0000000000000000000000000000000000000000..156901a05319db0db76952c79167c419eb3e2262 --- /dev/null +++ b/src/pgnd/sim/sim.py @@ -0,0 +1,136 @@ +from typing import Optional +from omegaconf import DictConfig +import torch +import torch.autograd as autograd +import torch.nn as nn +from torch import Tensor +import warp as wp + +from .utils import StaticsBatch, CollidersBatch, ParticleDataBatch, GridDataBatch +from .model import SimModelBatch, build_model +from pgnd.utils import Tape, CondTape + + +class SimFunctionWithFrictionBatch(autograd.Function): + + @staticmethod + def forward( + ctx: autograd.function.FunctionCtx, + model: SimModelBatch, + statics: StaticsBatch, + colliders: CollidersBatch, + particles_curr: ParticleDataBatch, + particles_next: ParticleDataBatch, + grid_curr: GridDataBatch, + grid_next: GridDataBatch, + friction: Tensor, + x: Tensor, + v: Tensor, + pred: Tensor) -> tuple[Tensor, Tensor]: + + tape: Tape = Tape() + model.update_friction(friction) + particles_curr.from_torch(x=x, v=v) + grid_curr.clear() + grid_curr.zero_grad() + grid_curr.from_torch(v=pred) + grid_next.clear() + grid_next.zero_grad() + + device = model.device + constant = model.constant + batch_size = model.batch_size + + num_grids_list = [int(constant.num_grids_list[0]), int(constant.num_grids_list[1]), int(constant.num_grids_list[2])] + num_particles = particles_curr.x.shape[1] + + with CondTape(tape, model.requires_grad): + wp.launch(model.grid_op_batch, + dim=[batch_size] + [num_grids_list[0], num_grids_list[1], num_grids_list[2]], + inputs=[constant, colliders, grid_curr], + outputs=[grid_next], + device=device + ) + wp.launch(model.g2p_batch, + dim=[batch_size, num_particles], + inputs=[constant, statics, particles_curr, grid_next], + outputs=[particles_next], + device=device + ) + + x_next, v_next = particles_next.to_torch() + + ctx.tape = tape + ctx.particles_curr = particles_curr + ctx.particles_next = particles_next + ctx.grid_curr = grid_curr + + return x_next, v_next + + @staticmethod + def backward( + ctx: autograd.function.FunctionCtx, + grad_x_next: Tensor, + grad_v_next: Tensor, + ) -> tuple[None, None, None, None, None, None, None, None, Tensor, Tensor, Tensor]: + + tape: Tape = ctx.tape + particles_curr: ParticleDataBatch = ctx.particles_curr + particles_next: ParticleDataBatch = ctx.particles_next + grid_curr: GridDataBatch = ctx.grid_curr + + if torch.isnan(grad_x_next).any() or torch.isnan(grad_v_next).any(): + import ipdb; ipdb.set_trace() + + tape.backward( + grads={ + particles_next.x: wp.from_torch(grad_x_next.contiguous(), dtype=wp.vec3), + particles_next.v: wp.from_torch(grad_v_next.contiguous(), dtype=wp.vec3), + } + ) + + grad_x, grad_v = particles_curr.to_torch_grad() + grad_pred = grid_curr.to_torch_grad() + + if grad_x is not None: + torch.nan_to_num_(grad_x, 0.0, 0.0, 0.0) + if grad_v is not None: + torch.nan_to_num_(grad_v, 0.0, 0.0, 0.0) + if grad_pred is not None: + torch.nan_to_num_(grad_pred, 0.0, 0.0, 0.0) + + return None, None, None, None, None, None, None, None, grad_x, grad_v, grad_pred + + +class CacheDiffSimWithFrictionBatch(nn.Module): + + def __init__(self, cfg: DictConfig, num_steps: int, batch_size: int, device: wp.context.Devicelike = None, requires_grad: bool = False) -> None: + super().__init__() + self.model = build_model(cfg=cfg, batch_size=batch_size, device=device, requires_grad=requires_grad) + self.curr_particles = [None for _ in range(num_steps)] + self.next_particles = [None for _ in range(num_steps)] + self.curr_grids = [None for _ in range(num_steps)] + self.next_grids = [None for _ in range(num_steps)] + + def forward(self, statics: StaticsBatch, colliders: CollidersBatch, step: int, x: Tensor, v: Tensor, friction: Tensor, pred: Tensor) -> tuple[Tensor, Tensor]: + shape = (x.size(0), x.size(1)) + if self.curr_particles[step] is None: + self.curr_particles[step] = ParticleDataBatch() + self.curr_particles[step].init(shape, self.model.device, self.model.requires_grad) + if self.next_particles[step] is None: + self.next_particles[step] = ParticleDataBatch() + self.next_particles[step].init(shape, self.model.device, self.model.requires_grad) + particles_curr = self.curr_particles[step] + particles_next = self.next_particles[step] + + shape = (pred.size(0), pred.size(1), pred.size(2), pred.size(3)) + if self.curr_grids[step] is None: + self.curr_grids[step] = GridDataBatch() + self.curr_grids[step].init(shape, self.model.device, self.model.requires_grad) + grid_curr = self.curr_grids[step] + if self.next_grids[step] is None: + self.next_grids[step] = GridDataBatch() + self.next_grids[step].init(shape, self.model.device, self.model.requires_grad) + grid_next = self.next_grids[step] + + return SimFunctionWithFrictionBatch.apply(self.model, statics, colliders, particles_curr, particles_next, grid_curr, grid_next, friction, x, v, pred) diff --git a/src/pgnd/sim/utils.py b/src/pgnd/sim/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2cbfebf95acfb400f7f2906ec28e8d8f52e959fb --- /dev/null +++ b/src/pgnd/sim/utils.py @@ -0,0 +1,253 @@ +from typing import Optional, Union, Sequence, Any + +import numpy as np +import torch +from torch import Tensor +import warp as wp + + +@wp.struct +class GridDataBatch(object): + + batch_size: int + v: wp.array(dtype=wp.vec3, ndim=4) + + def init(self, shape: Sequence[int], device: wp.context.Devicelike = None, requires_grad: bool = False) -> None: + self.batch_size = shape[0] + self.v = wp.zeros(shape=shape, dtype=wp.vec3, ndim=4, device=device, requires_grad=requires_grad) + + def clear(self) -> None: + self.v.zero_() + + def zero_grad(self) -> None: + if self.v.requires_grad: + self.v.grad.zero_() + + def from_torch(self, v: Optional[Tensor] = None) -> None: + if v is not None: + self.v = wp.from_torch(v.contiguous(), dtype=wp.vec3, requires_grad=self.v.requires_grad) + + def to_torch(self) -> Tensor: + v = wp.to_torch(self.v).requires_grad_(self.v.requires_grad) + return v + + def to_torch_grad(self) -> Tensor: + grad_v = wp.to_torch(self.v.grad) if self.v.grad is not None else None + return grad_v + + def from_torch_grad(self, grad_v: Optional[Tensor] = None) -> None: + if grad_v is not None: + self.v.grad = wp.from_torch(grad_v.contiguous(), dtype=wp.vec3) + + +@wp.struct +class ParticleDataBatch(object): + + x: wp.array(dtype=wp.vec3, ndim=2) + v: wp.array(dtype=wp.vec3, ndim=2) + + def init(self, shape: Union[Sequence[int], int], device: wp.context.Devicelike = None, requires_grad: bool = False) -> None: + self.x = wp.zeros(shape=shape, dtype=wp.vec3, device=device, requires_grad=requires_grad) + self.v = wp.zeros(shape=shape, dtype=wp.vec3, device=device, requires_grad=requires_grad) + + def clear(self) -> None: + self.x.zero_() + self.v.zero_() + + def zero_grad(self) -> None: + if self.x.requires_grad: + self.x.grad.zero_() + if self.v.requires_grad: + self.v.grad.zero_() + + def from_torch(self, x: Optional[Tensor] = None, v: Optional[Tensor] = None) -> None: + if x is not None: + self.x = wp.from_torch(x.contiguous(), dtype=wp.vec3, requires_grad=self.x.requires_grad) + if v is not None: + self.v = wp.from_torch(v.contiguous(), dtype=wp.vec3, requires_grad=self.v.requires_grad) + + def to_torch(self) -> tuple[Tensor, Tensor]: + x = wp.to_torch(self.x).requires_grad_(self.x.requires_grad) + v = wp.to_torch(self.v).requires_grad_(self.v.requires_grad) + return x, v + + def from_torch_grad(self, grad_x: Optional[Tensor] = None, grad_v: Optional[Tensor] = None) -> None: + if grad_x is not None: + self.x.grad = wp.from_torch(grad_x.contiguous(), dtype=wp.vec3) + if grad_v is not None: + self.v.grad = wp.from_torch(grad_v.contiguous(), dtype=wp.vec3) + + def to_torch_grad(self) -> tuple[Optional[Tensor], Optional[Tensor]]: + grad_x = wp.to_torch(self.x.grad) if self.x.grad is not None else None + grad_v = wp.to_torch(self.v.grad) if self.v.grad is not None else None + return grad_x, grad_v + + +@wp.struct +class StaticsBatch(object): + + clip_bound: wp.array(dtype=float, ndim=2) + enabled: wp.array(dtype=int, ndim=2) + + def init(self, shape: Union[Sequence[int], int], device: wp.context.Devicelike = None) -> None: + self.clip_bound = wp.zeros(shape=(shape[0], shape[1]), dtype=float, device=device, requires_grad=False) + self.enabled = wp.zeros(shape=(shape[0], shape[1]), dtype=int, device=device, requires_grad=False) + + @staticmethod + @wp.kernel + def set_float(x: wp.array(dtype=float, ndim=2), value: wp.array(dtype=float)) -> None: + b, p = wp.tid() + x[b, p] = value[b] + + @staticmethod + @wp.kernel + def set_int_per_particle(x: wp.array(dtype=int, ndim=2), value: wp.array(dtype=int, ndim=2)) -> None: + b, p = wp.tid() + x[b, p] = value[b, p] + + def update_clip_bound(self, clip_bound: Tensor) -> None: + clip_bound = wp.from_numpy(clip_bound.numpy(), dtype=float) + wp.launch(self.set_float, dim=self.clip_bound.shape, inputs=[self.clip_bound, clip_bound], device=self.clip_bound.device) + + def update_enabled(self, enabled: Tensor) -> None: + enabled = wp.from_numpy(enabled.numpy(), dtype=int) + wp.launch(self.set_int_per_particle, dim=self.enabled.shape, inputs=[self.enabled, enabled], device=self.enabled.device) + + +@wp.struct +class CollidersBatch(object): + + gripper_centers: wp.array(dtype=wp.vec3, ndim=2) + gripper_vels: wp.array(dtype=wp.vec3, ndim=2) + gripper_radii: wp.array(dtype=float, ndim=2) + gripper_quat: wp.array(dtype=wp.quat, ndim=2) + gripper_quat_vel: wp.array(dtype=wp.vec3, ndim=2) + gripper_open: wp.array(dtype=float, ndim=2) + + def init(self, shape: Sequence[int], device: wp.context.Devicelike = None, use_quat: bool = False) -> None: + self.gripper_centers = wp.zeros(shape=shape, dtype=wp.vec3, device=device, requires_grad=False) + self.gripper_vels = wp.zeros(shape=shape, dtype=wp.vec3, device=device, requires_grad=False) + self.gripper_radii = wp.zeros(shape=shape, dtype=float, device=device, requires_grad=False) + self.gripper_quat = wp.zeros(shape=shape, dtype=wp.quat, device=device, requires_grad=False) + self.gripper_quat_vel = wp.zeros(shape=shape, dtype=wp.vec3, device=device, requires_grad=False) + self.gripper_open = wp.zeros(shape=shape, dtype=float, device=device, requires_grad=False) + + @staticmethod + @wp.kernel + def set_int(x: wp.array(dtype=wp.int32, ndim=2), value: wp.array(dtype=wp.int32, ndim=2)) -> None: + b, p = wp.tid() + x[b, p] = value[b, p] + + @staticmethod + @wp.kernel + def set_float(x: wp.array(dtype=wp.float32, ndim=2), value: wp.array(dtype=wp.float32, ndim=2)) -> None: + b, p = wp.tid() + x[b, p] = value[b, p] + + @staticmethod + @wp.kernel + def set_vec3(x: wp.array(dtype=wp.vec3, ndim=2), value: wp.array(dtype=wp.vec3, ndim=2)) -> None: + b, p = wp.tid() + x[b, p] = value[b, p] + + @staticmethod + @wp.kernel + def add_vec3(x: wp.array(dtype=wp.vec3, ndim=2), value: wp.array(dtype=wp.vec3, ndim=2)) -> None: + b, p = wp.tid() + wp.atomic_add(x, b, p, value[b, p]) + + @staticmethod + @wp.kernel + def set_quat(x: wp.array(dtype=wp.quat, ndim=2), value: wp.array(dtype=wp.quat, ndim=2)) -> None: + b, p = wp.tid() + x[b, p] = value[b, p] + + def update_grippers(self, gripper: Tensor) -> None: + assert gripper.shape[-1] == 15 # quat, quat_vel (axis-angle) + center, vel, quat, quat_vel, _, openness = torch.split(gripper, [3, 3, 4, 3, 1, 1], dim=-1) + + center_wp = wp.from_torch(center.contiguous(), dtype=wp.vec3) + wp.launch(self.set_vec3, dim=self.gripper_centers.shape, inputs=[self.gripper_centers, center_wp], device=self.gripper_centers.device) + + vel_wp = wp.from_torch(vel.contiguous(), dtype=wp.vec3) + wp.launch(self.set_vec3, dim=self.gripper_vels.shape, inputs=[self.gripper_vels, vel_wp], device=self.gripper_vels.device) + + quat_wp = wp.from_torch(quat.contiguous(), dtype=wp.quat) + wp.launch(self.set_quat, dim=self.gripper_quat.shape, inputs=[self.gripper_quat, quat_wp], device=self.gripper_quat.device) + + quat_vel_wp = wp.from_torch(quat_vel.contiguous(), dtype=wp.vec3) + wp.launch(self.set_vec3, dim=self.gripper_quat_vel.shape, inputs=[self.gripper_quat_vel, quat_vel_wp], device=self.gripper_quat_vel.device) + + openness_wp = wp.from_torch(openness.squeeze(-1).contiguous(), dtype=wp.float32) + wp.launch(self.set_float, dim=self.gripper_open.shape, inputs=[self.gripper_open, openness_wp], device=self.gripper_open.device) + + def initialize_grippers(self, gripper: Tensor) -> None: + assert gripper.shape[-1] == 15 # quat, quat_vel (axis-angle) + center, vel, quat, quat_vel, radius, openness = torch.split(gripper, [3, 3, 4, 3, 1, 1], dim=-1) + + center_wp = wp.from_torch(center.contiguous(), dtype=wp.vec3) + wp.launch(self.set_vec3, dim=self.gripper_centers.shape, inputs=[self.gripper_centers, center_wp], device=self.gripper_centers.device) + + vel_wp = wp.from_torch(vel.contiguous(), dtype=wp.vec3) + wp.launch(self.set_vec3, dim=self.gripper_vels.shape, inputs=[self.gripper_vels, vel_wp], device=self.gripper_vels.device) + + quat_wp = wp.from_torch(quat.contiguous(), dtype=wp.quat) + wp.launch(self.set_quat, dim=self.gripper_quat.shape, inputs=[self.gripper_quat, quat_wp], device=self.gripper_quat.device) + + quat_vel_wp = wp.from_torch(quat_vel.contiguous(), dtype=wp.vec3) + wp.launch(self.set_vec3, dim=self.gripper_quat_vel.shape, inputs=[self.gripper_quat_vel, quat_vel_wp], device=self.gripper_quat_vel.device) + + radius_wp = wp.from_torch(radius.squeeze(-1).contiguous(), dtype=wp.float32) + wp.launch(self.set_float, dim=self.gripper_radii.shape, inputs=[self.gripper_radii, radius_wp], device=self.gripper_radii.device) + + openness_wp = wp.from_torch(openness.squeeze(-1).contiguous(), dtype=wp.float32) + wp.launch(self.set_float, dim=self.gripper_open.shape, inputs=[self.gripper_open, openness_wp], device=self.gripper_open.device) + + def export(self): + data = {} + if self.gripper_centers.shape[1] > 0: + gripper_centers = self.gripper_centers.numpy() + grippers = np.zeros((gripper_centers.shape[0], gripper_centers.shape[1], 15)) + grippers[:, :, :3] = gripper_centers + grippers[:, :, 3:6] = self.gripper_vels.numpy() + grippers[:, :, 6:10] = self.gripper_quat.numpy() + grippers[:, :, 10:13] = self.gripper_quat_vel.numpy() + grippers[:, :, 13] = self.gripper_radii.numpy() + grippers[:, :, 14] = self.gripper_open.numpy() + data['grippers'] = grippers + return data + + +@wp.struct +class ConstantBatch(object): + + num_grids_list: wp.vec3 + dt: float + bound: int + gravity: wp.vec3 + dx: float + inv_dx: float + eps: float + friction: wp.array(dtype=wp.float32, ndim=2) + + def init(self): + # self.num_grids = 0 + self.num_grids_list = wp.vec3(0, 0, 0) + self.dt = 0.0 + self.bound = 0 + self.gravity = wp.vec3(0.0, 0.0, 0.0) + self.dx = 0.0 + self.inv_dx = 0.0 + self.eps = 0.0 + self.friction = wp.zeros(shape=(1, 1), dtype=wp.float32) + + def update_friction(self, friction, requires_grad=False) -> None: + self.friction = wp.from_torch(friction[..., None].to(torch.float32), dtype=wp.float32) + self.friction.requires_grad = requires_grad + + def zero_grad(self) -> None: + if self.friction.requires_grad: + self.friction.grad.zero_() + + def to_torch_grad(self) -> Optional[Tensor]: + return wp.to_torch(self.friction.grad) if self.friction.grad is not None else None diff --git a/src/pgnd/utils.py b/src/pgnd/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..0ce9d4e954688c06bf307eda9affdada344c2270 --- /dev/null +++ b/src/pgnd/utils.py @@ -0,0 +1,90 @@ +from typing import Union, Dict, Optional +from pathlib import Path +from omegaconf import DictConfig +import sys +import shutil +import numpy as np +import wandb +import warp as wp + + +Tape = wp.Tape + +class CondTape(object): + def __init__(self, tape: Optional[Tape], cond: bool = True) -> None: + self.tape = tape + self.cond = cond + + def __enter__(self): + if self.tape is not None and self.cond: + self.tape.__enter__() + + def __exit__(self, exc_type, exc_value, traceback): + if self.tape is not None and self.cond: + self.tape.__exit__(exc_type, exc_value, traceback) + + +def cfg2dict(cfg: DictConfig) -> Dict: + """ + Recursively convert OmegaConf to vanilla dict + :param cfg: + :return: + """ + cfg_dict = {} + for k, v in cfg.items(): + if type(v) == DictConfig: + cfg_dict[k] = cfg2dict(v) + else: + cfg_dict[k] = v + return cfg_dict + + +class Logger: + + def __init__(self, cfg, project='pgnd-train', entity='kaiz'): + wandb.init(project=project, entity=entity, name=cfg.train.name) + wandb.config = cfg2dict(cfg) + + def add_scalar(self, tag, scalar, step=None): + wandb.log({tag: scalar}, step=step) + + def add_image(self, tag, img, step=None, scale=True): + if scale: + img = (img - img.min()) / (img.max() - img.min()) + wandb.log({tag: wandb.Image(img)}, step=step) + + def add_video(self, tag, video, step=None): + wandb.log({tag: wandb.Video(video)}, step=step) + + +def mkdir(path: Path, resume=False, overwrite=False) -> None: + while True: + if overwrite: + if path.is_dir(): + print('overwriting directory ({})'.format(path)) + shutil.rmtree(path, ignore_errors=True) + path.mkdir(parents=True, exist_ok=True) + return + elif resume: + print('resuming directory ({})'.format(path)) + path.mkdir(parents=True, exist_ok=True) + return + else: + if path.exists(): + feedback = input('target directory ({}) already exists, overwrite? [Y/r/n] '.format(path)) + ret = feedback.casefold() + else: + ret = 'y' + if ret == 'n': + sys.exit(0) + elif ret == 'r': + resume = True + elif ret == 'y': + overwrite = True + + +def get_root(path: Union[str, Path], name: str = '.root') -> Path: + root = Path(path).resolve() + while not (root / name).is_file(): + root = root.parent + return root diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/.gitignore b/src/third-party/diff-gaussian-rasterization-w-depth/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..2eec4f76ad696c1e89917f874aa69bdc5bb87e69 --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/.gitignore @@ -0,0 +1,5 @@ +build/ +diff_gaussian_rasterization.egg-info/ +dist/ +.idea/ +third_party/ \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/.gitmodules b/src/third-party/diff-gaussian-rasterization-w-depth/.gitmodules new file mode 100644 index 0000000000000000000000000000000000000000..4553c29f4224a9a8723482bc9aca759a97693a64 --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/.gitmodules @@ -0,0 +1,3 @@ +[submodule "third_party/glm"] + path = third_party/glm + url = https://github.com/g-truc/glm.git diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/CMakeLists.txt b/src/third-party/diff-gaussian-rasterization-w-depth/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..9fdb9cbfdcc0fc2b81595cd616912067291ea0b1 --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/CMakeLists.txt @@ -0,0 +1,36 @@ +# +# Copyright (C) 2023, Inria +# GRAPHDECO research group, https://team.inria.fr/graphdeco +# All rights reserved. +# +# This software is free for non-commercial, research and evaluation use +# under the terms of the LICENSE.md file. +# +# For inquiries contact george.drettakis@inria.fr +# + +cmake_minimum_required(VERSION 3.20) + +project(DiffRast LANGUAGES CUDA CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CUDA_STANDARD 17) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + +add_library(CudaRasterizer + cuda_rasterizer/backward.h + cuda_rasterizer/backward.cu + cuda_rasterizer/forward.h + cuda_rasterizer/forward.cu + cuda_rasterizer/auxiliary.h + cuda_rasterizer/rasterizer_impl.cu + cuda_rasterizer/rasterizer_impl.h + cuda_rasterizer/rasterizer.h +) + +set_target_properties(CudaRasterizer PROPERTIES CUDA_ARCHITECTURES "75;86") + +target_include_directories(CudaRasterizer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/cuda_rasterizer) +target_include_directories(CudaRasterizer PRIVATE third_party/glm ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}) diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/LICENSE.md b/src/third-party/diff-gaussian-rasterization-w-depth/LICENSE.md new file mode 100644 index 0000000000000000000000000000000000000000..e948bb6d789a112ba2c73d4cf7907d503ad86198 --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/LICENSE.md @@ -0,0 +1,83 @@ +Gaussian-Splatting License +=========================== + +**Inria** and **the Max Planck Institut for Informatik (MPII)** hold all the ownership rights on the *Software* named **gaussian-splatting**. +The *Software* is in the process of being registered with the Agence pour la Protection des +Programmes (APP). + +The *Software* is still being developed by the *Licensor*. + +*Licensor*'s goal is to allow the research community to use, test and evaluate +the *Software*. + +## 1. Definitions + +*Licensee* means any person or entity that uses the *Software* and distributes +its *Work*. + +*Licensor* means the owners of the *Software*, i.e Inria and MPII + +*Software* means the original work of authorship made available under this +License ie gaussian-splatting. + +*Work* means the *Software* and any additions to or derivative works of the +*Software* that are made available under this License. + + +## 2. Purpose +This license is intended to define the rights granted to the *Licensee* by +Licensors under the *Software*. + +## 3. Rights granted + +For the above reasons Licensors have decided to distribute the *Software*. +Licensors grant non-exclusive rights to use the *Software* for research purposes +to research users (both academic and industrial), free of charge, without right +to sublicense.. The *Software* may be used "non-commercially", i.e., for research +and/or evaluation purposes only. + +Subject to the terms and conditions of this License, you are granted a +non-exclusive, royalty-free, license to reproduce, prepare derivative works of, +publicly display, publicly perform and distribute its *Work* and any resulting +derivative works in any form. + +## 4. Limitations + +**4.1 Redistribution.** You may reproduce or distribute the *Work* only if (a) you do +so under this License, (b) you include a complete copy of this License with +your distribution, and (c) you retain without modification any copyright, +patent, trademark, or attribution notices that are present in the *Work*. + +**4.2 Derivative Works.** You may specify that additional or different terms apply +to the use, reproduction, and distribution of your derivative works of the *Work* +("Your Terms") only if (a) Your Terms provide that the use limitation in +Section 2 applies to your derivative works, and (b) you identify the specific +derivative works that are subject to Your Terms. Notwithstanding Your Terms, +this License (including the redistribution requirements in Section 3.1) will +continue to apply to the *Work* itself. + +**4.3** Any other use without of prior consent of Licensors is prohibited. Research +users explicitly acknowledge having received from Licensors all information +allowing to appreciate the adequacy between of the *Software* and their needs and +to undertake all necessary precautions for its execution and use. + +**4.4** The *Software* is provided both as a compiled library file and as source +code. In case of using the *Software* for a publication or other results obtained +through the use of the *Software*, users are strongly encouraged to cite the +corresponding publications as explained in the documentation of the *Software*. + +## 5. Disclaimer + +THE USER CANNOT USE, EXPLOIT OR DISTRIBUTE THE *SOFTWARE* FOR COMMERCIAL PURPOSES +WITHOUT PRIOR AND EXPLICIT CONSENT OF LICENSORS. YOU MUST CONTACT INRIA FOR ANY +UNAUTHORIZED USE: stip-sophia.transfert@inria.fr . ANY SUCH ACTION WILL +CONSTITUTE A FORGERY. THIS *SOFTWARE* IS PROVIDED "AS IS" WITHOUT ANY WARRANTIES +OF ANY NATURE AND ANY EXPRESS OR IMPLIED WARRANTIES, WITH REGARDS TO COMMERCIAL +USE, PROFESSIONNAL USE, LEGAL OR NOT, OR OTHER, OR COMMERCIALISATION OR +ADAPTATION. UNLESS EXPLICITLY PROVIDED BY LAW, IN NO EVENT, SHALL INRIA OR THE +AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING FROM, OUT OF OR +IN CONNECTION WITH THE *SOFTWARE* OR THE USE OR OTHER DEALINGS IN THE *SOFTWARE*. \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/README.md b/src/third-party/diff-gaussian-rasterization-w-depth/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0f8764d98871b7b03edab8a47af48bf22034a14a --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/README.md @@ -0,0 +1,47 @@ + +This is a clone of https://github.com/graphdeco-inria/diff-gaussian-rasterization/tree/59f5f77e3ddbac3ed9db93ec2cfe99ed6c5d121d + +However, it has been edited by Jonathon Luiten to also render 'depth' as well as colour. + +This is needed for Jonathon's Dynamic 3D Gaussians work which can be found here: http://dynamic3dgaussians.github.io + +By default, the depth is calculated as 'median depth', where the depth is the depth of the Gaussian center which causes the accumulated rays transmittance to drop below 0.5. +If a ray doesn't reach this threshold it is given a default depth of 15. This median depth avoids the depth floaters around depth boundaries that 'mean depth' would give. +If 'mean depth' is preffered, there is commented out code which also calculates 'mean depth'. +See lines 307-308 and 363-372 of cuda_rasterizer/forward.cu. + +Note that the backward pass for the depth has not been implemented, so it won't work for training with depth ground-truth. + +Note that the code in this repo follows the (non commercial) license of Inria as laid out in LICENSE.md + +If you're using this as part of the Dynamic 3D Gaussians code, just follow the installation instruction for that codebase. + +To install this stand-alone I have been doing the following (although I don't think this is necessarily the best way): +``` +git clone git@github.com:git@github.com:JonathonLuiten/diff-gaussian-rasterization-w-depth.git +cd diff-gaussian-rasterization-w-depth +python setup.py install +pip install . +``` + +Original readme below: + +# Differential Gaussian Rasterization + +Used as the rasterization engine for the paper "3D Gaussian Splatting for Real-Time Rendering of Radiance Fields". If you can make use of it in your own research, please be so kind to cite us. + +
+
+

BibTeX

+
@Article{kerbl3Dgaussians,
+      author       = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{\"u}hler, Thomas and Drettakis, George},
+      title        = {3D Gaussian Splatting for Real-Time Radiance Field Rendering},
+      journal      = {ACM Transactions on Graphics},
+      number       = {4},
+      volume       = {42},
+      month        = {July},
+      year         = {2023},
+      url          = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/}
+}
+
+
\ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/auxiliary.h b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/auxiliary.h new file mode 100644 index 0000000000000000000000000000000000000000..f5682ff993bbb7837896a94b32c23a51c6ccdc27 --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/auxiliary.h @@ -0,0 +1,167 @@ +/* + * Copyright (C) 2023, Inria + * GRAPHDECO research group, https://team.inria.fr/graphdeco + * All rights reserved. + * + * This software is free for non-commercial, research and evaluation use + * under the terms of the LICENSE.md file. + * + * For inquiries contact george.drettakis@inria.fr + */ + +#ifndef CUDA_RASTERIZER_AUXILIARY_H_INCLUDED +#define CUDA_RASTERIZER_AUXILIARY_H_INCLUDED + +#include "config.h" +#include "stdio.h" + +#define BLOCK_SIZE (BLOCK_X * BLOCK_Y) +#define NUM_WARPS (BLOCK_SIZE/32) + +// Spherical harmonics coefficients +__device__ const float SH_C0 = 0.28209479177387814f; +__device__ const float SH_C1 = 0.4886025119029199f; +__device__ const float SH_C2[] = { + 1.0925484305920792f, + -1.0925484305920792f, + 0.31539156525252005f, + -1.0925484305920792f, + 0.5462742152960396f +}; +__device__ const float SH_C3[] = { + -0.5900435899266435f, + 2.890611442640554f, + -0.4570457994644658f, + 0.3731763325901154f, + -0.4570457994644658f, + 1.445305721320277f, + -0.5900435899266435f +}; + +__forceinline__ __device__ float ndc2Pix(float v, int S) +{ + return ((v + 1.0) * S - 1.0) * 0.5; +} + +__forceinline__ __device__ void getRect(const float2 p, int max_radius, uint2& rect_min, uint2& rect_max, dim3 grid) +{ + rect_min = { + min(grid.x, max((int)0, (int)((p.x - max_radius) / BLOCK_X))), + min(grid.y, max((int)0, (int)((p.y - max_radius) / BLOCK_Y))) + }; + rect_max = { + min(grid.x, max((int)0, (int)((p.x + max_radius + BLOCK_X - 1) / BLOCK_X))), + min(grid.y, max((int)0, (int)((p.y + max_radius + BLOCK_Y - 1) / BLOCK_Y))) + }; +} + +__forceinline__ __device__ float3 transformPoint4x3(const float3& p, const float* matrix) +{ + float3 transformed = { + matrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z + matrix[12], + matrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z + matrix[13], + matrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z + matrix[14], + }; + return transformed; +} + +__forceinline__ __device__ float4 transformPoint4x4(const float3& p, const float* matrix) +{ + float4 transformed = { + matrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z + matrix[12], + matrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z + matrix[13], + matrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z + matrix[14], + matrix[3] * p.x + matrix[7] * p.y + matrix[11] * p.z + matrix[15] + }; + return transformed; +} + +__forceinline__ __device__ float3 transformVec4x3(const float3& p, const float* matrix) +{ + float3 transformed = { + matrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z, + matrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z, + matrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z, + }; + return transformed; +} + +__forceinline__ __device__ float3 transformVec4x3Transpose(const float3& p, const float* matrix) +{ + float3 transformed = { + matrix[0] * p.x + matrix[1] * p.y + matrix[2] * p.z, + matrix[4] * p.x + matrix[5] * p.y + matrix[6] * p.z, + matrix[8] * p.x + matrix[9] * p.y + matrix[10] * p.z, + }; + return transformed; +} + +__forceinline__ __device__ float dnormvdz(float3 v, float3 dv) +{ + float sum2 = v.x * v.x + v.y * v.y + v.z * v.z; + float invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2); + float dnormvdz = (-v.x * v.z * dv.x - v.y * v.z * dv.y + (sum2 - v.z * v.z) * dv.z) * invsum32; + return dnormvdz; +} + +__forceinline__ __device__ float3 dnormvdv(float3 v, float3 dv) +{ + float sum2 = v.x * v.x + v.y * v.y + v.z * v.z; + float invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2); + + float3 dnormvdv; + dnormvdv.x = ((+sum2 - v.x * v.x) * dv.x - v.y * v.x * dv.y - v.z * v.x * dv.z) * invsum32; + dnormvdv.y = (-v.x * v.y * dv.x + (sum2 - v.y * v.y) * dv.y - v.z * v.y * dv.z) * invsum32; + dnormvdv.z = (-v.x * v.z * dv.x - v.y * v.z * dv.y + (sum2 - v.z * v.z) * dv.z) * invsum32; + return dnormvdv; +} + +__forceinline__ __device__ float4 dnormvdv(float4 v, float4 dv) +{ + float sum2 = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w; + float invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2); + + float4 vdv = { v.x * dv.x, v.y * dv.y, v.z * dv.z, v.w * dv.w }; + float vdv_sum = vdv.x + vdv.y + vdv.z + vdv.w; + float4 dnormvdv; + dnormvdv.x = ((sum2 - v.x * v.x) * dv.x - v.x * (vdv_sum - vdv.x)) * invsum32; + dnormvdv.y = ((sum2 - v.y * v.y) * dv.y - v.y * (vdv_sum - vdv.y)) * invsum32; + dnormvdv.z = ((sum2 - v.z * v.z) * dv.z - v.z * (vdv_sum - vdv.z)) * invsum32; + dnormvdv.w = ((sum2 - v.w * v.w) * dv.w - v.w * (vdv_sum - vdv.w)) * invsum32; + return dnormvdv; +} + +__forceinline__ __device__ float sigmoid(float x) +{ + return 1.0f / (1.0f + expf(-x)); +} + +__forceinline__ __device__ bool in_frustum(int idx, + const float* orig_points, + const float* viewmatrix, + const float* projmatrix, + const float z_threshold, + bool prefiltered, + float3& p_view) +{ + float3 p_orig = { orig_points[3 * idx], orig_points[3 * idx + 1], orig_points[3 * idx + 2] }; + + // Bring points to screen space + float4 p_hom = transformPoint4x4(p_orig, projmatrix); + float p_w = 1.0f / (p_hom.w + 0.0000001f); + float3 p_proj = { p_hom.x * p_w, p_hom.y * p_w, p_hom.z * p_w }; + p_view = transformPoint4x3(p_orig, viewmatrix); + + if (p_view.z <= z_threshold) // || ((p_proj.x < -1.3 || p_proj.x > 1.3 || p_proj.y < -1.3 || p_proj.y > 1.3))) + { + if (prefiltered) + { + printf("Point is filtered although prefiltered is set. This shouldn't happen!"); + __trap(); + } + return false; + } + return true; +} + +#endif \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/backward.cu b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/backward.cu new file mode 100644 index 0000000000000000000000000000000000000000..4aa41e1cb856e429dc47ff4e4380ee76f96aaebe --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/backward.cu @@ -0,0 +1,657 @@ +/* + * Copyright (C) 2023, Inria + * GRAPHDECO research group, https://team.inria.fr/graphdeco + * All rights reserved. + * + * This software is free for non-commercial, research and evaluation use + * under the terms of the LICENSE.md file. + * + * For inquiries contact george.drettakis@inria.fr + */ + +#include "backward.h" +#include "auxiliary.h" +#include +#include +namespace cg = cooperative_groups; + +// Backward pass for conversion of spherical harmonics to RGB for +// each Gaussian. +__device__ void computeColorFromSH(int idx, int deg, int max_coeffs, const glm::vec3* means, glm::vec3 campos, const float* shs, const bool* clamped, const glm::vec3* dL_dcolor, glm::vec3* dL_dmeans, glm::vec3* dL_dshs) +{ + // Compute intermediate values, as it is done during forward + glm::vec3 pos = means[idx]; + glm::vec3 dir_orig = pos - campos; + glm::vec3 dir = dir_orig / glm::length(dir_orig); + + glm::vec3* sh = ((glm::vec3*)shs) + idx * max_coeffs; + + // Use PyTorch rule for clamping: if clamping was applied, + // gradient becomes 0. + glm::vec3 dL_dRGB = dL_dcolor[idx]; + dL_dRGB.x *= clamped[3 * idx + 0] ? 0 : 1; + dL_dRGB.y *= clamped[3 * idx + 1] ? 0 : 1; + dL_dRGB.z *= clamped[3 * idx + 2] ? 0 : 1; + + glm::vec3 dRGBdx(0, 0, 0); + glm::vec3 dRGBdy(0, 0, 0); + glm::vec3 dRGBdz(0, 0, 0); + float x = dir.x; + float y = dir.y; + float z = dir.z; + + // Target location for this Gaussian to write SH gradients to + glm::vec3* dL_dsh = dL_dshs + idx * max_coeffs; + + // No tricks here, just high school-level calculus. + float dRGBdsh0 = SH_C0; + dL_dsh[0] = dRGBdsh0 * dL_dRGB; + if (deg > 0) + { + float dRGBdsh1 = -SH_C1 * y; + float dRGBdsh2 = SH_C1 * z; + float dRGBdsh3 = -SH_C1 * x; + dL_dsh[1] = dRGBdsh1 * dL_dRGB; + dL_dsh[2] = dRGBdsh2 * dL_dRGB; + dL_dsh[3] = dRGBdsh3 * dL_dRGB; + + dRGBdx = -SH_C1 * sh[3]; + dRGBdy = -SH_C1 * sh[1]; + dRGBdz = SH_C1 * sh[2]; + + if (deg > 1) + { + float xx = x * x, yy = y * y, zz = z * z; + float xy = x * y, yz = y * z, xz = x * z; + + float dRGBdsh4 = SH_C2[0] * xy; + float dRGBdsh5 = SH_C2[1] * yz; + float dRGBdsh6 = SH_C2[2] * (2.f * zz - xx - yy); + float dRGBdsh7 = SH_C2[3] * xz; + float dRGBdsh8 = SH_C2[4] * (xx - yy); + dL_dsh[4] = dRGBdsh4 * dL_dRGB; + dL_dsh[5] = dRGBdsh5 * dL_dRGB; + dL_dsh[6] = dRGBdsh6 * dL_dRGB; + dL_dsh[7] = dRGBdsh7 * dL_dRGB; + dL_dsh[8] = dRGBdsh8 * dL_dRGB; + + dRGBdx += SH_C2[0] * y * sh[4] + SH_C2[2] * 2.f * -x * sh[6] + SH_C2[3] * z * sh[7] + SH_C2[4] * 2.f * x * sh[8]; + dRGBdy += SH_C2[0] * x * sh[4] + SH_C2[1] * z * sh[5] + SH_C2[2] * 2.f * -y * sh[6] + SH_C2[4] * 2.f * -y * sh[8]; + dRGBdz += SH_C2[1] * y * sh[5] + SH_C2[2] * 2.f * 2.f * z * sh[6] + SH_C2[3] * x * sh[7]; + + if (deg > 2) + { + float dRGBdsh9 = SH_C3[0] * y * (3.f * xx - yy); + float dRGBdsh10 = SH_C3[1] * xy * z; + float dRGBdsh11 = SH_C3[2] * y * (4.f * zz - xx - yy); + float dRGBdsh12 = SH_C3[3] * z * (2.f * zz - 3.f * xx - 3.f * yy); + float dRGBdsh13 = SH_C3[4] * x * (4.f * zz - xx - yy); + float dRGBdsh14 = SH_C3[5] * z * (xx - yy); + float dRGBdsh15 = SH_C3[6] * x * (xx - 3.f * yy); + dL_dsh[9] = dRGBdsh9 * dL_dRGB; + dL_dsh[10] = dRGBdsh10 * dL_dRGB; + dL_dsh[11] = dRGBdsh11 * dL_dRGB; + dL_dsh[12] = dRGBdsh12 * dL_dRGB; + dL_dsh[13] = dRGBdsh13 * dL_dRGB; + dL_dsh[14] = dRGBdsh14 * dL_dRGB; + dL_dsh[15] = dRGBdsh15 * dL_dRGB; + + dRGBdx += ( + SH_C3[0] * sh[9] * 3.f * 2.f * xy + + SH_C3[1] * sh[10] * yz + + SH_C3[2] * sh[11] * -2.f * xy + + SH_C3[3] * sh[12] * -3.f * 2.f * xz + + SH_C3[4] * sh[13] * (-3.f * xx + 4.f * zz - yy) + + SH_C3[5] * sh[14] * 2.f * xz + + SH_C3[6] * sh[15] * 3.f * (xx - yy)); + + dRGBdy += ( + SH_C3[0] * sh[9] * 3.f * (xx - yy) + + SH_C3[1] * sh[10] * xz + + SH_C3[2] * sh[11] * (-3.f * yy + 4.f * zz - xx) + + SH_C3[3] * sh[12] * -3.f * 2.f * yz + + SH_C3[4] * sh[13] * -2.f * xy + + SH_C3[5] * sh[14] * -2.f * yz + + SH_C3[6] * sh[15] * -3.f * 2.f * xy); + + dRGBdz += ( + SH_C3[1] * sh[10] * xy + + SH_C3[2] * sh[11] * 4.f * 2.f * yz + + SH_C3[3] * sh[12] * 3.f * (2.f * zz - xx - yy) + + SH_C3[4] * sh[13] * 4.f * 2.f * xz + + SH_C3[5] * sh[14] * (xx - yy)); + } + } + } + + // The view direction is an input to the computation. View direction + // is influenced by the Gaussian's mean, so SHs gradients + // must propagate back into 3D position. + glm::vec3 dL_ddir(glm::dot(dRGBdx, dL_dRGB), glm::dot(dRGBdy, dL_dRGB), glm::dot(dRGBdz, dL_dRGB)); + + // Account for normalization of direction + float3 dL_dmean = dnormvdv(float3{ dir_orig.x, dir_orig.y, dir_orig.z }, float3{ dL_ddir.x, dL_ddir.y, dL_ddir.z }); + + // Gradients of loss w.r.t. Gaussian means, but only the portion + // that is caused because the mean affects the view-dependent color. + // Additional mean gradient is accumulated in below methods. + dL_dmeans[idx] += glm::vec3(dL_dmean.x, dL_dmean.y, dL_dmean.z); +} + +// Backward version of INVERSE 2D covariance matrix computation +// (due to length launched as separate kernel before other +// backward steps contained in preprocess) +__global__ void computeCov2DCUDA(int P, + const float3* means, + const int* radii, + const float* cov3Ds, + const float h_x, float h_y, + const float tan_fovx, float tan_fovy, + const float* view_matrix, + const float* dL_dconics, + float3* dL_dmeans, + float* dL_dcov) +{ + auto idx = cg::this_grid().thread_rank(); + if (idx >= P || !(radii[idx] > 0)) + return; + + // Reading location of 3D covariance for this Gaussian + const float* cov3D = cov3Ds + 6 * idx; + + // Fetch gradients, recompute 2D covariance and relevant + // intermediate forward results needed in the backward. + float3 mean = means[idx]; + float3 dL_dconic = { dL_dconics[4 * idx], dL_dconics[4 * idx + 1], dL_dconics[4 * idx + 3] }; + float3 t = transformPoint4x3(mean, view_matrix); + + const float limx = 1.3f * tan_fovx; + const float limy = 1.3f * tan_fovy; + const float txtz = t.x / t.z; + const float tytz = t.y / t.z; + t.x = min(limx, max(-limx, txtz)) * t.z; + t.y = min(limy, max(-limy, tytz)) * t.z; + + const float x_grad_mul = txtz < -limx || txtz > limx ? 0 : 1; + const float y_grad_mul = tytz < -limy || tytz > limy ? 0 : 1; + + glm::mat3 J = glm::mat3(h_x / t.z, 0.0f, -(h_x * t.x) / (t.z * t.z), + 0.0f, h_y / t.z, -(h_y * t.y) / (t.z * t.z), + 0, 0, 0); + + glm::mat3 W = glm::mat3( + view_matrix[0], view_matrix[4], view_matrix[8], + view_matrix[1], view_matrix[5], view_matrix[9], + view_matrix[2], view_matrix[6], view_matrix[10]); + + glm::mat3 Vrk = glm::mat3( + cov3D[0], cov3D[1], cov3D[2], + cov3D[1], cov3D[3], cov3D[4], + cov3D[2], cov3D[4], cov3D[5]); + + glm::mat3 T = W * J; + + glm::mat3 cov2D = glm::transpose(T) * glm::transpose(Vrk) * T; + + // Use helper variables for 2D covariance entries. More compact. + float a = cov2D[0][0] += 0.3f; + float b = cov2D[0][1]; + float c = cov2D[1][1] += 0.3f; + + float denom = a * c - b * b; + float dL_da = 0, dL_db = 0, dL_dc = 0; + float denom2inv = 1.0f / ((denom * denom) + 0.0000001f); + + if (denom2inv != 0) + { + // Gradients of loss w.r.t. entries of 2D covariance matrix, + // given gradients of loss w.r.t. conic matrix (inverse covariance matrix). + // e.g., dL / da = dL / d_conic_a * d_conic_a / d_a + dL_da = denom2inv * (-c * c * dL_dconic.x + 2 * b * c * dL_dconic.y + (denom - a * c) * dL_dconic.z); + dL_dc = denom2inv * (-a * a * dL_dconic.z + 2 * a * b * dL_dconic.y + (denom - a * c) * dL_dconic.x); + dL_db = denom2inv * 2 * (b * c * dL_dconic.x - (denom + 2 * b * b) * dL_dconic.y + a * b * dL_dconic.z); + + // Gradients of loss L w.r.t. each 3D covariance matrix (Vrk) entry, + // given gradients w.r.t. 2D covariance matrix (diagonal). + // cov2D = transpose(T) * transpose(Vrk) * T; + dL_dcov[6 * idx + 0] = (T[0][0] * T[0][0] * dL_da + T[0][0] * T[1][0] * dL_db + T[1][0] * T[1][0] * dL_dc); + dL_dcov[6 * idx + 3] = (T[0][1] * T[0][1] * dL_da + T[0][1] * T[1][1] * dL_db + T[1][1] * T[1][1] * dL_dc); + dL_dcov[6 * idx + 5] = (T[0][2] * T[0][2] * dL_da + T[0][2] * T[1][2] * dL_db + T[1][2] * T[1][2] * dL_dc); + + // Gradients of loss L w.r.t. each 3D covariance matrix (Vrk) entry, + // given gradients w.r.t. 2D covariance matrix (off-diagonal). + // Off-diagonal elements appear twice --> double the gradient. + // cov2D = transpose(T) * transpose(Vrk) * T; + dL_dcov[6 * idx + 1] = 2 * T[0][0] * T[0][1] * dL_da + (T[0][0] * T[1][1] + T[0][1] * T[1][0]) * dL_db + 2 * T[1][0] * T[1][1] * dL_dc; + dL_dcov[6 * idx + 2] = 2 * T[0][0] * T[0][2] * dL_da + (T[0][0] * T[1][2] + T[0][2] * T[1][0]) * dL_db + 2 * T[1][0] * T[1][2] * dL_dc; + dL_dcov[6 * idx + 4] = 2 * T[0][2] * T[0][1] * dL_da + (T[0][1] * T[1][2] + T[0][2] * T[1][1]) * dL_db + 2 * T[1][1] * T[1][2] * dL_dc; + } + else + { + for (int i = 0; i < 6; i++) + dL_dcov[6 * idx + i] = 0; + } + + // Gradients of loss w.r.t. upper 2x3 portion of intermediate matrix T + // cov2D = transpose(T) * transpose(Vrk) * T; + float dL_dT00 = 2 * (T[0][0] * Vrk[0][0] + T[0][1] * Vrk[0][1] + T[0][2] * Vrk[0][2]) * dL_da + + (T[1][0] * Vrk[0][0] + T[1][1] * Vrk[0][1] + T[1][2] * Vrk[0][2]) * dL_db; + float dL_dT01 = 2 * (T[0][0] * Vrk[1][0] + T[0][1] * Vrk[1][1] + T[0][2] * Vrk[1][2]) * dL_da + + (T[1][0] * Vrk[1][0] + T[1][1] * Vrk[1][1] + T[1][2] * Vrk[1][2]) * dL_db; + float dL_dT02 = 2 * (T[0][0] * Vrk[2][0] + T[0][1] * Vrk[2][1] + T[0][2] * Vrk[2][2]) * dL_da + + (T[1][0] * Vrk[2][0] + T[1][1] * Vrk[2][1] + T[1][2] * Vrk[2][2]) * dL_db; + float dL_dT10 = 2 * (T[1][0] * Vrk[0][0] + T[1][1] * Vrk[0][1] + T[1][2] * Vrk[0][2]) * dL_dc + + (T[0][0] * Vrk[0][0] + T[0][1] * Vrk[0][1] + T[0][2] * Vrk[0][2]) * dL_db; + float dL_dT11 = 2 * (T[1][0] * Vrk[1][0] + T[1][1] * Vrk[1][1] + T[1][2] * Vrk[1][2]) * dL_dc + + (T[0][0] * Vrk[1][0] + T[0][1] * Vrk[1][1] + T[0][2] * Vrk[1][2]) * dL_db; + float dL_dT12 = 2 * (T[1][0] * Vrk[2][0] + T[1][1] * Vrk[2][1] + T[1][2] * Vrk[2][2]) * dL_dc + + (T[0][0] * Vrk[2][0] + T[0][1] * Vrk[2][1] + T[0][2] * Vrk[2][2]) * dL_db; + + // Gradients of loss w.r.t. upper 3x2 non-zero entries of Jacobian matrix + // T = W * J + float dL_dJ00 = W[0][0] * dL_dT00 + W[0][1] * dL_dT01 + W[0][2] * dL_dT02; + float dL_dJ02 = W[2][0] * dL_dT00 + W[2][1] * dL_dT01 + W[2][2] * dL_dT02; + float dL_dJ11 = W[1][0] * dL_dT10 + W[1][1] * dL_dT11 + W[1][2] * dL_dT12; + float dL_dJ12 = W[2][0] * dL_dT10 + W[2][1] * dL_dT11 + W[2][2] * dL_dT12; + + float tz = 1.f / t.z; + float tz2 = tz * tz; + float tz3 = tz2 * tz; + + // Gradients of loss w.r.t. transformed Gaussian mean t + float dL_dtx = x_grad_mul * -h_x * tz2 * dL_dJ02; + float dL_dty = y_grad_mul * -h_y * tz2 * dL_dJ12; + float dL_dtz = -h_x * tz2 * dL_dJ00 - h_y * tz2 * dL_dJ11 + (2 * h_x * t.x) * tz3 * dL_dJ02 + (2 * h_y * t.y) * tz3 * dL_dJ12; + + // Account for transformation of mean to t + // t = transformPoint4x3(mean, view_matrix); + float3 dL_dmean = transformVec4x3Transpose({ dL_dtx, dL_dty, dL_dtz }, view_matrix); + + // Gradients of loss w.r.t. Gaussian means, but only the portion + // that is caused because the mean affects the covariance matrix. + // Additional mean gradient is accumulated in BACKWARD::preprocess. + dL_dmeans[idx] = dL_dmean; +} + +// Backward pass for the conversion of scale and rotation to a +// 3D covariance matrix for each Gaussian. +__device__ void computeCov3D(int idx, const glm::vec3 scale, float mod, const glm::vec4 rot, const float* dL_dcov3Ds, glm::vec3* dL_dscales, glm::vec4* dL_drots) +{ + // Recompute (intermediate) results for the 3D covariance computation. + glm::vec4 q = rot;// / glm::length(rot); + float r = q.x; + float x = q.y; + float y = q.z; + float z = q.w; + + glm::mat3 R = glm::mat3( + 1.f - 2.f * (y * y + z * z), 2.f * (x * y - r * z), 2.f * (x * z + r * y), + 2.f * (x * y + r * z), 1.f - 2.f * (x * x + z * z), 2.f * (y * z - r * x), + 2.f * (x * z - r * y), 2.f * (y * z + r * x), 1.f - 2.f * (x * x + y * y) + ); + + glm::mat3 S = glm::mat3(1.0f); + + glm::vec3 s = mod * scale; + S[0][0] = s.x; + S[1][1] = s.y; + S[2][2] = s.z; + + glm::mat3 M = S * R; + + const float* dL_dcov3D = dL_dcov3Ds + 6 * idx; + + glm::vec3 dunc(dL_dcov3D[0], dL_dcov3D[3], dL_dcov3D[5]); + glm::vec3 ounc = 0.5f * glm::vec3(dL_dcov3D[1], dL_dcov3D[2], dL_dcov3D[4]); + + // Convert per-element covariance loss gradients to matrix form + glm::mat3 dL_dSigma = glm::mat3( + dL_dcov3D[0], 0.5f * dL_dcov3D[1], 0.5f * dL_dcov3D[2], + 0.5f * dL_dcov3D[1], dL_dcov3D[3], 0.5f * dL_dcov3D[4], + 0.5f * dL_dcov3D[2], 0.5f * dL_dcov3D[4], dL_dcov3D[5] + ); + + // Compute loss gradient w.r.t. matrix M + // dSigma_dM = 2 * M + glm::mat3 dL_dM = 2.0f * M * dL_dSigma; + + glm::mat3 Rt = glm::transpose(R); + glm::mat3 dL_dMt = glm::transpose(dL_dM); + + // Gradients of loss w.r.t. scale + glm::vec3* dL_dscale = dL_dscales + idx; + dL_dscale->x = glm::dot(Rt[0], dL_dMt[0]); + dL_dscale->y = glm::dot(Rt[1], dL_dMt[1]); + dL_dscale->z = glm::dot(Rt[2], dL_dMt[2]); + + dL_dMt[0] *= s.x; + dL_dMt[1] *= s.y; + dL_dMt[2] *= s.z; + + // Gradients of loss w.r.t. normalized quaternion + glm::vec4 dL_dq; + dL_dq.x = 2 * z * (dL_dMt[0][1] - dL_dMt[1][0]) + 2 * y * (dL_dMt[2][0] - dL_dMt[0][2]) + 2 * x * (dL_dMt[1][2] - dL_dMt[2][1]); + dL_dq.y = 2 * y * (dL_dMt[1][0] + dL_dMt[0][1]) + 2 * z * (dL_dMt[2][0] + dL_dMt[0][2]) + 2 * r * (dL_dMt[1][2] - dL_dMt[2][1]) - 4 * x * (dL_dMt[2][2] + dL_dMt[1][1]); + dL_dq.z = 2 * x * (dL_dMt[1][0] + dL_dMt[0][1]) + 2 * r * (dL_dMt[2][0] - dL_dMt[0][2]) + 2 * z * (dL_dMt[1][2] + dL_dMt[2][1]) - 4 * y * (dL_dMt[2][2] + dL_dMt[0][0]); + dL_dq.w = 2 * r * (dL_dMt[0][1] - dL_dMt[1][0]) + 2 * x * (dL_dMt[2][0] + dL_dMt[0][2]) + 2 * y * (dL_dMt[1][2] + dL_dMt[2][1]) - 4 * z * (dL_dMt[1][1] + dL_dMt[0][0]); + + // Gradients of loss w.r.t. unnormalized quaternion + float4* dL_drot = (float4*)(dL_drots + idx); + *dL_drot = float4{ dL_dq.x, dL_dq.y, dL_dq.z, dL_dq.w };//dnormvdv(float4{ rot.x, rot.y, rot.z, rot.w }, float4{ dL_dq.x, dL_dq.y, dL_dq.z, dL_dq.w }); +} + +// Backward pass of the preprocessing steps, except +// for the covariance computation and inversion +// (those are handled by a previous kernel call) +template +__global__ void preprocessCUDA( + int P, int D, int M, + const float3* means, + const int* radii, + const float* shs, + const bool* clamped, + const glm::vec3* scales, + const glm::vec4* rotations, + const float scale_modifier, + const float* proj, + const glm::vec3* campos, + const float3* dL_dmean2D, + glm::vec3* dL_dmeans, + float* dL_dcolor, + float* dL_dcov3D, + float* dL_dsh, + glm::vec3* dL_dscale, + glm::vec4* dL_drot) +{ + auto idx = cg::this_grid().thread_rank(); + if (idx >= P || !(radii[idx] > 0)) + return; + + float3 m = means[idx]; + + // Taking care of gradients from the screenspace points + float4 m_hom = transformPoint4x4(m, proj); + float m_w = 1.0f / (m_hom.w + 0.0000001f); + + // Compute loss gradient w.r.t. 3D means due to gradients of 2D means + // from rendering procedure + glm::vec3 dL_dmean; + float mul1 = (proj[0] * m.x + proj[4] * m.y + proj[8] * m.z + proj[12]) * m_w * m_w; + float mul2 = (proj[1] * m.x + proj[5] * m.y + proj[9] * m.z + proj[13]) * m_w * m_w; + dL_dmean.x = (proj[0] * m_w - proj[3] * mul1) * dL_dmean2D[idx].x + (proj[1] * m_w - proj[3] * mul2) * dL_dmean2D[idx].y; + dL_dmean.y = (proj[4] * m_w - proj[7] * mul1) * dL_dmean2D[idx].x + (proj[5] * m_w - proj[7] * mul2) * dL_dmean2D[idx].y; + dL_dmean.z = (proj[8] * m_w - proj[11] * mul1) * dL_dmean2D[idx].x + (proj[9] * m_w - proj[11] * mul2) * dL_dmean2D[idx].y; + + // That's the second part of the mean gradient. Previous computation + // of cov2D and following SH conversion also affects it. + dL_dmeans[idx] += dL_dmean; + + // Compute gradient updates due to computing colors from SHs + if (shs) + computeColorFromSH(idx, D, M, (glm::vec3*)means, *campos, shs, clamped, (glm::vec3*)dL_dcolor, (glm::vec3*)dL_dmeans, (glm::vec3*)dL_dsh); + + // Compute gradient updates due to computing covariance from scale/rotation + if (scales) + computeCov3D(idx, scales[idx], scale_modifier, rotations[idx], dL_dcov3D, dL_dscale, dL_drot); +} + +// Backward version of the rendering procedure. +template +__global__ void __launch_bounds__(BLOCK_X * BLOCK_Y) +renderCUDA( + const uint2* __restrict__ ranges, + const uint32_t* __restrict__ point_list, + int W, int H, + const float* __restrict__ bg_color, + const float2* __restrict__ points_xy_image, + const float4* __restrict__ conic_opacity, + const float* __restrict__ colors, + const float* __restrict__ final_Ts, + const uint32_t* __restrict__ n_contrib, + const float* __restrict__ dL_dpixels, + float3* __restrict__ dL_dmean2D, + float4* __restrict__ dL_dconic2D, + float* __restrict__ dL_dopacity, + float* __restrict__ dL_dcolors) +{ + // We rasterize again. Compute necessary block info. + auto block = cg::this_thread_block(); + const uint32_t horizontal_blocks = (W + BLOCK_X - 1) / BLOCK_X; + const uint2 pix_min = { block.group_index().x * BLOCK_X, block.group_index().y * BLOCK_Y }; + const uint2 pix_max = { min(pix_min.x + BLOCK_X, W), min(pix_min.y + BLOCK_Y , H) }; + const uint2 pix = { pix_min.x + block.thread_index().x, pix_min.y + block.thread_index().y }; + const uint32_t pix_id = W * pix.y + pix.x; + const float2 pixf = { (float)pix.x, (float)pix.y }; + + const bool inside = pix.x < W&& pix.y < H; + const uint2 range = ranges[block.group_index().y * horizontal_blocks + block.group_index().x]; + + const int rounds = ((range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE); + + bool done = !inside; + int toDo = range.y - range.x; + + __shared__ int collected_id[BLOCK_SIZE]; + __shared__ float2 collected_xy[BLOCK_SIZE]; + __shared__ float4 collected_conic_opacity[BLOCK_SIZE]; + __shared__ float collected_colors[C * BLOCK_SIZE]; + + // In the forward, we stored the final value for T, the + // product of all (1 - alpha) factors. + const float T_final = inside ? final_Ts[pix_id] : 0; + float T = T_final; + + // We start from the back. The ID of the last contributing + // Gaussian is known from each pixel from the forward. + uint32_t contributor = toDo; + const int last_contributor = inside ? n_contrib[pix_id] : 0; + + float accum_rec[C] = { 0 }; + float dL_dpixel[C]; + if (inside) + for (int i = 0; i < C; i++) + dL_dpixel[i] = dL_dpixels[i * H * W + pix_id]; + + float last_alpha = 0; + float last_color[C] = { 0 }; + + // Gradient of pixel coordinate w.r.t. normalized + // screen-space viewport corrdinates (-1 to 1) + const float ddelx_dx = 0.5 * W; + const float ddely_dy = 0.5 * H; + + // Traverse all Gaussians + for (int i = 0; i < rounds; i++, toDo -= BLOCK_SIZE) + { + // Load auxiliary data into shared memory, start in the BACK + // and load them in revers order. + block.sync(); + const int progress = i * BLOCK_SIZE + block.thread_rank(); + if (range.x + progress < range.y) + { + const int coll_id = point_list[range.y - progress - 1]; + collected_id[block.thread_rank()] = coll_id; + collected_xy[block.thread_rank()] = points_xy_image[coll_id]; + collected_conic_opacity[block.thread_rank()] = conic_opacity[coll_id]; + for (int i = 0; i < C; i++) + collected_colors[i * BLOCK_SIZE + block.thread_rank()] = colors[coll_id * C + i]; + } + block.sync(); + + // Iterate over Gaussians + for (int j = 0; !done && j < min(BLOCK_SIZE, toDo); j++) + { + // Keep track of current Gaussian ID. Skip, if this one + // is behind the last contributor for this pixel. + contributor--; + if (contributor >= last_contributor) + continue; + + // Compute blending values, as before. + const float2 xy = collected_xy[j]; + const float2 d = { xy.x - pixf.x, xy.y - pixf.y }; + const float4 con_o = collected_conic_opacity[j]; + const float power = -0.5f * (con_o.x * d.x * d.x + con_o.z * d.y * d.y) - con_o.y * d.x * d.y; + if (power > 0.0f) + continue; + + const float G = exp(power); + const float alpha = min(0.99f, con_o.w * G); + if (alpha < 1.0f / 255.0f) + continue; + + T = T / (1.f - alpha); + const float dchannel_dcolor = alpha * T; + + // Propagate gradients to per-Gaussian colors and keep + // gradients w.r.t. alpha (blending factor for a Gaussian/pixel + // pair). + float dL_dalpha = 0.0f; + const int global_id = collected_id[j]; + for (int ch = 0; ch < C; ch++) + { + const float c = collected_colors[ch * BLOCK_SIZE + j]; + // Update last color (to be used in the next iteration) + accum_rec[ch] = last_alpha * last_color[ch] + (1.f - last_alpha) * accum_rec[ch]; + last_color[ch] = c; + + const float dL_dchannel = dL_dpixel[ch]; + dL_dalpha += (c - accum_rec[ch]) * dL_dchannel; + // Update the gradients w.r.t. color of the Gaussian. + // Atomic, since this pixel is just one of potentially + // many that were affected by this Gaussian. + atomicAdd(&(dL_dcolors[global_id * C + ch]), dchannel_dcolor * dL_dchannel); + } + dL_dalpha *= T; + // Update last alpha (to be used in the next iteration) + last_alpha = alpha; + + // Account for fact that alpha also influences how much of + // the background color is added if nothing left to blend + float bg_dot_dpixel = 0; + for (int i = 0; i < C; i++) + bg_dot_dpixel += bg_color[i] * dL_dpixel[i]; + dL_dalpha += (-T_final / (1.f - alpha)) * bg_dot_dpixel; + + + // Helpful reusable temporary variables + const float dL_dG = con_o.w * dL_dalpha; + const float gdx = G * d.x; + const float gdy = G * d.y; + const float dG_ddelx = -gdx * con_o.x - gdy * con_o.y; + const float dG_ddely = -gdy * con_o.z - gdx * con_o.y; + + // Update gradients w.r.t. 2D mean position of the Gaussian + atomicAdd(&dL_dmean2D[global_id].x, dL_dG * dG_ddelx * ddelx_dx); + atomicAdd(&dL_dmean2D[global_id].y, dL_dG * dG_ddely * ddely_dy); + + // Update gradients w.r.t. 2D covariance (2x2 matrix, symmetric) + atomicAdd(&dL_dconic2D[global_id].x, -0.5f * gdx * d.x * dL_dG); + atomicAdd(&dL_dconic2D[global_id].y, -0.5f * gdx * d.y * dL_dG); + atomicAdd(&dL_dconic2D[global_id].w, -0.5f * gdy * d.y * dL_dG); + + // Update gradients w.r.t. opacity of the Gaussian + atomicAdd(&(dL_dopacity[global_id]), G * dL_dalpha); + } + } +} + +void BACKWARD::preprocess( + int P, int D, int M, + const float3* means3D, + const int* radii, + const float* shs, + const bool* clamped, + const glm::vec3* scales, + const glm::vec4* rotations, + const float scale_modifier, + const float* cov3Ds, + const float* viewmatrix, + const float* projmatrix, + const float focal_x, float focal_y, + const float tan_fovx, float tan_fovy, + const glm::vec3* campos, + const float3* dL_dmean2D, + const float* dL_dconic, + glm::vec3* dL_dmean3D, + float* dL_dcolor, + float* dL_dcov3D, + float* dL_dsh, + glm::vec3* dL_dscale, + glm::vec4* dL_drot) +{ + // Propagate gradients for the path of 2D conic matrix computation. + // Somewhat long, thus it is its own kernel rather than being part of + // "preprocess". When done, loss gradient w.r.t. 3D means has been + // modified and gradient w.r.t. 3D covariance matrix has been computed. + computeCov2DCUDA << <(P + 255) / 256, 256 >> > ( + P, + means3D, + radii, + cov3Ds, + focal_x, + focal_y, + tan_fovx, + tan_fovy, + viewmatrix, + dL_dconic, + (float3*)dL_dmean3D, + dL_dcov3D); + + // Propagate gradients for remaining steps: finish 3D mean gradients, + // propagate color gradients to SH (if desireD), propagate 3D covariance + // matrix gradients to scale and rotation. + preprocessCUDA << < (P + 255) / 256, 256 >> > ( + P, D, M, + (float3*)means3D, + radii, + shs, + clamped, + (glm::vec3*)scales, + (glm::vec4*)rotations, + scale_modifier, + projmatrix, + campos, + (float3*)dL_dmean2D, + (glm::vec3*)dL_dmean3D, + dL_dcolor, + dL_dcov3D, + dL_dsh, + dL_dscale, + dL_drot); +} + +void BACKWARD::render( + const dim3 grid, const dim3 block, + const uint2* ranges, + const uint32_t* point_list, + int W, int H, + const float* bg_color, + const float2* means2D, + const float4* conic_opacity, + const float* colors, + const float* final_Ts, + const uint32_t* n_contrib, + const float* dL_dpixels, + float3* dL_dmean2D, + float4* dL_dconic2D, + float* dL_dopacity, + float* dL_dcolors) +{ + renderCUDA << > >( + ranges, + point_list, + W, H, + bg_color, + means2D, + conic_opacity, + colors, + final_Ts, + n_contrib, + dL_dpixels, + dL_dmean2D, + dL_dconic2D, + dL_dopacity, + dL_dcolors + ); +} \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/backward.h b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/backward.h new file mode 100644 index 0000000000000000000000000000000000000000..93dd2e4be371d36385b102b13f59f37c1d019223 --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/backward.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2023, Inria + * GRAPHDECO research group, https://team.inria.fr/graphdeco + * All rights reserved. + * + * This software is free for non-commercial, research and evaluation use + * under the terms of the LICENSE.md file. + * + * For inquiries contact george.drettakis@inria.fr + */ + +#ifndef CUDA_RASTERIZER_BACKWARD_H_INCLUDED +#define CUDA_RASTERIZER_BACKWARD_H_INCLUDED + +#include +#include "cuda_runtime.h" +#include "device_launch_parameters.h" +#define GLM_FORCE_CUDA +#include + +namespace BACKWARD +{ + void render( + const dim3 grid, dim3 block, + const uint2* ranges, + const uint32_t* point_list, + int W, int H, + const float* bg_color, + const float2* means2D, + const float4* conic_opacity, + const float* colors, + const float* final_Ts, + const uint32_t* n_contrib, + const float* dL_dpixels, + float3* dL_dmean2D, + float4* dL_dconic2D, + float* dL_dopacity, + float* dL_dcolors); + + void preprocess( + int P, int D, int M, + const float3* means, + const int* radii, + const float* shs, + const bool* clamped, + const glm::vec3* scales, + const glm::vec4* rotations, + const float scale_modifier, + const float* cov3Ds, + const float* view, + const float* proj, + const float focal_x, float focal_y, + const float tan_fovx, float tan_fovy, + const glm::vec3* campos, + const float3* dL_dmean2D, + const float* dL_dconics, + glm::vec3* dL_dmeans, + float* dL_dcolor, + float* dL_dcov3D, + float* dL_dsh, + glm::vec3* dL_dscale, + glm::vec4* dL_drot); +} + +#endif \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/config.h b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/config.h new file mode 100644 index 0000000000000000000000000000000000000000..2a912fb34824349caadffe435fc1ab4b31e5aa4f --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/config.h @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023, Inria + * GRAPHDECO research group, https://team.inria.fr/graphdeco + * All rights reserved. + * + * This software is free for non-commercial, research and evaluation use + * under the terms of the LICENSE.md file. + * + * For inquiries contact george.drettakis@inria.fr + */ + +#ifndef CUDA_RASTERIZER_CONFIG_H_INCLUDED +#define CUDA_RASTERIZER_CONFIG_H_INCLUDED + +#define NUM_CHANNELS 3 // Default 3, RGB +#define BLOCK_X 16 +#define BLOCK_Y 16 + +#endif \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/forward.cu b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/forward.cu new file mode 100644 index 0000000000000000000000000000000000000000..efaf7f0e47373ffefca267ee12078b9956706b21 --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/forward.cu @@ -0,0 +1,481 @@ +/* + * Copyright (C) 2023, Inria + * GRAPHDECO research group, https://team.inria.fr/graphdeco + * All rights reserved. + * + * This software is free for non-commercial, research and evaluation use + * under the terms of the LICENSE.md file. + * + * For inquiries contact george.drettakis@inria.fr + */ + +#include "forward.h" +#include "auxiliary.h" +#include +#include +namespace cg = cooperative_groups; + +// Forward method for converting the input spherical harmonics +// coefficients of each Gaussian to a simple RGB color. +__device__ glm::vec3 computeColorFromSH(int idx, int deg, int max_coeffs, const glm::vec3* means, glm::vec3 campos, const float* shs, bool* clamped) +{ + // The implementation is loosely based on code for + // "Differentiable Point-Based Radiance Fields for + // Efficient View Synthesis" by Zhang et al. (2022) + glm::vec3 pos = means[idx]; + glm::vec3 dir = pos - campos; + dir = dir / glm::length(dir); + + glm::vec3* sh = ((glm::vec3*)shs) + idx * max_coeffs; + glm::vec3 result = SH_C0 * sh[0]; + + if (deg > 0) + { + float x = dir.x; + float y = dir.y; + float z = dir.z; + result = result - SH_C1 * y * sh[1] + SH_C1 * z * sh[2] - SH_C1 * x * sh[3]; + + if (deg > 1) + { + float xx = x * x, yy = y * y, zz = z * z; + float xy = x * y, yz = y * z, xz = x * z; + result = result + + SH_C2[0] * xy * sh[4] + + SH_C2[1] * yz * sh[5] + + SH_C2[2] * (2.0f * zz - xx - yy) * sh[6] + + SH_C2[3] * xz * sh[7] + + SH_C2[4] * (xx - yy) * sh[8]; + + if (deg > 2) + { + result = result + + SH_C3[0] * y * (3.0f * xx - yy) * sh[9] + + SH_C3[1] * xy * z * sh[10] + + SH_C3[2] * y * (4.0f * zz - xx - yy) * sh[11] + + SH_C3[3] * z * (2.0f * zz - 3.0f * xx - 3.0f * yy) * sh[12] + + SH_C3[4] * x * (4.0f * zz - xx - yy) * sh[13] + + SH_C3[5] * z * (xx - yy) * sh[14] + + SH_C3[6] * x * (xx - 3.0f * yy) * sh[15]; + } + } + } + result += 0.5f; + + // RGB colors are clamped to positive values. If values are + // clamped, we need to keep track of this for the backward pass. + clamped[3 * idx + 0] = (result.x < 0); + clamped[3 * idx + 1] = (result.y < 0); + clamped[3 * idx + 2] = (result.z < 0); + return glm::max(result, 0.0f); +} + +// Forward version of 2D covariance matrix computation +__device__ float3 computeCov2D(const float3& mean, float focal_x, float focal_y, float tan_fovx, float tan_fovy, const float* cov3D, const float* viewmatrix) +{ + // The following models the steps outlined by equations 29 + // and 31 in "EWA Splatting" (Zwicker et al., 2002). + // Additionally considers aspect / scaling of viewport. + // Transposes used to account for row-/column-major conventions. + float3 t = transformPoint4x3(mean, viewmatrix); + + const float limx = 1.3f * tan_fovx; + const float limy = 1.3f * tan_fovy; + const float txtz = t.x / t.z; + const float tytz = t.y / t.z; + t.x = min(limx, max(-limx, txtz)) * t.z; + t.y = min(limy, max(-limy, tytz)) * t.z; + + glm::mat3 J = glm::mat3( + focal_x / t.z, 0.0f, -(focal_x * t.x) / (t.z * t.z), + 0.0f, focal_y / t.z, -(focal_y * t.y) / (t.z * t.z), + 0, 0, 0); + + glm::mat3 W = glm::mat3( + viewmatrix[0], viewmatrix[4], viewmatrix[8], + viewmatrix[1], viewmatrix[5], viewmatrix[9], + viewmatrix[2], viewmatrix[6], viewmatrix[10]); + + glm::mat3 T = W * J; + + glm::mat3 Vrk = glm::mat3( + cov3D[0], cov3D[1], cov3D[2], + cov3D[1], cov3D[3], cov3D[4], + cov3D[2], cov3D[4], cov3D[5]); + + glm::mat3 cov = glm::transpose(T) * glm::transpose(Vrk) * T; + + // Apply low-pass filter: every Gaussian should be at least + // one pixel wide/high. Discard 3rd row and column. + cov[0][0] += 0.3f; + cov[1][1] += 0.3f; + return { float(cov[0][0]), float(cov[0][1]), float(cov[1][1]) }; +} + +// Forward method for converting scale and rotation properties of each +// Gaussian to a 3D covariance matrix in world space. Also takes care +// of quaternion normalization. +__device__ void computeCov3D(const glm::vec3 scale, float mod, const glm::vec4 rot, float* cov3D) +{ + // Create scaling matrix + glm::mat3 S = glm::mat3(1.0f); + S[0][0] = mod * scale.x; + S[1][1] = mod * scale.y; + S[2][2] = mod * scale.z; + + // Normalize quaternion to get valid rotation + glm::vec4 q = rot;// / glm::length(rot); + float r = q.x; + float x = q.y; + float y = q.z; + float z = q.w; + + // Compute rotation matrix from quaternion + glm::mat3 R = glm::mat3( + 1.f - 2.f * (y * y + z * z), 2.f * (x * y - r * z), 2.f * (x * z + r * y), + 2.f * (x * y + r * z), 1.f - 2.f * (x * x + z * z), 2.f * (y * z - r * x), + 2.f * (x * z - r * y), 2.f * (y * z + r * x), 1.f - 2.f * (x * x + y * y) + ); + + glm::mat3 M = S * R; + + // Compute 3D world covariance matrix Sigma + glm::mat3 Sigma = glm::transpose(M) * M; + + // Covariance is symmetric, only store upper right + cov3D[0] = Sigma[0][0]; + cov3D[1] = Sigma[0][1]; + cov3D[2] = Sigma[0][2]; + cov3D[3] = Sigma[1][1]; + cov3D[4] = Sigma[1][2]; + cov3D[5] = Sigma[2][2]; +} + +// Perform initial steps for each Gaussian prior to rasterization. +template +__global__ void preprocessCUDA(int P, int D, int M, + const float* orig_points, + const glm::vec3* scales, + const float scale_modifier, + const glm::vec4* rotations, + const float* opacities, + const float* shs, + bool* clamped, + const float* cov3D_precomp, + const float* colors_precomp, + const float* viewmatrix, + const float* projmatrix, + const glm::vec3* cam_pos, + const int W, int H, + const float tan_fovx, float tan_fovy, + const float focal_x, float focal_y, + int* radii, + float2* points_xy_image, + float* depths, + float* cov3Ds, + float* rgb, + float4* conic_opacity, + const dim3 grid, + uint32_t* tiles_touched, + bool prefiltered, + const float z_threshold) +{ + auto idx = cg::this_grid().thread_rank(); + if (idx >= P) + return; + + // Initialize radius and touched tiles to 0. If this isn't changed, + // this Gaussian will not be processed further. + radii[idx] = 0; + tiles_touched[idx] = 0; + + // Perform near culling, quit if outside. + float3 p_view; + if (!in_frustum(idx, orig_points, viewmatrix, projmatrix, z_threshold, prefiltered, p_view)) + return; + + // Transform point by projecting + float3 p_orig = { orig_points[3 * idx], orig_points[3 * idx + 1], orig_points[3 * idx + 2] }; + float4 p_hom = transformPoint4x4(p_orig, projmatrix); + float p_w = 1.0f / (p_hom.w + 0.0000001f); + float3 p_proj = { p_hom.x * p_w, p_hom.y * p_w, p_hom.z * p_w }; + + // If 3D covariance matrix is precomputed, use it, otherwise compute + // from scaling and rotation parameters. + const float* cov3D; + if (cov3D_precomp != nullptr) + { + cov3D = cov3D_precomp + idx * 6; + } + else + { + computeCov3D(scales[idx], scale_modifier, rotations[idx], cov3Ds + idx * 6); + cov3D = cov3Ds + idx * 6; + } + + // Compute 2D screen-space covariance matrix + float3 cov = computeCov2D(p_orig, focal_x, focal_y, tan_fovx, tan_fovy, cov3D, viewmatrix); + + // Invert covariance (EWA algorithm) + float det = (cov.x * cov.z - cov.y * cov.y); + if (det == 0.0f) + return; + float det_inv = 1.f / det; + float3 conic = { cov.z * det_inv, -cov.y * det_inv, cov.x * det_inv }; + + // Compute extent in screen space (by finding eigenvalues of + // 2D covariance matrix). Use extent to compute a bounding rectangle + // of screen-space tiles that this Gaussian overlaps with. Quit if + // rectangle covers 0 tiles. + float mid = 0.5f * (cov.x + cov.z); + float lambda1 = mid + sqrt(max(0.1f, mid * mid - det)); + float lambda2 = mid - sqrt(max(0.1f, mid * mid - det)); + float my_radius = ceil(3.f * sqrt(max(lambda1, lambda2))); + float2 point_image = { ndc2Pix(p_proj.x, W), ndc2Pix(p_proj.y, H) }; + uint2 rect_min, rect_max; + getRect(point_image, my_radius, rect_min, rect_max, grid); + if ((rect_max.x - rect_min.x) * (rect_max.y - rect_min.y) == 0) + return; + + // If colors have been precomputed, use them, otherwise convert + // spherical harmonics coefficients to RGB color. + if (colors_precomp == nullptr) + { + glm::vec3 result = computeColorFromSH(idx, D, M, (glm::vec3*)orig_points, *cam_pos, shs, clamped); + rgb[idx * C + 0] = result.x; + rgb[idx * C + 1] = result.y; + rgb[idx * C + 2] = result.z; + } + + // Store some useful helper data for the next steps. + depths[idx] = p_view.z; + radii[idx] = my_radius; + points_xy_image[idx] = point_image; + // Inverse 2D covariance and opacity neatly pack into one float4 + conic_opacity[idx] = { conic.x, conic.y, conic.z, opacities[idx] }; + tiles_touched[idx] = (rect_max.y - rect_min.y) * (rect_max.x - rect_min.x); +} + +// Main rasterization method. Collaboratively works on one tile per +// block, each thread treats one pixel. Alternates between fetching +// and rasterizing data. +template +__global__ void __launch_bounds__(BLOCK_X * BLOCK_Y) +renderCUDA( + const uint2* __restrict__ ranges, + const uint32_t* __restrict__ point_list, + int W, int H, + const float2* __restrict__ points_xy_image, + const float* __restrict__ features, + const float4* __restrict__ conic_opacity, + float* __restrict__ final_T, + uint32_t* __restrict__ n_contrib, + const float* __restrict__ bg_color, + float* __restrict__ out_color, + const float* __restrict__ depth, + float* __restrict__ out_depth) +{ + // Identify current tile and associated min/max pixel range. + auto block = cg::this_thread_block(); + uint32_t horizontal_blocks = (W + BLOCK_X - 1) / BLOCK_X; + uint2 pix_min = { block.group_index().x * BLOCK_X, block.group_index().y * BLOCK_Y }; + uint2 pix_max = { min(pix_min.x + BLOCK_X, W), min(pix_min.y + BLOCK_Y , H) }; + uint2 pix = { pix_min.x + block.thread_index().x, pix_min.y + block.thread_index().y }; + uint32_t pix_id = W * pix.y + pix.x; + float2 pixf = { (float)pix.x, (float)pix.y }; + + // Check if this thread is associated with a valid pixel or outside. + bool inside = pix.x < W&& pix.y < H; + // Done threads can help with fetching, but don't rasterize + bool done = !inside; + + // Load start/end range of IDs to process in bit sorted list. + uint2 range = ranges[block.group_index().y * horizontal_blocks + block.group_index().x]; + const int rounds = ((range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE); + int toDo = range.y - range.x; + + // Allocate storage for batches of collectively fetched data. + __shared__ int collected_id[BLOCK_SIZE]; + __shared__ float2 collected_xy[BLOCK_SIZE]; + __shared__ float4 collected_conic_opacity[BLOCK_SIZE]; + __shared__ float collected_depth[BLOCK_SIZE]; + + // Initialize helper variables + float T = 1.0f; + uint32_t contributor = 0; + uint32_t last_contributor = 0; + float C[CHANNELS] = { 0 }; +// float D = 0.0f; // Mean Depth + float D = 15.0f; // Median Depth. TODO: This is a hack setting max_depth to 15 + + // Iterate over batches until all done or range is complete + for (int i = 0; i < rounds; i++, toDo -= BLOCK_SIZE) + { + // End if entire block votes that it is done rasterizing + int num_done = __syncthreads_count(done); + if (num_done == BLOCK_SIZE) + break; + + // Collectively fetch per-Gaussian data from global to shared + int progress = i * BLOCK_SIZE + block.thread_rank(); + if (range.x + progress < range.y) + { + int coll_id = point_list[range.x + progress]; + collected_id[block.thread_rank()] = coll_id; + collected_xy[block.thread_rank()] = points_xy_image[coll_id]; + collected_conic_opacity[block.thread_rank()] = conic_opacity[coll_id]; + collected_depth[block.thread_rank()] = depth[coll_id]; + } + block.sync(); + + // Iterate over current batch + for (int j = 0; !done && j < min(BLOCK_SIZE, toDo); j++) + { + // Keep track of current position in range + contributor++; + + // Resample using conic matrix (cf. "Surface + // Splatting" by Zwicker et al., 2001) + float2 xy = collected_xy[j]; + float2 d = { xy.x - pixf.x, xy.y - pixf.y }; + float4 con_o = collected_conic_opacity[j]; + float power = -0.5f * (con_o.x * d.x * d.x + con_o.z * d.y * d.y) - con_o.y * d.x * d.y; + if (power > 0.0f) + continue; + + // Eq. (2) from 3D Gaussian splatting paper. + // Obtain alpha by multiplying with Gaussian opacity + // and its exponential falloff from mean. + // Avoid numerical instabilities (see paper appendix). + float alpha = min(0.99f, con_o.w * exp(power)); + if (alpha < 1.0f / 255.0f) + continue; + float test_T = T * (1 - alpha); + if (test_T < 0.0001f) + { + done = true; + continue; + } + + // Eq. (3) from 3D Gaussian splatting paper. + for (int ch = 0; ch < CHANNELS; ch++) + C[ch] += features[collected_id[j] * CHANNELS + ch] * alpha * T; + + // Mean depth: +// float dep = collected_depth[j]; +// D += dep * alpha * T; + + // Median depth: + if (T > 0.5f && test_T < 0.5) + { + float dep = collected_depth[j]; + D = dep; + } + + + T = test_T; + + // Keep track of last range entry to update this + // pixel. + last_contributor = contributor; + } + } + + // All threads that treat valid pixel write out their final + // rendering data to the frame and auxiliary buffers. + if (inside) + { + final_T[pix_id] = T; + n_contrib[pix_id] = last_contributor; + for (int ch = 0; ch < CHANNELS; ch++) + out_color[ch * H * W + pix_id] = C[ch] + T * bg_color[ch]; + out_depth[pix_id] = D; + } +} + +void FORWARD::render( + const dim3 grid, dim3 block, + const uint2* ranges, + const uint32_t* point_list, + int W, int H, + const float2* means2D, + const float* colors, + const float4* conic_opacity, + float* final_T, + uint32_t* n_contrib, + const float* bg_color, + float* out_color, + const float* depth, + float* out_depth) +{ + renderCUDA << > > ( + ranges, + point_list, + W, H, + means2D, + colors, + conic_opacity, + final_T, + n_contrib, + bg_color, + out_color, + depth, + out_depth); +} + +void FORWARD::preprocess(int P, int D, int M, + const float* means3D, + const glm::vec3* scales, + const float scale_modifier, + const glm::vec4* rotations, + const float* opacities, + const float* shs, + bool* clamped, + const float* cov3D_precomp, + const float* colors_precomp, + const float* viewmatrix, + const float* projmatrix, + const glm::vec3* cam_pos, + const int W, int H, + const float focal_x, float focal_y, + const float tan_fovx, float tan_fovy, + int* radii, + float2* means2D, + float* depths, + float* cov3Ds, + float* rgb, + float4* conic_opacity, + const dim3 grid, + uint32_t* tiles_touched, + bool prefiltered, + const float z_threshold) +{ + preprocessCUDA << <(P + 255) / 256, 256 >> > ( + P, D, M, + means3D, + scales, + scale_modifier, + rotations, + opacities, + shs, + clamped, + cov3D_precomp, + colors_precomp, + viewmatrix, + projmatrix, + cam_pos, + W, H, + tan_fovx, tan_fovy, + focal_x, focal_y, + radii, + means2D, + depths, + cov3Ds, + rgb, + conic_opacity, + grid, + tiles_touched, + prefiltered, + z_threshold + ); +} \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/forward.h b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/forward.h new file mode 100644 index 0000000000000000000000000000000000000000..7b33fa865ec4c8b28e0923f6f574ecd7ed06a81b --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/forward.h @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2023, Inria + * GRAPHDECO research group, https://team.inria.fr/graphdeco + * All rights reserved. + * + * This software is free for non-commercial, research and evaluation use + * under the terms of the LICENSE.md file. + * + * For inquiries contact george.drettakis@inria.fr + */ + +#ifndef CUDA_RASTERIZER_FORWARD_H_INCLUDED +#define CUDA_RASTERIZER_FORWARD_H_INCLUDED + +#include +#include "cuda_runtime.h" +#include "device_launch_parameters.h" +#define GLM_FORCE_CUDA +#include + +namespace FORWARD +{ + // Perform initial steps for each Gaussian prior to rasterization. + void preprocess(int P, int D, int M, + const float* orig_points, + const glm::vec3* scales, + const float scale_modifier, + const glm::vec4* rotations, + const float* opacities, + const float* shs, + bool* clamped, + const float* cov3D_precomp, + const float* colors_precomp, + const float* viewmatrix, + const float* projmatrix, + const glm::vec3* cam_pos, + const int W, int H, + const float focal_x, float focal_y, + const float tan_fovx, float tan_fovy, + int* radii, + float2* points_xy_image, + float* depths, + float* cov3Ds, + float* colors, + float4* conic_opacity, + const dim3 grid, + uint32_t* tiles_touched, + bool prefiltered, + const float z_threshold); + + // Main rasterization method. + void render( + const dim3 grid, dim3 block, + const uint2* ranges, + const uint32_t* point_list, + int W, int H, + const float2* points_xy_image, + const float* features, + const float4* conic_opacity, + float* final_T, + uint32_t* n_contrib, + const float* bg_color, + float* out_color, + const float* depth, + float* out_depth); +} + + +#endif \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/rasterizer.h b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/rasterizer.h new file mode 100644 index 0000000000000000000000000000000000000000..b2a75085dc6d73d2812339f80bd40e9d5b13ef1e --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/rasterizer.h @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2023, Inria + * GRAPHDECO research group, https://team.inria.fr/graphdeco + * All rights reserved. + * + * This software is free for non-commercial, research and evaluation use + * under the terms of the LICENSE.md file. + * + * For inquiries contact george.drettakis@inria.fr + */ + +#ifndef CUDA_RASTERIZER_H_INCLUDED +#define CUDA_RASTERIZER_H_INCLUDED + +#include +#include + +namespace CudaRasterizer +{ + class Rasterizer + { + public: + + static void markVisible( + int P, + float* means3D, + float* viewmatrix, + float* projmatrix, + bool* present); + + static int forward( + std::function geometryBuffer, + std::function binningBuffer, + std::function imageBuffer, + const int P, int D, int M, + const float* background, + const int width, int height, + const float* means3D, + const float* shs, + const float* colors_precomp, + const float* opacities, + const float* scales, + const float scale_modifier, + const float* rotations, + const float* cov3D_precomp, + const float* viewmatrix, + const float* projmatrix, + const float* cam_pos, + const float tan_fovx, float tan_fovy, + const bool prefiltered, + const float z_threshold, + float* out_color, + float* out_depth, + int* radii = nullptr); + + static void backward( + const int P, int D, int M, int R, + const float* background, + const int width, int height, + const float* means3D, + const float* shs, + const float* colors_precomp, + const float* scales, + const float scale_modifier, + const float* rotations, + const float* cov3D_precomp, + const float* viewmatrix, + const float* projmatrix, + const float* campos, + const float tan_fovx, float tan_fovy, + const int* radii, + char* geom_buffer, + char* binning_buffer, + char* image_buffer, + const float* dL_dpix, + float* dL_dmean2D, + float* dL_dconic, + float* dL_dopacity, + float* dL_dcolor, + float* dL_dmean3D, + float* dL_dcov3D, + float* dL_dsh, + float* dL_dscale, + float* dL_drot); + }; +}; + +#endif \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/rasterizer_impl.cu b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/rasterizer_impl.cu new file mode 100644 index 0000000000000000000000000000000000000000..2ce10abd5c9e34ed104b81cc328d23f68f0750ee --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/rasterizer_impl.cu @@ -0,0 +1,438 @@ +/* + * Copyright (C) 2023, Inria + * GRAPHDECO research group, https://team.inria.fr/graphdeco + * All rights reserved. + * + * This software is free for non-commercial, research and evaluation use + * under the terms of the LICENSE.md file. + * + * For inquiries contact george.drettakis@inria.fr + */ + +#include "rasterizer_impl.h" +#include +#include +#include +#include +#include +#include "cuda_runtime.h" +#include "device_launch_parameters.h" +#include +#include +#define GLM_FORCE_CUDA +#include + +#include +#include +namespace cg = cooperative_groups; + +#include "auxiliary.h" +#include "forward.h" +#include "backward.h" + +// Helper function to find the next-highest bit of the MSB +// on the CPU. +uint32_t getHigherMsb(uint32_t n) +{ + uint32_t msb = sizeof(n) * 4; + uint32_t step = msb; + while (step > 1) + { + step /= 2; + if (n >> msb) + msb += step; + else + msb -= step; + } + if (n >> msb) + msb++; + return msb; +} + +// Wrapper method to call auxiliary coarse frustum containment test. +// Mark all Gaussians that pass it. +__global__ void checkFrustum(int P, + const float* orig_points, + const float* viewmatrix, + const float* projmatrix, + bool* present) +{ + auto idx = cg::this_grid().thread_rank(); + if (idx >= P) + return; + + float3 p_view; + present[idx] = in_frustum(idx, orig_points, viewmatrix, projmatrix, 0.01f, false, p_view); +} + +// Generates one key/value pair for all Gaussian / tile overlaps. +// Run once per Gaussian (1:N mapping). +__global__ void duplicateWithKeys( + int P, + const float2* points_xy, + const float* depths, + const uint32_t* offsets, + uint64_t* gaussian_keys_unsorted, + uint32_t* gaussian_values_unsorted, + int* radii, + dim3 grid) +{ + auto idx = cg::this_grid().thread_rank(); + if (idx >= P) + return; + + // Generate no key/value pair for invisible Gaussians + if (radii[idx] > 0) + { + // Find this Gaussian's offset in buffer for writing keys/values. + uint32_t off = (idx == 0) ? 0 : offsets[idx - 1]; + uint2 rect_min, rect_max; + + getRect(points_xy[idx], radii[idx], rect_min, rect_max, grid); + + // For each tile that the bounding rect overlaps, emit a + // key/value pair. The key is | tile ID | depth |, + // and the value is the ID of the Gaussian. Sorting the values + // with this key yields Gaussian IDs in a list, such that they + // are first sorted by tile and then by depth. + for (int y = rect_min.y; y < rect_max.y; y++) + { + for (int x = rect_min.x; x < rect_max.x; x++) + { + uint64_t key = y * grid.x + x; + key <<= 32; + key |= *((uint32_t*)&depths[idx]); + gaussian_keys_unsorted[off] = key; + gaussian_values_unsorted[off] = idx; + off++; + } + } + } +} + +// Check keys to see if it is at the start/end of one tile's range in +// the full sorted list. If yes, write start/end of this tile. +// Run once per instanced (duplicated) Gaussian ID. +__global__ void identifyTileRanges(int L, uint64_t* point_list_keys, uint2* ranges) +{ + auto idx = cg::this_grid().thread_rank(); + if (idx >= L) + return; + + // Read tile ID from key. Update start/end of tile range if at limit. + uint64_t key = point_list_keys[idx]; + uint32_t currtile = key >> 32; + if (idx == 0) + ranges[currtile].x = 0; + else + { + uint32_t prevtile = point_list_keys[idx - 1] >> 32; + if (currtile != prevtile) + { + ranges[prevtile].y = idx; + ranges[currtile].x = idx; + } + } + if (idx == L - 1) + ranges[currtile].y = L; +} + +// Mark Gaussians as visible/invisible, based on view frustum testing +void CudaRasterizer::Rasterizer::markVisible( + int P, + float* means3D, + float* viewmatrix, + float* projmatrix, + bool* present) +{ + checkFrustum << <(P + 255) / 256, 256 >> > ( + P, + means3D, + viewmatrix, projmatrix, + present); +} + +CudaRasterizer::GeometryState CudaRasterizer::GeometryState::fromChunk(char*& chunk, size_t P) +{ + GeometryState geom; + obtain(chunk, geom.depths, P, 128); + obtain(chunk, geom.clamped, P * 3, 128); + obtain(chunk, geom.internal_radii, P, 128); + obtain(chunk, geom.means2D, P, 128); + obtain(chunk, geom.cov3D, P * 6, 128); + obtain(chunk, geom.conic_opacity, P, 128); + obtain(chunk, geom.rgb, P * 3, 128); + obtain(chunk, geom.tiles_touched, P, 128); + cub::DeviceScan::InclusiveSum(nullptr, geom.scan_size, geom.tiles_touched, geom.tiles_touched, P); + obtain(chunk, geom.scanning_space, geom.scan_size, 128); + obtain(chunk, geom.point_offsets, P, 128); + return geom; +} + +CudaRasterizer::ImageState CudaRasterizer::ImageState::fromChunk(char*& chunk, size_t N) +{ + ImageState img; + obtain(chunk, img.accum_alpha, N, 128); + obtain(chunk, img.n_contrib, N, 128); + obtain(chunk, img.ranges, N, 128); + return img; +} + +CudaRasterizer::BinningState CudaRasterizer::BinningState::fromChunk(char*& chunk, size_t P) +{ + BinningState binning; + obtain(chunk, binning.point_list, P, 128); + obtain(chunk, binning.point_list_unsorted, P, 128); + obtain(chunk, binning.point_list_keys, P, 128); + obtain(chunk, binning.point_list_keys_unsorted, P, 128); + cub::DeviceRadixSort::SortPairs( + nullptr, binning.sorting_size, + binning.point_list_keys_unsorted, binning.point_list_keys, + binning.point_list_unsorted, binning.point_list, P); + obtain(chunk, binning.list_sorting_space, binning.sorting_size, 128); + return binning; +} + +// Forward rendering procedure for differentiable rasterization +// of Gaussians. +int CudaRasterizer::Rasterizer::forward( + std::function geometryBuffer, + std::function binningBuffer, + std::function imageBuffer, + const int P, int D, int M, + const float* background, + const int width, int height, + const float* means3D, + const float* shs, + const float* colors_precomp, + const float* opacities, + const float* scales, + const float scale_modifier, + const float* rotations, + const float* cov3D_precomp, + const float* viewmatrix, + const float* projmatrix, + const float* cam_pos, + const float tan_fovx, float tan_fovy, + const bool prefiltered, + const float z_threshold, + float* out_color, + float* out_depth, + int* radii) +{ + const float focal_y = height / (2.0f * tan_fovy); + const float focal_x = width / (2.0f * tan_fovx); + + size_t chunk_size = required(P); + char* chunkptr = geometryBuffer(chunk_size); + GeometryState geomState = GeometryState::fromChunk(chunkptr, P); + + if (radii == nullptr) + { + radii = geomState.internal_radii; + } + + dim3 tile_grid((width + BLOCK_X - 1) / BLOCK_X, (height + BLOCK_Y - 1) / BLOCK_Y, 1); + dim3 block(BLOCK_X, BLOCK_Y, 1); + + // Dynamically resize image-based auxiliary buffers during training + int img_chunk_size = required(width * height); + char* img_chunkptr = imageBuffer(img_chunk_size); + ImageState imgState = ImageState::fromChunk(img_chunkptr, width * height); + + if (NUM_CHANNELS != 3 && colors_precomp == nullptr) + { + throw std::runtime_error("For non-RGB, provide precomputed Gaussian colors!"); + } + + // Run preprocessing per-Gaussian (transformation, bounding, conversion of SHs to RGB) + FORWARD::preprocess( + P, D, M, + means3D, + (glm::vec3*)scales, + scale_modifier, + (glm::vec4*)rotations, + opacities, + shs, + geomState.clamped, + cov3D_precomp, + colors_precomp, + viewmatrix, projmatrix, + (glm::vec3*)cam_pos, + width, height, + focal_x, focal_y, + tan_fovx, tan_fovy, + radii, + geomState.means2D, + geomState.depths, + geomState.cov3D, + geomState.rgb, + geomState.conic_opacity, + tile_grid, + geomState.tiles_touched, + prefiltered, + z_threshold + ); + + // Compute prefix sum over full list of touched tile counts by Gaussians + // E.g., [2, 3, 0, 2, 1] -> [2, 5, 5, 7, 8] + cub::DeviceScan::InclusiveSum(geomState.scanning_space, geomState.scan_size, + geomState.tiles_touched, geomState.point_offsets, P); + + // Retrieve total number of Gaussian instances to launch and resize aux buffers + int num_rendered; + cudaMemcpy(&num_rendered, geomState.point_offsets + P - 1, sizeof(int), cudaMemcpyDeviceToHost); + + int binning_chunk_size = required(num_rendered); + char* binning_chunkptr = binningBuffer(binning_chunk_size); + BinningState binningState = BinningState::fromChunk(binning_chunkptr, num_rendered); + + // For each instance to be rendered, produce adequate [ tile | depth ] key + // and corresponding dublicated Gaussian indices to be sorted + duplicateWithKeys << <(P + 255) / 256, 256 >> > ( + P, + geomState.means2D, + geomState.depths, + geomState.point_offsets, + binningState.point_list_keys_unsorted, + binningState.point_list_unsorted, + radii, + tile_grid + ); + + int bit = getHigherMsb(tile_grid.x * tile_grid.y); + + // Sort complete list of (duplicated) Gaussian indices by keys + cub::DeviceRadixSort::SortPairs( + binningState.list_sorting_space, + binningState.sorting_size, + binningState.point_list_keys_unsorted, binningState.point_list_keys, + binningState.point_list_unsorted, binningState.point_list, + num_rendered, 0, 32 + bit); + + cudaMemset(imgState.ranges, 0, tile_grid.x * tile_grid.y * sizeof(uint2)); + + // Identify start and end of per-tile workloads in sorted list + if (num_rendered > 0) + identifyTileRanges << <(num_rendered + 255) / 256, 256 >> > ( + num_rendered, + binningState.point_list_keys, + imgState.ranges + ); + + // Let each tile blend its range of Gaussians independently in parallel + const float* feature_ptr = colors_precomp != nullptr ? colors_precomp : geomState.rgb; + FORWARD::render( + tile_grid, block, + imgState.ranges, + binningState.point_list, + width, height, + geomState.means2D, + feature_ptr, + geomState.conic_opacity, + imgState.accum_alpha, + imgState.n_contrib, + background, + out_color, + geomState.depths, + out_depth); + + return num_rendered; +} + +// Produce necessary gradients for optimization, corresponding +// to forward render pass +void CudaRasterizer::Rasterizer::backward( + const int P, int D, int M, int R, + const float* background, + const int width, int height, + const float* means3D, + const float* shs, + const float* colors_precomp, + const float* scales, + const float scale_modifier, + const float* rotations, + const float* cov3D_precomp, + const float* viewmatrix, + const float* projmatrix, + const float* campos, + const float tan_fovx, float tan_fovy, + const int* radii, + char* geom_buffer, + char* binning_buffer, + char* img_buffer, + const float* dL_dpix, + float* dL_dmean2D, + float* dL_dconic, + float* dL_dopacity, + float* dL_dcolor, + float* dL_dmean3D, + float* dL_dcov3D, + float* dL_dsh, + float* dL_dscale, + float* dL_drot) +{ + GeometryState geomState = GeometryState::fromChunk(geom_buffer, P); + BinningState binningState = BinningState::fromChunk(binning_buffer, R); + ImageState imgState = ImageState::fromChunk(img_buffer, width * height); + + if (radii == nullptr) + { + radii = geomState.internal_radii; + } + + const float focal_y = height / (2.0f * tan_fovy); + const float focal_x = width / (2.0f * tan_fovx); + + const dim3 tile_grid((width + BLOCK_X - 1) / BLOCK_X, (height + BLOCK_Y - 1) / BLOCK_Y, 1); + const dim3 block(BLOCK_X, BLOCK_Y, 1); + + // Compute loss gradients w.r.t. 2D mean position, conic matrix, + // opacity and RGB of Gaussians from per-pixel loss gradients. + // If we were given precomputed colors and not SHs, use them. + const float* color_ptr = (colors_precomp != nullptr) ? colors_precomp : geomState.rgb; + BACKWARD::render( + tile_grid, + block, + imgState.ranges, + binningState.point_list, + width, height, + background, + geomState.means2D, + geomState.conic_opacity, + color_ptr, + imgState.accum_alpha, + imgState.n_contrib, + dL_dpix, + (float3*)dL_dmean2D, + (float4*)dL_dconic, + dL_dopacity, + dL_dcolor); + + // Take care of the rest of preprocessing. Was the precomputed covariance + // given to us or a scales/rot pair? If precomputed, pass that. If not, + // use the one we computed ourselves. + const float* cov3D_ptr = (cov3D_precomp != nullptr) ? cov3D_precomp : geomState.cov3D; + BACKWARD::preprocess(P, D, M, + (float3*)means3D, + radii, + shs, + geomState.clamped, + (glm::vec3*)scales, + (glm::vec4*)rotations, + scale_modifier, + cov3D_ptr, + viewmatrix, + projmatrix, + focal_x, focal_y, + tan_fovx, tan_fovy, + (glm::vec3*)campos, + (float3*)dL_dmean2D, + dL_dconic, + (glm::vec3*)dL_dmean3D, + dL_dcolor, + dL_dcov3D, + dL_dsh, + (glm::vec3*)dL_dscale, + (glm::vec4*)dL_drot); +} \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/rasterizer_impl.h b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/rasterizer_impl.h new file mode 100644 index 0000000000000000000000000000000000000000..abb23f4e7a4aef67f57a2152fdf3c13dc0d1438e --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/cuda_rasterizer/rasterizer_impl.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2023, Inria + * GRAPHDECO research group, https://team.inria.fr/graphdeco + * All rights reserved. + * + * This software is free for non-commercial, research and evaluation use + * under the terms of the LICENSE.md file. + * + * For inquiries contact george.drettakis@inria.fr + */ + +#pragma once + +#include +#include +#include "rasterizer.h" +#include +#include + +namespace CudaRasterizer +{ + template + static void obtain(char*& chunk, T*& ptr, std::size_t count, std::size_t alignment) + { + std::size_t offset = (reinterpret_cast(chunk) + alignment - 1) & ~(alignment - 1); + ptr = reinterpret_cast(offset); + chunk = reinterpret_cast(ptr + count); + } + + struct GeometryState + { + size_t scan_size; + float* depths; + char* scanning_space; + bool* clamped; + int* internal_radii; + float2* means2D; + float* cov3D; + float4* conic_opacity; + float* rgb; + uint32_t* point_offsets; + uint32_t* tiles_touched; + + static GeometryState fromChunk(char*& chunk, size_t P); + }; + + struct ImageState + { + uint2* ranges; + uint32_t* n_contrib; + float* accum_alpha; + + static ImageState fromChunk(char*& chunk, size_t N); + }; + + struct BinningState + { + size_t sorting_size; + uint64_t* point_list_keys_unsorted; + uint64_t* point_list_keys; + uint32_t* point_list_unsorted; + uint32_t* point_list; + char* list_sorting_space; + + static BinningState fromChunk(char*& chunk, size_t P); + }; + + template + size_t required(size_t P) + { + char* size = nullptr; + T::fromChunk(size, P); + return ((size_t)size) + 128; + } +}; \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/diff_gaussian_rasterization/__init__.py b/src/third-party/diff-gaussian-rasterization-w-depth/diff_gaussian_rasterization/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..742b2da4f3f981662b92f95e9c101b9235cf7d98 --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/diff_gaussian_rasterization/__init__.py @@ -0,0 +1,199 @@ +# +# Copyright (C) 2023, Inria +# GRAPHDECO research group, https://team.inria.fr/graphdeco +# All rights reserved. +# +# This software is free for non-commercial, research and evaluation use +# under the terms of the LICENSE.md file. +# +# For inquiries contact george.drettakis@inria.fr +# + +from typing import NamedTuple +import torch.nn as nn +import torch +from . import _C + +def rasterize_gaussians( + means3D, + means2D, + sh, + colors_precomp, + opacities, + scales, + rotations, + cov3Ds_precomp, + raster_settings, +): + return _RasterizeGaussians.apply( + means3D, + means2D, + sh, + colors_precomp, + opacities, + scales, + rotations, + cov3Ds_precomp, + raster_settings, + ) + +class _RasterizeGaussians(torch.autograd.Function): + @staticmethod + def forward( + ctx, + means3D, + means2D, + sh, + colors_precomp, + opacities, + scales, + rotations, + cov3Ds_precomp, + raster_settings, + ): + + # Restructure arguments the way that the C++ lib expects them + args = ( + raster_settings.bg, + means3D, + colors_precomp, + opacities, + scales, + rotations, + raster_settings.scale_modifier, + cov3Ds_precomp, + raster_settings.viewmatrix, + raster_settings.projmatrix, + raster_settings.tanfovx, + raster_settings.tanfovy, + raster_settings.image_height, + raster_settings.image_width, + sh, + raster_settings.sh_degree, + raster_settings.campos, + raster_settings.prefiltered, + raster_settings.z_threshold, + ) + + # Invoke C++/CUDA rasterizer + # num_rendered, color, radii, geomBuffer, binningBuffer, imgBuffer = _C.rasterize_gaussians(*args) + num_rendered, color, radii, geomBuffer, binningBuffer, imgBuffer, depth = _C.rasterize_gaussians(*args) + + # Keep relevant tensors for backward + ctx.raster_settings = raster_settings + ctx.num_rendered = num_rendered + ctx.save_for_backward(colors_precomp, means3D, scales, rotations, cov3Ds_precomp, radii, sh, geomBuffer, binningBuffer, imgBuffer) + return color, radii, depth + + @staticmethod + def backward(ctx, grad_out_color, _, depth): + + # Restore necessary values from context + num_rendered = ctx.num_rendered + raster_settings = ctx.raster_settings + colors_precomp, means3D, scales, rotations, cov3Ds_precomp, radii, sh, geomBuffer, binningBuffer, imgBuffer = ctx.saved_tensors + + # Restructure args as C++ method expects them + args = (raster_settings.bg, + means3D, + radii, + colors_precomp, + scales, + rotations, + raster_settings.scale_modifier, + cov3Ds_precomp, + raster_settings.viewmatrix, + raster_settings.projmatrix, + raster_settings.tanfovx, + raster_settings.tanfovy, + grad_out_color, + sh, + raster_settings.sh_degree, + raster_settings.campos, + geomBuffer, + num_rendered, + binningBuffer, + imgBuffer) + + # Compute gradients for relevant tensors by invoking backward method + grad_means2D, grad_colors_precomp, grad_opacities, grad_means3D, grad_cov3Ds_precomp, grad_sh, grad_scales, grad_rotations = _C.rasterize_gaussians_backward(*args) + + grads = ( + grad_means3D, + grad_means2D, + grad_sh, + grad_colors_precomp, + grad_opacities, + grad_scales, + grad_rotations, + grad_cov3Ds_precomp, + None, + ) + + return grads + +class GaussianRasterizationSettings(NamedTuple): + image_height: int + image_width: int + tanfovx : float + tanfovy : float + bg : torch.Tensor + scale_modifier : float + viewmatrix : torch.Tensor + projmatrix : torch.Tensor + sh_degree : int + campos : torch.Tensor + prefiltered : bool + z_threshold : float + +class GaussianRasterizer(nn.Module): + def __init__(self, raster_settings): + super().__init__() + self.raster_settings = raster_settings + + def markVisible(self, positions): + # Mark visible points (based on frustum culling for camera) with a boolean + with torch.no_grad(): + raster_settings = self.raster_settings + visible = _C.mark_visible( + positions, + raster_settings.viewmatrix, + raster_settings.projmatrix) + + return visible + + def forward(self, means3D, means2D, opacities, shs = None, colors_precomp = None, scales = None, rotations = None, cov3D_precomp = None): + + raster_settings = self.raster_settings + + if (shs is None and colors_precomp is None) or (shs is not None and colors_precomp is not None): + raise Exception('Please provide excatly one of either SHs or precomputed colors!') + + if ((scales is None or rotations is None) and cov3D_precomp is None) or ((scales is not None or rotations is not None) and cov3D_precomp is not None): + raise Exception('Please provide exactly one of either scale/rotation pair or precomputed 3D covariance!') + + if shs is None: + shs = torch.Tensor([]) + if colors_precomp is None: + colors_precomp = torch.Tensor([]) + + if scales is None: + scales = torch.Tensor([]) + if rotations is None: + rotations = torch.Tensor([]) + if cov3D_precomp is None: + cov3D_precomp = torch.Tensor([]) + + # Invoke C++/CUDA rasterization routine + return rasterize_gaussians( + means3D, + means2D, + shs, + colors_precomp, + opacities, + scales, + rotations, + cov3D_precomp, + raster_settings, + ) + diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/ext.cpp b/src/third-party/diff-gaussian-rasterization-w-depth/ext.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d768779579761238347972a973fbd1603d44235e --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/ext.cpp @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2023, Inria + * GRAPHDECO research group, https://team.inria.fr/graphdeco + * All rights reserved. + * + * This software is free for non-commercial, research and evaluation use + * under the terms of the LICENSE.md file. + * + * For inquiries contact george.drettakis@inria.fr + */ + +#include +#include "rasterize_points.h" + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("rasterize_gaussians", &RasterizeGaussiansCUDA); + m.def("rasterize_gaussians_backward", &RasterizeGaussiansBackwardCUDA); + m.def("mark_visible", &markVisible); +} \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/rasterize_points.cu b/src/third-party/diff-gaussian-rasterization-w-depth/rasterize_points.cu new file mode 100644 index 0000000000000000000000000000000000000000..e0a4dd72e86478e95cd0284ccfa360e24b9bfb00 --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/rasterize_points.cu @@ -0,0 +1,217 @@ +/* + * Copyright (C) 2023, Inria + * GRAPHDECO research group, https://team.inria.fr/graphdeco + * All rights reserved. + * + * This software is free for non-commercial, research and evaluation use + * under the terms of the LICENSE.md file. + * + * For inquiries contact george.drettakis@inria.fr + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "cuda_rasterizer/config.h" +#include "cuda_rasterizer/rasterizer.h" +#include +#include +#include + +std::function resizeFunctional(torch::Tensor& t) { + auto lambda = [&t](size_t N) { + t.resize_({(long long)N}); + return reinterpret_cast(t.contiguous().data_ptr()); + }; + return lambda; +} + +std::tuple +RasterizeGaussiansCUDA( + const torch::Tensor& background, + const torch::Tensor& means3D, + const torch::Tensor& colors, + const torch::Tensor& opacity, + const torch::Tensor& scales, + const torch::Tensor& rotations, + const float scale_modifier, + const torch::Tensor& cov3D_precomp, + const torch::Tensor& viewmatrix, + const torch::Tensor& projmatrix, + const float tan_fovx, + const float tan_fovy, + const int image_height, + const int image_width, + const torch::Tensor& sh, + const int degree, + const torch::Tensor& campos, + const bool prefiltered, + const float z_threshold) +{ + if (means3D.ndimension() != 2 || means3D.size(1) != 3) { + AT_ERROR("means3D must have dimensions (num_points, 3)"); + } + + const int P = means3D.size(0); + const int H = image_height; + const int W = image_width; + + auto int_opts = means3D.options().dtype(torch::kInt32); + auto float_opts = means3D.options().dtype(torch::kFloat32); + + torch::Tensor out_color = torch::full({NUM_CHANNELS, H, W}, 0.0, float_opts); + torch::Tensor radii = torch::full({P}, 0, means3D.options().dtype(torch::kInt32)); + torch::Tensor out_depth = torch::full({1, H, W}, 0.0, float_opts); + + torch::Device device(torch::kCUDA); + torch::TensorOptions options(torch::kByte); + torch::Tensor geomBuffer = torch::empty({0}, options.device(device)); + torch::Tensor binningBuffer = torch::empty({0}, options.device(device)); + torch::Tensor imgBuffer = torch::empty({0}, options.device(device)); + std::function geomFunc = resizeFunctional(geomBuffer); + std::function binningFunc = resizeFunctional(binningBuffer); + std::function imgFunc = resizeFunctional(imgBuffer); + + int rendered = 0; + if(P != 0) + { + int M = 0; + if(sh.size(0) != 0) + { + M = sh.size(1); + } + + rendered = CudaRasterizer::Rasterizer::forward( + geomFunc, + binningFunc, + imgFunc, + P, degree, M, + background.contiguous().data(), + W, H, + means3D.contiguous().data(), + sh.contiguous().data_ptr(), + colors.contiguous().data(), + opacity.contiguous().data(), + scales.contiguous().data_ptr(), + scale_modifier, + rotations.contiguous().data_ptr(), + cov3D_precomp.contiguous().data(), + viewmatrix.contiguous().data(), + projmatrix.contiguous().data(), + campos.contiguous().data(), + tan_fovx, + tan_fovy, + prefiltered, + z_threshold, + out_color.contiguous().data(), + out_depth.contiguous().data(), + radii.contiguous().data()); + } + return std::make_tuple(rendered, out_color, radii, geomBuffer, binningBuffer, imgBuffer, out_depth); +} + +std::tuple + RasterizeGaussiansBackwardCUDA( + const torch::Tensor& background, + const torch::Tensor& means3D, + const torch::Tensor& radii, + const torch::Tensor& colors, + const torch::Tensor& scales, + const torch::Tensor& rotations, + const float scale_modifier, + const torch::Tensor& cov3D_precomp, + const torch::Tensor& viewmatrix, + const torch::Tensor& projmatrix, + const float tan_fovx, + const float tan_fovy, + const torch::Tensor& dL_dout_color, + const torch::Tensor& sh, + const int degree, + const torch::Tensor& campos, + const torch::Tensor& geomBuffer, + const int R, + const torch::Tensor& binningBuffer, + const torch::Tensor& imageBuffer) +{ + const int P = means3D.size(0); + const int H = dL_dout_color.size(1); + const int W = dL_dout_color.size(2); + + int M = 0; + if(sh.size(0) != 0) + { + M = sh.size(1); + } + + torch::Tensor dL_dmeans3D = torch::zeros({P, 3}, means3D.options()); + torch::Tensor dL_dmeans2D = torch::zeros({P, 3}, means3D.options()); + torch::Tensor dL_dcolors = torch::zeros({P, NUM_CHANNELS}, means3D.options()); + torch::Tensor dL_dconic = torch::zeros({P, 2, 2}, means3D.options()); + torch::Tensor dL_dopacity = torch::zeros({P, 1}, means3D.options()); + torch::Tensor dL_dcov3D = torch::zeros({P, 6}, means3D.options()); + torch::Tensor dL_dsh = torch::zeros({P, M, 3}, means3D.options()); + torch::Tensor dL_dscales = torch::zeros({P, 3}, means3D.options()); + torch::Tensor dL_drotations = torch::zeros({P, 4}, means3D.options()); + + if(P != 0) + { + CudaRasterizer::Rasterizer::backward(P, degree, M, R, + background.contiguous().data(), + W, H, + means3D.contiguous().data(), + sh.contiguous().data(), + colors.contiguous().data(), + scales.data_ptr(), + scale_modifier, + rotations.data_ptr(), + cov3D_precomp.contiguous().data(), + viewmatrix.contiguous().data(), + projmatrix.contiguous().data(), + campos.contiguous().data(), + tan_fovx, + tan_fovy, + radii.contiguous().data(), + reinterpret_cast(geomBuffer.contiguous().data_ptr()), + reinterpret_cast(binningBuffer.contiguous().data_ptr()), + reinterpret_cast(imageBuffer.contiguous().data_ptr()), + dL_dout_color.contiguous().data(), + dL_dmeans2D.contiguous().data(), + dL_dconic.contiguous().data(), + dL_dopacity.contiguous().data(), + dL_dcolors.contiguous().data(), + dL_dmeans3D.contiguous().data(), + dL_dcov3D.contiguous().data(), + dL_dsh.contiguous().data(), + dL_dscales.contiguous().data(), + dL_drotations.contiguous().data()); + } + + return std::make_tuple(dL_dmeans2D, dL_dcolors, dL_dopacity, dL_dmeans3D, dL_dcov3D, dL_dsh, dL_dscales, dL_drotations); +} + +torch::Tensor markVisible( + torch::Tensor& means3D, + torch::Tensor& viewmatrix, + torch::Tensor& projmatrix) +{ + const int P = means3D.size(0); + + torch::Tensor present = torch::full({P}, false, means3D.options().dtype(at::kBool)); + + if(P != 0) + { + CudaRasterizer::Rasterizer::markVisible(P, + means3D.contiguous().data(), + viewmatrix.contiguous().data(), + projmatrix.contiguous().data(), + present.contiguous().data()); + } + + return present; +} \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/rasterize_points.h b/src/third-party/diff-gaussian-rasterization-w-depth/rasterize_points.h new file mode 100644 index 0000000000000000000000000000000000000000..ad552d9f9dad31ca6aa0897ebccc2c85935c2b40 --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/rasterize_points.h @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2023, Inria + * GRAPHDECO research group, https://team.inria.fr/graphdeco + * All rights reserved. + * + * This software is free for non-commercial, research and evaluation use + * under the terms of the LICENSE.md file. + * + * For inquiries contact george.drettakis@inria.fr + */ + +#pragma once +#include +#include +#include +#include + +std::tuple +RasterizeGaussiansCUDA( + const torch::Tensor& background, + const torch::Tensor& means3D, + const torch::Tensor& colors, + const torch::Tensor& opacity, + const torch::Tensor& scales, + const torch::Tensor& rotations, + const float scale_modifier, + const torch::Tensor& cov3D_precomp, + const torch::Tensor& viewmatrix, + const torch::Tensor& projmatrix, + const float tan_fovx, + const float tan_fovy, + const int image_height, + const int image_width, + const torch::Tensor& sh, + const int degree, + const torch::Tensor& campos, + const bool prefiltered, + const float z_threshold); + +std::tuple + RasterizeGaussiansBackwardCUDA( + const torch::Tensor& background, + const torch::Tensor& means3D, + const torch::Tensor& radii, + const torch::Tensor& colors, + const torch::Tensor& scales, + const torch::Tensor& rotations, + const float scale_modifier, + const torch::Tensor& cov3D_precomp, + const torch::Tensor& viewmatrix, + const torch::Tensor& projmatrix, + const float tan_fovx, + const float tan_fovy, + const torch::Tensor& dL_dout_color, + const torch::Tensor& sh, + const int degree, + const torch::Tensor& campos, + const torch::Tensor& geomBuffer, + const int R, + const torch::Tensor& binningBuffer, + const torch::Tensor& imageBuffer); + +torch::Tensor markVisible( + torch::Tensor& means3D, + torch::Tensor& viewmatrix, + torch::Tensor& projmatrix); \ No newline at end of file diff --git a/src/third-party/diff-gaussian-rasterization-w-depth/setup.py b/src/third-party/diff-gaussian-rasterization-w-depth/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..bb7220d2934d006ea756e35ecb0f391403b43d64 --- /dev/null +++ b/src/third-party/diff-gaussian-rasterization-w-depth/setup.py @@ -0,0 +1,34 @@ +# +# Copyright (C) 2023, Inria +# GRAPHDECO research group, https://team.inria.fr/graphdeco +# All rights reserved. +# +# This software is free for non-commercial, research and evaluation use +# under the terms of the LICENSE.md file. +# +# For inquiries contact george.drettakis@inria.fr +# + +from setuptools import setup +from torch.utils.cpp_extension import CUDAExtension, BuildExtension +import os +os.path.dirname(os.path.abspath(__file__)) + +setup( + name="diff_gaussian_rasterization", + packages=['diff_gaussian_rasterization'], + ext_modules=[ + CUDAExtension( + name="diff_gaussian_rasterization._C", + sources=[ + "cuda_rasterizer/rasterizer_impl.cu", + "cuda_rasterizer/forward.cu", + "cuda_rasterizer/backward.cu", + "rasterize_points.cu", + "ext.cpp"], + extra_compile_args={"nvcc": ["-I" + os.path.join(os.path.dirname(os.path.abspath(__file__)), "third_party/glm/")]}) + ], + cmdclass={ + 'build_ext': BuildExtension + } +)